class-installer.php (4098B)
1 <?php // phpcs:ignore WordPress.Files.FileName 2 3 /** 4 * Installer class which installs and/or activates block plugins. 5 * 6 * @since 4.0.0 7 * @package Redux Framework 8 */ 9 10 namespace ReduxTemplates; 11 12 use ReduxTemplates; 13 14 if ( ! defined( 'ABSPATH' ) ) { 15 exit; // Exit if accessed directly. 16 } 17 18 require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; 19 require_once ABSPATH . 'wp-admin/includes/file.php'; 20 require_once ABSPATH . 'wp-admin/includes/misc.php'; 21 require_once ABSPATH . 'wp-admin/includes/plugin.php'; 22 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; 23 24 /** 25 * ReduxTemplates Installer. 26 * 27 * @since 4.0.0 28 */ 29 class Installer { 30 31 /** 32 * Run command. 33 * 34 * @param string $slug Plugin Slug. 35 * @param string $download_link Install URL if from a custom URL. 36 * 37 * @return array 38 * @since 4.0.0 39 */ 40 public static function run( $slug, $download_link = '' ) { 41 $plugin_dir = WP_PLUGIN_DIR . '/' . $slug; 42 43 /* 44 * Don't try installing plugins that already exist (wastes time downloading files that 45 * won't be used 46 */ 47 48 $status = array(); 49 if ( ! is_dir( $plugin_dir ) ) { 50 if ( empty( $download_link ) ) { 51 $api = plugins_api( 52 'plugin_information', 53 array( 54 'slug' => $slug, 55 'fields' => array( 56 'short_description' => false, 57 'sections' => false, 58 'requires' => false, 59 'rating' => false, 60 'ratings' => false, 61 'downloaded' => false, 62 'last_updated' => false, 63 'added' => false, 64 'tags' => false, 65 'compatibility' => false, 66 'homepage' => false, 67 'donate_link' => false, 68 ), 69 ) 70 ); 71 72 $download_link = $api->download_link; 73 } 74 75 if ( empty( $download_link ) ) { 76 $status['error'] = 'Install url for ' . $slug . ' could not be located.'; 77 return $status; 78 } 79 80 ob_start(); 81 82 $skin = new ReduxTemplates\Installer_Muter( array( 'api' => $api ) ); 83 $upgrader = new \Plugin_Upgrader( $skin ); 84 $install = $upgrader->install( $download_link ); 85 86 ob_end_clean(); 87 88 if ( true !== $install ) { 89 $status['error'] = 'Install process failed for ' . $slug . '.'; 90 91 if ( ! empty( $install ) ) { 92 ob_start(); 93 // phpcs:ignore WordPress.PHP.DevelopmentFunctions 94 \var_dump( $install ); 95 $result = ob_get_clean(); 96 97 $status['var_dump'] = $result; 98 } else { 99 $status['error'] .= ' ' . $upgrader->skin->options['api']->errors['plugins_api_failed'][0]; 100 } 101 102 return $status; 103 } 104 105 // Stop UAGB redirect. 106 if ( 'ultimate-addons-for-gutenberg' === $slug ) { 107 update_option( '__uagb_do_redirect', false ); 108 } 109 110 $status['install'] = 'success'; 111 } 112 113 /* 114 * The install results don't indicate what the main plugin file is, so we just try to 115 * activate based on the slug. It may fail, in which case the plugin will have to be activated 116 * manually from the admin screen. 117 */ 118 $plugin_path = false; 119 $plugin_check = false; 120 if ( file_exists( $plugin_dir . '/' . $slug . '.php' ) ) { 121 $plugin_path = $plugin_dir . '/' . $slug . '.php'; 122 $plugin_check = $slug . '/' . $slug . '.php'; 123 } elseif ( file_exists( $plugin_dir . '/plugin.php' ) ) { 124 $plugin_path = $plugin_dir . '/plugin.php'; 125 $plugin_check = $slug . '/plugin.php'; 126 } else { 127 $split = explode( '-', $slug ); 128 $new_filename = ''; 129 foreach ( $split as $s ) { 130 if ( ! empty( $s ) ) { 131 $new_filename .= $s[0]; 132 } 133 } 134 $plugin_path = $plugin_dir . '/' . $new_filename . '.php'; 135 $plugin_check = $slug . '/' . $new_filename . '.php'; 136 137 if ( ! file_exists( $plugin_path ) ) { 138 $plugin_path = $plugin_dir . '/index.php'; 139 $plugin_check = $slug . '/index.php'; 140 } 141 } 142 143 if ( ! empty( $plugin_path ) && file_exists( $plugin_path ) ) { 144 activate_plugin( $plugin_check ); 145 $status['activate'] = 'success'; 146 } else { 147 $status['error'] = sprintf( 148 'The block plugin `%s` could not be activated. Please try installing it manually.', 149 $slug 150 ); 151 } 152 153 return $status; 154 155 } 156 }