PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / widgets / upcoming-events.php
jetpack / modules / widgets Last commit date
authors 8 years ago contact-info 5 years ago eu-cookie-law 2 years ago facebook-likebox 11 years ago flickr 2 years ago gallery 4 years ago goodreads 5 years ago google-translate 4 years ago image-widget 8 years ago instagram 6 years ago internet-defense-league 3 years ago migrate-to-core 3 years ago milestone 2 years ago my-community 8 years ago simple-payments 4 years ago social-icons 4 years ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 3 years ago authors.php 3 years ago blog-stats.php 2 years ago class-jetpack-eu-cookie-law-widget.php 3 years ago class-jetpack-instagram-widget.php 2 years ago contact-info.php 2 years ago customizer-controls.css 9 years ago customizer-utils.js 6 years ago facebook-likebox.php 3 years ago flickr.php 3 years ago gallery.php 3 years ago goodreads.php 3 years ago google-translate.php 2 years ago gravatar-profile.css 10 years ago gravatar-profile.php 3 years ago image-widget.php 3 years ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 2 years ago rsslinks-widget.php 3 years ago simple-payments.php 2 years ago social-icons.php 2 years ago social-media-icons.php 3 years ago top-posts.php 2 years ago twitter-timeline-admin.js 6 years ago twitter-timeline.php 3 years ago upcoming-events.php 3 years ago wordpress-post-widget.php 4 years ago
upcoming-events.php
188 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Upcoming Events widget
4 *
5 * It relies on the icalendar-reader library.
6 *
7 * @package automattic/jetpack
8 */
9
10 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
11
12 /**
13 * Register the widget.
14 */
15 function upcoming_events_register_widgets() {
16 register_widget( Jetpack_Upcoming_Events_Widget::class );
17 }
18 add_action( 'widgets_init', 'upcoming_events_register_widgets' );
19
20 /**
21 * Widget class.
22 */
23 class Jetpack_Upcoming_Events_Widget extends WP_Widget {
24 /**
25 * Constructor
26 */
27 public function __construct() {
28 parent::__construct(
29 'upcoming_events_widget',
30 /** This filter is documented in modules/widgets/facebook-likebox.php */
31 apply_filters( 'jetpack_widget_name', __( 'Upcoming Events', 'jetpack' ) ),
32 array(
33 'description' => __( 'Display upcoming events from an iCalendar feed.', 'jetpack' ),
34 'customize_selective_refresh' => true,
35 )
36 );
37 if ( is_active_widget( false, false, $this->id_base ) ) {
38 add_action( 'wp_head', array( $this, 'css' ) );
39 }
40 }
41
42 /**
43 * Output CSS in the header everywhere where the widget is active.
44 */
45 public function css() {
46 ?>
47 <style type="text/css">
48 .upcoming-events li {
49 margin-bottom: 10px;
50 }
51 .upcoming-events li span {
52 display: block;
53 }
54 </style>
55 <?php
56 }
57
58 /**
59 * Displays the form for this widget on the Widgets page of the WP Admin area.
60 *
61 * @param array $instance Instance configuration.
62 *
63 * @return void
64 */
65 public function form( $instance ) {
66 $defaults = array(
67 'title' => __( 'Upcoming Events', 'jetpack' ),
68 'feed-url' => '',
69 'count' => 3,
70 );
71 $instance = array_merge( $defaults, (array) $instance );
72 ?>
73
74 <p>
75 <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
76 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
77 </p>
78
79 <p>
80 <label for="<?php echo esc_attr( $this->get_field_id( 'feed-url' ) ); ?>"><?php esc_html_e( 'iCalendar Feed URL:', 'jetpack' ); ?></label>
81 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'feed-url' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'feed-url' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['feed-url'] ); ?>" />
82 </p>
83
84 <p>
85 <label for="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>"><?php esc_html_e( 'Items to show:', 'jetpack' ); ?></label>
86 <select id="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'count' ) ); ?>">
87 <?php for ( $i = 1; $i <= 10; $i++ ) { ?>
88 <option <?php selected( $instance['count'], $i ); ?>><?php echo (int) $i; ?></option>
89 <?php } ?>
90 <option value="0" <?php selected( $instance['count'], 0 ); ?>><?php esc_html_e( 'All', 'jetpack' ); ?></option>
91 </select>
92 </p>
93 <?php
94 }
95
96 /**
97 * Deals with the settings when they are saved by the admin.
98 *
99 * @param array $new_instance New configuration values.
100 * @param array $old_instance Old configuration values.
101 *
102 * @return array
103 */
104 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
105 $instance = array();
106 $instance['title'] = wp_strip_all_tags( $new_instance['title'] );
107 $instance['feed-url'] = wp_strip_all_tags( $new_instance['feed-url'] );
108 $instance['count'] = min( absint( $new_instance['count'] ), 10 ); // 10 or less
109 return $instance;
110 }
111
112 /**
113 * Outputs the HTML for this widget.
114 *
115 * @param array $args An array of standard parameters for widgets in this theme.
116 * @param array $instance An array of settings for this widget instance.
117 *
118 * @return void Echoes it's output
119 */
120 public function widget( $args, $instance ) {
121 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/icalendar-reader.php';
122
123 $ical = new iCalendarReader();
124 $events = $ical->get_events( $instance['feed-url'], $instance['count'] );
125 $events = $this->apply_timezone_offset( $events );
126 $ical->timezone = null;
127
128 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
129 if ( ! empty( $instance['title'] ) ) {
130 echo $args['before_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
131 echo esc_html( $instance['title'] );
132 echo $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
133 }
134
135 if ( ! $events ) : // nothing to display?
136 ?>
137 <p><?php esc_html_e( 'No upcoming events', 'jetpack' ); ?></p>
138 <?php
139 else :
140 ?>
141 <ul class="upcoming-events">
142 <?php foreach ( $events as $event ) : ?>
143 <li>
144 <strong class="event-summary">
145 <?php
146 echo $ical->escape( stripslashes( $event['SUMMARY'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
147 ?>
148 </strong>
149 <span class="event-when"><?php echo esc_html( $ical->formatted_date( $event ) ); ?></span>
150 <?php if ( ! empty( $event['LOCATION'] ) ) : ?>
151 <span class="event-location">
152 <?php
153 echo $ical->escape( stripslashes( $event['LOCATION'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
154 ?>
155 </span>
156 <?php endif; ?>
157 <?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
158 <span class="event-description">
159 <?php
160 echo wp_trim_words( $ical->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
161 ?>
162 </span>
163 <?php endif; ?>
164 </li>
165 <?php endforeach; ?>
166 </ul>
167 <?php
168 endif;
169
170 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
171
172 /** This action is documented in modules/widgets/gravatar-profile.php */
173 do_action( 'jetpack_stats_extra', 'widget_view', 'upcoming_events' );
174 }
175
176 /**
177 * Left this function here for backward compatibility
178 * just incase a site using jetpack is also using this function
179 *
180 * @param array|false $events Array of events, false on failure.
181 */
182 private function apply_timezone_offset( $events ) {
183 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/icalendar-reader.php';
184
185 return ( new iCalendarReader() )->apply_timezone_offset( $events );
186 }
187 }
188