PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.1
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
← All changes | vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +387 -497 3.10.133.2.1 View file →
@@ -11,9 +11,8 @@
11 11
12 12 namespace ThemeisleSDK\Modules;
13 13
14 14 use ThemeisleSDK\Common\Abstract_Module;
15 -use ThemeisleSDK\Loader;
16 15 use ThemeisleSDK\Product;
17 16
18 17 // Exit if accessed directly.
19 18 if ( ! defined( 'ABSPATH' ) ) {
@@ -40,9 +39,9 @@
40 39 * Where to send the data.
41 40 *
42 41 * @var string Endpoint url.
43 42 */
44 - const FEEDBACK_ENDPOINT = 'https://api.themeisle.com/tracking/uninstall';
43 + const FEEDBACK_ENDPOINT = 'http://feedback.themeisle.com/wordpress/wp-json/__pirate_feedback_/v1/feedback';
45 44
46 45 /**
47 46 * Default options for plugins.
48 47 *
@@ -48,24 +47,23 @@
48 47 *
49 48 * @var array $options_plugin The main options list for plugins.
50 49 */
51 50 private $options_plugin = array(
52 - 'id3' => array(
53 - 'id' => 3,
54 - 'type' => 'text',
55 -
51 + 'I found a better plugin' => array(
52 + 'id' => 3,
53 + 'type' => 'text',
54 + 'placeholder' => 'What\'s the plugin\'s name?',
56 55 ),
57 - 'id4' => array(
58 - 'type' => 'textarea',
59 - 'id' => 4,
56 + 'I could not get the plugin to work' => array(
57 + 'id' => 4,
60 58 ),
61 - 'id5' => array(
62 - 'id' => 5,
63 - 'type' => 'textarea',
59 + 'I no longer need the plugin' => array(
60 + 'id' => 5,
61 + 'type' => 'textarea',
62 + 'placeholder' => 'If you could improve one thing about our product, what would it be?',
64 63 ),
65 - 'id6' => array(
66 - 'type' => 'textarea',
67 - 'id' => 6,
64 + 'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
65 + 'id' => 6,
68 66 ),
69 67 );
70 68 /**
71 69 * Default options for theme.
@@ -72,23 +70,21 @@
72 70 *
73 71 * @var array $options_theme The main options list for themes.
74 72 */
75 73 private $options_theme = array(
76 - 'id7' => array(
74 + 'I don\'t know how to make it look like demo' => array(
77 75 'id' => 7,
78 76 ),
79 - 'id8' => array(
80 - 'type' => 'text',
81 - 'id' => 8,
77 + 'It lacks options' => array(
78 + 'id' => 8,
82 79 ),
83 - 'id9' => array(
84 - 'id' => 9,
85 - 'type' => 'text',
80 + 'Is not working with a plugin that I need' => array(
81 + 'id' => 9,
82 + 'type' => 'text',
83 + 'placeholder' => 'What is the name of the plugin',
86 84 ),
87 - 'id10' => array(
88 -
89 - 'title' => '',
90 - 'id' => 10,
85 + 'I want to try a new design, I don\'t like {theme} style' => array(
86 + 'id' => 10,
91 87 ),
92 88 );
93 89 /**
94 90 * Default other option.
@@ -95,609 +91,510 @@
95 91 *
96 92 * @var array $other The other option
97 93 */
98 94 private $other = array(
99 - 'id999' => array(
100 - 'id' => 999,
101 - 'type' => 'textarea',
95 + 'Other' => array(
96 + 'id' => 999,
97 + 'type' => 'textarea',
98 + 'placeholder' => 'cmon cmon tell us',
102 99 ),
103 100 );
101 + /**
102 + * Default heading for plugin.
103 + *
104 + * @var string $heading_plugin The heading of the modal
105 + */
106 + private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us feedback.</span>';
107 + /**
108 + * Default heading for theme.
109 + *
110 + * @var string $heading_theme The heading of the modal
111 + */
112 + private $heading_theme = 'Looking to change {theme}? <span> What does not work for you?</span>';
113 + /**
114 + * Default submit button action text.
115 + *
116 + * @var string $button_submit The text of the deactivate button
117 + */
118 + private $button_submit = 'Submit &amp; Deactivate';
119 + /**
120 + * Default cancel button.
121 + *
122 + * @var string $button_cancel The text of the cancel button
123 + */
124 + private $button_cancel = 'Skip &amp; Deactivate';
104 125
105 126 /**
106 127 * Loads the additional resources
107 128 */
108 - public function load_resources() {
109 - $screen = get_current_screen();
129 + function load_resources() {
130 + add_thickbox();
110 131
111 - if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
112 - return;
113 - }
132 + $id = $this->product->get_key() . '_deactivate';
114 133
115 - $this->add_feedback_popup_style();
134 + $this->add_css( $this->product->get_type(), $this->product->get_key() );
135 + $this->add_js( $this->product->get_type(), $this->product->get_key(), '#TB_inline?' . apply_filters( $this->product->get_key() . '_feedback_deactivate_attributes', 'width=600&height=550' ) . '&inlineId=' . $id );
116 136
117 - if ( $this->product->get_type() === 'theme' ) {
118 - $this->add_theme_feedback_drawer_js();
119 - $this->render_theme_feedback_popup();
120 -
121 - return;
122 - }
123 - $this->add_plugin_feedback_popup_js();
124 - $this->render_plugin_feedback_popup();
137 + echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
125 138 }
126 139
127 140 /**
128 - * Render theme feedback drawer.
141 + * Loads the css
142 + *
143 + * @param string $type The type of product.
144 + * @param string $key The product key.
129 145 */
130 - private function render_theme_feedback_popup() {
131 - $heading = str_replace( '{theme}', $this->product->get_name(), Loader::$labels['uninstall']['heading_theme'] );
132 - $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', Loader::$labels['uninstall']['submit'] );
133 - $options = $this->options_theme;
134 - $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
135 - $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', Loader::$labels['uninstall']['cta_info'] ) . '</a>';
136 -
137 - $options += $this->other;
138 -
146 + function add_css( $type, $key ) {
147 + $key = esc_attr( $key );
148 + $suffix = Product::THEME_TYPE === $type ? 'theme-install-php' : 'plugins-php';
149 + $icon = esc_attr( apply_filters( $this->product->get_slug() . '_uninstall_feedback_icon', '' ) );
150 + if ( empty( $icon ) ) {
151 + $icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDNkVDM0M4RkYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDNkVDM0M5MEYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM2RUMzQzhERjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM2RUMzQzhFRjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KBNOswAAFtFJREFUeNrkWwmUXVWV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';
152 + }
139 153 ?>
140 - <div class="ti-theme-uninstall-feedback-drawer ti-feedback">
141 - <div class="popup--header">
142 - <h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
143 - <button class="toggle"><span>&times;</span></button>
144 - </div><!--/.popup--header-->
145 - <div class="popup--body">
146 - <?php $this->render_options_list( $options ); ?>
147 - </div><!--/.popup--body-->
148 - <div class="popup--footer">
149 - <div class="actions">
150 - <?php
151 - echo wp_kses_post( $info_disclosure_link );
152 - echo wp_kses_post( $this->get_disclosure_labels() );
153 - echo '<div class="buttons">';
154 - echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function has an internal sanitization.
155 - $button_submit,
156 - 'secondary',
157 - $this->product->get_key() . 'ti-deactivate-yes',
158 - false,
159 - array(
160 - 'data-after-text' => $button_submit,
161 - 'disabled' => true,
162 - )
163 - );
164 - echo '</div>';
165 - ?>
166 - </div><!--/.actions-->
167 - </div><!--/.popup--footer-->
168 - </div>
169 - <?php
170 - }
154 + <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
155 + input[name="ti-deactivate-option"] ~ div {
156 + display: none;
157 + }
171 158
172 - /**
173 - * Add feedback styles.
174 - */
175 - private function add_feedback_popup_style() {
176 - ?>
177 - <style>
178 - .ti-feedback {
179 - background: #fff;
180 - max-width: 400px;
181 - z-index: 10000;
182 - box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
183 - transition: all .3s ease-out;
159 + input[name="ti-deactivate-option"]:checked ~ div {
160 + display: block;
184 161 }
185 162
186 -
187 - .ti-feedback .popup--header {
188 - position: relative;
189 - background-color: #23A1CE;
163 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
164 + background: none !important;
190 165 }
191 166
192 - .ti-feedback .popup--header h5 {
193 - margin: 0;
194 - font-size: 16px;
195 - padding: 15px;
196 - color: #fff;
197 - font-weight: 600;
198 - text-align: center;
199 - letter-spacing: .3px;
167 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
168 + background: url('<?php echo $icon; ?>') 40px 30px no-repeat;
169 + border: none;
170 + box-sizing: border-box;
171 + color: #373e40;
172 + font-size: 24px;
173 + font-weight: 700;
174 + height: 90px;
175 + padding: 40px 40px 0 120px;
176 + text-transform: uppercase;
177 + width: 100%;
200 178 }
201 179
202 - .ti-feedback .popup--body {
203 - padding: 15px;
180 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul i {
181 + padding-left: 5px;
182 + margin: 0 1px;
204 183 }
205 184
206 - .ti-feedback .popup--form {
185 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul strong {
186 + width: 125px;
187 + display: block;
207 188 margin: 0;
208 - font-size: 13px;
189 + float: left;
209 190 }
210 191
211 - .ti-feedback .popup--form input[type="radio"] {
212 - <?php echo is_rtl() ? 'margin: 0 0 0 10px;' : 'margin: 0 10px 0 0;'; ?>
192 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul {
193 + margin-left: 39px;
194 + margin-top: 2px;
195 + padding-top: 0px;
213 196 }
214 197
215 - .ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
216 - display: block;
198 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content p {
199 + font-style: italic;
200 + margin-bottom: 0px;
217 201 }
218 202
219 - .ti-feedback .popup--form textarea {
220 - width: 100%;
221 - margin: 10px 0 0;
203 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content {
222 204 display: none;
223 - max-height: 150px;
224 205 }
206 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure-content {
207 + display: block;
208 + position:absolute;
209 + bottom: 100px;
210 + }
225 211
226 - .ti-feedback li {
227 - display: flex;
228 - align-items: center;
229 - margin-bottom: 15px;
230 - flex-wrap: wrap;
212 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure {
213 + top: -130px;
231 214 }
232 215
233 - .ti-feedback li label {
234 - max-width: 90%;
216 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open {
217 + height: 590px !important;
235 218 }
219 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure {
220 + position: absolute;
221 + top: -50px;
222 + font-size: 13px;
223 + color: #8d9192;
224 + font-weight: 400;
225 + right: 40px;
226 + }
236 227
237 - .ti-feedback li:last-child {
238 - margin-bottom: 0;
228 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
229 + box-sizing: border-box;
230 + padding: 30px 40px;
231 + background-color: #eaeaea;
239 232 }
240 233
241 - .ti-feedback .popup--footer {
242 - padding: 0 15px 15px;
234 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
235 + background: #ec5d60;
236 + border: none;
237 + box-shadow: none;
238 + color: #ffffff;
239 + font-size: 15px;
240 + font-weight: 700;
241 + height: auto;
242 + line-height: 20px;
243 + padding: 10px 15px;
244 + text-transform: uppercase;
245 + -webkit-transition: 0.3s ease;
246 + -moz-transition: 0.3s ease;
247 + -ms-transition: 0.3s ease;
248 + -o-transition: 0.3s ease;
249 + transition: 0.3s ease;
243 250 }
244 251
245 - .ti-feedback .actions {
246 - display: flex;
247 - flex-wrap: wrap;
252 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
253 + background: transparent;
254 + box-shadow: none;
255 + color: #8d9192;
256 + font-weight: 400;
257 + float: right;
258 + line-height: 40px;
259 + padding: 0;
260 + text-decoration: underline;
261 + text-shadow: none;
262 + text-transform: none;
248 263 }
249 264
250 - .info-disclosure-link {
251 - width: 100%;
252 - margin-bottom: 15px;
265 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
266 + background: #e83f42;
253 267 }
254 268
255 - .ti-feedback .info-disclosure-content {
256 - max-height: 0;
257 - overflow: hidden;
258 - width: 100%;
259 - transition: .3s ease;
269 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
270 + background: transparent;
260 271 }
261 272
262 - .ti-feedback .info-disclosure-content.active {
263 - max-height: 300px;
273 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
274 + box-shadow: none;
275 + outline: none;
264 276 }
265 277
266 - .ti-feedback .info-disclosure-content p {
267 - margin: 0;
278 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
279 + box-shadow: none;
280 + transform: translateY(0);
268 281 }
269 282
270 - .ti-feedback .info-disclosure-content ul {
271 - margin: 10px 0;
272 - border-radius: 3px;
283 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
284 + cursor: not-allowed;
273 285 }
274 286
275 - .ti-feedback .info-disclosure-content ul li {
276 - display: flex;
277 - align-items: center;
278 - justify-content: space-between;
279 - margin-bottom: 0;
280 - padding: 5px 0;
281 - border-bottom: 1px solid #ccc;
287 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
288 + text-decoration: none;
282 289 }
283 290
284 - .ti-feedback .buttons {
285 - display: flex;
286 - width: 100%;
291 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
292 + background-color: #ffffff;
287 293 }
288 294
289 - .ti-feedback .buttons input:last-child {
290 - <?php echo is_rtl() ? 'margin-right: auto;' : 'margin-left: auto;'; ?>
295 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
296 + margin: 0;
291 297 }
292 298
293 - .ti-theme-uninstall-feedback-drawer {
294 - border-top-left-radius: 5px;
295 - position: fixed;
296 - top: 100%;
297 - right: 15px;
299 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
300 + color: #373e40;
301 + font-size: 13px;
302 + margin-bottom: 5px;
298 303 }
299 304
300 - .ti-theme-uninstall-feedback-drawer.active {
301 - transform: translateY(-100%);
305 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
306 + margin-left: 10px;
307 + line-height: 28px;
308 + font-size: 15px;
302 309 }
303 310
304 - .ti-theme-uninstall-feedback-drawer .popup--header {
305 - border-top-left-radius: 5px;
311 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
312 + margin-top: 1px;
306 313 }
307 314
308 - .ti-theme-uninstall-feedback-drawer .popup--header .toggle {
309 - position: absolute;
310 - padding: 3px 0;
311 - width: 30px;
312 - top: -26px;
313 - right: 0;
314 - cursor: pointer;
315 - border-top-left-radius: 5px;
316 - border-top-right-radius: 5px;
317 - font-size: 20px;
318 - background-color: #23A1CE;
319 - color: #fff;
320 - border: none;
321 - line-height: 20px;
315 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
316 + box-sizing: border-box;
317 + height: auto !important;
318 + padding: 20px 40px;
319 + width: 100% !important;
322 320 }
323 321
324 - .ti-theme-uninstall-feedback-drawer .toggle span {
325 - margin: 0;
326 - display: inline-block;
322 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
323 + padding: 10px 15px;
324 + width: 100%;
327 325 }
328 326
329 - .ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
330 - transform: rotate(45deg);
327 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
328 + margin: 10px 30px;
331 329 }
332 330
333 - .ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
334 - background-color: #1880a5;
331 + .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
332 + box-sizing: border-box;
333 + display: block;
334 + float: none;
335 + font-weight: 700;
336 + line-height: 1;
337 + padding: 0;
338 + text-align: left;
339 + width: 100%;
335 340 }
336 341
342 + .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
343 + color: #8d9192;
344 + display: block;
345 + font-size: 15px;
346 + font-weight: 400;
347 + margin-top: 5px;
348 + text-transform: none;
349 + }
337 350
338 - .ti-plugin-uninstall-feedback-popup .popup--header:before {
339 - content: "";
351 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
352 + width: 100%;
340 353 display: block;
341 354 position: absolute;
342 - top: 50%;
343 - transform: translateY(-50%);
344 - <?php
345 - echo is_rtl() ?
346 - 'right: -10px;
347 - border-top: 20px solid transparent;
348 - border-left: 20px solid #23A1CE;
349 - border-bottom: 20px solid transparent;' :
350 - 'left: -10px;
351 - border-top: 20px solid transparent;
352 - border-right: 20px solid #23A1CE;
353 - border-bottom: 20px solid transparent;';
354 - ?>
355 + left: 0;
356 + bottom: 0;
355 357 }
356 358
357 - .ti-plugin-uninstall-feedback-popup {
358 - display: none;
359 - position: absolute;
360 - white-space: normal;
361 - width: 400px;
362 - <?php echo is_rtl() ? 'right: calc( 100% + 15px );' : 'left: calc( 100% + 15px );'; ?> top: -15px;
359 + .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
360 + font-size: 32px;
363 361 }
364 362
365 - .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
366 - animation: rotation 2s infinite linear;
367 - display: block;
368 - float: none;
369 - align-items: center;
370 - width: 100%;
371 - margin: 0 auto;
372 - height: 100%;
373 - background: transparent;
374 - padding: 0;
363 + .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
364 + color: #eee;
375 365 }
376 366
377 - .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
378 - padding: 0;
379 - background: transparent;
380 - box-shadow: none;
381 - color: #b4b9be
367 + .<?php echo $key; ?>-container #TB_closeWindowButton {
368 + left: auto;
369 + right: -5px;
370 + top: -35px;
371 + color: #eee;
382 372 }
383 373
384 -
385 - .ti-plugin-uninstall-feedback-popup.active {
386 - display: block;
374 + .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
375 + text-align: right;
376 + line-height: 25px;
377 + width: 25px;
378 + height: 25px;
387 379 }
388 380
389 - tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>"] .deactivate {
390 - position: relative;
381 + .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
382 + box-shadow: none;
383 + outline: none;
391 384 }
392 385
393 - body.ti-feedback-open .ti-feedback-overlay {
394 - content: "";
395 - display: block;
396 - background-color: rgba(0, 0, 0, 0.5);
397 - top: 0;
398 - bottom: 0;
399 - right: 0;
400 - left: 0;
401 - z-index: 10000;
402 - position: fixed;
386 + .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
387 + font: normal 25px dashicons;
403 388 }
404 389
405 - @media (max-width: 768px) {
406 - .ti-plugin-uninstall-feedback-popup {
407 - position: fixed;
408 - max-width: 100%;
409 - margin: 0 auto;
410 - left: 50%;
411 - top: 50px;
412 - transform: translateX(-50%);
413 - }
414 -
415 - .ti-plugin-uninstall-feedback-popup .popup--header:before {
416 - display: none;
417 - }
390 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
391 + margin: auto !important;
392 + height: 500px !important;
393 + top: 0 !important;
394 + left: 0 !important;
395 + bottom: 0 !important;
396 + right: 0 !important;
397 + width: 600px !important;
418 398 }
419 399 </style>
420 400 <?php
401 + do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
421 402 }
422 403
423 404 /**
424 - * Theme feedback drawer JS.
405 + * Loads the js.
406 + *
407 + * @param string $type The type of product.
408 + * @param string $key The product key.
409 + * @param string $src The url that will hijack the deactivate button url.
425 410 */
426 - private function add_theme_feedback_drawer_js() {
427 - $key = $this->product->get_key();
411 + function add_js( $type, $key, $src ) {
412 + $heading = Product::PLUGIN_TYPE === $type ? $this->heading_plugin : str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
413 + $key = esc_attr( $key );
414 + $heading = apply_filters( $this->product->get_key() . '_feedback_deactivate_heading', $heading );
428 415 ?>
429 416 <script type="text/javascript" id="ti-deactivate-js">
430 417 (function ($) {
431 418 $(document).ready(function () {
432 - setTimeout(function () {
433 - $('.ti-theme-uninstall-feedback-drawer').addClass('active');
434 - }, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );
419 + var auto_trigger = false;
420 + var target_element = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
421 + <?php
422 + if ( 'theme' === $type ) {
423 + ?>
424 + auto_trigger = true;
425 + if ($('a.ti-auto-anchor').length == 0) {
426 + $('body').append($('<a class="ti-auto-anchor" href=""></a>'));
427 + }
428 + target_element = 'a.ti-auto-anchor';
429 + <?php
430 + }
431 + ?>
435 432
436 - $('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
433 + if (auto_trigger) {
434 + setTimeout(function () {
435 + $('a.ti-auto-anchor').trigger('click');
436 + }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
437 + }
438 + $(document).on('thickbox:removed', function () {
439 + $.post(ajaxurl, {
440 + 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
441 + 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
442 + 'type': '<?php echo $type; ?>',
443 + 'key': '<?php echo $key; ?>'
444 + });
445 + });
446 + var href = $(target_element).attr('href');
447 + $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
437 448 e.preventDefault();
438 - $('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
449 + e.stopPropagation();
450 +
451 + $('body').unbind('thickbox:removed');
452 + tb_remove();
453 + var redirect = $(this).attr('data-ti-action');
454 + if (redirect !== '') {
455 + location.href = redirect;
456 + }
439 457 });
440 458
441 - $('.info-disclosure-link').on('click', function (e) {
442 - e.preventDefault();
443 - $('.info-disclosure-content').toggleClass('active');
444 - });
459 + $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
460 + $('#<?php echo $key; ?>ti-deactivate-yes').val($('#<?php echo $key; ?>ti-deactivate-yes').attr('data-after-text'));
445 461
446 - $('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
447 - var radio = $(this);
448 - if (radio.parent().find('textarea').length > 0 &&
449 - radio.parent().find('textarea').val().length === 0) {
450 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
451 - radio.parent().find('textarea').on('keyup', function (e) {
462 + var radio = $(this).prop('tagName') === 'LABEL' ? $(this).parent() : $(this);
463 + if (radio.parent().find('textarea').length > 0 && radio.parent().find('textarea').val().length === 0) {
464 + $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
465 + radio.parent().find('textarea').on('keyup', function (ee) {
452 466 if ($(this).val().length === 0) {
453 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
467 + $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
454 468 } else {
455 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
469 + $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
456 470 }
457 471 });
458 472 } else {
459 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
473 + $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
460 474 }
461 475 });
462 -
463 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').on('click', function (e) {
476 + $("#<?php echo $key; ?>-info-disclosure").on('click', function () {
477 + $("#TB_window").toggleClass("<?php echo $key; ?>-container-disc-open");
478 + return false;
479 + });
480 + $('#<?php echo $key; ?>ti-deactivate-yes').attr('data-ti-action', href).on('click', function (e) {
464 481 e.preventDefault();
465 482 e.stopPropagation();
466 -
467 - var selectedOption = $(
468 - '.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
469 483 $.post(ajaxurl, {
470 - 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
471 - 'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
472 - 'id': selectedOption.parent().attr('ti-option-id'),
473 - 'msg': selectedOption.parent().find('textarea').val(),
474 - 'type': 'theme',
475 - 'key': '<?php echo esc_attr( $key ); ?>'
484 + 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
485 + 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
486 + 'id': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
487 + 'msg': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
488 + 'type': '<?php echo $type; ?>',
476 489 });
477 - $('.ti-theme-uninstall-feedback-drawer').fadeOut();
478 - });
479 - });
480 - })(jQuery);
481 -
482 - </script>
483 - <?php
484 - do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
485 - }
486 -
487 - /**
488 - * Render the options list.
489 - *
490 - * @param array $options the options for the feedback form.
491 - */
492 - private function render_options_list( $options ) {
493 - $key = $this->product->get_key();
494 - $inputs_row_map = [
495 - 'text' => 1,
496 - 'textarea' => 2,
497 - ];
498 - ?>
499 - <ul class="popup--form">
500 - <?php
501 - foreach ( $options as $idx => $attributes ) {
502 - $title = Loader::$labels['uninstall']['options'][ $idx ]['title'];
503 - $placeholder = array_key_exists( 'placeholder', Loader::$labels['uninstall']['options'][ $idx ] ) ? Loader::$labels['uninstall']['options'][ $idx ]['placeholder'] : '';
504 - ?>
505 - <li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
506 - <input type="radio" name="ti-deactivate-option"
507 - id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
508 - <label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
509 - <?php echo esc_attr( str_replace( '{theme}', $this->product->get_name(), $title ) ); ?>
510 - </label>
511 - <?php
512 - if ( array_key_exists( 'type', $attributes ) ) {
513 -
514 - echo '<textarea width="100%" rows="' . esc_attr( $inputs_row_map[ $attributes['type'] ] ) . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
515 - }
516 - ?>
517 - </li>
518 - <?php } ?>
519 - </ul>
520 - <?php
521 - }
522 -
523 - /**
524 - * Render plugin feedback popup.
525 - */
526 - private function render_plugin_feedback_popup() {
527 - $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', Loader::$labels['uninstall']['button_cancel'] );
528 - $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', Loader::$labels['uninstall']['button_submit'] );
529 - $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
530 - $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', Loader::$labels['uninstall']['cta_info'] ) . '</a>';
531 -
532 - $options += $this->other;
533 - ?>
534 - <div class="ti-plugin-uninstall-feedback-popup ti-feedback"
535 - id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
536 - <div class="popup--header">
537 - <h5><?php echo wp_kses( Loader::$labels['uninstall']['heading_plugin'], array( 'span' => true ) ); ?> </h5>
538 - </div><!--/.popup--header-->
539 - <div class="popup--body">
540 - <?php $this->render_options_list( $options ); ?>
541 - </div><!--/.popup--body-->
542 - <div class="popup--footer">
543 - <div class="actions">
544 - <?php
545 - echo wp_kses_post( $info_disclosure_link );
546 - echo wp_kses_post( $this->get_disclosure_labels() );
547 - echo '<div class="buttons">';
548 - echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
549 - $button_cancel,
550 - 'secondary',
551 - $this->product->get_key() . 'ti-deactivate-no',
552 - false
553 - );
554 - echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
555 - $button_submit,
556 - 'primary',
557 - $this->product->get_key() . 'ti-deactivate-yes',
558 - false,
559 - array(
560 - 'data-after-text' => $button_submit,
561 - 'disabled' => true,
562 - )
563 - );
564 - echo '</div>';
565 - ?>
566 - </div><!--/.actions-->
567 - </div><!--/.popup--footer-->
568 - </div>
569 -
570 - <?php
571 - }
572 -
573 - /**
574 - * Add plugin feedback popup JS
575 - */
576 - private function add_plugin_feedback_popup_js() {
577 - $popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
578 - $key = $this->product->get_key();
579 - ?>
580 - <script type="text/javascript" id="ti-deactivate-js">
581 - (function ($) {
582 - $(document).ready(function () {
583 - var targetElement = 'tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>/"] span.deactivate a';
584 - var redirectUrl = $(targetElement).attr('href');
585 - if ($('.ti-feedback-overlay').length === 0) {
586 - $('body').prepend('<div class="ti-feedback-overlay"></div>');
587 - }
588 - $('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
589 -
590 - $(targetElement).on('click', function (e) {
591 - e.preventDefault();
592 - $('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
593 - $('body').addClass('ti-feedback-open');
594 - $('.ti-feedback-overlay').on('click', function () {
595 - $('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
596 - $('body').removeClass('ti-feedback-open');
597 - });
598 - });
599 -
600 - $('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
601 - e.preventDefault();
602 - $(this).parent().find('.info-disclosure-content').toggleClass('active');
603 - });
604 -
605 - $('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
606 - var radio = $(this);
607 - if (radio.parent().find('textarea').length > 0 &&
608 - radio.parent().find('textarea').val().length === 0) {
609 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
610 - radio.parent().find('textarea').on('keyup', function (e) {
611 - if ($(this).val().length === 0) {
612 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
613 - } else {
614 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
615 - }
616 - });
490 + var redirect = $(this).attr('data-ti-action');
491 + if (redirect != '') {
492 + location.href = redirect;
617 493 } else {
618 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
494 + $('body').unbind('thickbox:removed');
495 + tb_remove();
619 496 }
620 497 });
621 498
622 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-no').on('click', function (e) {
623 - e.preventDefault();
624 - e.stopPropagation();
625 - $(targetElement).unbind('click');
626 - $('body').removeClass('ti-feedback-open');
627 - $('<?php echo esc_attr( $popup_id ); ?>').remove();
628 - if (redirectUrl !== '') {
629 - location.href = redirectUrl;
630 - }
499 + $(target_element).attr('name', '<?php echo wp_kses( $heading, array( 'span' => array() ) ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
500 + var thicbox_timer;
501 + $(target_element).on('click', function () {
502 + tiBindThickbox();
631 503 });
632 504
633 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').on('click', function (e) {
634 - e.preventDefault();
635 - e.stopPropagation();
636 - $(targetElement).unbind('click');
637 - var selectedOption = $(
638 - '<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
639 - var data = {
640 - 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
641 - 'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
642 - 'id': selectedOption.parent().attr('ti-option-id'),
643 - 'msg': selectedOption.parent().find('textarea').val(),
644 - 'type': 'plugin',
645 - 'key': '<?php echo esc_attr( $key ); ?>'
646 - };
647 - $.ajax({
648 - type: 'POST',
649 - url: ajaxurl,
650 - data: data,
651 - complete() {
652 - $('body').removeClass('ti-feedback-open');
653 - $('<?php echo esc_attr( $popup_id ); ?>').remove();
654 - if (redirectUrl !== '') {
655 - location.href = redirectUrl;
656 - }
657 - },
658 - beforeSend() {
659 - $('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
660 - $('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
661 - $('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
505 + function tiBindThickbox() {
506 + var thicbox_timer = setTimeout(function () {
507 + if ($("#<?php echo esc_html( $key ); ?>").is(":visible")) {
508 + $("body").trigger('thickbox:iframe:loaded');
509 + $("#TB_window").addClass("<?php echo $key; ?>-container");
510 + clearTimeout(thicbox_timer);
511 + $('body').unbind('thickbox:removed');
512 + } else {
513 + tiBindThickbox();
662 514 }
663 - });
664 - });
515 + }, 100);
516 + }
665 517 });
666 518 })(jQuery);
667 -
668 519 </script>
669 520 <?php
521 +
670 522 do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
671 523 }
672 524
673 525 /**
674 - * Get the disclosure labels markup.
526 + * Generates the HTML.
675 527 *
676 - * @return string
528 + * @param string $type The type of product.
529 + * @param string $key The product key.
677 530 */
678 - private function get_disclosure_labels() {
531 + function get_html( $type, $key ) {
532 + $options = Product::PLUGIN_TYPE === $type ? $this->options_plugin : $this->options_theme;
533 + $button_cancel = Product::PLUGIN_TYPE === $type ? $this->button_cancel : 'Skip';
534 + $button_submit = Product::PLUGIN_TYPE === $type ? $this->button_submit : 'Submit';
535 + $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
536 + $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $button_submit );
537 + $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $button_cancel );
538 +
539 + $options += $this->other;
540 +
541 + $list = '';
542 + foreach ( $options as $title => $attributes ) {
543 + $id = $attributes['id'];
544 + $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
545 + if ( array_key_exists( 'type', $attributes ) ) {
546 + $list .= '<div>';
547 + $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
548 + switch ( $attributes['type'] ) {
549 + case 'text':
550 + $list .= '<textarea style="width: 100%" rows="1" name="comments" placeholder="' . $placeholder . '"></textarea>';
551 + break;
552 + case 'textarea':
553 + $list .= '<textarea style="width: 100%" rows="2" name="comments" placeholder="' . $placeholder . '"></textarea>';
554 + break;
555 + }
556 + $list .= '</div>';
557 + }
558 + $list .= '</li>';
559 + }
560 +
679 561 $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
680 562 $disclosure_labels = array_merge(
681 563 [
682 - 'title' => Loader::$labels['uninstall']['disclosure']['title'],
564 + 'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
683 565 'items' => [
684 - sprintf( Loader::$labels['uninstall']['disclosure']['version'], '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
685 - sprintf( Loader::$labels['uninstall']['disclosure']['website'], '<strong>', '</strong>', '<code>', get_site_url(), '</code>' ),
686 - sprintf( Loader::$labels['uninstall']['disclosure']['usage'], '<strong>', '</strong>', '<code>', ( time() - $this->product->get_install_time() ), 's</code>' ),
687 - sprintf( Loader::$labels['uninstall']['disclosure']['reason'], '<strong>', '</strong>', '<i>', '</i>' ),
566 + sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
567 + sprintf( '%s Uninstall reason %s %s Selected reson from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
688 568 ],
689 569 ],
690 570 $disclosure_new_labels
691 571 );
692 572
693 - $info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
573 + $info_disclosure_link = '<a href="#" id="' . $this->product->get_key() . '-info-disclosure">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
574 + $info_disclosure_content = '<div id="' . $this->product->get_key() . '-info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
694 575 foreach ( $disclosure_labels['items'] as $disclosure_item ) {
695 576 $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
696 577 }
697 578 $info_disclosure_content .= '</ul></div>';
698 579
699 - return $info_disclosure_content;
580 + return
581 + '<div id="' . $this->product->get_key() . '"><ul class="ti-list">' . $list . '</ul>'
582 + . $info_disclosure_content
583 + . '<div class="actions">'
584 + . get_submit_button(
585 + $button_submit,
586 + 'secondary',
587 + $this->product->get_key() . 'ti-deactivate-yes',
588 + false,
589 + array(
590 + 'data-after-text' => $button_submit,
591 + 'disabled' => true,
592 + )
593 + )
594 + . wp_kses_post( $info_disclosure_link )
595 + . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
596 + . '</div></div>';
700 597 }
701 598
702 599 /**
703 600 * Randomizes the options array.
@@ -703,9 +600,9 @@
703 600 * Randomizes the options array.
704 601 *
705 602 * @param array $options The options array.
706 603 */
707 - public function randomize_options( $options ) {
604 + function randomize_options( $options ) {
708 605 $new = array();
709 606 $keys = array_keys( $options );
710 607 shuffle( $keys );
711 608
@@ -718,9 +615,9 @@
718 615
719 616 /**
720 617 * Called when the deactivate button is clicked.
721 618 */
722 - public function post_deactivate() {
619 + function post_deactivate() {
723 620 check_ajax_referer( (string) __CLASS__, 'nonce' );
724 621
725 622 $this->post_deactivate_or_cancel();
726 623
@@ -732,10 +629,10 @@
732 629 }
733 630 $this->call_api(
734 631 array(
735 632 'type' => 'deactivate',
736 - 'id' => sanitize_key( $_POST['id'] ),
737 - 'comment' => isset( $_POST['msg'] ) ? sanitize_textarea_field( $_POST['msg'] ) : '',
633 + 'id' => $_POST['id'],
634 + 'comment' => isset( $_POST['msg'] ) ? $_POST['msg'] : '',
738 635 )
739 636 );
740 637 wp_send_json( [] );
741 638
@@ -744,16 +641,16 @@
744 641 /**
745 642 * Called when the deactivate/cancel button is clicked.
746 643 */
747 644 private function post_deactivate_or_cancel() {
748 - if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
645 + if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) {
749 646 return;
750 647 }
751 - if ( 'theme' !== $_POST['type'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
648 + if ( 'theme' !== $_POST['type'] ) {
752 649 return;
753 650 }
754 651
755 - set_transient( 'ti_sdk_pause_' . sanitize_text_field( $_POST['key'] ), true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );//phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
652 + set_transient( 'ti_sdk_pause_' . $_POST['key'], true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );
756 653
757 654 }
758 655
759 656 /**
@@ -763,14 +660,12 @@
763 660 *
764 661 * @return bool Is the request succesfull?
765 662 */
766 663 protected function call_api( $attributes ) {
767 - $slug = $this->product->get_slug();
768 - $version = $this->product->get_version();
769 - $attributes['slug'] = $slug;
770 - $attributes['version'] = $version;
771 - $attributes['url'] = get_site_url();
772 - $attributes['active_time'] = ( time() - $this->product->get_install_time() );
664 + $slug = $this->product->get_slug();
665 + $version = $this->product->get_version();
666 + $attributes['slug'] = $slug;
667 + $attributes['version'] = $version;
773 668
774 669 $response = wp_remote_post(
775 670 self::FEEDBACK_ENDPOINT,
776 671 array(
@@ -823,13 +718,8 @@
823 718 *
824 719 * @return Uninstall_Feedback Current module instance.
825 720 */
826 721 public function load( $product ) {
827 -
828 - if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
829 - return;
830 - }
831 -
832 722 $this->product = $product;
833 723 add_action( 'admin_head', array( $this, 'load_resources' ) );
834 724 add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
835 725