Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Jetpack_JSON_API_Modules_Modify_Endpoint
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 3
342
0.00% covered (danger)
0.00%
0 / 1
 default_action
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
20
 activate_module
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
56
 deactivate_module
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
56
1<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3if ( ! defined( 'ABSPATH' ) ) {
4    exit( 0 );
5}
6
7/**
8 * Modules modify endpoint class.
9 *
10 * POST  /sites/%s/jetpack/modules/%s/activate
11 * POST  /sites/%s/jetpack/modules/%s
12 * POST  /sites/%s/jetpack/modules
13 *
14 * @phan-constructor-used-for-side-effects
15 */
16class Jetpack_JSON_API_Modules_Modify_Endpoint extends Jetpack_JSON_API_Modules_Endpoint {
17    /**
18     * Needed capabilities.
19     *
20     * @var string
21     */
22    protected $needed_capabilities = 'activate_plugins';
23
24    /**
25     * The action.
26     *
27     * @var string
28     */
29    protected $action = 'default_action';
30
31    /**
32     * Keeps track of module logs.
33     *
34     * @var array
35     */
36    public $log;
37
38    /**
39     * The default action.
40     */
41    public function default_action() {
42        $args = $this->input();
43        if ( isset( $args['active'] ) && is_bool( $args['active'] ) ) {
44            if ( $args['active'] ) {
45                return $this->activate_module();
46            } else {
47                return $this->deactivate_module();
48            }
49        }
50
51        return true;
52    }
53
54    /**
55     * Activate module.
56     *
57     * @return bool|WP_Error
58     */
59    protected function activate_module() {
60        foreach ( $this->modules as $module ) {
61            if ( Jetpack::is_module_active( $module ) ) {
62                $error                  = __( 'The Jetpack Module is already activated.', 'jetpack' );
63                $this->log[ $module ][] = $error;
64                continue;
65            }
66            $result = Jetpack::activate_module( $module, false, false );
67            if ( false === $result || ! Jetpack::is_module_active( $module ) ) {
68                $error                  = __( 'There was an error while activating the module.', 'jetpack' );
69                $this->log[ $module ][] = $error;
70            }
71        }
72
73        if ( ! $this->bulk && isset( $error ) ) {
74            return new WP_Error( 'activation_error', $error, 400 );
75        }
76
77        return true;
78    }
79
80    /**
81     * Deactivate module.
82     *
83     * @return bool|WP_Error
84     */
85    protected function deactivate_module() {
86        foreach ( $this->modules as $module ) {
87            if ( ! Jetpack::is_module_active( $module ) ) {
88                $error                = __( 'The Jetpack Module is already deactivated.', 'jetpack' );
89                $this->log[ $module ] = $error;
90                continue;
91            }
92            $result = Jetpack::deactivate_module( $module );
93            if ( false === $result || Jetpack::is_module_active( $module ) ) {
94                $error                = __( 'There was an error while deactivating the module.', 'jetpack' );
95                $this->log[ $module ] = $error;
96            }
97        }
98
99        if ( ! $this->bulk && isset( $error ) ) {
100            return new WP_Error( 'deactivation_error', $error, 400 );
101        }
102
103        return true;
104    }
105}