WordPress.org

Plugin Directory

Changeset 1771190


Ignore:
Timestamp:
11/20/17 09:02:48 (4 weeks ago)
Author:
cdillon27
Message:

Version 2.28.4

Location:
strong-testimonials
Files:
2 deleted
31 edited
25 copied

Legend:

Unmodified
Added
Removed
  • strong-testimonials/tags/2.28.4/admin/admin-notices.php

    r1676906 r1771190  
    114114 * Return a specific admin notice. 
    115115 * 
    116  * TODO A generic error message with a link to export debug log. 
    117116 * @since 2.24.0 
    118117 */ 
  • strong-testimonials/tags/2.28.4/admin/admin.php

    r1770057 r1771190  
    11<?php 
    22/** 
    3  * Strong Testimonials - Admin functions 
     3 * Strong Testimonials admin functions. 
     4 * 
     5 * 1. Check for required WordPress version. 
     6 * 2. Check for plugin update. 
     7 * 3. Initialize. 
    48 */ 
    59 
    610/** 
    7  * Init 
    8  */ 
    9 function wpmtst_admin_init() { 
    10  
    11     // Remove ad banner from Captcha plugin 
    12     remove_action( 'admin_notices', 'cptch_plugin_banner' ); 
    13  
    14     // Check WordPress version 
    15     wpmtst_version_check(); 
    16  
    17     // Check for new options 
    18     Strong_Testimonials_Updater::update(); 
    19  
    20     // Redirect to About page for new installs only 
    21     Strong_Testimonials_Updater::activation_redirect(); 
    22  
    23     /** 
    24      * Custom action hooks 
    25      * 
    26      * @since 1.18.4 
    27      */ 
    28     if ( isset( $_REQUEST['action'] ) && '' != $_REQUEST['action'] ) { 
    29         do_action( 'wpmtst_' . $_REQUEST['action'] ); 
    30     } 
    31  
    32 } 
    33 add_action( 'admin_init', 'wpmtst_admin_init' ); 
    34  
    35 /** 
    36  * Are we on a testimonial admin screen? 
    37  * 
    38  * Used by add-ons too! 
    39  * 
    40  * @return bool 
    41  */ 
    42 function wpmtst_is_testimonial_screen() { 
    43     $screen = get_current_screen(); 
    44     return ( $screen && 'wpm-testimonial' == $screen->post_type ); 
    45 } 
    46  
    47 /** 
    48  * Check WordPress version 
     11 * Check for required WordPress version. 
    4912 */ 
    5013function wpmtst_version_check() { 
     
    6225        wp_die( $message ); 
    6326    } 
     27} 
     28 
     29add_action( 'admin_init', 'wpmtst_version_check', 1 ); 
     30 
     31/** 
     32 * Check for plugin update. 
     33 * 
     34 * @since 2.28.4 Before other admin_init actions. 
     35 */ 
     36function wpmtst_update_check() { 
     37    $updater = new Strong_Testimonials_Updater(); 
     38    $updater->update(); 
     39} 
     40 
     41add_action( 'admin_init', 'wpmtst_update_check' ); 
     42 
     43/** 
     44 * Initialize. 
     45 */ 
     46function wpmtst_admin_init() { 
     47 
     48    // Remove ad banner from Captcha plugin 
     49    remove_action( 'admin_notices', 'cptch_plugin_banner' ); 
     50 
     51    // Redirect to About page for new installs only 
     52    wpmtst_activation_redirect(); 
     53 
     54    /** 
     55     * Custom action hooks 
     56     * 
     57     * @since 1.18.4 
     58     */ 
     59    if ( isset( $_REQUEST['action'] ) && '' != $_REQUEST['action'] ) { 
     60        do_action( 'wpmtst_' . $_REQUEST['action'] ); 
     61    } 
     62 
     63} 
     64 
     65add_action( 'admin_init', 'wpmtst_admin_init', 20 ); 
     66 
     67/** 
     68 * Redirect to About page. 
     69 */ 
     70function wpmtst_activation_redirect() { 
     71    if ( get_option( 'wpmtst_do_activation_redirect', false ) ) { 
     72        delete_option( 'wpmtst_do_activation_redirect' ); 
     73        wp_redirect( admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' ) ); 
     74        exit; 
     75    } 
     76} 
     77 
     78/** 
     79 * Are we on a testimonial admin screen? 
     80 * 
     81 * Used by add-ons too! 
     82 * 
     83 * @return bool 
     84 */ 
     85function wpmtst_is_testimonial_screen() { 
     86    $screen = get_current_screen(); 
     87    return ( $screen && 'wpm-testimonial' == $screen->post_type ); 
    6488} 
    6589 
  • strong-testimonials/tags/2.28.4/admin/class-strong-testimonials-defaults.php

    r1770057 r1771190  
    1919     * @since 2.2.11 scrolltop 
    2020     * @since 2.3.0  remove whitespace 
    21      * @since 2.4.0  email log level for troubleshooting 
    2221     * @since 2.6.0  embed width 
    2322     * @since 2.6.2  slideshow z-index 
     
    3130    public static function get_options() { 
    3231        $default_options = array( 
    33             'debug_log'             => 0, 
    34             'email_log_level'       => 1, 
    3532            'embed_width'           => '', 
    3633            'load_font_awesome'     => 1, 
  • strong-testimonials/tags/2.28.4/admin/class-strong-testimonials-updater.php

    r1770057 r1771190  
    11<?php 
     2 
    23/** 
    34 * Class Strong_Testimonials_Updater 
     
    1213     * @var string 
    1314     */ 
    14     public static $old_version; 
     15    private $old_version; 
     16 
     17    /** 
     18     * Log steps during update process. 
     19     * 
     20     * @var array 
     21     */ 
     22    private $new_log; 
    1523 
    1624    /** 
     
    1826     */ 
    1927    public function __construct() { 
    20     } 
    21  
    22     /** 
    23      * Static initializer. 
    24      */ 
    25     public static function init() { 
    26         self::$old_version = get_option( 'wpmtst_plugin_version', false ); 
     28        $this->new_log     = array(); 
     29        $this->old_version = get_option( 'wpmtst_plugin_version', false ); 
     30        if ( $this->old_version ) { 
     31            $this->log( __CLASS__, 'old: ' . $this->old_version . ' --> new: ' . WPMTST_VERSION ); 
     32        } 
     33        else { 
     34            $this->log( __CLASS__, 'NEW INSTALL', WPMTST_VERSION ); 
     35        } 
     36    } 
     37 
     38    /** 
     39     * Add a log entry. 
     40     * 
     41     * @param        $name 
     42     * @param string $entry 
     43     * @param string $var 
     44     */ 
     45    private function log( $name, $entry = '', $var = '' ) { 
     46        if ( $name ) { 
     47            $x = $name; 
     48            if ( $entry ) { 
     49                $x .= ' : ' . $entry; 
     50                if ( $var ) { 
     51                    $x .= ' = '; 
     52                    if ( is_array( $var ) || is_object( $var ) ) { 
     53                        // log the text 
     54                        $this->new_log[] = $x; 
     55                        // then log the variable 
     56                        $this->new_log[] = $var; 
     57                    } 
     58                    else { 
     59                        $this->new_log[] = $x . $var; 
     60                    } 
     61                } 
     62                else { 
     63                    $this->new_log[] = $x; 
     64                } 
     65            } 
     66            else { 
     67                $this->new_log[] = $x; 
     68            } 
     69        } 
     70    } 
     71 
     72    /** 
     73     * Plugin activation and update. 
     74     * 
     75     * --------- 
     76     * REMEMBER! 
     77     * --------- 
     78     * If you are changing the value of a default field property, 
     79     * then you need to unset that value in the current field 
     80     * before merging in the new default values. 
     81     * 
     82     * For example, when changing a rating field property from 
     83     * disabled (0) to enabled (1) in order for the property to 
     84     * be displayed in the form editor. 
     85     */ 
     86    public function update() { 
     87        if ( $this->old_version == WPMTST_VERSION ) { 
     88            return; 
     89        } 
     90 
     91        if ( get_transient( 'wpmtst_update_in_progress' ) ) { 
     92            return; 
     93        } 
     94 
     95        set_transient( 'wpmtst_update_in_progress', 1, 10 ); 
     96 
     97        // Redirect to About page afterwards. On new install or (de)activation only. 
     98        if ( false === $this->old_version ) { 
     99            add_option( 'wpmtst_do_activation_redirect', true ); 
     100        } 
     101 
     102        /** 
     103         * Add custom capablities. 
     104         * 
     105         * @since 2.27.1 
     106         */ 
     107        $this->add_caps(); 
     108 
     109        /** 
     110         * Check DB version. 
     111         */ 
     112        $this->update_db_check(); 
     113 
     114        /** 
     115         * Let's start updating. 
     116         */ 
     117        $history = get_option( 'wpmtst_history', array() ); 
     118 
     119        /** 
     120         * Options. 
     121         */ 
     122        update_option( 'wpmtst_options', $this->update_options() ); 
     123 
     124        /** 
     125         * Custom fields. 
     126         */ 
     127        update_option( 'wpmtst_fields', $this->update_fields() ); 
     128 
     129        /** 
     130         * Forms. 
     131         */ 
     132        update_option( 'wpmtst_base_forms', $this->update_base_forms() ); 
     133        update_option( 'wpmtst_custom_forms', $this->update_custom_forms() ); 
     134        update_option( 'wpmtst_form_options', $this->update_form_options() ); 
     135 
     136        /** 
     137         * Compatibility options. 
     138         * 
     139         * @since 2.28.0 
     140         */ 
     141        update_option( 'wpmtst_compat_options', $this->update_compat_options() ); 
     142 
     143        /** 
     144         * Overwrite default view options. 
     145         * 
     146         * @since 2.15.0 
     147         */ 
     148        update_option( 'wpmtst_view_options', $this->update_view_options() ); 
     149 
     150        /** 
     151         * Overwrite default view settings. 
     152         * 
     153         * @since 2.15.0 
     154         */ 
     155        update_option( 'wpmtst_view_default', $this->update_default_view() ); 
     156 
     157        /** 
     158         * Update views. 
     159         */ 
     160        $this->update_views(); 
     161 
     162        /** 
     163         * Convert nofollow 
     164         */ 
     165        if ( ! isset( $history['2.23.0_convert_nofollow'] ) ) { 
     166            $this->convert_nofollow(); 
     167            $this->update_history_log( '2.23.0_convert_nofollow' ); 
     168        } 
     169 
     170        /** 
     171         * Legacy stuff. 
     172         */ 
     173        if ( ! isset( $history['2.28_new_update_process'] ) ) { 
     174            // Upgrade from version 1.x 
     175            delete_option( 'wpmtst_cycle' ); 
     176 
     177            // L10n context no longer used. 
     178            delete_option( 'wpmtst_l10n_contexts' ); 
     179 
     180            // Remove older attempts at admin notices. 
     181            delete_option( 'wpmtst_admin_notices' ); 
     182            delete_option( 'wpmtst_news_flag' ); 
     183 
     184            $this->update_history_log( '2.28_new_update_process' ); 
     185        } 
     186 
     187        /** 
     188         * Update the plugin version. 
     189         */ 
     190        update_option( 'wpmtst_plugin_version', WPMTST_VERSION ); 
     191 
     192        /** 
     193         * Update log. 
     194         */ 
     195        $this->log( __FUNCTION__, 'complete' ); 
     196        $this->update_log(); 
     197 
     198        delete_transient( 'wpmtst_update_in_progress' ); 
     199    } 
     200 
     201    /** 
     202     * Update the log in options table. 
     203     */ 
     204    public function update_log() { 
     205        $log                            = get_option( 'wpmtst_update_log', array() ); 
     206        $log[ current_time( 'mysql' ) ] = $this->new_log; 
     207        update_option( 'wpmtst_update_log', $log ); 
    27208    } 
    28209 
     
    34215     * @return bool|null|WP_Role 
    35216     */ 
    36     public static function get_admins() { 
     217    public function get_admins() { 
    37218        return get_role( 'administrator' ); 
    38219    } 
     
    43224     * @since 2.27.1 
    44225     */ 
    45     public static function add_caps() { 
    46         if ( $admins = self::get_admins() ) { 
     226    public function add_caps() { 
     227        $admins = $this->get_admins(); 
     228        if ( $admins ) { 
    47229            $admins->add_cap( 'strong_testimonials_views' ); 
    48230            $admins->add_cap( 'strong_testimonials_fields' ); 
    49231            $admins->add_cap( 'strong_testimonials_options' ); 
    50232            $admins->add_cap( 'strong_testimonials_about' ); 
     233            $this->log( __FUNCTION__, 'success' ); 
     234        } 
     235        else { 
     236            $this->log( __FUNCTION__, 'failed' ); 
    51237        } 
    52238    } 
     
    55241     * Remove custom capabilities. 
    56242     * 
     243     * Was part of uninstall process but cannot be run from static class. 
     244     * 
     245     * @todo  Move to Leave No Trace. 
     246     * 
    57247     * @since 2.27.1 
    58248     */ 
    59     public static function remove_caps() { 
    60         if ( $admins = self::get_admins() ) { 
     249    public function remove_caps() { 
     250        if ( $admins = $this->get_admins() ) { 
    61251            $admins->remove_cap( 'strong_testimonials_views' ); 
    62252            $admins->remove_cap( 'strong_testimonials_fields' ); 
     
    71261     * @since 1.21.0 Checking for new table version. 
    72262     */ 
    73     public static function update_db_check() { 
     263    public function update_db_check() { 
    74264        if ( get_option( 'wpmtst_db_version' ) != WPMST()->get_db_version() ) { 
    75             self::update_tables(); 
     265            $this->update_tables(); 
     266        } 
     267        else { 
     268            $this->log( __FUNCTION__, 'tables up to date' ); 
    76269        } 
    77270    } 
     
    82275     * @since 1.21.0 
    83276     */ 
    84     public static function update_tables() { 
     277    public function update_tables() { 
    85278        global $wpdb; 
    86279        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
     280        $this->log( __FUNCTION__, 'start' ); 
    87281 
    88282        $charset_collate = $wpdb->get_charset_collate(); 
     
    97291        ) $charset_collate;"; 
    98292 
    99         // TODO Error handling 
     293        $wpdb->show_errors(); 
    100294        $result = dbDelta( $sql ); 
     295        $wpdb->hide_errors(); 
     296 
     297        if ( $wpdb->last_error ) { 
     298            deactivate_plugins( 'strong-testimonials/strong-testimonials.php' ); 
     299            $message = '<p><span style="color: #CD0000;">'; 
     300            $message .= __( 'An error occurred.', 'strong-testimonials' ) . '</span>&nbsp;'; 
     301            $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' ) . '&nbsp;'; 
     302            $message .= sprintf( __( 'Please <a href="%s" target="_blank">open a support ticket</a>.', 'strong-testimonials' ), esc_url( 'https://support.strongplugins.com/new-ticket/' ) ) . '</p>'; 
     303            $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>'; 
     304 
     305            $this->log( __FUNCTION__, 'error', $wpdb->last_error ); 
     306            $this->update_log(); 
     307 
     308            wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) ); 
     309        } 
    101310 
    102311        update_option( 'wpmtst_db_version', WPMST()->get_db_version() ); 
    103     } 
    104  
    105     /** 
    106      * Redirect to About page. 
    107      */ 
    108     public static function activation_redirect() { 
    109         if ( get_option( 'wpmtst_do_activation_redirect', false ) ) { 
    110             delete_option( 'wpmtst_do_activation_redirect' ); 
    111             wp_redirect( admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' ) ); 
    112             exit; 
    113         } 
    114     } 
    115  
    116     /** 
    117      * Plugin activation and upgrade. 
    118      * 
    119      * --------- 
    120      * REMEMBER! 
    121      * --------- 
    122      * If you are changing the value of a default field property, 
    123      * then you need to unset that value in the current field 
    124      * before merging in the new default values. 
    125      * 
    126      * For example, when changing a rating field property from 
    127      * disabled (0) to enabled (1) in order for the property to 
    128      * be displayed in the form editor. 
    129      */ 
    130     public static function update() { 
    131         if ( self::$old_version == WPMTST_VERSION ) { 
    132             return; 
    133         } 
    134  
    135         // Redirect to About page for new installs only 
    136         if ( false === self::$old_version ) { 
    137             add_option( 'wpmtst_do_activation_redirect', true ); 
    138         } 
    139  
    140         /** 
    141          * Add custom capablities. 
    142          * 
    143          * @since 2.27.1 
    144          */ 
    145         self::add_caps(); 
    146  
    147         /** 
    148          * Check DB version. 
    149          */ 
    150         self::update_db_check(); 
    151  
    152         /** 
    153          * Let's start updating. 
    154          */ 
    155         $history = get_option( 'wpmtst_history', array() ); 
    156  
    157         /** 
    158          * Options. 
    159          */ 
    160         update_option( 'wpmtst_options', self::update_options() ); 
    161  
    162         /** 
    163          * Custom fields. 
    164          */ 
    165         update_option( 'wpmtst_fields', self::update_fields() ); 
    166  
    167         /** 
    168          * Forms. 
    169          */ 
    170         update_option( 'wpmtst_base_forms', self::update_base_forms() ); 
    171         update_option( 'wpmtst_custom_forms', self::update_custom_forms() ); 
    172         update_option( 'wpmtst_form_options', self::update_form_options() ); 
    173  
    174         /** 
    175          * Compatibility options. 
    176          * 
    177          * @since 2.28.0 
    178          */ 
    179         update_option( 'wpmtst_compat_options', self::update_compat_options() ); 
    180  
    181         /** 
    182          * Overwrite default view options. 
    183          * 
    184          * @since 2.15.0 
    185          */ 
    186         update_option( 'wpmtst_view_options', self::update_view_options() ); 
    187  
    188         /** 
    189          * Overwrite default view settings. 
    190          * 
    191          * @since 2.15.0 
    192          */ 
    193         update_option( 'wpmtst_view_default', self::update_default_view() ); 
    194  
    195         /** 
    196          * Update views. 
    197          */ 
    198         self::update_views(); 
    199  
    200         /** 
    201          * Convert nofollow 
    202          */ 
    203         if ( ! isset( $history['2.23.0_convert_nofollow'] ) ) { 
    204             self::convert_nofollow(); 
    205             self::update_history_log( '2.23.0_convert_nofollow' ); 
    206         } 
    207  
    208         /** 
    209          * Legacy stuff. 
    210          */ 
    211         if ( ! isset( $history['2.28_new_update_process'] ) ) { 
    212             // Upgrade from version 1.x 
    213             delete_option( 'wpmtst_cycle' ); 
    214  
    215             // L10n context no longer used. 
    216             delete_option( 'wpmtst_l10n_contexts' ); 
    217  
    218             //  Remove older attempts at admin notices. 
    219             delete_option( 'wpmtst_admin_notices' ); 
    220             delete_option( 'wpmtst_news_flag' ); 
    221  
    222             self::update_history_log( '2.28_new_update_process' ); 
    223         } 
    224  
    225         /** 
    226          * Update the plugin version. 
    227          */ 
    228         update_option( 'wpmtst_plugin_version', WPMTST_VERSION ); 
     312 
     313        $this->log( __FUNCTION__, 'dbDelta', $result ? $result : 'no change' ); 
    229314    } 
    230315 
     
    234319     * @param $event 
    235320     */ 
    236     public static function update_history_log( $event ) { 
    237         $history = get_option( 'wpmtst_history', array() ); 
     321    public function update_history_log( $event ) { 
     322        $history           = get_option( 'wpmtst_history', array() ); 
    238323        $history[ $event ] = current_time( 'mysql' ); 
    239         update_option( 'wpmtst_history', $history ); 
     324        $success           = update_option( 'wpmtst_history', $history ); 
     325        $this->log( __FUNCTION__, $event, $success ? 'record added' : 'record exists' ); 
    240326    } 
    241327 
     
    245331     * @return array 
    246332     */ 
    247     public static function update_options() { 
     333    public function update_options() { 
    248334        $options = get_option( 'wpmtst_options' ); 
    249335        if ( ! $options ) { 
     336            $this->log( __FUNCTION__, 'default' ); 
    250337            return Strong_Testimonials_Defaults::get_options(); 
    251338        } 
     
    254341         * Remove version 1 options 
    255342         */ 
    256         if ( version_compare( '2.0', self::$old_version ) ) { 
     343        if ( version_compare( '2.0', $this->old_version ) ) { 
    257344 
    258345            if ( isset( $options['captcha'] ) ) { 
     
    312399         * @since 2.27.0 
    313400         */ 
    314         $options['embed_width'] = $options['embed_width'] ? (int) sanitize_text_field( $options['embed_width'] ) : ''; 
     401        if ( 0 === $options['embed_width'] ) { 
     402            $options['embed_width'] = ''; 
     403        } 
     404 
     405        /** 
     406         * Remove email logging. 
     407         * 
     408         * @since 2.28.4 
     409         */ 
     410        if ( isset( $options['email_log_level'] ) ) { 
     411            unset( $options['email_log_level'] ); 
     412        } 
    315413 
    316414        // Merge in new options 
    317         return array_merge( Strong_Testimonials_Defaults::get_options(), $options ); 
     415        $options = array_merge( Strong_Testimonials_Defaults::get_options(), $options ); 
     416 
     417        $this->log( __FUNCTION__, 'done' ); 
     418 
     419        return $options; 
    318420    } 
    319421 
     
    323425     * @return array 
    324426     */ 
    325     public static function update_fields() { 
     427    public function update_fields() { 
    326428        $fields = get_option( 'wpmtst_fields', array() ); 
    327429        if ( ! $fields ) { 
     430            $this->log( __FUNCTION__, 'default' ); 
    328431            return Strong_Testimonials_Defaults::get_fields(); 
    329         } else { 
    330             /** 
    331              * Updating from 1.x 
    332              * 
    333              * Copy current custom fields to the new default custom form which will be added in the next step. 
    334              * 
    335              * @since 2.0.1 
    336              * @since 2.17 Added version check. 
    337              */ 
    338             if ( version_compare( '2.0', self::$old_version ) ) { 
    339                 if ( isset( $fields['field_groups'] ) ) { 
    340                     $default_custom_forms[1]['fields'] = $fields['field_groups']['custom']['fields']; 
    341                     unset( $fields['field_groups'] ); 
    342                 } 
    343                 if ( isset( $fields['current_field_group'] ) ) { 
    344                     unset( $fields['current_field_group'] ); 
    345                 } 
    346             } 
    347         } 
     432        } 
     433 
     434        /** 
     435         * Updating from 1.x 
     436         * 
     437         * Copy current custom fields to the new default custom form which will be added in the next step. 
     438         * 
     439         * @since 2.0.1 
     440         * @since 2.17 Added version check. 
     441         */ 
     442        if ( version_compare( '2.0', $this->old_version ) ) { 
     443            if ( isset( $fields['field_groups'] ) ) { 
     444                $default_custom_forms[1]['fields'] = $fields['field_groups']['custom']['fields']; 
     445                unset( $fields['field_groups'] ); 
     446            } 
     447            if ( isset( $fields['current_field_group'] ) ) { 
     448                unset( $fields['current_field_group'] ); 
     449            } 
     450        } 
     451 
     452        $this->log( __FUNCTION__, 'done' ); 
    348453 
    349454        return $fields; 
     
    355460     * @return array 
    356461     */ 
    357     public static function update_base_forms() { 
     462    public function update_base_forms() { 
     463        $this->log( __FUNCTION__, 'default' ); 
    358464        return Strong_Testimonials_Defaults::get_base_forms(); 
    359465    } 
     
    364470     * @return array 
    365471     */ 
    366     public static function update_custom_forms() { 
     472    public function update_custom_forms() { 
    367473        $custom_forms = get_option( 'wpmtst_custom_forms' ); 
    368474        if ( ! $custom_forms ) { 
     475            $this->log( __FUNCTION__, 'default' ); 
    369476            return Strong_Testimonials_Defaults::get_custom_forms(); 
    370         } else { 
    371             foreach ( $custom_forms as $form_id => $form_properties ) { 
    372                 foreach ( $form_properties['fields'] as $key => $form_field ) { 
    373  
    374                     /* 
    375                      * Convert categories to category-selector. 
    376                      * @since 2.17.0 
    377                      */ 
    378                     if ( 'categories' == $form_field['input_type'] ) { 
    379                         $custom_forms[ $form_id ]['fields'][ $key ]['input_type'] = 'category-selector'; 
    380                     } 
    381  
    382                     /* 
    383                      * Unset `show_default_options` for rating field. Going from 0 to 1. 
    384                      * @since 2.21.0 
    385                      */ 
    386                     if ( 'rating' == $form_field['input_type'] ) { 
    387                         unset( $form_field['show_default_options'] ); 
    388                     } 
    389  
    390                     /* 
    391                      * Add `show_required_option` to shortcode field. Initial value is false. 
    392                      * @since 2.22.0 
    393                      */ 
    394                     if ( 'shortcode' == $form_field['input_type'] ) { 
    395                         $form_field['show_required_option'] = false; 
    396                     } 
    397  
    398                     /* 
    399                      * Add `show_default_options` to checkbox field. 
    400                      * 
    401                      * @since 2.27.0 
    402                      */ 
    403                     if ( 'checkbox' == $form_field['input_type'] ) { 
    404                         $form_field['show_default_options'] = 1; 
    405                     } 
    406  
    407                     /* 
    408                      * Merge in new default. 
    409                      * Custom fields are in display order (not associative) so we must find them by `input_type`. 
    410                      * @since 2.21.0 Using default fields instead of default form as source 
    411                      */ 
    412                     $new_default = array(); 
    413                     $fields = get_option( 'wpmtst_fields', array() ); 
    414  
    415                     foreach ( $fields['field_types'] as $field_type_group_key => $field_type_group ) { 
    416                         foreach ( $field_type_group as $field_type_key => $field_type_field ) { 
    417                             if ( $field_type_field['input_type'] == $form_field['input_type'] ) { 
    418                                 $new_default = $field_type_field; 
    419                                 break; 
    420                             } 
     477        } 
     478 
     479        foreach ( $custom_forms as $form_id => $form_properties ) { 
     480            foreach ( $form_properties['fields'] as $key => $form_field ) { 
     481 
     482                /* 
     483                 * Convert categories to category-selector. 
     484                 * @since 2.17.0 
     485                 */ 
     486                if ( 'categories' == $form_field['input_type'] ) { 
     487                    $custom_forms[ $form_id ]['fields'][ $key ]['input_type'] = 'category-selector'; 
     488                } 
     489 
     490                /* 
     491                 * Unset `show_default_options` for rating field. Going from 0 to 1. 
     492                 * @since 2.21.0 
     493                 */ 
     494                if ( 'rating' == $form_field['input_type'] ) { 
     495                    unset( $form_field['show_default_options'] ); 
     496                } 
     497 
     498                /* 
     499                 * Add `show_required_option` to shortcode field. Initial value is false. 
     500                 * @since 2.22.0 
     501                 */ 
     502                if ( 'shortcode' == $form_field['input_type'] ) { 
     503                    $form_field['show_required_option'] = false; 
     504                } 
     505 
     506                /* 
     507                 * Add `show_default_options` to checkbox field. 
     508                 * 
     509                 * @since 2.27.0 
     510                 */ 
     511                if ( 'checkbox' == $form_field['input_type'] ) { 
     512                    $form_field['show_default_options'] = 1; 
     513                } 
     514 
     515                /* 
     516                 * Merge in new default. 
     517                 * Custom fields are in display order (not associative) so we must find them by `input_type`. 
     518                 * @since 2.21.0 Using default fields instead of default form as source 
     519                 */ 
     520                $new_default = array(); 
     521                $fields      = get_option( 'wpmtst_fields', array() ); 
     522 
     523                foreach ( $fields['field_types'] as $field_type_group_key => $field_type_group ) { 
     524                    foreach ( $field_type_group as $field_type_key => $field_type_field ) { 
     525                        if ( $field_type_field['input_type'] == $form_field['input_type'] ) { 
     526                            $new_default = $field_type_field; 
     527                            break; 
    421528                        } 
    422529                    } 
    423  
    424                     if ( $new_default ) { 
    425                         $custom_forms[ $form_id ]['fields'][ $key ] = array_merge( $new_default, $form_field ); 
    426                     } 
    427  
    428                 } 
    429             } 
    430         } 
     530                } 
     531 
     532                if ( $new_default ) { 
     533                    $custom_forms[ $form_id ]['fields'][ $key ] = array_merge( $new_default, $form_field ); 
     534                } 
     535 
     536            } 
     537        } 
     538 
     539        $this->log( __FUNCTION__, 'convert forms', 'done' ); 
    431540 
    432541        return $custom_forms; 
     
    438547     * @return array 
    439548     */ 
    440     public static function update_form_options() { 
     549    public function update_form_options() { 
    441550        $form_options = get_option( 'wpmtst_form_options' ); 
    442551        if ( ! $form_options ) { 
     552            $this->log( __FUNCTION__, 'default' ); 
    443553            return Strong_Testimonials_Defaults::get_form_options(); 
    444         } else { 
    445  
    446             $options = get_option( 'wpmtst_options', array() ); 
    447             // -5B- MOVE EXISTING OPTIONS 
    448             if ( isset( $options['admin_notify'] ) ) { 
    449                 $form_options['admin_notify']    = $options['admin_notify']; 
    450                 $form_options['admin_email']     = $options['admin_email']; 
    451                 $form_options['captcha']         = $options['captcha']; 
    452                 $form_options['honeypot_before'] = $options['honeypot_before']; 
    453                 $form_options['honeypot_after']  = $options['honeypot_after']; 
    454  
    455                 unset( $options['admin_notify'] ); 
    456                 unset( $options['admin_email'] ); 
    457                 unset( $options['captcha'] ); 
    458                 unset( $options['honeypot_before'] ); 
    459                 unset( $options['honeypot_after'] ); 
    460                 update_option( 'wpmtst_options', $options ); 
    461             } 
    462  
    463             // -5C- UPDATE 
    464             /** 
    465              * Update single email recipient to multiple. 
    466              * 
    467              * @since 1.18 
    468              */ 
    469             if ( ! isset( $form_options['recipients'] ) ) { 
    470                 $form_options['recipients'] = array( 
    471                     array( 
    472                         'admin_name'       => isset( $form_options['admin_name'] ) ? $form_options['admin_name'] : '', 
    473                         'admin_site_email' => isset( $form_options['admin_site_email'] ) ? $form_options['admin_site_email'] : 1, 
    474                         'admin_email'      => isset( $form_options['admin_email'] ) ? $form_options['admin_email'] : '', 
    475                         'primary'          => 1,  // cannot be deleted 
    476                     ), 
    477                 ); 
    478             } 
     554        } 
     555 
     556        $options = get_option( 'wpmtst_options', array() ); 
     557 
     558        /** 
     559         * Move existing options. 
     560         */ 
     561        if ( isset( $options['admin_notify'] ) ) { 
     562            $form_options['admin_notify'] = $options['admin_notify']; 
     563            unset( $options['admin_notify'] ); 
     564 
     565            $form_options['admin_email'] = $options['admin_email']; 
     566            unset( $options['admin_email'] ); 
     567 
     568            $form_options['captcha'] = $options['captcha']; 
     569            unset( $options['captcha'] ); 
     570 
     571            $form_options['honeypot_before'] = $options['honeypot_before']; 
     572            unset( $options['honeypot_before'] ); 
     573 
     574            $form_options['honeypot_after'] = $options['honeypot_after']; 
     575            unset( $options['honeypot_after'] ); 
     576 
     577            update_option( 'wpmtst_options', $options ); 
     578        } 
     579 
     580        /** 
     581         * Update single email recipient to multiple. 
     582         * 
     583         * @since 1.18 
     584         */ 
     585        if ( ! isset( $form_options['recipients'] ) ) { 
     586            $form_options['recipients'] = array( 
     587                array( 
     588                    'admin_name'       => isset( $form_options['admin_name'] ) ? $form_options['admin_name'] : '', 
     589                    'admin_site_email' => isset( $form_options['admin_site_email'] ) ? $form_options['admin_site_email'] : 1, 
     590                    'admin_email'      => isset( $form_options['admin_email'] ) ? $form_options['admin_email'] : '', 
     591                    'primary'          => 1,  // cannot be deleted 
     592                ), 
     593            ); 
    479594 
    480595            unset( $form_options['admin_name'] ); 
    481596            unset( $form_options['admin_site_email'] ); 
    482597            unset( $form_options['admin_email'] ); 
    483  
    484             /** 
    485              * Add default required-notice setting 
    486              * 
    487              * @since 2.24.1 
    488              */ 
    489             if ( ! isset( $form_options['messages']['required-field']['enabled'] ) ) { 
    490                 $form_options['messages']['required-field']['enabled'] = 1; 
    491             } 
    492  
    493             // Merge in new options 
    494             $form_options = array_merge( Strong_Testimonials_Defaults::get_form_options(), $form_options ); 
    495  
    496         } 
     598        } 
     599 
     600        /** 
     601         * Add default required-notice setting 
     602         * 
     603         * @since 2.24.1 
     604         */ 
     605        if ( ! isset( $form_options['messages']['required-field']['enabled'] ) ) { 
     606            $form_options['messages']['required-field']['enabled'] = 1; 
     607        } 
     608 
     609        // Merge in new options 
     610        $form_options = array_merge( Strong_Testimonials_Defaults::get_form_options(), $form_options ); 
     611 
     612        $this->log( __FUNCTION__, 'done' ); 
    497613 
    498614        return $form_options; 
     
    506622     * @return array 
    507623     */ 
    508     public static function update_compat_options() { 
     624    public function update_compat_options() { 
    509625        $options = get_option( 'wpmtst_compat_options' ); 
    510626        if ( ! $options ) { 
     627            $this->log( __FUNCTION__, 'default' ); 
    511628            return Strong_Testimonials_Defaults::get_compat_options(); 
    512629        } 
    513630 
    514631        // Merge in new options. 
     632        $defaults = Strong_Testimonials_Defaults::get_compat_options(); 
    515633        // Merge nested arrays individually. Don't use array_merge_recursive. 
    516         $defaults = Strong_Testimonials_Defaults::get_compat_options(); 
    517634        $options['ajax'] = array_merge( $defaults['ajax'], $options['ajax'] ); 
    518         return array_merge( $defaults, $options ); 
     635        $options         = array_merge( $defaults, $options ); 
     636 
     637        $this->log( __FUNCTION__, 'done' ); 
     638 
     639        return $options; 
    519640    } 
    520641 
     
    524645     * @return array 
    525646     */ 
    526     public static function update_view_options() { 
     647    public function update_view_options() { 
     648        $this->log( __FUNCTION__, 'default' ); 
    527649        return Strong_Testimonials_Defaults::get_view_options(); 
    528650    } 
     
    533655     * @return array 
    534656     */ 
    535     public static function update_default_view() { 
     657    public function update_default_view() { 
     658        $this->log( __FUNCTION__, 'default' ); 
    536659        return apply_filters( 'wpmtst_view_default', Strong_Testimonials_Defaults::get_default_view() ); 
    537660    } 
     
    540663     * Update views. 
    541664     */ 
    542     public static function update_views() { 
    543         // TODO Make this function accessible by add-ons; i.e. update_view( array ( {parameter} => {value} ) ); 
     665    public function update_views() { 
    544666        $views = wpmtst_get_views(); 
    545667 
    546668        if ( ! $views ) { 
     669            $this->log( __FUNCTION__, 'no views found' ); 
    547670            return; 
    548671        } 
    549672 
    550673        $default_view = get_option( 'wpmtst_view_default' ); 
    551         $history = get_option( 'wpmtst_history', array() ); 
     674        $history      = get_option( 'wpmtst_history', array() ); 
    552675 
    553676        foreach ( $views as $key => $view ) { 
     
    555678            $view_data = unserialize( $view['value'] ); 
    556679            if ( ! is_array( $view_data ) ) { 
     680                $this->log( __FUNCTION__, 'view ' . $view['id'] . ' data is not an array' ); 
    557681                continue; 
    558682            } 
    559683 
    560             if ( ! isset( $history['2.28_new_update_process'] ) ) { 
     684            if ( isset( $history['2.28_new_update_process'] ) ) { 
     685                $this->log( __FUNCTION__, 'already been thru 2.28 update process' ); 
     686            } 
     687            else { 
    561688                /** 
    562689                 * Compat mode no longer needed. 
     
    566693                unset( $view_data['compat'] ); 
    567694 
    568                 $view_data = self::convert_template_name( $view_data ); 
    569                 $view_data = self::convert_count( $view_data ); 
    570                 $view_data = self::convert_background_color( $view_data ); 
    571                 $view_data = self::convert_form_ajax( $view_data ); 
    572                 $view_data = self::convert_word_count( $view_data ); 
    573                 $view_data = self::convert_excerpt_length( $view_data ); 
    574                 $view_data = self::convert_more_text( $view_data ); 
    575                 $view_data = self::convert_modern_title( $view_data ); 
    576                 $view_data = self::convert_slideshow( $view_data ); 
    577                 $view_data = self::convert_title_link( $view_data ); 
    578                 $view_data = self::convert_pagination_type( $view_data ); 
     695                $view_data = $this->convert_template_name( $view_data ); 
     696                $view_data = $this->convert_count( $view_data ); 
     697                $view_data = $this->convert_background_color( $view_data ); 
     698                $view_data = $this->convert_form_ajax( $view_data ); 
     699                $view_data = $this->convert_layout( $view_data ); 
     700                $view_data = $this->convert_word_count( $view_data ); 
     701                $view_data = $this->convert_excerpt_length( $view_data ); 
     702                $view_data = $this->convert_more_text( $view_data ); 
     703                $view_data = $this->convert_modern_title( $view_data ); 
     704                $view_data = $this->convert_slideshow( $view_data ); 
     705                $view_data = $this->convert_title_link( $view_data ); 
     706                $view_data = $this->convert_pagination_type( $view_data ); 
    579707            } 
    580708 
     
    588716            if ( isset( $view_data['pagination_settings'] ) ) { 
    589717                $view['data']['pagination_settings'] = array_merge( $default_view['pagination_settings'], $view_data['pagination_settings'] ); 
     718 
    590719                /** 
    591                  * Bug fix for 2.28.2 
     720                 * Attempt to repair bug from 2.28.2 
    592721                 * 
    593722                 * @since 2.28.3 
    594723                 */ 
    595                 if ( 0 === $view['data']['pagination_settings']['end_size'] ) { 
     724                if ( ! isset( $view['data']['pagination_settings']['end_size'] ) || ! $view['data']['pagination_settings']['end_size'] ) { 
    596725                    $view['data']['pagination_settings']['end_size'] = 1; 
    597                 } 
    598                 if ( 0 === $view['data']['pagination_settings']['mid_size'] ) { 
     726                    $this->log( __FUNCTION__, 'fix end_size' ); 
     727                } 
     728                if ( ! isset( $view['data']['pagination_settings']['mid_size'] ) || ! $view['data']['pagination_settings']['mid_size'] ) { 
    599729                    $view['data']['pagination_settings']['mid_size'] = 2; 
    600                 } 
    601                 if ( 0 === $view['data']['pagination_settings']['per_page'] ) { 
     730                    $this->log( __FUNCTION__, 'fix mid_size' ); 
     731                } 
     732                if ( ! isset( $view['data']['pagination_settings']['per_page'] ) || ! $view['data']['pagination_settings']['per_page'] ) { 
    602733                    $view['data']['pagination_settings']['per_page'] = 5; 
    603                 } 
    604             } else { 
     734                    $this->log( __FUNCTION__, 'fix per_page' ); 
     735                } 
     736 
     737            } 
     738            else { 
    605739                $view['data']['pagination_settings'] = $default_view['pagination_settings']; 
    606740            } 
     
    608742            if ( isset( $view_data['slideshow_settings'] ) ) { 
    609743                $view['data']['slideshow_settings'] = array_merge( $default_view['slideshow_settings'], $view_data['slideshow_settings'] ); 
    610             } else { 
     744            } 
     745            else { 
    611746                $view['data']['slideshow_settings'] = $default_view['slideshow_settings']; 
    612747            } 
    613748            ksort( $view['data']['slideshow_settings'] ); 
    614749 
    615             wpmtst_save_view( $view ); 
     750            $success = wpmtst_save_view( $view ); 
    616751 
    617752        } // foreach $view 
     753 
     754        $this->log( __FUNCTION__, 'done' ); 
    618755    } 
    619756 
     
    625762     * @return array 
    626763     */ 
    627     public static function convert_template_name( $view_data ) { 
     764    public function convert_template_name( $view_data ) { 
    628765        // Change default template from empty to 'default:{type}' 
    629766        if ( ! $view_data['template'] ) { 
    630767            if ( 'form' == $view_data['mode'] ) { 
    631768                $type = 'form'; 
    632             } else { 
     769            } 
     770            else { 
    633771                $type = 'content'; 
    634772            } 
    635773 
    636774            $view_data['template'] = "default:$type"; 
    637         } else { 
     775        } 
     776        else { 
    638777            // Convert name; e.g. 'simple/testimonials.php' 
    639778            if ( 'widget/testimonials.php' == $view_data['template'] ) { 
    640779                $view_data['template'] = 'default:widget'; 
    641             } else { 
     780            } 
     781            else { 
    642782                $view_data['template'] = str_replace( '/', ':', $view_data['template'] ); 
    643783                $view_data['template'] = str_replace( 'testimonials.php', 'content', $view_data['template'] ); 
     
    659799     * @return array 
    660800     */ 
    661     public static function convert_excerpt_length( $view_data ) { 
     801    public function convert_excerpt_length( $view_data ) { 
    662802        if ( ! isset( $view_data['excerpt_length'] ) || ! $view_data['excerpt_length'] ) { 
    663             $default_view = Strong_Testimonials_Defaults::get_default_view(); 
    664             $average_word_length = self::get_average_word_length(); 
     803            $default_view        = Strong_Testimonials_Defaults::get_default_view(); 
     804            $average_word_length = $this->get_average_word_length(); 
    665805 
    666806            if ( isset( $view_data['length'] ) && $view_data['length'] ) { 
     
    669809                $word_count                  = $word_count > 300 ? 300 : $word_count; 
    670810                $view_data['excerpt_length'] = $word_count; 
    671             } else { 
     811            } 
     812            else { 
    672813                $view_data['excerpt_length'] = $default_view['excerpt_length']; 
    673814            } 
    674815 
    675816            unset( $view_data['length'] ); 
     817            $this->log( __FUNCTION__, 'done' ); 
    676818        } 
    677819 
     
    688830     * @return array 
    689831     */ 
    690     public static function convert_more_text( $view_data ) { 
     832    public function convert_more_text( $view_data ) { 
    691833        if ( isset( $view_data['more_text'] ) ) { 
    692834            if ( isset( $view_data['more_page'] ) && $view_data['more_page'] > 1 ) { 
     
    695837                $view_data['more_page']      = 1; 
    696838                $view_data['more_page_text'] = $view_data['more_text']; 
    697             } elseif ( isset( $view_data['more_post'] ) && $view_data['more_post'] ) { 
     839            } 
     840            elseif ( isset( $view_data['more_post'] ) && $view_data['more_post'] ) { 
    698841                $view_data['more_post_text'] = $view_data['more_text']; 
    699842            } 
    700843            unset( $view_data['more_text'] ); 
     844            $this->log( __FUNCTION__, 'done' ); 
    701845        } 
    702846 
     
    713857     * @return array 
    714858     */ 
    715     public static function convert_slideshow( $view_data ) { 
     859    public function convert_slideshow( $view_data ) { 
    716860        if ( 'slideshow' == $view_data['mode'] ) { 
    717861            $view_data['slideshow'] = 1; 
     
    778922            } 
    779923 
     924            $this->log( __FUNCTION__, 'done' ); 
    780925        } 
    781926 
     
    790935     * @return array 
    791936     */ 
    792     public static function convert_count( $view_data ) { 
    793         if ( -1 == $view_data['count'] ) { 
     937    public function convert_count( $view_data ) { 
     938        if ( - 1 == $view_data['count'] ) { 
    794939            $view_data['count'] = 1; 
    795940            $view_data['all']   = 1; 
     941            $this->log( __FUNCTION__, 'done' ); 
    796942        } 
    797943 
     
    806952     * @return array 
    807953     */ 
    808     public static function convert_background_color( $view_data ) { 
     954    public function convert_background_color( $view_data ) { 
    809955        if ( ! is_array( $view_data['background'] ) ) { 
    810956            $view_data['background'] = array( 
     
    812958                'type'  => 'single', 
    813959            ); 
     960            $this->log( __FUNCTION__, 'done' ); 
    814961        } 
    815962 
     
    824971     * @return array 
    825972     */ 
    826     public static function convert_form_ajax( $view_data ) { 
     973    public function convert_form_ajax( $view_data ) { 
    827974        if ( isset( $view_data['form-ajax'] ) ) { 
    828975            $view_data['form_ajax'] = $view_data['form-ajax']; 
    829976            unset( $view_data['form-ajax'] ); 
    830         } 
    831  
     977            $this->log( __FUNCTION__, 'done' ); 
     978        } 
     979 
     980        return $view_data; 
     981    } 
     982 
     983    /** 
     984     * Prevent incompatible layouts. 
     985     * 
     986     * @param $view_data 
     987     * 
     988     * @return array 
     989     */ 
     990    public function convert_layout( $view_data ) { 
    832991        if ( isset( $view_data['pagination'] ) && $view_data['pagination'] ) { 
    833992            if ( isset( $view_data['layout'] ) && 'masonry' == $view_data['layout'] ) { 
    834993                $view_data['layout'] = ''; 
     994                $this->log( __FUNCTION__, 'done' ); 
    835995            } 
    836996        } 
     
    8431003     * 
    8441004     * @since 2.11.4 
    845  
     1005     * 
    8461006     * @param $view_data 
    8471007     * 
    8481008     * @return array 
    8491009     */ 
    850     public static function convert_word_count( $view_data ) { 
     1010    public function convert_word_count( $view_data ) { 
    8511011        if ( isset( $view_data['word_count'] ) ) { 
    8521012            $view_data['excerpt_length'] = $view_data['word_count']; 
    8531013            unset( $view_data['word_count'] ); 
     1014            $this->log( __FUNCTION__, 'done' ); 
    8541015        } 
    8551016 
     
    8651026     * @return array 
    8661027     */ 
    867     public static function convert_modern_title( $view_data ) { 
     1028    public function convert_modern_title( $view_data ) { 
    8681029        if ( 'modern:content' == $view_data['template'] ) { 
    8691030            if ( ! isset( $history['2.12.4_convert_modern_template'] ) ) { 
    8701031                $view_data['title'] = 0; 
    871                 self::update_history_log( '2.12.4_convert_modern_template' ); 
     1032                $this->update_history_log( '2.12.4_convert_modern_template' ); 
     1033                $this->log( __FUNCTION__, 'done' ); 
    8721034            } 
    8731035        } 
     
    8801042     * 
    8811043     * @since 2.26.0 
    882  
     1044     * 
    8831045     * @param $view_data 
    8841046     * 
    8851047     * @return array 
    8861048     */ 
    887     public static function convert_title_link( $view_data ) { 
     1049    public function convert_title_link( $view_data ) { 
    8881050        if ( ! isset( $view_data['title_link'] ) ) { 
    8891051            $view_data['title_link'] = 0; 
     1052            $this->log( __FUNCTION__, 'done' ); 
    8901053        } 
    8911054 
     
    8981061     * @since 2.23.0 
    8991062     */ 
    900     public static function convert_nofollow() { 
     1063    public function convert_nofollow() { 
    9011064        $args  = array( 
    9021065            'posts_per_page'   => - 1, 
     
    9191082            if ( 'on' == $nofollow ) { 
    9201083                $new_value = 'yes'; 
    921             } elseif ( 1 === $nofollow ) { 
     1084            } 
     1085            elseif ( 1 === $nofollow ) { 
    9221086                $new_value = 'yes'; 
    923             } elseif ( 'off' == $nofollow ) { 
     1087            } 
     1088            elseif ( 'off' == $nofollow ) { 
    9241089                $new_value = 'no'; 
    925             } elseif ( 0 === $nofollow ) { 
     1090            } 
     1091            elseif ( 0 === $nofollow ) { 
    9261092                $new_value = 'no'; 
    927             } elseif ( is_bool( $nofollow ) ) { 
     1093            } 
     1094            elseif ( is_bool( $nofollow ) ) { 
    9281095                if ( $nofollow ) { 
    9291096                    $new_value = 'yes'; 
    930                 } else { 
     1097                } 
     1098                else { 
    9311099                    $new_value = 'default'; 
    9321100                } 
     
    9351103            update_post_meta( $post->ID, 'nofollow', $new_value ); 
    9361104        } 
     1105        $this->log( __FUNCTION__, 'done' ); 
    9371106    } 
    9381107 
     
    9461115     * @return mixed 
    9471116     */ 
    948     public static function convert_pagination_type( $view_data ) { 
     1117    public function convert_pagination_type( $view_data ) { 
    9491118        if ( isset( $view_data['pagination_type'] ) ) { 
    9501119            $view_data['pagination_settings']['type'] = $view_data['pagination_type']; 
    9511120            unset( $view_data['pagination_type'] ); 
    952         } 
     1121            $this->log( __FUNCTION__, 'type', $view_data['pagination_settings']['type'] ); 
     1122        } 
     1123 
    9531124        if ( isset( $view_data['nav'] ) ) { 
    9541125            $view_data['pagination_settings']['nav'] = $view_data['nav']; 
    9551126            unset( $view_data['nav'] ); 
    956         } 
     1127            $this->log( __FUNCTION__, 'nav', $view_data['pagination_settings']['nav'] ); 
     1128        } 
     1129 
    9571130        if ( isset( $view_data['per_page'] ) ) { 
    9581131            $view_data['pagination_settings']['per_page'] = $view_data['per_page']; 
    9591132            unset( $view_data['per_page'] ); 
     1133            $this->log( __FUNCTION__, 'per_page', $view_data['pagination_settings']['per_page'] ); 
    9601134        } 
    9611135 
     
    9681142     * @since 2.10.0 
    9691143     */ 
    970     public static function get_average_word_length() { 
     1144    public function get_average_word_length() { 
    9711145        $args  = array( 
    9721146            'posts_per_page'   => - 1, 
     
    9941168    } 
    9951169 
    996     /** 
    997      * Unset stored version number to allow rollback and beta testing. 
    998      * 
    999      * @since 2.28.0 
    1000      */ 
    1001     public static function unset_version() { 
    1002         delete_option( 'wpmtst_plugin_version'); 
    1003     } 
    10041170} 
    1005  
    1006 Strong_Testimonials_Updater::init(); 
  • strong-testimonials/tags/2.28.4/admin/settings/class-strong-testimonials-settings-general.php

    r1761957 r1771190  
    8181     */ 
    8282    public static function sanitize_options( $input ) { 
    83         $input['email_log_level']       = isset( $input['email_log_level'] ) ? (int) $input['email_log_level'] : 1; 
    8483        $input['embed_width']           = $input['embed_width'] ? (int) sanitize_text_field( $input['embed_width'] ) : ''; 
    8584        $input['load_font_awesome']     = wpmtst_sanitize_checkbox( $input, 'load_font_awesome' ); 
  • strong-testimonials/tags/2.28.4/admin/settings/partials/general.php

    r1761957 r1771190  
    5757            <p class="description"><?php _e( 'For advanced users.', 'strong-testimonials' ); ?></p> 
    5858            </fieldset> 
    59         </td> 
    60     </tr> 
    61  
    62     <tr valign="top"> 
    63         <th scope="row"> 
    64             <?php _e( 'Troubleshooting', 'strong-testimonials' ); ?> 
    65         </th> 
    66         <td> 
    67             <fieldset> 
    68                 <span style="display: inline-block; margin-right: 20px; vertical-align: middle;">Notification Emails</span> 
    69                 <label style="display: inline-block; vertical-align: middle;"> 
    70                     <select id="email_log_level" name="wpmtst_options[email_log_level]"> 
    71                         <option value="0" <?php selected( $options['email_log_level'], 0 ); ?>> 
    72                             <?php _e( 'Log nothing', 'strong-testimonials' ); ?> 
    73                         </option> 
    74                         <option value="1" <?php selected( $options['email_log_level'], 1 ); ?>> 
    75                             <?php _e( 'Log failed emails only (default)', 'strong-testimonials' ); ?> 
    76                         </option> 
    77                         <option value="2" <?php selected( $options['email_log_level'], 2 ); ?>> 
    78                             <?php _e( 'Log both successful and failed emails', 'strong-testimonials' ); ?> 
    79                         </option> 
    80                     </select> 
    81                 </label> 
    82             </fieldset> 
    83             <?php if ( file_exists( WPMST()->debug->get_log_file_path() ) ) : ?> 
    84                 <p><a href="<?php echo WPMST()->debug->get_log_file_url(); ?>" download="strong-testimonials.log"><?php _e( 'Download the log file', 'strong-testimonials' ); ?></a></p> 
    85             <?php else : ?> 
    86                 <p><em><?php _e( 'No log file yet.', 'strong-testimonials' ); ?></em></p> 
    87             <?php endif; ?> 
    8859        </td> 
    8960    </tr> 
  • strong-testimonials/tags/2.28.4/admin/views-validate.php

    r1761957 r1771190  
    265265    $out['type']               = sanitize_text_field( $in['type'] ); 
    266266    $out['nav']                = str_replace( ' ', '', sanitize_text_field( $in['nav'] ) ); 
    267     $out['per_page']           = (int) sanitize_text_field( $in['per_page'] ); 
    268267    $out['show_all']           = $in['show_all'] === 'on'; 
    269     $out['end_size']           = (int) sanitize_text_field( $in['end_size'] ); 
    270     $out['mid_size']           = (int) sanitize_text_field( $in['mid_size'] ); 
    271268    $out['prev_next']          = wpmtst_sanitize_checkbox( $in, 'prev_next' ); 
    272269    $out['prev_text']          = sanitize_text_field( $in['prev_text'] ); 
     
    274271    $out['before_page_number'] = sanitize_text_field( $in['before_page_number'] ); 
    275272    $out['after_page_number']  = sanitize_text_field( $in['after_page_number'] ); 
     273 
     274    /** 
     275     * Attempt to repair bug from 2.28.2 
     276     */ 
     277    if ( isset( $in['end_size'] ) && intval( $in['end_size'] ) ) { 
     278        $out['end_size'] = (int) sanitize_text_field( $in['end_size'] ); 
     279    } 
     280    else { 
     281        $out['end_size'] = 1; 
     282    } 
     283 
     284    if ( isset( $in['mid_size'] ) && intval( $in['mid_size'] ) ) { 
     285        $out['mid_size'] = (int) sanitize_text_field( $in['mid_size'] ); 
     286    } 
     287    else { 
     288        $out['mid_size'] = 2; 
     289    } 
     290 
     291    if ( isset( $in['per_page'] ) && intval( $in['per_page'] ) ) { 
     292        $out['per_page'] = (int) sanitize_text_field( $in['per_page'] ); 
     293    } 
     294    else { 
     295        $out['per_page'] = 5; 
     296    } 
    276297 
    277298    return $out; 
  • strong-testimonials/tags/2.28.4/admin/views.php

    r1761957 r1771190  
    149149        $view      = $default_view; 
    150150        $view_name = 'new'; 
     151    } 
     152 
     153    /** 
     154     * Attempt to repair bug from 2.28.2 
     155     */ 
     156    if ( ! isset( $view['pagination_settings']['end_size'] ) || ! $view['pagination_settings']['end_size'] ) { 
     157        $view['pagination_settings']['end_size'] = 1; 
     158    } 
     159    if ( ! isset( $view['pagination_settings']['mid_size'] ) || ! $view['pagination_settings']['mid_size'] ) { 
     160        $view['pagination_settings']['mid_size'] = 2; 
     161    } 
     162    if ( ! isset( $view['pagination_settings']['per_page'] ) || ! $view['pagination_settings']['per_page'] ) { 
     163        $view['pagination_settings']['per_page'] = 5; 
    151164    } 
    152165 
  • strong-testimonials/tags/2.28.4/includes/class-strong-mail.php

    r1691890 r1771190  
    2727            return; 
    2828 
    29         add_action( 'wp_mail_failed', array( $this, 'catch_mail_failed' ) ); 
    3029        foreach ( $current_queue as $email ) { 
    3130            $this->send_mail( $email ); 
    3231        } 
    33         remove_action( 'wp_mail_failed', array( $this, 'catch_mail_failed' ) ); 
    3432 
    3533        delete_transient( 'wpmtst_mail_queue' ); 
    3634    } 
    3735 
    38  
    39     public function catch_mail_failed( $error ) { 
    40         WPMST()->debug->log( $error ); 
    41     } 
    42  
    43  
    4436    public function send_mail( $email ) { 
    45         $mail_sent = wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] ); 
    46  
    47         // Log email action 
    48         //TODO Deeper integration with Mandrill 
    49         $options = get_option( 'wpmtst_options' ); 
    50         if ( isset( $options['email_log_level'] ) && $options['email_log_level'] ) { 
    51  
    52             // for both levels, log failure only 
    53             // for level 2, log both success and failure 
    54             if ( ! $mail_sent || 2 == $options['email_log_level'] ) { 
    55                 $log_entry = array( 
    56                     'response' => $mail_sent ? 'mail successful' : 'mail failed', 
    57                     'to'       => $email['to'], 
    58                     'subject'  => $email['subject'], 
    59                     'message'  => $email['message'], 
    60                     'headers'  => $email['headers'], 
    61                 ); 
    62                 WPMST()->debug->log( $log_entry, 'mail', __FUNCTION__ ); 
    63             } 
    64  
    65         } 
    66  
     37        wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] ); 
    6738    } 
    6839 
  • strong-testimonials/tags/2.28.4/includes/class-strong-view-display.php

    r1770057 r1771190  
    232232         */ 
    233233        if ( ! $this->atts['all'] && $this->atts['count'] > 0 ) { 
    234             if ( $this->atts['pagination'] ) { 
    235                 if ( 'simple' == $this->atts['pagination_settings']['type'] ) { 
    236                     $count = min( $this->atts['count'], count( $query->posts ) ); 
    237                     $query->posts         = array_slice( $query->posts, 0, $count ); 
    238                     $query->post_count    = $count; 
    239                     $query->found_posts   = $count; 
    240                     $query->max_num_pages = ceil( $count / $this->atts['pagination_settings']['per_page'] ); 
    241                 } 
    242             } 
     234            $count                = min( $this->atts['count'], count( $query->posts ) ); 
     235            $query->posts         = array_slice( $query->posts, 0, $count ); 
     236            $query->post_count    = $count; 
     237            $query->found_posts   = $count; 
    243238        } 
    244239 
    245240        $this->post_count  = $query->post_count; 
    246241        $this->found_posts = $query->found_posts; 
    247  
     242        $this->query       = $query; 
    248243        WPMST()->set_query( $query ); 
    249  
    250         $this->query = $query; 
    251  
    252         if ( $this->atts['pagination'] ) { 
    253             if ( $this->query->post_count <= $this->atts['pagination_settings']['per_page'] ) { 
    254                 $this->atts['pagination'] = apply_filters( 'wpmtst_use_default_pagination', true, $this->atts ); 
    255             } 
    256         } 
    257244    } 
    258245 
  • strong-testimonials/tags/2.28.4/includes/functions-template-form.php

    r1770057 r1771190  
    418418function wpmtst_form_submit_button( $preview = false ) { 
    419419    ?> 
    420     <div class="form-field submit"> 
     420    <div class="form-field wpmtst-submit"> 
    421421        <label><input type="<?php echo $preview ? 'button' : 'submit'; ?>" id="wpmtst_submit_testimonial" name="wpmtst_submit_testimonial" value="<?php esc_attr_e( wpmtst_get_form_message( 'form-submit-button' ) ); ?>" class="button" tabindex="0"></label> 
    422422    </div> 
  • strong-testimonials/tags/2.28.4/readme.txt

    r1770107 r1771190  
    44Requires at least: 3.7 
    55Tested up to: 4.9 
    6 Stable tag: 2.28.3 
     6Stable tag: 2.28.4 
    77License: GPLv3 or later 
    88License URI: http://www.gnu.org/licenses/gpl-3.0.html 
     
    180180 
    181181== Changelog == 
     182 
     183= 2.28.4 - Nov 20, 2017 = 
     184* Fix bug when using count in views. 
     185* Fix bug that prevented saving views. 
     186* Fix bug that prevented deleting the plugin. 
     187* Rename the form's submit button CSS class to `wpmtst-submit` to prevent conflicts. Thanks @chestozo. 
     188* Remove mail debug logger. 
     189* Improved update process to prevent simultaneous execution. 
    182190 
    183191= 2.28.3 - Nov 18, 2017 = 
  • strong-testimonials/tags/2.28.4/strong-testimonials.php

    r1770057 r1771190  
    55 * Description: A full-featured plugin that works right out of the box for beginners and offers advanced features for pros. 
    66 * Author: Chris Dillon 
    7  * Version: 2.28.3 
     7 * Version: 2.28.4 
    88 * 
    99 * Author URI: https://strongplugins.com/ 
     
    3535} 
    3636 
    37 define( 'WPMTST_VERSION', '2.28.3' ); 
     37define( 'WPMTST_VERSION', '2.28.4' ); 
    3838define( 'WPMTST_PLUGIN', plugin_basename( __FILE__ ) ); // strong-testimonials/strong-testimonials.php 
    3939define( 'WPMTST', dirname( WPMTST_PLUGIN ) );           // strong-testimonials 
     
    4949 * @property  Strong_Mail mail 
    5050 * @property  Strong_Templates templates 
    51  * @property  Strong_Debug debug 
    5251 * @property  Strong_Testimonials_Form form 
    5352 * @since 1.15.0 
     
    7776     */ 
    7877    public $templates; 
    79  
    80     /** 
    81      * @var Strong_Debug 
    82      */ 
    83     public $debug; 
    8478 
    8579    /** 
     
    149143        wpmtst_register_cpt(); 
    150144        flush_rewrite_rules(); 
    151         Strong_Testimonials_Updater::update(); 
    152145    } 
    153146 
     
    157150    static function plugin_deactivation() { 
    158151        flush_rewrite_rules(); 
    159         Strong_Testimonials_Updater::unset_version(); 
     152 
     153        /** 
     154         * Unset stored version number to allow rollback and beta testing. 
     155         * 
     156         * @since 2.28.0 
     157         */ 
     158        delete_option( 'wpmtst_plugin_version'); 
    160159    } 
    161160 
     
    192191        $this->mail      = new Strong_Mail(); 
    193192        $this->templates = new Strong_Templates(); 
    194         $this->debug     = new Strong_Debug(); 
    195193        $this->form      = new Strong_Testimonials_Form(); 
    196194    } 
     
    213211        require_once WPMTST_INC . 'class-strong-templates.php'; 
    214212        require_once WPMTST_INC . 'class-strong-mail.php'; 
    215         require_once WPMTST_INC . 'class-strong-debug.php'; 
    216213        require_once WPMTST_INC . 'class-strong-form.php'; 
    217214        require_once WPMTST_INC . 'class-walker-strong-category-checklist-front.php'; 
  • strong-testimonials/tags/2.28.4/templates-scss/_partials/_structure-form.scss

    r1684299 r1771190  
    55    margin-bottom: 1.5em; 
    66 
    7     &.submit { 
     7    &.wpmtst-submit { 
    88      margin-bottom: 0; 
    99    } 
  • strong-testimonials/tags/2.28.4/templates-scss/default-dark/form.scss

    r1684299 r1771190  
    22 * Strong Testimonials Default Dark Form template 
    33 */ 
     4 
    45@import "../_partials/structure-form"; 
    56 
  • strong-testimonials/tags/2.28.4/templates-scss/default/form.scss

    r1684299 r1771190  
    22 * Strong Testimonials Default Form template 
    33 */ 
     4 
    45@import "../_partials/structure-form"; 
    56 
  • strong-testimonials/tags/2.28.4/templates/default-dark/form.css

    r1684299 r1771190  
    88  margin-bottom: 1.5em; 
    99} 
    10 .strong-form .form-field.submit { 
     10.strong-form .form-field.wpmtst-submit { 
    1111  margin-bottom: 0; 
    1212} 
  • strong-testimonials/tags/2.28.4/templates/default/form.css

    r1684299 r1771190  
    88  margin-bottom: 1.5em; 
    99} 
    10 .strong-form .form-field.submit { 
     10.strong-form .form-field.wpmtst-submit { 
    1111  margin-bottom: 0; 
    1212} 
  • strong-testimonials/tags/2.28.4/uninstall.php

    r1761957 r1771190  
    88 
    99// TODO Leave No Trace 
    10  
    11 Strong_Testimonials_Updater::remove_caps(); 
  • strong-testimonials/trunk/admin/admin-notices.php

    r1676906 r1771190  
    114114 * Return a specific admin notice. 
    115115 * 
    116  * TODO A generic error message with a link to export debug log. 
    117116 * @since 2.24.0 
    118117 */ 
  • strong-testimonials/trunk/admin/admin.php

    r1770057 r1771190  
    11<?php 
    22/** 
    3  * Strong Testimonials - Admin functions 
     3 * Strong Testimonials admin functions. 
     4 * 
     5 * 1. Check for required WordPress version. 
     6 * 2. Check for plugin update. 
     7 * 3. Initialize. 
    48 */ 
    59 
    610/** 
    7  * Init 
    8  */ 
    9 function wpmtst_admin_init() { 
    10  
    11     // Remove ad banner from Captcha plugin 
    12     remove_action( 'admin_notices', 'cptch_plugin_banner' ); 
    13  
    14     // Check WordPress version 
    15     wpmtst_version_check(); 
    16  
    17     // Check for new options 
    18     Strong_Testimonials_Updater::update(); 
    19  
    20     // Redirect to About page for new installs only 
    21     Strong_Testimonials_Updater::activation_redirect(); 
    22  
    23     /** 
    24      * Custom action hooks 
    25      * 
    26      * @since 1.18.4 
    27      */ 
    28     if ( isset( $_REQUEST['action'] ) && '' != $_REQUEST['action'] ) { 
    29         do_action( 'wpmtst_' . $_REQUEST['action'] ); 
    30     } 
    31  
    32 } 
    33 add_action( 'admin_init', 'wpmtst_admin_init' ); 
    34  
    35 /** 
    36  * Are we on a testimonial admin screen? 
    37  * 
    38  * Used by add-ons too! 
    39  * 
    40  * @return bool 
    41  */ 
    42 function wpmtst_is_testimonial_screen() { 
    43     $screen = get_current_screen(); 
    44     return ( $screen && 'wpm-testimonial' == $screen->post_type ); 
    45 } 
    46  
    47 /** 
    48  * Check WordPress version 
     11 * Check for required WordPress version. 
    4912 */ 
    5013function wpmtst_version_check() { 
     
    6225        wp_die( $message ); 
    6326    } 
     27} 
     28 
     29add_action( 'admin_init', 'wpmtst_version_check', 1 ); 
     30 
     31/** 
     32 * Check for plugin update. 
     33 * 
     34 * @since 2.28.4 Before other admin_init actions. 
     35 */ 
     36function wpmtst_update_check() { 
     37    $updater = new Strong_Testimonials_Updater(); 
     38    $updater->update(); 
     39} 
     40 
     41add_action( 'admin_init', 'wpmtst_update_check' ); 
     42 
     43/** 
     44 * Initialize. 
     45 */ 
     46function wpmtst_admin_init() { 
     47 
     48    // Remove ad banner from Captcha plugin 
     49    remove_action( 'admin_notices', 'cptch_plugin_banner' ); 
     50 
     51    // Redirect to About page for new installs only 
     52    wpmtst_activation_redirect(); 
     53 
     54    /** 
     55     * Custom action hooks 
     56     * 
     57     * @since 1.18.4 
     58     */ 
     59    if ( isset( $_REQUEST['action'] ) && '' != $_REQUEST['action'] ) { 
     60        do_action( 'wpmtst_' . $_REQUEST['action'] ); 
     61    } 
     62 
     63} 
     64 
     65add_action( 'admin_init', 'wpmtst_admin_init', 20 ); 
     66 
     67/** 
     68 * Redirect to About page. 
     69 */ 
     70function wpmtst_activation_redirect() { 
     71    if ( get_option( 'wpmtst_do_activation_redirect', false ) ) { 
     72        delete_option( 'wpmtst_do_activation_redirect' ); 
     73        wp_redirect( admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' ) ); 
     74        exit; 
     75    } 
     76} 
     77 
     78/** 
     79 * Are we on a testimonial admin screen? 
     80 * 
     81 * Used by add-ons too! 
     82 * 
     83 * @return bool 
     84 */ 
     85function wpmtst_is_testimonial_screen() { 
     86    $screen = get_current_screen(); 
     87    return ( $screen && 'wpm-testimonial' == $screen->post_type ); 
    6488} 
    6589 
  • strong-testimonials/trunk/admin/class-strong-testimonials-defaults.php

    r1770057 r1771190  
    1919     * @since 2.2.11 scrolltop 
    2020     * @since 2.3.0  remove whitespace 
    21      * @since 2.4.0  email log level for troubleshooting 
    2221     * @since 2.6.0  embed width 
    2322     * @since 2.6.2  slideshow z-index 
     
    3130    public static function get_options() { 
    3231        $default_options = array( 
    33             'debug_log'             => 0, 
    34             'email_log_level'       => 1, 
    3532            'embed_width'           => '', 
    3633            'load_font_awesome'     => 1, 
  • strong-testimonials/trunk/admin/class-strong-testimonials-updater.php

    r1770057 r1771190  
    11<?php 
     2 
    23/** 
    34 * Class Strong_Testimonials_Updater 
     
    1213     * @var string 
    1314     */ 
    14     public static $old_version; 
     15    private $old_version; 
     16 
     17    /** 
     18     * Log steps during update process. 
     19     * 
     20     * @var array 
     21     */ 
     22    private $new_log; 
    1523 
    1624    /** 
     
    1826     */ 
    1927    public function __construct() { 
    20     } 
    21  
    22     /** 
    23      * Static initializer. 
    24      */ 
    25     public static function init() { 
    26         self::$old_version = get_option( 'wpmtst_plugin_version', false ); 
     28        $this->new_log     = array(); 
     29        $this->old_version = get_option( 'wpmtst_plugin_version', false ); 
     30        if ( $this->old_version ) { 
     31            $this->log( __CLASS__, 'old: ' . $this->old_version . ' --> new: ' . WPMTST_VERSION ); 
     32        } 
     33        else { 
     34            $this->log( __CLASS__, 'NEW INSTALL', WPMTST_VERSION ); 
     35        } 
     36    } 
     37 
     38    /** 
     39     * Add a log entry. 
     40     * 
     41     * @param        $name 
     42     * @param string $entry 
     43     * @param string $var 
     44     */ 
     45    private function log( $name, $entry = '', $var = '' ) { 
     46        if ( $name ) { 
     47            $x = $name; 
     48            if ( $entry ) { 
     49                $x .= ' : ' . $entry; 
     50                if ( $var ) { 
     51                    $x .= ' = '; 
     52                    if ( is_array( $var ) || is_object( $var ) ) { 
     53                        // log the text 
     54                        $this->new_log[] = $x; 
     55                        // then log the variable 
     56                        $this->new_log[] = $var; 
     57                    } 
     58                    else { 
     59                        $this->new_log[] = $x . $var; 
     60                    } 
     61                } 
     62                else { 
     63                    $this->new_log[] = $x; 
     64                } 
     65            } 
     66            else { 
     67                $this->new_log[] = $x; 
     68            } 
     69        } 
     70    } 
     71 
     72    /** 
     73     * Plugin activation and update. 
     74     * 
     75     * --------- 
     76     * REMEMBER! 
     77     * --------- 
     78     * If you are changing the value of a default field property, 
     79     * then you need to unset that value in the current field 
     80     * before merging in the new default values. 
     81     * 
     82     * For example, when changing a rating field property from 
     83     * disabled (0) to enabled (1) in order for the property to 
     84     * be displayed in the form editor. 
     85     */ 
     86    public function update() { 
     87        if ( $this->old_version == WPMTST_VERSION ) { 
     88            return; 
     89        } 
     90 
     91        if ( get_transient( 'wpmtst_update_in_progress' ) ) { 
     92            return; 
     93        } 
     94 
     95        set_transient( 'wpmtst_update_in_progress', 1, 10 ); 
     96 
     97        // Redirect to About page afterwards. On new install or (de)activation only. 
     98        if ( false === $this->old_version ) { 
     99            add_option( 'wpmtst_do_activation_redirect', true ); 
     100        } 
     101 
     102        /** 
     103         * Add custom capablities. 
     104         * 
     105         * @since 2.27.1 
     106         */ 
     107        $this->add_caps(); 
     108 
     109        /** 
     110         * Check DB version. 
     111         */ 
     112        $this->update_db_check(); 
     113 
     114        /** 
     115         * Let's start updating. 
     116         */ 
     117        $history = get_option( 'wpmtst_history', array() ); 
     118 
     119        /** 
     120         * Options. 
     121         */ 
     122        update_option( 'wpmtst_options', $this->update_options() ); 
     123 
     124        /** 
     125         * Custom fields. 
     126         */ 
     127        update_option( 'wpmtst_fields', $this->update_fields() ); 
     128 
     129        /** 
     130         * Forms. 
     131         */ 
     132        update_option( 'wpmtst_base_forms', $this->update_base_forms() ); 
     133        update_option( 'wpmtst_custom_forms', $this->update_custom_forms() ); 
     134        update_option( 'wpmtst_form_options', $this->update_form_options() ); 
     135 
     136        /** 
     137         * Compatibility options. 
     138         * 
     139         * @since 2.28.0 
     140         */ 
     141        update_option( 'wpmtst_compat_options', $this->update_compat_options() ); 
     142 
     143        /** 
     144         * Overwrite default view options. 
     145         * 
     146         * @since 2.15.0 
     147         */ 
     148        update_option( 'wpmtst_view_options', $this->update_view_options() ); 
     149 
     150        /** 
     151         * Overwrite default view settings. 
     152         * 
     153         * @since 2.15.0 
     154         */ 
     155        update_option( 'wpmtst_view_default', $this->update_default_view() ); 
     156 
     157        /** 
     158         * Update views. 
     159         */ 
     160        $this->update_views(); 
     161 
     162        /** 
     163         * Convert nofollow 
     164         */ 
     165        if ( ! isset( $history['2.23.0_convert_nofollow'] ) ) { 
     166            $this->convert_nofollow(); 
     167            $this->update_history_log( '2.23.0_convert_nofollow' ); 
     168        } 
     169 
     170        /** 
     171         * Legacy stuff. 
     172         */ 
     173        if ( ! isset( $history['2.28_new_update_process'] ) ) { 
     174            // Upgrade from version 1.x 
     175            delete_option( 'wpmtst_cycle' ); 
     176 
     177            // L10n context no longer used. 
     178            delete_option( 'wpmtst_l10n_contexts' ); 
     179 
     180            // Remove older attempts at admin notices. 
     181            delete_option( 'wpmtst_admin_notices' ); 
     182            delete_option( 'wpmtst_news_flag' ); 
     183 
     184            $this->update_history_log( '2.28_new_update_process' ); 
     185        } 
     186 
     187        /** 
     188         * Update the plugin version. 
     189         */ 
     190        update_option( 'wpmtst_plugin_version', WPMTST_VERSION ); 
     191 
     192        /** 
     193         * Update log. 
     194         */ 
     195        $this->log( __FUNCTION__, 'complete' ); 
     196        $this->update_log(); 
     197 
     198        delete_transient( 'wpmtst_update_in_progress' ); 
     199    } 
     200 
     201    /** 
     202     * Update the log in options table. 
     203     */ 
     204    public function update_log() { 
     205        $log                            = get_option( 'wpmtst_update_log', array() ); 
     206        $log[ current_time( 'mysql' ) ] = $this->new_log; 
     207        update_option( 'wpmtst_update_log', $log ); 
    27208    } 
    28209 
     
    34215     * @return bool|null|WP_Role 
    35216     */ 
    36     public static function get_admins() { 
     217    public function get_admins() { 
    37218        return get_role( 'administrator' ); 
    38219    } 
     
    43224     * @since 2.27.1 
    44225     */ 
    45     public static function add_caps() { 
    46         if ( $admins = self::get_admins() ) { 
     226    public function add_caps() { 
     227        $admins = $this->get_admins(); 
     228        if ( $admins ) { 
    47229            $admins->add_cap( 'strong_testimonials_views' ); 
    48230            $admins->add_cap( 'strong_testimonials_fields' ); 
    49231            $admins->add_cap( 'strong_testimonials_options' ); 
    50232            $admins->add_cap( 'strong_testimonials_about' ); 
     233            $this->log( __FUNCTION__, 'success' ); 
     234        } 
     235        else { 
     236            $this->log( __FUNCTION__, 'failed' ); 
    51237        } 
    52238    } 
     
    55241     * Remove custom capabilities. 
    56242     * 
     243     * Was part of uninstall process but cannot be run from static class. 
     244     * 
     245     * @todo  Move to Leave No Trace. 
     246     * 
    57247     * @since 2.27.1 
    58248     */ 
    59     public static function remove_caps() { 
    60         if ( $admins = self::get_admins() ) { 
     249    public function remove_caps() { 
     250        if ( $admins = $this->get_admins() ) { 
    61251            $admins->remove_cap( 'strong_testimonials_views' ); 
    62252            $admins->remove_cap( 'strong_testimonials_fields' ); 
     
    71261     * @since 1.21.0 Checking for new table version. 
    72262     */ 
    73     public static function update_db_check() { 
     263    public function update_db_check() { 
    74264        if ( get_option( 'wpmtst_db_version' ) != WPMST()->get_db_version() ) { 
    75             self::update_tables(); 
     265            $this->update_tables(); 
     266        } 
     267        else { 
     268            $this->log( __FUNCTION__, 'tables up to date' ); 
    76269        } 
    77270    } 
     
    82275     * @since 1.21.0 
    83276     */ 
    84     public static function update_tables() { 
     277    public function update_tables() { 
    85278        global $wpdb; 
    86279        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
     280        $this->log( __FUNCTION__, 'start' ); 
    87281 
    88282        $charset_collate = $wpdb->get_charset_collate(); 
     
    97291        ) $charset_collate;"; 
    98292 
    99         // TODO Error handling 
     293        $wpdb->show_errors(); 
    100294        $result = dbDelta( $sql ); 
     295        $wpdb->hide_errors(); 
     296 
     297        if ( $wpdb->last_error ) { 
     298            deactivate_plugins( 'strong-testimonials/strong-testimonials.php' ); 
     299            $message = '<p><span style="color: #CD0000;">'; 
     300            $message .= __( 'An error occurred.', 'strong-testimonials' ) . '</span>&nbsp;'; 
     301            $message .= __( 'The plugin has been deactivated.', 'strong-testimonials' ) . '&nbsp;'; 
     302            $message .= sprintf( __( 'Please <a href="%s" target="_blank">open a support ticket</a>.', 'strong-testimonials' ), esc_url( 'https://support.strongplugins.com/new-ticket/' ) ) . '</p>'; 
     303            $message .= '<p>' . sprintf( __( '<a href="%s">Go back to Dashboard</a>', 'strong-testimonials' ), esc_url( admin_url() ) ) . '</p>'; 
     304 
     305            $this->log( __FUNCTION__, 'error', $wpdb->last_error ); 
     306            $this->update_log(); 
     307 
     308            wp_die( sprintf( '<div class="error strong-view-error">%s</div>', $message ) ); 
     309        } 
    101310 
    102311        update_option( 'wpmtst_db_version', WPMST()->get_db_version() ); 
    103     } 
    104  
    105     /** 
    106      * Redirect to About page. 
    107      */ 
    108     public static function activation_redirect() { 
    109         if ( get_option( 'wpmtst_do_activation_redirect', false ) ) { 
    110             delete_option( 'wpmtst_do_activation_redirect' ); 
    111             wp_redirect( admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' ) ); 
    112             exit; 
    113         } 
    114     } 
    115  
    116     /** 
    117      * Plugin activation and upgrade. 
    118      * 
    119      * --------- 
    120      * REMEMBER! 
    121      * --------- 
    122      * If you are changing the value of a default field property, 
    123      * then you need to unset that value in the current field 
    124      * before merging in the new default values. 
    125      * 
    126      * For example, when changing a rating field property from 
    127      * disabled (0) to enabled (1) in order for the property to 
    128      * be displayed in the form editor. 
    129      */ 
    130     public static function update() { 
    131         if ( self::$old_version == WPMTST_VERSION ) { 
    132             return; 
    133         } 
    134  
    135         // Redirect to About page for new installs only 
    136         if ( false === self::$old_version ) { 
    137             add_option( 'wpmtst_do_activation_redirect', true ); 
    138         } 
    139  
    140         /** 
    141          * Add custom capablities. 
    142          * 
    143          * @since 2.27.1 
    144          */ 
    145         self::add_caps(); 
    146  
    147         /** 
    148          * Check DB version. 
    149          */ 
    150         self::update_db_check(); 
    151  
    152         /** 
    153          * Let's start updating. 
    154          */ 
    155         $history = get_option( 'wpmtst_history', array() ); 
    156  
    157         /** 
    158          * Options. 
    159          */ 
    160         update_option( 'wpmtst_options', self::update_options() ); 
    161  
    162         /** 
    163          * Custom fields. 
    164          */ 
    165         update_option( 'wpmtst_fields', self::update_fields() ); 
    166  
    167         /** 
    168          * Forms. 
    169          */ 
    170         update_option( 'wpmtst_base_forms', self::update_base_forms() ); 
    171         update_option( 'wpmtst_custom_forms', self::update_custom_forms() ); 
    172         update_option( 'wpmtst_form_options', self::update_form_options() ); 
    173  
    174         /** 
    175          * Compatibility options. 
    176          * 
    177          * @since 2.28.0 
    178          */ 
    179         update_option( 'wpmtst_compat_options', self::update_compat_options() ); 
    180  
    181         /** 
    182          * Overwrite default view options. 
    183          * 
    184          * @since 2.15.0 
    185          */ 
    186         update_option( 'wpmtst_view_options', self::update_view_options() ); 
    187  
    188         /** 
    189          * Overwrite default view settings. 
    190          * 
    191          * @since 2.15.0 
    192          */ 
    193         update_option( 'wpmtst_view_default', self::update_default_view() ); 
    194  
    195         /** 
    196          * Update views. 
    197          */ 
    198         self::update_views(); 
    199  
    200         /** 
    201          * Convert nofollow 
    202          */ 
    203         if ( ! isset( $history['2.23.0_convert_nofollow'] ) ) { 
    204             self::convert_nofollow(); 
    205             self::update_history_log( '2.23.0_convert_nofollow' ); 
    206         } 
    207  
    208         /** 
    209          * Legacy stuff. 
    210          */ 
    211         if ( ! isset( $history['2.28_new_update_process'] ) ) { 
    212             // Upgrade from version 1.x 
    213             delete_option( 'wpmtst_cycle' ); 
    214  
    215             // L10n context no longer used. 
    216             delete_option( 'wpmtst_l10n_contexts' ); 
    217  
    218             //  Remove older attempts at admin notices. 
    219             delete_option( 'wpmtst_admin_notices' ); 
    220             delete_option( 'wpmtst_news_flag' ); 
    221  
    222             self::update_history_log( '2.28_new_update_process' ); 
    223         } 
    224  
    225         /** 
    226          * Update the plugin version. 
    227          */ 
    228         update_option( 'wpmtst_plugin_version', WPMTST_VERSION ); 
     312 
     313        $this->log( __FUNCTION__, 'dbDelta', $result ? $result : 'no change' ); 
    229314    } 
    230315 
     
    234319     * @param $event 
    235320     */ 
    236     public static function update_history_log( $event ) { 
    237         $history = get_option( 'wpmtst_history', array() ); 
     321    public function update_history_log( $event ) { 
     322        $history           = get_option( 'wpmtst_history', array() ); 
    238323        $history[ $event ] = current_time( 'mysql' ); 
    239         update_option( 'wpmtst_history', $history ); 
     324        $success           = update_option( 'wpmtst_history', $history ); 
     325        $this->log( __FUNCTION__, $event, $success ? 'record added' : 'record exists' ); 
    240326    } 
    241327 
     
    245331     * @return array 
    246332     */ 
    247     public static function update_options() { 
     333    public function update_options() { 
    248334        $options = get_option( 'wpmtst_options' ); 
    249335        if ( ! $options ) { 
     336            $this->log( __FUNCTION__, 'default' ); 
    250337            return Strong_Testimonials_Defaults::get_options(); 
    251338        } 
     
    254341         * Remove version 1 options 
    255342         */ 
    256         if ( version_compare( '2.0', self::$old_version ) ) { 
     343        if ( version_compare( '2.0', $this->old_version ) ) { 
    257344 
    258345            if ( isset( $options['captcha'] ) ) { 
     
    312399         * @since 2.27.0 
    313400         */ 
    314         $options['embed_width'] = $options['embed_width'] ? (int) sanitize_text_field( $options['embed_width'] ) : ''; 
     401        if ( 0 === $options['embed_width'] ) { 
     402            $options['embed_width'] = ''; 
     403        } 
     404 
     405        /** 
     406         * Remove email logging. 
     407         * 
     408         * @since 2.28.4 
     409         */ 
     410        if ( isset( $options['email_log_level'] ) ) { 
     411            unset( $options['email_log_level'] ); 
     412        } 
    315413 
    316414        // Merge in new options 
    317         return array_merge( Strong_Testimonials_Defaults::get_options(), $options ); 
     415        $options = array_merge( Strong_Testimonials_Defaults::get_options(), $options ); 
     416 
     417        $this->log( __FUNCTION__, 'done' ); 
     418 
     419        return $options; 
    318420    } 
    319421 
     
    323425     * @return array 
    324426     */ 
    325     public static function update_fields() { 
     427    public function update_fields() { 
    326428        $fields = get_option( 'wpmtst_fields', array() ); 
    327429        if ( ! $fields ) { 
     430            $this->log( __FUNCTION__, 'default' ); 
    328431            return Strong_Testimonials_Defaults::get_fields(); 
    329         } else { 
    330             /** 
    331              * Updating from 1.x 
    332              * 
    333              * Copy current custom fields to the new default custom form which will be added in the next step. 
    334              * 
    335              * @since 2.0.1 
    336              * @since 2.17 Added version check. 
    337              */ 
    338             if ( version_compare( '2.0', self::$old_version ) ) { 
    339                 if ( isset( $fields['field_groups'] ) ) { 
    340                     $default_custom_forms[1]['fields'] = $fields['field_groups']['custom']['fields']; 
    341                     unset( $fields['field_groups'] ); 
    342                 } 
    343                 if ( isset( $fields['current_field_group'] ) ) { 
    344                     unset( $fields['current_field_group'] ); 
    345                 } 
    346             } 
    347         } 
     432        } 
     433 
     434        /** 
     435         * Updating from 1.x 
     436         * 
     437         * Copy current custom fields to the new default custom form which will be added in the next step. 
     438         * 
     439         * @since 2.0.1 
     440         * @since 2.17 Added version check. 
     441         */ 
     442        if ( version_compare( '2.0', $this->old_version ) ) { 
     443            if ( isset( $fields['field_groups'] ) ) { 
     444                $default_custom_forms[1]['fields'] = $fields['field_groups']['custom']['fields']; 
     445                unset( $fields['field_groups'] ); 
     446            } 
     447            if ( isset( $fields['current_field_group'] ) ) { 
     448                unset( $fields['current_field_group'] ); 
     449            } 
     450        } 
     451 
     452        $this->log( __FUNCTION__, 'done' ); 
    348453 
    349454        return $fields; 
     
    355460     * @return array 
    356461     */ 
    357     public static function update_base_forms() { 
     462    public function update_base_forms() { 
     463        $this->log( __FUNCTION__, 'default' ); 
    358464        return Strong_Testimonials_Defaults::get_base_forms(); 
    359465    } 
     
    364470     * @return array 
    365471     */ 
    366     public static function update_custom_forms() { 
     472    public function update_custom_forms() { 
    367473        $custom_forms = get_option( 'wpmtst_custom_forms' ); 
    368474        if ( ! $custom_forms ) { 
     475            $this->log( __FUNCTION__, 'default' ); 
    369476            return Strong_Testimonials_Defaults::get_custom_forms(); 
    370         } else { 
    371             foreach ( $custom_forms as $form_id => $form_properties ) { 
    372                 foreach ( $form_properties['fields'] as $key => $form_field ) { 
    373  
    374                     /* 
    375                      * Convert categories to category-selector. 
    376                      * @since 2.17.0 
    377                      */ 
    378                     if ( 'categories' == $form_field['input_type'] ) { 
    379                         $custom_forms[ $form_id ]['fields'][ $key ]['input_type'] = 'category-selector'; 
    380                     } 
    381  
    382                     /* 
    383                      * Unset `show_default_options` for rating field. Going from 0 to 1. 
    384                      * @since 2.21.0 
    385                      */ 
    386                     if ( 'rating' == $form_field['input_type'] ) { 
    387                         unset( $form_field['show_default_options'] ); 
    388                     } 
    389  
    390                     /* 
    391                      * Add `show_required_option` to shortcode field. Initial value is false. 
    392                      * @since 2.22.0 
    393                      */ 
    394                     if ( 'shortcode' == $form_field['input_type'] ) { 
    395                         $form_field['show_required_option'] = false; 
    396                     } 
    397  
    398                     /* 
    399                      * Add `show_default_options` to checkbox field. 
    400                      * 
    401                      * @since 2.27.0 
    402                      */ 
    403                     if ( 'checkbox' == $form_field['input_type'] ) { 
    404                         $form_field['show_default_options'] = 1; 
    405                     } 
    406  
    407                     /* 
    408                      * Merge in new default. 
    409                      * Custom fields are in display order (not associative) so we must find them by `input_type`. 
    410                      * @since 2.21.0 Using default fields instead of default form as source 
    411                      */ 
    412                     $new_default = array(); 
    413                     $fields = get_option( 'wpmtst_fields', array() ); 
    414  
    415                     foreach ( $fields['field_types'] as $field_type_group_key => $field_type_group ) { 
    416                         foreach ( $field_type_group as $field_type_key => $field_type_field ) { 
    417                             if ( $field_type_field['input_type'] == $form_field['input_type'] ) { 
    418                                 $new_default = $field_type_field; 
    419                                 break; 
    420                             } 
     477        } 
     478 
     479        foreach ( $custom_forms as $form_id => $form_properties ) { 
     480            foreach ( $form_properties['fields'] as $key => $form_field ) { 
     481 
     482                /* 
     483                 * Convert categories to category-selector. 
     484                 * @since 2.17.0 
     485                 */ 
     486                if ( 'categories' == $form_field['input_type'] ) { 
     487                    $custom_forms[ $form_id ]['fields'][ $key ]['input_type'] = 'category-selector'; 
     488                } 
     489 
     490                /* 
     491                 * Unset `show_default_options` for rating field. Going from 0 to 1. 
     492                 * @since 2.21.0 
     493                 */ 
     494                if ( 'rating' == $form_field['input_type'] ) { 
     495                    unset( $form_field['show_default_options'] ); 
     496                } 
     497 
     498                /* 
     499                 * Add `show_required_option` to shortcode field. Initial value is false. 
     500                 * @since 2.22.0 
     501                 */ 
     502                if ( 'shortcode' == $form_field['input_type'] ) { 
     503                    $form_field['show_required_option'] = false; 
     504                } 
     505 
     506                /* 
     507                 * Add `show_default_options` to checkbox field. 
     508                 * 
     509                 * @since 2.27.0 
     510                 */ 
     511                if ( 'checkbox' == $form_field['input_type'] ) { 
     512                    $form_field['show_default_options'] = 1; 
     513                } 
     514 
     515                /* 
     516                 * Merge in new default. 
     517                 * Custom fields are in display order (not associative) so we must find them by `input_type`. 
     518                 * @since 2.21.0 Using default fields instead of default form as source 
     519                 */ 
     520                $new_default = array(); 
     521                $fields      = get_option( 'wpmtst_fields', array() ); 
     522 
     523                foreach ( $fields['field_types'] as $field_type_group_key => $field_type_group ) { 
     524                    foreach ( $field_type_group as $field_type_key => $field_type_field ) { 
     525                        if ( $field_type_field['input_type'] == $form_field['input_type'] ) { 
     526                            $new_default = $field_type_field; 
     527                            break; 
    421528                        } 
    422529                    } 
    423  
    424                     if ( $new_default ) { 
    425                         $custom_forms[ $form_id ]['fields'][ $key ] = array_merge( $new_default, $form_field ); 
    426                     } 
    427  
    428                 } 
    429             } 
    430         } 
     530                } 
     531 
     532                if ( $new_default ) { 
     533                    $custom_forms[ $form_id ]['fields'][ $key ] = array_merge( $new_default, $form_field ); 
     534                } 
     535 
     536            } 
     537        } 
     538 
     539        $this->log( __FUNCTION__, 'convert forms', 'done' ); 
    431540 
    432541        return $custom_forms; 
     
    438547     * @return array 
    439548     */ 
    440     public static function update_form_options() { 
     549    public function update_form_options() { 
    441550        $form_options = get_option( 'wpmtst_form_options' ); 
    442551        if ( ! $form_options ) { 
     552            $this->log( __FUNCTION__, 'default' ); 
    443553            return Strong_Testimonials_Defaults::get_form_options(); 
    444         } else { 
    445  
    446             $options = get_option( 'wpmtst_options', array() ); 
    447             // -5B- MOVE EXISTING OPTIONS 
    448             if ( isset( $options['admin_notify'] ) ) { 
    449                 $form_options['admin_notify']    = $options['admin_notify']; 
    450                 $form_options['admin_email']     = $options['admin_email']; 
    451                 $form_options['captcha']         = $options['captcha']; 
    452                 $form_options['honeypot_before'] = $options['honeypot_before']; 
    453                 $form_options['honeypot_after']  = $options['honeypot_after']; 
    454  
    455                 unset( $options['admin_notify'] ); 
    456                 unset( $options['admin_email'] ); 
    457                 unset( $options['captcha'] ); 
    458                 unset( $options['honeypot_before'] ); 
    459                 unset( $options['honeypot_after'] ); 
    460                 update_option( 'wpmtst_options', $options ); 
    461             } 
    462  
    463             // -5C- UPDATE 
    464             /** 
    465              * Update single email recipient to multiple. 
    466              * 
    467              * @since 1.18 
    468              */ 
    469             if ( ! isset( $form_options['recipients'] ) ) { 
    470                 $form_options['recipients'] = array( 
    471                     array( 
    472                         'admin_name'       => isset( $form_options['admin_name'] ) ? $form_options['admin_name'] : '', 
    473                         'admin_site_email' => isset( $form_options['admin_site_email'] ) ? $form_options['admin_site_email'] : 1, 
    474                         'admin_email'      => isset( $form_options['admin_email'] ) ? $form_options['admin_email'] : '', 
    475                         'primary'          => 1,  // cannot be deleted 
    476                     ), 
    477                 ); 
    478             } 
     554        } 
     555 
     556        $options = get_option( 'wpmtst_options', array() ); 
     557 
     558        /** 
     559         * Move existing options. 
     560         */ 
     561        if ( isset( $options['admin_notify'] ) ) { 
     562            $form_options['admin_notify'] = $options['admin_notify']; 
     563            unset( $options['admin_notify'] ); 
     564 
     565            $form_options['admin_email'] = $options['admin_email']; 
     566            unset( $options['admin_email'] ); 
     567 
     568            $form_options['captcha'] = $options['captcha']; 
     569            unset( $options['captcha'] ); 
     570 
     571            $form_options['honeypot_before'] = $options['honeypot_before']; 
     572            unset( $options['honeypot_before'] ); 
     573 
     574            $form_options['honeypot_after'] = $options['honeypot_after']; 
     575            unset( $options['honeypot_after'] ); 
     576 
     577            update_option( 'wpmtst_options', $options ); 
     578        } 
     579 
     580        /** 
     581         * Update single email recipient to multiple. 
     582         * 
     583         * @since 1.18 
     584         */ 
     585        if ( ! isset( $form_options['recipients'] ) ) { 
     586            $form_options['recipients'] = array( 
     587                array( 
     588                    'admin_name'       => isset( $form_options['admin_name'] ) ? $form_options['admin_name'] : '', 
     589                    'admin_site_email' => isset( $form_options['admin_site_email'] ) ? $form_options['admin_site_email'] : 1, 
     590                    'admin_email'      => isset( $form_options['admin_email'] ) ? $form_options['admin_email'] : '', 
     591                    'primary'          => 1,  // cannot be deleted 
     592                ), 
     593            ); 
    479594 
    480595            unset( $form_options['admin_name'] ); 
    481596            unset( $form_options['admin_site_email'] ); 
    482597            unset( $form_options['admin_email'] ); 
    483  
    484             /** 
    485              * Add default required-notice setting 
    486              * 
    487              * @since 2.24.1 
    488              */ 
    489             if ( ! isset( $form_options['messages']['required-field']['enabled'] ) ) { 
    490                 $form_options['messages']['required-field']['enabled'] = 1; 
    491             } 
    492  
    493             // Merge in new options 
    494             $form_options = array_merge( Strong_Testimonials_Defaults::get_form_options(), $form_options ); 
    495  
    496         } 
     598        } 
     599 
     600        /** 
     601         * Add default required-notice setting 
     602         * 
     603         * @since 2.24.1 
     604         */ 
     605        if ( ! isset( $form_options['messages']['required-field']['enabled'] ) ) { 
     606            $form_options['messages']['required-field']['enabled'] = 1; 
     607        } 
     608 
     609        // Merge in new options 
     610        $form_options = array_merge( Strong_Testimonials_Defaults::get_form_options(), $form_options ); 
     611 
     612        $this->log( __FUNCTION__, 'done' ); 
    497613 
    498614        return $form_options; 
     
    506622     * @return array 
    507623     */ 
    508     public static function update_compat_options() { 
     624    public function update_compat_options() { 
    509625        $options = get_option( 'wpmtst_compat_options' ); 
    510626        if ( ! $options ) { 
     627            $this->log( __FUNCTION__, 'default' ); 
    511628            return Strong_Testimonials_Defaults::get_compat_options(); 
    512629        } 
    513630 
    514631        // Merge in new options. 
     632        $defaults = Strong_Testimonials_Defaults::get_compat_options(); 
    515633        // Merge nested arrays individually. Don't use array_merge_recursive. 
    516         $defaults = Strong_Testimonials_Defaults::get_compat_options(); 
    517634        $options['ajax'] = array_merge( $defaults['ajax'], $options['ajax'] ); 
    518         return array_merge( $defaults, $options ); 
     635        $options         = array_merge( $defaults, $options ); 
     636 
     637        $this->log( __FUNCTION__, 'done' ); 
     638 
     639        return $options; 
    519640    } 
    520641 
     
    524645     * @return array 
    525646     */ 
    526     public static function update_view_options() { 
     647    public function update_view_options() { 
     648        $this->log( __FUNCTION__, 'default' ); 
    527649        return Strong_Testimonials_Defaults::get_view_options(); 
    528650    } 
     
    533655     * @return array 
    534656     */ 
    535     public static function update_default_view() { 
     657    public function update_default_view() { 
     658        $this->log( __FUNCTION__, 'default' ); 
    536659        return apply_filters( 'wpmtst_view_default', Strong_Testimonials_Defaults::get_default_view() ); 
    537660    } 
     
    540663     * Update views. 
    541664     */ 
    542     public static function update_views() { 
    543         // TODO Make this function accessible by add-ons; i.e. update_view( array ( {parameter} => {value} ) ); 
     665    public function update_views() { 
    544666        $views = wpmtst_get_views(); 
    545667 
    546668        if ( ! $views ) { 
     669            $this->log( __FUNCTION__, 'no views found' ); 
    547670            return; 
    548671        } 
    549672 
    550673        $default_view = get_option( 'wpmtst_view_default' ); 
    551         $history = get_option( 'wpmtst_history', array() ); 
     674        $history      = get_option( 'wpmtst_history', array() ); 
    552675 
    553676        foreach ( $views as $key => $view ) { 
     
    555678            $view_data = unserialize( $view['value'] ); 
    556679            if ( ! is_array( $view_data ) ) { 
     680                $this->log( __FUNCTION__, 'view ' . $view['id'] . ' data is not an array' ); 
    557681                continue; 
    558682            } 
    559683 
    560             if ( ! isset( $history['2.28_new_update_process'] ) ) { 
     684            if ( isset( $history['2.28_new_update_process'] ) ) { 
     685                $this->log( __FUNCTION__, 'already been thru 2.28 update process' ); 
     686            } 
     687            else { 
    561688                /** 
    562689                 * Compat mode no longer needed. 
     
    566693                unset( $view_data['compat'] ); 
    567694 
    568                 $view_data = self::convert_template_name( $view_data ); 
    569                 $view_data = self::convert_count( $view_data ); 
    570                 $view_data = self::convert_background_color( $view_data ); 
    571                 $view_data = self::convert_form_ajax( $view_data ); 
    572                 $view_data = self::convert_word_count( $view_data ); 
    573                 $view_data = self::convert_excerpt_length( $view_data ); 
    574                 $view_data = self::convert_more_text( $view_data ); 
    575                 $view_data = self::convert_modern_title( $view_data ); 
    576                 $view_data = self::convert_slideshow( $view_data ); 
    577                 $view_data = self::convert_title_link( $view_data ); 
    578                 $view_data = self::convert_pagination_type( $view_data ); 
     695                $view_data = $this->convert_template_name( $view_data ); 
     696                $view_data = $this->convert_count( $view_data ); 
     697                $view_data = $this->convert_background_color( $view_data ); 
     698                $view_data = $this->convert_form_ajax( $view_data ); 
     699                $view_data = $this->convert_layout( $view_data ); 
     700                $view_data = $this->convert_word_count( $view_data ); 
     701                $view_data = $this->convert_excerpt_length( $view_data ); 
     702                $view_data = $this->convert_more_text( $view_data ); 
     703                $view_data = $this->convert_modern_title( $view_data ); 
     704                $view_data = $this->convert_slideshow( $view_data ); 
     705                $view_data = $this->convert_title_link( $view_data ); 
     706                $view_data = $this->convert_pagination_type( $view_data ); 
    579707            } 
    580708 
     
    588716            if ( isset( $view_data['pagination_settings'] ) ) { 
    589717                $view['data']['pagination_settings'] = array_merge( $default_view['pagination_settings'], $view_data['pagination_settings'] ); 
     718 
    590719                /** 
    591                  * Bug fix for 2.28.2 
     720                 * Attempt to repair bug from 2.28.2 
    592721                 * 
    593722                 * @since 2.28.3 
    594723                 */ 
    595                 if ( 0 === $view['data']['pagination_settings']['end_size'] ) { 
     724                if ( ! isset( $view['data']['pagination_settings']['end_size'] ) || ! $view['data']['pagination_settings']['end_size'] ) { 
    596725                    $view['data']['pagination_settings']['end_size'] = 1; 
    597                 } 
    598                 if ( 0 === $view['data']['pagination_settings']['mid_size'] ) { 
     726                    $this->log( __FUNCTION__, 'fix end_size' ); 
     727                } 
     728                if ( ! isset( $view['data']['pagination_settings']['mid_size'] ) || ! $view['data']['pagination_settings']['mid_size'] ) { 
    599729                    $view['data']['pagination_settings']['mid_size'] = 2; 
    600                 } 
    601                 if ( 0 === $view['data']['pagination_settings']['per_page'] ) { 
     730                    $this->log( __FUNCTION__, 'fix mid_size' ); 
     731                } 
     732                if ( ! isset( $view['data']['pagination_settings']['per_page'] ) || ! $view['data']['pagination_settings']['per_page'] ) { 
    602733                    $view['data']['pagination_settings']['per_page'] = 5; 
    603                 } 
    604             } else { 
     734                    $this->log( __FUNCTION__, 'fix per_page' ); 
     735                } 
     736 
     737            } 
     738            else { 
    605739                $view['data']['pagination_settings'] = $default_view['pagination_settings']; 
    606740            } 
     
    608742            if ( isset( $view_data['slideshow_settings'] ) ) { 
    609743                $view['data']['slideshow_settings'] = array_merge( $default_view['slideshow_settings'], $view_data['slideshow_settings'] ); 
    610             } else { 
     744            } 
     745            else { 
    611746                $view['data']['slideshow_settings'] = $default_view['slideshow_settings']; 
    612747            } 
    613748            ksort( $view['data']['slideshow_settings'] ); 
    614749 
    615             wpmtst_save_view( $view ); 
     750            $success = wpmtst_save_view( $view ); 
    616751 
    617752        } // foreach $view 
     753 
     754        $this->log( __FUNCTION__, 'done' ); 
    618755    } 
    619756 
     
    625762     * @return array 
    626763     */ 
    627     public static function convert_template_name( $view_data ) { 
     764    public function convert_template_name( $view_data ) { 
    628765        // Change default template from empty to 'default:{type}' 
    629766        if ( ! $view_data['template'] ) { 
    630767            if ( 'form' == $view_data['mode'] ) { 
    631768                $type = 'form'; 
    632             } else { 
     769            } 
     770            else { 
    633771                $type = 'content'; 
    634772            } 
    635773 
    636774            $view_data['template'] = "default:$type"; 
    637         } else { 
     775        } 
     776        else { 
    638777            // Convert name; e.g. 'simple/testimonials.php' 
    639778            if ( 'widget/testimonials.php' == $view_data['template'] ) { 
    640779                $view_data['template'] = 'default:widget'; 
    641             } else { 
     780            } 
     781            else { 
    642782                $view_data['template'] = str_replace( '/', ':', $view_data['template'] ); 
    643783                $view_data['template'] = str_replace( 'testimonials.php', 'content', $view_data['template'] ); 
     
    659799     * @return array 
    660800     */ 
    661     public static function convert_excerpt_length( $view_data ) { 
     801    public function convert_excerpt_length( $view_data ) { 
    662802        if ( ! isset( $view_data['excerpt_length'] ) || ! $view_data['excerpt_length'] ) { 
    663             $default_view = Strong_Testimonials_Defaults::get_default_view(); 
    664             $average_word_length = self::get_average_word_length(); 
     803            $default_view        = Strong_Testimonials_Defaults::get_default_view(); 
     804            $average_word_length = $this->get_average_word_length(); 
    665805 
    666806            if ( isset( $view_data['length'] ) && $view_data['length'] ) { 
     
    669809                $word_count                  = $word_count > 300 ? 300 : $word_count; 
    670810                $view_data['excerpt_length'] = $word_count; 
    671             } else { 
     811            } 
     812            else { 
    672813                $view_data['excerpt_length'] = $default_view['excerpt_length']; 
    673814            } 
    674815 
    675816            unset( $view_data['length'] ); 
     817            $this->log( __FUNCTION__, 'done' ); 
    676818        } 
    677819 
     
    688830     * @return array 
    689831     */ 
    690     public static function convert_more_text( $view_data ) { 
     832    public function convert_more_text( $view_data ) { 
    691833        if ( isset( $view_data['more_text'] ) ) { 
    692834            if ( isset( $view_data['more_page'] ) && $view_data['more_page'] > 1 ) { 
     
    695837                $view_data['more_page']      = 1; 
    696838                $view_data['more_page_text'] = $view_data['more_text']; 
    697             } elseif ( isset( $view_data['more_post'] ) && $view_data['more_post'] ) { 
     839            } 
     840            elseif ( isset( $view_data['more_post'] ) && $view_data['more_post'] ) { 
    698841                $view_data['more_post_text'] = $view_data['more_text']; 
    699842            } 
    700843            unset( $view_data['more_text'] ); 
     844            $this->log( __FUNCTION__, 'done' ); 
    701845        } 
    702846 
     
    713857     * @return array 
    714858     */ 
    715     public static function convert_slideshow( $view_data ) { 
     859    public function convert_slideshow( $view_data ) { 
    716860        if ( 'slideshow' == $view_data['mode'] ) { 
    717861            $view_data['slideshow'] = 1; 
     
    778922            } 
    779923 
     924            $this->log( __FUNCTION__, 'done' ); 
    780925        } 
    781926 
     
    790935     * @return array 
    791936     */ 
    792     public static function convert_count( $view_data ) { 
    793         if ( -1 == $view_data['count'] ) { 
     937    public function convert_count( $view_data ) { 
     938        if ( - 1 == $view_data['count'] ) { 
    794939            $view_data['count'] = 1; 
    795940            $view_data['all']   = 1; 
     941            $this->log( __FUNCTION__, 'done' ); 
    796942        } 
    797943 
     
    806952     * @return array 
    807953     */ 
    808     public static function convert_background_color( $view_data ) { 
     954    public function convert_background_color( $view_data ) { 
    809955        if ( ! is_array( $view_data['background'] ) ) { 
    810956            $view_data['background'] = array( 
     
    812958                'type'  => 'single', 
    813959            ); 
     960            $this->log( __FUNCTION__, 'done' ); 
    814961        } 
    815962 
     
    824971     * @return array 
    825972     */ 
    826     public static function convert_form_ajax( $view_data ) { 
     973    public function convert_form_ajax( $view_data ) { 
    827974        if ( isset( $view_data['form-ajax'] ) ) { 
    828975            $view_data['form_ajax'] = $view_data['form-ajax']; 
    829976            unset( $view_data['form-ajax'] ); 
    830         } 
    831  
     977            $this->log( __FUNCTION__, 'done' ); 
     978        } 
     979 
     980        return $view_data; 
     981    } 
     982 
     983    /** 
     984     * Prevent incompatible layouts. 
     985     * 
     986     * @param $view_data 
     987     * 
     988     * @return array 
     989     */ 
     990    public function convert_layout( $view_data ) { 
    832991        if ( isset( $view_data['pagination'] ) && $view_data['pagination'] ) { 
    833992            if ( isset( $view_data['layout'] ) && 'masonry' == $view_data['layout'] ) { 
    834993                $view_data['layout'] = ''; 
     994                $this->log( __FUNCTION__, 'done' ); 
    835995            } 
    836996        } 
     
    8431003     * 
    8441004     * @since 2.11.4 
    845  
     1005     * 
    8461006     * @param $view_data 
    8471007     * 
    8481008     * @return array 
    8491009     */ 
    850     public static function convert_word_count( $view_data ) { 
     1010    public function convert_word_count( $view_data ) { 
    8511011        if ( isset( $view_data['word_count'] ) ) { 
    8521012            $view_data['excerpt_length'] = $view_data['word_count']; 
    8531013            unset( $view_data['word_count'] ); 
     1014            $this->log( __FUNCTION__, 'done' ); 
    8541015        } 
    8551016 
     
    8651026     * @return array 
    8661027     */ 
    867     public static function convert_modern_title( $view_data ) { 
     1028    public function convert_modern_title( $view_data ) { 
    8681029        if ( 'modern:content' == $view_data['template'] ) { 
    8691030            if ( ! isset( $history['2.12.4_convert_modern_template'] ) ) { 
    8701031                $view_data['title'] = 0; 
    871                 self::update_history_log( '2.12.4_convert_modern_template' ); 
     1032                $this->update_history_log( '2.12.4_convert_modern_template' ); 
     1033                $this->log( __FUNCTION__, 'done' ); 
    8721034            } 
    8731035        } 
     
    8801042     * 
    8811043     * @since 2.26.0 
    882  
     1044     * 
    8831045     * @param $view_data 
    8841046     * 
    8851047     * @return array 
    8861048     */ 
    887     public static function convert_title_link( $view_data ) { 
     1049    public function convert_title_link( $view_data ) { 
    8881050        if ( ! isset( $view_data['title_link'] ) ) { 
    8891051            $view_data['title_link'] = 0; 
     1052            $this->log( __FUNCTION__, 'done' ); 
    8901053        } 
    8911054 
     
    8981061     * @since 2.23.0 
    8991062     */ 
    900     public static function convert_nofollow() { 
     1063    public function convert_nofollow() { 
    9011064        $args  = array( 
    9021065            'posts_per_page'   => - 1, 
     
    9191082            if ( 'on' == $nofollow ) { 
    9201083                $new_value = 'yes'; 
    921             } elseif ( 1 === $nofollow ) { 
     1084            } 
     1085            elseif ( 1 === $nofollow ) { 
    9221086                $new_value = 'yes'; 
    923             } elseif ( 'off' == $nofollow ) { 
     1087            } 
     1088            elseif ( 'off' == $nofollow ) { 
    9241089                $new_value = 'no'; 
    925             } elseif ( 0 === $nofollow ) { 
     1090            } 
     1091            elseif ( 0 === $nofollow ) { 
    9261092                $new_value = 'no'; 
    927             } elseif ( is_bool( $nofollow ) ) { 
     1093            } 
     1094            elseif ( is_bool( $nofollow ) ) { 
    9281095                if ( $nofollow ) { 
    9291096                    $new_value = 'yes'; 
    930                 } else { 
     1097                } 
     1098                else { 
    9311099                    $new_value = 'default'; 
    9321100                } 
     
    9351103            update_post_meta( $post->ID, 'nofollow', $new_value ); 
    9361104        } 
     1105        $this->log( __FUNCTION__, 'done' ); 
    9371106    } 
    9381107 
     
    9461115     * @return mixed 
    9471116     */ 
    948     public static function convert_pagination_type( $view_data ) { 
     1117    public function convert_pagination_type( $view_data ) { 
    9491118        if ( isset( $view_data['pagination_type'] ) ) { 
    9501119            $view_data['pagination_settings']['type'] = $view_data['pagination_type']; 
    9511120            unset( $view_data['pagination_type'] ); 
    952         } 
     1121            $this->log( __FUNCTION__, 'type', $view_data['pagination_settings']['type'] ); 
     1122        } 
     1123 
    9531124        if ( isset( $view_data['nav'] ) ) { 
    9541125            $view_data['pagination_settings']['nav'] = $view_data['nav']; 
    9551126            unset( $view_data['nav'] ); 
    956         } 
     1127            $this->log( __FUNCTION__, 'nav', $view_data['pagination_settings']['nav'] ); 
     1128        } 
     1129 
    9571130        if ( isset( $view_data['per_page'] ) ) { 
    9581131            $view_data['pagination_settings']['per_page'] = $view_data['per_page']; 
    9591132            unset( $view_data['per_page'] ); 
     1133            $this->log( __FUNCTION__, 'per_page', $view_data['pagination_settings']['per_page'] ); 
    9601134        } 
    9611135 
     
    9681142     * @since 2.10.0 
    9691143     */ 
    970     public static function get_average_word_length() { 
     1144    public function get_average_word_length() { 
    9711145        $args  = array( 
    9721146            'posts_per_page'   => - 1, 
     
    9941168    } 
    9951169 
    996     /** 
    997      * Unset stored version number to allow rollback and beta testing. 
    998      * 
    999      * @since 2.28.0 
    1000      */ 
    1001     public static function unset_version() { 
    1002         delete_option( 'wpmtst_plugin_version'); 
    1003     } 
    10041170} 
    1005  
    1006 Strong_Testimonials_Updater::init(); 
  • strong-testimonials/trunk/admin/settings/class-strong-testimonials-settings-general.php

    r1761957 r1771190  
    8181     */ 
    8282    public static function sanitize_options( $input ) { 
    83         $input['email_log_level']       = isset( $input['email_log_level'] ) ? (int) $input['email_log_level'] : 1; 
    8483        $input['embed_width']           = $input['embed_width'] ? (int) sanitize_text_field( $input['embed_width'] ) : ''; 
    8584        $input['load_font_awesome']     = wpmtst_sanitize_checkbox( $input, 'load_font_awesome' ); 
  • strong-testimonials/trunk/admin/settings/partials/general.php

    r1761957 r1771190  
    5757            <p class="description"><?php _e( 'For advanced users.', 'strong-testimonials' ); ?></p> 
    5858            </fieldset> 
    59         </td> 
    60     </tr> 
    61  
    62     <tr valign="top"> 
    63         <th scope="row"> 
    64             <?php _e( 'Troubleshooting', 'strong-testimonials' ); ?> 
    65         </th> 
    66         <td> 
    67             <fieldset> 
    68                 <span style="display: inline-block; margin-right: 20px; vertical-align: middle;">Notification Emails</span> 
    69                 <label style="display: inline-block; vertical-align: middle;"> 
    70                     <select id="email_log_level" name="wpmtst_options[email_log_level]"> 
    71                         <option value="0" <?php selected( $options['email_log_level'], 0 ); ?>> 
    72                             <?php _e( 'Log nothing', 'strong-testimonials' ); ?> 
    73                         </option> 
    74                         <option value="1" <?php selected( $options['email_log_level'], 1 ); ?>> 
    75                             <?php _e( 'Log failed emails only (default)', 'strong-testimonials' ); ?> 
    76                         </option> 
    77                         <option value="2" <?php selected( $options['email_log_level'], 2 ); ?>> 
    78                             <?php _e( 'Log both successful and failed emails', 'strong-testimonials' ); ?> 
    79                         </option> 
    80                     </select> 
    81                 </label> 
    82             </fieldset> 
    83             <?php if ( file_exists( WPMST()->debug->get_log_file_path() ) ) : ?> 
    84                 <p><a href="<?php echo WPMST()->debug->get_log_file_url(); ?>" download="strong-testimonials.log"><?php _e( 'Download the log file', 'strong-testimonials' ); ?></a></p> 
    85             <?php else : ?> 
    86                 <p><em><?php _e( 'No log file yet.', 'strong-testimonials' ); ?></em></p> 
    87             <?php endif; ?> 
    8859        </td> 
    8960    </tr> 
  • strong-testimonials/trunk/admin/views-validate.php

    r1761957 r1771190  
    265265    $out['type']               = sanitize_text_field( $in['type'] ); 
    266266    $out['nav']                = str_replace( ' ', '', sanitize_text_field( $in['nav'] ) ); 
    267     $out['per_page']           = (int) sanitize_text_field( $in['per_page'] ); 
    268267    $out['show_all']           = $in['show_all'] === 'on'; 
    269     $out['end_size']           = (int) sanitize_text_field( $in['end_size'] ); 
    270     $out['mid_size']           = (int) sanitize_text_field( $in['mid_size'] ); 
    271268    $out['prev_next']          = wpmtst_sanitize_checkbox( $in, 'prev_next' ); 
    272269    $out['prev_text']          = sanitize_text_field( $in['prev_text'] ); 
     
    274271    $out['before_page_number'] = sanitize_text_field( $in['before_page_number'] ); 
    275272    $out['after_page_number']  = sanitize_text_field( $in['after_page_number'] ); 
     273 
     274    /** 
     275     * Attempt to repair bug from 2.28.2 
     276     */ 
     277    if ( isset( $in['end_size'] ) && intval( $in['end_size'] ) ) { 
     278        $out['end_size'] = (int) sanitize_text_field( $in['end_size'] ); 
     279    } 
     280    else { 
     281        $out['end_size'] = 1; 
     282    } 
     283 
     284    if ( isset( $in['mid_size'] ) && intval( $in['mid_size'] ) ) { 
     285        $out['mid_size'] = (int) sanitize_text_field( $in['mid_size'] ); 
     286    } 
     287    else { 
     288        $out['mid_size'] = 2; 
     289    } 
     290 
     291    if ( isset( $in['per_page'] ) && intval( $in['per_page'] ) ) { 
     292        $out['per_page'] = (int) sanitize_text_field( $in['per_page'] ); 
     293    } 
     294    else { 
     295        $out['per_page'] = 5; 
     296    } 
    276297 
    277298    return $out; 
  • strong-testimonials/trunk/admin/views.php

    r1761957 r1771190  
    149149        $view      = $default_view; 
    150150        $view_name = 'new'; 
     151    } 
     152 
     153    /** 
     154     * Attempt to repair bug from 2.28.2 
     155     */ 
     156    if ( ! isset( $view['pagination_settings']['end_size'] ) || ! $view['pagination_settings']['end_size'] ) { 
     157        $view['pagination_settings']['end_size'] = 1; 
     158    } 
     159    if ( ! isset( $view['pagination_settings']['mid_size'] ) || ! $view['pagination_settings']['mid_size'] ) { 
     160        $view['pagination_settings']['mid_size'] = 2; 
     161    } 
     162    if ( ! isset( $view['pagination_settings']['per_page'] ) || ! $view['pagination_settings']['per_page'] ) { 
     163        $view['pagination_settings']['per_page'] = 5; 
    151164    } 
    152165 
  • strong-testimonials/trunk/includes/class-strong-mail.php

    r1691890 r1771190  
    2727            return; 
    2828 
    29         add_action( 'wp_mail_failed', array( $this, 'catch_mail_failed' ) ); 
    3029        foreach ( $current_queue as $email ) { 
    3130            $this->send_mail( $email ); 
    3231        } 
    33         remove_action( 'wp_mail_failed', array( $this, 'catch_mail_failed' ) ); 
    3432 
    3533        delete_transient( 'wpmtst_mail_queue' ); 
    3634    } 
    3735 
    38  
    39     public function catch_mail_failed( $error ) { 
    40         WPMST()->debug->log( $error ); 
    41     } 
    42  
    43  
    4436    public function send_mail( $email ) { 
    45         $mail_sent = wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] ); 
    46  
    47         // Log email action 
    48         //TODO Deeper integration with Mandrill 
    49         $options = get_option( 'wpmtst_options' ); 
    50         if ( isset( $options['email_log_level'] ) && $options['email_log_level'] ) { 
    51  
    52             // for both levels, log failure only 
    53             // for level 2, log both success and failure 
    54             if ( ! $mail_sent || 2 == $options['email_log_level'] ) { 
    55                 $log_entry = array( 
    56                     'response' => $mail_sent ? 'mail successful' : 'mail failed', 
    57                     'to'       => $email['to'], 
    58                     'subject'  => $email['subject'], 
    59                     'message'  => $email['message'], 
    60                     'headers'  => $email['headers'], 
    61                 ); 
    62                 WPMST()->debug->log( $log_entry, 'mail', __FUNCTION__ ); 
    63             } 
    64  
    65         } 
    66  
     37        wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] ); 
    6738    } 
    6839 
  • strong-testimonials/trunk/includes/class-strong-view-display.php

    r1770057 r1771190  
    232232         */ 
    233233        if ( ! $this->atts['all'] && $this->atts['count'] > 0 ) { 
    234             if ( $this->atts['pagination'] ) { 
    235                 if ( 'simple' == $this->atts['pagination_settings']['type'] ) { 
    236                     $count = min( $this->atts['count'], count( $query->posts ) ); 
    237                     $query->posts         = array_slice( $query->posts, 0, $count ); 
    238                     $query->post_count    = $count; 
    239                     $query->found_posts   = $count; 
    240                     $query->max_num_pages = ceil( $count / $this->atts['pagination_settings']['per_page'] ); 
    241                 } 
    242             } 
     234            $count                = min( $this->atts['count'], count( $query->posts ) ); 
     235            $query->posts         = array_slice( $query->posts, 0, $count ); 
     236            $query->post_count    = $count; 
     237            $query->found_posts   = $count; 
    243238        } 
    244239 
    245240        $this->post_count  = $query->post_count; 
    246241        $this->found_posts = $query->found_posts; 
    247  
     242        $this->query       = $query; 
    248243        WPMST()->set_query( $query ); 
    249  
    250         $this->query = $query; 
    251  
    252         if ( $this->atts['pagination'] ) { 
    253             if ( $this->query->post_count <= $this->atts['pagination_settings']['per_page'] ) { 
    254                 $this->atts['pagination'] = apply_filters( 'wpmtst_use_default_pagination', true, $this->atts ); 
    255             } 
    256         } 
    257244    } 
    258245 
  • strong-testimonials/trunk/includes/functions-template-form.php

    r1770057 r1771190  
    418418function wpmtst_form_submit_button( $preview = false ) { 
    419419    ?> 
    420     <div class="form-field submit"> 
     420    <div class="form-field wpmtst-submit"> 
    421421        <label><input type="<?php echo $preview ? 'button' : 'submit'; ?>" id="wpmtst_submit_testimonial" name="wpmtst_submit_testimonial" value="<?php esc_attr_e( wpmtst_get_form_message( 'form-submit-button' ) ); ?>" class="button" tabindex="0"></label> 
    422422    </div> 
  • strong-testimonials/trunk/readme.txt

    r1770107 r1771190  
    44Requires at least: 3.7 
    55Tested up to: 4.9 
    6 Stable tag: 2.28.3 
     6Stable tag: 2.28.4 
    77License: GPLv3 or later 
    88License URI: http://www.gnu.org/licenses/gpl-3.0.html 
     
    180180 
    181181== Changelog == 
     182 
     183= 2.28.4 - Nov 20, 2017 = 
     184* Fix bug when using count in views. 
     185* Fix bug that prevented saving views. 
     186* Fix bug that prevented deleting the plugin. 
     187* Rename the form's submit button CSS class to `wpmtst-submit` to prevent conflicts. Thanks @chestozo. 
     188* Remove mail debug logger. 
     189* Improved update process to prevent simultaneous execution. 
    182190 
    183191= 2.28.3 - Nov 18, 2017 = 
  • strong-testimonials/trunk/strong-testimonials.php

    r1770057 r1771190  
    55 * Description: A full-featured plugin that works right out of the box for beginners and offers advanced features for pros. 
    66 * Author: Chris Dillon 
    7  * Version: 2.28.3 
     7 * Version: 2.28.4 
    88 * 
    99 * Author URI: https://strongplugins.com/ 
     
    3535} 
    3636 
    37 define( 'WPMTST_VERSION', '2.28.3' ); 
     37define( 'WPMTST_VERSION', '2.28.4' ); 
    3838define( 'WPMTST_PLUGIN', plugin_basename( __FILE__ ) ); // strong-testimonials/strong-testimonials.php 
    3939define( 'WPMTST', dirname( WPMTST_PLUGIN ) );           // strong-testimonials 
     
    4949 * @property  Strong_Mail mail 
    5050 * @property  Strong_Templates templates 
    51  * @property  Strong_Debug debug 
    5251 * @property  Strong_Testimonials_Form form 
    5352 * @since 1.15.0 
     
    7776     */ 
    7877    public $templates; 
    79  
    80     /** 
    81      * @var Strong_Debug 
    82      */ 
    83     public $debug; 
    8478 
    8579    /** 
     
    149143        wpmtst_register_cpt(); 
    150144        flush_rewrite_rules(); 
    151         Strong_Testimonials_Updater::update(); 
    152145    } 
    153146 
     
    157150    static function plugin_deactivation() { 
    158151        flush_rewrite_rules(); 
    159         Strong_Testimonials_Updater::unset_version(); 
     152 
     153        /** 
     154         * Unset stored version number to allow rollback and beta testing. 
     155         * 
     156         * @since 2.28.0 
     157         */ 
     158        delete_option( 'wpmtst_plugin_version'); 
    160159    } 
    161160 
     
    192191        $this->mail      = new Strong_Mail(); 
    193192        $this->templates = new Strong_Templates(); 
    194         $this->debug     = new Strong_Debug(); 
    195193        $this->form      = new Strong_Testimonials_Form(); 
    196194    } 
     
    213211        require_once WPMTST_INC . 'class-strong-templates.php'; 
    214212        require_once WPMTST_INC . 'class-strong-mail.php'; 
    215         require_once WPMTST_INC . 'class-strong-debug.php'; 
    216213        require_once WPMTST_INC . 'class-strong-form.php'; 
    217214        require_once WPMTST_INC . 'class-walker-strong-category-checklist-front.php'; 
  • strong-testimonials/trunk/templates-scss/_partials/_structure-form.scss

    r1684299 r1771190  
    55    margin-bottom: 1.5em; 
    66 
    7     &.submit { 
     7    &.wpmtst-submit { 
    88      margin-bottom: 0; 
    99    } 
  • strong-testimonials/trunk/templates-scss/default-dark/form.scss

    r1684299 r1771190  
    22 * Strong Testimonials Default Dark Form template 
    33 */ 
     4 
    45@import "../_partials/structure-form"; 
    56 
  • strong-testimonials/trunk/templates-scss/default/form.scss

    r1684299 r1771190  
    22 * Strong Testimonials Default Form template 
    33 */ 
     4 
    45@import "../_partials/structure-form"; 
    56 
  • strong-testimonials/trunk/templates/default-dark/form.css

    r1684299 r1771190  
    88  margin-bottom: 1.5em; 
    99} 
    10 .strong-form .form-field.submit { 
     10.strong-form .form-field.wpmtst-submit { 
    1111  margin-bottom: 0; 
    1212} 
  • strong-testimonials/trunk/templates/default/form.css

    r1684299 r1771190  
    88  margin-bottom: 1.5em; 
    99} 
    10 .strong-form .form-field.submit { 
     10.strong-form .form-field.wpmtst-submit { 
    1111  margin-bottom: 0; 
    1212} 
  • strong-testimonials/trunk/uninstall.php

    r1761957 r1771190  
    88 
    99// TODO Leave No Trace 
    10  
    11 Strong_Testimonials_Updater::remove_caps(); 
Note: See TracChangeset for help on using the changeset viewer.