PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.7.1
Tutor LMS – eLearning and online course solution v3.7.1
3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 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.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / helpers / PluginInstaller.php
tutor / helpers Last commit date
DateTimeHelper.php 1 year ago HttpHelper.php 11 months ago PluginInstaller.php 1 year ago QueryHelper.php 10 months ago SessionHelper.php 3 years ago TemplateImportHelper.php 11 months ago ValidationHelper.php 1 year ago
PluginInstaller.php
122 lines
1 <?php
2 /**
3 * Helper class to manage plugin installation.
4 *
5 * @package Tutor\Helper
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 3.2.0
9 */
10
11 namespace Tutor\Helpers;
12
13 /**
14 * PluginInstaller class.
15 *
16 * @since 3.2.0
17 */
18 class PluginInstaller {
19
20 /**
21 * Install/Upgrade the payment gateway plugin
22 *
23 * @since 3.0.0
24 *
25 * @param string $plugin_url Plugin URL.
26 * @param mixed $plugin_basename Plugin basename.
27 *
28 * @throws \Exception If the plugin installation fails.
29 *
30 * @return bool
31 */
32 public static function install_or_upgrade_plugin( $plugin_url, $plugin_basename = null ) {
33 $plugin_dir = $plugin_basename ? dirname( $plugin_basename ) : null;
34 if ( ! $plugin_dir ) {
35 $plugin_dir = explode( '-', basename( $plugin_url ) )[0];
36 }
37
38 $args = array(
39 'package' => $plugin_url,
40 'destination' => WP_PLUGIN_DIR . '/' . $plugin_dir,
41 'clear_destination' => true,
42 'abort_if_destination_exists' => true,
43 );
44
45 // Include necessary WordPress functions for plugin installation.
46 if ( ! function_exists( 'plugins_api' ) ) {
47 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
48 }
49 if ( ! class_exists( 'WP_Upgrader' ) ) {
50 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
51 }
52
53 // Define the plugin installer class.
54 $upgrader = new \Plugin_Upgrader( new \WP_Ajax_Upgrader_Skin() );
55
56 if ( $plugin_basename ) {
57 // Upgrade.
58 $upgrade = $upgrader->run( $args );
59 if ( is_wp_error( $upgrade ) ) {
60 throw new \Exception( $upgrade->get_error_message() );
61 } elseif ( ! $upgrade ) {
62 return false;
63 } else {
64 return true;
65 }
66 } else {
67 // Install the plugin.
68 $install = $upgrader->install( $plugin_url, $args );
69 if ( is_wp_error( $install ) ) {
70 throw new \Exception( $install->get_error_message() );
71 } elseif ( ! $install ) {
72 return false;
73 }
74 }
75
76 // Activate the plugin after installation.
77 $plugin_basename = $upgrader->plugin_info(); // Retrieves the plugin basename.
78 if ( $plugin_basename ) {
79 $activate = activate_plugin( $plugin_basename );
80 if ( is_wp_error( $activate ) ) {
81 throw new \Exception( $activate->get_error_message() );
82 }
83 } else {
84 return false;
85 }
86
87 return true;
88 }
89
90 /**
91 * Fetches the downloadable URL for a WordPress plugin from the WordPress API.
92 *
93 * @param string $plugin_slug The plugin slug.
94 *
95 * @return array An associative array with the status of the request and the download link or error message.
96 * @since 3.2.0
97 */
98 public static function get_downloadable_url( $plugin_slug ) {
99
100 $plugin_slug = strtok( $plugin_slug, '/' );
101 $url = "https://api.wordpress.org/plugins/info/1.0/{$plugin_slug}.json";
102 $request = HttpHelper::get( $url );
103 $response = $request->get_json();
104 $status = $request->get_status_code();
105
106 if ( HttpHelper::STATUS_OK === $status && ! empty( $response->download_link ) ) {
107
108 return array(
109 'success' => true,
110 'message' => $response->download_link,
111 );
112 }
113
114 $message = $response->error ?? __( 'An error occurred while fetching the plugin download link.', 'tutor' );
115
116 return array(
117 'success' => false,
118 'message' => $message,
119 );
120 }
121 }
122