1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
<?php
class Jetpack_Upcoming_Events_Widget extends WP_Widget {
function __construct() {
parent::__construct(
'upcoming_events_widget',
/** This filter is documented in modules/widgets/facebook-likebox.php */
apply_filters( 'jetpack_widget_name', __( 'Upcoming Events', 'jetpack' ) ),
array(
'description' => __( 'Display upcoming events from an iCalendar feed.', 'jetpack' ),
'customize_selective_refresh' => true,
)
);
if ( is_active_widget( false, false, $this->id_base ) ) {
add_action( 'wp_head', array( $this, 'css' ) );
}
}
function css() {
?>
<style type="text/css">
.upcoming-events li {
margin-bottom: 10px;
}
.upcoming-events li span {
display: block;
}
</style>
<?php
}
function form( $instance ) {
$defaults = array(
'title' => __( 'Upcoming Events', 'jetpack' ),
'feed-url' => '',
'count' => 3
);
$instance = array_merge( $defaults, (array) $instance );
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'jetpack' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'feed-url' ); ?>"><?php _e( 'iCalendar Feed URL:', 'jetpack' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'feed-url' ); ?>" name="<?php echo $this->get_field_name( 'feed-url' ); ?>" type="text" value="<?php echo esc_attr( $instance['feed-url'] ); ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Items to show:', 'jetpack' ); ?></label>
<select id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>">
<?php $i = 1;
while ( $i <= 10 ) { ?>
<option <?php selected( $instance['count'], $i ) ?>><?php echo $i; ?></option>
<?php $i++; } ?>
<option value="0" <?php selected( $instance['count'], 0 ) ?>><?php _e( 'All' , 'jetpack' ) ?></option>
</select>
</p>
<?php
}
function update( $new_instance, $old_instance ) {
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['feed-url'] = strip_tags( $new_instance['feed-url'] );
$instance['count'] = min( absint( $new_instance['count'] ), 10 ); // 10 or less
return $instance;
}
function widget( $args, $instance ) {
jetpack_require_lib( 'icalendar-reader' );
$ical = new iCalendarReader();
$events = $ical->get_events( $instance['feed-url'], $instance['count'] );
$events = $this->apply_timezone_offset( $events );
$ical->timezone = null;
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'];
echo esc_html( $instance['title'] );
echo $args['after_title'];
}
if ( ! $events ) : // nothing to display?
?>
<p><?php echo __( 'No upcoming events', 'jetpack' ) ?></p>
<?php
else :
?>
<ul class="upcoming-events">
<?php foreach ( $events as $event ) : ?>
<li>
<strong class="event-summary"><?php echo $ical->escape( stripslashes( $event['SUMMARY'] ) ); ?></strong>
<span class="event-when"><?php echo $ical->formatted_date( $event ); ?></span>
<?php if ( ! empty( $event['LOCATION'] ) ) : ?>
<span class="event-location"><?php echo $ical->escape( stripslashes( $event['LOCATION'] ) ); ?></span>
<?php endif; ?>
<?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
<span class="event-description"><?php echo wp_trim_words( $ical->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); ?></span>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php
endif;
echo $args['after_widget'];
/** This action is documented in modules/widgets/gravatar-profile.php */
do_action( 'jetpack_stats_extra', 'widget_view', 'grofile' );
}
// Left this function here for backward compatibility
// just incase a site using jetpack is also using this function
function apply_timezone_offset( $events ) {
jetpack_require_lib( 'icalendar-reader' );
$ical = new iCalendarReader();
return $ical->apply_timezone_offset( $events );
}
}
function upcoming_events_register_widgets() {
register_widget( 'Jetpack_Upcoming_Events_Widget' );
}
add_action( 'widgets_init', 'upcoming_events_register_widgets' );
|