PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.5.1
Jetpack – WP Security, Backup, Speed, & Growth v14.5.1
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 1 year ago facebook-likebox 11 years ago flickr 2 years ago gallery 1 year ago goodreads 2 years ago google-translate 1 year ago image-widget 8 years ago instagram 6 years ago internet-defense-league 2 years ago milestone 1 year ago my-community 8 years ago simple-payments 1 year ago social-icons 1 year ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 2 years ago authors.php 1 year ago blog-stats.php 1 year ago class-jetpack-eu-cookie-law-widget.php 1 year ago class-jetpack-instagram-widget.php 1 year ago contact-info.php 1 year ago customizer-controls.css 9 years ago customizer-utils.js 1 year ago facebook-likebox.php 2 years ago flickr.php 1 year ago gallery.php 1 year ago goodreads.php 1 year ago google-translate.php 1 year ago gravatar-profile.css 1 year ago gravatar-profile.php 1 year ago image-widget.php 1 year ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 1 year ago rsslinks-widget.php 3 years ago simple-payments.php 1 year ago social-icons.php 1 year ago social-media-icons.php 1 year ago top-posts.php 1 year ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 year ago upcoming-events.php 2 years ago wordpress-post-widget.php 1 year ago
upcoming-events.php
197 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 = array();
125 if ( ! empty( $instance['feed-url'] ) ) {
126 $events = $ical->get_events( $instance['feed-url'], $instance['count'] );
127 $events = $this->apply_timezone_offset( $events );
128 }
129 $ical->timezone = null;
130
131 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
132 if ( ! empty( $instance['title'] ) ) {
133 echo $args['before_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
134 echo esc_html( $instance['title'] );
135 echo $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
136 }
137
138 if ( empty( $instance['feed-url'] ) ) {
139 if ( current_user_can( 'manage_options' ) ) {
140 echo '<div class="error-message">';
141 esc_html_e( 'The events feed URL is not properly set up in this widget.', 'jetpack' );
142 echo '</div>';
143 }
144 } elseif ( ! $events ) {
145 echo '<p>';
146 esc_html_e( 'No upcoming events', 'jetpack' );
147 echo '</p>';
148 } else {
149 ?>
150 <ul class="upcoming-events">
151 <?php foreach ( $events as $event ) : ?>
152 <li>
153 <strong class="event-summary">
154 <?php
155 echo $ical->escape( stripslashes( $event['SUMMARY'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
156 ?>
157 </strong>
158 <span class="event-when"><?php echo esc_html( $ical->formatted_date( $event ) ); ?></span>
159 <?php if ( ! empty( $event['LOCATION'] ) ) : ?>
160 <span class="event-location">
161 <?php
162 echo $ical->escape( stripslashes( $event['LOCATION'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
163 ?>
164 </span>
165 <?php endif; ?>
166 <?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
167 <span class="event-description">
168 <?php
169 echo wp_trim_words( $ical->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
170 ?>
171 </span>
172 <?php endif; ?>
173 </li>
174 <?php endforeach; ?>
175 </ul>
176 <?php
177 }
178
179 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
180
181 /** This action is documented in modules/widgets/gravatar-profile.php */
182 do_action( 'jetpack_stats_extra', 'widget_view', 'upcoming_events' );
183 }
184
185 /**
186 * Left this function here for backward compatibility
187 * just incase a site using jetpack is also using this function
188 *
189 * @param array|false $events Array of events, false on failure.
190 */
191 private function apply_timezone_offset( $events ) {
192 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/icalendar-reader.php';
193
194 return ( new iCalendarReader() )->apply_timezone_offset( $events );
195 }
196 }
197