WordPress.org

Plugin Directory


Ignore:
Timestamp:
03/20/17 14:51:08 (4 months ago)
Author:
bastho
Message:

Better support of timezones in VCS/ICS exports

File:
1 edited

Legend:

Unmodified
Added
Removed
  • event-post/trunk/eventpost.php

    r1617766 r1617929  
    633633 
    634634            $timezone_string = get_option('timezone_string'); 
    635             $gmt_offset = get_option('gmt_offset '); 
    636             $codegmt = 0; 
    637             if ($gmt_offset != 0 && substr($gmt_offset, 0, 1) != '-' && substr($gmt_offset, 0, 1) != '+') { 
    638                 $codegmt = $gmt_offset * -1; 
    639                 $gmt_offset = '+' . $gmt_offset; 
    640             } 
     635            $gmt_offset = $gmt = $this->get_gmt_offset(); 
    641636 
    642637            if (!is_admin() && $event->time_end > current_time('timestamp') && ( 
     
    645640                    ($this->settings['export'] == 'list' && !is_single() ) 
    646641                    )) { 
     642 
    647643                // Export event 
    648644                $title = urlencode($post->post_title); 
    649645                $address = urlencode($post->address); 
    650646                $url = urlencode($post->guid); 
    651  
    652647                $mt = strtotime($codegmt . ' Hours', $event->time_start); 
    653648                $d_s = date("Ymd", $mt) . 'T' . date("His", $mt); 
     
    657652 
    658653                // format de date ICS 
    659                 $ics_url = plugins_url('export/ics.php', __FILE__) . '?t=' . $title . '&u=' . $uid . '&sd=' . $d_s . '&ed=' . $d_e . '&a=' . $address . '&d=' . $url . '&tz=%3BTZID%3D' . urlencode($timezone_string); 
     654                $ics_url = add_query_arg(array( 
     655                    't'=>$title, 
     656                    'u'=>$uid, 
     657                    'sd'=>$d_s, 
     658                    'ed'=>$d_e, 
     659                    'a'=>$address, 
     660                    'd'=>$url, 
     661                    'tz'=>$timezone_string, 
     662                    'gmt'=>urlencode($gmt_offset) 
     663                ), plugins_url('export/ics.php', __FILE__)); 
    660664 
    661665                // format de date Google cal 
    662                 $google_url = 'https://www.google.com/calendar/event?action=TEMPLATE&text=' . $title . '&dates=' . $d_s . 'Z/' . $d_e . 'Z&details=' . $url . '&ctz='.$timezone_string.'&location=' . $address . '&trp=false&sprop=&sprop=name'; 
     666                //$google_url = 'https://www.google.com/calendar/event?action=TEMPLATE&text=' . $title . '&dates=' . $d_s . 'Z/' . $d_e . 'Z&details=' . $url . '&ctz='.$timezone_string.'&location=' . $address . '&trp=false&sprop=&sprop=name'; 
     667                $google_url = add_query_arg(array( 
     668                    'action'=>'TEMPLATE', 
     669                    'trp'=>'false', 
     670                    'sprop'=>'name', 
     671                    'text'=>$title, 
     672                    'dates'=>$d_s.'Z/'.$d_e.'Z', 
     673                    'location'=>$address, 
     674                    'details'=>$url, 
     675                    'ctz'=>$timezone_string, 
     676                    'gmt'=> urlencode($gmt_offset) 
     677                ), 'https://www.google.com/calendar/event'); 
    663678 
    664679                // format de date VCS 
    665                 $vcs_url = plugins_url('export/vcs.php', __FILE__) . '?t=' . $title . '&u=' . $uid . '&sd=' . $d_s . '&ed=' . $d_e . '&a=' . $address . '&d=' . $url . '&tz=%3BTZID%3D' . urlencode($timezone_string); 
    666  
     680                $vcs_url = add_query_arg(array( 
     681                    't'=>$title, 
     682                    'u'=>$uid, 
     683                    'sd'=>$d_s, 
     684                    'ed'=>$d_e, 
     685                    'a'=>$address, 
     686                    'd'=>$url, 
     687                    'tz'=>$timezone_string, 
     688                    'gmt'=>$gmt_offset 
     689                ), plugins_url('export/vcs.php', __FILE__)); 
    667690                $dates.=' 
    668691                        <span class="eventpost-date-export"> 
     
    21902213     */ 
    21912214    public function ics_date($timestamp){ 
    2192     return date("Ymd",$timestamp).'T'.date("His",$timestamp).'Z'; 
     2215    return date("Ymd",$timestamp).'T'.date("His",$timestamp); 
     2216    } 
     2217 
     2218    public function get_gmt_offset(){ 
     2219        $gmt_offset = get_option('gmt_offset '); 
     2220        $codegmt = 0; 
     2221        if ($gmt_offset != 0 && substr($gmt_offset, 0, 1) != '-' && substr($gmt_offset, 0, 1) != '+') { 
     2222            $codegmt = $gmt_offset * -1; 
     2223            $gmt_offset = '+' . $gmt_offset; 
     2224        } 
     2225        if(abs($gmt_offset < 10)){ 
     2226            $gmt_offset = substr($gmt_offset, 0, 1).'0'.substr($gmt_offset, 1); 
     2227        } 
     2228        return $gmt_offset; 
    21932229    } 
    21942230 
     
    21982234    public function feed(){ 
    21992235    if(false !== $cat=\filter_input(INPUT_GET, 'cat',FILTER_SANITIZE_STRING)){ 
    2200         $timezone_string = get_option('timezone_string'); 
    2201         date_default_timezone_set($timezone_string); 
     2236        $vtz = get_option('timezone_string'); 
     2237            $gmt = $this->get_gmt_offset(); 
     2238        date_default_timezone_set($vtz); 
     2239            $separator = "\n"; 
    22022240 
    22032241        header("content-type:text/calendar"); 
     
    22072245        header("Cache-Control: public"); 
    22082246        header("Content-Disposition: attachment; filename=". str_replace('+','-',urlencode(get_option('blogname').'-'.$cat)).".ics;" ); 
    2209         echo"BEGIN:VCALENDAR\r\n" 
    2210         . "PRODID:EventPost\r\n" 
    2211         . "VERSION:2.0\r\n" 
    2212         . "BEGIN:VTIMEZONE\r\n" 
    2213         . "TZID:$timezone_string\r\n" 
    2214         . "X-LIC-LOCATION:$timezone_string\r\n" 
    2215         . "END:VTIMEZONE"; 
    2216  
    2217         $events=$this->get_events(array('cat'=>$cat,'nb'=>-1)); 
     2247 
     2248            $props = array(); 
     2249 
     2250            // General 
     2251            $props[] =  'BEGIN:VCALENDAR'; 
     2252            $props[] =  'PRODID://WordPress//Event-Post V'. file_get_contents(('VERSION')).'//EN'; 
     2253            $props[] =  'VERSION:2.0'; 
     2254 
     2255            // Timezone 
     2256            if(!empty($vtz)){ 
     2257                array_push($props, 
     2258                    'BEGIN:VTIMEZONE', 
     2259                    'TZID:'.$vtz, 
     2260                    'BEGIN:DAYLIGHT', 
     2261                    'TZOFFSETFROM:+0100', 
     2262                    'TZOFFSETTO:'.($gmt).'00', 
     2263                    'DTSTART:19700329T020000', 
     2264                    'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3', 
     2265                    'END:DAYLIGHT', 
     2266                    'BEGIN:STANDARD', 
     2267                    'TZOFFSETFROM:'.($gmt).'00', 
     2268                    'TZOFFSETTO:+0100', 
     2269                    'TZNAME:CET', 
     2270                    'DTSTART:19701025T030000', 
     2271                    'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10', 
     2272                    'END:STANDARD', 
     2273                    'END:VTIMEZONE' 
     2274                ); 
     2275            } 
     2276 
     2277            // Events 
     2278            $events=$this->get_events(array('cat'=>$cat,'nb'=>-1)); 
    22182279        foreach ($events as $event) { 
    2219         echo"BEGIN:VEVENT\r\n" 
    2220             . "CREATED:".$this->ics_date(strtotime($event->post_date))."\r\n" 
    2221             . "LAST-MODIFIED:".$this->ics_date(strtotime($event->post_modified))."\r\n" 
    2222             . "SUMMARY:".$event->post_title."\r\n" 
    2223             . "UID:".md5(site_url()."_eventpost_".$event->ID)."\r\n" 
    2224             . "LOCATION:".str_replace(',','\,',$event->address)."\r\n" 
    2225             . "DTSTART;TZID=$timezone_string:".$this->ics_date($event->time_start)."\r\n" 
    2226             . "DTEND;TZID=$timezone_string:".$this->ics_date($event->time_end)."\r\n" 
    2227             . "DESCRIPTION:".$event->guid."\r\n" 
    2228             . "END:VEVENT\r\n"; 
    2229         } 
    2230         echo"END:VCALENDAR\r\n"; 
    2231         exit; 
     2280                array_push($props, 
     2281                    'BEGIN:VEVENT', 
     2282                    'CREATED:'.$this->ics_date(strtotime($event->post_date)).'Z', 
     2283                    'LAST-MODIFIED:'.$this->ics_date(strtotime($event->post_modified)).'Z', 
     2284                    'SUMMARY:'.$event->post_title, 
     2285                    'UID:'.md5(site_url()."_eventpost_".$event->ID), 
     2286                    'LOCATION:'.str_replace(',','\,',$event->address), 
     2287                    'DTSTART'.(!empty($vtz)?';TZID='.$vtz:'').':'.$this->ics_date($event->time_start).(!empty($vtz)?'':'Z'), 
     2288                    'DTEND'.(!empty($vtz)?';TZID='.$vtz:'').':'.$this->ics_date($event->time_end).(!empty($vtz)?'':'Z'), 
     2289                    'DESCRIPTION:'.$event->guid, 
     2290                    'END:VEVENT' 
     2291                ); 
     2292            } 
     2293 
     2294            // End 
     2295            $props[] =  'END:VCALENDAR'; 
     2296 
     2297            echo implode($separator, $props); 
     2298            exit; 
    22322299    } 
    22332300    } 
Note: See TracChangeset for help on using the changeset viewer.