diff --git a/phpmon/Domain/App/Base.lproj/Main.storyboard b/phpmon/Domain/App/Base.lproj/Main.storyboard index 8aa732d..ef8c8c0 100644 --- a/phpmon/Domain/App/Base.lproj/Main.storyboard +++ b/phpmon/Domain/App/Base.lproj/Main.storyboard @@ -896,7 +896,7 @@ Gw - + diff --git a/phpmon/Domain/Integrations/Valet/ValetSite.swift b/phpmon/Domain/Integrations/Valet/ValetSite.swift index 5134454..968e48a 100644 --- a/phpmon/Domain/Integrations/Valet/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/ValetSite.swift @@ -93,6 +93,8 @@ class ValetSite { return } self.isolatedPhpVersion = PhpEnv.shared.cachedPhpInstallations[version] + } else { + self.isolatedPhpVersion = nil } } diff --git a/phpmon/Domain/SiteList/SiteListVC+Actions.swift b/phpmon/Domain/SiteList/SiteListVC+Actions.swift index 7842387..dfab717 100644 --- a/phpmon/Domain/SiteList/SiteListVC+Actions.swift +++ b/phpmon/Domain/SiteList/SiteListVC+Actions.swift @@ -42,7 +42,7 @@ extension SiteListVC { ) } - tableView.reloadData(forRowIndexes: [rowToReload], columnIndexes: [0]) + tableView.reloadData(forRowIndexes: [rowToReload], columnIndexes: [0, 1, 2, 3, 4]) tableView.deselectRow(rowToReload) tableView.selectRowIndexes([rowToReload], byExtendingSelection: true) } @@ -77,6 +77,18 @@ extension SiteListVC { editor.openDirectory(file: selectedSite!.absolutePath) } + @objc func isolateSite(sender: PhpMenuItem) { + self.performAction(command: "cd '\(selectedSite!.absolutePath)' && sudo \(Paths.valet) isolate php@\(sender.version) && exit;") { + self.selectedSite!.determineIsolated() + } + } + + @objc func removeIsolatedSite() { + self.performAction(command: "cd '\(selectedSite!.absolutePath)' && sudo \(Paths.valet) unisolate && exit;") { + self.selectedSite!.isolatedPhpVersion = nil + } + } + @objc func unlinkSite() { guard let site = selectedSite else { return @@ -100,4 +112,17 @@ extension SiteListVC { ) } + private func performAction(command: String, beforeCellReload: @escaping () -> Void) { + let rowToReload = tableView.selectedRow + + waitAndExecute { + Shell.run(command, requiresPath: true) + } completion: { [self] in + beforeCellReload() + tableView.reloadData(forRowIndexes: [rowToReload], columnIndexes: [0, 1, 2, 3, 4]) + tableView.deselectRow(rowToReload) + tableView.selectRowIndexes([rowToReload], byExtendingSelection: true) + } + } + } diff --git a/phpmon/Domain/SiteList/SiteListVC+ContextMenu.swift b/phpmon/Domain/SiteList/SiteListVC+ContextMenu.swift index 70d4da0..c730843 100644 --- a/phpmon/Domain/SiteList/SiteListVC+ContextMenu.swift +++ b/phpmon/Domain/SiteList/SiteListVC+ContextMenu.swift @@ -78,7 +78,29 @@ extension SiteListVC { } private func addIsolate(to menu: NSMenu, with site: ValetSite) { - // + if site.isolatedPhpVersion == nil { + // ISOLATION POSSIBLE + let isolationMenuItem = NSMenuItem(title:"site_list.isolate".localized, action: nil, keyEquivalent: "") + let submenu = NSMenu() + submenu.addItem(withTitle: "Choose a PHP version", action: nil, keyEquivalent: "") + for version in PhpEnv.shared.availablePhpVersions.reversed() { + let item = PhpMenuItem(title: "Always use PHP \(version)", action: #selector(self.isolateSite), keyEquivalent: "") + item.version = version + submenu.addItem(item) + } + menu.setSubmenu(submenu, for: isolationMenuItem) + + menu.addItem(isolationMenuItem) + menu.addItem(NSMenuItem.separator()) + } else { + // REMOVE ISOLATION POSSIBLE + menu.addItem( + withTitle: "site_list.remove_isolation".localized, + action: #selector(self.removeIsolatedSite), + keyEquivalent: "" + ) + menu.addItem(NSMenuItem.separator()) + } } private func addToggleSecure(to menu: NSMenu, with site: ValetSite) { diff --git a/phpmon/Domain/SiteList/SiteListVC.swift b/phpmon/Domain/SiteList/SiteListVC.swift index d668b71..49df734 100644 --- a/phpmon/Domain/SiteList/SiteListVC.swift +++ b/phpmon/Domain/SiteList/SiteListVC.swift @@ -174,6 +174,7 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource { } func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { + let mapping: [String: String] = [ "TLS": "siteListTLSCell", "DOMAIN": "siteListNameCell", diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 8804d99..1be1503 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -103,6 +103,9 @@ // SITE LIST ACTIONS +"site_list.isolate" = "Isolate Domain"; +"site_list.remove_isolation" = "Remove Isolation"; + "site_list.unlink" = "Unlink Directory"; "site_list.secure" = "Secure Domain"; "site_list.unsecure" = "Unsecure Domain";