From 4e2be47479e95dd8ac1906342edd8d489168078b Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Tue, 1 Mar 2016 19:50:12 +0100 Subject: [PATCH 1/2] Lint gpm --- classes/gpm.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/classes/gpm.php b/classes/gpm.php index 2b429e4b..45f35d9c 100644 --- a/classes/gpm.php +++ b/classes/gpm.php @@ -9,10 +9,16 @@ use Grav\Common\GPM\Upgrader; use Grav\Common\Filesystem\Folder; use Grav\Common\GPM\Common\Package; +/** + * Class Gpm + * @package Grav\Plugin\Admin + */ class Gpm { // Probably should move this to Grav DI container? + /** @var GravGPM */ protected static $GPM; + public static function GPM() { if (!static::$GPM) { @@ -86,8 +92,6 @@ class Gpm Installer::install($local, $options['destination'], ['install_path' => $package->install_path, 'theme' => $options['theme']]); Folder::delete(dirname($local)); - $errorCode = Installer::lastErrorCode(); - if (Installer::lastErrorCode() & (Installer::ZIP_OPEN_ERROR | Installer::ZIP_EXTRACT_ERROR)) { return false; } From 97e17500f436b4ad64f02db3d833453feddb3894 Mon Sep 17 00:00:00 2001 From: Flavio Copes Date: Tue, 1 Mar 2016 19:52:24 +0100 Subject: [PATCH 2/2] Add dependencies() method in Admin Generate an array of nested dependencies for a package, optionally without duplicates --- classes/admin.php | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/classes/admin.php b/classes/admin.php index 0d4ec834..18a18a2e 100644 --- a/classes/admin.php +++ b/classes/admin.php @@ -476,6 +476,56 @@ class Admin }); } + /** + * Generate an array of nested dependencies for a package + * + * @param string $slug The package slug + * @param bool $remove_duplicates True if should remove duplicates after first occurrence + * @param array $keys_already_added Used for recursion + * + * @return array|bool + */ + public function dependencies($slug, $remove_duplicates = false, $keys_already_added = []) + { + $gpm = $this->gpm(); + + if (!$gpm) { + return false; + } + + $package = $this->plugins(true)[$slug]; + if (!$package) { + $package = $this->themes(true)[$slug]; + } + + $dependencies = []; + + if ($package) { + if ($package->dependencies) { + if (!$keys_already_added) { + $keys_already_added = array_values($package->dependencies); + } + + foreach ($package->dependencies as $dependency) { + $temp_dependencies = $this->dependencies($dependency, $keys_already_added); + + if ($remove_duplicates) { + foreach($keys_already_added as $key => $value) { + if (is_string($value)) { + unset($temp_dependencies[$value]); + } + } + } + + $keys_already_added = array_merge($keys_already_added, array_values($temp_dependencies)); + $dependencies[$dependency] = $temp_dependencies; + } + } + } + + return $dependencies; + } + /** * Get all themes. *