Version Description
Download this release
Release Info
Developer | machothemes |
Plugin | Strong Testimonials |
Version | 2.33 |
Comparing to | |
See all releases |
Code changes from version 2.32.4 to 2.33
- admin/about/about.php +0 -11
- admin/about/addons.php +2 -11
- admin/about/class-strong-testimonials-about.php +2 -16
- admin/about/how-to.php +0 -19
- admin/about/links.php +1 -8
- admin/admin.php +1 -1
- admin/class-strong-testimonials-defaults.php +3 -0
- admin/class-strong-testimonials-list-table.php +0 -3
- admin/class-strong-testimonials-page-shortcodes.php +0 -2
- admin/class-walker-strong-category-checklist.php +0 -1
- admin/class-walker-strong-form-category-checklist.php +0 -1
- admin/css/views.css +4 -7
- admin/css/views.css.map +0 -7
- admin/custom-fields.php +2 -2
- admin/edd/EDD_SL_Plugin_Updater.php +0 -500
- admin/edd/Strong_Plugin_Updater.php +0 -234
- admin/js/views.js +33 -0
- admin/partials/views/option-content.php +87 -55
- admin/scss/_partials/_misc.scss +4 -9
- admin/settings/class-strong-testimonials-settings-compat.php +0 -2
- admin/settings/partials/form.php +0 -1
- admin/settings/partials/general.php +0 -1
- admin/views-validate.php +90 -59
- admin/views.php +1 -2
- includes/class-strong-view-display.php +35 -0
- includes/class-strong-view-slideshow.php +2 -1
- includes/class-strong-view.php +165 -29
- includes/class-walker-strong-category-checklist-front.php +0 -1
- includes/filters.php +30 -1
- includes/functions-activation.php +0 -1
- includes/functions-content.php +106 -94
- includes/functions-image.php +0 -2
- includes/functions-template.php +28 -34
- includes/functions-views.php +0 -3
- includes/functions.php +1 -3
- includes/l10n-polylang.php +3 -0
- includes/l10n-wpml.php +6 -0
- includes/scripts.php +16 -1
- public/css/animate.min.css +11 -0
- public/css/custom.css +0 -5
- public/js/controller.js +13 -1
- public/js/controller.min.js +1 -1
- public/js/lib/form-validation/form-validation.js +0 -2
- public/js/lib/readmore/readmore.js +122 -0
- public/js/lib/readmore/readmore.min.js +1 -0
- public/js/lib/strongslider/jquery.strongslider.js +1 -0
- public/js/lib/strongslider/jquery.strongslider.min.js +1 -1
- readme.txt +13 -55
- strong-testimonials.php +22 -22
- templates-scss/_partials/_base.scss +12 -0
- templates/bold/content.css +8 -0
- templates/default/content.css +8 -0
- templates/modern/content.css +8 -0
- templates/simple/content.css +8 -0
- 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
|
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 |
-
•
|
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
|
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 |
•
|
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 |
•
|
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'] : '
|
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’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 |
-
|
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
|
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 |
-
|
261 |
-
|
|
|
|
|
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 <em> and <strong>.', '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
|
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
|
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
|
91 |
|
92 |
</div><!-- #option-content-length -->
|
93 |
|
@@ -96,28 +92,77 @@
|
|
96 |
|
97 |
<div class="row-inner subgroup">
|
98 |
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
<div class="row-inner">
|
105 |
-
|
106 |
-
|
|
|
|
|
107 |
<label>
|
108 |
-
<select id="view-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
|
114 |
</option>
|
115 |
</select>
|
116 |
</label>
|
117 |
-
|
118 |
-
|
119 |
-
|
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 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
<
|
140 |
-
|
141 |
-
|
142 |
-
</div>
|
143 |
-
</div>
|
144 |
-
|
145 |
</label>
|
146 |
-
|
147 |
</span>
|
148 |
-
|
149 |
-
|
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 […] 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 |
-
|
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 <em> and <strong>.', '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 […] 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 |
-
|
28 |
-
|
|
|
|
|
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 |
-
|
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 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|