| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?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' );
|