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 +343 -475 3.10.13.2.1 View file →
@@ -39,9 +39,9 @@
39 39 * Where to send the data.
40 40 *
41 41 * @var string Endpoint url.
42 42 */
43 - const FEEDBACK_ENDPOINT = 'https://api.themeisle.com/tracking/uninstall';
43 + const FEEDBACK_ENDPOINT = 'http://feedback.themeisle.com/wordpress/wp-json/__pirate_feedback_/v1/feedback';
44 44
45 45 /**
46 46 * Default options for plugins.
47 47 *
@@ -53,11 +53,9 @@
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 - 'type' => 'textarea',
58 - 'placeholder' => 'What problem are you experiencing?',
59 - 'id' => 4,
57 + 'id' => 4,
60 58 ),
61 59 'I no longer need the plugin' => array(
62 60 'id' => 5,
63 61 'type' => 'textarea',
@@ -63,11 +61,9 @@
63 61 'type' => 'textarea',
64 62 'placeholder' => 'If you could improve one thing about our product, what would it be?',
65 63 ),
66 64 'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
67 - 'type' => 'textarea',
68 - 'placeholder' => 'What problem are you experiencing?',
69 - 'id' => 6,
65 + 'id' => 6,
70 66 ),
71 67 );
72 68 /**
73 69 * Default options for theme.
@@ -78,11 +74,9 @@
78 74 'I don\'t know how to make it look like demo' => array(
79 75 'id' => 7,
80 76 ),
81 77 'It lacks options' => array(
82 - 'placeholder' => 'What option is missing?',
83 - 'type' => 'text',
84 - 'id' => 8,
78 + 'id' => 8,
85 79 ),
86 80 'Is not working with a plugin that I need' => array(
87 81 'id' => 9,
88 82 'type' => 'text',
@@ -100,9 +94,9 @@
100 94 private $other = array(
101 95 'Other' => array(
102 96 'id' => 999,
103 97 'type' => 'textarea',
104 - 'placeholder' => 'What can we do better?',
98 + 'placeholder' => 'cmon cmon tell us',
105 99 ),
106 100 );
107 101 /**
108 102 * Default heading for plugin.
@@ -108,15 +102,15 @@
108 102 * Default heading for plugin.
109 103 *
110 104 * @var string $heading_plugin The heading of the modal
111 105 */
112 - private $heading_plugin = 'What\'s wrong?';
106 + private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us feedback.</span>';
113 107 /**
114 108 * Default heading for theme.
115 109 *
116 110 * @var string $heading_theme The heading of the modal
117 111 */
118 - private $heading_theme = 'What does not work for you in {theme}?';
112 + private $heading_theme = 'Looking to change {theme}? <span> What does not work for you?</span>';
119 113 /**
120 114 * Default submit button action text.
121 115 *
122 116 * @var string $button_submit The text of the deactivate button
@@ -131,595 +125,476 @@
131 125
132 126 /**
133 127 * Loads the additional resources
134 128 */
135 - public function load_resources() {
136 - $screen = get_current_screen();
129 + function load_resources() {
130 + add_thickbox();
137 131
138 - if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
139 - return;
140 - }
132 + $id = $this->product->get_key() . '_deactivate';
141 133
142 - $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 );
143 136
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();
137 + echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
152 138 }
153 139
154 140 /**
155 - * Render theme feedback drawer.
141 + * Loads the css
142 + *
143 + * @param string $type The type of product.
144 + * @param string $key The product key.
156 145 */
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 -
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+KBNOswAAFtFJREFUeNrkWwmUXVWV3W/8Y81zkVAhgUwQg00IAYIRGcRuERDSKqALtVEbxRYcGzWIuhatKCYuUXQtERRtFAccQCDtckCZwpRISEIlIXMqlaGGP///ht7n3vd//YRUUkljN718a53U+++//97d95yzz3BvjDAM8fd02May4YndaZhoDErYeu/laCyN8rN16PuDAPA83mcAjjOxd8jcVypydhrlKspCSidlhPIk5T8p9/+PAP8fTrZJaaQ0UFxKiVKk/CvlU5Rk3b0C+gTKFZRvUa75/wJ4EuVcyimU2RGQdkqCkoOBDExjBoJx3Uwm5OlXt4bFrIPgTXSJK+DY59PEO8a5s0mPiEPyfUrwMieh3ED57qsTsJBhoXAOmps+gd6u85AvGtgxQEOmJcfj+vvxDsvS/hzsB5pkgA9QplJuoux59QD2g1ZUvCXhVe+4pnjxJc5gdx8SxTza1jwDY9ntMDdsBlLJQ4O2CTogRs+vBzydFmLCMm98NWl4OvL5O3Hd+09/9p8/iK/9GOjfRHZKpnHZWy7AlbfPRuK918DYTm3H3PHZWrQbVnHKtUBbh201EvSFvHLX0TLlK3ksRLG4HPPmnL7+0vfiaz8EOkwP+aduwPKbZ+DadyzBnVuPBa4nEQf+/hqW0zKvZcqkJoYmi0DTMXo2+cyltiu8oSi+HQrR3UG5+n9Fw6bFmRYJOVehUf/VAsrPacodOPtM3LcmjmPSwMz4cvzXAJEXt6C89gv49rJTcMk3zkdPL8e9e0iTVNHTTziuGTi9D5jF73oaNVg5RnLAjiywagfwp01ybiJufQOOuYMTdf9hg3s5H83oEQIWhYwOMGySf2KNFTjJchW0EMmPKB1KMx2d2LQFGCKtvPD0A1izbitnitcZbrat+T12Fi8i4C5g6y49kDkk7re/RoNtTmo+DiKmFlPupaZPbAPOp3VceSLwYD/fttrFUPlbSNsL+YgtB48QjGKmje+ceBlKlqsATBywIe82sG9TC5OhONqP2wOnucB0wRY13Cn6qQWPYgEtVNZvf8/J3RhnZAprrtjY81qkxHX3jGrtvn8esHgm0wzek6Vf76Y2Q19ncibBmymeM1Mz+H1IS2ji9XfPAuZzAm5+ajLWDn8JKfvymgprQczHyvbpGEh14f2nX89sLyVsehQmbQewKj5GBxtQzMXQ3DvyWcvxz9rPvFf9Fed+ELjnl8Q07To07FyJ3MATCDouxXmL344pO55nmsFs8avMHE8jmH1/puzmkEsarBo7n2dweCbn06YFxJizWJzFErVW5Kwez8m45VTgM08txqqhu5C0HxyDHNIIDSxedCP6Ozk5Bb6rNHzkpCWQTJqlwQcWcgkUh+NXG2b4sf1uSjDGPvQITh98Bh/5F35s6UXTovvR+eaVuPD6O/DRt8bg/uL7CK+nj75mI7DtD0CefhkUopfYkUZtDdyn75Y2kMz+wvtW6s8yMRmCaCLwG2Za6E5ch4xnoMLPZUo2g3uPPQfr25iNFob3U76BpUMTVK2JBLOmP37hU5hE5yzBvbZz2p6lyXYSiH/AvBVLCI/pRvnmG7Fy8nysYtgVEz+jIYPuu7+NSvIe2OfZMIvh4YuQevIRkxYtx6fxd662hkZOzu9257Fk/esZrlaI2arY+PY70d8yhRNZOWKWPobSS4fPFBx37YaeHkwdGrgCqfDWZGveRHAQI6GWje07EXvfRzB/0XzMn0UfzdBnH/oLwrOogTcfS7BbtSaPxL7kfp+aLayliR+nJytDEz8jnsRpDW/F45kVFTfE0rmXo7+VPOqXjygOn0f5qXgk5QnKc9Ty50MVfozbGjqyVFFwIFWM0XkioXPiB8hct9wGfI15Qmo3gnfSb3MZVW4e1SGmHtL8K1u1G1QYciyCflPqPFRK9ouN0/CJM6+LNBtOKA6Lqy6hfJri1H5jWbFUIX9D75597yM/NSWaiwfG4ZeDlpw4ldLvjXO23zOPeYMPw9/HqY5pRj+qg8/1yebYp0ktzwfNDGdgvnvcKnd6P7yKDmcTzLQE7Oc4SMflty1xA21JEyazng8v/4110uDmrrAphBXzdK47kUNYdS7j94ITEI7uhOkEh56sCefsGQ1cEotkIV3+ePKUm856txCXlKCXqLzgMIDfqEowaqQ1YaCv0URrjJyciGHu9k24+k8PsiB1EW8q6rg40S6GzPbZ3bSnOK1xAJZtHrpwmHDM4HODnDbtcAiPetNnb8x1fBFmebnK+oBHKVeOZ9JMBPEfHKDbTrBdKZMZX4gS3TDvmHjvA79BayGDYSONWKo8ce36BNZGgCd3EmyRRDt8BMw8kaNquhXmLC3vrHhOj2GXqp54POUHUVL0hQM1fBXvOjnlGOgm2Arjrcdn5VwHJ2zZggueXYEc4tSOD8vxxupW4zDAJcuaxBDSmUaQzzKS5HXV87cowWFMgWPElBtSHLPGW1I/L64HzGwB75KTjqShrI3JlBprgbnoPz3xONqZrVRoEKYVQrGzmJSkhgJ6PABGBLiPBBW3SJySXHhjJd8rfhiK/CVtF8X1pk3EdP4iL/x36ZOZtUonxClJ3iQ3lqldscQK70tmczj/mRUoE6z8TqolBboKWDqSVeDjabvZ0n7MxCH0A/ytjqyf5msspTCxTpvDEdCmHtZrKYuqgC8VbTe5ot1QZWjyg6ztYNbmzZi+Y5tkViqlNKhdQ4BVw45Dc3Uj0CIHalvuFfsJyuqrMLReAcI6+DGCHsX+AccZRPSR4JCa40bVtF8no4tJ4a7GxXELWLnRDyUBt7DghReQCop8gHFAmhdGPWd7f007ddqu4hLt+gX6vuTJCX4MXnHvlVRzS2lmrfgQxYVROtDg1sb+D6Zql4Y4PsY6ltasAQfanA3Px4xtWyIXqFZd9EXF0KFuw4h2rQioAu3UmbmpQUtiIKHDFKtoQTlb0t+9YkeFFtmNFUNMJw0ydGjUwErH16VNR6/rkT9zJCSJc8tNnjLnkD5rIp3N44TB7UzHx8KI75mcxGiw5XIENgLp2AdoPLq2Tx6aV1qOt01CcUieUTk8w0848SpjXeFUPDvUQmCBAloFK2IyZzC1jlIy8mnqN2bVlDWPlqnVhlwO7SOj/DymjYCARdRgBbA8yHXHfLhewwJW/GSbaJkaDrKwk0m4bXMwujkLv1JSWaJ6vIyoKvJMSWwM6XuVyXWM374kO8FBJknYKYn1T07hKzxyjPbfsE7qWoEyIsxU8SliNvFdZdJ8sctEIVEq1/xXDCVkdVQpOHAk+ZDYVSCQpubIj0w9SDVoQycnTGIwyAcOcBr7mAp6MSS6ephenonsrrX06wzcRJSLmJoMaYD0FpvjINsZbeQhxvAKx5HfiFR7hWltXV9bUtyB45G6YzPMS0scq1XTcFjT8Jiz26r0k4nlVS9ATUJ+jpVKcFgD1/uwvKY4GkeyI6fnbZQgWlt0fSqrDPJ039DgxfSFmkd5/Uk+9DiadSWrfhZjgRxrWohyIY+glFcmboQmgcdYVzTDdJs4KQ0E18RrBGi5KA3vRqb/e2jsLfKxjp5ctxW4mwnRmgHFlZ7y33BMwxHVBDqSlgVwuxF94YU6u/KV8UtzkjE3Yrux0B4qwGHF4kB4U5GmNkoQba21RoGWqI8soMVzHufnN1CaWc/6jh4N73HTSdJoS9TlqIoVdTwkhPH54u+Bg1hbL7zhhfByD8BtciS7AJa3oXD3Ls73ND7Oh7TpqiYtMELolkBkEFmzuqajTDnyYb/6i4NkRAKYZSdBM5pZUWjas0f/KBar8+U6ApNguJevepD3S1oq5WFYjjqT9GOPbiEpZ00KWgLpcVV0p0OE1uE0dHGiCLSBz3osicqyvchk5V1mzb9rJh2pStrdUSDca0buq8ZbZWgvMt4SycejnRgHKYCkiad8VF5C08fOnWPsXGXsGmh+bqTJ/5Gv+4skeOL/uxWJVTMwMuH+f2vnVcCVKMaWYIiKfsf33pLF8EuuKtsrDv1eIkagDTqo8+OSF1Y1vM6MNF5LOJT/Rg5QJPuWGGfNAzoH8rk4EkdxOKGb8uI8+6i1wUHdxKuxdB14N5J7ONCnKEkBRMuo7NXaRtSDluEoYNXzYIxn42KFW2H8mr/9RoD8YAK5bJqG7yGXSMC3rJqGa2YtU1RbnsJacZS9QlyS45vRzETxB3kOcJQAmlnlAC8v6Ya2NaG7saTSTbUSsX2H1mZ3J99i6BaPYYyJpO5Fyvd8zdxn82Ux+nSZBOinOIBG3cEQkgqicCXEZEvSQlm5De6d62CtcMmPDvYNtCh05GXsaGmlm/Pd5aI230hpokBZoeF8+VXA2yX58ALNxYrMOMNhpYJhFv4bWzswbe+gWp4/0JdL+RiGCbplCrVbbeYx91Ya6u2l9jy9hUHFV1NPgISpMuUXPF8VgZ7O8zSBm6MRUdmatITtZa1pE8H+gdHg90xP88yVYw72bGiHR841VdAMsbp7kn5HqJspSsOGNueK1uJW6cvZ0Yr6BWOa9RnfPSU+zbm/vRMX9P91nGIsxMiuBrXkku6kFXhV0FsYn8mufX3UakL7uBFpu8ri0vXYxGvfpbRR+qQ/ymE2+nqhf4TnWzlhLxLwFko+VGwfsHzd3d+OYjamwIp2C2T21cccq0mwluqHKsUs+DV3FJy7BfCDlE+q7ocCW1Ga0H+BZ6YcC+8xs6b9AwHLRO3a1KxCTLo9r8OQaGcX/ZmlJSZz5pv5vR1qbVc3usgT04a+f4R/VxDg414UNH3USjaJ55KvM8Hw6Q4717eiRP5wIt5leoLdqUb0d3VANe/qxik/r/PfX1cbAOTN8F7RqMkSzvA9DVYYkgnBo32TsT3Vwhf44y4/BjTnLRtbMTSQ1pwvaaGQlmRh617UMjwytvovImvDVUJL8LzBlrKGk0CRxSdh9WaGuTSvxwzkMzG8tJYxl2DdCFKoSj0Pz07qow83wygXUQ1Gmp1R5SQx598qwAZ1bwTBZw2/sgu+NmVEJm0z192VTuGxqceypK1gvCpW6ksh602bmrCV4rGiUhqVBN3k+fAwTZOgX1jDV/PdmYzWpLCqG9XTMgFy7lRragkbJKB8EQMbXWxY08yCy1Wldf3CiVS/D594orIaQ1mo7pULCZfHNsfcSxnU+7Sk7RJiA5/+Sf7gzv1MWkyLL//ZSSfirc8/zzwjPKAuHnt5Ujieyf3OXUkMZ1z09mTR0soUUIBX15IlKxOti7nXJyhG3Sq/76kmurx+eNjFjp2NJPE4Gvn8GIz9Jl2UsLmhDQ/PnKUX2eQdQri81w9q95JR8c0xi4wiMjV9l+GX51C7HzUi4hJN28UAj0yZhGe6e3Dqzu3Iwh23G5siMGmrDBdsrNnYgPSuBDoIurWpzCTMZ4IU+a56pRexeFhXaxsoknn3jiSxZyiGQs5BOrTQRgDmAWCrgH8697UYbOZ00BoNy9HRgn4fmrWGrCwobKgDnNAxTmvu0wQ7jdq9WJk1NW3zb9G1cMcpc3Dab7brimmcJpzyKYLu5PAkaR3OGViXt2EPkNASHhqZbCQI3LGDagRRIMuUfNFGJm+xxONAPQspPqNLadXcr8yrHi45ZWeiEXedOo+2WyJ1cGRq+cZSZaTkBtT0V3jh9v04x3SeQpibxxtGRKPSLriaoNtpWgurmnaLJfxqxhRc8WwfXrd9G0Zgjdt3rA6skeWdLEEXGY4ynLgcZ2AoK9SnSa32+9BQnmhT4jxvJcAUn+9EXYvxmkEpavfW+QuxpZ2ESu2GaoVfp6msukbD0FrCRy57Wa8g9p5f0s+eRzi0AIYnhWmZEc94yPTKi0hkvaJpiw5VJE+v7whx0Ysb4Pr2YZeFor6m0riYZRMhNfJvo3wmoJQ6t9DMJKOV0hY6PLcI+uDmW//cBpTxdFcvPn7hBZxAQ2l3LKMz/0jbvoqgfnawBTvLeRvhpVfDSD3Hp3GWStKkdzJGJfaQEeTONYJyl1FxOePD2HT2UnrALrxx5SSUEE60vVYDL3bhEk6cwJIEFuNfV5X7Ri3OH+6pYsoVMvn7Lv5HvNTWBlfiOlSltJl+chOB/htls+ztODjgxbKKx9fGNsFs+gPM9ntZkrK+tEdGjHz3b81ifD7cHZPDObfAbFmJJ2ZmMXVLA07d2oa8mt8j7i++TCa+ZhgyGnhYsuhM/Oqk6YiXmDeY5mBoWt8kwA9QHmYY9BXYcQDbtWEECf3XGoLR8X2QMSgztgT5rvuQ2ngG0ttglRLw3AAfvfZpdIzE8PrVnRhGpa67ZEZtfh0fxwCadZVW9bpRIz8j+nSo60Jdab7rK/Pm4tvzZiNeLA7CjP2ARHUbtfvShNcmEj9JtEWl0J66TZ6S2b4OZmkx06+FLDSVFdRWP8m07QT8nS/NxzmruzEkoGMBUhcW4E4vo9zvIv/LJIKyLLP6SF2Uh9PnofRXF7n7Eyp0WC28fnEOdpeP4tMMQcvjasKc7gqSb8nDag5QfDSO/J8lswoU2K/PnYUbz16wwTGdH5pm7K7QcjZSFGGFJsWOxIrxL8W0Dgp4drSzzVHNSr3Fty3a0jv+ki9BNzHkfHXpPFzy5CTElg0geWlG0yqDcf7HDdjzuVZ0LtuN+Hl5XWyzasrc3ozh25rQ+d1diJ1WrDWbRm5uRebeNLp/NAB7dinaZ2lg9DOt2Ht3E76+YMajSxfM/QFJ7Sem6exToBTYIwcsfxdR7o7ATsw0JFelVg1iuXXzdFy7uEHFT5BtmQUwQlRQejyO+MKC6lQq77HKCAs+ys/FEDtLth/FdP/KLiEYZhnX7yB2ulyXriSvx3i+r1z6ycfmfehtfed/H+1WOc2iIqiCOgrAJC21sYRFLO6LAM+e6Hq0RQ2ULQ99cwy8OdHNCyIs4o0043ce9hQBm6Tt9PB6g4qehpGFPZlAPH52u/X1MAnDzcCeRAMrs7Jy5DoLkYATksoWEyflbyqY7s7n9/WgUIrBdkNNSgKoKkbd+SFIq/6KOP5llPOjnaq7J7QIz/LOzUlY4ODcTmqL3uB06hXYkpR3BGx31V3nfaVQA3Wi+90u1ZVU99ukEIelnt2uvy+45tSpQ6nvXPgAnrrsDlwxaxUrRwsFz8HRHPYBw1+ktv8CA9FC7oSOuBnuYaLcBrvDqHU7jfU6T5LNKwJA9aaCqKMRRDvsOnV3RJp0og11Pa0nSMrRIK9VUtLLE3M6d+Dui36IM57ehqWr3oD+zGRYTFmtowQcQv9HC9Hy6ye42WCfZeDz81NSxFpfVqZbXVU0qsCk5OvV8xdGSyWmdD9oAW5v1I2sjO3ZkL2V1fv90aoidJzypca2cc3Jf8a7pq/CHS8uwJfXnIvthW7FsbI74Uj3Sz9GOScC/fNqDXmQTRXS87mlFARnzYwnll3U1JZFmR7g7dba9Bjh1F4Ot4IKjSUY0vslKzs0CLle3qZ70GLS5c16c4rBqqL8kloN1PsqX9K9aea7+42gHEfaKeLDJz+MNRd/HjedfB+unPYnloQWg4F52Dh8qO8lHk+Jtv+INWSjpp+MarjAYvvnfVNxSXOrlJWP8pY07BaClRLUl//g8Fma7FJqmfVAU3Q9WMfrzFF9ZkdxQ5GTtGoN40lev4cfblVmbST0xBnmI/xHdhcVDo6A8++UlH0+t28qrlxxPVbnZnBOjYOy9OG2Hm6OZPz9/q6EHNG4eTlHuIQaPY7mzN+Yn1N9JMMq0mQ/icquHmpwLa/LXotHVPEalD5EP23l9VUc+fUc9UoOKQU/9x7OLSndelJfHwesckRqtKyVdnLbOjQ4hUPuATP+3v4r3n8LMAAsR90w+kkNLQAAAABJRU5ErkJggg==';
152 + }
166 153 ?>
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( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function has an internal sanitization.
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 - }
154 + <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
155 + input[name="ti-deactivate-option"] ~ div {
156 + display: none;
157 + }
198 158
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;
159 + input[name="ti-deactivate-option"]:checked ~ div {
160 + display: block;
211 161 }
212 162
213 -
214 - .ti-feedback .popup--header {
215 - position: relative;
216 - background-color: #23A1CE;
163 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
164 + background: none !important;
217 165 }
218 166
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;
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%;
227 178 }
228 179
229 - .ti-feedback .popup--body {
230 - 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;
231 183 }
232 184
233 - .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;
234 188 margin: 0;
235 - font-size: 13px;
189 + float: left;
236 190 }
237 191
238 - .ti-feedback .popup--form input[type="radio"] {
239 - <?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;
240 196 }
241 197
242 - .ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
243 - 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;
244 201 }
245 202
246 - .ti-feedback .popup--form textarea {
247 - width: 100%;
248 - margin: 10px 0 0;
203 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content {
249 204 display: none;
250 - max-height: 150px;
251 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 + }
252 211
253 - .ti-feedback li {
254 - display: flex;
255 - align-items: center;
256 - margin-bottom: 15px;
257 - 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;
258 214 }
259 215
260 - .ti-feedback li label {
261 - max-width: 90%;
216 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open {
217 + height: 590px !important;
262 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 + }
263 227
264 - .ti-feedback li:last-child {
265 - 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;
266 232 }
267 233
268 - .ti-feedback .popup--footer {
269 - 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;
270 250 }
271 251
272 - .ti-feedback .actions {
273 - display: flex;
274 - 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;
275 263 }
276 264
277 - .info-disclosure-link {
278 - width: 100%;
279 - margin-bottom: 15px;
265 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
266 + background: #e83f42;
280 267 }
281 268
282 - .ti-feedback .info-disclosure-content {
283 - max-height: 0;
284 - overflow: hidden;
285 - width: 100%;
286 - transition: .3s ease;
269 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
270 + background: transparent;
287 271 }
288 272
289 - .ti-feedback .info-disclosure-content.active {
290 - max-height: 300px;
273 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
274 + box-shadow: none;
275 + outline: none;
291 276 }
292 277
293 - .ti-feedback .info-disclosure-content p {
294 - margin: 0;
278 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
279 + box-shadow: none;
280 + transform: translateY(0);
295 281 }
296 282
297 - .ti-feedback .info-disclosure-content ul {
298 - margin: 10px 0;
299 - border-radius: 3px;
283 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
284 + cursor: not-allowed;
300 285 }
301 286
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;
287 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
288 + text-decoration: none;
309 289 }
310 290
311 - .ti-feedback .buttons {
312 - display: flex;
313 - width: 100%;
291 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
292 + background-color: #ffffff;
314 293 }
315 294
316 - .ti-feedback .buttons input:last-child {
317 - <?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;
318 297 }
319 298
320 - .ti-theme-uninstall-feedback-drawer {
321 - border-top-left-radius: 5px;
322 - position: fixed;
323 - top: 100%;
324 - 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;
325 303 }
326 304
327 - .ti-theme-uninstall-feedback-drawer.active {
328 - 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;
329 309 }
330 310
331 - .ti-theme-uninstall-feedback-drawer .popup--header {
332 - border-top-left-radius: 5px;
311 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
312 + margin-top: 1px;
333 313 }
334 314
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;
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;
349 320 }
350 321
351 - .ti-theme-uninstall-feedback-drawer .toggle span {
352 - margin: 0;
353 - display: inline-block;
322 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
323 + padding: 10px 15px;
324 + width: 100%;
354 325 }
355 326
356 - .ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
357 - transform: rotate(45deg);
327 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
328 + margin: 10px 30px;
358 329 }
359 330
360 - .ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
361 - 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%;
362 340 }
363 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 + }
364 350
365 - .ti-plugin-uninstall-feedback-popup .popup--header:before {
366 - content: "";
351 + body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
352 + width: 100%;
367 353 display: block;
368 354 position: absolute;
369 - top: 50%;
370 - transform: translateY(-50%);
371 - <?php
372 - echo is_rtl() ?
373 - 'right: -10px;
374 - border-top: 20px solid transparent;
375 - border-left: 20px solid #23A1CE;
376 - border-bottom: 20px solid transparent;' :
377 - 'left: -10px;
378 - border-top: 20px solid transparent;
379 - border-right: 20px solid #23A1CE;
380 - border-bottom: 20px solid transparent;';
381 - ?>
355 + left: 0;
356 + bottom: 0;
382 357 }
383 358
384 - .ti-plugin-uninstall-feedback-popup {
385 - display: none;
386 - position: absolute;
387 - white-space: normal;
388 - width: 400px;
389 - <?php echo is_rtl() ? 'right: calc( 100% + 15px );' : 'left: calc( 100% + 15px );'; ?>
390 - top: -15px;
359 + .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
360 + font-size: 32px;
391 361 }
392 362
393 - .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
394 - animation: rotation 2s infinite linear;
395 - display: block;
396 - float: none;
397 - align-items: center;
398 - width: 100%;
399 - margin: 0 auto;
400 - height: 100%;
401 - background: transparent;
402 - padding: 0;
363 + .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
364 + color: #eee;
403 365 }
404 366
405 - .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
406 - padding: 0;
407 - background: transparent;
408 - box-shadow: none;
409 - color: #b4b9be
367 + .<?php echo $key; ?>-container #TB_closeWindowButton {
368 + left: auto;
369 + right: -5px;
370 + top: -35px;
371 + color: #eee;
410 372 }
411 373
412 -
413 - .ti-plugin-uninstall-feedback-popup.active {
414 - 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;
415 379 }
416 380
417 - tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>"] .deactivate {
418 - position: relative;
381 + .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
382 + box-shadow: none;
383 + outline: none;
419 384 }
420 385
421 - body.ti-feedback-open .ti-feedback-overlay {
422 - content: "";
423 - display: block;
424 - background-color: rgba(0, 0, 0, 0.5);
425 - top: 0;
426 - bottom: 0;
427 - right: 0;
428 - left: 0;
429 - z-index: 10000;
430 - position: fixed;
386 + .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
387 + font: normal 25px dashicons;
431 388 }
432 389
433 - @media (max-width: 768px) {
434 - .ti-plugin-uninstall-feedback-popup {
435 - position: fixed;
436 - max-width: 100%;
437 - margin: 0 auto;
438 - left: 50%;
439 - top: 50px;
440 - transform: translateX(-50%);
441 - }
442 -
443 - .ti-plugin-uninstall-feedback-popup .popup--header:before {
444 - display: none;
445 - }
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;
446 398 }
447 399 </style>
448 400 <?php
401 + do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
449 402 }
450 403
451 404 /**
452 - * 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.
453 410 */
454 - private function add_theme_feedback_drawer_js() {
455 - $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 );
456 415 ?>
457 416 <script type="text/javascript" id="ti-deactivate-js">
458 417 (function ($) {
459 418 $(document).ready(function () {
460 - setTimeout(function () {
461 - $('.ti-theme-uninstall-feedback-drawer').addClass('active');
462 - }, <?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 + ?>
463 432
464 - $('.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) {
465 448 e.preventDefault();
466 - $('.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 + }
467 457 });
468 458
469 - $('.info-disclosure-link').on('click', function (e) {
470 - e.preventDefault();
471 - $('.info-disclosure-content').toggleClass('active');
472 - });
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'));
473 461
474 - $('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
475 - var radio = $(this);
476 - if (radio.parent().find('textarea').length > 0 &&
477 - radio.parent().find('textarea').val().length === 0) {
478 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
479 - 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) {
480 466 if ($(this).val().length === 0) {
481 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
467 + $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
482 468 } else {
483 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
469 + $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
484 470 }
485 471 });
486 472 } else {
487 - $('#<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
473 + $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
488 474 }
489 475 });
490 -
491 - $('#<?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) {
492 481 e.preventDefault();
493 482 e.stopPropagation();
494 -
495 - var selectedOption = $(
496 - '.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
497 483 $.post(ajaxurl, {
498 - 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
499 - 'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
500 - 'id': selectedOption.parent().attr('ti-option-id'),
501 - 'msg': selectedOption.parent().find('textarea').val(),
502 - 'type': 'theme',
503 - '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; ?>',
504 489 });
505 - $('.ti-theme-uninstall-feedback-drawer').fadeOut();
506 - });
507 - });
508 - })(jQuery);
509 -
510 - </script>
511 - <?php
512 - do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
513 - }
514 -
515 - /**
516 - * Render the options list.
517 - *
518 - * @param array $options the options for the feedback form.
519 - */
520 - private function render_options_list( $options ) {
521 - $key = $this->product->get_key();
522 - $inputs_row_map = [
523 - 'text' => 1,
524 - 'textarea' => 2,
525 - ];
526 - ?>
527 - <ul class="popup--form">
528 - <?php foreach ( $options as $title => $attributes ) { ?>
529 - <li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
530 - <input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
531 - <label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
532 - <?php echo esc_attr( str_replace( '{theme}', $this->product->get_name(), $title ) ); ?>
533 - </label>
534 - <?php
535 - if ( array_key_exists( 'type', $attributes ) ) {
536 - $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
537 - echo '<textarea width="100%" rows="' . esc_attr( $inputs_row_map[ $attributes['type'] ] ) . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
538 - }
539 - ?>
540 - </li>
541 - <?php } ?>
542 - </ul>
543 - <?php
544 - }
545 -
546 - /**
547 - * Render plugin feedback popup.
548 - */
549 - private function render_plugin_feedback_popup() {
550 - $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
551 - $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
552 - $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
553 - $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>';
554 -
555 - $options += $this->other;
556 - ?>
557 - <div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
558 - <div class="popup--header">
559 - <h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
560 - </div><!--/.popup--header-->
561 - <div class="popup--body">
562 - <?php $this->render_options_list( $options ); ?>
563 - </div><!--/.popup--body-->
564 - <div class="popup--footer">
565 - <div class="actions">
566 - <?php
567 - echo wp_kses_post( $info_disclosure_link );
568 - echo wp_kses_post( $this->get_disclosure_labels() );
569 - echo '<div class="buttons">';
570 - echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
571 - $button_cancel,
572 - 'secondary',
573 - $this->product->get_key() . 'ti-deactivate-no',
574 - false
575 - );
576 - echo get_submit_button( //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Function internals are escaped.
577 - $button_submit,
578 - 'primary',
579 - $this->product->get_key() . 'ti-deactivate-yes',
580 - false,
581 - array(
582 - 'data-after-text' => $button_submit,
583 - 'disabled' => true,
584 - )
585 - );
586 - echo '</div>';
587 - ?>
588 - </div><!--/.actions-->
589 - </div><!--/.popup--footer-->
590 - </div>
591 -
592 - <?php
593 - }
594 -
595 - /**
596 - * Add plugin feedback popup JS
597 - */
598 - private function add_plugin_feedback_popup_js() {
599 - $popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
600 - $key = $this->product->get_key();
601 - ?>
602 - <script type="text/javascript" id="ti-deactivate-js">
603 - (function ($) {
604 - $(document).ready(function () {
605 - var targetElement = 'tr[data-plugin^="<?php echo esc_attr( $this->product->get_slug() ); ?>/"] span.deactivate a';
606 - var redirectUrl = $(targetElement).attr('href');
607 - if ($('.ti-feedback-overlay').length === 0) {
608 - $('body').prepend('<div class="ti-feedback-overlay"></div>');
609 - }
610 - $('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
611 -
612 - $(targetElement).on('click', function (e) {
613 - e.preventDefault();
614 - $('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
615 - $('body').addClass('ti-feedback-open');
616 - $('.ti-feedback-overlay').on('click', function () {
617 - $('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
618 - $('body').removeClass('ti-feedback-open');
619 - });
620 - });
621 -
622 - $('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
623 - e.preventDefault();
624 - $(this).parent().find('.info-disclosure-content').toggleClass('active');
625 - });
626 -
627 - $('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
628 - var radio = $(this);
629 - if (radio.parent().find('textarea').length > 0 &&
630 - radio.parent().find('textarea').val().length === 0) {
631 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
632 - radio.parent().find('textarea').on('keyup', function (e) {
633 - if ($(this).val().length === 0) {
634 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').attr('disabled', 'disabled');
635 - } else {
636 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
637 - }
638 - });
490 + var redirect = $(this).attr('data-ti-action');
491 + if (redirect != '') {
492 + location.href = redirect;
639 493 } else {
640 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').removeAttr('disabled');
494 + $('body').unbind('thickbox:removed');
495 + tb_remove();
641 496 }
642 497 });
643 498
644 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-no').on('click', function (e) {
645 - e.preventDefault();
646 - e.stopPropagation();
647 - $(targetElement).unbind('click');
648 - $('body').removeClass('ti-feedback-open');
649 - $('<?php echo esc_attr( $popup_id ); ?>').remove();
650 - if (redirectUrl !== '') {
651 - location.href = redirectUrl;
652 - }
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();
653 503 });
654 504
655 - $('<?php echo esc_attr( $popup_id ); ?> #<?php echo esc_attr( $key ); ?>ti-deactivate-yes').on('click', function (e) {
656 - e.preventDefault();
657 - e.stopPropagation();
658 - $(targetElement).unbind('click');
659 - var selectedOption = $(
660 - '<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
661 - var data = {
662 - 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
663 - 'nonce': '<?php echo esc_attr( wp_create_nonce( (string) __CLASS__ ) ); ?>',
664 - 'id': selectedOption.parent().attr('ti-option-id'),
665 - 'msg': selectedOption.parent().find('textarea').val(),
666 - 'type': 'plugin',
667 - 'key': '<?php echo esc_attr( $key ); ?>'
668 - };
669 - $.ajax({
670 - type: 'POST',
671 - url: ajaxurl,
672 - data: data,
673 - complete() {
674 - $('body').removeClass('ti-feedback-open');
675 - $('<?php echo esc_attr( $popup_id ); ?>').remove();
676 - if (redirectUrl !== '') {
677 - location.href = redirectUrl;
678 - }
679 - },
680 - beforeSend() {
681 - $('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
682 - $('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
683 - $('<?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();
684 514 }
685 - });
686 - });
515 + }, 100);
516 + }
687 517 });
688 518 })(jQuery);
689 -
690 519 </script>
691 520 <?php
521 +
692 522 do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
693 523 }
694 524
695 525 /**
696 - * Get the disclosure labels markup.
526 + * Generates the HTML.
697 527 *
698 - * @return string
528 + * @param string $type The type of product.
529 + * @param string $key The product key.
699 530 */
700 - 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 +
701 561 $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
702 562 $disclosure_labels = array_merge(
703 563 [
704 - 'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No email address or IP addresses are transmitted after you submit the survey.',
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.',
705 565 'items' => [
706 566 sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
707 - sprintf( '%sCurrent website:%s %s %s %s', '<strong>', '</strong>', '<code>', get_site_url(), '</code>' ),
708 - sprintf( '%sUsage time:%s %s %s%s', '<strong>', '</strong>', '<code>', ( time() - $this->product->get_install_time() ), 's</code>' ),
709 - sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
567 + sprintf( '%s Uninstall reason %s %s Selected reson from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
710 568 ],
711 569 ],
712 570 $disclosure_new_labels
713 571 );
714 572
715 - $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>';
716 575 foreach ( $disclosure_labels['items'] as $disclosure_item ) {
717 576 $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
718 577 }
719 578 $info_disclosure_content .= '</ul></div>';
720 579
721 - 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>';
722 597 }
723 598
724 599 /**
725 600 * Randomizes the options array.
@@ -725,9 +600,9 @@
725 600 * Randomizes the options array.
726 601 *
727 602 * @param array $options The options array.
728 603 */
729 - public function randomize_options( $options ) {
604 + function randomize_options( $options ) {
730 605 $new = array();
731 606 $keys = array_keys( $options );
732 607 shuffle( $keys );
733 608
@@ -740,9 +615,9 @@
740 615
741 616 /**
742 617 * Called when the deactivate button is clicked.
743 618 */
744 - public function post_deactivate() {
619 + function post_deactivate() {
745 620 check_ajax_referer( (string) __CLASS__, 'nonce' );
746 621
747 622 $this->post_deactivate_or_cancel();
748 623
@@ -754,10 +629,10 @@
754 629 }
755 630 $this->call_api(
756 631 array(
757 632 'type' => 'deactivate',
758 - 'id' => sanitize_key( $_POST['id'] ),
759 - 'comment' => isset( $_POST['msg'] ) ? sanitize_textarea_field( $_POST['msg'] ) : '',
633 + 'id' => $_POST['id'],
634 + 'comment' => isset( $_POST['msg'] ) ? $_POST['msg'] : '',
760 635 )
761 636 );
762 637 wp_send_json( [] );
763 638
@@ -766,16 +641,16 @@
766 641 /**
767 642 * Called when the deactivate/cancel button is clicked.
768 643 */
769 644 private function post_deactivate_or_cancel() {
770 - 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'] ) ) {
771 646 return;
772 647 }
773 - if ( 'theme' !== $_POST['type'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function.
648 + if ( 'theme' !== $_POST['type'] ) {
774 649 return;
775 650 }
776 651
777 - 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 );
778 653
779 654 }
780 655
781 656 /**
@@ -785,14 +660,12 @@
785 660 *
786 661 * @return bool Is the request succesfull?
787 662 */
788 663 protected function call_api( $attributes ) {
789 - $slug = $this->product->get_slug();
790 - $version = $this->product->get_version();
791 - $attributes['slug'] = $slug;
792 - $attributes['version'] = $version;
793 - $attributes['url'] = get_site_url();
794 - $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;
795 668
796 669 $response = wp_remote_post(
797 670 self::FEEDBACK_ENDPOINT,
798 671 array(
@@ -845,13 +718,8 @@
845 718 *
846 719 * @return Uninstall_Feedback Current module instance.
847 720 */
848 721 public function load( $product ) {
849 -
850 - if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
851 - return;
852 - }
853 -
854 722 $this->product = $product;
855 723 add_action( 'admin_head', array( $this, 'load_resources' ) );
856 724 add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
857 725