mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 12:00:09 +02:00
👌 Handle additional states
This commit is contained in:
@ -25,22 +25,24 @@ extension ValetSite {
|
||||
self.composerPhp = constraint
|
||||
self.composerPhpSource = constraint != "" ? .require : .unknown
|
||||
|
||||
self.composerPhpCompatibleWithLinked = self.composerPhp.split(separator: "|")
|
||||
.map { string in
|
||||
return !PhpVersionNumberCollection.make(from: [PhpEnv.phpInstall.version.long])
|
||||
.matching(constraint: string.trimmingCharacters(in: .whitespacesAndNewlines))
|
||||
.isEmpty
|
||||
}.contains(true)
|
||||
|
||||
self.driver = driver
|
||||
self.driverDeterminedByComposer = true
|
||||
|
||||
if linked {
|
||||
self.aliasPath = self.absolutePath
|
||||
}
|
||||
|
||||
if let isolated = isolated {
|
||||
self.isolatedPhpVersion = PhpInstallation(isolated)
|
||||
}
|
||||
|
||||
self.composerPhpCompatibleWithLinked = self.composerPhp.split(separator: "|")
|
||||
.map { string in
|
||||
let origin = self.isolatedPhpVersion?.versionNumber.homebrewVersion ?? PhpEnv.phpInstall.version.long
|
||||
return !PhpVersionNumberCollection.make(from: [origin])
|
||||
.matching(constraint: string.trimmingCharacters(in: .whitespacesAndNewlines))
|
||||
.isEmpty
|
||||
}.contains(true)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -81,9 +81,9 @@ class ValetSite: DomainListable {
|
||||
|
||||
if makeDeterminations {
|
||||
determineSecured()
|
||||
determineIsolated()
|
||||
determineComposerPhpVersion()
|
||||
determineDriver()
|
||||
determineIsolated()
|
||||
}
|
||||
}
|
||||
|
||||
@ -133,7 +133,6 @@ class ValetSite: DomainListable {
|
||||
with the currently linked version of PHP (see `composerPhpMatchesSystem`).
|
||||
*/
|
||||
public func determineComposerPhpVersion() {
|
||||
|
||||
self.determineComposerInformation()
|
||||
self.determineValetPhpFileInfo()
|
||||
|
||||
@ -145,7 +144,8 @@ class ValetSite: DomainListable {
|
||||
// For example, for Laravel 8 projects the value is "^7.3|^8.0"
|
||||
self.composerPhpCompatibleWithLinked = self.composerPhp.split(separator: "|")
|
||||
.map { string in
|
||||
return !PhpVersionNumberCollection.make(from: [PhpEnv.phpInstall.version.long])
|
||||
let origin = self.isolatedPhpVersion?.versionNumber.homebrewVersion ?? PhpEnv.phpInstall.version.long
|
||||
return !PhpVersionNumberCollection.make(from: [origin])
|
||||
.matching(constraint: string.trimmingCharacters(in: .whitespacesAndNewlines))
|
||||
.isEmpty
|
||||
}.contains(true)
|
||||
|
@ -16,7 +16,63 @@ struct VersionPopoverView: View {
|
||||
|
||||
@State var parent: NSPopover!
|
||||
|
||||
func getTitle() -> String {
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Text(getTitleText())
|
||||
.fontWeight(.bold)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
Text(getSourceText())
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.font(.subheadline)
|
||||
if !validPhpVersions.isEmpty {
|
||||
// Suggestions for alternative PHP versions
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
DisclaimerView(
|
||||
iconName: "info.circle.fill",
|
||||
message: "alert.php_suggestions".localized,
|
||||
color: Color("AppColor")
|
||||
)
|
||||
HStack {
|
||||
ForEach(validPhpVersions, id: \.self) { version in
|
||||
Button("site_link.switch_to_php".localized(version.homebrewVersion), action: {
|
||||
MainMenu.shared.switchToPhpVersion(version.homebrewVersion)
|
||||
parent?.close()
|
||||
})
|
||||
}
|
||||
}.padding(EdgeInsets(top: 10, leading: 0, bottom: 0, trailing: 0))
|
||||
}
|
||||
} else {
|
||||
if site.composerPhpSource == .unknown {
|
||||
// We don't know which PHP version is required
|
||||
DisclaimerView(
|
||||
iconName: "questionmark.circle.fill",
|
||||
message: "alert.unable_to_determine_is_fine".localized
|
||||
)
|
||||
} else {
|
||||
if site.composerPhpCompatibleWithLinked {
|
||||
DisclaimerView(
|
||||
iconName: "checkmark.circle.fill",
|
||||
message: "alert.php_version_ideal".localized,
|
||||
color: Color("IconColorGreen")
|
||||
)
|
||||
} else {
|
||||
DisclaimerView(
|
||||
iconName: "exclamationmark.circle.fill",
|
||||
message: "alert.php_version_incorrect".localized,
|
||||
color: Color("IconColorRed")
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.frame(width: 400, height: nil, alignment: .center)
|
||||
.padding(20)
|
||||
.background(
|
||||
Color(NSColor.windowBackgroundColor)
|
||||
.padding(-80)
|
||||
)
|
||||
}
|
||||
|
||||
func getTitleText() -> String {
|
||||
if site.composerPhpSource == .unknown {
|
||||
return "alert.composer_php_requirement.unable_to_determine".localized
|
||||
}
|
||||
@ -27,7 +83,7 @@ struct VersionPopoverView: View {
|
||||
)
|
||||
}
|
||||
|
||||
func getSource() -> String {
|
||||
func getSourceText() -> String {
|
||||
var information = ""
|
||||
|
||||
if site.isolatedPhpVersion != nil {
|
||||
@ -43,52 +99,6 @@ struct VersionPopoverView: View {
|
||||
|
||||
return information
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Text(getTitle())
|
||||
.fontWeight(.bold)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
Text(getSource())
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.font(.subheadline)
|
||||
if !validPhpVersions.isEmpty {
|
||||
// Suggestions for alternative PHP versions
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
DisclaimerView(
|
||||
iconName: "info.circle",
|
||||
message: "alert.php_suggestions".localized,
|
||||
color: Color("AppColor")
|
||||
)
|
||||
HStack {
|
||||
ForEach(validPhpVersions, id: \.self) { version in
|
||||
Button("site_link.switch_to_php".localized(version.homebrewVersion), action: {
|
||||
MainMenu.shared.switchToPhpVersion(version.homebrewVersion)
|
||||
parent?.close()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if site.composerPhpSource != .unknown {
|
||||
DisclaimerView(
|
||||
iconName: "checkmark.seal.fill",
|
||||
message: "alert.php_version_ideal".localized,
|
||||
color: Color("IconColorGreen")
|
||||
)
|
||||
} else {
|
||||
DisclaimerView(
|
||||
iconName: "questionmark.circle",
|
||||
message: "alert.unable_to_determine_is_fine".localized
|
||||
)
|
||||
}
|
||||
}
|
||||
}.frame(width: 400, height: nil, alignment: .center)
|
||||
.padding(20)
|
||||
.background(
|
||||
Color(NSColor.windowBackgroundColor).padding(-80)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
struct DisclaimerView: View {
|
||||
@ -122,6 +132,8 @@ struct VersionPopoverView_Previews: PreviewProvider {
|
||||
validPhpVersions: [],
|
||||
parent: nil
|
||||
)
|
||||
.previewDisplayName("Unknown Requirement")
|
||||
|
||||
VersionPopoverView(
|
||||
site: ValetSite(
|
||||
fakeWithName: "amazingwebsite",
|
||||
@ -134,6 +146,35 @@ struct VersionPopoverView_Previews: PreviewProvider {
|
||||
validPhpVersions: [],
|
||||
parent: nil
|
||||
)
|
||||
.previewDisplayName("Requirement Matches")
|
||||
VersionPopoverView(
|
||||
site: ValetSite(
|
||||
fakeWithName: "anothersite",
|
||||
tld: "test",
|
||||
secure: true,
|
||||
path: "/path/to/site",
|
||||
linked: true,
|
||||
constraint: "^8.0",
|
||||
isolated: "8.0"
|
||||
),
|
||||
validPhpVersions: [],
|
||||
parent: nil
|
||||
)
|
||||
.previewDisplayName("Isolated")
|
||||
VersionPopoverView(
|
||||
site: ValetSite(
|
||||
fakeWithName: "anothersite",
|
||||
tld: "test",
|
||||
secure: true,
|
||||
path: "/path/to/site",
|
||||
linked: true,
|
||||
constraint: "^8.0",
|
||||
isolated: "7.4"
|
||||
),
|
||||
validPhpVersions: [],
|
||||
parent: nil
|
||||
)
|
||||
.previewDisplayName("Isolated Mismatch")
|
||||
VersionPopoverView(
|
||||
site: ValetSite(
|
||||
fakeWithName: "anothersite",
|
||||
@ -149,5 +190,6 @@ struct VersionPopoverView_Previews: PreviewProvider {
|
||||
],
|
||||
parent: nil
|
||||
)
|
||||
.previewDisplayName("Recommend Alternatives")
|
||||
}
|
||||
}
|
||||
|
@ -312,6 +312,7 @@ problem manually, using your own Terminal app (this just shows you the output)."
|
||||
"alert.composer_php_requirement.type.valetphprc" = "This required PHP version was determined by checking the .valetphprc file in your project's directory.";
|
||||
"alert.unable_to_determine_is_fine" = "If you have a simple project, there may not be a specified PHP version set as a requirement. In that case, you are free to ignore this warning.";
|
||||
"alert.php_version_ideal" = "The currently active PHP version is ideal for this site.";
|
||||
"alert.php_version_incorrect" = "The currently active PHP version does not match the required constraint set for this site.";
|
||||
"alert.php_suggestions" = "There may be a different PHP version which is closer to the constraint.";
|
||||
|
||||
// Suggest Fix My Valet
|
||||
|
Reference in New Issue
Block a user