WordPress.org

Plugin Directory

Changeset 1591061


Ignore:
Timestamp:
02/07/17 14:55:24 (9 months ago)
Author:
slimndap
Message:

0.15.16

Location:
theatre/tags/0.15
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • theatre/tags/0.15/functions/event/class-theater-event-order.php

    r1562155 r1591061  
    6060 
    6161        $event = new WPT_Production( $event_id ); 
    62         $event_dates = $wp_theatre->events->get(  
    63             array(  
    64                 'start' => 'now',  
    65                 'production' => $event_id,  
     62        $event_dates = $wp_theatre->events->get( 
     63            array( 
     64                'start' => 'now', 
     65                'production' => $event_id, 
    6666                'status' => get_post_status( $event_id ), 
    6767            ) 
     
    7070        // Use the last event if no upcoming events are found. 
    7171        if ( empty( $event_dates ) ) { 
    72             $event_dates = $wp_theatre->events->get(  
    73                 array(  
    74                     'production' => $event_id,  
     72            $event_dates = $wp_theatre->events->get( 
     73                array( 
     74                    'production' => $event_id, 
    7575                    'status' => get_post_status( $event_id ), 
    7676                ) 
     
    8888        /** 
    8989         * Filters the calculated order index of an event. 
    90          *  
     90         * 
    9191         * @since   0.15.14 
    9292         * @param   int $order_index    The current calculated order index. 
     
    181181     * @since   0.15.13 No longer sort queries that only query non-event post types. 
    182182     * @since   0.15.15 Use THEATER_ORDER_INDEX_KEY for meta key. 
     183     * @since   0.15.16 No longer sort queries that also query non-event post types. 
    183184     * 
    184185     * @uses    Theater_Event_Order::get_event_post_types() to get the post types for events and event dates. 
     
    201202            return; 
    202203        } 
     204 
     205        $other_post_types_in_query = array_diff( $post_types, self::get_event_post_types() ); 
     206 
     207        if ( ! empty( $other_post_types_in_query ) ) { 
     208            return; 
     209        } 
     210 
     211        // This query is for event post types and event post types only, sort query 
    203212 
    204213        $query->set( 'meta_key',THEATER_ORDER_INDEX_KEY ); 
  • theatre/tags/0.15/functions/extensions/EDD_SL_Plugin_Updater.php

    r1534608 r1591061  
    11<?php 
    22 
    3 // uncomment this line for testing 
    4 //set_site_transient( 'update_plugins', null ); 
     3// Exit if accessed directly 
     4if ( ! defined( 'ABSPATH' ) ) exit; 
    55 
    66/** 
    77 * Allows plugins to use their own update API. 
    88 * 
    9  * @author Pippin Williamson 
    10  * @version 1.6 
     9 * @author Easy Digital Downloads 
     10 * @version 1.6.10 
    1111 */ 
    1212class EDD_SL_Plugin_Updater { 
    13     private $api_url   = ''; 
    14     private $api_data  = array(); 
    15     private $name      = ''; 
    16     private $slug      = ''; 
     13 
     14    private $api_url     = ''; 
     15    private $api_data    = array(); 
     16    private $name        = ''; 
     17    private $slug        = ''; 
     18    private $version     = ''; 
     19    private $wp_override = false; 
     20    private $cache_key   = ''; 
    1721 
    1822    /** 
     
    2529     * @param string  $_plugin_file Path to the plugin file. 
    2630     * @param array   $_api_data    Optional data to send with API calls. 
    27      * @return void 
    28      */ 
    29     function __construct( $_api_url, $_plugin_file, $_api_data = null ) { 
    30         $this->api_url  = trailingslashit( $_api_url ); 
    31         $this->api_data = $_api_data; 
    32         $this->name     = plugin_basename( $_plugin_file ); 
    33         $this->slug     = basename( $_plugin_file, '.php' ); 
    34         $this->version  = $_api_data['version']; 
     31     */ 
     32    public function __construct( $_api_url, $_plugin_file, $_api_data = null ) { 
     33 
     34        global $edd_plugin_data; 
     35 
     36        $this->api_url     = trailingslashit( $_api_url ); 
     37        $this->api_data    = $_api_data; 
     38        $this->name        = plugin_basename( $_plugin_file ); 
     39        $this->slug        = basename( $_plugin_file, '.php' ); 
     40        $this->version     = $_api_data['version']; 
     41        $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false; 
     42        $this->beta        = ! empty( $this->api_data['beta'] ) ? true : false; 
     43        $this->cache_key   = md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); 
     44 
     45        $edd_plugin_data[ $this->slug ] = $this->api_data; 
    3546 
    3647        // Set up hooks. 
    3748        $this->init(); 
    38         add_action( 'admin_init', array( $this, 'show_changelog' ) ); 
     49 
    3950    } 
    4051 
     
    5061        add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); 
    5162        add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); 
    52  
     63        remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 ); 
    5364        add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 ); 
     65        add_action( 'admin_init', array( $this, 'show_changelog' ) ); 
     66 
    5467    } 
    5568 
     
    6780     * @return array Modified update array with custom plugin data. 
    6881     */ 
    69     function check_update( $_transient_data ) { 
     82    public function check_update( $_transient_data ) { 
    7083 
    7184        global $pagenow; 
    7285 
    73         if( ! is_object( $_transient_data ) ) { 
     86        if ( ! is_object( $_transient_data ) ) { 
    7487            $_transient_data = new stdClass; 
    7588        } 
    7689 
    77         if( 'plugins.php' == $pagenow && is_multisite() ) { 
     90        if ( 'plugins.php' == $pagenow && is_multisite() ) { 
    7891            return $_transient_data; 
    7992        } 
    8093 
    81         if ( empty( $_transient_data->response ) || empty( $_transient_data->response[ $this->name ] ) ) { 
    82  
    83             $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug ) ); 
    84  
    85             if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) { 
    86  
    87                 $this->did_check = true; 
    88  
    89                 if( version_compare( $this->version, $version_info->new_version, '<' ) ) { 
    90  
    91                     $_transient_data->response[ $this->name ] = $version_info; 
    92  
    93                 } 
    94  
    95                 $_transient_data->last_checked = time(); 
    96                 $_transient_data->checked[ $this->name ] = $this->version; 
    97  
    98             } 
     94        if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) { 
     95            return $_transient_data; 
     96        } 
     97 
     98        $version_info = $this->get_cached_version_info(); 
     99 
     100        if ( false === $version_info ) { 
     101            $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); 
     102 
     103            $this->set_version_info_cache( $version_info ); 
     104 
     105        } 
     106 
     107        if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) { 
     108 
     109            if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { 
     110 
     111                $_transient_data->response[ $this->name ] = $version_info; 
     112 
     113            } 
     114 
     115            $_transient_data->last_checked           = current_time( 'timestamp' ); 
     116            $_transient_data->checked[ $this->name ] = $this->version; 
     117 
    99118        } 
    100119 
     
    110129    public function show_update_notification( $file, $plugin ) { 
    111130 
    112         if ( ! current_user_can( 'update_plugins' ) ) { 
    113             return; 
    114         } 
    115  
    116         if ( ! is_multisite() ) { 
     131        if ( is_network_admin() ) { 
     132            return; 
     133        } 
     134 
     135        if( ! current_user_can( 'update_plugins' ) ) { 
     136            return; 
     137        } 
     138 
     139        if( ! is_multisite() ) { 
    117140            return; 
    118141        } 
     
    127150        $update_cache = get_site_transient( 'update_plugins' ); 
    128151 
    129         if ( ! is_object( $update_cache ) || empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) { 
    130  
    131             $cache_key    = md5( 'edd_plugin_' .sanitize_key( $this->name ) . '_version_info' ); 
    132             $version_info = get_transient( $cache_key ); 
    133  
    134             if( false === $version_info ) { 
    135  
    136                 $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug ) ); 
    137  
    138                 set_transient( $cache_key, $version_info, 3600 ); 
    139             } 
    140  
     152        $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass(); 
     153 
     154        if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) { 
     155 
     156            $version_info = $this->get_cached_version_info(); 
     157 
     158            if ( false === $version_info ) { 
     159                $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); 
     160 
     161                $this->set_version_info_cache( $version_info ); 
     162            } 
    141163 
    142164            if ( ! is_object( $version_info ) ) { 
     
    150172            } 
    151173 
    152             $update_cache->last_checked = time(); 
     174            $update_cache->last_checked = current_time( 'timestamp' ); 
    153175            $update_cache->checked[ $this->name ] = $this->version; 
    154176 
     
    168190            // build a plugin list row, with update notification 
    169191            $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); 
    170             echo '<tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange"><div class="update-message">'; 
     192            # <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange"> 
     193            echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">'; 
     194            echo '<td colspan="3" class="plugin-update colspanchange">'; 
     195            echo '<div class="update-message notice inline notice-warning notice-alt">'; 
    171196 
    172197            $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' ); 
     
    174199            if ( empty( $version_info->download_link ) ) { 
    175200                printf( 
    176                     __( 'There is a new version of %1$s available. <a target="_blank" class="thickbox" href="%2$s">View version %3$s details</a>.', 'edd' ), 
     201                    __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ), 
    177202                    esc_html( $version_info->name ), 
    178                     esc_url( $changelog_link ), 
    179                     esc_html( $version_info->new_version ) 
     203                    '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">', 
     204                    esc_html( $version_info->new_version ), 
     205                    '</a>' 
    180206                ); 
    181207            } else { 
    182208                printf( 
    183                     __( 'There is a new version of %1$s available. <a target="_blank" class="thickbox" href="%2$s">View version %3$s details</a> or <a href="%4$s">update now</a>.', 'edd' ), 
     209                    __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ), 
    184210                    esc_html( $version_info->name ), 
    185                     esc_url( $changelog_link ), 
     211                    '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">', 
    186212                    esc_html( $version_info->new_version ), 
    187                     esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) 
     213                    '</a>', 
     214                    '<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">', 
     215                    '</a>' 
    188216                ); 
    189217            } 
    190218 
     219            do_action( "in_plugin_update_message-{$file}", $plugin, $version_info ); 
     220 
    191221            echo '</div></td></tr>'; 
    192222        } 
    193223    } 
    194  
    195224 
    196225    /** 
     
    204233     * @return object $_data 
    205234     */ 
    206     function plugins_api_filter( $_data, $_action = '', $_args = null ) { 
     235    public function plugins_api_filter( $_data, $_action = '', $_args = null ) { 
    207236 
    208237        if ( $_action != 'plugin_information' ) { 
     
    222251            'is_ssl' => is_ssl(), 
    223252            'fields' => array( 
    224                 'banners' => false, // These will be supported soon hopefully 
    225                 'reviews' => false, 
     253                'banners' => array(), 
     254                'reviews' => false 
    226255            ) 
    227256        ); 
    228257 
    229         $api_response = $this->api_request( 'plugin_information', $to_send ); 
    230  
    231         if ( false !== $api_response ) { 
    232             $_data = $api_response; 
     258        $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); 
     259 
     260        // Get the transient where we store the api request for this plugin for 24 hours 
     261        $edd_api_request_transient = $this->get_cached_version_info( $cache_key ); 
     262 
     263        //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now. 
     264        if ( empty( $edd_api_request_transient ) ) { 
     265 
     266            $api_response = $this->api_request( 'plugin_information', $to_send ); 
     267 
     268            // Expires in 3 hours 
     269            $this->set_version_info_cache( $api_response, $cache_key ); 
     270 
     271            if ( false !== $api_response ) { 
     272                $_data = $api_response; 
     273            } 
     274 
     275        } else { 
     276            $_data = $edd_api_request_transient; 
     277        } 
     278 
     279        // Convert sections into an associative array, since we're getting an object, but Core expects an array. 
     280        if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) { 
     281            $new_sections = array(); 
     282            foreach ( $_data->sections as $key => $key ) { 
     283                $new_sections[ $key ] = $key; 
     284            } 
     285 
     286            $_data->sections = $new_sections; 
     287        } 
     288 
     289        // Convert banners into an associative array, since we're getting an object, but Core expects an array. 
     290        if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) { 
     291            $new_banners = array(); 
     292            foreach ( $_data->banners as $key => $key ) { 
     293                $new_banners[ $key ] = $key; 
     294            } 
     295 
     296            $_data->banners = $new_banners; 
    233297        } 
    234298 
    235299        return $_data; 
    236300    } 
    237  
    238301 
    239302    /** 
     
    244307     * @return object $array 
    245308     */ 
    246     function http_request_args( $args, $url ) { 
     309    public function http_request_args( $args, $url ) { 
    247310        // If it is an https request and we are performing a package download, disable ssl verification 
    248311        if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) { 
     
    261324     * @param string  $_action The requested action. 
    262325     * @param array   $_data   Parameters for the API action. 
    263      * @return false||object 
     326     * @return false|object 
    264327     */ 
    265328    private function api_request( $_action, $_data ) { 
     
    270333 
    271334        if ( $data['slug'] != $this->slug ) { 
    272             return false; 
    273         } 
    274  
    275         if ( empty( $data['license'] ) ) { 
    276             return false; 
    277         } 
    278  
    279         if( $this->api_url == home_url() ) { 
     335            return; 
     336        } 
     337 
     338        if( $this->api_url == trailingslashit (home_url() ) ) { 
    280339            return false; // Don't allow a plugin to ping itself 
    281340        } 
    282341 
    283342        $api_params = array( 
    284             'edd_action'  => 'get_version', 
    285             'license'  => $data['license'], 
     343            'edd_action' => 'get_version', 
     344            'license'    => ! empty( $data['license'] ) ? $data['license'] : '', 
    286345            'item_name'  => isset( $data['item_name'] ) ? $data['item_name'] : false, 
    287             'item_id'  => isset( $data['item_id'] ) ? $data['item_id'] : false, 
    288             'slug'  => $data['slug'], 
    289             'author'  => $data['author'], 
    290             'url'     => home_url() 
     346            'item_id'    => isset( $data['item_id'] ) ? $data['item_id'] : false, 
     347            'version'    => isset( $data['version'] ) ? $data['version'] : false, 
     348            'slug'       => $data['slug'], 
     349            'author'     => $data['author'], 
     350            'url'        => home_url(), 
     351            'beta'       => ! empty( $data['beta'] ), 
    291352        ); 
    292353 
     
    303364        } 
    304365 
     366        if ( $request && isset( $request->banners ) ) { 
     367            $request->banners = maybe_unserialize( $request->banners ); 
     368        } 
     369 
     370        if( ! empty( $request ) ) { 
     371            foreach( $request->sections as $key => $section ) { 
     372                $request->$key = (array) $section; 
     373            } 
     374        } 
     375 
    305376        return $request; 
    306377    } 
     
    308379    public function show_changelog() { 
    309380 
    310         if ( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) { 
    311             return; 
    312         } 
    313  
    314         if ( empty( $_REQUEST['plugin'] ) ) { 
    315             return; 
    316         } 
    317  
    318         if ( empty( $_REQUEST['slug'] ) ) { 
    319             return; 
    320         } 
    321  
    322         if ( ! current_user_can( 'update_plugins' ) ) { 
    323             wp_die( __( 'You do not have permission to install plugin updates', 'edd' ), __( 'Error', 'edd' ), array( 'response' => 403 ) ); 
    324         } 
    325  
    326         $response = $this->api_request( 'plugin_latest_version', array( 'slug' => $_REQUEST['slug'] ) ); 
    327  
    328         if ( $response && isset( $response->sections['changelog'] ) ) { 
    329             echo '<div style="background:#fff;padding:10px;">' . $response->sections['changelog'] . '</div>'; 
     381        global $edd_plugin_data; 
     382 
     383        if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) { 
     384            return; 
     385        } 
     386 
     387        if( empty( $_REQUEST['plugin'] ) ) { 
     388            return; 
     389        } 
     390 
     391        if( empty( $_REQUEST['slug'] ) ) { 
     392            return; 
     393        } 
     394 
     395        if( ! current_user_can( 'update_plugins' ) ) { 
     396            wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) ); 
     397        } 
     398 
     399        $data         = $edd_plugin_data[ $_REQUEST['slug'] ]; 
     400        $beta         = ! empty( $data['beta'] ) ? true : false; 
     401        $cache_key    = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' ); 
     402        $version_info = $this->get_cached_version_info( $cache_key ); 
     403 
     404        if( false === $version_info ) { 
     405 
     406            $api_params = array( 
     407                'edd_action' => 'get_version', 
     408                'item_name'  => isset( $data['item_name'] ) ? $data['item_name'] : false, 
     409                'item_id'    => isset( $data['item_id'] ) ? $data['item_id'] : false, 
     410                'slug'       => $_REQUEST['slug'], 
     411                'author'     => $data['author'], 
     412                'url'        => home_url(), 
     413                'beta'       => ! empty( $data['beta'] ) 
     414            ); 
     415 
     416            $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); 
     417 
     418            if ( ! is_wp_error( $request ) ) { 
     419                $version_info = json_decode( wp_remote_retrieve_body( $request ) ); 
     420            } 
     421 
     422 
     423            if ( ! empty( $version_info ) && isset( $version_info->sections ) ) { 
     424                $version_info->sections = maybe_unserialize( $version_info->sections ); 
     425            } else { 
     426                $version_info = false; 
     427            } 
     428 
     429            if( ! empty( $version_info ) ) { 
     430                foreach( $version_info->sections as $key => $section ) { 
     431                    $version_info->$key = (array) $section; 
     432                } 
     433            } 
     434 
     435            $this->set_version_info_cache( $version_info, $cache_key ); 
     436 
     437        } 
     438 
     439        if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) { 
     440            echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>'; 
    330441        } 
    331442 
     
    333444    } 
    334445 
     446    public function get_cached_version_info( $cache_key = '' ) { 
     447 
     448        if( empty( $cache_key ) ) { 
     449            $cache_key = $this->cache_key; 
     450        } 
     451 
     452        $cache = get_option( $cache_key ); 
     453 
     454        if( empty( $cache['timeout'] ) || current_time( 'timestamp' ) > $cache['timeout'] ) { 
     455            return false; // Cache is expired 
     456        } 
     457 
     458        return json_decode( $cache['value'] ); 
     459 
     460    } 
     461 
     462    public function set_version_info_cache( $value = '', $cache_key = '' ) { 
     463 
     464        if( empty( $cache_key ) ) { 
     465            $cache_key = $this->cache_key; 
     466        } 
     467 
     468        $data = array( 
     469            'timeout' => strtotime( '+3 hours', current_time( 'timestamp' ) ), 
     470            'value'   => json_encode( $value ) 
     471        ); 
     472 
     473        update_option( $cache_key, $data ); 
     474 
     475    } 
     476 
    335477} 
  • theatre/tags/0.15/functions/wpt_admin.php

    r1395888 r1591061  
    3232    } 
    3333 
     34    /** 
     35     * admin_init function. 
     36     *  
     37     * @since   0.? 
     38     * @since   0.15.16 Removed custom CSS section. 
     39     * @return  void 
     40     */ 
    3441    function admin_init() { 
    3542        global $wp_theatre; 
     
    124131                __('Stylesheet','theatre'), // Title 
    125132                array( $this, 'settings_field_stylesheet' ), // Callback 
    126                 'wpt_style', // Page 
    127                 'display_section_id' // Section 
    128             ); 
    129  
    130             add_settings_field( 
    131                 'css', // ID 
    132                 __('Custom CSS','theatre'), // Title 
    133                 array( $this, 'settings_field_css' ), // Callback 
    134133                'wpt_style', // Page 
    135134                'display_section_id' // Section 
     
    449448    } 
    450449 
    451     public function settings_field_css() { 
    452         global $wp_theatre; 
    453  
    454         echo '<p>'; 
    455         echo '<textarea id="wpt_custom_css" name="wpt_style[custom_css]">'; 
    456         if (!empty($wp_theatre->wpt_style_options['custom_css'])) { 
    457             echo esc_html($wp_theatre->wpt_style_options['custom_css']); 
    458         } 
    459         echo '</textarea>'; 
    460         echo '</p>'; 
    461     } 
    462  
    463450    public function settings_field_stylesheet() { 
    464451        global $wp_theatre; 
  • theatre/tags/0.15/functions/wpt_calendar.php

    r1376303 r1591061  
    2626         * @see WPT_Production::permalink()         To get the permalink for an event. 
    2727         * 
    28          * @since    0.8 
     28         * @since   0.8 
    2929         * @since   0.10.6  Bugfix: calendar was showing months that have historic events. 
    3030         *                  See https://wordpress.org/support/topic/calendar-wrong-month-shown-again. 
     
    3232         *                  Fixes #117. 
    3333         * @since   0.13.3  Bugfix: weekdays were showing up as question marks when using  
    34          *                  a multibyte languege (eg. Russian). 
     34         *                  a multibyte language (eg. Russian). 
    3535         *                  Fixes #174. 
     36         * @since   0.15.16 Added support for custom $filters. 
    3637         * 
    37          * @return string The HTML for the calendar. 
    38          */ 
    39         function html() { 
     38         * @return  string  The HTML for the calendar. 
     39         */ 
     40        function html( $filters = array() ) { 
     41             
    4042            global $wp_locale; 
    4143             
     
    4749             
    4850            // Get all months from now to the month of the last event. 
    49             $filters = array( 
     51            $default_month_filters = array( 
    5052                'start' => 'now', 
    5153            ); 
    52             $months = $wp_theatre->events->get_months($filters); 
     54            $month_filters = wp_parse_args( $filters, $default_month_filters ); 
     55             
     56            $months = $wp_theatre->events->get_months($month_filters); 
    5357            $months = array_keys($months);           
    5458                         
     
    121125                } 
    122126 
    123                 $events_filters = array(); 
     127                 
     128                $default_events_filters = array(); 
     129                $events_filters = wp_parse_args( $filters, $default_events_filters ); 
    124130 
    125131                /** 
  • theatre/tags/0.15/functions/wpt_event.php

    r1497651 r1591061  
    224224    } 
    225225 
     226    /** 
     227     * Gets the duration of an event. 
     228     *  
     229     * @since   0.? 
     230     * @since   0.15.16     Fixed call to apply_template_filters(). '$this->' was missing. 
     231     *                      See: https://github.com/slimndap/wp-theatre/pull/231 
     232     * @param   array $args (default: array()) 
     233     * @return  string 
     234     */ 
    226235    function duration( $args = array() ) { 
    227236        global $wp_theatre; 
     
    250259            $html = ''; 
    251260            $html .= '<div class="'.self::post_type_name.'_duration">'; 
    252             $html .= apply_template_filters( $this->duration, $args['filters'] ); 
     261            $html .= $this->apply_template_filters( $this->duration, $args['filters'] ); 
    253262            $html .= '</div>'; 
    254263            return $html; 
  • theatre/tags/0.15/functions/wpt_events.php

    r1508770 r1591061  
    332332     * Gets a list of events in HTML for a page. 
    333333     * 
    334      * @since 0.10 
     334     * @since   0.10 
     335     * @since   0.15.16     Replaced $wp_query->query_vars['wpt_day'] with $wp_query->query['wpt_day']. 
     336     *                      Fixes #217. 
     337     *                      Maybe this is caused by wp_resolve_numeric_slug_conflicts(), which was 
     338     *                      added in WP 4.3. 
    335339     * 
    336340     * @see WPT_Events::get_html_grouped() 
     
    359363        } elseif ( ! empty( $wp_query->query_vars['wpt_month'] ) ) { 
    360364            $html = $this->get_html_for_month( $wp_query->query_vars['wpt_month'], $args ); 
    361         } elseif ( ! empty( $wp_query->query_vars['wpt_day'] ) ) { 
    362             $html = $this->get_html_for_day( $wp_query->query_vars['wpt_day'], $args ); 
     365        } elseif ( ! empty( $wp_query->query['wpt_day'] ) ) { 
     366            $html = $this->get_html_for_day( $wp_query->query['wpt_day'], $args ); 
    363367        } elseif ( ! empty( $wp_query->query_vars['wpt_category'] ) ) { 
    364368            $html = $this->get_html_for_category( $wp_query->query_vars['wpt_category'], $args ); 
  • theatre/tags/0.15/functions/wpt_feeds.php

    r1376303 r1591061  
    3737        } 
    3838         
     39        /** 
     40         * Gets the XML for upcoming productions. 
     41         *  
     42         * @since   0.7 
     43         * @since   0.15.16 Added escaping to production title and permalink. 
     44         *                  Fixes #220. 
     45         * @return  string 
     46         */ 
    3947        function get_upcoming_productions() { 
    4048            global $wp_theatre; 
     
    4957                $item = ''; 
    5058                $item.= '<item>'; 
    51                 $item.= '<title>'.$production->title().'</title>'; 
    52                 $item.= '<link>'.get_permalink($production->ID).'</link>'; 
     59                $item.= '<title>'.convert_chars($production->title()).'</title>'; 
     60                $item.= '<link>'.convert_chars(get_permalink($production->ID)).'</link>'; 
    5361                $item.= '<description><![CDATA['.$production->summary().']]></description>'; 
    5462                $item.= '<content:encoded><![CDATA['.strip_shortcodes($production->post()->post_content).']]></content:encoded>'; 
     
    8492        } 
    8593         
     94        /** 
     95         * Gets the XML for upcoming events. 
     96         *  
     97         * @since   0.7 
     98         * @since   0.15.16 Added escaping to production title and permalink. 
     99         *                  Fixes #220. 
     100         * @return  string 
     101         */ 
    86102        function get_upcoming_events() { 
    87103            global $wp_theatre; 
     
    96112                $item = ''; 
    97113                $item.= '<item>'; 
    98                 $item.= '<title>'.$event->production()->title().'</title>'; 
    99                 $item.= '<link>'.get_permalink($event->production()->ID).'</link>'; 
     114                $item.= '<title>'.convert_chars($event->production()->title()).'</title>'; 
     115                $item.= '<link>'.convert_chars(get_permalink($event->production()->ID)).'</link>'; 
    100116                $item.= '<description><![CDATA['.$event->production()->summary().']]></description>'; 
    101117                $item.= '<content:encoded><![CDATA['.strip_shortcodes($event->production()->post()->post_content).']]></content:encoded>'; 
  • theatre/tags/0.15/functions/wpt_frontend.php

    r1485824 r1591061  
    7575 
    7676 
     77    /** 
     78     * wp_head function. 
     79     *  
     80     * @since   0.? 
     81     * @since   0.15.16 Removed custom CSS. 
     82     * @return  void 
     83     */ 
    7784    function wp_head() { 
    7885        global $wp_theatre; 
     
    8289 
    8390        $html[] = '<meta name="generator" content="Theater '.$wpt_version.'" />'; 
    84  
    85         if ( ! empty( $wp_theatre->wpt_style_options['custom_css'] ) ) { 
    86             $html[] .= '<!-- Custom Theater CSS -->'; 
    87             $html[] .= '<style>'; 
    88             $html[] .= $wp_theatre->wpt_style_options['custom_css']; 
    89             $html[] .= '</style>'; 
    90         } 
    9191 
    9292        echo implode( "\n",$html )."\n"; 
     
    339339     *                  Fixes issue #97. 
    340340     * @since   0.14.7  Added $shortcode to shortcode_atts(). 
    341      * @since   0.15.10 Added 'ignored_stikcy_posts' to the shortcode atts. 
     341     * @since   0.15.10 Added 'ignored_sticky_posts' to shortcode atts. 
     342     * @since   0.15.16 Added 'start_before', 'start_after', 'end_before' and 'end_after' to shortcode atts. 
    342343     * 
    343344     * @param   array   $atts 
     
    363364            'tag' => false, 
    364365            'start' => false, 
     366            'start_before' => false, 
     367            'start_after' => false, 
    365368            'end' => false, 
     369            'end_after' => false, 
     370            'end_before' => false, 
    366371            'groupby' => false, 
    367372            'limit' => false, 
  • theatre/tags/0.15/functions/wpt_productions.php

    r1534608 r1591061  
    228228     * @since   0.13 
    229229     * @since   0.15.11 Added support for next day start time offset. 
     230     * @since   0.15.16 Changed 'start_after' to 'end_after'. 
    230231     * 
    231232     * @uses    Theater_Helpers_Time::get_next_day_start_time_offset() to get the next day start time offset. 
     
    244245         */ 
    245246        if ( 
    246             empty( $args['start_after'] ) || 
    247             (strtotime( $args['start_after'] ) < strtotime( $day )) 
     247            empty( $args['end_after'] ) || 
     248            (strtotime( $args['end_after'] ) < strtotime( $day )) 
    248249        ) { 
    249             $args['start_after'] = $day.' +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
     250            $args['end_after'] = $day.' +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
    250251        } 
    251252 
     
    272273     * @since   0.13 
    273274     * @since   0.15.11 Added support for next day start time offset. 
     275     * @since   0.15.16 Changed 'start_after' to 'end_after'. 
    274276     * 
    275277     * @uses    Theater_Helpers_Time::get_next_day_start_time_offset() to get the next day start time offset. 
     
    288290         */ 
    289291        if ( 
    290             empty( $args['start_after'] ) || 
    291             (strtotime( $args['start_after'] ) < strtotime( $month )) 
     292            empty( $args['end_after'] ) || 
     293            (strtotime( $args['end_after'] ) < strtotime( $month )) 
    292294        ) { 
    293             $args['start_after'] = $month.' +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
     295            $args['end_after'] = $month.' +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
    294296        } 
    295297 
     
    316318     * @since   0.13 
    317319     * @since   0.15.11 Added support for next day start time offset. 
     320     * @since   0.15.16 Changed 'start_after' to 'end_after'. 
    318321     * 
    319322     * @uses    Theater_Helpers_Time::get_next_day_start_time_offset() to get the next day start time offset. 
     
    332335         */ 
    333336        if ( 
    334             empty( $args['start_after'] ) || 
    335             (strtotime( $args['start_after'] ) < strtotime( $year.'-01-01' )) 
     337            empty( $args['end_after'] ) || 
     338            (strtotime( $args['end_after'] ) < strtotime( $year.'-01-01' )) 
    336339        ) { 
    337             $args['start_after'] = $year.'-01-01 +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
     340            $args['end_after'] = $year.'-01-01 +'.Theater_Helpers_Time::get_next_day_start_time_offset().' seconds'; 
    338341        } 
    339342 
     
    788791 
    789792    /** 
    790      * Gets all productions between 'start' and 'end'. 
     793     * Gets all productions between 'start' and 'end' dates. 
    791794     * 
    792795     * @access  private 
    793796     * @since   0.13 
    794      * @param   string  $start  The start time. Can be anything that strtotime understands. 
    795      * @param   string  $end    The end time. Can be anything that strtotime understands. 
    796      * @return  array           The productions. 
    797      */ 
    798     private function get_productions_by_date( $start_after = false, $start_before = false, $end_before = false ) { 
     797     * @since   0.15.16 Added the $end_after argument. 
     798     *                  Changes behaviour of $start_after argument. 
     799     * @param   string  $start_after    Select productions that only have events that start after $start_after. 
     800     * @param   string  $start_before   Select productions that have events that start before $start_before. 
     801     * @param   string  $end_after      Select productions that have events that start after $end_after. 
     802     * @param   string  $end_before     Select productions that only have event that start before $end_before. 
     803     * @return  array                   The productions. 
     804     */ 
     805    private function get_productions_by_date( $start_after = false, $start_before = false, $end_after = false, $end_before = false ) { 
    799806        global $wp_theatre; 
    800807        $productions = array(); 
    801         if ( $start_after || $start_before || $end_before ) { 
     808 
     809        if ( $start_after || $start_before || $end_after || $end_before ) { 
    802810            $events_args = array( 
    803                 'start' => $start_after, 
     811                'start' => $end_after, 
    804812                'end' => $start_before, 
    805813            ); 
    806814            $events = $wp_theatre->events->get( $events_args ); 
    807815 
     816            // Filter out productions that have events that start before $start_after. 
     817            $productions_before_start = array(); 
     818            if ($start_after) { 
     819                foreach ( $events as $event ) { 
     820                    $end_datetime = strtotime( $start_after, current_time( 'timestamp' ) ) - get_option( 'gmt_offset' ) * 3600; 
     821                    if ( $event->datetime() < $end_datetime) {   
     822                        $productions_before_start[] = $event->production()->ID; 
     823                    } 
     824                }                
     825            } 
     826 
     827            // Filter out productions that have events that start after $end_before. 
    808828            $productions_after_end = array(); 
    809829            if ($end_before) { 
     
    816836            } 
    817837 
     838            $productions_excluded = array_merge( $productions_before_start, $productions_after_end ); 
     839 
    818840            foreach ( $events as $event ) { 
    819841                $production_id = $event->production()->ID; 
    820                 if (!in_array($production_id, $productions_after_end)) { 
     842                if (!in_array($production_id, $productions_excluded)) { 
    821843                    $productions[] = $production_id;                 
    822844                } 
     
    862884     * @since   0.15.10 Introduced new 'start_before', 'start_after' and 'end_before' filters. 
    863885     *                  Deprecated the 'start' and 'end' filters. 
     886     * @since   0.15.16 Added the 'end_after' filter. 
    864887     * 
    865888     * @param array $args { 
     
    893916            'category__in' => false, 
    894917            'category__not_in' => false, 
     918            'end_after' => false, 
    895919            'end_before' => false, 
    896920            'tag' => false, 
     
    965989 
    966990        // Rewrite deprecated filters to proper filters. 
    967         if ($filters['start'] && ! $filters['start_after']) { 
    968             $filters['start_after'] = $filters['start']; 
     991        if ($filters['start'] && ! $filters['end_after']) { 
     992            $filters['end_after'] = $filters['start']; 
    969993        } 
    970994 
     
    975999        if ( 
    9761000            $filters['upcoming'] && 
    977             ! $filters['start_after'] && 
     1001            ! $filters['end_after'] && 
    9781002            ! $filters['end_before'] 
    9791003        ) { 
    980             $filters['start_after'] = 'now'; 
     1004            $filters['end_after'] = 'now'; 
    9811005        } 
    9821006 
     
    9991023         * halted and an empty array is returned, because there are no matching productions. 
    10001024         */ 
    1001         if ( $filters['start_after'] || $filters['end_before'] ) { 
    1002             $productions_by_date = $this->get_productions_by_date( $filters['start_after'], $filters['start_before'],$filters['end_before'] ); 
     1025        if ( $filters['start_after'] || $filters['start_before'] || $filters['end_after'] || $filters['end_before'] ) { 
     1026            $productions_by_date = $this->get_productions_by_date(  
     1027                $filters['start_after'],  
     1028                $filters['start_before'],  
     1029                $filters['end_after'],  
     1030                $filters['end_before']  
     1031            ); 
    10031032            if ( empty( $args['post__in'] ) ) { 
    10041033                $args['post__in'] = $productions_by_date; 
  • theatre/tags/0.15/readme.txt

    r1562155 r1591061  
    137137    * Activated events archive pages (0.15.10). 
    138138    * You can now set until what time events should fall on the previous days using the `Theater/Helpers/Time/Next_Day_Start_Time_Offset` filter (0.15.11). 
     139    * You can now create event calendars with custom filters (0.15.16). 
     140    * Added the 'end_after' filter to production lists. 
     141 
    139142         
    140143* Bugfix 
     
    149152    * Fixed a problem with the changelog of extensions if you're running multiple extensions (0.15.14). 
    150153    * Fixed a problem with the event editor in WordPress 4.7 (0.15.15). 
     154    * Fixed the day-filter in event lists (0.15.16). 
     155    * Fixed an ecoding problem in the upcoming event feeds (0.15.16). 
     156    * Fixed a sorting issue on archive/search pages with mixed post types (0.15.16). 
     157     
     158     
     159* Deprecations 
     160    * Deprecated the custom CSS settings in favour of the custom CSS setting that came with WordPress 4.7 (0.15.16). 
     161     
    151162     
    152163= 0.14 = 
  • theatre/tags/0.15/theater.php

    r1562155 r1591061  
    66    Description: Turn your Wordpress website into a theater website. 
    77    Author: Jeroen Schmit 
    8     Version: 0.15.15 
     8    Version: 0.15.16 
    99    Author URI: http://slimndap.com/ 
    1010    Text Domain: theatre 
     
    2929if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 
    3030     
    31 $wpt_version = '0.15.15'; 
     31$wpt_version = '0.15.16'; 
    3232 
    3333class WP_Theatre { 
     
    7575        // Deprecated properties 
    7676        $this->order = new WPT_Order(); 
     77        Theater_Custom_CSS::init(); 
    7778         
    7879         
     
    163164         
    164165        require_once(dirname(__FILE__) . '/functions/deprecated/class-wpt-order.php'); 
     166        require_once(dirname(__FILE__) . '/functions/deprecated/class-theater-custom-css.php'); 
    165167         
    166168    } 
Note: See TracChangeset for help on using the changeset viewer.