Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/modules/widgets
File: upcoming-events.php
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
[0] Fix | Delete
/**
[1] Fix | Delete
* Upcoming Events widget
[2] Fix | Delete
*
[3] Fix | Delete
* It relies on the icalendar-reader library.
[4] Fix | Delete
*
[5] Fix | Delete
* @package automattic/jetpack
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[9] Fix | Delete
exit( 0 );
[10] Fix | Delete
}
[11] Fix | Delete
[12] Fix | Delete
// phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
[13] Fix | Delete
[14] Fix | Delete
/**
[15] Fix | Delete
* Register the widget.
[16] Fix | Delete
*/
[17] Fix | Delete
function upcoming_events_register_widgets() {
[18] Fix | Delete
register_widget( Jetpack_Upcoming_Events_Widget::class );
[19] Fix | Delete
}
[20] Fix | Delete
add_action( 'widgets_init', 'upcoming_events_register_widgets' );
[21] Fix | Delete
[22] Fix | Delete
/**
[23] Fix | Delete
* Widget class.
[24] Fix | Delete
*/
[25] Fix | Delete
class Jetpack_Upcoming_Events_Widget extends WP_Widget {
[26] Fix | Delete
/**
[27] Fix | Delete
* Constructor
[28] Fix | Delete
*/
[29] Fix | Delete
public function __construct() {
[30] Fix | Delete
parent::__construct(
[31] Fix | Delete
'upcoming_events_widget',
[32] Fix | Delete
/** This filter is documented in modules/widgets/facebook-likebox.php */
[33] Fix | Delete
apply_filters( 'jetpack_widget_name', __( 'Upcoming Events', 'jetpack' ) ),
[34] Fix | Delete
array(
[35] Fix | Delete
'description' => __( 'Display upcoming events from an iCalendar feed.', 'jetpack' ),
[36] Fix | Delete
'customize_selective_refresh' => true,
[37] Fix | Delete
)
[38] Fix | Delete
);
[39] Fix | Delete
if ( is_active_widget( false, false, $this->id_base ) ) {
[40] Fix | Delete
add_action( 'wp_head', array( $this, 'css' ) );
[41] Fix | Delete
}
[42] Fix | Delete
}
[43] Fix | Delete
[44] Fix | Delete
/**
[45] Fix | Delete
* Output CSS in the header everywhere where the widget is active.
[46] Fix | Delete
*/
[47] Fix | Delete
public function css() {
[48] Fix | Delete
?>
[49] Fix | Delete
<style type="text/css">
[50] Fix | Delete
.upcoming-events li {
[51] Fix | Delete
margin-bottom: 10px;
[52] Fix | Delete
}
[53] Fix | Delete
.upcoming-events li span {
[54] Fix | Delete
display: block;
[55] Fix | Delete
}
[56] Fix | Delete
</style>
[57] Fix | Delete
<?php
[58] Fix | Delete
}
[59] Fix | Delete
[60] Fix | Delete
/**
[61] Fix | Delete
* Displays the form for this widget on the Widgets page of the WP Admin area.
[62] Fix | Delete
*
[63] Fix | Delete
* @param array $instance Instance configuration.
[64] Fix | Delete
*
[65] Fix | Delete
* @return string|void
[66] Fix | Delete
*/
[67] Fix | Delete
public function form( $instance ) {
[68] Fix | Delete
$defaults = array(
[69] Fix | Delete
'title' => __( 'Upcoming Events', 'jetpack' ),
[70] Fix | Delete
'feed-url' => '',
[71] Fix | Delete
'count' => 3,
[72] Fix | Delete
);
[73] Fix | Delete
$instance = array_merge( $defaults, (array) $instance );
[74] Fix | Delete
?>
[75] Fix | Delete
[76] Fix | Delete
<p>
[77] Fix | Delete
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
[78] Fix | Delete
<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'] ); ?>" />
[79] Fix | Delete
</p>
[80] Fix | Delete
[81] Fix | Delete
<p>
[82] Fix | Delete
<label for="<?php echo esc_attr( $this->get_field_id( 'feed-url' ) ); ?>"><?php esc_html_e( 'iCalendar Feed URL:', 'jetpack' ); ?></label>
[83] Fix | Delete
<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'] ); ?>" />
[84] Fix | Delete
</p>
[85] Fix | Delete
[86] Fix | Delete
<p>
[87] Fix | Delete
<label for="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>"><?php esc_html_e( 'Items to show:', 'jetpack' ); ?></label>
[88] Fix | Delete
<select id="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'count' ) ); ?>">
[89] Fix | Delete
<?php for ( $i = 1; $i <= 10; $i++ ) { ?>
[90] Fix | Delete
<option <?php selected( $instance['count'], $i ); ?>><?php echo esc_html( (string) $i ); ?></option>
[91] Fix | Delete
<?php } ?>
[92] Fix | Delete
<option value="0" <?php selected( $instance['count'], 0 ); ?>><?php esc_html_e( 'All', 'jetpack' ); ?></option>
[93] Fix | Delete
</select>
[94] Fix | Delete
</p>
[95] Fix | Delete
<?php
[96] Fix | Delete
}
[97] Fix | Delete
[98] Fix | Delete
/**
[99] Fix | Delete
* Deals with the settings when they are saved by the admin.
[100] Fix | Delete
*
[101] Fix | Delete
* @param array $new_instance New configuration values.
[102] Fix | Delete
* @param array $old_instance Old configuration values.
[103] Fix | Delete
*
[104] Fix | Delete
* @return array
[105] Fix | Delete
*/
[106] Fix | Delete
public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
[107] Fix | Delete
$instance = array();
[108] Fix | Delete
$instance['title'] = wp_strip_all_tags( $new_instance['title'] );
[109] Fix | Delete
$instance['feed-url'] = wp_strip_all_tags( $new_instance['feed-url'] );
[110] Fix | Delete
$instance['count'] = min( absint( $new_instance['count'] ), 10 ); // 10 or less
[111] Fix | Delete
return $instance;
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
/**
[115] Fix | Delete
* Outputs the HTML for this widget.
[116] Fix | Delete
*
[117] Fix | Delete
* @param array $args An array of standard parameters for widgets in this theme.
[118] Fix | Delete
* @param array $instance An array of settings for this widget instance.
[119] Fix | Delete
*
[120] Fix | Delete
* @return void Echoes it's output
[121] Fix | Delete
*/
[122] Fix | Delete
public function widget( $args, $instance ) {
[123] Fix | Delete
require_once JETPACK__PLUGIN_DIR . '/_inc/lib/icalendar-reader.php';
[124] Fix | Delete
[125] Fix | Delete
$ical = new iCalendarReader();
[126] Fix | Delete
$events = array();
[127] Fix | Delete
if ( ! empty( $instance['feed-url'] ) ) {
[128] Fix | Delete
$events = $ical->get_events( $instance['feed-url'], $instance['count'] );
[129] Fix | Delete
$events = $this->apply_timezone_offset( $events );
[130] Fix | Delete
}
[131] Fix | Delete
$ical->timezone = null;
[132] Fix | Delete
[133] Fix | Delete
echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[134] Fix | Delete
if ( ! empty( $instance['title'] ) ) {
[135] Fix | Delete
echo $args['before_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[136] Fix | Delete
echo esc_html( $instance['title'] );
[137] Fix | Delete
echo $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[138] Fix | Delete
}
[139] Fix | Delete
[140] Fix | Delete
if ( empty( $instance['feed-url'] ) ) {
[141] Fix | Delete
if ( current_user_can( 'manage_options' ) ) {
[142] Fix | Delete
echo '<div class="error-message">';
[143] Fix | Delete
esc_html_e( 'The events feed URL is not properly set up in this widget.', 'jetpack' );
[144] Fix | Delete
echo '</div>';
[145] Fix | Delete
}
[146] Fix | Delete
} elseif ( ! $events ) {
[147] Fix | Delete
echo '<p>';
[148] Fix | Delete
esc_html_e( 'No upcoming events', 'jetpack' );
[149] Fix | Delete
echo '</p>';
[150] Fix | Delete
} else {
[151] Fix | Delete
?>
[152] Fix | Delete
<ul class="upcoming-events">
[153] Fix | Delete
<?php foreach ( $events as $event ) : ?>
[154] Fix | Delete
<li>
[155] Fix | Delete
<strong class="event-summary">
[156] Fix | Delete
<?php
[157] Fix | Delete
echo $ical->escape( stripslashes( $event['SUMMARY'] ?? '' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
[158] Fix | Delete
?>
[159] Fix | Delete
</strong>
[160] Fix | Delete
<span class="event-when"><?php echo esc_html( $ical->formatted_date( $event ) ); ?></span>
[161] Fix | Delete
<?php if ( ! empty( $event['LOCATION'] ) ) : ?>
[162] Fix | Delete
<span class="event-location">
[163] Fix | Delete
<?php
[164] Fix | Delete
echo $ical->escape( stripslashes( $event['LOCATION'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
[165] Fix | Delete
?>
[166] Fix | Delete
</span>
[167] Fix | Delete
<?php endif; ?>
[168] Fix | Delete
<?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
[169] Fix | Delete
<span class="event-description">
[170] Fix | Delete
<?php
[171] Fix | Delete
echo wp_trim_words( $ical->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- this method is built to escape.
[172] Fix | Delete
?>
[173] Fix | Delete
</span>
[174] Fix | Delete
<?php endif; ?>
[175] Fix | Delete
</li>
[176] Fix | Delete
<?php endforeach; ?>
[177] Fix | Delete
</ul>
[178] Fix | Delete
<?php
[179] Fix | Delete
}
[180] Fix | Delete
[181] Fix | Delete
echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[182] Fix | Delete
[183] Fix | Delete
/** This action is documented in modules/widgets/gravatar-profile.php */
[184] Fix | Delete
do_action( 'jetpack_stats_extra', 'widget_view', 'upcoming_events' );
[185] Fix | Delete
}
[186] Fix | Delete
[187] Fix | Delete
/**
[188] Fix | Delete
* Left this function here for backward compatibility
[189] Fix | Delete
* just incase a site using jetpack is also using this function
[190] Fix | Delete
*
[191] Fix | Delete
* @param array|false $events Array of events, false on failure.
[192] Fix | Delete
*/
[193] Fix | Delete
private function apply_timezone_offset( $events ) {
[194] Fix | Delete
require_once JETPACK__PLUGIN_DIR . '/_inc/lib/icalendar-reader.php';
[195] Fix | Delete
[196] Fix | Delete
return ( new iCalendarReader() )->apply_timezone_offset( $events );
[197] Fix | Delete
}
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function