Пример #1
0
 /**
  * Create a mock plugin that is deleted
  * when the tests are done running 
  * with a wp-require file
  * with the contents of $require.
  *
  * @param array $requires The desired contents of the wp-require file.
  *
  * @return WPPlugin The plugin
  */
 public static function createMockPlugin($requires)
 {
     $basePluginDir = WPRequire::PLUGINS_DIR();
     // Create a random name
     $pluginName = Str::random(20);
     // Create the plugin directory
     $pluginDir = new File($basePluginDir . "/{$pluginName}");
     $pluginDir->createDir();
     // Create the base plugin file
     $pluginFile = new File($pluginDir->getPath() . "/{$pluginName}.php");
     $pluginFile->createFile();
     // Write plugin name and version to the plugin header
     $pluginFileWriter = new FileWriter($pluginFile);
     $pluginFileWriter->open();
     $pluginFileWriter->write("\n/*\n * Plugin Name: {$pluginName}\n * Version: 1.0.0\n */");
     $pluginFileWriter->close();
     // Create the wp-require.json file
     $wpRequireFile = new File($pluginDir->getPath() . "/wp-require.json");
     $wpRequireFile->createFile();
     $wpRequireFileWriter = new FileWriter($wpRequireFile);
     // Write the array as json to the wp-require.json file
     $wpRequireFileWriter->open();
     $wpRequireFileWriter->write((string) new Json($requires));
     $wpRequireFileWriter->close();
     // Request files to be deleted on tearDown
     $pluginFile->deleteOnExit();
     $wpRequireFile->deleteOnExit();
     $pluginDir->deleteOnExit();
     $plugin = new WPPlugin("{$pluginName}/{$pluginName}.php");
     return $plugin;
 }
Пример #2
0
 /**
  * Return the absolut path to the root of the plugin, or null
  * if this plugin is a single file.
  *
  * @return string|null
  */
 protected function getPath()
 {
     if ($this->getPluginFolder() === null) {
         return null;
     } else {
         return WPRequire::PLUGINS_DIR() . "/" . $this->getPluginFolder();
     }
 }
Пример #3
0
 /**
  * Get active plugins that does not have there requirements met.
  * returns an array with plugin-base-name=>["this"=>[required-version, supplied-version]]
  * Supplied version in this array will be "null" if there was non supplied. eg. If it was a plugin
  * that wa entierly missing.
  *
  * @return array plugin-name=>(outdatedOrMissing=>(required, supplied))[]
  */
 private static function getUnsuportedPlugins()
 {
     $activePlugins = self::getAllActivePlugins();
     $unsuported = [];
     foreach ($activePlugins as $plugin) {
         $pluginFile = $plugin->getPluginFile();
         $wpRequireFile = $plugin->getWpRequire();
         // If no wp-require file exists, assume it has all it needs
         if ($wpRequireFile === null) {
             continue;
         }
         // Init the $unsuported array for this plugin
         $unsuported[$pluginFile] = array();
         $requiredPhpVersion = $wpRequireFile->getRequiredPhpVersion();
         $requiredWpVersion = $wpRequireFile->getRequiredWpVersion();
         $requiredPlugins = $wpRequireFile->getRequiredPlugins();
         $phpComp = $requiredPhpVersion->isCompatibleWith(self::getPhpVersion());
         if (!$phpComp) {
             $unsuported[$pluginFile]["php"] = array($requiredPhpVersion, self::getPhpVersion());
         }
         $wpComp = $requiredWpVersion->isCompatibleWith(self::getWpVersion());
         if (!$wpComp) {
             $unsuported[$pluginFile]["wp"] = array($requiredWpVersion, self::getWpVersion());
         }
         $unsuported[$pluginFile]['plugins'] = array();
         foreach ($requiredPlugins as $requiredPluginFile => $requiredPluginVersion) {
             if (!self::isPluginActive($requiredPluginFile)) {
                 if (!isset($unsuported[$pluginFile]['plugins'])) {
                     $unsuported[$pluginFile]['plugins'] = array();
                 }
                 $unsuported[$pluginFile]['plugins'][$requiredPluginFile] = array($requiredPluginVersion, null);
             } else {
                 $pluginData = get_plugin_data(WPRequire::PLUGINS_DIR() . "/" . $requiredPluginFile);
                 $requiredVersion = new Version($requiredPluginVersion);
                 $suppliedVersion = new Version($pluginData["Version"]);
                 if (!$requiredVersion->isCompatibleWith($suppliedVersion)) {
                     $unsuported[$pluginFile]['plugins'][$requiredPluginFile] = array($requiredPluginVersion, new Version($pluginData["Version"]));
                 }
             }
         }
         // If this plugins plugin requirments was uphelp
         if (count($unsuported[$pluginFile]['plugins']) === 0) {
             unset($unsuported[$pluginFile]['plugins']);
         }
         // If no reasons for why this plugin is unsuported can be found
         // Remove it from the array
         if (count($unsuported[$pluginFile]) === 0) {
             unset($unsuported[$pluginFile]);
         }
     }
     return $unsuported;
 }