From 46d2d35c1a5b53f9bf4988aad0904f8a3b8065c0 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 1 Feb 2022 18:36:31 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8C=20Detect=20Drupal=20and=20WordPres?= =?UTF-8?q?s=20projects=20(#112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrations/Composer/ComposerJson.swift | 2 +- .../Integrations/Composer/PhpFrameworks.swift | 34 +++++++++++++++++++ phpmon/Domain/Integrations/Valet/Valet.swift | 5 ++- phpmon/Domain/SiteList/SiteListCell.swift | 2 +- phpmon/Localizable.strings | 2 +- 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/phpmon/Domain/Integrations/Composer/ComposerJson.swift b/phpmon/Domain/Integrations/Composer/ComposerJson.swift index 97d69c3..30f0b10 100644 --- a/phpmon/Domain/Integrations/Composer/ComposerJson.swift +++ b/phpmon/Domain/Integrations/Composer/ComposerJson.swift @@ -51,7 +51,7 @@ struct ComposerJson: Decodable { } // Unknown! - return ("", "unknown") + return ("???", "unknown") } /** diff --git a/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift b/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift index 25e7f9d..028c706 100644 --- a/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift +++ b/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift @@ -45,4 +45,38 @@ struct PhpFrameworks { // "slim/*": "Slim", ] + public static let FileMapping: [String: [String]] = [ + "Drupal": [ + // Legacy installations + "/misc/drupal.js", + "/core/lib/Drupal.php", + // The default (new) installation w/ Composer puts the modules in /web + "/web/misc/drupal.js", + "/web/core/lib/Drupal.php" + ], + "WordPress": [ + "/wp-config.php", + "/wp-config-sample.php" + ], + ] + + /** + There are two cases where users are unlikely to use `composer`, + when setting up a Drupal or a WordPress project. For performance + reasons, we only check that here! + */ + public static func detectFallbackDependency(_ basePath: String) -> String? { + for entry in Self.FileMapping { + let found = entry.value + .map { path in return Filesystem.fileExists(basePath + path) } + .contains(true) + + if found { + return entry.key + } + } + + return nil + } + } diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index a0870ce..8001ef9 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -291,6 +291,10 @@ class Valet { */ public func determineDriver() { self.determineDriverViaComposer() + + if self.driver == nil { + self.driver = PhpFrameworks.detectFallbackDependency(self.absolutePath) + } } /** @@ -302,7 +306,6 @@ class Valet { */ private func determineDriverViaComposer() { self.driverDeterminedByComposer = true - self.driver = "driver.not_detected".localized PhpFrameworks.DependencyList.reversed().forEach { (key: String, value: String) in if self.notableComposerDependencies.keys.contains(key) { diff --git a/phpmon/Domain/SiteList/SiteListCell.swift b/phpmon/Domain/SiteList/SiteListCell.swift index 5e15150..bf95985 100644 --- a/phpmon/Domain/SiteList/SiteListCell.swift +++ b/phpmon/Domain/SiteList/SiteListCell.swift @@ -57,7 +57,7 @@ class SiteListCell: NSTableCellView ? "Project Type".uppercased() : "Driver Type".uppercased() - labelDriver.stringValue = "\(site.driver ?? "???")" + labelDriver.stringValue = site.driver ?? "driver.not_detected".localized // Determine the Laravel version if site.driver == "Laravel" && site.notableComposerDependencies.keys.contains("laravel/framework") { diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 2b48bef..a1c6136 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -119,7 +119,7 @@ // DRIVERS -"driver.not_detected" = "Unknown"; +"driver.not_detected" = "Other"; // EDITORS