PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.10
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.10
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / models / FrmInstallPlugin.php

FrmInstallPlugin.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.10, at classes/models/FrmInstallPlugin.php

152 lines 3.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * @since 4.04.04
8 */
9 class FrmInstallPlugin {
10
11 /**
12 * Format: folder/filename.php.
13 *
14 * @var string
15 */
16 protected $plugin_file;
17
18 /**
19 * @var string
20 */
21 protected $plugin_slug;
22
23 public function __construct( $atts ) {
24 $this->plugin_file = $atts['plugin_file'];
25 list( $slug, $file ) = explode( '/', $this->plugin_file );
26 $this->plugin_slug = $slug;
27 }
28
29 public function get_activate_link() {
30 if ( $this->is_installed() && $this->is_active() ) {
31 return '';
32 }
33
34 if ( $this->is_installed() ) {
35 $url = $this->activate_url();
36 } else {
37 $url = $this->install_url();
38 }
39 return $url;
40 }
41
42 /**
43 * @return bool
44 */
45 public function is_installed() {
46 return is_dir( WP_PLUGIN_DIR . '/' . $this->plugin_slug );
47 }
48
49 /**
50 * @return bool
51 */
52 public function is_active() {
53 return is_plugin_active( $this->plugin_file );
54 }
55
56 /**
57 * @return string
58 */
59 protected function install_url() {
60 return wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $this->plugin_slug ), 'install-plugin_' . $this->plugin_slug );
61 }
62
63 /**
64 * @return string
65 */
66 protected function activate_url() {
67 return wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=' . $this->plugin_file ), 'activate-plugin_' . $this->plugin_file );
68 }
69
70 /**
71 * Handles the AJAX request to install a plugin.
72 *
73 * @since 6.9
74 *
75 * @return void
76 */
77 public static function ajax_install_plugin() {
78 // Check permission and nonce.
79 FrmAppHelper::permission_check( 'install_plugins' );
80 check_ajax_referer( 'frm_ajax', 'nonce' );
81
82 // Get posted data.
83 $plugin_slug = FrmAppHelper::get_post_param( 'plugin', '', 'sanitize_text_field' );
84
85 // Include necessary files for plugin installation.
86 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
87 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
88
89 // Get the plugin information.
90 $api = plugins_api(
91 'plugin_information',
92 array(
93 'slug' => $plugin_slug,
94 'fields' => array(
95 'sections' => false,
96 ),
97 )
98 );
99 if ( is_wp_error( $api ) ) {
100 wp_send_json_error( $api->get_error_message() );
101 }
102 if ( ! FrmAddonsController::url_is_allowed( $api->versions['trunk'] ) ) {
103 wp_send_json_error( 'This download is not allowed' );
104 }
105
106 // Set up the Plugin Upgrader.
107 $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
108
109 // Install the plugin.
110 $result = $upgrader->install( $api->versions['trunk'] );
111 if ( is_wp_error( $result ) ) {
112 wp_send_json_error( $result->get_error_message() );
113 }
114
115 // Activate the plugin.
116 $activate = activate_plugin( $upgrader->plugin_info() );
117 if ( is_wp_error( $activate ) ) {
118 wp_send_json_error( $activate->get_error_message() );
119 }
120
121 if ( 'wp-mail-smtp' === $plugin_slug ) {
122 update_option( 'wp_mail_smtp_activation_prevent_redirect', true );
123 }
124
125 // Send a success response.
126 wp_send_json_success( __( 'Plugin installed and activated successfully.', 'formidable' ) );
127 }
128
129 /**
130 * Checks plugin activation status via AJAX.
131 *
132 * @since 6.9
133 *
134 * @return void
135 */
136 public static function ajax_check_plugin_activation() {
137 // Check permission and nonce.
138 FrmAppHelper::permission_check( 'install_plugins' );
139 check_ajax_referer( 'frm_ajax', 'nonce' );
140
141 // Retrieve plugin identifier.
142 $plugin_path = FrmAppHelper::get_post_param( 'plugin_path', '', 'sanitize_text_field' );
143
144 // Respond based on plugin status.
145 if ( is_plugin_active( $plugin_path ) ) {
146 wp_send_json_success();
147 } else {
148 wp_send_json_error();
149 }
150 }
151 }
152