PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 4.7.0
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v4.7.0
4.7.2 4.7.1 trunk 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 3.0.0 3.0.1 3.1.0 3.10.0 3.10.1 3.11.1 3.11.2 3.11.3 3.2.0 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.5 3.6.6 3.7.0 3.7.1 3.8.0 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.2.0 4.2.1 4.2.10 4.2.11 4.2.12 4.2.13 4.2.14 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.3.10 4.3.11 4.3.12 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.7.1 4.3.8 4.3.9 4.3.9.1 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.10 4.5.11 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.7.0
cookiebot / src / abilities / Install_Ppg_Ability.php
cookiebot / src / abilities Last commit date
Ability_Audit_Logger.php 2 months ago Cookiebot_Abilities_Registrar.php 2 months ago Cookiebot_Ability_Interface.php 2 months ago Get_Compliance_Summary_Ability.php 2 months ago Get_Status_Ability.php 2 months ago Install_Ppg_Ability.php 2 months ago Set_Cbid_Ability.php 2 months ago Toggle_Gcm_Ability.php 2 months ago Verify_Setup_Ability.php 2 months ago
Install_Ppg_Ability.php
130 lines
1 <?php
2 // src/abilities/Install_Ppg_Ability.php
3
4 namespace cybot\cookiebot\abilities;
5
6 use cybot\cookiebot\settings\pages\PPG_Page;
7
8 class Install_Ppg_Ability implements Cookiebot_Ability_Interface {
9
10 /**
11 * @var Ability_Audit_Logger
12 */
13 private $logger;
14
15 /**
16 * @param Ability_Audit_Logger $logger
17 *
18 * @since 4.8.0
19 */
20 public function __construct( Ability_Audit_Logger $logger ) {
21 $this->logger = $logger;
22 }
23
24 /**
25 * @return string
26 *
27 * @since 4.8.0
28 */
29 public function get_name() {
30 return 'cookiebot/install-ppg';
31 }
32
33 /**
34 * @return array
35 *
36 * @since 4.8.0
37 */
38 public function get_args() {
39 $logger = $this->logger;
40
41 return array(
42 'label' => __( 'Install Privacy Policy Generator', 'cookiebot' ),
43 'description' => __( 'Installs and activates the Privacy Policy Generator plugin (privacy-policy-usercentrics). Idempotent — returns immediately if already active. After install, direct the user to admin_url to complete policy setup.', 'cookiebot' ),
44 'category' => 'cookiebot',
45 'output_schema' => array(
46 'type' => 'object',
47 'properties' => array(
48 'was_already_active' => array( 'type' => 'boolean', 'description' => 'True if plugin was already active.' ),
49 'success' => array( 'type' => 'boolean', 'description' => 'Whether the operation succeeded.' ),
50 'admin_url' => array( 'type' => 'string', 'description' => 'WP admin URL for the PPG settings page.' ),
51 ),
52 'additionalProperties' => false,
53 ),
54 'execute_callback' => function() use ( $logger ) {
55 if ( ! function_exists( 'is_plugin_active' ) ) {
56 require_once ABSPATH . 'wp-admin/includes/plugin.php';
57 }
58
59 $admin_url = admin_url( 'admin.php?page=' . PPG_Page::ADMIN_SLUG );
60
61 if ( is_plugin_active( PPG_Page::PPG_PLUGIN_SLUG ) ) {
62 $logger->log( 'cookiebot/install-ppg', 'already_active', 'already_active' );
63 return array( 'was_already_active' => true, 'success' => true, 'admin_url' => $admin_url );
64 }
65
66 if ( ! function_exists( 'get_plugins' ) ) {
67 require_once ABSPATH . 'wp-admin/includes/plugin.php';
68 }
69
70 $plugins = get_plugins();
71 if ( isset( $plugins[ PPG_Page::PPG_PLUGIN_SLUG ] ) ) {
72 $result = activate_plugin( PPG_Page::PPG_PLUGIN_SLUG );
73 if ( is_wp_error( $result ) ) {
74 return new \WP_Error( 'cookiebot_ppg_install_failed', $result->get_error_message() );
75 }
76 $logger->log( 'cookiebot/install-ppg', 'installed_inactive', 'activated' );
77 return array( 'was_already_active' => false, 'success' => true, 'admin_url' => $admin_url );
78 }
79
80 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
81 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
82 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
83
84 $api = plugins_api(
85 'plugin_information',
86 array(
87 'slug' => 'privacy-policy-usercentrics',
88 'fields' => array( 'sections' => false ),
89 )
90 );
91
92 if ( is_wp_error( $api ) ) {
93 return new \WP_Error( 'cookiebot_ppg_install_failed', $api->get_error_message() );
94 }
95
96 // Verify the API returned the expected slug and a trusted download origin.
97 if ( ! isset( $api->slug ) || 'privacy-policy-usercentrics' !== $api->slug ) {
98 return new \WP_Error( 'cookiebot_ppg_install_failed', __( 'Unexpected plugin data returned from WordPress.org.', 'cookiebot' ) );
99 }
100 if ( ! isset( $api->download_link ) || strpos( $api->download_link, 'https://downloads.wordpress.org/' ) !== 0 ) {
101 return new \WP_Error( 'cookiebot_ppg_install_failed', __( 'Plugin download URL does not originate from WordPress.org.', 'cookiebot' ) );
102 }
103
104 $upgrader = new \Plugin_Upgrader( new \WP_Ajax_Upgrader_Skin() );
105 $install = $upgrader->install( $api->download_link );
106
107 if ( is_wp_error( $install ) || ! $install ) {
108 return new \WP_Error( 'cookiebot_ppg_install_failed', __( 'Plugin installation failed.', 'cookiebot' ) );
109 }
110
111 $activate = activate_plugin( PPG_Page::PPG_PLUGIN_SLUG );
112 if ( is_wp_error( $activate ) ) {
113 return new \WP_Error( 'cookiebot_ppg_install_failed', $activate->get_error_message() );
114 }
115
116 delete_transient( 'ppguc_activation_redirect' );
117 $logger->log( 'cookiebot/install-ppg', 'not_installed', 'installed_activated' );
118 return array( 'was_already_active' => false, 'success' => true, 'admin_url' => $admin_url );
119 },
120 'permission_callback' => function() {
121 return current_user_can( 'manage_options' ) && current_user_can( 'install_plugins' );
122 },
123 'meta' => array(
124 'annotations' => array( 'readonly' => false, 'destructive' => false, 'idempotent' => true ),
125 'show_in_rest' => true,
126 ),
127 );
128 }
129 }
130