PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.2.4.5
Adminify – White Label, Admin Menu Editor, Login Customizer v3.2.4.5
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Libs / Recommended.php

Recommended.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.2.4.5, at Libs/Recommended.php

472 lines 13.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPAdminify\Libs;
4
5 // No, Direct access Sir !!!
6 if (!defined('ABSPATH')) {
7 exit;
8 }
9
10 /*
11 * Recommended global class
12 */
13
14 if (!class_exists('Recommended')) {
15
16 /**
17 * Recommended Class
18 *
19 * Jewel Theme <support@jeweltheme.com>
20 */
21 class Recommended
22 {
23
24
25 public $menu_items;
26 public $plugins_list;
27 public $sub_menu;
28 public $menu_order;
29
30
31 /**
32 * Constructor method
33 *
34 * @param integer $menu_order .
35 * @author Jewel Theme <support@jeweltheme.com>
36 */
37 public function __construct($menu_order = 99)
38 {
39 $this->menu_order = $menu_order;
40 $this->menu_items = $this->menu_items();
41 $this->plugins_list = $this->plugins_list();
42
43 $this->includes();
44
45 add_action('admin_menu', array($this, 'admin_menu'), $this->menu_order);
46 // add_action('network_admin_menu', array($this, 'admin_menu'), $this->menu_order);
47 add_action('wp_ajax_jltwp_adminify_recommended_upgrade_plugin', array($this, 'jltwp_adminify_recommended_upgrade_plugin'));
48 add_action('wp_ajax_jltwp_adminify_recommended_activate_plugin', array($this, 'jltwp_adminify_recommended_activate_plugin'));
49 }
50
51 /**
52 * Includes
53 *
54 * @author Jewel Theme <support@jeweltheme.com>
55 */
56 public function includes()
57 {
58 if (!function_exists('install_plugin_install_status')) {
59 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
60 }
61 }
62
63 /**
64 * Menu Items
65 *
66 * @author Jewel Theme <support@jeweltheme.com>
67 */
68 public function menu_items()
69 {
70 return array();
71 }
72
73 /**
74 * Plugins list
75 *
76 * @author Jewel Theme <support@jeweltheme.com>
77 */
78 public function plugins_list()
79 {
80 return array();
81 }
82
83 /**
84 * Admin submenu
85 */
86 public function admin_menu()
87 {
88 }
89
90 /**
91 * Render recommended plugins body
92 */
93 public function render_recommended_plugins()
94 {
95 ?>
96 <div class='wp-adminify-recommended-wrapper'>
97 <?php $this->header(); ?>
98 <?php $this->body(); ?>
99 </div>
100 <?php
101 }
102
103 /**
104 * Header
105 */
106 public function header()
107 {
108 ?>
109 <div class='wp-adminify-recommended-header'>
110 <div class='wp-adminify-recommended-title'>
111 <h2>
112 <?php echo esc_html__('Recommended Plugins', 'adminify'); ?>
113 </h2>
114 </div>
115 <div class='wp-adminify-recommended-menu'>
116 <div class="wp-filter">
117 <ul class="filter-links">
118 <?php
119 $i = 0;
120
121 foreach ($this->menu_items as $menu) {
122 $class = str_replace(' ', '-', strtolower($menu['key']));
123 ?>
124 <li class="plugin-install-<?php echo esc_attr($class); ?>">
125 <a href="#" class="<?php echo esc_attr(0 === $i ? 'current' : ''); ?>" data-type="<?php echo esc_attr($menu['key']); ?>"><?php echo esc_html($menu['label']); ?></a>
126 </li>
127 <?php
128 ++$i;
129 }
130 ?>
131 </ul>
132
133 <form class="search-form wp-adminify-search-plugins mr-0" method="get">
134 <input type="hidden" name="tab" value="search">
135 <label class="screen-reader-text" for="search-plugins">
136 <?php echo esc_html__('Search Plugins', 'adminify'); ?>
137 </label>
138 <input type="search" name="s" id="search-plugins" value="" class="wp-filter-search" placeholder="<?php echo esc_html__('Search plugins...', 'adminify'); ?>">
139 <input type="submit" id="search-submit" class="button hide-if-js" value="<?php echo esc_html__('Search Plugins', 'adminify'); ?>">
140 </form>
141 </div>
142 </div>
143 </div>
144 <?php
145 }
146
147 /**
148 * Body
149 */
150 public function body()
151 {
152 ?>
153 <div class="wp-list-table widefat plugin-install">
154 <div id="the-list">
155 <?php
156 $this->plugins();
157 ?>
158 </div>
159 </div>
160 <?php
161 }
162
163 /**
164 * Body
165 */
166 public function plugins()
167 {
168 foreach ($this->plugins_list as $key => $plugin) {
169 $install_status = \install_plugin_install_status($plugin);
170 $classes = implode(' ', $plugin['type']);
171
172 $more_details = self_admin_url(
173 'plugin-install.php?tab=plugin-information&amp;plugin=' . esc_attr($plugin['slug']) .
174 '&amp;TB_iframe=true&amp;width=600&amp;height=550'
175 );
176 ?>
177 <div class="plugin-card plugin-card-<?php echo esc_attr($key); ?> <?php echo esc_attr($classes); ?>">
178 <div class="plugin-card-top">
179 <div class="name column-name">
180 <h3>
181 <a href="<?php echo esc_url($more_details); ?>" class="thickbox open-plugin-details-modal">
182 <?php echo esc_html($plugin['name']); ?>
183 <img src="<?php echo esc_url($plugin['icon']); ?>" class="plugin-icon" alt="">
184 </a>
185 </h3>
186 </div>
187 <div class="desc column-description">
188 <p><?php echo wp_kses_post($plugin['short_description']); ?></p>
189 </div>
190 </div>
191 <div class="plugin-card-bottom">
192 <div class="column-downloaded">
193 <span class="plugin-status">
194 <?php
195 echo esc_html__('Status:', 'adminify');
196
197 if ('install' === $install_status['status']) {
198 ?>
199 <span class="plugin-status-not-install" data-plugin-url="<?php echo esc_attr($plugin['download_link']); ?>"><?php echo esc_html__('No Installed', 'adminify'); ?></span>
200 <?php
201 } elseif ('update_available' === $install_status['status']) {
202 if (is_plugin_active($install_status['file'])) {
203 ?>
204 <span class="plugin-status-active">
205 <?php echo esc_html__('Active', 'adminify'); ?>
206 </span>
207 <?php
208 } else {
209 ?>
210 <span class="plugin-status-inactive" data-plugin-file="<?php echo esc_attr(esc_attr($install_status['file'])); ?>">
211 <?php echo esc_html__('Inactive', 'adminify'); ?>
212 </span>
213 <?php
214 }
215 } elseif (('latest_installed' === $install_status['status']) || ('newer_installed' === $install_status['status'])) {
216 if (is_plugin_active($install_status['file'])) {
217 ?>
218 <span class="plugin-status-active">
219 <?php echo esc_html__('Active', 'adminify'); ?>
220 </span>
221 <?php
222 } elseif (current_user_can('activate_plugin', $install_status['file'])) {
223 ?>
224 <span class="plugin-status-inactive" data-plugin-file="<?php echo esc_attr($install_status['file']); ?>">
225 <?php echo esc_html__('Inactive', 'adminify'); ?>
226 </span>
227 <?php
228 } else {
229 ?>
230 <span class="plugin-status-inactive" data-plugin-file="<?php echo esc_attr($install_status['file']); ?>">
231 <?php echo esc_html__('Inactive', 'adminify'); ?>
232 </span>
233 <?php
234 }
235 }
236 ?>
237 </span>
238 </div>
239 <div class="column-compatibility">
240 <ul class="plugin-action-buttons mr-0">
241 <?php
242 if ('install' === $install_status['status']) {
243 ?>
244 <li class="mr-0">
245 <button class="install-now button button-primary" data-install-url="<?php echo esc_attr($plugin['download_link']); ?>">
246 <?php echo esc_html__('Install Now', 'adminify'); ?>
247 </button>
248 </li>
249 <?php
250 } elseif ('update_available' === $install_status['status']) {
251 ?>
252 <li class="mr-0">
253 <button class="update-now button" data-plugin="<?php echo esc_attr($install_status['file']); ?>" data-slug="<?php echo esc_attr($plugin['slug']); ?>" data-update-url="<?php echo esc_attr($install_status['url']); ?>">
254 <?php echo esc_html__('Update Now', 'adminify'); ?>
255 </button>
256 </li>
257 <?php
258 } elseif (('latest_installed' === $install_status['status']) || ('newer_installed' === $install_status['status'])) {
259 if (is_plugin_active($install_status['file'])) {
260 ?>
261 <li class="mr-0">
262 <button type="button" class="button button-disabled" disabled="disabled">
263 <?php echo esc_html__('Activated', 'adminify'); ?>
264 </button>
265 </li>
266 <?php
267 } elseif (current_user_can('activate_plugin', $install_status['file'])) {
268 ?>
269 <button class="button activate-now" data-plugin-file="<?php echo esc_attr($install_status['file']); ?>">
270 <?php echo esc_html__('Activate', 'adminify'); ?>
271 </button>
272 <?php
273 } else {
274 ?>
275 <li class="mr-0">
276 <button type="button" class="button button-disabled" disabled="disabled">
277 <?php echo esc_html__('Installed', 'adminify'); ?>
278 </button>
279 </li>
280 <?php
281 }
282 }
283 ?>
284 </ul>
285 </div>
286 </div>
287 </div>
288 <?php
289 }
290 }
291
292 /**
293 * Activate Plugins
294 *
295 * @author Jewel Theme <support@jeweltheme.com>
296 */
297 public function jltwp_adminify_recommended_activate_plugin()
298 {
299 try {
300 if (isset($_POST['file'])) {
301 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
302
303 if (!wp_verify_nonce($nonce, 'jltwp_adminify_recommended_nonce')) {
304 wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify')));
305 }
306
307 if ((is_multisite() && !is_network_admin()) || !current_user_can('install_plugins')) {
308 wp_send_json_error(array('mess' => __('Invalid access', 'adminify')));
309 }
310
311 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
312 $plugin_links = array_values(wp_list_pluck($this->plugins_list, 'download_link'));
313
314 if (!in_array($plugin, $plugin_links)) {
315 wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
316 }
317
318 $file = sanitize_text_field(wp_unslash($_POST['file']));
319 $result = activate_plugin($file);
320
321 if (is_wp_error($result)) {
322 wp_send_json_error(
323 array(
324 'mess' => $result->get_error_message(),
325 )
326 );
327 }
328 wp_send_json_success(
329 array(
330 'mess' => __('Activate success', 'adminify'),
331 )
332 );
333 }
334 } catch (\Exception $ex) {
335 wp_send_json_error(
336 array(
337 'mess' => __('Error exception.', 'adminify'),
338 array(
339 'error' => $ex,
340 ),
341 )
342 );
343 }
344 }
345
346 /**
347 * Upgrade Plugins required Libraries
348 *
349 * @author Jewel Theme <support@jeweltheme.com>
350 */
351 public function jltwp_adminify_recommended_upgrade_plugin()
352 {
353 try {
354 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
355 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
356 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
357 require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
358
359 if (isset($_POST['plugin'])) {
360 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
361
362 if (!wp_verify_nonce($nonce, 'jltwp_adminify_recommended_nonce')) {
363 wp_send_json_error(array('mess' => __('Nonce is invalid', 'adminify')));
364 }
365
366 if ((is_multisite() && !is_network_admin()) || !current_user_can('install_plugins')) {
367 wp_send_json_error(array('mess' => __('Invalid access', 'adminify')));
368 }
369
370 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
371 $plugin_links = array_values(wp_list_pluck($this->plugins_list, 'download_link'));
372
373 if (!in_array($plugin, $plugin_links)) {
374 wp_send_json_error(array('mess' => __('Invalid plugin', 'adminify')));
375 }
376
377 $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
378 $skin = new \WP_Ajax_Upgrader_Skin();
379 $upgrader = new \Plugin_Upgrader($skin);
380
381 if ('install' === $type) {
382 $result = $upgrader->install($plugin);
383
384 if (is_wp_error($result)) {
385 wp_send_json_error(
386 array(
387 'mess' => $result->get_error_message(),
388 )
389 );
390 }
391 $args = array(
392 'slug' => $upgrader->result['destination_name'],
393 'fields' => array(
394 'short_description' => true,
395 'icons' => true,
396 'banners' => false,
397 'added' => false,
398 'reviews' => false,
399 'sections' => false,
400 'requires' => false,
401 'rating' => false,
402 'ratings' => false,
403 'downloaded' => false,
404 'last_updated' => false,
405 'added' => false,
406 'tags' => false,
407 'compatibility' => false,
408 'homepage' => false,
409 'donate_link' => false,
410 ),
411 );
412 $plugin_data = plugins_api('plugin_information', $args);
413
414 if ($plugin_data && !is_wp_error($plugin_data)) {
415 $install_status = \install_plugin_install_status($plugin_data);
416 $active_plugin = activate_plugin($install_status['file']);
417
418 if (is_wp_error($active_plugin)) {
419 wp_send_json_error(
420 array(
421 'mess' => $active_plugin->get_error_message(),
422 )
423 );
424 } else {
425 wp_send_json_success(
426 array(
427 'mess' => __('Install success', 'adminify'),
428 )
429 );
430 }
431 } else {
432 wp_send_json_error(
433 array(
434 'mess' => 'Error',
435 )
436 );
437 }
438 } else {
439 $is_active = is_plugin_active($plugin);
440 $result = $upgrader->upgrade($plugin);
441
442 if (is_wp_error($result)) {
443 wp_send_json_error(
444 array(
445 'mess' => $result->get_error_message(),
446 )
447 );
448 } else {
449 activate_plugin($plugin);
450 wp_send_json_success(
451 array(
452 'mess' => __('Update success', 'adminify'),
453 'active' => $is_active,
454 )
455 );
456 }
457 }
458 }
459 } catch (\Exception $ex) {
460 wp_send_json_error(
461 array(
462 'mess' => __('Error exception.', 'adminify'),
463 array(
464 'error' => $ex,
465 ),
466 )
467 );
468 }
469 }
470 }
471 }
472