manifestValidator = $manifestValidator; } public function validatePlugin($directory) { $this->ensureComposer($directory); $this->ensureManifest($directory); $manifest = $directory . DIRECTORY_SEPARATOR . 'manifest.json'; $data = @json_decode(@file_get_contents($manifest)); if (JSON_ERROR_NONE !== json_last_error()) { throw new PluginValidationException(sprintf('Unable to parse file %s', $manifest)); } try { $this->manifestValidator->validate($data); } catch (JsonValidationException $e) { throw new PluginValidationException('Manifest file is invalid', $e->getCode(), $e); } return new Manifest($this->objectToArray($data)); } private function ensureManifest($directory) { $manifest = $directory . DIRECTORY_SEPARATOR . 'manifest.json'; $this->ensureFile($manifest); } private function ensureComposer($directory) { $composer = $directory . DIRECTORY_SEPARATOR . 'composer.json'; $this->ensureFile($composer); } private function ensureFile($file) { if (!file_exists($file) || !is_file($file) || !is_readable($file)) { throw new PluginValidationException(sprintf('Required file %s is not present.', $file)); } } private function objectToArray($data) { if (is_object($data)) { $data = get_object_vars($data); } if (is_array($data)) { return array_map(array($this, 'objectToArray'), $data); } return $data; } }