mirror of
				https://github.com/Mibew/mibew.git
				synced 2025-11-04 04:15:19 +03:00 
			
		
		
		
	
							parent
							
								
									090383bc95
								
							
						
					
					
						commit
						e5b8c84736
					
				@ -205,7 +205,7 @@ class PluginController extends AbstractController
 | 
				
			|||||||
            $plugins[] = array(
 | 
					            $plugins[] = array(
 | 
				
			||||||
                'name' => $plugin_name,
 | 
					                'name' => $plugin_name,
 | 
				
			||||||
                'version' => $plugin->isInstalled() ? $plugin->getInstalledVersion() : $plugin->getVersion(),
 | 
					                'version' => $plugin->isInstalled() ? $plugin->getInstalledVersion() : $plugin->getVersion(),
 | 
				
			||||||
                'dependencies' => $plugin->getDependencies(),
 | 
					                'dependencies' => array_merge($plugin->getSystemRequirements(), $plugin->getDependencies()),
 | 
				
			||||||
                'enabled' => $plugin->isEnabled(),
 | 
					                'enabled' => $plugin->isEnabled(),
 | 
				
			||||||
                'installed' => $plugin->isInstalled(),
 | 
					                'installed' => $plugin->isInstalled(),
 | 
				
			||||||
                'needsUpdate' => $plugin->needsUpdate(),
 | 
					                'needsUpdate' => $plugin->needsUpdate(),
 | 
				
			||||||
 | 
				
			|||||||
@ -136,6 +136,20 @@ abstract class AbstractPlugin
 | 
				
			|||||||
        return array();
 | 
					        return array();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Implementation of
 | 
				
			||||||
 | 
					     * {@link \Mibew\Plugin\PluginInterface::getSystemRequirements()}.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Returns an empty array to tell the Plugin Manager that the plugin has
 | 
				
			||||||
 | 
					     * no system requirements.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getSystemRequirements()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return array();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Implementation of {@link \Mibew\Plugin\PluginInterface::getInfo()}.
 | 
					     * Implementation of {@link \Mibew\Plugin\PluginInterface::getInfo()}.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
				
			|||||||
@ -165,6 +165,18 @@ class PluginInfo
 | 
				
			|||||||
        return call_user_func(array($this->getClass(), 'getDependencies'));
 | 
					        return call_user_func(array($this->getClass(), 'getDependencies'));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns system requirements of the plugin.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return array Requirements list. See
 | 
				
			||||||
 | 
					     *   {@link \Mibew\Plugin\PluginInterface::getSystemRequirements()} for
 | 
				
			||||||
 | 
					     *   details of the array structure.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function getSystemRequirements()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return call_user_func(array($this->getClass(), 'getSystemRequirements'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns list of dependent plugins.
 | 
					     * Returns list of dependent plugins.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -228,6 +240,31 @@ class PluginInfo
 | 
				
			|||||||
            && (version_compare($this->getVersion(), $this->getInstalledVersion()) > 0);
 | 
					            && (version_compare($this->getVersion(), $this->getInstalledVersion()) > 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Checks if the plugin has unsatisfied system requirements.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function hasUnsatisfiedSystemRequirements()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $system_info = Utils::getSystemInfo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($this->getSystemRequirements() as $lib => $required_version) {
 | 
				
			||||||
 | 
					            // Check if the library exists
 | 
				
			||||||
 | 
					            if (!isset($system_info[$lib])) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check exact version of the library
 | 
				
			||||||
 | 
					            $version_constrain = new VersionExpression($required_version);
 | 
				
			||||||
 | 
					            if (!$version_constrain->satisfiedBy(new Version($system_info[$lib]))) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Checks if the plugin can be enabled.
 | 
					     * Checks if the plugin can be enabled.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -240,6 +277,10 @@ class PluginInfo
 | 
				
			|||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->hasUnsatisfiedSystemRequirements()) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Make sure all plugin's dependencies exist, are enabled and have
 | 
					        // Make sure all plugin's dependencies exist, are enabled and have
 | 
				
			||||||
        // appropriate versions
 | 
					        // appropriate versions
 | 
				
			||||||
        foreach ($this->getDependencies() as $plugin_name => $required_version) {
 | 
					        foreach ($this->getDependencies() as $plugin_name => $required_version) {
 | 
				
			||||||
 | 
				
			|||||||
@ -82,6 +82,39 @@ interface PluginInterface
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static function getDependencies();
 | 
					    public static function getDependencies();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns list of plugin's system requirements.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Each key in the array is a string with a requirement name. Each value is
 | 
				
			||||||
 | 
					     * plugin version constrain.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * A requirement name can be on of the following:
 | 
				
			||||||
 | 
					     *  - "mibew": Mibew core;
 | 
				
			||||||
 | 
					     *  - "php": PHP used in the system;
 | 
				
			||||||
 | 
					     *  - "ext-*": name of a PHP extension.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * A constrain can be in one of the following
 | 
				
			||||||
 | 
					     * formats:
 | 
				
			||||||
 | 
					     *  - "1.2.3": exact version number;
 | 
				
			||||||
 | 
					     *  - ">1.2.3": grater than a specific version;
 | 
				
			||||||
 | 
					     *  - ">=1.2.3": greater than a specific version or equal to it;
 | 
				
			||||||
 | 
					     *  - "<1.2.3": less than a specific version;
 | 
				
			||||||
 | 
					     *  - "<=1.2.3": less than a specific version or equal to it;
 | 
				
			||||||
 | 
					     *  - "1.2.3 - 2.3.4": equals to ">=1.2.3 <=2.3.4";
 | 
				
			||||||
 | 
					     *  - "~1.2.3": equivalent for ">=1.2.3 <1.3.0";
 | 
				
			||||||
 | 
					     *  - "~1.2": equivalent for ">=1.2.0 <2.0.0";
 | 
				
			||||||
 | 
					     *  - "^1.2.3" equivalent for ">=1.2.3 <2.0.0";
 | 
				
			||||||
 | 
					     *  - "^0.1.2" equivalent for ">=0.1.2 <0.2.0";
 | 
				
			||||||
 | 
					     *  - "1.2.x": equivalent for ">=1.2.0 <2.0.0";
 | 
				
			||||||
 | 
					     *  - "1.x": equivalent for ">=1.0.0 <2.0.0";
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If the plugin have no system requirements an empty array should be
 | 
				
			||||||
 | 
					     * returned.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return array List of plugin's requirements.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getSystemRequirements();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns some info about plugin such as human-readable name, description,
 | 
					     * Returns some info about plugin such as human-readable name, description,
 | 
				
			||||||
     * version, etc.
 | 
					     * version, etc.
 | 
				
			||||||
 | 
				
			|||||||
@ -140,6 +140,17 @@ class PluginManager
 | 
				
			|||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ($plugin_info->hasUnsatisfiedSystemRequirements()) {
 | 
				
			||||||
 | 
					                trigger_error(
 | 
				
			||||||
 | 
					                    sprintf(
 | 
				
			||||||
 | 
					                        'Plugin "%s" has unsatisfied system requirements!',
 | 
				
			||||||
 | 
					                        $plugin_info->getName()
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    E_USER_WARNING
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $graph->addPlugin($plugin_info);
 | 
					            $graph->addPlugin($plugin_info);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -115,6 +115,34 @@ class Utils
 | 
				
			|||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns list of environment items.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return array List of environment items. Each key is a string with one of
 | 
				
			||||||
 | 
					     * the following value:
 | 
				
			||||||
 | 
					     *  - "mibew": represents Mibew core;
 | 
				
			||||||
 | 
					     *  - "php": represents PHP installed in the system;
 | 
				
			||||||
 | 
					     *  - "ext-*": represents one of PHP extensions.
 | 
				
			||||||
 | 
					     * Each value of the array is version of the item.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getSystemInfo()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static $system = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (is_null($system)) {
 | 
				
			||||||
 | 
					            $system = array(
 | 
				
			||||||
 | 
					                'php' => phpversion(),
 | 
				
			||||||
 | 
					                'mibew' => MIBEW_VERSION,
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (get_loaded_extensions() as $ext) {
 | 
				
			||||||
 | 
					                $system['ext-' . str_replace(' ', '-', $ext)] = phpversion($ext) ?: '0.0.0';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $system;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This class should not be instantiated
 | 
					     * This class should not be instantiated
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user