PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.2
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 +446 -324 3.1.33.4.2 View file →
@@ -53,9 +53,11 @@
53 53 'type' => 'text',
54 54 'placeholder' => 'What\'s the plugin\'s name?',
55 55 ),
56 56 'I could not get the plugin to work' => array(
57 - 'id' => 4,
57 + 'type' => 'textarea',
58 + 'placeholder' => 'What problem are you experiencing?',
59 + 'id' => 4,
58 60 ),
59 61 'I no longer need the plugin' => array(
60 62 'id' => 5,
61 63 'type' => 'textarea',
@@ -61,9 +63,11 @@
61 63 'type' => 'textarea',
62 64 'placeholder' => 'If you could improve one thing about our product, what would it be?',
63 65 ),
64 66 'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
65 - 'id' => 6,
67 + 'type' => 'textarea',
68 + 'placeholder' => 'What problem are you experiencing?',
69 + 'id' => 6,
66 70 ),
67 71 );
68 72 /**
69 73 * Default options for theme.
@@ -74,9 +78,11 @@
74 78 'I don\'t know how to make it look like demo' => array(
75 79 'id' => 7,
76 80 ),
77 81 'It lacks options' => array(
78 - 'id' => 8,
82 + 'placeholder' => 'What option is missing?',
83 + 'type' => 'text',
84 + 'id' => 8,
79 85 ),
80 86 'Is not working with a plugin that I need' => array(
81 87 'id' => 9,
82 88 'type' => 'text',
@@ -94,9 +100,9 @@
94 100 private $other = array(
95 101 'Other' => array(
96 102 'id' => 999,
97 103 'type' => 'textarea',
98 - 'placeholder' => 'cmon cmon tell us',
104 + 'placeholder' => 'What can we do better?',
99 105 ),
100 106 );
101 107 /**
102 108 * Default heading for plugin.
@@ -102,15 +108,15 @@
102 108 * Default heading for plugin.
103 109 *
104 110 * @var string $heading_plugin The heading of the modal
105 111 */
106 - private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us feedback.</span>';
112 + private $heading_plugin = 'What’s wrong?';
107 113 /**
108 114 * Default heading for theme.
109 115 *
110 116 * @var string $heading_theme The heading of the modal
111 117 */
112 - private $heading_theme = 'Looking to change {theme}? <span> What does not work for you?</span>';
118 + private $heading_theme = 'What does not work for you in {theme}?';
113 119 /**
114 120 * Default submit button action text.
115 121 *
116 122 * @var string $button_submit The text of the deactivate button
@@ -126,344 +132,346 @@
126 132 /**
127 133 * Loads the additional resources
128 134 */
129 135 function load_resources() {
130 - add_thickbox();
136 + $screen = get_current_screen();
131 137
132 - $id = $this->product->get_key() . '_deactivate';
138 + if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
139 + return;
140 + }
133 141
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 );
142 + $this->add_feedback_popup_style();
136 143
137 - echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
144 + if ( $this->product->get_type() === 'theme' ) {
145 + $this->add_theme_feedback_drawer_js();
146 + $this->render_theme_feedback_popup();
147 +
148 + return;
149 + }
150 + $this->add_plugin_feedback_popup_js();
151 + $this->render_plugin_feedback_popup();
138 152 }
139 153
140 154 /**
141 - * Loads the css
142 - *
143 - * @param string $type The type of product.
144 - * @param string $key The product key.
155 + * Render theme feedback drawer.
145 156 */
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 - }
157 + private function render_theme_feedback_popup() {
158 + $heading = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
159 + $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' );
160 + $options = $this->options_theme;
161 + $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
162 + $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
163 +
164 + $options += $this->other;
165 +
153 166 ?>
154 - <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
155 - input[name="ti-deactivate-option"] ~ div {
156 - display: none;
167 + <div class="ti-theme-uninstall-feedback-drawer ti-feedback">
168 + <div class="popup--header">
169 + <h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
170 + <button class="toggle"><span>&times;</span></button>
171 + </div><!--/.popup--header-->
172 + <div class="popup--body">
173 + <?php $this->render_options_list( $options ); ?>
174 + </div><!--/.popup--body-->
175 + <div class="popup--footer">
176 + <div class="actions">
177 + <?php
178 + echo wp_kses_post( $info_disclosure_link );
179 + echo wp_kses_post( $this->get_disclosure_labels() );
180 + echo '<div class="buttons">';
181 + echo get_submit_button(
182 + $button_submit,
183 + 'secondary',
184 + $this->product->get_key() . 'ti-deactivate-yes',
185 + false,
186 + array(
187 + 'data-after-text' => $button_submit,
188 + 'disabled' => true,
189 + )
190 + );
191 + echo '</div>';
192 + ?>
193 + </div><!--/.actions-->
194 + </div><!--/.popup--footer-->
195 + </div>
196 + <?php
197 + }
198 +
199 + /**
200 + * Add feedback styles.
201 + */
202 + private function add_feedback_popup_style() {
203 + ?>
204 + <style>
205 + .ti-feedback {
206 + background: #fff;
207 + max-width: 400px;
208 + z-index: 10000;
209 + box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
210 + transition: all .3s ease-out;
157 211 }
158 212
159 - input[name="ti-deactivate-option"]:checked ~ div {
160 - display: block;
161 - }
162 213
163 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
164 - background: none !important;
214 + .ti-feedback .popup--header {
215 + position: relative;
216 + background-color: #23A1CE;
165 217 }
166 218
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%;
219 + .ti-feedback .popup--header h5 {
220 + margin: 0;
221 + font-size: 16px;
222 + padding: 15px;
223 + color: #fff;
224 + font-weight: 600;
225 + text-align: center;
226 + letter-spacing: .3px;
178 227 }
179 228
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;
229 + .ti-feedback .popup--body {
230 + padding: 15px;
183 231 }
184 232
185 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul strong {
186 - width: 125px;
187 - display: block;
233 + .ti-feedback .popup--form {
188 234 margin: 0;
189 - float: left;
235 + font-size: 13px;
190 236 }
191 237
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;
238 + .ti-feedback .popup--form input[type="radio"] {
239 + margin: 0 10px 0 0;
196 240 }
197 241
198 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content p {
199 - font-style: italic;
200 - margin-bottom: 0px;
242 + .ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
243 + display: block;
201 244 }
202 245
203 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content {
246 + .ti-feedback .popup--form textarea {
247 + width: 100%;
248 + margin: 10px 0 0;
204 249 display: none;
250 + max-height: 150px;
205 251 }
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;
252 +
253 + .ti-feedback li {
254 + display: flex;
255 + align-items: center;
256 + margin-bottom: 15px;
257 + flex-wrap: wrap;
210 258 }
211 259
212 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure {
213 - top: -130px;
260 + .ti-feedback li label {
261 + max-width: 90%;
214 262 }
215 263
216 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open {
217 - height: 590px !important;
264 + .ti-feedback li:last-child {
265 + margin-bottom: 0;
218 266 }
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;
267 +
268 + .ti-feedback .popup--footer {
269 + padding: 0 15px 15px;
226 270 }
227 271
228 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
229 - box-sizing: border-box;
230 - padding: 30px 40px;
231 - background-color: #eaeaea;
272 + .ti-feedback .actions {
273 + display: flex;
274 + flex-wrap: wrap;
232 275 }
233 276
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;
277 + .info-disclosure-link {
278 + width: 100%;
279 + margin-bottom: 15px;
250 280 }
251 281
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;
282 + .ti-feedback .info-disclosure-content {
283 + max-height: 0;
284 + overflow: hidden;
285 + width: 100%;
286 + transition: .3s ease;
263 287 }
264 288
265 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
266 - background: #e83f42;
289 + .ti-feedback .info-disclosure-content.active {
290 + max-height: 300px;
267 291 }
268 292
269 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
270 - background: transparent;
293 + .ti-feedback .info-disclosure-content p {
294 + margin: 0;
271 295 }
272 296
273 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
274 - box-shadow: none;
275 - outline: none;
297 + .ti-feedback .info-disclosure-content ul {
298 + margin: 10px 0;
299 + border-radius: 3px;
276 300 }
277 301
278 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
279 - box-shadow: none;
280 - transform: translateY(0);
302 + .ti-feedback .info-disclosure-content ul li {
303 + display: flex;
304 + align-items: center;
305 + justify-content: space-between;
306 + margin-bottom: 0;
307 + padding: 5px 0;
308 + border-bottom: 1px solid #ccc;
281 309 }
282 310
283 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
284 - cursor: not-allowed;
311 + .ti-feedback .buttons {
312 + display: flex;
313 + width: 100%;
285 314 }
286 315
287 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
288 - text-decoration: none;
316 + .ti-feedback .buttons input:last-child {
317 + margin-left: auto;
289 318 }
290 319
291 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
292 - background-color: #ffffff;
320 + .ti-theme-uninstall-feedback-drawer {
321 + border-top-left-radius: 5px;
322 + position: fixed;
323 + top: 100%;
324 + right: 15px;
293 325 }
294 326
295 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
296 - margin: 0;
327 + .ti-theme-uninstall-feedback-drawer.active {
328 + transform: translateY(-100%);
297 329 }
298 330
299 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
300 - color: #373e40;
301 - font-size: 13px;
302 - margin-bottom: 5px;
331 + .ti-theme-uninstall-feedback-drawer .popup--header {
332 + border-top-left-radius: 5px;
303 333 }
304 334
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;
335 + .ti-theme-uninstall-feedback-drawer .popup--header .toggle {
336 + position: absolute;
337 + padding: 3px 0;
338 + width: 30px;
339 + top: -26px;
340 + right: 0;
341 + cursor: pointer;
342 + border-top-left-radius: 5px;
343 + border-top-right-radius: 5px;
344 + font-size: 20px;
345 + background-color: #23A1CE;
346 + color: #fff;
347 + border: none;
348 + line-height: 20px;
309 349 }
310 350
311 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
312 - margin-top: 1px;
351 + .ti-theme-uninstall-feedback-drawer .toggle span {
352 + margin: 0;
353 + display: inline-block;
313 354 }
314 355
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;
356 + .ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
357 + transform: rotate(45deg);
320 358 }
321 359
322 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
323 - padding: 10px 15px;
324 - width: 100%;
360 + .ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
361 + background-color: #1880a5;
325 362 }
326 363
327 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
328 - margin: 10px 30px;
329 - }
330 364
331 - .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
332 - box-sizing: border-box;
365 + .ti-plugin-uninstall-feedback-popup .popup--header:before {
366 + content: "";
333 367 display: block;
334 - float: none;
335 - font-weight: 700;
336 - line-height: 1;
337 - padding: 0;
338 - text-align: left;
339 - width: 100%;
368 + position: absolute;
369 + border: 20px solid #23A1CE;
370 + left: -10px;
371 + top: 50%;
372 + border-top: 20px solid transparent;
373 + border-bottom: 20px solid transparent;
374 + border-left: 0;
375 + transform: translateY(-50%);
340 376 }
341 377
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;
378 + .ti-plugin-uninstall-feedback-popup {
379 + display: none;
380 + position: absolute;
381 + white-space: normal;
382 + width: 400px;
383 + left: 100%;
384 + top: -15px;
349 385 }
350 386
351 - body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
387 + .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
388 + animation: rotation 2s infinite linear;
389 + display: block;
390 + float: none;
391 + align-items: center;
352 392 width: 100%;
353 - display: block;
354 - position: absolute;
355 - left: 0;
356 - bottom: 0;
393 + margin: 0 auto;
394 + height: 100%;
395 + background: transparent;
396 + padding: 0;
357 397 }
358 398
359 - .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
360 - font-size: 32px;
399 + .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
400 + padding: 0;
401 + background: transparent;
402 + box-shadow: none;
403 + color: #b4b9be
361 404 }
362 405
363 - .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
364 - color: #eee;
365 - }
366 406
367 - .<?php echo $key; ?>-container #TB_closeWindowButton {
368 - left: auto;
369 - right: -5px;
370 - top: -35px;
371 - color: #eee;
407 + .ti-plugin-uninstall-feedback-popup.active {
408 + display: block;
372 409 }
373 410
374 - .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
375 - text-align: right;
376 - line-height: 25px;
377 - width: 25px;
378 - height: 25px;
411 + tr[data-plugin^="<?php echo $this->product->get_slug(); ?>"] .deactivate {
412 + position: relative;
379 413 }
380 414
381 - .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
382 - box-shadow: none;
383 - outline: none;
415 + body.ti-feedback-open .ti-feedback-overlay {
416 + content: "";
417 + display: block;
418 + background-color: rgba(0, 0, 0, 0.5);
419 + top: 0;
420 + bottom: 0;
421 + right: 0;
422 + left: 0;
423 + z-index: 10000;
424 + position: fixed;
384 425 }
385 426
386 - .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
387 - font: normal 25px dashicons;
388 - }
427 + @media (max-width: 768px) {
428 + .ti-plugin-uninstall-feedback-popup {
429 + position: fixed;
430 + max-width: 100%;
431 + margin: 0 auto;
432 + left: 50%;
433 + top: 50px;
434 + transform: translateX(-50%);
435 + }
389 436
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;
437 + .ti-plugin-uninstall-feedback-popup .popup--header:before {
438 + display: none;
439 + }
398 440 }
399 441 </style>
400 442 <?php
401 - do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
402 443 }
403 444
404 445 /**
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.
446 + * Theme feedback drawer JS.
410 447 */
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 );
448 + private function add_theme_feedback_drawer_js() {
449 + $key = $this->product->get_key();
415 450 ?>
416 451 <script type="text/javascript" id="ti-deactivate-js">
417 452 (function ($) {
418 453 $(document).ready(function () {
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 - ?>
454 + setTimeout(function () {
455 + $('.ti-theme-uninstall-feedback-drawer').addClass('active');
456 + }, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );
432 457
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 - });
458 + $('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
459 + e.preventDefault();
460 + $('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
445 461 });
446 - var href = $(target_element).attr('href');
447 - $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
462 +
463 + $('.info-disclosure-link').on('click', function (e) {
448 464 e.preventDefault();
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 - }
465 + $('.info-disclosure-content').toggleClass('active');
457 466 });
458 467
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'));
461 -
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) {
468 + $('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
469 + var radio = $(this);
470 + if (radio.parent().find('textarea').length > 0 &&
471 + radio.parent().find('textarea').val().length === 0) {
464 472 $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
465 - radio.parent().find('textarea').on('keyup', function (ee) {
473 + radio.parent().find('textarea').on('keyup', function (e) {
466 474 if ($(this).val().length === 0) {
467 475 $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
468 476 } else {
469 477 $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
@@ -472,93 +480,219 @@
472 480 } else {
473 481 $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
474 482 }
475 483 });
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) {
484 +
485 + $('#<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
481 486 e.preventDefault();
482 487 e.stopPropagation();
488 +
489 + var selectedOption = $(
490 + '.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
483 491 $.post(ajaxurl, {
484 - 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
492 + 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
485 493 '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; ?>',
494 + 'id': selectedOption.parent().attr('ti-option-id'),
495 + 'msg': selectedOption.parent().find('textarea').val(),
496 + 'type': 'theme',
497 + 'key': '<?php echo esc_attr( $key ); ?>'
489 498 });
490 - var redirect = $(this).attr('data-ti-action');
491 - if (redirect != '') {
492 - location.href = redirect;
499 + $('.ti-theme-uninstall-feedback-drawer').fadeOut();
500 + });
501 + });
502 + })(jQuery);
503 +
504 + </script>
505 + <?php
506 + do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
507 + }
508 +
509 + /**
510 + * Render the options list.
511 + *
512 + * @param array $options the options for the feedback form.
513 + */
514 + private function render_options_list( $options ) {
515 + $key = $this->product->get_key();
516 + $inputs_row_map = [
517 + 'text' => 1,
518 + 'textarea' => 2,
519 + ];
520 + ?>
521 + <ul class="popup--form">
522 + <?php foreach ( $options as $title => $attributes ) { ?>
523 + <li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
524 + <input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
525 + <label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
526 + <?php echo str_replace( '{theme}', $this->product->get_name(), $title ); ?>
527 + </label>
528 + <?php
529 + if ( array_key_exists( 'type', $attributes ) ) {
530 + $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
531 + echo '<textarea width="100%" rows="' . $inputs_row_map[ $attributes['type'] ] . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
532 + }
533 + ?>
534 + </li>
535 + <?php } ?>
536 + </ul>
537 + <?php
538 + }
539 +
540 + /**
541 + * Render plugin feedback popup.
542 + */
543 + private function render_plugin_feedback_popup() {
544 + $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
545 + $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
546 + $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
547 + $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
548 +
549 + $options += $this->other;
550 + ?>
551 + <div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
552 + <div class="popup--header">
553 + <h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
554 + </div><!--/.popup--header-->
555 + <div class="popup--body">
556 + <?php $this->render_options_list( $options ); ?>
557 + </div><!--/.popup--body-->
558 + <div class="popup--footer">
559 + <div class="actions">
560 + <?php
561 + echo wp_kses_post( $info_disclosure_link );
562 + echo wp_kses_post( $this->get_disclosure_labels() );
563 + echo '<div class="buttons">';
564 + echo get_submit_button(
565 + $button_cancel,
566 + 'secondary',
567 + $this->product->get_key() . 'ti-deactivate-no',
568 + false
569 + );
570 + echo get_submit_button(
571 + $button_submit,
572 + 'primary',
573 + $this->product->get_key() . 'ti-deactivate-yes',
574 + false,
575 + array(
576 + 'data-after-text' => $button_submit,
577 + 'disabled' => true,
578 + )
579 + );
580 + echo '</div>';
581 + ?>
582 + </div><!--/.actions-->
583 + </div><!--/.popup--footer-->
584 + </div>
585 +
586 + <?php
587 + }
588 +
589 + /**
590 + * Add plugin feedback popup JS
591 + */
592 + private function add_plugin_feedback_popup_js() {
593 + $popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
594 + $key = $this->product->get_key();
595 + ?>
596 + <script type="text/javascript" id="ti-deactivate-js">
597 + (function ($) {
598 + $(document).ready(function () {
599 + var targetElement = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
600 + var redirectUrl = $(targetElement).attr('href');
601 + if ($('.ti-feedback-overlay').length === 0) {
602 + $('body').prepend('<div class="ti-feedback-overlay"></div>');
603 + }
604 + $('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
605 +
606 + $(targetElement).on('click', function (e) {
607 + e.preventDefault();
608 + $('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
609 + $('body').addClass('ti-feedback-open');
610 + $('.ti-feedback-overlay').on('click', function () {
611 + $('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
612 + $('body').removeClass('ti-feedback-open');
613 + });
614 + });
615 +
616 + $('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
617 + e.preventDefault();
618 + $(this).parent().find('.info-disclosure-content').toggleClass('active');
619 + });
620 +
621 + $('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
622 + var radio = $(this);
623 + if (radio.parent().find('textarea').length > 0 &&
624 + radio.parent().find('textarea').val().length === 0) {
625 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
626 + radio.parent().find('textarea').on('keyup', function (e) {
627 + if ($(this).val().length === 0) {
628 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
629 + } else {
630 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
631 + }
632 + });
493 633 } else {
494 - $('body').unbind('thickbox:removed');
495 - tb_remove();
634 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
496 635 }
497 636 });
498 637
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();
638 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-no').on('click', function (e) {
639 + e.preventDefault();
640 + e.stopPropagation();
641 + $(targetElement).unbind('click');
642 + $('body').removeClass('ti-feedback-open');
643 + $('<?php echo esc_attr( $popup_id ); ?>').remove();
644 + if (redirectUrl !== '') {
645 + location.href = redirectUrl;
646 + }
503 647 });
504 648
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();
649 + $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
650 + e.preventDefault();
651 + e.stopPropagation();
652 + $(targetElement).unbind('click');
653 + var selectedOption = $(
654 + '<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
655 + var data = {
656 + 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
657 + 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
658 + 'id': selectedOption.parent().attr('ti-option-id'),
659 + 'msg': selectedOption.parent().find('textarea').val(),
660 + 'type': 'plugin',
661 + 'key': '<?php echo esc_attr( $key ); ?>'
662 + };
663 + $.ajax({
664 + type: 'POST',
665 + url: ajaxurl,
666 + data: data,
667 + complete() {
668 + $('body').removeClass('ti-feedback-open');
669 + $('<?php echo esc_attr( $popup_id ); ?>').remove();
670 + if (redirectUrl !== '') {
671 + location.href = redirectUrl;
672 + }
673 + },
674 + beforeSend() {
675 + $('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
676 + $('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
677 + $('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
514 678 }
515 - }, 100);
516 - }
679 + });
680 + });
517 681 });
518 682 })(jQuery);
683 +
519 684 </script>
520 685 <?php
521 -
522 686 do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
523 687 }
524 688
525 689 /**
526 - * Generates the HTML.
690 + * Get the disclosure labels markup.
527 691 *
528 - * @param string $type The type of product.
529 - * @param string $key The product key.
692 + * @return string
530 693 */
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 -
694 + private function get_disclosure_labels() {
561 695 $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
562 696 $disclosure_labels = array_merge(
563 697 [
564 698 '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.',
@@ -563,38 +697,21 @@
563 697 [
564 698 '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.',
565 699 'items' => [
566 700 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>' ),
701 + sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
568 702 ],
569 703 ],
570 704 $disclosure_new_labels
571 705 );
572 706
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>';
707 + $info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
575 708 foreach ( $disclosure_labels['items'] as $disclosure_item ) {
576 709 $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
577 710 }
578 711 $info_disclosure_content .= '</ul></div>';
579 712
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>';
713 + return $info_disclosure_content;
597 714 }
598 715
599 716 /**
600 717 * Randomizes the options array.
@@ -718,8 +835,13 @@
718 835 *
719 836 * @return Uninstall_Feedback Current module instance.
720 837 */
721 838 public function load( $product ) {
839 +
840 + if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
841 + return;
842 + }
843 +
722 844 $this->product = $product;
723 845 add_action( 'admin_head', array( $this, 'load_resources' ) );
724 846 add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
725 847