/** * Manage Jetpack Modules * * ## OPTIONS * * list : View all available modules, and their status. * activate all : Activate all modules * deactivate all: Deactivate all modules * * activate <module_slug> : Activate a module. * deactivate <module_slug> : Deactivate a module. * toggle <module_slug> : Toggle a module on or off. * * ## EXAMPLES * * wp jetpack module list * wp jetpack module activate stats * wp jetpack module deactivate stats * wp jetpack module toggle stats * * wp jetpack module activate all * wp jetpack module deactivate all * * @synopsis <list|activate|deactivate|toggle> [<module_name>] */ public function module($args, $assoc_args) { $action = isset($args[0]) ? $args[0] : 'list'; if (!in_array($action, array('list', 'activate', 'deactivate', 'toggle'))) { WP_CLI::error(sprintf(__('%s is not a valid command.', 'jetpack'), $action)); } if (in_array($action, array('activate', 'deactivate', 'toggle'))) { if (isset($args[1])) { $module_slug = $args[1]; if ('all' !== $module_slug && !Jetpack::is_module($module_slug)) { WP_CLI::error(sprintf(__('%s is not a valid module.', 'jetpack'), $module_slug)); } if ('toggle' == $action) { $action = Jetpack::is_module_active($module_slug) ? 'deactivate' : 'activate'; } // Bulk actions if ('all' == $args[1]) { $action = 'deactivate' == $action ? 'deactivate_all' : 'activate_all'; } // VaultPress needs to be handled elsewhere. if (in_array($action, array('activate', 'deactivate', 'toggle')) && 'vaultpress' == $args[1]) { WP_CLI::error(sprintf(_x('Please visit %s to configure your VaultPress subscription.', '%s is a website', 'jetpack'), esc_url('https://vaultpress.com/jetpack/'))); } } else { WP_CLI::line(__('Please specify a valid module.', 'jetpack')); $action = 'list'; } } switch ($action) { case 'list': WP_CLI::line(__('Available Modules:', 'jetpack')); $modules = Jetpack::get_available_modules(); sort($modules); foreach ($modules as $module_slug) { if ('vaultpress' == $module_slug) { continue; } $active = Jetpack::is_module_active($module_slug) ? __('Active', 'jetpack') : __('Inactive', 'jetpack'); WP_CLI::line("\t" . str_pad($module_slug, 24) . $active); } break; case 'activate': $module = Jetpack::get_module($module_slug); Jetpack::log('activate', $module_slug); Jetpack::activate_module($module_slug, false, false); WP_CLI::success(sprintf(__('%s has been activated.', 'jetpack'), $module['name'])); break; case 'activate_all': $modules = Jetpack::get_available_modules(); Jetpack::update_active_modules($modules); WP_CLI::success(__('All modules activated!', 'jetpack')); break; case 'deactivate': $module = Jetpack::get_module($module_slug); Jetpack::log('deactivate', $module_slug); Jetpack::deactivate_module($module_slug); WP_CLI::success(sprintf(__('%s has been deactivated.', 'jetpack'), $module['name'])); break; case 'deactivate_all': Jetpack::delete_active_modules(); WP_CLI::success(__('All modules deactivated!', 'jetpack')); break; case 'toggle': // Will never happen, should have been handled above and changed to activate or deactivate. break; } }
function authorize($data = array()) { $redirect = isset($data['redirect']) ? esc_url_raw((string) $data['redirect']) : ''; $jetpack_unique_connection = Jetpack_Options::get_option('unique_connection'); // Checking if site has been active/connected previously before recording unique connection if (!$jetpack_unique_connection) { // jetpack_unique_connection option has never been set $jetpack_unique_connection = array('connected' => 0, 'disconnected' => 0, 'version' => '3.6.1'); update_option('jetpack_unique_connection', $jetpack_unique_connection); //track unique connection $jetpack = $this->get_jetpack(); $jetpack->stat('connections', 'unique-connection'); $jetpack->do_stats('server_side'); } // increment number of times connected $jetpack_unique_connection['connected'] += 1; Jetpack_Options::update_option('unique_connection', $jetpack_unique_connection); $role = Jetpack::translate_current_user_to_role(); if (!$role) { return new Jetpack_Error('no_role', 'Invalid request.', 400); } $cap = Jetpack::translate_role_to_cap($role); if (!$cap) { return new Jetpack_Error('no_cap', 'Invalid request.', 400); } if (!empty($data['error'])) { return new Jetpack_Error($data['error'], 'Error included in the request.', 400); } if (!isset($data['state'])) { return new Jetpack_Error('no_state', 'Request must include state.', 400); } if (!ctype_digit($data['state'])) { return new Jetpack_Error($data['error'], 'State must be an integer.', 400); } $current_user_id = get_current_user_id(); if ($current_user_id != $data['state']) { return new Jetpack_Error('wrong_state', 'State does not match current user.', 400); } if (empty($data['code'])) { return new Jetpack_Error('no_code', 'Request must include an authorization code.', 400); } $token = $this->get_token($data); if (is_wp_error($token)) { $code = $token->get_error_code(); if (empty($code)) { $code = 'invalid_token'; } return new Jetpack_Error($code, $token->get_error_message(), 400); } if (!$token) { return new Jetpack_Error('no_token', 'Error generating token.', 400); } $is_master_user = !Jetpack::is_active(); Jetpack::update_user_token($current_user_id, sprintf('%s.%d', $token, $current_user_id), $is_master_user); if (!$is_master_user) { Jetpack::state('message', 'linked'); // Don't activate anything since we are just connecting a user. return 'linked'; } $redirect_on_activation_error = 'client' === $data['auth_type'] ? true : false; if ($active_modules = Jetpack_Options::get_option('active_modules')) { Jetpack::delete_active_modules(); Jetpack::activate_default_modules(999, 1, $active_modules, $redirect_on_activation_error); } else { Jetpack::activate_default_modules(false, false, array(), $redirect_on_activation_error); } // Start nonce cleaner wp_clear_scheduled_hook('jetpack_clean_nonces'); wp_schedule_event(time(), 'hourly', 'jetpack_clean_nonces'); Jetpack::state('message', 'authorized'); return 'authorized'; }