<?php namespace BitApps\WPKit; if (!\defined('ABSPATH')) { exit; } use BitApps\WPKit\Hooks\Hooks; use BitApps\WPKit\Migration\MigrationHelper; /** * Class handling plugin activation, deactivation, uninstall. * * @since 1.0.0 */ final class Installer { private $_requirements; private $_hooks; private $_migration; private static $_drop; /** * Sets necessary elements * * @param array $requirements * @param array $hooks * @param array $migration */ public function __construct($requirements, $hooks, $migration) { $this->_requirements = $requirements; $this->_hooks = $hooks; $this->_migration = $migration['migration']; self::$_drop = $migration['drop']; } public function register() { if (isset($this->_hooks['activate'])) { Hooks::addAction($this->_hooks['activate'], [$this, 'activate']); } if (isset($this->_hooks['uninstall'])) { // Only a static class method or function can be used in an uninstall hook. Hooks::addAction($this->_hooks['uninstall'], [self::class, 'uninstall']); } } public function activate($isNetworkActivation) { $this->checkRequirements(); if ( isset($this->_requirements['multisite']) && $this->_requirements['multisite'] && $isNetworkActivation ) { $this->activateOnMultiSite(); } else { $this->activateOnSingleSite(); } } public function activateOnSingleSite() { if (version_compare($this->_requirements['oldVersion'], $this->_requirements['version'], '<')) { MigrationHelper::migrate($this->_migration); } } public function activateOnMultiSite() { $sites = get_sites((['fields' => 'ids', 'network_id' => get_current_network_id()])); foreach ($sites as $site) { switch_to_blog($site); $this->activateOnSingleSite(); restore_current_blog(); } } public static function uninstall() { if (is_multisite()) { self::uninstallFromAllSite(); } else { self::uninstallFromSingleSite(); } } public static function uninstallFromSingleSite() { MigrationHelper::drop(self::$_drop); } public static function uninstallFromAllSite() { $sites = get_sites((['fields' => 'ids', 'network_id' => get_current_network_id()])); foreach ($sites as $site) { switch_to_blog($site); self::uninstallFromSingleSite(); restore_current_blog(); } } public function checkRequirements() { if (version_compare(PHP_VERSION, $this->_requirements['php'], '<')) { // Str From WP install script wp_die( esc_html( sprintf( // translators: 1: Current PHP version, 2: Version required by the uploaded plugin. 'The PHP version on your server is %1$s, however the uploaded plugin requires %2$s.', PHP_VERSION, $this->_requirements['php'] ) ), esc_html('Requirements Not Met') ); } if (version_compare(get_bloginfo('version'), $this->_requirements['wp'], '<')) { wp_die( esc_html( sprintf( // translators: 1: Current WordPress version, 2: Version required by the uploaded plugin. 'Your WordPress version is %1$s, however the uploaded plugin requires %2$s.', get_bloginfo('version'), $this->_requirements['wp'] ), esc_html('Requirements Not Met') ) ); } } }