diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 0a6936c..d2b71e2 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -327,6 +327,30 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate { } } + @objc func updateComposerDependencies() { + DispatchQueue.global(qos: .userInitiated).async { + let output = Shell.user.execute( + "composer global update", requiresPath: true, waitUntilExit: true + ) + DispatchQueue.main.async { + if output.task.terminationStatus > 0 { + // Error code means > 0 + Alert.notify( + message: "alert.composer_failure.title".localized, + info: "alert.composer_failure.info".localized, + style: .critical + ) + } else { + // Error code -1 is OK + LocalNotification.send( + title: "alert.composer_success.title".localized, + subtitle: "alert.composer_success.info".localized + ) + } + } + } + } + @objc func openActiveConfigFolder() { if (App.phpInstall!.version.error) { // php version was not identified diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 5f4662c..ee29557 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -87,10 +87,15 @@ class StatusMenu : NSMenu { // Configuration self.addItem(HeaderView.asMenuItem(text: "mi_configuration".localized)) - self.addItem(NSMenuItem(title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), keyEquivalent: "g")) self.addItem(NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c")) self.addItem(NSMenuItem(title: "mi_phpinfo".localized, action: #selector(MainMenu.openPhpInfo), keyEquivalent: "i")) + // Composer + self.addItem(NSMenuItem.separator()) + self.addItem(HeaderView.asMenuItem(text: "mi_composer".localized)) + self.addItem(NSMenuItem(title: "mi_global_composer".localized, action: #selector(MainMenu.openGlobalComposerFolder), keyEquivalent: "g")) + self.addItem(NSMenuItem(title: "mi_update_global_composer".localized, action: #selector(MainMenu.updateComposerDependencies), keyEquivalent: "")) + if (App.shared.busy) { return } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 42050fc..916b79c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -35,10 +35,12 @@ "mi_post_max_size" = "Max POST"; "mi_upload_max_filesize" = "Max Upload"; +"mi_composer" = "Composer"; "mi_valet_config" = "Locate Valet folder (.config/valet)"; "mi_php_config" = "Locate PHP configuration file (php.ini)"; "mi_global_composer" = "Locate global composer.json file (.composer)"; "mi_phpinfo" = "Show current configuration (phpinfo)"; +"mi_update_global_composer" = "Update global Composer dependencies"; "mi_detected_extensions" = "Detected Extensions"; "mi_no_extensions_detected" = "No additional extensions detected."; @@ -128,6 +130,15 @@ directories, since PHP Monitor controls the services."; // ALERTS +// Composer Update +"alert.composer_success.title" = "Global dependencies updated"; +"alert.composer_success.info" = "Your global Composer dependencies have been updated."; + +"alert.composer_failure.title" = "Updating global dependencies failed"; +"alert.composer_failure.info" = "Something went wrong updating your global Composer dependencies. + +To find out what went wrong, try running `composer global update` in a terminal window."; + // Force Reload Started "alert.force_reload.title" = "PHP Monitor will force reload the latest version of PHP"; "alert.force_reload.info" = "This can take a while. You'll get another alert when the force reload has completed.";