PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.21
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.21
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.21, at classes/models/FrmInstallPlugin.php

169 lines 3.9 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 if ( ! empty( get_plugins()[ $plugin_slug ] ) ) {
86 $activate = activate_plugin( $plugin_slug );
87 } else {
88 // Include necessary files for plugin installation.
89 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
90 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
91
92 // Get the plugin information.
93 $api = plugins_api(
94 'plugin_information',
95 array(
96 'slug' => $plugin_slug,
97 'fields' => array(
98 'sections' => false,
99 ),
100 )
101 );
102 if ( is_wp_error( $api ) ) {
103 wp_send_json_error( $api->get_error_message() );
104 }
105 if ( ! FrmAddonsController::url_is_allowed( $api->versions['trunk'] ) ) {
106 wp_send_json_error( 'This download is not allowed' );
107 }
108
109 // Set up the Plugin Upgrader.
110 $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
111
112 // Install the plugin.
113 $result = $upgrader->install( $api->versions['trunk'] );
114 if ( is_wp_error( $result ) ) {
115 wp_send_json_error( $result->get_error_message() );
116 }
117
118 // Activate the plugin.
119 $activate = activate_plugin( $upgrader->plugin_info() );
120 }//end if
121
122 if ( is_wp_error( $activate ) ) {
123 wp_send_json_error( $activate->get_error_message() );
124 }
125
126 if ( 'wp-mail-smtp' === $plugin_slug ) {
127 update_option( 'wp_mail_smtp_activation_prevent_redirect', true );
128 }
129
130 // Send a success response.
131 wp_send_json_success( __( 'Plugin installed and activated successfully.', 'formidable' ) );
132 }
133
134 /**
135 * Checks plugin activation status via AJAX.
136 *
137 * @since 6.9
138 *
139 * @return void
140 */
141 public static function ajax_check_plugin_activation() {
142 // Check permission and nonce.
143 FrmAppHelper::permission_check( 'install_plugins' );
144 check_ajax_referer( 'frm_ajax', 'nonce' );
145
146 // Retrieve plugin identifier.
147 $plugin_path = FrmAppHelper::get_post_param( 'plugin_path', '', 'sanitize_text_field' );
148
149 // Respond based on plugin status.
150 if ( is_plugin_active( $plugin_path ) ) {
151 wp_send_json_success();
152 } else {
153 wp_send_json_error();
154 }
155 }
156
157 /**
158 * Check if a plugin is installed.
159 *
160 * @since 6.16
161 *
162 * @param string $plugin_file
163 * @return bool
164 */
165 private static function is_plugin_installed( $plugin_file ) {
166 return isset( get_plugins()[ $plugin_file ] );
167 }
168 }
169