balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }