diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 0c151ef..139b42f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1218,7 +1218,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 560; + CURRENT_PROJECT_VERSION = 580; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; @@ -1227,8 +1227,8 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.0; - PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; + MARKETING_VERSION = 5.1; + PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -1243,7 +1243,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 560; + CURRENT_PROJECT_VERSION = 580; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; @@ -1252,8 +1252,8 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.0; - PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; + MARKETING_VERSION = 5.1; + PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.beta; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/phpmon-common/Core/Actions.swift b/phpmon-common/Core/Actions.swift index fc41ec7..fd6bd2f 100644 --- a/phpmon-common/Core/Actions.swift +++ b/phpmon-common/Core/Actions.swift @@ -34,17 +34,42 @@ class Actions { brew("services stop dnsmasq", sudo: true) } - /** - Kindly asks Valet to switch to a specific PHP version. - */ - public static func switchToPhpVersionUsingValet( - version: String, - availableVersions: [String], - completed: @escaping () -> Void - ) { - Log.info("Switching to \(version) using Valet") - Log.info(valet("use php@\(version)")) - completed() + public static func fixHomebrewPermissions() + { + var servicesCommands = [ + "\(Paths.brew) services stop nginx", + "\(Paths.brew) services stop dnsmasq", + ] + var cellarCommands = [ + "chown -R \(Paths.whoami):staff \(Paths.cellarPath)/nginx", + "chown -R \(Paths.whoami):staff \(Paths.cellarPath)/dnsmasq" + ] + + PhpEnv.shared.availablePhpVersions.forEach { version in + let formula = version == PhpEnv.brewPhpVersion + ? "php" + : "php@\(version)" + servicesCommands.append("\(Paths.brew) services stop \(formula)") + cellarCommands.append("chown -R \(Paths.whoami):staff \(Paths.cellarPath)/\(formula)") + } + + let script = + servicesCommands.joined(separator: " && ") + + " && " + + cellarCommands.joined(separator: " && ") + + let appleScript = NSAppleScript( + source: "do shell script \"\(script)\" with administrator privileges" + ) + + let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) + + if (eventResult == nil) { + print("Oh no, that didn't work.") + } else { + NotificationCenter.default.post(name: Events.ServicesUpdated, object: nil) + print("Oh, that worked.") + } } // MARK: - Finding Config Files diff --git a/phpmon-common/Core/Paths.swift b/phpmon-common/Core/Paths.swift index 9083041..56fc65b 100644 --- a/phpmon-common/Core/Paths.swift +++ b/phpmon-common/Core/Paths.swift @@ -48,6 +48,10 @@ public class Paths { return shared.userName } + public static var cellarPath: String { + return "\(shared.baseDir.rawValue)/Cellar" + } + public static var binPath: String { return "\(shared.baseDir.rawValue)/bin" } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 7f09176..daeff2f 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -167,6 +167,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate { // MARK: - Actions + @objc func fixHomebrewPermissions() { + Actions.fixHomebrewPermissions() + } + @objc func restartPhpFpm() { waitAndExecute { Actions.restartPhpFpm() diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 56ae048..630405a 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -51,9 +51,13 @@ class StatusMenu : NSMenu { } else { servicesMenu.addItem(NSMenuItem( title: "mi_fix_my_valet".localized(PhpEnv.brewPhpVersion), - action: #selector(MainMenu.fixMyValet), keyEquivalent: "f")) + action: #selector(MainMenu.fixMyValet), keyEquivalent: "")) } + servicesMenu.addItem(NSMenuItem( + title: "mi_fix_brew_permissions".localized(), + action: #selector(MainMenu.fixHomebrewPermissions), keyEquivalent: "")) + servicesMenu.addItem(NSMenuItem(title: "mi_services".localized, action: nil, keyEquivalent: "")) servicesMenu.addItem(NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "d")) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 8552289..4de07d3 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -27,6 +27,7 @@ "mi_stop_all_services" = "Stop All Services"; "mi_fix_my_valet" = "Fix My Valet (PHP & Services)"; "mi_fix_my_valet_unavailable" = "Fix My Valet Unavailable"; +"mi_fix_brew_permissions" = "Fix Homebrew Permissions"; "mi_php_refresh" = "Refresh Information"; "mi_configuration" = "PHP Configuration";