Version Description
- 2022-04-18 =
- BugFix: The image wasn't displaying with {custom field name} setting.
- Enhancement: Code refactoring.
Download this release
Release Info
Developer | hiddenpearls |
Plugin | Related Posts Thumbnails Plugin for WordPress |
Version | 2.0.1 |
Comparing to | |
See all releases |
Code changes from version 2.0.0 to 2.0.1
- inc/rpt-deactivate-form.php +0 -256
- inc/rpt-settings.php +1 -0
- lib/wpb-sdk/includes/wpb-sdk-logger.php +395 -0
- lib/wpb-sdk/includes/wpb-sdk-track.php +60 -0
- lib/wpb-sdk/init.php +14 -0
- lib/wpb-sdk/views/wpb-sdk-deactivate-form.php +327 -0
- readme.txt +5 -1
- related-posts-thumbnails.php +80 -83
inc/rpt-deactivate-form.php
DELETED
@@ -1,256 +0,0 @@
|
|
1 |
-
<style>
|
2 |
-
.wp-rpt-hidden{
|
3 |
-
overflow: hidden;
|
4 |
-
}
|
5 |
-
.wp-rpt-popup-overlay .wp-rpt-internal-message{
|
6 |
-
margin: 3px 0 3px 22px;
|
7 |
-
display: none;
|
8 |
-
}
|
9 |
-
.wp-rpt-reason-input{
|
10 |
-
margin: 3px 0 3px 22px;
|
11 |
-
display: none;
|
12 |
-
}
|
13 |
-
.wp-rpt-reason-input input[type="text"]{
|
14 |
-
width: 100%;
|
15 |
-
display: block;
|
16 |
-
}
|
17 |
-
.wp-rpt-popup-overlay{
|
18 |
-
background: rgba(0,0,0, .8);
|
19 |
-
position: fixed;
|
20 |
-
top:0;
|
21 |
-
left: 0;
|
22 |
-
height: 100%;
|
23 |
-
width: 100%;
|
24 |
-
z-index: 1000;
|
25 |
-
overflow: auto;
|
26 |
-
visibility: hidden;
|
27 |
-
opacity: 0;
|
28 |
-
transition: opacity 0.3s ease-in-out:
|
29 |
-
}
|
30 |
-
.wp-rpt-popup-overlay.wp-rpt-active{
|
31 |
-
opacity: 1;
|
32 |
-
visibility: visible;
|
33 |
-
}
|
34 |
-
.wp-rpt-serveypanel{
|
35 |
-
width: 600px;
|
36 |
-
background: #fff;
|
37 |
-
margin: 65px auto 0;
|
38 |
-
}
|
39 |
-
.wp-rpt-popup-header{
|
40 |
-
background: #f1f1f1;
|
41 |
-
padding: 20px;
|
42 |
-
border-bottom: 1px solid #ccc;
|
43 |
-
}
|
44 |
-
.wp-rpt-popup-header h2{
|
45 |
-
margin: 0;
|
46 |
-
}
|
47 |
-
.wp-rpt-popup-body{
|
48 |
-
padding: 10px 20px;
|
49 |
-
}
|
50 |
-
.wp-rpt-popup-footer{
|
51 |
-
background: #f9f3f3;
|
52 |
-
padding: 10px 20px;
|
53 |
-
border-top: 1px solid #ccc;
|
54 |
-
}
|
55 |
-
.wp-rpt-popup-footer:after{
|
56 |
-
content:"";
|
57 |
-
display: table;
|
58 |
-
clear: both;
|
59 |
-
}
|
60 |
-
.action-btns{
|
61 |
-
float: right;
|
62 |
-
}
|
63 |
-
.wp-rpt-anonymous{
|
64 |
-
display: none;
|
65 |
-
}
|
66 |
-
.attention, .error-message {
|
67 |
-
color: red;
|
68 |
-
font-weight: 600;
|
69 |
-
display: none;
|
70 |
-
}
|
71 |
-
.wp-rpt-spinner{
|
72 |
-
display: none;
|
73 |
-
}
|
74 |
-
.wp-rpt-spinner img{
|
75 |
-
margin-top: 3px;
|
76 |
-
}
|
77 |
-
|
78 |
-
</style>
|
79 |
-
|
80 |
-
<div class="wp-rpt-popup-overlay">
|
81 |
-
<div class="wp-rpt-serveypanel">
|
82 |
-
<form action="#" method="post" id="wp-rpt-deactivate-form">
|
83 |
-
<div class="wp-rpt-popup-header">
|
84 |
-
<h2><?php _e( 'Quick feedback about Related Posts Thumbnails', 'related-posts-thumbnails' ); ?></h2>
|
85 |
-
</div>
|
86 |
-
<div class="wp-rpt-popup-body">
|
87 |
-
<h3><?php _e( 'If you have a moment, please let us know why you are deactivating:', 'related-posts-thumbnails' ); ?></h3>
|
88 |
-
<ul id="wp-rpt-reason-list">
|
89 |
-
<li class="wp-rpt-reason" data-input-type="" data-input-placeholder="">
|
90 |
-
<label>
|
91 |
-
<span>
|
92 |
-
<input type="radio" name="wp-rpt-selected-reason" value="1">
|
93 |
-
</span>
|
94 |
-
<span><?php _e( 'I only needed the plugin for a short period', 'related-posts-thumbnails' ); ?></span>
|
95 |
-
</label>
|
96 |
-
<div class="wp-rpt-internal-message"></div>
|
97 |
-
</li>
|
98 |
-
<li class="wp-rpt-reason has-input" data-input-type="textfield">
|
99 |
-
<label>
|
100 |
-
<span>
|
101 |
-
<input type="radio" name="wp-rpt-selected-reason" value="2">
|
102 |
-
</span>
|
103 |
-
<span><?php _e( 'I found a better plugin', 'related-posts-thumbnails' ); ?></span>
|
104 |
-
</label>
|
105 |
-
<div class="wp-rpt-internal-message"></div>
|
106 |
-
<div class="wp-rpt-reason-input"><span class="message error-message"><?php _e( 'Kindly tell us the name of plugin', 'related-posts-thumbnails' ); ?></span><input type="text" name="better_plugin" placeholder="What's the plugin's name?"></div>
|
107 |
-
</li>
|
108 |
-
<li class="wp-rpt-reason" data-input-type="" data-input-placeholder="">
|
109 |
-
<label>
|
110 |
-
<span>
|
111 |
-
<input type="radio" name="wp-rpt-selected-reason" value="3">
|
112 |
-
</span>
|
113 |
-
<span><?php _e( 'The plugin broke my site', 'related-posts-thumbnails' ); ?></span>
|
114 |
-
</label>
|
115 |
-
<div class="wp-rpt-internal-message"></div>
|
116 |
-
</li>
|
117 |
-
<li class="wp-rpt-reason" data-input-type="" data-input-placeholder="">
|
118 |
-
<label>
|
119 |
-
<span>
|
120 |
-
<input type="radio" name="wp-rpt-selected-reason" value="4">
|
121 |
-
</span>
|
122 |
-
<span><?php _e( 'The plugin suddenly stopped working', 'related-posts-thumbnails' ); ?></span>
|
123 |
-
</label>
|
124 |
-
<div class="wp-rpt-internal-message"></div>
|
125 |
-
</li>
|
126 |
-
<li class="wp-rpt-reason" data-input-type="" data-input-placeholder="">
|
127 |
-
<label>
|
128 |
-
<span>
|
129 |
-
<input type="radio" name="wp-rpt-selected-reason" value="5">
|
130 |
-
</span>
|
131 |
-
<span><?php _e( 'I no longer need the plugin', 'related-posts-thumbnails' ); ?></span>
|
132 |
-
</label>
|
133 |
-
<div class="wp-rpt-internal-message"></div>
|
134 |
-
</li>
|
135 |
-
<li class="wp-rpt-reason" data-input-type="" data-input-placeholder="">
|
136 |
-
<label>
|
137 |
-
<span>
|
138 |
-
<input type="radio" name="wp-rpt-selected-reason" value="6">
|
139 |
-
</span>
|
140 |
-
<span><?php _e( "It's a temporary deactivation. I'm just debugging an issue.", 'related-posts-thumbnails' ); ?></span>
|
141 |
-
</label>
|
142 |
-
<div class="wp-rpt-internal-message"></div>
|
143 |
-
</li>
|
144 |
-
<li class="wp-rpt-reason has-input" data-input-type="textfield" >
|
145 |
-
<label>
|
146 |
-
<span>
|
147 |
-
<input type="radio" name="wp-rpt-selected-reason" value="7">
|
148 |
-
</span>
|
149 |
-
<span><?php _e( 'Other', 'related-posts-thumbnails' ); ?></span>
|
150 |
-
</label>
|
151 |
-
<div class="wp-rpt-internal-message"></div>
|
152 |
-
<div class="wp-rpt-reason-input"><span class="message error-message "><?php _e( 'Kindly tell us the reason so we can improve.', 'related-posts-thumbnails' ); ?></span><input type="text" name="other_reason" placeholder="Would you like to share what's other reason ?"></div>
|
153 |
-
</li>
|
154 |
-
</ul>
|
155 |
-
</div>
|
156 |
-
<div class="wp-rpt-popup-footer">
|
157 |
-
<label class="wp-rpt-anonymous"><input type="checkbox" /><?php _e( 'Anonymous feedback', 'related-posts-thumbnails' ); ?></label>
|
158 |
-
<input type="button" class="button button-secondary button-skip wp-rpt-popup-skip-feedback" value="Skip & Deactivate" >
|
159 |
-
<div class="action-btns">
|
160 |
-
<span class="wp-rpt-spinner"><img src="<?php echo admin_url( '/images/spinner.gif' ); ?>" alt=""></span>
|
161 |
-
<input type="submit" class="button button-secondary button-deactivate wp-rpt-popup-allow-deactivate" value="Submit & Deactivate" disabled="disabled">
|
162 |
-
<a href="#" class="button button-primary wp-rpt-popup-button-close"><?php _e( 'Cancel', 'related-posts-thumbnails' ); ?></a>
|
163 |
-
|
164 |
-
</div>
|
165 |
-
</div>
|
166 |
-
</form>
|
167 |
-
</div>
|
168 |
-
</div>
|
169 |
-
|
170 |
-
|
171 |
-
<script>
|
172 |
-
(function( $ ) {
|
173 |
-
|
174 |
-
$(function() {
|
175 |
-
|
176 |
-
var pluginSlug = 'related-posts-thumbnails';
|
177 |
-
// Code to fire when the DOM is ready.
|
178 |
-
|
179 |
-
$(document).on('click', 'tr[data-slug="' + pluginSlug + '"] .deactivate', function(e){
|
180 |
-
e.preventDefault();
|
181 |
-
|
182 |
-
$('.wp-rpt-popup-overlay').addClass('wp-rpt-active');
|
183 |
-
$('body').addClass('wp-rpt-hidden');
|
184 |
-
});
|
185 |
-
$(document).on('click', '.wp-rpt-popup-button-close', function () {
|
186 |
-
close_popup();
|
187 |
-
});
|
188 |
-
$(document).on('click', ".wp-rpt-serveypanel,tr[data-slug='" + pluginSlug + "'] .deactivate",function(e){
|
189 |
-
e.stopPropagation();
|
190 |
-
});
|
191 |
-
|
192 |
-
$(document).click(function(){
|
193 |
-
close_popup();
|
194 |
-
});
|
195 |
-
$('.wp-rpt-reason label').on('click', function(){
|
196 |
-
if($(this).find('input[type="radio"]').is(':checked')){
|
197 |
-
//$('.wp-rpt-anonymous').show();
|
198 |
-
$(this).next().next('.wp-rpt-reason-input').show().end().end().parent().siblings().find('.wp-rpt-reason-input').hide();
|
199 |
-
}
|
200 |
-
});
|
201 |
-
$('input[type="radio"][name="wp-rpt-selected-reason"]').on('click', function(event) {
|
202 |
-
$(".wp-rpt-popup-allow-deactivate").removeAttr('disabled');
|
203 |
-
});
|
204 |
-
$(document).on('submit', '#wp-rpt-deactivate-form', function(event) {
|
205 |
-
event.preventDefault();
|
206 |
-
|
207 |
-
var _reason = $(this).find('input[type="radio"][name="wp-rpt-selected-reason"]:checked').val();
|
208 |
-
var _reason_details = '';
|
209 |
-
if ( _reason == 2 ) {
|
210 |
-
_reason_details = $(this).find("input[type='text'][name='better_plugin']").val();
|
211 |
-
} else if ( _reason == 7 ) {
|
212 |
-
_reason_details = $(this).find("input[type='text'][name='other_reason']").val();
|
213 |
-
}
|
214 |
-
|
215 |
-
if ( ( _reason == 7 || _reason == 2 ) && _reason_details == '' ) {
|
216 |
-
$('.message.error-message').show();
|
217 |
-
return ;
|
218 |
-
}
|
219 |
-
|
220 |
-
$.ajax({
|
221 |
-
url: ajaxurl,
|
222 |
-
type: 'POST',
|
223 |
-
data: {
|
224 |
-
action : 'rpt_deactivate',
|
225 |
-
reason : _reason,
|
226 |
-
reason_detail : _reason_details,
|
227 |
-
},
|
228 |
-
beforeSend: function(){
|
229 |
-
$(".wp-rpt-spinner").show();
|
230 |
-
$(".wp-rpt-popup-allow-deactivate").attr("disabled", "disabled");
|
231 |
-
}
|
232 |
-
})
|
233 |
-
.done(function() {
|
234 |
-
$(".wp-rpt-spinner").hide();
|
235 |
-
// $(".wp-rpt-popup-allow-deactivate").removeAttr("disabled");
|
236 |
-
window.location.href = $("tr[data-slug='"+ pluginSlug +"'] .deactivate a").attr('href');
|
237 |
-
});
|
238 |
-
|
239 |
-
});
|
240 |
-
|
241 |
-
$('.wp-rpt-popup-skip-feedback').on('click', function(e){
|
242 |
-
window.location.href = $("tr[data-slug='"+ pluginSlug +"'] .deactivate a").attr('href');
|
243 |
-
})
|
244 |
-
|
245 |
-
function close_popup() {
|
246 |
-
$('.wp-rpt-popup-overlay').removeClass('wp-rpt-active');
|
247 |
-
$('#wp-rpt-deactivate-form').trigger("reset");
|
248 |
-
$(".wp-rpt-popup-allow-deactivate").attr('disabled', 'disabled');
|
249 |
-
$(".wp-rpt-reason-input").hide();
|
250 |
-
$('body').removeClass('wp-rpt-hidden');
|
251 |
-
$('.message.error-message').hide();
|
252 |
-
}
|
253 |
-
});
|
254 |
-
|
255 |
-
})( jQuery ); // This invokes the function above and allows us to use '$' in place of 'jQuery' in our code.
|
256 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/rpt-settings.php
CHANGED
@@ -686,6 +686,7 @@ if ( $this->wp_version >= 3 ) {
|
|
686 |
|
687 |
<td>
|
688 |
<input type="text" name="relpoststh_customfield" value="<?php echo get_option( 'relpoststh_customfield', $this->custom_field ); ?>" size="50"/>
|
|
|
689 |
</td>
|
690 |
</tr>
|
691 |
|
686 |
|
687 |
<td>
|
688 |
<input type="text" name="relpoststh_customfield" value="<?php echo get_option( 'relpoststh_customfield', $this->custom_field ); ?>" size="50"/>
|
689 |
+
<?php _e( 'ACF/Custom field name for thumbnails that should have image field type.', 'related-posts-thumbnails' ); ?>
|
690 |
</td>
|
691 |
</tr>
|
692 |
|
lib/wpb-sdk/includes/wpb-sdk-logger.php
ADDED
@@ -0,0 +1,395 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Logger responsible for gathering user logs and send.
|
4 |
+
* In effort to provide better customer experience.
|
5 |
+
*
|
6 |
+
* @package RPT_WPB_SDK
|
7 |
+
* @since 2.0.1
|
8 |
+
*/
|
9 |
+
|
10 |
+
namespace RPT_WPB_SDK;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Class responsible for logs data collection.
|
14 |
+
*/
|
15 |
+
class Logger {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Contains products data for logging.
|
19 |
+
*
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
private static $product_data;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Contains products that have a Pro version.
|
26 |
+
*
|
27 |
+
* @var array
|
28 |
+
*/
|
29 |
+
private static $has_pro_version = array( 'wp-analytify', 'loginpress', 'simple-social-buttons' );
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Class constructor.
|
33 |
+
*
|
34 |
+
* @param array $product_data variable.
|
35 |
+
* @return void
|
36 |
+
*/
|
37 |
+
public function __construct( $product_data ) {
|
38 |
+
|
39 |
+
self::$product_data = $product_data;
|
40 |
+
$this->hooks();
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Call wp hooks to initialize logger actions.
|
45 |
+
*
|
46 |
+
* @return void
|
47 |
+
*/
|
48 |
+
public function hooks() {
|
49 |
+
|
50 |
+
add_action( 'init', array( $this, 'set_logs_schedule' ) );
|
51 |
+
add_action( 'wpb_logger_cron_' . self::$product_data['slug'], array( $this, 'log_plugin' ) );
|
52 |
+
add_action( 'admin_footer', array( $this, 'deactivation_model' ) );
|
53 |
+
add_action( 'wp_ajax_wpb_sdk_' . self::$product_data['slug'] . '_deactivation', array( $this, 'ajax_deactivation' ) );
|
54 |
+
|
55 |
+
register_activation_hook( self::$product_data['path'], array( __CLASS__, 'log_activation' ) );
|
56 |
+
register_deactivation_hook( self::$product_data['path'], array( __CLASS__, 'product_deactivation' ) );
|
57 |
+
register_uninstall_hook( self::$product_data['path'], array( __CLASS__, 'log_uninstallation' ) );
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Set logs schedule.
|
62 |
+
*/
|
63 |
+
public function set_logs_schedule() {
|
64 |
+
|
65 |
+
if ( ! wp_next_scheduled( 'wpb_logger_cron_' . self::$product_data['slug'] ) ) {
|
66 |
+
wp_schedule_event( time(), 'weekly', 'wpb_logger_cron_' . self::$product_data['slug'] );
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Add deactivation model.
|
72 |
+
*
|
73 |
+
* @return void
|
74 |
+
*/
|
75 |
+
public function deactivation_model() {
|
76 |
+
|
77 |
+
if ( function_exists( 'get_current_screen' ) ) {
|
78 |
+
|
79 |
+
$screen = get_current_screen();
|
80 |
+
|
81 |
+
if ( 'plugins.php' === $screen->parent_file ) {
|
82 |
+
|
83 |
+
$product_slug = self::$product_data['slug'];
|
84 |
+
$product_name = self::$product_data['name'];
|
85 |
+
|
86 |
+
$has_pro_version = ( in_array( $product_slug, self::$has_pro_version ) ) ? true : false;
|
87 |
+
|
88 |
+
include dirname( __DIR__ ) . '/views/wpb-sdk-deactivate-form.php';
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Ajax callback when product deactivated.
|
95 |
+
* Shows deactivation model.
|
96 |
+
*
|
97 |
+
* @return void
|
98 |
+
*/
|
99 |
+
public function ajax_deactivation() {
|
100 |
+
|
101 |
+
if ( isset( $_POST['nonce'] ) && empty( $_POST['nonce'] ) ) {
|
102 |
+
return;
|
103 |
+
}
|
104 |
+
|
105 |
+
$nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) );
|
106 |
+
$verify_nonce = wp_verify_nonce( $nonce, 'deactivate-plugin_' . plugin_basename( self::$product_data['path'] ) );
|
107 |
+
|
108 |
+
if ( ! $verify_nonce ) {
|
109 |
+
return;
|
110 |
+
}
|
111 |
+
|
112 |
+
$this->log_deactivation();
|
113 |
+
|
114 |
+
wp_die();
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Send plugin logs on cron.
|
119 |
+
*
|
120 |
+
* @return $wpb_sdk_track SDK track record.
|
121 |
+
*/
|
122 |
+
public function log_plugin() {
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Adding a activation check to prevent 2 hits from getting send on activation
|
126 |
+
*/
|
127 |
+
if ( get_transient( 'wpb_logger_cron_' . self::$product_data['slug'] ) ) {
|
128 |
+
return;
|
129 |
+
}
|
130 |
+
|
131 |
+
$logs_data = array_merge(
|
132 |
+
self::get_logs_data(),
|
133 |
+
array(
|
134 |
+
'explicit_logs' => array(
|
135 |
+
'action' => 'weekly',
|
136 |
+
),
|
137 |
+
)
|
138 |
+
);
|
139 |
+
|
140 |
+
$wpb_sdk_track = new Track( $logs_data );
|
141 |
+
$wpb_sdk_track->send();
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Send logs when plugin is activated.
|
146 |
+
*/
|
147 |
+
public static function log_activation() {
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Setting a transient to add a check in the weekly track report
|
151 |
+
*/
|
152 |
+
set_transient( 'wpb_logger_cron_' . self::$product_data['slug'], true, 60 );
|
153 |
+
|
154 |
+
$logs_data = array_merge(
|
155 |
+
self::get_logs_data(),
|
156 |
+
array(
|
157 |
+
'explicit_logs' => array(
|
158 |
+
'action' => 'activate',
|
159 |
+
),
|
160 |
+
)
|
161 |
+
);
|
162 |
+
|
163 |
+
$wpb_sdk_track = new Track( $logs_data );
|
164 |
+
$wpb_sdk_track->send();
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Send logs when plugin is deactivated.
|
169 |
+
*/
|
170 |
+
public function log_deactivation() {
|
171 |
+
$reason = isset( $_POST['reason'] ) ? $_POST['reason'] : '';
|
172 |
+
$reason_detail = isset( $_POST['reason_detail'] ) ? $_POST['reason_detail'] : '';
|
173 |
+
|
174 |
+
$logs_data = array_merge(
|
175 |
+
self::get_logs_data(),
|
176 |
+
array(
|
177 |
+
'explicit_logs' => array(
|
178 |
+
'action' => 'deactivate',
|
179 |
+
'reason' => sanitize_text_field( wp_unslash( $reason ) ),
|
180 |
+
'reason_detail' => sanitize_text_field( wp_unslash( $reason_detail ) ),
|
181 |
+
),
|
182 |
+
)
|
183 |
+
);
|
184 |
+
|
185 |
+
$wpb_sdk_track = new Track( $logs_data );
|
186 |
+
$wpb_sdk_track->send();
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Remove cron schedules on deactivation.
|
191 |
+
*/
|
192 |
+
public static function product_deactivation() {
|
193 |
+
|
194 |
+
wp_clear_scheduled_hook( 'wpb_logger_cron_' . self::$product_data['slug'] );
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Send logs when plugin is uninstalled.
|
199 |
+
*/
|
200 |
+
public static function log_uninstallation() {
|
201 |
+
|
202 |
+
$logs_data = array_merge(
|
203 |
+
self::get_logs_data(),
|
204 |
+
array(
|
205 |
+
'explicit_logs' => array(
|
206 |
+
'action' => 'uninstall',
|
207 |
+
),
|
208 |
+
)
|
209 |
+
);
|
210 |
+
|
211 |
+
$wpb_sdk_track = new Track( $logs_data );
|
212 |
+
$wpb_sdk_track->send();
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Collect all data for logging.
|
217 |
+
*
|
218 |
+
* @return array
|
219 |
+
*/
|
220 |
+
private static function get_logs_data() {
|
221 |
+
|
222 |
+
global $wpdb;
|
223 |
+
|
224 |
+
$data = array();
|
225 |
+
$theme_data = wp_get_theme();
|
226 |
+
$curl_version = '';
|
227 |
+
$external_http_blocked = '';
|
228 |
+
$users_count = '';
|
229 |
+
|
230 |
+
$admin_users = get_users( array( 'role' => 'Administrator' ) );
|
231 |
+
$admin = isset( $admin_users[0] ) ? $admin_users[0]->data : '';
|
232 |
+
$admin_meta = ! empty( $admin ) ? get_user_meta( $admin->ID ) : '';
|
233 |
+
|
234 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
235 |
+
include ABSPATH . '/wp-admin/includes/plugin.php';
|
236 |
+
}
|
237 |
+
|
238 |
+
if ( function_exists( 'count_users' ) ) {
|
239 |
+
$users_count = count_users();
|
240 |
+
$users_count = isset( $users_count['total_users'] ) ? intval( $users_count['total_users'] ) : '';
|
241 |
+
}
|
242 |
+
|
243 |
+
// Check external http request blocked.
|
244 |
+
if ( ! defined( 'WP_HTTP_BLOCK_EXTERNAL' ) || ! WP_HTTP_BLOCK_EXTERNAL ) {
|
245 |
+
$external_http_blocked = 'none';
|
246 |
+
} else {
|
247 |
+
$external_http_blocked = defined( 'WP_ACCESSIBLE_HOSTS' ) ? 'partially (accessible hosts: ' . esc_html( WP_ACCESSIBLE_HOSTS ) . ')' : 'all';
|
248 |
+
}
|
249 |
+
|
250 |
+
// Curl version.
|
251 |
+
if ( function_exists( 'curl_init' ) ) {
|
252 |
+
$curl = curl_version();
|
253 |
+
$curl_version = '(' . $curl['version'] . ' ' . $curl['ssl_version'] . ')';
|
254 |
+
}
|
255 |
+
|
256 |
+
$data['site_info'] = array(
|
257 |
+
'site_url' => site_url(),
|
258 |
+
'home_url' => home_url(),
|
259 |
+
);
|
260 |
+
$data['site_meta_info'] = array(
|
261 |
+
'is_multisite' => is_multisite(),
|
262 |
+
'multisites' => self::get_multisites(),
|
263 |
+
'php_version' => phpversion(),
|
264 |
+
'wp_version' => get_bloginfo( 'version' ),
|
265 |
+
'server' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : '',
|
266 |
+
'timezoneoffset' => date('P'),
|
267 |
+
'ext/mysqli' => ! empty( $wpdb->use_mysqli ) ? true : false,
|
268 |
+
'mysql_version' => empty( $wpdb->use_mysqli ) ? mysql_get_server_info() : mysqli_get_server_info( $wpdb->dbh ),
|
269 |
+
'memory_limit' => ( defined( WP_MEMORY_LIMIT ) ? WP_MEMORY_LIMIT : ini_get( 'memory_limit' ) ) ? ini_get( 'memory_limit' ) : '',
|
270 |
+
'external_http_blocked' => $external_http_blocked,
|
271 |
+
'wp_locale' => get_locale(),
|
272 |
+
'db_charset' => defined( 'DB_CHARSET' ) ? DB_CHARSET : '',
|
273 |
+
'debug_mode' => defined( 'WP_DEBUG' ) && WP_DEBUG ? true : false,
|
274 |
+
'wp_max_upload' => size_format( wp_max_upload_size() ),
|
275 |
+
'php_time_limit' => function_exists( 'ini_get' ) ? ini_get( 'max_execution_time' ) : '',
|
276 |
+
'php_error_log' => function_exists( 'ini_get' ) ? ini_get( 'error_log' ) : '',
|
277 |
+
'fsockopen' => function_exists( 'fsockopen' ) ? true : false,
|
278 |
+
'open_ssl' => defined( 'OPENSSL_VERSION_TEXT' ) ? OPENSSL_VERSION_TEXT : '',
|
279 |
+
'curl' => $curl_version,
|
280 |
+
'ip' => self::get_ip(),
|
281 |
+
'user_count' => $users_count,
|
282 |
+
'admin_email' => sanitize_email( get_bloginfo( 'admin_email' ) ),
|
283 |
+
'theme_name' => sanitize_text_field( $theme_data->Name ),
|
284 |
+
'theme_version' => sanitize_text_field( $theme_data->Version ),
|
285 |
+
);
|
286 |
+
$data['site_plugins_info'] = self::get_plugins();
|
287 |
+
$data['user_info'] = array(
|
288 |
+
'user_email' => ! empty( $admin ) ? sanitize_email( $admin->user_email ) : '',
|
289 |
+
'user_nickname' => ! empty( $admin ) ? sanitize_text_field( $admin->user_nicename ) : '',
|
290 |
+
'user_firstname' => isset( $admin_meta['first_name'][0] ) ? sanitize_text_field( $admin_meta['first_name'][0] ) : '',
|
291 |
+
'user_lastname' => isset( $admin_meta['last_name'][0] ) ? sanitize_text_field( $admin_meta['last_name'][0] ) : ''
|
292 |
+
);
|
293 |
+
$data['product_info'] = self::get_product_data();
|
294 |
+
$data['sdk_version'] = '1.0.0';
|
295 |
+
|
296 |
+
return $data;
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* Collect multisite data.
|
301 |
+
*
|
302 |
+
* @return array
|
303 |
+
*/
|
304 |
+
private static function get_multisites() {
|
305 |
+
|
306 |
+
if ( ! is_multisite() ) {
|
307 |
+
return false;
|
308 |
+
}
|
309 |
+
|
310 |
+
$sites_info = array();
|
311 |
+
$sites = get_sites();
|
312 |
+
|
313 |
+
foreach ( $sites as $site ) {
|
314 |
+
$sites_info[ $site->blog_id ] = array(
|
315 |
+
'name' => get_blog_details( $site->blog_id )->blogname,
|
316 |
+
'domain' => $site->domain,
|
317 |
+
'path' => $site->path,
|
318 |
+
);
|
319 |
+
}
|
320 |
+
|
321 |
+
return $sites_info;
|
322 |
+
}
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Collect plugins information: Active/Inactive plugins.
|
326 |
+
*
|
327 |
+
* @return string
|
328 |
+
*/
|
329 |
+
private static function get_plugins() {
|
330 |
+
|
331 |
+
$plugins = array_keys( get_plugins() );
|
332 |
+
$active_plugins = get_option( 'active_plugins', array() );
|
333 |
+
|
334 |
+
foreach ( $plugins as $key => $plugin ) {
|
335 |
+
if ( in_array( $plugin, $active_plugins ) ) {
|
336 |
+
// Remove active plugins from list.
|
337 |
+
unset( $plugins[ $key ] );
|
338 |
+
}
|
339 |
+
}
|
340 |
+
|
341 |
+
return wp_json_encode(
|
342 |
+
array(
|
343 |
+
'active' => $active_plugins,
|
344 |
+
'inactive' => $plugins,
|
345 |
+
)
|
346 |
+
);
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* Get user IP information.
|
351 |
+
*
|
352 |
+
* @return string|null
|
353 |
+
*/
|
354 |
+
private static function get_ip() {
|
355 |
+
|
356 |
+
$fields = array(
|
357 |
+
'HTTP_CF_CONNECTING_IP',
|
358 |
+
'HTTP_CLIENT_IP',
|
359 |
+
'HTTP_X_FORWARDED_FOR',
|
360 |
+
'HTTP_X_FORWARDED',
|
361 |
+
'HTTP_FORWARDED_FOR',
|
362 |
+
'HTTP_FORWARDED',
|
363 |
+
'REMOTE_ADDR',
|
364 |
+
);
|
365 |
+
|
366 |
+
foreach ( $fields as $ip_field ) {
|
367 |
+
if ( ! empty( $_SERVER[ $ip_field ] ) ) {
|
368 |
+
return $_SERVER[ $ip_field ];
|
369 |
+
}
|
370 |
+
}
|
371 |
+
|
372 |
+
return null;
|
373 |
+
}
|
374 |
+
|
375 |
+
/**
|
376 |
+
* Get product data.
|
377 |
+
*
|
378 |
+
* @return array
|
379 |
+
*/
|
380 |
+
private static function get_product_data() {
|
381 |
+
|
382 |
+
$product_data = self::$product_data;
|
383 |
+
$product_settings = array();
|
384 |
+
|
385 |
+
// Pull settings data from db.
|
386 |
+
foreach ( $product_data['settings'] as $option_name => $default_value ) {
|
387 |
+
$get_option = get_option( $option_name );
|
388 |
+
$product_settings[ $option_name ] = ! empty( $get_option ) ? $get_option : $default_value;
|
389 |
+
}
|
390 |
+
|
391 |
+
$product_data['settings'] = wp_json_encode( $product_settings );
|
392 |
+
|
393 |
+
return $product_data;
|
394 |
+
}
|
395 |
+
}
|
lib/wpb-sdk/includes/wpb-sdk-track.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Send tracking data (logs) to WPB server.
|
4 |
+
*
|
5 |
+
* @package RPT_WPB_SDK
|
6 |
+
* @since 2.0.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
namespace RPT_WPB_SDK;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class responsible for sending logs data.
|
13 |
+
*/
|
14 |
+
class Track {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The logger data to be send.
|
18 |
+
*
|
19 |
+
* @var array
|
20 |
+
*/
|
21 |
+
private $payload = array();
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Logger tracking endpoint.
|
25 |
+
*
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
private $tracking_endpoint = 'https://app.telemetry.wpbrigade.com/api/logger';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Class constructor.
|
32 |
+
*
|
33 |
+
* @param Obj $payload variable.
|
34 |
+
*
|
35 |
+
* @return void
|
36 |
+
*/
|
37 |
+
public function __construct( $payload ) {
|
38 |
+
|
39 |
+
$this->payload = $payload;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Send the logs to the api endpoint.
|
44 |
+
*
|
45 |
+
* @return object
|
46 |
+
*/
|
47 |
+
public function send() {
|
48 |
+
|
49 |
+
wp_remote_post(
|
50 |
+
$this->tracking_endpoint,
|
51 |
+
array(
|
52 |
+
'method' => 'POST',
|
53 |
+
'body' => $this->payload,
|
54 |
+
'timeout' => 5,
|
55 |
+
'headers' => array(),
|
56 |
+
)
|
57 |
+
);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
lib/wpb-sdk/init.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WPBrigade SDK
|
4 |
+
*
|
5 |
+
* @package WPB_SDK
|
6 |
+
* @since 2.0.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
require_once dirname( __FILE__ ) . '/includes/wpb-sdk-track.php';
|
14 |
+
require_once dirname( __FILE__ ) . '/includes/wpb-sdk-logger.php';
|
lib/wpb-sdk/views/wpb-sdk-deactivate-form.php
ADDED
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<style>
|
2 |
+
.wpb-sdk_deactivation-frm-hidden {
|
3 |
+
overflow: hidden;
|
4 |
+
}
|
5 |
+
|
6 |
+
.wpb-sdk_deactivation-frm-popup-overlay .wpb-sdk_deactivation-frm-internal-message {
|
7 |
+
margin: 3px 0 3px 22px;
|
8 |
+
display: none;
|
9 |
+
}
|
10 |
+
|
11 |
+
.wpb-sdk_deactivation-frm-reason-input {
|
12 |
+
margin: 3px 0 3px 22px;
|
13 |
+
display: none;
|
14 |
+
}
|
15 |
+
|
16 |
+
.wpb-sdk_deactivation-frm-pro-message {
|
17 |
+
margin: 3px 0 3px 22px;
|
18 |
+
display: none;
|
19 |
+
color: #ed1515;
|
20 |
+
font-size: 14px;
|
21 |
+
font-weight: 600;
|
22 |
+
}
|
23 |
+
|
24 |
+
.wpb-sdk_deactivation-frm-reason-input input[type="text"] {
|
25 |
+
width: 100%;
|
26 |
+
display: block;
|
27 |
+
}
|
28 |
+
|
29 |
+
.wpb-sdk_deactivation-frm-popup-overlay {
|
30 |
+
background: rgba(0, 0, 0, .8);
|
31 |
+
position: fixed;
|
32 |
+
top: 0;
|
33 |
+
left: 0;
|
34 |
+
height: 100%;
|
35 |
+
width: 100%;
|
36 |
+
z-index: 1000;
|
37 |
+
overflow: auto;
|
38 |
+
visibility: hidden;
|
39 |
+
opacity: 0;
|
40 |
+
transition: opacity 0.3s ease-in-out:
|
41 |
+
}
|
42 |
+
|
43 |
+
.wpb-sdk_deactivation-frm-popup-overlay.wpb-sdk_deactivation-frm-active {
|
44 |
+
opacity: 1;
|
45 |
+
visibility: visible;
|
46 |
+
}
|
47 |
+
|
48 |
+
.wpb-sdk_deactivation-frm-serveypanel {
|
49 |
+
width: 600px;
|
50 |
+
background: #fff;
|
51 |
+
margin: 65px auto 0;
|
52 |
+
}
|
53 |
+
|
54 |
+
.wpb-sdk_deactivation-frm-popup-header {
|
55 |
+
background: #f1f1f1;
|
56 |
+
padding: 20px;
|
57 |
+
border-bottom: 1px solid #ccc;
|
58 |
+
}
|
59 |
+
|
60 |
+
.wpb-sdk_deactivation-frm-popup-header h2 {
|
61 |
+
margin: 0;
|
62 |
+
}
|
63 |
+
|
64 |
+
.wpb-sdk_deactivation-frm-popup-body {
|
65 |
+
padding: 10px 20px;
|
66 |
+
}
|
67 |
+
|
68 |
+
.wpb-sdk_deactivation-frm-popup-footer {
|
69 |
+
background: #f9f3f3;
|
70 |
+
padding: 10px 20px;
|
71 |
+
border-top: 1px solid #ccc;
|
72 |
+
}
|
73 |
+
|
74 |
+
.wpb-sdk_deactivation-frm-popup-footer:after {
|
75 |
+
content: "";
|
76 |
+
display: table;
|
77 |
+
clear: both;
|
78 |
+
}
|
79 |
+
|
80 |
+
.action-btns {
|
81 |
+
float: right;
|
82 |
+
}
|
83 |
+
|
84 |
+
.wpb-sdk_deactivation-frm-anonymous {
|
85 |
+
display: none;
|
86 |
+
}
|
87 |
+
|
88 |
+
.attention,
|
89 |
+
.error-message {
|
90 |
+
color: red;
|
91 |
+
font-weight: 600;
|
92 |
+
display: none;
|
93 |
+
}
|
94 |
+
|
95 |
+
.wpb-sdk_deactivation-frm-spinner {
|
96 |
+
display: none;
|
97 |
+
}
|
98 |
+
|
99 |
+
.wpb-sdk_deactivation-frm-spinner img {
|
100 |
+
margin-top: 3px;
|
101 |
+
}
|
102 |
+
</style>
|
103 |
+
<div class="<?php echo $product_slug ?>-deactivate-wrapper">
|
104 |
+
<div class="wpb-sdk_deactivation-frm-popup-overlay">
|
105 |
+
<div class="wpb-sdk_deactivation-frm-serveypanel">
|
106 |
+
<form action="#" method="post" class="wpb-sdk_deactivation-frm-deactivate-form">
|
107 |
+
|
108 |
+
<div class="wpb-sdk_deactivation-frm-popup-header">
|
109 |
+
<h2><?php _e( 'Quick feedback about ' . $product_name, 'ucmm-wpbrigade' ); ?></h2>
|
110 |
+
</div>
|
111 |
+
|
112 |
+
<div class="wpb-sdk_deactivation-frm-popup-body">
|
113 |
+
|
114 |
+
<h3><?php _e( 'If you have a moment, please let us know why you are deactivating:', 'ucmm-wpbrigade' ); ?></h3>
|
115 |
+
|
116 |
+
<ul id="wpb-sdk_deactivation-frm-reason-list">
|
117 |
+
<?php if ( $has_pro_version ) { ?>
|
118 |
+
<li class="wpb-sdk_deactivation-frm-reason wpb-sdk_deactivation-frm-reason-pro" data-input-type="" data-input-placeholder="">
|
119 |
+
<label>
|
120 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="pro">
|
121 |
+
</span><span><?php _e( 'I upgraded to ' . $product_name . ' Pro', 'ucmm-wpbrigade' ); ?></span>
|
122 |
+
</label>
|
123 |
+
<div class="wpb-sdk_deactivation-frm-pro-message">
|
124 |
+
<?php _e( 'No need to deactivate this ' . $product_name . ' Core version. Pro version works as an add-on with Core version.', 'ucmm-wpbrigade' ); ?>
|
125 |
+
</div>
|
126 |
+
</li>
|
127 |
+
<?php } ?>
|
128 |
+
<li class="wpb-sdk_deactivation-frm-reason" data-input-type="" data-input-placeholder="">
|
129 |
+
<label>
|
130 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="1"></span>
|
131 |
+
<span><?php _e( 'I only needed the plugin for a short period', 'ucmm-wpbrigade' ); ?></span>
|
132 |
+
</label>
|
133 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
134 |
+
</li>
|
135 |
+
<li class="wpb-sdk_deactivation-frm-reason has-input" data-input-type="textfield">
|
136 |
+
<label>
|
137 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="2"></span>
|
138 |
+
<span><?php _e( 'I found a better plugin', 'ucmm-wpbrigade' ); ?></span>
|
139 |
+
</label>
|
140 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
141 |
+
<div class="wpb-sdk_deactivation-frm-reason-input">
|
142 |
+
<span class="message error-message"><?php _e( 'Kindly tell us the name of plugin', 'ucmm-wpbrigade' ); ?></span>
|
143 |
+
<input type="text" name="better_plugin" placeholder="<?php _e( "What's the plugin's name?", 'ucmm-wpbrigade' ); ?>">
|
144 |
+
</div>
|
145 |
+
</li>
|
146 |
+
<li class="wpb-sdk_deactivation-frm-reason" data-input-type="" data-input-placeholder="">
|
147 |
+
<label>
|
148 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="3"></span>
|
149 |
+
<span><?php _e( 'The plugin broke my site', 'ucmm-wpbrigade' ); ?></span>
|
150 |
+
</label>
|
151 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
152 |
+
</li>
|
153 |
+
<li class="wpb-sdk_deactivation-frm-reason" data-input-type="" data-input-placeholder="">
|
154 |
+
<label>
|
155 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="4"></span>
|
156 |
+
<span><?php _e( 'The plugin suddenly stopped working', 'ucmm-wpbrigade' ); ?></span>
|
157 |
+
</label>
|
158 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
159 |
+
</li>
|
160 |
+
<li class="wpb-sdk_deactivation-frm-reason" data-input-type="" data-input-placeholder="">
|
161 |
+
<label>
|
162 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="5"></span>
|
163 |
+
<span><?php _e( 'I no longer need the plugin', 'ucmm-wpbrigade' ); ?></span>
|
164 |
+
</label>
|
165 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
166 |
+
</li>
|
167 |
+
<li class="wpb-sdk_deactivation-frm-reason" data-input-type="" data-input-placeholder="">
|
168 |
+
<label>
|
169 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="6"></span>
|
170 |
+
<span><?php _e( "It's a temporary deactivation. I'm just debugging an issue.", 'ucmm-wpbrigade' ); ?></span>
|
171 |
+
</label>
|
172 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
173 |
+
</li>
|
174 |
+
<li class="wpb-sdk_deactivation-frm-reason has-input" data-input-type="textfield">
|
175 |
+
<label>
|
176 |
+
<span><input type="radio" name="wpb-sdk_deactivation-frm-selected-reason" value="7"></span>
|
177 |
+
<span><?php _e( 'Other', 'ucmm-wpbrigade' ); ?></span>
|
178 |
+
</label>
|
179 |
+
<div class="wpb-sdk_deactivation-frm-internal-message"></div>
|
180 |
+
<div class="wpb-sdk_deactivation-frm-reason-input"><span class="message error-message "><?php _e( 'Kindly tell us the reason so we can improve.', 'ucmm-wpbrigade' ); ?></span>
|
181 |
+
<input type="text" name="other_reason" placeholder="<?php _e( "Would you like to share what's other reason ?", 'ucmm-wpbrigade' ); ?>">
|
182 |
+
</div>
|
183 |
+
</li>
|
184 |
+
</ul>
|
185 |
+
</div>
|
186 |
+
|
187 |
+
<div class="wpb-sdk_deactivation-frm-popup-footer">
|
188 |
+
<label class="wpb-sdk_deactivation-frm-anonymous">
|
189 |
+
<input type="checkbox" />
|
190 |
+
<?php _e( 'Anonymous feedback', 'ucmm-wpbrigade' ); ?>
|
191 |
+
</label>
|
192 |
+
<input type="button" class="button button-secondary button-skip wpb-sdk_deactivation-frm-popup-skip-feedback" value="Skip & Deactivate">
|
193 |
+
<div class="action-btns">
|
194 |
+
<span class="wpb-sdk_deactivation-frm-spinner"><img src="<?php echo admin_url( '/images/spinner.gif' ); ?>" alt=""></span>
|
195 |
+
<input type="submit" class="button button-secondary button-deactivate wpb-sdk_deactivation-frm-popup-allow-deactivate" value="Submit & Deactivate" disabled="disabled">
|
196 |
+
<a href="#" class="button button-primary wpb-sdk_deactivation-frm-popup-button-close">
|
197 |
+
<?php _e( 'Cancel', 'ucmm-wpbrigade' ); ?>
|
198 |
+
</a>
|
199 |
+
</div>
|
200 |
+
</div>
|
201 |
+
|
202 |
+
</form>
|
203 |
+
</div>
|
204 |
+
</div>
|
205 |
+
</div>
|
206 |
+
<script>
|
207 |
+
document.addEventListener("DOMContentLoaded", function(event) {
|
208 |
+
(function($) {
|
209 |
+
$(function() {
|
210 |
+
|
211 |
+
var pluginSlug = "<?php echo $product_slug; ?>";
|
212 |
+
var pluginName = "<?php echo $product_name; ?>";
|
213 |
+
|
214 |
+
var loggerDeactiveNonce;
|
215 |
+
|
216 |
+
$(document).on('click', 'tr[data-slug="' + pluginSlug + '"] .deactivate', function(e) {
|
217 |
+
e.preventDefault();
|
218 |
+
loggerDeactiveNonce = $(this).find('a').attr('href').split("wpnonce=")[1];
|
219 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-overlay').addClass('wpb-sdk_deactivation-frm-active');
|
220 |
+
$('body').addClass('wpb-sdk_deactivation-frm-hidden');
|
221 |
+
});
|
222 |
+
|
223 |
+
$(document).on('click', '.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-button-close', function() {
|
224 |
+
close_popup();
|
225 |
+
});
|
226 |
+
|
227 |
+
$(document).on('click', ".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-serveypanel,tr[data-slug='" + pluginSlug + "'] .deactivate", function(e) {
|
228 |
+
e.stopPropagation();
|
229 |
+
});
|
230 |
+
|
231 |
+
$(document).on('click', function() {
|
232 |
+
close_popup();
|
233 |
+
});
|
234 |
+
|
235 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-reason label').on('click', function() {
|
236 |
+
if($(this).find('input[type="radio"]').is(':checked')) {
|
237 |
+
//$('.wpb-sdk_deactivation-frm-anonymous').show();
|
238 |
+
$(this).next().next('.wpb-sdk_deactivation-frm-reason-input').show().end().end().parent().siblings().find('.wpb-sdk_deactivation-frm-reason-input').hide();
|
239 |
+
}
|
240 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-pro-message').hide();
|
241 |
+
});
|
242 |
+
|
243 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-reason-pro label').on('click', function() {
|
244 |
+
if($(this).find('input[type="radio"]').is(':checked')) {
|
245 |
+
$(this).next('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-pro-message').show().end().end().parent().siblings().find('.wpb-sdk_deactivation-frm-reason-input').hide();
|
246 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-allow-deactivate').attr('disabled', 'disabled');
|
247 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-skip-feedback').attr('disabled', 'disabled');
|
248 |
+
}
|
249 |
+
});
|
250 |
+
|
251 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper input[type="radio"][name="wpb-sdk_deactivation-frm-selected-reason"]').on('click', function(event) {
|
252 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-allow-deactivate").removeAttr('disabled');
|
253 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-skip-feedback").removeAttr('disabled');
|
254 |
+
});
|
255 |
+
|
256 |
+
$(document).on('submit', '.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-deactivate-form', function(event) {
|
257 |
+
event.preventDefault();
|
258 |
+
var reason = $(this).find('input[type="radio"][name="wpb-sdk_deactivation-frm-selected-reason"]:checked').val();
|
259 |
+
var reasonDetails = '';
|
260 |
+
if(reason == '2') {
|
261 |
+
reasonDetails = $(this).find("input[type='text'][name='better_plugin']").val();
|
262 |
+
} else if(reason == '7') {
|
263 |
+
reasonDetails = $(this).find("input[type='text'][name='other_reason']").val();
|
264 |
+
}
|
265 |
+
if((reason == '7' || reason == '2') && reasonDetails == '') {
|
266 |
+
$('.message.error-message').show();
|
267 |
+
return;
|
268 |
+
}
|
269 |
+
|
270 |
+
let returnURL = $("tr[data-slug='" + pluginSlug + "'] .deactivate a").attr('href');
|
271 |
+
|
272 |
+
send_log(
|
273 |
+
'wpb_sdk_' + pluginSlug + '_deactivation',
|
274 |
+
reason,
|
275 |
+
reasonDetails,
|
276 |
+
loggerDeactiveNonce,
|
277 |
+
returnURL
|
278 |
+
);
|
279 |
+
|
280 |
+
});
|
281 |
+
|
282 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-skip-feedback').on('click', function(e) {
|
283 |
+
send_log(
|
284 |
+
'wpb_sdk_' + pluginSlug + '_deactivation',
|
285 |
+
9,
|
286 |
+
'',
|
287 |
+
loggerDeactiveNonce,
|
288 |
+
$("tr[data-slug='" + pluginSlug + "'] .deactivate a").attr('href')
|
289 |
+
);
|
290 |
+
});
|
291 |
+
|
292 |
+
function close_popup() {
|
293 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-overlay').removeClass('wpb-sdk_deactivation-frm-active');
|
294 |
+
$('.<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-deactivate-form').trigger("reset");
|
295 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-allow-deactivate").attr('disabled', 'disabled');
|
296 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-reason-input").hide();
|
297 |
+
$('body').removeClass('wpb-sdk_deactivation-frm-hidden');
|
298 |
+
$('.message.error-message').hide();
|
299 |
+
}
|
300 |
+
|
301 |
+
function send_log( _action, _reason, _reasonDetails, _nonce, returnURL ) {
|
302 |
+
$.ajax({
|
303 |
+
url: ajaxurl,
|
304 |
+
type: 'POST',
|
305 |
+
data: {
|
306 |
+
action: _action,
|
307 |
+
reason: _reason,
|
308 |
+
reason_detail: _reasonDetails,
|
309 |
+
nonce: _nonce
|
310 |
+
},
|
311 |
+
beforeSend: function() {
|
312 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-spinner").show();
|
313 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-allow-deactivate").attr("disabled", "disabled");
|
314 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-skip-feedback").attr("disabled", "disabled");
|
315 |
+
}
|
316 |
+
}).done(function(res) {
|
317 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-spinner").hide();
|
318 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-allow-deactivate").removeAttr("disabled");
|
319 |
+
$(".<?php echo $product_slug; ?>-deactivate-wrapper .wpb-sdk_deactivation-frm-popup-skip-feedback").removeAttr("disabled");
|
320 |
+
window.location.href = returnURL;
|
321 |
+
});
|
322 |
+
}
|
323 |
+
|
324 |
+
});
|
325 |
+
})(jQuery);
|
326 |
+
});
|
327 |
+
</script>
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://wpbrigade.com/
|
|
4 |
Tags: easy related posts, Related Posts thumbnails, Free Related Posts, related posts, similar related posts
|
5 |
Requires at least: 3.6
|
6 |
Tested up to: 5.9
|
7 |
-
Stable tag: 2.0.
|
8 |
License: GPLv3 or later
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -76,6 +76,10 @@ If there are no images of the specified size in the post, or file does not exist
|
|
76 |
|
77 |
== Changelog ==
|
78 |
|
|
|
|
|
|
|
|
|
79 |
= 2.0.0 - 2022-03-22 =
|
80 |
* New Feature: Introducing date feature with 7 type of date format.
|
81 |
* Enhancement: Added a filter `rpt_custom_relationship` to get posts from multiple custom post types with same term slug.
|
4 |
Tags: easy related posts, Related Posts thumbnails, Free Related Posts, related posts, similar related posts
|
5 |
Requires at least: 3.6
|
6 |
Tested up to: 5.9
|
7 |
+
Stable tag: 2.0.1
|
8 |
License: GPLv3 or later
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
76 |
|
77 |
== Changelog ==
|
78 |
|
79 |
+
= 2.0.1 - 2022-04-18 =
|
80 |
+
* BugFix: The image wasn't displaying with {custom field name} setting.
|
81 |
+
* Enhancement: Code refactoring.
|
82 |
+
|
83 |
= 2.0.0 - 2022-03-22 =
|
84 |
* New Feature: Introducing date feature with 7 type of date format.
|
85 |
* Enhancement: Added a filter `rpt_custom_relationship` to get posts from multiple custom post types with same term slug.
|
related-posts-thumbnails.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: WordPress Related Posts Thumbnails
|
4 |
* Plugin URI: https://wpbrigade.com/wordpress/plugins/related-posts/?utm_source=related-posts-lite&utm_medium=plugin-uri&utm_campaign=pro-upgrade-rp
|
5 |
* Description: Showing related posts thumbnails under the posts.
|
6 |
-
* Version: 2.0.
|
7 |
* Author: WPBrigade
|
8 |
* Author URI: https://WPBrigade.com/?utm_source=related-posts-lite&utm_medium=author-link&utm_campaign=pro-upgrade-rp
|
9 |
*/
|
@@ -53,7 +53,7 @@ class RelatedPostsThumbnails {
|
|
53 |
public $post_types = array( 'post' );
|
54 |
public $custom_taxonomies = array();
|
55 |
protected $wp_kses_rp_args = array( 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), 'strong' => array() );
|
56 |
-
|
57 |
/**
|
58 |
* Function Constructor
|
59 |
*/
|
@@ -64,6 +64,55 @@ class RelatedPostsThumbnails {
|
|
64 |
load_plugin_textdomain( 'related-posts-thumbnails', false, basename( dirname( __FILE__ ) ) . '/locale' );
|
65 |
$this->default_image = esc_url( plugins_url( 'img/default.png', __FILE__ ) );
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
68 |
|
69 |
// Compatibility for old default image path.
|
@@ -89,9 +138,6 @@ class RelatedPostsThumbnails {
|
|
89 |
|
90 |
$this->wp_version = get_bloginfo( 'version' );
|
91 |
|
92 |
-
add_action( 'admin_footer', array( $this, 'add_deactive_modal' ) );
|
93 |
-
add_action( 'wp_ajax_rpt_deactivate', array( $this, 'rpt_deactivate' ) );
|
94 |
-
|
95 |
add_action( 'admin_init', array( $this, 'review_notice' ) );
|
96 |
add_action( 'wp_enqueue_scripts', array( $this, 'front_scripts' ) );
|
97 |
|
@@ -211,73 +257,6 @@ class RelatedPostsThumbnails {
|
|
211 |
define( 'RELATED_POSTS_THUMBNAILS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
212 |
}
|
213 |
|
214 |
-
/**
|
215 |
-
* Show the popup modal on plugin deactivate
|
216 |
-
*
|
217 |
-
* @since 1.6.2
|
218 |
-
*/
|
219 |
-
function add_deactive_modal() {
|
220 |
-
global $pagenow;
|
221 |
-
|
222 |
-
if ( 'plugins.php' !== $pagenow ) {
|
223 |
-
return;
|
224 |
-
}
|
225 |
-
|
226 |
-
include RELATED_POSTS_THUMBNAILS_PLUGIN_DIR . 'inc/rpt-deactivate-form.php';
|
227 |
-
}
|
228 |
-
|
229 |
-
|
230 |
-
/**
|
231 |
-
* Send the deactivate user response to api.
|
232 |
-
*
|
233 |
-
* @since 1.6.2
|
234 |
-
*/
|
235 |
-
function rpt_deactivate() {
|
236 |
-
$email = get_option( 'admin_email' );
|
237 |
-
$_reason = sanitize_text_field( wp_unslash( $_POST[ 'reason' ] ) );
|
238 |
-
$reason_detail = sanitize_text_field( wp_unslash( $_POST[ 'reason_detail' ] ) );
|
239 |
-
$reason = '';
|
240 |
-
|
241 |
-
if ( $_reason == '1' ) {
|
242 |
-
$reason = 'I only needed the plugin for a short period';
|
243 |
-
} elseif ( $_reason == '2' ) {
|
244 |
-
$reason = 'I found a better plugin';
|
245 |
-
} elseif ( $_reason == '3' ) {
|
246 |
-
$reason = 'The plugin broke my site';
|
247 |
-
} elseif ( $_reason == '4' ) {
|
248 |
-
$reason = 'The plugin suddenly stopped working';
|
249 |
-
} elseif ( $_reason == '5' ) {
|
250 |
-
$reason = 'I no longer need the plugin';
|
251 |
-
} elseif ( $_reason == '6' ) {
|
252 |
-
$reason = 'It\'s a temporary deactivation. I\'m just debugging an issue.';
|
253 |
-
} elseif ( $_reason == '7' ) {
|
254 |
-
$reason = 'Other';
|
255 |
-
}
|
256 |
-
$fields = array(
|
257 |
-
'email' => $email,
|
258 |
-
'website' => get_site_url(),
|
259 |
-
'action' => 'Deactivate',
|
260 |
-
'reason' => $reason,
|
261 |
-
'reason_detail' => $reason_detail,
|
262 |
-
'blog_language' => get_bloginfo( 'language' ),
|
263 |
-
'wordpress_version' => get_bloginfo( 'version' ),
|
264 |
-
'php_version' => PHP_VERSION,
|
265 |
-
'plugin_version' => RELATED_POSTS_THUMBNAILS_VERSION,
|
266 |
-
'plugin_name' => 'Related Post Thumbnails'
|
267 |
-
);
|
268 |
-
|
269 |
-
$response = wp_remote_post( RELATED_POSTS_THUMBNAILS_FEEDBACK_SERVER, array(
|
270 |
-
'method' => 'POST',
|
271 |
-
'timeout' => 5,
|
272 |
-
'httpversion' => '1.0',
|
273 |
-
'blocking' => false,
|
274 |
-
'headers' => array(),
|
275 |
-
'body' => $fields
|
276 |
-
) );
|
277 |
-
|
278 |
-
wp_die();
|
279 |
-
}
|
280 |
-
|
281 |
/**
|
282 |
* Check either to show notice or not.
|
283 |
*
|
@@ -771,7 +750,6 @@ class RelatedPostsThumbnails {
|
|
771 |
if ( $thsource == 'custom-field' ) {
|
772 |
$custom_field = get_option( 'relpoststh_customfield', $this->custom_field );
|
773 |
$custom_field_meta = get_post_meta( $post->ID, $custom_field, true );
|
774 |
-
|
775 |
if ( empty( $custom_field ) ) {
|
776 |
$debug .= 'No custom field specifield, using default thumbnail image;';
|
777 |
$url = $this->default_image;
|
@@ -783,7 +761,7 @@ class RelatedPostsThumbnails {
|
|
783 |
$url = $this->default_image;
|
784 |
} else {
|
785 |
$debug .= 'Using custom field;';
|
786 |
-
$url = $custom_field_meta;
|
787 |
$theme_resize_url = get_option( 'relpoststh_theme_resize_url', '' );
|
788 |
|
789 |
if ( strpos( $url, '/wp-content' ) !== false ) {
|
@@ -1219,21 +1197,40 @@ class RelatedPostsThumbnails {
|
|
1219 |
|
1220 |
<?php
|
1221 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1222 |
}
|
1223 |
|
1224 |
-
//End Class
|
1225 |
/**
|
1226 |
-
*
|
1227 |
-
*
|
|
|
|
|
1228 |
*/
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
|
|
1233 |
|
|
|
1234 |
global $related_posts_thumbnails;
|
1235 |
-
|
1236 |
-
|
1237 |
|
1238 |
// Include Widget File.
|
1239 |
include_once plugin_dir_path( __FILE__ ) . 'inc/rpt-widget.php';
|
3 |
* Plugin Name: WordPress Related Posts Thumbnails
|
4 |
* Plugin URI: https://wpbrigade.com/wordpress/plugins/related-posts/?utm_source=related-posts-lite&utm_medium=plugin-uri&utm_campaign=pro-upgrade-rp
|
5 |
* Description: Showing related posts thumbnails under the posts.
|
6 |
+
* Version: 2.0.1
|
7 |
* Author: WPBrigade
|
8 |
* Author URI: https://WPBrigade.com/?utm_source=related-posts-lite&utm_medium=author-link&utm_campaign=pro-upgrade-rp
|
9 |
*/
|
53 |
public $post_types = array( 'post' );
|
54 |
public $custom_taxonomies = array();
|
55 |
protected $wp_kses_rp_args = array( 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), 'strong' => array() );
|
56 |
+
protected static $instance = null;
|
57 |
/**
|
58 |
* Function Constructor
|
59 |
*/
|
64 |
load_plugin_textdomain( 'related-posts-thumbnails', false, basename( dirname( __FILE__ ) ) . '/locale' );
|
65 |
$this->default_image = esc_url( plugins_url( 'img/default.png', __FILE__ ) );
|
66 |
|
67 |
+
include_once RELATED_POSTS_THUMBNAILS_PLUGIN_DIR . '/lib/wpb-sdk/init.php';
|
68 |
+
new RPT_WPB_SDK\Logger( array(
|
69 |
+
'name' => 'Related Posts Thumbnails Plugin for WordPress',
|
70 |
+
'slug' => 'related-posts-thumbnails',
|
71 |
+
'path' => __FILE__,
|
72 |
+
'version' => RELATED_POSTS_THUMBNAILS_VERSION,
|
73 |
+
'license' => '',
|
74 |
+
'settings' => array(
|
75 |
+
'relpoststh_default_image' => false,
|
76 |
+
'rpt_active_time' => false,
|
77 |
+
'relpoststh_single_only' => false,
|
78 |
+
'relpoststh_mobile_view' => false,
|
79 |
+
'relpoststh_post_types' => false,
|
80 |
+
'relpoststh_onlywiththumbs' => false,
|
81 |
+
'relpoststh_output_style' => false,
|
82 |
+
'relpoststh_cleanhtml' => false,
|
83 |
+
'relpoststh_auto' => false,
|
84 |
+
'relpoststh_top_text' => false,
|
85 |
+
'relpoststh_number' => false,
|
86 |
+
'relpoststh_relation' => false,
|
87 |
+
'relpoststh_default_image' => false,
|
88 |
+
'relpoststh_poststhname' => false,
|
89 |
+
'relpoststh_background' => false,
|
90 |
+
'relpoststh_hoverbackground' => false,
|
91 |
+
'relpoststh_bordercolor' => false,
|
92 |
+
'relpoststh_fontcolor' => false,
|
93 |
+
'relpoststh_fontsize' => false,
|
94 |
+
'relpoststh_fontfamily' => false,
|
95 |
+
'relpoststh_textlength' => false,
|
96 |
+
'relpoststh_excerptlength' => false,
|
97 |
+
'relpoststh_thsource' => false,
|
98 |
+
'relpoststh_customfield' => false,
|
99 |
+
'relpoststh_theme_resize_url' => false,
|
100 |
+
'relpoststh_customwidth' => false,
|
101 |
+
'relpoststh_customheight' => false,
|
102 |
+
'relpoststh_textblockheight' => false,
|
103 |
+
'relpoststh_customwidth' => false,
|
104 |
+
'rpt_post_sort' => false,
|
105 |
+
'relpoststh_categories' => false,
|
106 |
+
'relpoststh_categoriesall' => false,
|
107 |
+
'relpoststh_show_categoriesall' => false,
|
108 |
+
'relpoststh_show_categories' => false,
|
109 |
+
'relpoststh_devmode' => false,
|
110 |
+
'relpoststh_startdate' => false,
|
111 |
+
'relpoststh_custom_taxonomies' => false,
|
112 |
+
|
113 |
+
),
|
114 |
+
) );
|
115 |
+
|
116 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
117 |
|
118 |
// Compatibility for old default image path.
|
138 |
|
139 |
$this->wp_version = get_bloginfo( 'version' );
|
140 |
|
|
|
|
|
|
|
141 |
add_action( 'admin_init', array( $this, 'review_notice' ) );
|
142 |
add_action( 'wp_enqueue_scripts', array( $this, 'front_scripts' ) );
|
143 |
|
257 |
define( 'RELATED_POSTS_THUMBNAILS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
258 |
}
|
259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
/**
|
261 |
* Check either to show notice or not.
|
262 |
*
|
750 |
if ( $thsource == 'custom-field' ) {
|
751 |
$custom_field = get_option( 'relpoststh_customfield', $this->custom_field );
|
752 |
$custom_field_meta = get_post_meta( $post->ID, $custom_field, true );
|
|
|
753 |
if ( empty( $custom_field ) ) {
|
754 |
$debug .= 'No custom field specifield, using default thumbnail image;';
|
755 |
$url = $this->default_image;
|
761 |
$url = $this->default_image;
|
762 |
} else {
|
763 |
$debug .= 'Using custom field;';
|
764 |
+
$url = isset( wp_get_attachment_image_src( $custom_field_meta )[0] ) ? wp_get_attachment_image_src( $custom_field_meta )[0] : $this->default_image;
|
765 |
$theme_resize_url = get_option( 'relpoststh_theme_resize_url', '' );
|
766 |
|
767 |
if ( strpos( $url, '/wp-content' ) !== false ) {
|
1197 |
|
1198 |
<?php
|
1199 |
}
|
1200 |
+
|
1201 |
+
/**
|
1202 |
+
* Main Instance
|
1203 |
+
*
|
1204 |
+
* @since 2.0.1
|
1205 |
+
* @static
|
1206 |
+
* @see related_posts_thumbnails_loader()
|
1207 |
+
* @return Main instance
|
1208 |
+
*/
|
1209 |
+
public static function instance() {
|
1210 |
+
|
1211 |
+
if ( is_null( self::$instance ) ) {
|
1212 |
+
self::$instance = new self();
|
1213 |
+
}
|
1214 |
+
return self::$instance;
|
1215 |
+
}
|
1216 |
}
|
1217 |
|
|
|
1218 |
/**
|
1219 |
+
* Returns the main instance of WP to prevent the need to use globals.
|
1220 |
+
*
|
1221 |
+
* @since 2.0.1
|
1222 |
+
* @return RelatedPostsThumbnails instance
|
1223 |
*/
|
1224 |
+
if ( ! function_exists('related_posts_thumbnails_loader') ) {
|
1225 |
+
function related_posts_thumbnails_loader() {
|
1226 |
+
return RelatedPostsThumbnails::instance();
|
1227 |
+
}
|
1228 |
+
}
|
1229 |
|
1230 |
+
// Call the function.
|
1231 |
global $related_posts_thumbnails;
|
1232 |
+
$related_posts_thumbnails = related_posts_thumbnails_loader();
|
1233 |
+
|
1234 |
|
1235 |
// Include Widget File.
|
1236 |
include_once plugin_dir_path( __FILE__ ) . 'inc/rpt-widget.php';
|