From 8e912151fbb0a0265abe8dc9fafef4f3740de9e8 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 9 Jan 2024 20:55:16 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Allow=20toggling=20extensions=20via?= =?UTF-8?q?=20site=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain List/UI/DomainListVC+Actions.swift | 16 +++++++++ .../UI/DomainListVC+ContextMenu.swift | 35 +++++++++++++++++++ phpmon/en.lproj/Localizable.strings | 3 ++ 3 files changed, 54 insertions(+) diff --git a/phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift b/phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift index 16aa9a9..ba2dfb2 100644 --- a/phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift +++ b/phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift @@ -110,6 +110,22 @@ extension DomainListVC { } } + @objc func toggleExtension(sender: ExtensionMenuItem) { + Task { + self.setUIBusy() + + await sender.phpExtension?.toggle() + + if Preferences.isEnabled(.autoServiceRestartAfterExtensionToggle) { + await Actions.restartPhpFpm() + } + + reloadContextMenu() + + self.setUINotBusy() + } + } + @objc func isolateSite(sender: PhpMenuItem) { guard let site = selectedSite else { return diff --git a/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift b/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift index dbcccb2..ba00710 100644 --- a/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift +++ b/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift @@ -42,7 +42,20 @@ extension DomainListVC { addDisabledIsolation(to: menu) } + addSeparator(to: menu) + + if let extensions = site.isolatedPhpVersion?.extensions ?? PhpEnvironments.phpInstall?.extensions, + let version = site.isolatedPhpVersion?.versionNumber.short ?? PhpEnvironments.phpInstall?.version.short { + menu.addItem(HeaderView.asMenuItem(text: "mi_detected_extensions".localized)) + addMenuItemsForExtensions( + to: menu, + for: extensions, + version: version + ) + } + menu.addItem(HeaderView.asMenuItem(text: "domain_list.actions".localized)) + addToggleSecure(to: menu, secured: site.secured) addUnlink(to: menu, with: site) @@ -150,6 +163,28 @@ extension DomainListVC { ) } + private func addMenuItemsForExtensions(to menu: NSMenu, for extensions: [PhpExtension], version: String) { + var items: [NSMenuItem] = [ + NSMenuItem(title: "domain_list.applies_to".localized(version)) + ] + + for phpExtension in extensions { + let item = ExtensionMenuItem( + title: "\(phpExtension.name) (\(phpExtension.fileNameOnly))", + action: #selector(self.toggleExtension), + keyEquivalent: "" + ) + + item.state = phpExtension.enabled ? .on : .off + item.phpExtension = phpExtension + + items.append(item) + } + + menu.addItem(NSMenuItem(title: "domain_list.extensions".localized, submenu: items)) + menu.addItem(NSMenuItem.separator()) + } + // MARK: - Menu Items for Proxy private func addMenuItemsForProxy(_ proxy: ValetProxy) { diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 1d5aee1..99b0223 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -264,6 +264,9 @@ You may be asked for your password during the uninstallation process if file per "domain_list.columns.kind" = "Kind"; "domain_list.columns.project_type" = "Project Type"; +"domain_list.extensions" = "Toggle Extensions"; +"domain_list.applies_to" = "Applies to PHP %@"; + // CHOOSE WHAT TO ADD "selection.title" = "What kind of domain would you like to set up?";