WordPress.org

Plugin Directory

Changeset 1617929


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

Better support of timezones in VCS/ICS exports

Location:
event-post/trunk
Files:
1 added
4 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    } 
  • event-post/trunk/export/ics.php

    r782596 r1617929  
    11<?php 
    22if(isset($_GET['t']) && isset($_GET['sd']) && isset($_GET['ed']) && isset($_GET['d']) && isset($_GET['a']) && isset($_GET['u'])){ 
    3     date_default_timezone_set('Europe/Paris') ; 
    43    header("content-type:text/x-vcalendar"); 
    54    header("Pragma: public"); 
     
    76    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    87    header("Cache-Control: public"); 
    9     header("Content-Disposition: attachment; filename=".$_GET['u'].".ics;" ); 
    10     echo"BEGIN:VCALENDAR\r\nVERSION:2.0\r\n"; 
    11     $sta = array('ACCEPTED','COMPLETED'); 
    12     $mt = strtotime($_GET['sd']); 
    13     $vdat = date("Ymd",$mt).'T'.date("His",$mt).'Z'; 
     8    header("Content-Disposition: attachment; filename=".$_GET['u'].'.'.(isset($format)?$format:'ics').';' ); 
     9 
     10    $date_start = $_GET['sd']; 
    1411    $vtz = $_GET['tz']; 
    15     $mte = strtotime($_GET['ed']); 
    16     $vdate = date("Ymd",$mte).'T'.date("His",$mte).'Z'; 
    17     //str_replace('-','',$m_date).'T'.str_replace(':','',$m_heure).'Z'; 
    18     echo"BEGIN:VEVENT\r\nPRODID:agenda_eelv\r\nSUMMARY:".stripslashes($_GET['t'])."\r\nUID:".$_GET['u']."\r\nLOCATION:".stripslashes($_GET['a'])."\r\nDTEND$vtz:$vdate\r\nDTSTART$vtz:$vdat\r\nDESCRIPTION:".stripslashes($_GET['d'])."\r\nEND:VEVENT\r\n"; 
    19     echo"END:VCALENDAR\r\n"; 
     12    $gmt = $_GET['gmt']; 
     13    $date_end = $_GET['ed']; 
     14 
     15        $separator = "\n"; 
     16 
     17        $props = array(); 
     18 
     19        // General 
     20        $props[] =  'BEGIN:VCALENDAR'; 
     21        $props[] =  'PRODID://WordPress//Event-Post V'. file_get_contents(('../VERSION')).'//EN'; 
     22        $props[] =  'VERSION:2.0'; 
     23 
     24        // Timezone 
     25        if(!empty($vtz)){ 
     26            array_push($props, 
     27                'BEGIN:VTIMEZONE', 
     28                'TZID:'.$vtz, 
     29                'BEGIN:DAYLIGHT', 
     30                'TZOFFSETFROM:+0100', 
     31                'TZOFFSETTO:'.($gmt).'00', 
     32                //'TZNAME:CEST', 
     33                'DTSTART:19700329T020000', 
     34                'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3', 
     35                'END:DAYLIGHT', 
     36                'BEGIN:STANDARD', 
     37                'TZOFFSETFROM:'.($gmt).'00', 
     38                'TZOFFSETTO:+0100', 
     39                'TZNAME:CET', 
     40                'DTSTART:19701025T030000', 
     41                'RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10', 
     42                'END:STANDARD', 
     43                'END:VTIMEZONE' 
     44            ); 
     45        } 
     46 
     47        // Event 
     48        array_push($props, 
     49            'BEGIN:VEVENT', 
     50            'SUMMARY:'.stripslashes($_GET['t']), 
     51            'UID:'.$_GET['u'], 
     52            'LOCATION:'.stripslashes($_GET['a']), 
     53            'DTSTART'.(!empty($vtz)?';TZID='.$vtz:'').':'.$date_start.(!empty($vtz)?'':'Z'), 
     54            'DTEND'.(!empty($vtz)?';TZID='.$vtz:'').':'.$date_end.(!empty($vtz)?'':'Z'), 
     55            'DESCRIPTION:'.stripslashes($_GET['d']), 
     56            'END:VEVENT' 
     57        ); 
     58 
     59        // End 
     60        $props[] =  'END:VCALENDAR'; 
     61 
     62    echo implode($separator, $props); 
    2063} 
    2164?> 
  • event-post/trunk/export/vcs.php

    r782596 r1617929  
    11<?php 
    2 if(isset($_GET['t']) && isset($_GET['sd']) && isset($_GET['ed']) && isset($_GET['d']) && isset($_GET['a']) && isset($_GET['u'])){ 
    3     date_default_timezone_set('Europe/Paris') ; 
    4     header("content-type:text/x-vcalendar"); 
    5     header("Pragma: public"); 
    6     header("Expires: 0"); 
    7     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    8     header("Cache-Control: public"); 
    9     header("Content-Disposition: attachment; filename=".$_GET['u'].".vcs;" ); 
    10     echo"BEGIN:VCALENDAR\r\nVERSION:2.0\r\n"; 
    11     $sta = array('ACCEPTED','COMPLETED'); 
    12     $mt = strtotime($_GET['sd']); 
    13     $vdat = date("Ymd",$mt).'T'.date("His",$mt).'Z'; 
    14     $vtz = $_GET['tz']; 
    15     $mte = strtotime($_GET['ed']); 
    16     $vdate = date("Ymd",$mte).'T'.date("His",$mte).'Z'; 
    17     //str_replace('-','',$m_date).'T'.str_replace(':','',$m_heure).'Z'; 
    18     echo"BEGIN:VEVENT\r\nPRODID:agenda_eelv\r\nSUMMARY:".stripslashes($_GET['t'])."\r\nUID:".$_GET['u']."\r\nLOCATION:".stripslashes($_GET['a'])."\r\nDTEND$vtz:$vdate\r\nDTSTART$vtz:$vdat\r\nDESCRIPTION:".stripslashes($_GET['d'])."\r\nEND:VEVENT\r\n"; 
    19     echo"END:VCALENDAR\r\n"; 
    20 } 
    21 ?> 
     2$format='vcs'; 
     3include('ics.php'); 
  • event-post/trunk/readme.txt

    r1617772 r1617929  
    202202- Add support for shortcake term selector (requires [shortcake](https://wordpress.org/plugins/shortcode-ui/) 0.7+) 
    203203 
     204- Better support of timezones in VCS/ICS exports 
    204205- Fix wrong parameter in calendar shortcode UI register 
    205206- Fix displaying icons in wrong post's title in single pages 
Note: See TracChangeset for help on using the changeset viewer.