Example #1
0
 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')));
 }