/**
  * deactive the module
  * @param $args
  * @param $assoc_args
  * @cmd wp hw-module deactive xx
  */
 public function deactivate($args, $assoc_args)
 {
     $name = $this->get_cmd_arg($assoc_args, 'name');
     //get module name
     if ($name) {
         hw_deactivate_modules(array($name));
     }
     $this->result(' deactivate module ' . $name . ' successful.');
 }
 /**
  * process bulk actions for module/plugin
  * @param array $plugins
  * @param $action action bulk
  */
 public function process_bulk_action($plugins = array(), $action = '')
 {
     // Grab plugin data from $_POST.
     #$plugins             = isset( $_POST['plugin'] ) ? (array) $_POST['plugin'] : array();
     $plugins_to_activate = array();
     // Split plugin value into array with plugin file path, plugin source and plugin name.
     $plugins_need2activate = array();
     if (is_array($plugins)) {
         foreach ($plugins as $i => $plugin) {
             $_plugin = explode(',', $plugin);
             if (isset(HW_TGM_Module_Activation::get_instance()->plugins[$_plugin[0]])) {
                 $module_info = HW_TGM_Module_Activation::get_instance()->plugins[$_plugin[0]];
                 $active = array();
                 //local downloaded plugins
                 if (!empty($module_info['require_wp_plugin']) && file_exists(WP_PLUGIN_DIR . '/' . trim($module_info['require_wp_plugin'], '/'))) {
                     $active[] = $module_info['require_wp_plugin'];
                     $active[] = 'repo';
                     $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . trim($module_info['require_wp_plugin'], '/'));
                     $active[] = $plugin_data['Name'];
                 }
                 if (!empty($module_info['require_module'])) {
                     //check module that require an other
                     $require_module = $module_info['require_module'];
                     if (!hw_is_active_module($require_module)) {
                         hw_inline_msg("Xin lỗi, module `{$module_info['name']}` yêu cầu cài trước module " . $require_module);
                         $plugins_to_activate[] = array($module_info['slug'], $module_info['name']);
                     }
                 }
                 if (!empty($module_info['require_wp_plugin']) && !is_plugin_active($module_info['require_wp_plugin']) && !empty($active)) {
                     $plugins_need2activate[] = $active;
                 }
             }
             $plugins_to_activate[] = $_plugin;
         }
     }
     foreach ($plugins_to_activate as $i => $array) {
         if (isset($array[1]) && !preg_match('|.php$|', $array[1])) {
             unset($plugins_to_activate[$i]);
         }
     }
     // Return early if there are no plugins to activate.
     if (empty($plugins_to_activate)) {
         return;
     }
     //activate plugins require for the your modules
     if (count($plugins_need2activate)) {
         $this->hw_activate_plugins($plugins_need2activate);
     }
     if ('tgmpa-bulk-activate' === $action) {
         // Now we are good to go - let's start activating plugins.
         hw_activate_modules($plugins_to_activate);
     } elseif ('tgmpa-bulk-deactivate' === $action) {
         //deactive module
         hw_deactivate_modules($plugins_to_activate);
     }
     // Update recently activated plugins option.
     $recent = (array) get_option('recently_activated');
     foreach ($plugins as $plugin => $time) {
         if (isset($recent[$plugin])) {
             unset($recent[$plugin]);
         }
     }
     update_option('recently_activated', $recent);
 }
 /**
  * Deactivates a plugin before it is upgraded.
  *
  * Hooked to the {@see 'upgrader_pre_install'} filter by {@see Plugin_Upgrader::upgrade()}.
  *
  * @since 2.8.0
  * @since 4.1.0 Added a return value.
  *
  * @param bool|WP_Error  $return Upgrade offer return.
  * @param array          $plugin Plugin package arguments.
  * @return bool|WP_Error The passed in $return param or {@see WP_Error}.
  */
 public function deactivate_module_before_upgrade($return, $plugin)
 {
     if (is_wp_error($return)) {
         //Bypass.
         return $return;
     }
     // When in cron (background updates) don't deactivate the plugin, as we require a browser to reactivate it
     if (defined('DOING_CRON') && DOING_CRON) {
         return $return;
     }
     $plugin = isset($plugin['plugin']) ? $plugin['plugin'] : '';
     if (empty($plugin)) {
         return new WP_Error('bad_request', $this->strings['bad_request']);
     }
     if (hw_is_active_module($plugin)) {
         //Deactivate the plugin silently, Prevent deactivation hooks from running.
         hw_deactivate_modules($plugin);
     }
     return $return;
 }