public static function ajax_manage_perk() { $request = parse_url(gwpost('request_url')); parse_str(gwar($request, 'query'), $request); if (empty($request)) { GWPerks::json_and_die(array('error' => __('There was an error managing this perk.', 'gravityperks'))); } $action = gwar($request, 'action'); $plugin = gwar($request, 'plugin'); $_REQUEST['_wpnonce'] = gwar($request, '_wpnonce'); // use some of WPs default plugin management functionality // @see wp-admin/plugins.php switch ($action) { case 'activate': if (!current_user_can('activate_plugins')) { wp_die(__('You do not have sufficient permissions to activate plugins for this site.', 'gravityperks')); } check_admin_referer('activate-plugin_' . $plugin); $result = activate_plugin($plugin, null, is_network_admin()); if (is_wp_error($result)) { if ('unexpected_output' == $result->get_error_code()) { $error_data = $result->get_error_data(); } else { $error_data = $result; } GWPerks::json_and_die(array('error' => __('There was an error activating this perk.', 'gravityperks'), 'error_data' => $error_data)); } if (!is_network_admin()) { $recent = (array) get_option('recently_activated'); unset($recent[$plugin]); update_option('recently_activated', $recent); } $perk_data = GWPerk::get_perk_data($plugin); GWPerks::json_and_die(array('success' => 1, 'listing_html' => self::get_perk_listing($plugin, $perk_data, true))); break; case 'deactivate': if (!current_user_can('activate_plugins')) { wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.', 'gravityperks')); } check_admin_referer('deactivate-plugin_' . $plugin); if (!is_network_admin() && is_plugin_active_for_network($plugin)) { GWPerks::json_and_die(array('error' => __('This perk can only be managed from the network admin\'s Plugins page.', 'gravityperks'))); } deactivate_plugins($plugin, false, is_network_admin()); if (!is_network_admin()) { update_option('recently_activated', array($plugin => time()) + (array) get_option('recently_activated')); } $perk_data = GWPerk::get_perk_data($plugin); GWPerks::json_and_die(array('success' => 1, 'listing_html' => self::get_perk_listing($plugin, $perk_data, true))); break; case 'uninstall': if (!current_user_can('delete_plugins')) { wp_die(__('You do not have sufficient permissions to delete plugins for this site.', 'gravityperks')); } check_admin_referer('uninstall-plugin_' . $plugin); deactivate_plugins($plugin, true); $perk = GWPerk::get_perk($plugin); $perk->uninstall(); $result = delete_plugins(array($plugin)); if ($result) { $response = json_encode(array('success' => 1, 'listing_html' => '')); } else { $response = __('ERROR'); } die($response); break; } GWPerks::json_and_die(array('error' => __('There was an error managing this perk.', 'gravityperks'))); }