Strong Testimonials - Version 2.33

Version Description

Download this release

Release Info

Developer machothemes
Plugin Icon 128x128 Strong Testimonials
Version 2.33
Comparing to
See all releases

Code changes from version 2.32.4 to 2.33

Files changed (55) hide show
  1. admin/about/about.php +0 -11
  2. admin/about/addons.php +2 -11
  3. admin/about/class-strong-testimonials-about.php +2 -16
  4. admin/about/how-to.php +0 -19
  5. admin/about/links.php +1 -8
  6. admin/admin.php +1 -1
  7. admin/class-strong-testimonials-defaults.php +3 -0
  8. admin/class-strong-testimonials-list-table.php +0 -3
  9. admin/class-strong-testimonials-page-shortcodes.php +0 -2
  10. admin/class-walker-strong-category-checklist.php +0 -1
  11. admin/class-walker-strong-form-category-checklist.php +0 -1
  12. admin/css/views.css +4 -7
  13. admin/css/views.css.map +0 -7
  14. admin/custom-fields.php +2 -2
  15. admin/edd/EDD_SL_Plugin_Updater.php +0 -500
  16. admin/edd/Strong_Plugin_Updater.php +0 -234
  17. admin/js/views.js +33 -0
  18. admin/partials/views/option-content.php +87 -55
  19. admin/scss/_partials/_misc.scss +4 -9
  20. admin/settings/class-strong-testimonials-settings-compat.php +0 -2
  21. admin/settings/partials/form.php +0 -1
  22. admin/settings/partials/general.php +0 -1
  23. admin/views-validate.php +90 -59
  24. admin/views.php +1 -2
  25. includes/class-strong-view-display.php +35 -0
  26. includes/class-strong-view-slideshow.php +2 -1
  27. includes/class-strong-view.php +165 -29
  28. includes/class-walker-strong-category-checklist-front.php +0 -1
  29. includes/filters.php +30 -1
  30. includes/functions-activation.php +0 -1
  31. includes/functions-content.php +106 -94
  32. includes/functions-image.php +0 -2
  33. includes/functions-template.php +28 -34
  34. includes/functions-views.php +0 -3
  35. includes/functions.php +1 -3
  36. includes/l10n-polylang.php +3 -0
  37. includes/l10n-wpml.php +6 -0
  38. includes/scripts.php +16 -1
  39. public/css/animate.min.css +11 -0
  40. public/css/custom.css +0 -5
  41. public/js/controller.js +13 -1
  42. public/js/controller.min.js +1 -1
  43. public/js/lib/form-validation/form-validation.js +0 -2
  44. public/js/lib/readmore/readmore.js +122 -0
  45. public/js/lib/readmore/readmore.min.js +1 -0
  46. public/js/lib/strongslider/jquery.strongslider.js +1 -0
  47. public/js/lib/strongslider/jquery.strongslider.min.js +1 -1
  48. readme.txt +13 -55
  49. strong-testimonials.php +22 -22
  50. templates-scss/_partials/_base.scss +12 -0
  51. templates/bold/content.css +8 -0
  52. templates/default/content.css +8 -0
  53. templates/modern/content.css +8 -0
  54. templates/simple/content.css +8 -0
  55. templates/small-widget/content.css +8 -0
admin/about/about.php DELETED
@@ -1,11 +0,0 @@
1
- <h2><?php _e( 'Flexible Features. Strong Support.', 'strong-testimonials' ); ?></h2>
2
- <?php /* translators: %s is a formatted number */ ?>
3
- <p class="lead-description"><?php printf( __( 'The highest-rated free testimonials plugin trusted by more than %s people.', 'strong-testimonials' ), number_format_i18n( 60000 ) ); ?></p>
4
- <div class="feature-section one-col">
5
- <div class="col">
6
- <p><?php _e( 'Designed from the ground up to simplify the process of customizing your testimonials or reviews.', 'strong-testimonials' ); ?></p>
7
- <p><?php _e( '<strong>Custom fields</strong> are deeply integrated into Strong Testimonials. It even includes a default set of custom fields so you can get started quickly.', 'strong-testimonials' ); ?></p>
8
- <p><?php _e( 'Forget about complicated shortcodes. Use <strong>views</strong> to construct unlimited testimonial displays including grids and slideshows with features like excerpts and pagination in a variety of templates.', 'strong-testimonials' ); ?></p>
9
- <p><?php _e( 'Integrate with plugins like Popup Maker or Google Captcha. For developers, actions and filters allow further customization.', 'strong-testimonials' ); ?></p>
10
- </div>
11
- </div>
 
 
 
 
 
 
 
 
 
 
 
admin/about/addons.php CHANGED
@@ -1,17 +1,8 @@
1
  <hr />
2
 
3
- <h2><?php _e( 'Get More Features With Pro Add-ons', 'strong-testimonials' ); ?></h2>
4
 
5
  <div id="addons" class="feature-section three-col">
6
- <div class="col sidebar-block sidebar-news addon review-markup">
7
- <h3>Review Markup</h3>
8
- <p>Improve your search engine results and get rich snippets by adding review markup to your testimonials. </p>
9
- <div class="actions">
10
- <a href="https://strongplugins.com/plugins/strong-testimonials-review-markup/?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
11
- &nbsp;&bull;&nbsp;
12
- <a href="https://strongdemos.com/strong-testimonials-review-markup/?utm_source=plugin&utm_medium=about" target="_blank">Go demo</a>
13
- </div>
14
- </div>
15
  <div class="col sidebar-block sidebar-news addon multiple-forms">
16
  <h3>Multiple Forms</h3>
17
  <p>Need more forms for different products or services? No problem. Create unlimited forms.</p>
@@ -30,7 +21,7 @@
30
  </div>
31
  <div class="col sidebar-block sidebar-news addon assignment">
32
  <h3>Assignment</h3>
33
- <p>Assign testimonials to any object (posts, pages, media or custom content types) with features designed to simplify your workflow. Works well with portfolio, directory and service business themes.</p>
34
  <div class="actions">
35
  <a href="https://strongplugins.com/plugins/strong-testimonials-assignment?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
36
  &nbsp;&bull;&nbsp;
1
  <hr />
2
 
3
+ <h2><?php _e( 'Get More Features With Free Add-ons', 'strong-testimonials' ); ?></h2>
4
 
5
  <div id="addons" class="feature-section three-col">
 
 
 
 
 
 
 
 
 
6
  <div class="col sidebar-block sidebar-news addon multiple-forms">
7
  <h3>Multiple Forms</h3>
8
  <p>Need more forms for different products or services? No problem. Create unlimited forms.</p>
21
  </div>
22
  <div class="col sidebar-block sidebar-news addon assignment">
23
  <h3>Assignment</h3>
24
+ <p>Assign testimonials to any content type with features designed to simplify your workflow. Works well with portfolio, directory and service business themes.</p>
25
  <div class="actions">
26
  <a href="https://strongplugins.com/plugins/strong-testimonials-assignment?utm_source=plugin&utm_medium=about" target="_blank">Learn more</a>
27
  &nbsp;&bull;&nbsp;
admin/about/class-strong-testimonials-about.php CHANGED
@@ -52,7 +52,7 @@ class Strong_Testimonials_About {
52
  */
53
  public function about_page() {
54
  $major_minor = strtok( WPMTST_VERSION, '.' ) . '.' . strtok( '.' );
55
- $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'about';
56
  $url = admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' );
57
  ?>
58
  <div class="wrap about-wrap">
@@ -63,41 +63,27 @@ class Strong_Testimonials_About {
63
  <p class="about-text">
64
  <?php _e( 'Thank you for updating to the latest version!' ); ?>
65
  <?php /* translators: %s is the plugin version number */ ?>
66
- <?php printf( 'Strong Testimonials %s adds a slider carousel option.', $major_minor ); ?>
67
  </p>
68
 
69
  <div class="wp-badge strong-testimonials"><?php printf( __( 'Version %s' ), $major_minor ); ?></div>
70
 
71
  <h2 class="nav-tab-wrapper wp-clearfix">
72
 
73
- <a href="<?php echo $url; ?>" class="nav-tab <?php echo $active_tab == 'about' ? 'nav-tab-active' : ''; ?>"><?php _e( 'About' ); ?></a>
74
-
75
- <a href="<?php echo add_query_arg( 'tab', 'whats-new', $url ); ?>" class="nav-tab <?php echo $active_tab == 'whats-new' ? 'nav-tab-active' : ''; ?>"><?php _e( 'What&#8217;s New' ); ?></a>
76
-
77
  <a href="<?php echo add_query_arg( 'tab', 'how-to', $url ); ?>" class="nav-tab <?php echo $active_tab == 'how-to' ? 'nav-tab-active' : ''; ?>"><?php _e( 'How To', 'strong-testimonials' ); ?></a>
78
 
79
  <a href="<?php echo add_query_arg( 'tab', 'privacy', $url ); ?>" class="nav-tab <?php echo $active_tab == 'privacy' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Privacy' ); ?></a>
80
 
81
  </h2>
82
 
83
- <!--
84
- <div class="changelog point-releases">
85
- </div>
86
- -->
87
 
88
  <?php
89
  switch( $active_tab ) {
90
  case 'privacy':
91
  include WPMTST_ADMIN . 'about/privacy.php';
92
  break;
93
- case 'how-to':
94
  include WPMTST_ADMIN . 'about/how-to.php';
95
  break;
96
- case 'whats-new':
97
- include WPMTST_ADMIN . 'about/whats-new.php';
98
- break;
99
- default:
100
- include WPMTST_ADMIN. 'about/about.php';
101
  }
102
 
103
  include WPMTST_ADMIN. 'about/links.php';
52
  */
53
  public function about_page() {
54
  $major_minor = strtok( WPMTST_VERSION, '.' ) . '.' . strtok( '.' );
55
+ $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'how-to';
56
  $url = admin_url( 'edit.php?post_type=wpm-testimonial&page=about-strong-testimonials' );
57
  ?>
58
  <div class="wrap about-wrap">
63
  <p class="about-text">
64
  <?php _e( 'Thank you for updating to the latest version!' ); ?>
65
  <?php /* translators: %s is the plugin version number */ ?>
 
66
  </p>
67
 
68
  <div class="wp-badge strong-testimonials"><?php printf( __( 'Version %s' ), $major_minor ); ?></div>
69
 
70
  <h2 class="nav-tab-wrapper wp-clearfix">
71
 
 
 
 
 
72
  <a href="<?php echo add_query_arg( 'tab', 'how-to', $url ); ?>" class="nav-tab <?php echo $active_tab == 'how-to' ? 'nav-tab-active' : ''; ?>"><?php _e( 'How To', 'strong-testimonials' ); ?></a>
73
 
74
  <a href="<?php echo add_query_arg( 'tab', 'privacy', $url ); ?>" class="nav-tab <?php echo $active_tab == 'privacy' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Privacy' ); ?></a>
75
 
76
  </h2>
77
 
 
 
 
 
78
 
79
  <?php
80
  switch( $active_tab ) {
81
  case 'privacy':
82
  include WPMTST_ADMIN . 'about/privacy.php';
83
  break;
84
+ default:
85
  include WPMTST_ADMIN . 'about/how-to.php';
86
  break;
 
 
 
 
 
87
  }
88
 
89
  include WPMTST_ADMIN. 'about/links.php';
admin/about/how-to.php CHANGED
@@ -4,25 +4,6 @@ $add_the_view = __( 'Add the view to a page or sidebar using its unique shortcod
4
  <h2><?php _e( 'Let\'s Get Started', 'strong-testimonials' ); ?></h2>
5
  <p class="lead-description"><?php _e( 'This plugin is different than others you may have tried.', 'strong-testimonials' ); ?></p>
6
 
7
- <div class="feature-section one-col">
8
- <p><?php printf( __( 'Testimonials are like posts. They can be viewed individually. For example, a testimonial with the title "Highly recommended!" is viewable at <a href="#" class="nogo">%1$s</a>.', 'strong-testimonials' ), home_url( 'testimonial/highly-recommended' ) ); ?></p>
9
-
10
- <script>
11
- document.querySelector(".nogo").addEventListener("click", function (e) {
12
- e.preventDefault();
13
- this.blur();
14
- });
15
- </script>
16
-
17
- <p><?php _e( 'The more common approach is to display a group of testimonials. Among the many options, you can select which testimonials to include, what fields to show, and the layout.', 'strong-testimonials' ); ?></p>
18
-
19
- <p><?php _e( 'The plugin provides a tool for configuring those displays: <strong>Views</strong>.', 'strong-testimonials' ); ?>
20
- <?php _e( 'A view is simply a group of settings with an easy-to-use editor.', 'strong-testimonials' ); ?>
21
- <?php _e( 'You can create <em>unlimited</em> views.', 'strong-testimonials' ); ?>
22
- <?php _e( 'Each view has its own simple shortcode.', 'strong-testimonials' ); ?>
23
- </p>
24
- </div>
25
-
26
  <div class="feature-section two-col">
27
  <div class="col">
28
  <h3><?php _e('How to Add the Form', 'strong-testimonials' ); ?></h3>
4
  <h2><?php _e( 'Let\'s Get Started', 'strong-testimonials' ); ?></h2>
5
  <p class="lead-description"><?php _e( 'This plugin is different than others you may have tried.', 'strong-testimonials' ); ?></p>
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  <div class="feature-section two-col">
8
  <div class="col">
9
  <h3><?php _e('How to Add the Form', 'strong-testimonials' ); ?></h3>
admin/about/links.php CHANGED
@@ -8,15 +8,8 @@ $links = array();
8
 
9
  $links[] = sprintf( '<a href="%s" target="_blank">%s</a>',
10
  esc_url( 'http://wordpress.org/support/plugin/strong-testimonials' ),
11
- __( 'Use the public support forum', 'strong-testimonials' ) );
12
 
13
- $links[] = __( 'or', 'strong-testimonials' ) . ' ' . sprintf( '<a href="%s" target="_blank">%s</a>',
14
- esc_url( 'https://support.strongplugins.com' ),
15
- __( 'submit a private support ticket', 'strong-testimonials' ) );
16
-
17
- $links[] = __( 'or', 'strong-testimonials' ) . ' ' . sprintf( '<a href="%s" target="_blank">%s</a>',
18
- esc_url( 'https://strongplugins.com/contact/' ),
19
- __( 'contact the developer', 'strong-testimonials' ) );
20
  ?>
21
  <ul>
22
  <?php foreach ( $links as $link ) : ?>
8
 
9
  $links[] = sprintf( '<a href="%s" target="_blank">%s</a>',
10
  esc_url( 'http://wordpress.org/support/plugin/strong-testimonials' ),
11
+ __( 'Use the community support forum', 'strong-testimonials' ) );
12
 
 
 
 
 
 
 
 
13
  ?>
14
  <ul>
15
  <?php foreach ( $links as $link ) : ?>
admin/admin.php CHANGED
@@ -204,7 +204,7 @@ function wpmtst_plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data = arra
204
 
205
  return $plugin_meta;
206
  }
207
- add_filter( 'plugin_row_meta', 'wpmtst_plugin_row_meta' , 10, 4 );
208
 
209
 
210
  /**
204
 
205
  return $plugin_meta;
206
  }
207
+ //add_filter( 'plugin_row_meta', 'wpmtst_plugin_row_meta' , 10, 4 );
208
 
209
 
210
  /**
admin/class-strong-testimonials-defaults.php CHANGED
@@ -705,6 +705,9 @@ class Strong_Testimonials_Defaults {
705
  'more_post' => true,
706
  'more_post_ellipsis' => true,
707
  'more_post_text' => _x( 'Read more', 'link', 'strong-testimonials' ),
 
 
 
708
  'more_page' => false,
709
  'more_page_hook' => 'wpmtst_view_footer',
710
  'more_page_id' => 0,
705
  'more_post' => true,
706
  'more_post_ellipsis' => true,
707
  'more_post_text' => _x( 'Read more', 'link', 'strong-testimonials' ),
708
+ 'more_post_in_place' => false,
709
+ 'less_post' => false,
710
+ 'less_post_text' => __( 'Show less', 'strong-testimonials' ),
711
  'more_page' => false,
712
  'more_page_hook' => 'wpmtst_view_footer',
713
  'more_page_id' => 0,
admin/class-strong-testimonials-list-table.php CHANGED
@@ -8,9 +8,6 @@
8
  *
9
  * @since 3.1.0
10
  * @access private
11
- *
12
- * @package
13
- * @subpackage
14
  */
15
 
16
  if ( !class_exists( 'Strong_Testimonials_List_Table' ) ) :
8
  *
9
  * @since 3.1.0
10
  * @access private
 
 
 
11
  */
12
 
13
  if ( !class_exists( 'Strong_Testimonials_List_Table' ) ) :
admin/class-strong-testimonials-page-shortcodes.php CHANGED
@@ -31,8 +31,6 @@ class Strong_Testimonials_Page_Shortcodes {
31
 
32
  <h1><?php _e( 'Shortcodes', 'strong-testimonials' ); ?></h1>
33
 
34
- <p><?php printf( wp_kses( __( 'Open a <a href="%s" target="_blank">support ticket</a> if you need help.', 'strong-testimonials' ), $tags ), wpmtst_support_url() ); ?></p>
35
-
36
  <h2><?php _e( 'Testimonial Views', 'strong-testimonials' ); ?></h2>
37
 
38
  <p>
31
 
32
  <h1><?php _e( 'Shortcodes', 'strong-testimonials' ); ?></h1>
33
 
 
 
34
  <h2><?php _e( 'Testimonial Views', 'strong-testimonials' ); ?></h2>
35
 
36
  <p>
admin/class-walker-strong-category-checklist.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist class
4
  *
5
- * @package Strong_Testimonials
6
  * @since 2.2.0
7
  */
8
 
2
  /**
3
  * Taxonomy API: Walker_Strong_Category_Checklist class
4
  *
 
5
  * @since 2.2.0
6
  */
7
 
admin/class-walker-strong-form-category-checklist.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Taxonomy API: Walker_Strong_Form_Category_Checklist class
4
  *
5
- * @package Strong_Testimonials
6
  * @since 2.2.0
7
  */
8
 
2
  /**
3
  * Taxonomy API: Walker_Strong_Form_Category_Checklist class
4
  *
 
5
  * @since 2.2.0
6
  */
7
 
admin/css/views.css CHANGED
@@ -251,14 +251,11 @@ td.column-name strong {
251
  td.rowspan {
252
  border-left: 1px solid #DDD; }
253
 
254
- .highlight-on {
255
- background: rgba(0, 164, 243, 0.05);
256
- border: 1px solid rgba(0, 164, 243, 0.1);
257
- padding: 0 0.5em; }
258
-
259
  .subgroup {
260
- border: 1px solid #DDD;
261
- padding: 0 0.5em; }
 
 
262
 
263
  .subgroup-heading {
264
  font-weight: 600; }
251
  td.rowspan {
252
  border-left: 1px solid #DDD; }
253
 
 
 
 
 
 
254
  .subgroup {
255
+ background: #f8f8f8;
256
+ border: 1px solid #f1f1f1;
257
+ padding: 0.25em 1em;
258
+ margin-right: 1em; }
259
 
260
  .subgroup-heading {
261
  font-weight: 600; }
admin/css/views.css.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "mappings": "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",
4
- "sources": ["../scss/views.scss","../scss/_partials/_structure.scss","../scss/_partials/_view-info.scss","../scss/_partials/_category-filter.scss","../scss/_partials/_checkbox-icons.scss","../scss/_partials/_misc.scss","../scss/_partials/_screenshots.scss","../scss/_partials/_inputs.scss","../scss/_partials/_elements.scss","../scss/_partials/_form-table.scss","../scss/_partials/_category-checkboxes.scss","../scss/_partials/_list-radio-buttons.scss","../scss/_partials/_template.scss","../scss/_partials/_layout.scss","../scss/_partials/_layout-examples.scss","../scss/_partials/_layout-example-columns.scss","../scss/_partials/_layout-example-grid.scss","../scss/_partials/_layout-example-masonry.scss","../scss/_partials/_background.scss","../scss/_partials/_custom-fields.scss","../scss/_partials/_help-tab.scss","../scss/_partials/_sticky-views.scss"],
5
- "names": [],
6
- "file": "views.css"
7
- }
 
 
 
 
 
 
 
admin/custom-fields.php CHANGED
@@ -156,8 +156,8 @@ function wpmtst_settings_custom_fields( $form_id = 1 ) {
156
  $fields = $forms[$form_id]['fields'];
157
  ?>
158
  <div class="wrap wpmtst">
159
- <h1><?php _e( 'Fields', 'strong-testimonials' ); ?></h1>
160
-
161
  <?php do_action( 'wpmtst_fields_editor_before_fields_intro' ); ?>
162
 
163
  <div id="left-col">
156
  $fields = $forms[$form_id]['fields'];
157
  ?>
158
  <div class="wrap wpmtst">
159
+ <h1 class="wp-heading-inline"><?php _e( 'Fields', 'strong-testimonials' ); ?></h1>
160
+ <hr class="wp-header-end">
161
  <?php do_action( 'wpmtst_fields_editor_before_fields_intro' ); ?>
162
 
163
  <div id="left-col">
admin/edd/EDD_SL_Plugin_Updater.php DELETED
@@ -1,500 +0,0 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
- /**
7
- * Allows plugins to use their own update API.
8
- *
9
- * @author Easy Digital Downloads
10
- * @version 1.6.16
11
- */
12
- class EDD_SL_Plugin_Updater {
13
-
14
- private $api_url = '';
15
- private $api_data = array();
16
- private $name = '';
17
- private $slug = '';
18
- private $version = '';
19
- private $wp_override = false;
20
- private $cache_key = '';
21
-
22
- /**
23
- * Class constructor.
24
- *
25
- * @uses plugin_basename()
26
- * @uses hook()
27
- *
28
- * @param string $_api_url The URL pointing to the custom API endpoint.
29
- * @param string $_plugin_file Path to the plugin file.
30
- * @param array $_api_data Optional data to send with API calls.
31
- */
32
- public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
33
-
34
- global $edd_plugin_data;
35
-
36
- $this->api_url = trailingslashit( $_api_url );
37
- $this->api_data = $_api_data;
38
- $this->name = plugin_basename( $_plugin_file );
39
- $this->slug = basename( $_plugin_file, '.php' );
40
- $this->version = $_api_data['version'];
41
- $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false;
42
- $this->beta = ! empty( $this->api_data['beta'] ) ? true : false;
43
- $this->cache_key = 'edd_sl_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
44
-
45
- $edd_plugin_data[ $this->slug ] = $this->api_data;
46
-
47
- /**
48
- * Fires after the $edd_plugin_data is setup.
49
- *
50
- * @since x.x.x
51
- *
52
- * @param array $edd_plugin_data Array of EDD SL plugin data.
53
- */
54
- do_action( 'post_edd_sl_plugin_updater_setup', $edd_plugin_data );
55
-
56
- // Set up hooks.
57
- $this->init();
58
-
59
- }
60
-
61
- /**
62
- * Set up WordPress filters to hook into WP's update process.
63
- *
64
- * @uses add_filter()
65
- *
66
- * @return void
67
- */
68
- public function init() {
69
-
70
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
71
- add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
72
- remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 );
73
- add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 );
74
- add_action( 'admin_init', array( $this, 'show_changelog' ) );
75
-
76
- }
77
-
78
- /**
79
- * Check for Updates at the defined API endpoint and modify the update array.
80
- *
81
- * This function dives into the update API just when WordPress creates its update array,
82
- * then adds a custom API call and injects the custom plugin data retrieved from the API.
83
- * It is reassembled from parts of the native WordPress plugin update code.
84
- * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
85
- *
86
- * @uses api_request()
87
- *
88
- * @param array $_transient_data Update array build by WordPress.
89
- * @return array Modified update array with custom plugin data.
90
- */
91
- public function check_update( $_transient_data ) {
92
-
93
- global $pagenow;
94
-
95
- if ( ! is_object( $_transient_data ) ) {
96
- $_transient_data = new stdClass;
97
- }
98
-
99
- if ( 'plugins.php' == $pagenow && is_multisite() ) {
100
- return $_transient_data;
101
- }
102
-
103
- if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) {
104
- return $_transient_data;
105
- }
106
-
107
- $version_info = $this->get_cached_version_info();
108
-
109
- if ( false === $version_info ) {
110
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
111
-
112
- $this->set_version_info_cache( $version_info );
113
-
114
- }
115
-
116
- if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
117
-
118
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
119
-
120
- $_transient_data->response[ $this->name ] = $version_info;
121
-
122
- }
123
-
124
- $_transient_data->last_checked = time();
125
- $_transient_data->checked[ $this->name ] = $this->version;
126
-
127
- }
128
-
129
- return $_transient_data;
130
- }
131
-
132
- /**
133
- * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise!
134
- *
135
- * @param string $file
136
- * @param array $plugin
137
- */
138
- public function show_update_notification( $file, $plugin ) {
139
-
140
- if ( is_network_admin() ) {
141
- return;
142
- }
143
-
144
- if( ! current_user_can( 'update_plugins' ) ) {
145
- return;
146
- }
147
-
148
- if( ! is_multisite() ) {
149
- return;
150
- }
151
-
152
- if ( $this->name != $file ) {
153
- return;
154
- }
155
-
156
- // Remove our filter on the site transient
157
- remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 );
158
-
159
- $update_cache = get_site_transient( 'update_plugins' );
160
-
161
- $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass();
162
-
163
- if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) {
164
-
165
- $version_info = $this->get_cached_version_info();
166
-
167
- if ( false === $version_info ) {
168
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) );
169
-
170
- $this->set_version_info_cache( $version_info );
171
- }
172
-
173
- if ( ! is_object( $version_info ) ) {
174
- return;
175
- }
176
-
177
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
178
-
179
- $update_cache->response[ $this->name ] = $version_info;
180
-
181
- }
182
-
183
- $update_cache->last_checked = time();
184
- $update_cache->checked[ $this->name ] = $this->version;
185
-
186
- set_site_transient( 'update_plugins', $update_cache );
187
-
188
- } else {
189
-
190
- $version_info = $update_cache->response[ $this->name ];
191
-
192
- }
193
-
194
- // Restore our filter
195
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
196
-
197
- if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) {
198
-
199
- // build a plugin list row, with update notification
200
- $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
201
- # <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
202
- echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
203
- echo '<td colspan="3" class="plugin-update colspanchange">';
204
- echo '<div class="update-message notice inline notice-warning notice-alt">';
205
-
206
- $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' );
207
-
208
- if ( empty( $version_info->download_link ) ) {
209
- printf(
210
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ),
211
- esc_html( $version_info->name ),
212
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
213
- esc_html( $version_info->new_version ),
214
- '</a>'
215
- );
216
- } else {
217
- printf(
218
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ),
219
- esc_html( $version_info->name ),
220
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
221
- esc_html( $version_info->new_version ),
222
- '</a>',
223
- '<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
224
- '</a>'
225
- );
226
- }
227
-
228
- do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
229
-
230
- echo '</div></td></tr>';
231
- }
232
- }
233
-
234
- /**
235
- * Updates information on the "View version x.x details" page with custom data.
236
- *
237
- * @uses api_request()
238
- *
239
- * @param mixed $_data
240
- * @param string $_action
241
- * @param object $_args
242
- * @return object $_data
243
- */
244
- public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
245
-
246
- if ( $_action != 'plugin_information' ) {
247
-
248
- return $_data;
249
-
250
- }
251
-
252
- if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) {
253
-
254
- return $_data;
255
-
256
- }
257
-
258
- $to_send = array(
259
- 'slug' => $this->slug,
260
- 'is_ssl' => is_ssl(),
261
- 'fields' => array(
262
- 'banners' => array(),
263
- 'reviews' => false
264
- )
265
- );
266
-
267
- $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) );
268
-
269
- // Get the transient where we store the api request for this plugin for 24 hours
270
- $edd_api_request_transient = $this->get_cached_version_info( $cache_key );
271
-
272
- //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now.
273
- if ( empty( $edd_api_request_transient ) ) {
274
-
275
- $api_response = $this->api_request( 'plugin_information', $to_send );
276
-
277
- // Expires in 3 hours
278
- $this->set_version_info_cache( $api_response, $cache_key );
279
-
280
- if ( false !== $api_response ) {
281
- $_data = $api_response;
282
- }
283
-
284
- } else {
285
- $_data = $edd_api_request_transient;
286
- }
287
-
288
- // Convert sections into an associative array, since we're getting an object, but Core expects an array.
289
- if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
290
- $new_sections = array();
291
- foreach ( $_data->sections as $key => $value ) {
292
- $new_sections[ $key ] = $value;
293
- }
294
-
295
- $_data->sections = $new_sections;
296
- }
297
-
298
- // Convert banners into an associative array, since we're getting an object, but Core expects an array.
299
- if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
300
- $new_banners = array();
301
- foreach ( $_data->banners as $key => $value ) {
302
- $new_banners[ $key ] = $value;
303
- }
304
-
305
- $_data->banners = $new_banners;
306
- }
307
-
308
- return $_data;
309
- }
310
-
311
- /**
312
- * Disable SSL verification in order to prevent download update failures
313
- *
314
- * @param array $args
315
- * @param string $url
316
- * @return object $array
317
- */
318
- public function http_request_args( $args, $url ) {
319
-
320
- $verify_ssl = $this->verify_ssl();
321
- if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
322
- $args['sslverify'] = $verify_ssl;
323
- }
324
- return $args;
325
-
326
- }
327
-
328
- /**
329
- * Calls the API and, if successfull, returns the object delivered by the API.
330
- *
331
- * @uses get_bloginfo()
332
- * @uses wp_remote_post()
333
- * @uses is_wp_error()
334
- *
335
- * @param string $_action The requested action.
336
- * @param array $_data Parameters for the API action.
337
- * @return false|object
338
- */
339
- private function api_request( $_action, $_data ) {
340
-
341
- global $wp_version;
342
-
343
- $data = array_merge( $this->api_data, $_data );
344
-
345
- if ( $data['slug'] != $this->slug ) {
346
- return;
347
- }
348
-
349
- if( $this->api_url == trailingslashit (home_url() ) ) {
350
- return false; // Don't allow a plugin to ping itself
351
- }
352
-
353
- $api_params = array(
354
- 'edd_action' => 'get_version',
355
- 'license' => ! empty( $data['license'] ) ? $data['license'] : '',
356
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
357
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
358
- 'version' => isset( $data['version'] ) ? $data['version'] : false,
359
- 'slug' => $data['slug'],
360
- 'author' => $data['author'],
361
- 'url' => home_url(),
362
- 'beta' => ! empty( $data['beta'] ),
363
- );
364
-
365
- $verify_ssl = $this->verify_ssl();
366
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
367
-
368
- if ( ! is_wp_error( $request ) ) {
369
- $request = json_decode( wp_remote_retrieve_body( $request ) );
370
- }
371
-
372
- if ( $request && isset( $request->sections ) ) {
373
- $request->sections = maybe_unserialize( $request->sections );
374
- } else {
375
- $request = false;
376
- }
377
-
378
- if ( $request && isset( $request->banners ) ) {
379
- $request->banners = maybe_unserialize( $request->banners );
380
- }
381
-
382
- if( ! empty( $request->sections ) ) {
383
- foreach( $request->sections as $key => $section ) {
384
- $request->$key = (array) $section;
385
- }
386
- }
387
-
388
- return $request;
389
- }
390
-
391
- public function show_changelog() {
392
-
393
- global $edd_plugin_data;
394
-
395
- if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) {
396
- return;
397
- }
398
-
399
- if( empty( $_REQUEST['plugin'] ) ) {
400
- return;
401
- }
402
-
403
- if( empty( $_REQUEST['slug'] ) ) {
404
- return;
405
- }
406
-
407
- if( ! current_user_can( 'update_plugins' ) ) {
408
- wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
409
- }
410
-
411
- $data = $edd_plugin_data[ $_REQUEST['slug'] ];
412
- $beta = ! empty( $data['beta'] ) ? true : false;
413
- $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' );
414
- $version_info = $this->get_cached_version_info( $cache_key );
415
-
416
- if( false === $version_info ) {
417
-
418
- $api_params = array(
419
- 'edd_action' => 'get_version',
420
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
421
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
422
- 'slug' => $_REQUEST['slug'],
423
- 'author' => $data['author'],
424
- 'url' => home_url(),
425
- 'beta' => ! empty( $data['beta'] )
426
- );
427
-
428
- $verify_ssl = $this->verify_ssl();
429
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) );
430
-
431
- if ( ! is_wp_error( $request ) ) {
432
- $version_info = json_decode( wp_remote_retrieve_body( $request ) );
433
- }
434
-
435
-
436
- if ( ! empty( $version_info ) && isset( $version_info->sections ) ) {
437
- $version_info->sections = maybe_unserialize( $version_info->sections );
438
- } else {
439
- $version_info = false;
440
- }
441
-
442
- if( ! empty( $version_info ) ) {
443
- foreach( $version_info->sections as $key => $section ) {
444
- $version_info->$key = (array) $section;
445
- }
446
- }
447
-
448
- $this->set_version_info_cache( $version_info, $cache_key );
449
-
450
- }
451
-
452
- if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) {
453
- echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
454
- }
455
-
456
- exit;
457
- }
458
-
459
- public function get_cached_version_info( $cache_key = '' ) {
460
-
461
- if( empty( $cache_key ) ) {
462
- $cache_key = $this->cache_key;
463
- }
464
-
465
- $cache = get_option( $cache_key );
466
-
467
- if( empty( $cache['timeout'] ) || time() > $cache['timeout'] ) {
468
- return false; // Cache is expired
469
- }
470
-
471
- return json_decode( $cache['value'] );
472
-
473
- }
474
-
475
- public function set_version_info_cache( $value = '', $cache_key = '' ) {
476
-
477
- if( empty( $cache_key ) ) {
478
- $cache_key = $this->cache_key;
479
- }
480
-
481
- $data = array(
482
- 'timeout' => strtotime( '+3 hours', time() ),
483
- 'value' => json_encode( $value )
484
- );
485
-
486
- update_option( $cache_key, $data, 'no' );
487
-
488
- }
489
-
490
- /**
491
- * Returns if the SSL of the store should be verified.
492
- *
493
- * @since 1.6.13
494
- * @return bool
495
- */
496
- private function verify_ssl() {
497
- return (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true, $this );
498
- }
499
-
500
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/edd/Strong_Plugin_Updater.php DELETED
@@ -1,234 +0,0 @@
1
- <?php
2
- // Exit if accessed directly
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
- /**
6
- * Class Strong_Plugin_Updater
7
- */
8
- class Strong_Plugin_Updater {
9
-
10
- public function __construct() {
11
-
12
- add_action( 'admin_init', array( $this, 'plugin_updater' ), 0 ); // Don't change this priority
13
-
14
- add_action( 'wp_ajax_wpmtst_activate_license', array( $this, 'activate_license' ) );
15
-
16
- add_action( 'wp_ajax_wpmtst_deactivate_license', array( $this, 'deactivate_license' ) );
17
-
18
- }
19
-
20
- function plugin_updater() {
21
-
22
- // retrieve our license key from the DB
23
- $addons = get_option( 'wpmtst_addons' );
24
- if ( !$addons ) return;
25
-
26
- foreach ( $addons as $addon => $addon_info ) {
27
-
28
- /**
29
- * Repair missing file name due to bug in license activation process.
30
- *
31
- * @since 2.21.2
32
- */
33
- if ( ! isset( $addon_info['file'] ) ) {
34
- $addon_info['file'] = "strong-testimonials-{$addon}/strong-testimonials-{$addon}.php";
35
- $addons[ $addon ] = $addon_info;
36
- update_option( 'wpmtst_addons', $addons );
37
- }
38
-
39
- $license_key = '';
40
- $version = '';
41
-
42
- if ( isset( $addon_info['license']['key'] ) ) {
43
- $license_key = trim( $addon_info['license']['key'] );
44
- }
45
-
46
- if ( isset( $addon_info['version'] ) ) {
47
- $version = $addon_info['version'];
48
- }
49
-
50
- if ( ! $license_key || ! $version ) {
51
- return;
52
- }
53
-
54
- // setup the updater
55
- $args = array(
56
- 'version' => $version, // current installed version number
57
- 'license' => $license_key, // license key
58
- 'item_name' => $addon_info['name'], // name of this plugin
59
- 'author' => 'Chris Dillon', // author of this plugin
60
- 'url' => home_url()
61
- );
62
- $edd_updater = new EDD_SL_Plugin_Updater( STRONGPLUGINS_STORE_URL, $addon_info['file'], $args );
63
- }
64
-
65
- }
66
-
67
- /**
68
- * Activate a license key.
69
- */
70
- function activate_license() {
71
-
72
- if ( !check_ajax_referer( 'wpmtst-admin', 'security', false ) ) {
73
- wp_send_json_error();
74
- }
75
-
76
- if ( isset( $_GET['action'] ) && 'wpmtst_activate_license' == $_GET['action'] ) {
77
-
78
- $plugin = $_GET['plugin'];
79
-
80
- // retrieve the license from the database
81
- $addons = get_option( 'wpmtst_addons' );
82
- $addon = $addons[ $plugin ];
83
- $license = trim( $addon['license']['key'] );
84
-
85
- // data to send in our API request
86
- $api_params = array(
87
- 'edd_action' => 'activate_license',
88
- 'license' => $license,
89
- 'item_name' => $addon['name'], // the name of our product in EDD
90
- 'url' => home_url()
91
- );
92
-
93
- $license_data = new stdClass();
94
- $license_data->license = '';
95
-
96
- // Call the custom API.
97
- $response = wp_remote_post( STRONGPLUGINS_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
98
-
99
- // make sure the response came back okay
100
- if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
101
-
102
- if ( is_wp_error( $response ) ) {
103
- $message = $response->get_error_message();
104
- } else {
105
- $message = __( 'An error occurred, please try again.' );
106
- }
107
-
108
- } else {
109
-
110
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
111
-
112
- if ( !isset( $license_data->success ) ) {
113
-
114
- $message = __( 'An error occurred, please contact support.' );
115
-
116
- } elseif ( false === $license_data->success ) {
117
-
118
- switch( $license_data->error ) {
119
-
120
- case 'expired' :
121
-
122
- $message = sprintf(
123
- __( 'Your license key expired on %s.' ),
124
- date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires, current_time( 'timestamp' ) ) )
125
- );
126
- break;
127
-
128
- case 'revoked' :
129
-
130
- $message = __( 'Your license key has been disabled.' );
131
- break;
132
-
133
- case 'missing' :
134
-
135
- $message = __( 'Invalid license.' );
136
- break;
137
-
138
- case 'invalid' :
139
- case 'site_inactive' :
140
-
141
- $message = __( 'Your license is not active for this URL.' );
142
- break;
143
-
144
- case 'item_name_mismatch' :
145
-
146
- $message = sprintf( __( 'This appears to be an invalid license key for %s.' ), $addon['name'] );
147
- break;
148
-
149
- case 'no_activations_left':
150
-
151
- $message = __( 'Your license key has reached its activation limit.' );
152
- break;
153
-
154
- default :
155
-
156
- $message = __( 'An error occurred, please try again.' );
157
- break;
158
- }
159
-
160
- }
161
-
162
- }
163
-
164
- // Check if anything passed on a message constituting a failure
165
- if ( !empty( $message ) ) {
166
- wp_send_json_error( $message );
167
- }
168
-
169
- // $license_data->license will be either "valid" or "invalid"
170
- $addon['license']['status'] = $license_data->license;
171
- $addons[ $plugin ] = $addon;
172
- update_option( 'wpmtst_addons', $addons );
173
- wp_send_json_success( $license_data->license );
174
- }
175
- }
176
-
177
- /**
178
- * Deactivate a license key. This will also decrease the site count.
179
- */
180
- function deactivate_license() {
181
-
182
- if ( ! check_ajax_referer( 'wpmtst-admin', 'security', false ) ) {
183
- wp_send_json_error();
184
- }
185
-
186
- if ( isset( $_GET['action'] ) && 'wpmtst_deactivate_license' == $_GET['action'] ) {
187
-
188
- $plugin = $_GET['plugin'];
189
-
190
- // retrieve the license from the database
191
- $addons = get_option( 'wpmtst_addons' );
192
- $addon = $addons[ $plugin ];
193
- $license = trim( $addon['license']['key'] );
194
-
195
- // data to send in our API request
196
- $api_params = array(
197
- 'edd_action' => 'deactivate_license',
198
- 'license' => $license,
199
- 'item_name' => $addon['name'], // the name of our product in EDD
200
- 'url' => home_url()
201
- );
202
-
203
- // Call the custom API.
204
- $response = wp_remote_post( STRONGPLUGINS_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
205
-
206
- // make sure the response came back okay
207
- if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
208
-
209
- if ( is_wp_error( $response ) ) {
210
- $message = $response->get_error_message();
211
- } else {
212
- $message = __( 'An error occurred, please try again.' );
213
- }
214
-
215
- wp_send_json_error( $message );
216
- }
217
-
218
- // decode the license data
219
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
220
-
221
- // $license_data->license will be either "deactivated" or "failed"
222
- if( $license_data->license == 'deactivated' ) {
223
- unset( $addons[ $plugin ]['license']['status'] );
224
- update_option( 'wpmtst_addons', $addons );
225
- wp_send_json_success( $license_data->license );
226
- }
227
-
228
- wp_send_json_error( $license_data->license );
229
- }
230
- }
231
-
232
- }
233
-
234
- new Strong_Plugin_Updater();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/js/views.js CHANGED
@@ -228,6 +228,7 @@ jQuery(document).ready(function ($) {
228
  * TODO Use a technique similar to if-then for adding/removing classes
229
  */
230
 
 
231
  var viewContent = $('#view-content');
232
  var viewContentChange = function () {
233
  var thisValue = viewContent.val();
@@ -241,6 +242,38 @@ jQuery(document).ready(function ($) {
241
  };
242
  viewContentChange();
243
  viewContent.on('change', viewContentChange);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
  /**
246
  * Plugin: Show/Hide parts based on current Mode
228
  * TODO Use a technique similar to if-then for adding/removing classes
229
  */
230
 
231
+ /*
232
  var viewContent = $('#view-content');
233
  var viewContentChange = function () {
234
  var thisValue = viewContent.val();
242
  };
243
  viewContentChange();
244
  viewContent.on('change', viewContentChange);
245
+ */
246
+
247
+ /**
248
+ * Update option for [adding read-more to excerpts] based on setting
249
+ * for [read-more type] (link to post or expand in place).
250
+ */
251
+ var viewHybrid = $('#view-more_post_in_place');
252
+
253
+ var viewHybridChange = function () {
254
+
255
+ var thisValue = viewHybrid.val();
256
+
257
+ // var viewMoreFullPost = $('#view-more_full_post');
258
+ // if ('1' === thisValue) {
259
+ // viewMoreFullPost.prop('disabled', true).find('option[value=\'1\']').prop('selected', true);
260
+ // } else {
261
+ // viewMoreFullPost.removeProp('disabled');
262
+ // }
263
+
264
+ var viewDefaultMore = $('#view-use_default_more');
265
+ if ('1' === thisValue) {
266
+ viewDefaultMore.prop('disabled', true).find('option[value=\'0\']').prop('selected', true);
267
+ } else {
268
+ viewDefaultMore.removeProp('disabled');
269
+ }
270
+ viewDefaultMore.change();
271
+
272
+ };
273
+
274
+ viewHybridChange();
275
+
276
+ viewHybrid.on('change', viewHybridChange);
277
 
278
  /**
279
  * Plugin: Show/Hide parts based on current Mode
admin/partials/views/option-content.php CHANGED
@@ -8,7 +8,6 @@
8
 
9
  <!-- Content type -->
10
  <div id="option-content" class="row">
11
-
12
  <div class="row-inner">
13
 
14
  <!-- select -->
@@ -27,13 +26,11 @@
27
  </div>
28
 
29
  <!-- info & screenshot -->
30
-
31
  <div class="inline then fast then_truncated then_not_entire then_not_excerpt" style="display: none;">
32
  <p class="description">
33
  <?php _e( 'This will strip tags like &lt;em&gt; and &lt;strong&gt;.', 'strong-testimonials' ); ?>
34
  </p>
35
  </div>
36
-
37
  <div class="inline then fast then_not_truncated then_not_entire then_excerpt" style="display: none;">
38
  <p class="description">
39
  <?php printf( __( 'To create manual excerpts, you may need to enable them in the post editor like in this <a href="%s" class="thickbox">screenshot</a>.', 'strong-testimonials' ), esc_url( '#TB_inline?width=&height=210&inlineId=screenshot-screen-options' ) ); ?>
@@ -43,14 +40,13 @@
43
  </p>
44
  </div>
45
 
46
- </div><!-- .row-inner -->
47
-
48
- </div><!-- #option-content -->
49
 
50
  <!-- Excerpt length -->
51
  <div id="option-content-length" class="row then then_not_entire then_excerpt then_truncated" style="display: none;">
52
 
53
- <div class="row-inner highlight2">
54
 
55
  <!-- info -->
56
  <div class="inline tight then then_excerpt then_not_truncated" style="display: none;">
@@ -87,7 +83,7 @@
87
  </label>
88
  </div>
89
 
90
- </div><!-- .row-inner -->
91
 
92
  </div><!-- #option-content-length -->
93
 
@@ -96,28 +92,77 @@
96
 
97
  <div class="row-inner subgroup">
98
 
99
- <div class="subgroup-heading">
100
- <?php _e( '"Read more" link', 'strong-testimonials' ); ?>
101
- </div>
102
-
103
- <!-- default or custom -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  <div class="row-inner">
105
-
106
- <div class="inline tight">
 
 
107
  <label>
108
- <select id="view-use_default_more" class="if selectgroup min-width-1" name="view[data][use_default_more]">
 
 
109
  <option value="1" <?php selected( $view['use_default_more'] ); ?>>
110
- <?php _ex( 'default link text', 'display setting', 'strong-testimonials' ); ?>
111
  </option>
112
  <option value="0" <?php selected( ! $view['use_default_more'] ); ?>>
113
- <?php _ex( 'custom link text (recommended)', 'display setting', 'strong-testimonials' ); ?>
114
  </option>
115
  </select>
116
  </label>
117
- </div>
118
-
119
- <div class="inline tight last then fast then_use_default_more then_0 then_not_1" style="display: none;">
120
-
 
 
121
  <span id="option-link-text" class="inline-span">
122
  <label for="view-more_post_text">
123
  <input type="text" id="view-more_post_text" name="view[data][more_post_text]"
@@ -125,38 +170,28 @@
125
  placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
126
  </label>
127
  </span>
128
-
129
- <span id="option-ellipsis">
130
-
131
- <input type="checkbox" id="view-more_post_ellipsis" class="if toggle checkbox"
132
- name="view[data][more_post_ellipsis]" value="1"
133
- <?php checked( isset( $view['more_post_ellipsis'] ) && $view['more_post_ellipsis'] );?>>
134
-
135
- <label for="view-more_post_ellipsis">
136
-
137
- <?php _e( 'ellipsis', 'strong-testimonials' ); ?>
138
-
139
- <div class="inline tight">
140
- <div class="then then_excerpt then_not_truncated" style="display: none;">
141
- <?php _e( '(automatic excerpt only)', 'strong-testimonials' ); ?>
142
- </div>
143
- </div>
144
-
145
  </label>
146
-
147
  </span>
148
-
149
- </div>
150
-
151
- <div class="inline tight then fast then_use_default_more then_1 then_not_0" style="display: none;">
152
- <p class="description short"><?php _e( 'If you only see [&hellip;] without a link then your theme<br> does not provide this. Use the custom link text instead.', 'strong-testimonials' ); ?></p>
153
- </div>
154
-
155
- </div><!-- .row-inner -->
156
 
157
  <!-- automatic or both -->
158
  <div class="row-inner then then_excerpt then_not_truncated" style="display: none;">
159
-
160
  <div class="inline">
161
  <label>
162
  <select id="view-more_full_post" class="if selectgroup" name="view[data][more_full_post]">
@@ -169,12 +204,9 @@
169
  </select>
170
  </label>
171
  </div>
172
-
173
- </div><!-- .row-inner -->
174
-
175
- </div><!-- .row-inner.subgroup -->
176
-
177
- </div><!-- #option-content-read-more -->
178
 
179
  <div class="row links then then_not_entire then_truncated then_excerpt" style="display: none;">
180
  <p class="description tall solo">
8
 
9
  <!-- Content type -->
10
  <div id="option-content" class="row">
 
11
  <div class="row-inner">
12
 
13
  <!-- select -->
26
  </div>
27
 
28
  <!-- info & screenshot -->
 
29
  <div class="inline then fast then_truncated then_not_entire then_not_excerpt" style="display: none;">
30
  <p class="description">
31
  <?php _e( 'This will strip tags like &lt;em&gt; and &lt;strong&gt;.', 'strong-testimonials' ); ?>
32
  </p>
33
  </div>
 
34
  <div class="inline then fast then_not_truncated then_not_entire then_excerpt" style="display: none;">
35
  <p class="description">
36
  <?php printf( __( 'To create manual excerpts, you may need to enable them in the post editor like in this <a href="%s" class="thickbox">screenshot</a>.', 'strong-testimonials' ), esc_url( '#TB_inline?width=&height=210&inlineId=screenshot-screen-options' ) ); ?>
40
  </p>
41
  </div>
42
 
43
+ </div>
44
+ </div>
 
45
 
46
  <!-- Excerpt length -->
47
  <div id="option-content-length" class="row then then_not_entire then_excerpt then_truncated" style="display: none;">
48
 
49
+ <div class="row-inner">
50
 
51
  <!-- info -->
52
  <div class="inline tight then then_excerpt then_not_truncated" style="display: none;">
83
  </label>
84
  </div>
85
 
86
+ </div>
87
 
88
  </div><!-- #option-content-length -->
89
 
92
 
93
  <div class="row-inner subgroup">
94
 
95
+ <!-- action: full post or in place -->
96
+ <div class="row-inner">
97
+ <div class="inline">
98
+ <?php _e( 'Add a <strong>Read more</strong> link to', 'strong-testimonials' ); ?>
99
+ </div>
100
+ <div class="inline tight">
101
+ <label>
102
+ <select id="view-more_post_in_place"
103
+ class="if selectgroup"
104
+ name="view[data][more_post_in_place]">
105
+ <option value="0" <?php selected( ! $view['more_post_in_place'] ); ?>>
106
+ <?php // TODO Get label from Properties ?>
107
+ <?php _e( 'the full testimonial', 'strong-testimonials' ); ?>
108
+ </option>
109
+ <option value="1" <?php selected( $view['more_post_in_place'] ); ?>>
110
+ <?php _e( 'expand content in place', 'strong-testimonials' ); ?>
111
+ </option>
112
+ </select>
113
+ </label>
114
+ </div>
115
+ </div>
116
+
117
+ <!-- ellipsis -->
118
+ <div class="row-inner">
119
+ <div class="then then_use_default_more then_0 then_not_1" style="display: none;">
120
+ <div class="inline">
121
+ <label>
122
+ <select id="view-more_post_ellipsis"
123
+ class="if selectgroup"
124
+ name="view[data][more_post_ellipsis]">
125
+ <option value="1" <?php selected( $view['more_post_ellipsis'] ); ?>>
126
+ <?php _e( 'with an ellipsis', 'strong-testimonials' ); ?>
127
+ </option>
128
+ <option value="0" <?php selected( ! $view['more_post_ellipsis'] ); ?>>
129
+ <?php _e( 'without an ellipsis', 'strong-testimonials' ); ?>
130
+ </option>
131
+ </select>
132
+ </label>
133
+ </div>
134
+ <div class="inline then then_excerpt then_not_truncated" style="display: none;">
135
+ <p class="description">
136
+ <?php _e( 'Automatic excerpt only.', 'strong-testimonials' ); ?>
137
+ </p>
138
+ </div>
139
+ </div>
140
+ </div>
141
+
142
+ <!-- default or custom -->
143
  <div class="row-inner">
144
+ <div class="inline tight then fast then_more_post_in_place then_1 then_not_0" style="display: none;">
145
+ <?php _e( 'with link text to read more', 'strong-testimonials' ); ?>
146
+ </div>
147
+ <div class="inline then fast then_more_post_in_place then_0 then_not_1" style="display: none;">
148
  <label>
149
+ <select id="view-use_default_more"
150
+ class="if selectgroup min-width-1"
151
+ name="view[data][use_default_more]">
152
  <option value="1" <?php selected( $view['use_default_more'] ); ?>>
153
+ <?php _ex( 'with default link text', 'display setting', 'strong-testimonials' ); ?>
154
  </option>
155
  <option value="0" <?php selected( ! $view['use_default_more'] ); ?>>
156
+ <?php _ex( 'with custom link text', 'display setting', 'strong-testimonials' ); ?>
157
  </option>
158
  </select>
159
  </label>
160
+ </div>
161
+ <div class="inline then fast then_use_default_more then_1 then_not_0" style="display: none;">
162
+ <p class="description"><?php _e( 'If you only see [&hellip;] without a link then use the custom link text instead.', 'strong-testimonials' ); ?></p>
163
+ </div>
164
+ <!-- read more -->
165
+ <div class="inline then fast then_use_default_more then_0 then_not_1" style="display: none;">
166
  <span id="option-link-text" class="inline-span">
167
  <label for="view-more_post_text">
168
  <input type="text" id="view-more_post_text" name="view[data][more_post_text]"
170
  placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
171
  </label>
172
  </span>
173
+ </div>
174
+ </div>
175
+
176
+ <!-- read less -->
177
+ <div class="row-inner then fast then_more_post_in_place then_1 then_not_0" style="display: none;">
178
+ <div class="inline tight">
179
+ <?php _e( 'and link text to read less', 'strong-testimonials' ); ?>
180
+ </div>
181
+ <div class="inline tight">
182
+ <span id="option-link-text-less" class="inline-span">
183
+ <label for="view-less_post_text">
184
+ <input type="text" id="view-less_post_text" name="view[data][less_post_text]"
185
+ value="<?php echo $view['less_post_text']; ?>" size="22"
186
+ placeholder="<?php _e( 'enter a phrase', 'strong-testimonials' ); ?>">
 
 
 
187
  </label>
 
188
  </span>
189
+ <p class="inline description"><?php _e( 'Leave blank to leave content expanded without a link.', 'strong-testimonials' ); ?></p>
190
+ </div>
191
+ </div>
 
 
 
 
 
192
 
193
  <!-- automatic or both -->
194
  <div class="row-inner then then_excerpt then_not_truncated" style="display: none;">
 
195
  <div class="inline">
196
  <label>
197
  <select id="view-more_full_post" class="if selectgroup" name="view[data][more_full_post]">
204
  </select>
205
  </label>
206
  </div>
207
+ </div>
208
+ </div>
209
+ </div>
 
 
 
210
 
211
  <div class="row links then then_not_entire then_truncated then_excerpt" style="display: none;">
212
  <p class="description tall solo">
admin/scss/_partials/_misc.scss CHANGED
@@ -16,16 +16,11 @@ td.rowspan {
16
  border-left: 1px solid #DDD;
17
  }
18
 
19
- // Highlight the manual excerpt creation option in Content group.
20
- .highlight-on {
21
- background: rgba($blue, 0.05);
22
- border: 1px solid rgba($blue, 0.1);
23
- padding: 0 0.5em;
24
- }
25
-
26
  .subgroup {
27
- border: 1px solid #DDD;
28
- padding: 0 0.5em;
 
 
29
  }
30
 
31
  .subgroup-heading {
16
  border-left: 1px solid #DDD;
17
  }
18
 
 
 
 
 
 
 
 
19
  .subgroup {
20
+ background: #f8f8f8;
21
+ border: 1px solid #f1f1f1;
22
+ padding: 0.25em 1em;
23
+ margin-right: 1em;
24
  }
25
 
26
  .subgroup-heading {
admin/settings/class-strong-testimonials-settings-compat.php CHANGED
@@ -245,8 +245,6 @@ class Strong_Testimonials_Settings_Compat {
245
 
246
  <h2><?php _e( 'Compatibility Settings', 'strong-testimonials' ); ?></h2>
247
 
248
- <p class="about"><?php printf( __( '<a href="%s" target="_blank">Start a support ticket</a> if you need help with these options.', 'strong-testimonials' ), wpmtst_support_url() ); ?></p>
249
-
250
  <?php
251
  }
252
 
245
 
246
  <h2><?php _e( 'Compatibility Settings', 'strong-testimonials' ); ?></h2>
247
 
 
 
248
  <?php
249
  }
250
 
admin/settings/partials/form.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Form Settings
4
  *
5
- * @package Strong_Testimonials
6
  * @since 1.13
7
  */
8
  $pages_list = wpmtst_get_pages();
2
  /**
3
  * Form Settings
4
  *
 
5
  * @since 1.13
6
  */
7
  $pages_list = wpmtst_get_pages();
admin/settings/partials/general.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * Settings
4
  *
5
- * @package Strong_Testimonials
6
  * @since 1.13
7
  */
8
 
2
  /**
3
  * Settings
4
  *
 
5
  * @since 1.13
6
  */
7
 
admin/views-validate.php CHANGED
@@ -90,65 +90,7 @@ function wpmtst_sanitize_view( $input ) {
90
  $data['excerpt_length'] = (int) sanitize_text_field( $input['excerpt_length'] );
91
  $data['use_default_length'] = sanitize_text_field( $input['use_default_length'] );
92
 
93
- // Read more --> post
94
- $data['more_full_post'] = $input['more_full_post'];
95
- if ( 'truncated' == $data['content'] || 'excerpt' == $data['content'] ) {
96
- $data['more_post'] = 1;
97
- } else {
98
- $data['more_post'] = 0;
99
- }
100
- $data['more_post_ellipsis'] = isset( $input['more_post_ellipsis'] ) ? 1 : 0;
101
- $data['more_post_text'] = sanitize_text_field( $input['more_post_text'] );
102
- $data['use_default_more'] = $input['use_default_more'];
103
-
104
- // Read more --> page
105
- if ( isset( $input['more_page'] ) && $input['more_page'] ) {
106
-
107
- // Check the "ID or slug" field first
108
- if ( $input['more_page_id2'] ) {
109
-
110
- // is post ID?
111
- $id = sanitize_text_field( $input['more_page_id2'] );
112
- if ( is_numeric( $id ) ) {
113
- if ( ! get_posts( array( 'p' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) ) ) {
114
- $id = null;
115
- }
116
- } else {
117
- // is post slug?
118
- $target = get_posts( array( 'name' => $id, 'post_type' => array( 'page', 'post' ), 'post_status' => 'publish' ) );
119
- if ( $target ) {
120
- $id = $target[0]->ID;
121
- }
122
- }
123
-
124
- if ( $id ) {
125
- $data['more_page_id'] = $id;
126
- unset( $data['more_page_id2'] );
127
- }
128
-
129
- } else {
130
-
131
- if ( $input['more_page_id'] ) {
132
- if ( is_numeric( $input['more_page_id'] ) ) {
133
- $data['more_page_id'] = (int) sanitize_text_field( $input['more_page_id'] );
134
- } else {
135
- $data['more_page_id'] = sanitize_text_field( $input['more_page_id'] );
136
- }
137
- }
138
-
139
- }
140
-
141
- // Only enable more_page if a page was selected by either method.
142
- if ( isset( $data['more_page_id'] ) && $data['more_page_id'] ) {
143
- $data['more_page'] = 1;
144
- }
145
- }
146
- if ( ! $input['more_page_text'] ) {
147
- $data['more_page_text'] = $default_view['more_page_text'];
148
- } else {
149
- $data['more_page_text'] = sanitize_text_field( $input['more_page_text'] );
150
- }
151
- $data['more_page_hook'] = sanitize_text_field( $input['more_page_hook'] );
152
 
153
  // Thumbnail
154
  $data['thumbnail'] = isset( $input['thumbnail'] ) ? 1 : 0;
@@ -228,6 +170,95 @@ function wpmtst_sanitize_view( $input ) {
228
  return $data;
229
  }
230
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  /**
232
  * Single testimonial
233
  *
90
  $data['excerpt_length'] = (int) sanitize_text_field( $input['excerpt_length'] );
91
  $data['use_default_length'] = sanitize_text_field( $input['use_default_length'] );
92
 
93
+ $data = wpmtst_sanitize_view_readmore( $data, $input, $default_view );