WordPress.org

Plugin Directory

Changeset 1675918


Ignore:
Timestamp:
06/11/17 11:14:35 (3 months ago)
Author:
slimndap
Message:

v0.15.27.

Location:
theatre/tags/0.15
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • theatre/tags/0.15/functions/wpt_event.php

    r1614440 r1675918  
    9292    /** 
    9393     * Returns value of a custom field. 
    94      * Fallback to production is custom field doesn't exist for event. 
    9594     * 
    9695     * @since   0.8.3 
    9796     * @since   0.15    Fixed an error when no production is set for the event. 
    98      * 
    99      * @param string $field 
    100      * @param array $args { 
    101      *     @type bool $html Return HTML? Default <false>. 
    102      * } 
    103      * @param bool $fallback_to_production 
    104      * @return string. 
    105      */ 
    106     function custom( $field, $args = array(), $fallback_to_production = true ) { 
    107         global $wp_theatre; 
    108  
    109         $defaults = array( 
    110             'html' => false, 
    111             'filters' => array(), 
    112         ); 
    113         $args = wp_parse_args( $args, $defaults ); 
    114  
    115         if ( ! isset( $this->{$field} ) ) { 
    116             $custom_value = get_post_meta( $this->ID, $field, true ); 
    117             if ( empty($custom_value) && $production = $this->production() ) { 
    118                 $custom_value = $production->custom( $field ); 
    119             } 
    120  
    121             $this->{$field} = apply_filters( 
    122                 'wpt_event_'.$field, 
    123                 $custom_value, 
    124                 $field, 
    125                 $this 
    126             ); 
    127         } 
    128  
    129         if ( $args['html'] ) { 
    130             $html = ''; 
    131             $html .= '<div class="'.self::post_type_name.'_'.$field.'">'; 
    132             $html .= $this->apply_template_filters( $this->{$field}, $args['filters'] ); 
    133             $html .= '</div>'; 
    134  
    135             return apply_filters( 'wpt_event_'.$field.'_html', $html, $field, $this ); 
    136         } else { 
    137             return $this->{$field}; 
    138         } 
     97     * @since   0.15.27 Fix: $fallback_to_production was not doing anything. 
     98     *                  Deprecated the $args argument. 
     99     *                  Moved HTML output to WPT_Event::custom_html(). 
     100     * 
     101     * @uses    WPT_Event::custom_html() to get the HTM for a custom field. 
     102     * @uses    WPT_Event::production() to get the production of an event. 
     103     * 
     104     * @param   string  $field                  The custom field. 
     105     * @param   bool    $fallback_to_production Use the value of the production if the value of the event is empty? 
     106     *                                          Defaults to <true>. 
     107     * @return  string                          The value of a custom field. 
     108     */ 
     109    function custom( $field, $fallback_to_production = true ) { 
     110         
     111        // Add backwards compatibility for the deprecated $args argument. 
     112        if ( is_array( $fallback_to_production ) && !empty( $fallback_to_production['html'] ) ) { 
     113            $filters = array(); 
     114            if ( !empty( $fallback_to_production['filters'] ) ) { 
     115                $filters = $fallback_to_production['filters']; 
     116            } 
     117            return $this->custom_html( $field, $filters ); 
     118        } 
     119         
     120        $value = get_post_meta( $this->ID, $field, true ); 
     121         
     122        /** 
     123         * Filter the value of a custom field. 
     124         *  
     125         * @since   0.8.3 
     126         * @param   string      $value  The value of a custom field. 
     127         * @param   string      $field  The custom field. 
     128         * @param   WPT_Event   $event  The event. 
     129         */ 
     130        $value = apply_filters( 'wpt_event_'.$field, $value, $field, $this ); 
     131         
     132        if ( empty($value) && $fallback_to_production && $production = $this->production() ) { 
     133            $value = $production->custom( $field ); 
     134        } 
     135 
     136        return $value; 
     137    } 
     138     
     139    /** 
     140     * Gets the HTML for a custom field. 
     141     *  
     142     * @since   0.15.27 
     143     * 
     144     * @uses    WPT_Event::custom() to get the value of a custom field. 
     145     * @uses    WPT_Event::apply_template_filters() to apply template filters to the custom field value. 
     146     * 
     147     * @param   string  $field                  The custom field. 
     148     * @param   array   $filters                The template filters to apply. 
     149     * @param   bool    $fallback_to_production Use the value of the production if the value of the event is empty? 
     150     * @return  string  The HTML for a custom field. 
     151     */ 
     152    function custom_html( $field, $filters = array(), $fallback_to_production = true ) { 
     153         
     154        $value = $this->custom( $field, $fallback_to_production ); 
     155         
     156        ob_start(); 
     157         
     158        ?><div class="<?php echo self::post_type_name; ?>_<?php echo $field; ?>"><?php 
     159            echo $this->apply_template_filters( $value, $filters ); 
     160        ?></div><?php 
     161         
     162        $html = ob_get_clean(); 
     163         
     164        /** 
     165         * Filter the HTML for a custom field. 
     166         *  
     167         * @since   0.8.3 
     168         * 
     169         * @param   string      $html   The HTML for a custom field. 
     170         * @param   string      $field  The custom field. 
     171         * @param   WPT_Event   $event  The event. 
     172         */ 
     173        $html = apply_filters( 'wpt_event_'.$field.'_html', $html, $field, $this ); 
     174         
     175        return $html; 
    139176    } 
    140177 
  • theatre/tags/0.15/functions/wpt_event_template.php

    r1376303 r1675918  
    2929     * @since   0.12.1 
    3030     * @since   0.15    Fixed an error when no production is set for the event. 
     31     * @since   0.15.27 Added the 'tags' field. 
     32     *                  Custom fields now use WPT_Event::custom_html(). 
    3133     * 
    3234     * @access  protected 
     
    6769                } 
    6870                break; 
     71            case 'tags': 
     72                if ($production = $this->object->production()) { 
     73                    $value = $production->tags_html( );              
     74                } 
     75                break; 
    6976            case 'categories': 
    7077            case 'content': 
     
    9097                break; 
    9198            default: 
    92                 $value = $this->object->custom( $field,$value_args ); 
     99                $value = $this->object->custom_html( $field, $filters, true ); 
    93100        } 
    94101 
  • theatre/tags/0.15/functions/wpt_importer.php

    r1665315 r1675918  
    1111     * @since   0.10 
    1212     * @since   0.15.24 Events are no longer marked in the database during import. 
     13     * @since   0.15.27 Added support for preloading previously imported productions and events. 
    1314     */ 
    1415    class WPT_Importer { 
     
    2223         */ 
    2324        private $marked_events = array(); 
     25         
     26        /** 
     27         * Preloaded productions tracker. 
     28         *  
     29         * @since   0.15.27 
     30         * @var     WPT_Production[] 
     31         * @access  private 
     32         */ 
     33        private $productions_by_ref = array(); 
     34         
     35        /** 
     36         * Preloaded events tracker. 
     37         *  
     38         * @since   0.15.27 
     39         * @var     WPT_Event[] 
     40         * @access  private 
     41         */ 
     42        private $events_by_ref = array(); 
    2443         
    2544        /** 
     
    83102        protected function ready_for_import() { 
    84103            return false; 
     104        } 
     105         
     106        /** 
     107         * Preloads events by source ref. 
     108         *  
     109         * Use this method to preload all previously imported events during an import. 
     110         * Doing this directly after reading a feed will add all events that were imported during 
     111         * previous imports to the @uses WPT_Importer::productions_by_ref property and put all corresponding 
     112         * meta fields in he WordPress cache. 
     113         * 
     114         * @since   0.15.27 
     115         * @param   array   $refs   The source refs of events to preload. 
     116         * @return  void 
     117         */ 
     118        function preload_events_by_ref( $refs = array() ) { 
     119             
     120            if ( empty( $refs ) ) { 
     121                return; 
     122            } 
     123             
     124            $args = array( 
     125                'post_type' => WPT_Event::post_type_name, 
     126                'post_status' => 'any', 
     127                'nopaging' => true, 
     128                'meta_query' => array( 
     129                    array( 
     130                        'key' => '_wpt_source', 
     131                        'value' => $this->get('slug'), 
     132                    ), 
     133                    array( 
     134                        'key' => '_wpt_source_ref', 
     135                        'value' => $refs, 
     136                        'compare' => 'IN', 
     137                    ), 
     138                ),               
     139            );           
     140 
     141            $posts = get_posts( $args ); 
     142 
     143            foreach ($posts as $post) { 
     144                $this->events_by_ref[ get_post_meta( $post->ID, '_wpt_source_ref', true) ] = new WPT_Event( $post->ID ); 
     145            } 
     146        } 
     147 
     148        /** 
     149         * Preloads productions by source ref. 
     150         *  
     151         * Use this method to preload all previously imported productions during an import. 
     152         * Doing this directly after reading a feed will add all productions that were imported during 
     153         * previous imports to the @uses WPT_Importer::productions_by_ref property and put all corresponding 
     154         * meta fields in he WordPress cache. 
     155         * 
     156         * @since   0.15.27 
     157         * @param   array   $refs   The source refs of productions to preload. 
     158         * @return  void 
     159         */ 
     160        function preload_productions_by_ref( $refs = array() ) { 
     161             
     162            if ( empty( $refs ) ) { 
     163                return; 
     164            } 
     165             
     166            $args = array( 
     167                'post_type' => WPT_Production::post_type_name, 
     168                'post_status' => 'any', 
     169                'nopaging' => true, 
     170                'meta_query' => array( 
     171                    array( 
     172                        'key' => '_wpt_source', 
     173                        'value' => $this->get('slug'), 
     174                    ), 
     175                    array( 
     176                        'key' => '_wpt_source_ref', 
     177                        'value' => $refs, 
     178                        'compare' => 'IN', 
     179                    ), 
     180                ),               
     181            );           
     182 
     183            $posts = get_posts( $args ); 
     184 
     185            foreach ($posts as $post ) { 
     186                $this->productions_by_ref[ get_post_meta( $post->ID, '_wpt_source_ref', true) ] = new WPT_Production( $post ->ID ); 
     187            } 
     188             
    85189        } 
    86190         
     
    260364         * Use this helper function to create a new event while processing your feed. 
    261365         *  
    262          * @since 0.10 
    263          * @since 0.11      Added support for event prices. 
    264          * @since 0.11.7    Events now inherit the post_status from the production. 
     366         * @since   0.10 
     367         * @since   0.11    Added support for event prices. 
     368         * @since   0.11.7  Events now inherit the post_status from the production. 
    265369         *                  Fixes https://github.com/slimndap/wp-theatre/issues/129. 
    266          * 
    267          * @see WPT_Importer::get_event_by_ref() 
    268          * @see WPT_Importer::update_event() 
     370         * @since   0.15.27 The event is now added to @uses WPT_Importer::$events_by_ref after creation. 
     371         * 
     372         * @uses    WPT_Importer::get_event_by_ref() 
     373         * @uses    WPT_Importer::update_event() 
    269374         * 
    270375         * @access protected 
     
    281386         */ 
    282387        function create_event($args) { 
     388             
    283389            $defaults = array( 
    284390                'production' => false, 
     
    329435                $this->stats['events_created']++; 
    330436                 
    331                 return new WPT_Event($post_id); 
     437                $event = new WPT_Event($post_id); 
     438 
     439                // Add the event to the preloaded events. 
     440                $this->events_by_ref[ $args['ref'] ] = $event; 
     441                 
     442                return $event; 
     443                 
    332444            } else { 
    333445                return false; 
     
    367479 
    368480            if ($post_id = wp_insert_post($post)) { 
     481                $ref = sanitize_text_field($args['ref']); 
    369482                add_post_meta($post_id, '_wpt_source', $this->get('slug'), true); 
    370                 add_post_meta($post_id, '_wpt_source_ref', sanitize_text_field($args['ref']), true); 
     483                add_post_meta($post_id, '_wpt_source_ref', $ref, true); 
    371484                $this->stats['productions_created']++; 
    372                 return new WPT_Production($post_id); 
     485 
     486                $production = new WPT_Production($post_id); 
     487                $this->productions_by_ref[ $ref ] = $production; 
     488                return $production; 
    373489            } else { 
    374490                return false; 
     
    412528         * Use this helper function to find a previously imported event while processing your feed. 
    413529         *  
    414          * @since 0.10 
    415          * 
    416          * @see WPT_Importer::update_event() 
    417          * 
    418          * @access protected 
    419          * @param string $ref A unique identifier for the event. 
    420          * @return WPT_Event The event. Returns `false` if no previously imported event was found. 
     530         * @since   0.10 
     531         * @since   0.15.27 Added support for preloaded events. 
     532         * 
     533         * @uses WPT_Importer::get_preloaded_event_by_ref() to get a preloaded event. 
     534         * @uses WPT_Importer::events_by_ref to add an event to the preloaded events. 
     535         * 
     536         * @param   string      $ref    A unique identifier for the event. 
     537         * @return  WPT_Event           The event. Returns `false` if no previously imported event was found. 
    421538         */ 
    422539        function get_event_by_ref($ref) { 
     540             
     541            if ( $preloaded_event = $this->get_preloaded_event_by_ref( $ref ) ) { 
     542                return $preloaded_event; 
     543            } 
     544             
    423545            $args = array( 
    424546                'post_type' => WPT_Event::post_type_name, 
     
    438560     
    439561            if (!empty($events[0])) { 
    440                 return new WPT_Event($events[0]); 
     562                $event = new WPT_Event( $events[0] ); 
     563                $this->events_by_ref[ $ref ] = $event; 
     564                return $event; 
    441565            } else { 
    442566                return false; 
     
    446570         
    447571        /** 
     572         * Gets a preloaded event by source ref. 
     573         *  
     574         * @since   0.15.27 
     575         * @uses    WPT_Importer::events_by_ref to retrieve a preloaded event. 
     576         * @param   string  $ref    The source ref. 
     577         * @return  WPT_Event|bool  The preloaded event or <false> if no event was found. 
     578         */ 
     579        function get_preloaded_event_by_ref( $ref ) { 
     580 
     581            if ( !isset( $this->events_by_ref[ $ref ] ) ) { 
     582                return false; 
     583            } 
     584             
     585            return $this->events_by_ref[ $ref ]; 
     586        } 
     587         
     588        /** 
     589         * Gets a preloaded production by source ref. 
     590         *  
     591         * @since   0.15.27 
     592         * @uses    WPT_Importer::productions_by_ref to retrieve a preloaded production. 
     593         * @param   string              $ref    The source ref. 
     594         * @return  WPT_Production|bool         The preloaded production or <false> if no production was found. 
     595         */ 
     596        function get_preloaded_production_by_ref( $ref ) { 
     597 
     598            if ( !isset( $this->productions_by_ref[ $ref ] ) ) { 
     599                return false; 
     600            } 
     601             
     602            return $this->productions_by_ref[ $ref ]; 
     603        } 
     604         
     605        /** 
    448606         * Gets a production based on the unique identifier. 
    449607         *  
    450608         * Use this helper function to find a previously imported production while processing your feed. 
    451609         *  
    452          * @since 0.10 
    453          * 
    454          * @access protected 
    455          * @param string $ref A unique identifier for the production. 
    456          * @return WPT_Production The production. Returns `false` if no previously imported production was found. 
    457          */ 
    458         protected function get_production_by_ref($ref) { 
     610         * @since   0.10 
     611         * @since   0.15.27 Added support for preloaded events. 
     612         * 
     613         * @uses WPT_Importer::get_preloaded_production_by_ref() to get a preloaded production. 
     614         * @uses WPT_Importer::productions_by_ref to add a production to the preloaded productions. 
     615         * 
     616         * @param   string          $ref    A unique identifier for the production. 
     617         * @return  WPT_Production          The production. Returns `false` if no previously imported production was found. 
     618         */ 
     619        function get_production_by_ref($ref) { 
     620 
     621            if ( $preloaded_production = $this->get_preloaded_production_by_ref( $ref ) ) { 
     622                return $preloaded_production; 
     623            } 
     624             
    459625            $args = array( 
    460626                'post_type' => WPT_Production::post_type_name, 
     
    474640 
    475641            if (!empty($productions[0])) { 
    476                 return new WPT_Production($productions[0]); 
     642                $production = new WPT_Production( $productions[0]->ID ); 
     643                $this->productions_by_ref[ $ref ] = $production; 
     644                return $production; 
    477645            } else { 
    478646                return false; 
     
    504672        private function set_event_prices($event_id, $prices) { 
    505673             
    506             delete_post_meta($event_id, '_wpt_event_tickets_price'); 
     674            $current_prices = get_post_meta( $event_id, '_wpt_event_tickets_price'); 
    507675     
    508676            foreach($prices as $price) { 
    509                 add_post_meta($event_id,'_wpt_event_tickets_price', $price);                             
     677                if ( !in_array($price, $current_prices)) { 
     678                    add_post_meta($event_id,'_wpt_event_tickets_price', $price);                                             
     679                } 
     680            } 
     681             
     682            foreach( $current_prices as $current_price) { 
     683                if (!in_array($current_price, $prices)) { 
     684                    delete_post_meta($event_id, '_wpt_event_tickets_price', $current_price); 
     685                } 
    510686            } 
    511687             
     
    560736            } 
    561737             
    562             update_post_meta($event->ID, WPT_Production::post_type_name, $args['production']); 
     738            update_post_meta($event->ID, WPT_Production::post_type_name, (string) $args['production']);          
    563739             
    564740            if ($args['venue']!==false) { 
     
    583759            $this->set('marked_events', array_diff( $this->get('marked_events'), array( $event->ID ) ) ); 
    584760 
    585             delete_post_meta($event->ID, $this->get('marker')); 
    586  
    587761            $this->stats['events_updated']++; 
    588762             
    589             return new WPT_Event($event->ID); 
     763            $event = new WPT_Event($event->ID); 
     764             
     765            $this->events_by_ref[ $args['ref'] ] = $event; 
     766             
     767            return $event; 
    590768             
    591769        } 
     
    684862                $this->remove_marked_events();           
    685863            } 
    686              
     864 
    687865            $this->stats['end'] = current_time( 'timestamp' ); 
    688866             
     
    725903            if ($reimport_result) { 
    726904                $this->remove_marked_events();           
    727             }            
     905            } 
     906             
    728907        } 
    729908 
     
    747926            ) { 
    748927                $this->execute(); 
     928                return; 
    749929                wp_redirect( 'admin.php?page=wpt_admin&tab='.$this->get('slug') ); 
    750930                exit; 
     
    8901070            } 
    8911071        } 
    892          
     1072 
     1073        /** 
     1074         * Clear all preloaded events. 
     1075         *  
     1076         * Used by unit tests to clear preloaded events in between tests. 
     1077         * 
     1078         * @since   0.15.27 
     1079         * @uses    WPT_Importer::events_by_ref to clear all preloaded events. 
     1080         * @return  void 
     1081         */ 
     1082        function clear_preloaded_events() { 
     1083            $this->events_by_ref = array(); 
     1084        } 
     1085         
     1086        /** 
     1087         * Clear all preloaded productions. 
     1088         *  
     1089         * Used by unit tests to clear preloaded productions in between tests. 
     1090         * 
     1091         * @since   0.15.27 
     1092         * @uses    WPT_Importer::productions_by_ref to clear all preloaded productions. 
     1093         * @return  void 
     1094         */ 
     1095        function clear_preloaded_productions() { 
     1096            $this->productions_by_ref = array();             
     1097        } 
     1098 
    8931099        /** 
    8941100         * Saves the import stats. 
  • theatre/tags/0.15/functions/wpt_production.php

    r1562155 r1675918  
    631631 
    632632    /** 
     633     * Gets the production tags. 
     634     *  
     635     * @since   0.15.27 
     636     * @return  WP_Term[]   The production tags. 
     637     */ 
     638    function tags( ) { 
     639         
     640        $tags = wp_get_post_tags( $this->ID ); 
     641                 
     642        /** 
     643         * Filter the production tags. 
     644         *  
     645         * @since   0.15.27 
     646         * @param   WP_Term[]       $tags       The production tags. 
     647         * @param   WPT_Production  $production The production. 
     648         */ 
     649        $tags = apply_filters( 'wpt/production/tags', $tags, $this ); 
     650         
     651        return $tags; 
     652    } 
     653     
     654    /** 
     655     * Gets the HTML for the production tags. 
     656     *  
     657     * @since   0.15.27 
     658     * @return  string  The HTML for the production tags. 
     659     */ 
     660    function tags_html( ) { 
     661         
     662        ob_start(); 
     663 
     664        ?><ul class="<?php echo self::post_type_name; ?>_tags"><?php 
     665             
     666            $tags = $this->tags(); 
     667            foreach( $tags as $tag ) { 
     668                ?><li class="<?php echo self::post_type_name; ?>_tag <?php echo self::post_type_name; ?>_tag_<?php echo $tag->slug; ?>"><?php  
     669                    echo $tag->name;  
     670                ?></li><?php 
     671            } 
     672        ?></ul><?php 
     673 
     674        $html = ob_get_clean(); 
     675 
     676        /** 
     677         * Filter the HTML for the production tags. 
     678         * @since   0.15.27 
     679         * @param   string          $html       The HTML for the upcoming production dates. 
     680         * @param   WPT_Production  $production The production. 
     681         */ 
     682        $html = apply_filters( 'wpt/production/tags/html', $html, $this ); 
     683 
     684        return $html; 
     685         
     686    } 
     687 
     688    /** 
    633689     * Gets the production thumbnail ID. 
    634690     * 
  • theatre/tags/0.15/functions/wpt_production_template.php

    r1391073 r1675918  
    3434     * 
    3535     * @since   0.12.1 
     36     * @since   0.15.27 Added the 'tags' field. 
     37     * 
    3638     * @access  protected 
    3739     * @param   string  $field      The field. 
     
    6466                $value = $this->object->prices_html(); 
    6567                break; 
     68            case 'tags' : 
     69                $value = $this->object->tags_html(); 
     70                break; 
    6671            case 'title': 
    6772            case 'dates': 
     
    7479                break; 
    7580            default: 
    76                 $value = $this->object->custom( $field,$value_args ); 
     81                $value = $this->object->custom( $field, $value_args ); 
    7782        } 
    7883 
  • theatre/tags/0.15/readme.txt

    r1674822 r1675918  
    133133    * Renamed 'productions' to 'events'. 
    134134    * Simplified the events admin screen. 
    135     * Added a new `{{prices}}` placeholder for productions (0.15.3). 
     135    * Added a new `{{prices}}` placeholder for events (0.15.3). 
    136136    * Events can now be filtered by tags (0.15.5). 
    137137    * Activated events archive pages (0.15.10). 
     
    143143    * The calendar widget now jumps to the active month if you show the widget on you events page (0.15.23). 
    144144    * The use of transients for event lists and calendar can now be switched off using the `theater/transient/active` filter (0.15.24). Thank you [joost de keijzer](https://dekeijzer.org/)! 
     145    * Added a new `{{tags}}` placeholder for events (0.15.27). See the updated [docs](https://github.com/slimndap/wp-theatre/wiki/Shortcodes). Thank you [Raymond van Melzen](https://www.vanmelzen.com/)! 
     146    * Internal changes to further improve performance of importers (0.15.27). 
    145147 
    146148* Bugfix 
     
    162164    * Fixed several performance issues of during imports (0.15.24). 
    163165    * Fixed a conflict with WP-CLI. (0.15.24). 
     166    * Fixed an [issue](https://github.com/slimndap/wp-theatre/pull/242) with the fallback of custom field values of events. Thank you [joost de keijzer](https://dekeijzer.org/)! 
     167     
    164168     
    165169* Deprecations 
     
    244248== Upgrade Notice == 
    245249 
     250= 0.15.27 = 
     251Added a new `{{tags}}` placeholder for events. 
     252 
    246253= 0.15.26 =  
    247254Fixes a problem with the Production events widget that was introduced in a previous update. 
     
    305312 
    306313= 0.15.3 = 
    307 Added a new `{{prices}}` placeholder for productions. 
     314Added a new `{{prices}}` placeholder for events. 
    308315 
    309316= 0.15.2 = 
  • theatre/tags/0.15/theater.php

    r1665902 r1675918  
    66    Description: Turn your Wordpress website into a theater website. 
    77    Author: Jeroen Schmit 
    8     Version: 0.15.26 
     8    Version: 0.15.27 
    99    Author URI: http://slimndap.com/ 
    1010    Text Domain: theatre 
     
    2929if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 
    3030     
    31 $wpt_version = '0.15.26'; 
     31$wpt_version = '0.15.27'; 
    3232 
    3333class WP_Theatre { 
Note: See TracChangeset for help on using the changeset viewer.