/var/www/html_us/wp-content/plugins/woocommerce/src/Admin/API/MarketingOverview.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
/**
 * REST API Marketing Overview Controller
 *
 * Handles requests to /marketing/overview.
 */

namespace Automattic\WooCommerce\Admin\API;

use 
Automattic\WooCommerce\Admin\Marketing\InstalledExtensions;
use 
Automattic\WooCommerce\Admin\PluginsHelper;

defined'ABSPATH' ) || exit;

/**
 * Marketing Overview Controller.
 *
 * @internal
 * @extends WC_REST_Data_Controller
 */
class MarketingOverview extends \WC_REST_Data_Controller {

    
/**
     * Endpoint namespace.
     *
     * @var string
     */
    
protected $namespace 'wc-admin';

    
/**
     * Route base.
     *
     * @var string
     */
    
protected $rest_base 'marketing/overview';

    
/**
     * Register routes.
     */
    
public function register_routes() {
        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/activate-plugin',
            array(
                array(
                    
'methods'             => \WP_REST_Server::EDITABLE,
                    
'callback'            => array( $this'activate_plugin' ),
                    
'permission_callback' => array( $this'install_plugins_permissions_check' ),
                    
'args'                => array(
                        
'plugin' => array(
                            
'required'          => true,
                            
'type'              => 'string',
                            
'validate_callback' => 'rest_validate_request_arg',
                            
'sanitize_callback' => 'sanitize_title_with_dashes',
                        ),
                    ),
                ),
                
'schema' => array( $this'get_item_schema' ),
            )
        );

        
register_rest_route(
            
$this->namespace,
            
'/' $this->rest_base '/installed-plugins',
            array(
                array(
                    
'methods'             => \WP_REST_Server::READABLE,
                    
'callback'            => array( $this'get_installed_plugins' ),
                    
'permission_callback' => array( $this'get_items_permissions_check' ),
                ),
                
'schema' => array( $this'get_public_item_schema' ),
            )
        );
    }

    
/**
     * Return installed marketing extensions data.
     *
     * @param \WP_REST_Request $request Request data.
     *
     * @return \WP_Error|\WP_REST_Response
     */
    
public function activate_plugin$request ) {
        
$plugin_slug $request->get_param'plugin' );

        if ( ! 
PluginsHelper::is_plugin_installed$plugin_slug ) ) {
            return new 
\WP_Error'woocommerce_rest_invalid_plugin'__'Invalid plugin.''woocommerce' ), 404 );
        }

        
$result activate_pluginPluginsHelper::get_plugin_path_from_slug$plugin_slug ) );

        if ( ! 
is_null$result ) ) {
            return new 
\WP_Error'woocommerce_rest_invalid_plugin'__'The plugin could not be activated.''woocommerce' ), 500 );
        }

        
// IMPORTANT - Don't return the active plugins data here.
        // Instead we will get that data in a separate request to ensure they are loaded.
        
return rest_ensure_response(
            array(
                
'status' => 'success',
            )
        );
    }

    
/**
     * Check if a given request has access to manage plugins.
     *
     * @param \WP_REST_Request $request Full details about the request.
     *
     * @return \WP_Error|boolean
     */
    
public function install_plugins_permissions_check$request ) {
        if ( ! 
current_user_can'install_plugins' ) ) {
            return new 
\WP_Error'woocommerce_rest_cannot_update'__'Sorry, you cannot manage plugins.''woocommerce' ), array( 'status' => rest_authorization_required_code() ) );
        }

        return 
true;
    }

    
/**
     * Return installed marketing extensions data.
     *
     * @param \WP_REST_Request $request Request data.
     *
     * @return \WP_Error|\WP_REST_Response
     */
    
public function get_installed_plugins$request ) {
        return 
rest_ensure_responseInstalledExtensions::get_data() );
    }

}