mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2026-04-05 18:50:08 +02:00
✨ Check cutoff date for PHP version management
This commit is contained in:
@@ -18,6 +18,20 @@ struct Constants {
|
|||||||
*/
|
*/
|
||||||
static let MinimumRecommendedValetVersion = "2.16.2"
|
static let MinimumRecommendedValetVersion = "2.16.2"
|
||||||
|
|
||||||
|
/**
|
||||||
|
PHP Monitor supplies a hardcoded list of PHP packages in its own
|
||||||
|
PHP Version Manager.
|
||||||
|
|
||||||
|
This hardcoded list will expire and will need to be modified when
|
||||||
|
the cutoff date occurs, which is when the `php` formula will
|
||||||
|
become PHP 8.4, and a new build will need to be made.
|
||||||
|
|
||||||
|
If users launch an older version of the app, then a warning
|
||||||
|
will be displayed to let them know that certain operations
|
||||||
|
will not work correctly and that they need to update their app.
|
||||||
|
*/
|
||||||
|
static let PhpFormulaeCutoffDate = "2024-11-01"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The PHP versions that are considered pre-release versions.
|
* The PHP versions that are considered pre-release versions.
|
||||||
* Past a certain date, an experimental version "graduates"
|
* Past a certain date, an experimental version "graduates"
|
||||||
@@ -25,8 +39,7 @@ struct Constants {
|
|||||||
*/
|
*/
|
||||||
static var ExperimentalPhpVersions: Set<String> {
|
static var ExperimentalPhpVersions: Set<String> {
|
||||||
let releaseDates = [
|
let releaseDates = [
|
||||||
"8.4": Date.fromString("2024-12-01"), // PLACEHOLDER DATE
|
"8.4": Date.fromString("2024-12-01") // PLACEHOLDER DATE
|
||||||
"8.3": Date.fromString("2023-11-23") // OFFICIAL RELEASE
|
|
||||||
]
|
]
|
||||||
|
|
||||||
return Set(releaseDates
|
return Set(releaseDates
|
||||||
@@ -48,8 +61,7 @@ struct Constants {
|
|||||||
static let DetectedPhpVersions: Set = [
|
static let DetectedPhpVersions: Set = [
|
||||||
"5.6",
|
"5.6",
|
||||||
"7.0", "7.1", "7.2", "7.3", "7.4",
|
"7.0", "7.1", "7.2", "7.3", "7.4",
|
||||||
"8.0", "8.1", "8.2",
|
"8.0", "8.1", "8.2", "8.3",
|
||||||
"8.3",
|
|
||||||
"8.4"
|
"8.4"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ struct BrewPhpFormula: Equatable {
|
|||||||
/// The upgrade that is currently available, if it exists.
|
/// The upgrade that is currently available, if it exists.
|
||||||
let upgradeVersion: String?
|
let upgradeVersion: String?
|
||||||
|
|
||||||
|
#warning("The rebuild attribute should be checked, it can be used to check if a Tap update exists for a pre-release version.")
|
||||||
|
/// A rebuild version, if applicable.
|
||||||
|
// let rebuild: String?
|
||||||
|
|
||||||
/// Whether this formula is a stable version of PHP.
|
/// Whether this formula is a stable version of PHP.
|
||||||
let prerelease: Bool
|
let prerelease: Bool
|
||||||
|
|
||||||
|
|||||||
@@ -33,28 +33,8 @@ struct PhpExtensionManagerView: View {
|
|||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
header.padding(20)
|
header.padding(20)
|
||||||
|
|
||||||
if PhpEnvironments.shared.availablePhpVersions.count <= 4 {
|
if PhpEnvironments.shared.availablePhpVersions.count > 1 {
|
||||||
Picker("Show extensions for: ",
|
phpVersionPicker.disabled(self.status.busy)
|
||||||
selection: $manager.phpVersion) {
|
|
||||||
ForEach(PhpEnvironments.shared.availablePhpVersions, id: \.self) {
|
|
||||||
Text("PHP \($0)")
|
|
||||||
.tag($0)
|
|
||||||
.font(.system(size: 12))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.pickerStyle(SegmentedPickerStyle()).padding(15)
|
|
||||||
.font(.system(size: 12))
|
|
||||||
} else {
|
|
||||||
Picker("Show extensions for: ",
|
|
||||||
selection: $manager.phpVersion) {
|
|
||||||
ForEach(PhpEnvironments.shared.availablePhpVersions, id: \.self) {
|
|
||||||
Text("PHP \($0)")
|
|
||||||
.tag($0)
|
|
||||||
.font(.system(size: 12))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.pickerStyle(MenuPickerStyle()).padding(15)
|
|
||||||
.font(.system(size: 12))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
@@ -86,6 +66,35 @@ struct PhpExtensionManagerView: View {
|
|||||||
|
|
||||||
// MARK: View Variables
|
// MARK: View Variables
|
||||||
|
|
||||||
|
private var phpVersionPicker: some View {
|
||||||
|
Group {
|
||||||
|
if PhpEnvironments.shared.availablePhpVersions.count <= 4 {
|
||||||
|
Picker("Show extensions for: ",
|
||||||
|
selection: $manager.phpVersion) {
|
||||||
|
ForEach(PhpEnvironments.shared.availablePhpVersions, id: \.self) {
|
||||||
|
Text("PHP \($0)")
|
||||||
|
.tag($0)
|
||||||
|
.font(.system(size: 12))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pickerStyle(SegmentedPickerStyle()).padding(15)
|
||||||
|
.font(.system(size: 12))
|
||||||
|
} else {
|
||||||
|
Picker("Show extensions for: ",
|
||||||
|
selection: $manager.phpVersion) {
|
||||||
|
ForEach(PhpEnvironments.shared.availablePhpVersions, id: \.self) {
|
||||||
|
Text("PHP \($0)")
|
||||||
|
.tag($0)
|
||||||
|
.font(.system(size: 12))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pickerStyle(MenuPickerStyle()).padding(15)
|
||||||
|
.font(.system(size: 12))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private var header: some View {
|
private var header: some View {
|
||||||
HStack(alignment: .center, spacing: 15) {
|
HStack(alignment: .center, spacing: 15) {
|
||||||
Image(systemName: "puzzlepiece.extension.fill")
|
Image(systemName: "puzzlepiece.extension.fill")
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ struct PhpVersionManagerView: View {
|
|||||||
|
|
||||||
await delay(seconds: 1)
|
await delay(seconds: 1)
|
||||||
|
|
||||||
|
// PHP formulae may not be installable with older Homebrew version
|
||||||
if version.major != 4 {
|
if version.major != 4 {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
self.presentErrorAlert(
|
self.presentErrorAlert(
|
||||||
@@ -59,6 +60,16 @@ struct PhpVersionManagerView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PHP formulae may be out of date past the cutoff date
|
||||||
|
if Date.fromString(Constants.PhpFormulaeCutoffDate)! < Date.now {
|
||||||
|
self.presentErrorAlert(
|
||||||
|
title: "phpman.warnings.outdated.title".localized,
|
||||||
|
description: "phpman.warnings.outdated.desc".localized(version.text),
|
||||||
|
button: "generic.ok".localized,
|
||||||
|
style: .warning
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
await PhpEnvironments.detectPhpVersions()
|
await PhpEnvironments.detectPhpVersions()
|
||||||
await self.handler.refreshPhpVersions(loadOutdated: false)
|
await self.handler.refreshPhpVersions(loadOutdated: false)
|
||||||
await self.handler.refreshPhpVersions(loadOutdated: true)
|
await self.handler.refreshPhpVersions(loadOutdated: true)
|
||||||
|
|||||||
@@ -146,6 +146,9 @@
|
|||||||
"phpman.has_updates.description" = "One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)";
|
"phpman.has_updates.description" = "One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)";
|
||||||
"phpman.has_updates.button" = "Upgrade All";
|
"phpman.has_updates.button" = "Upgrade All";
|
||||||
|
|
||||||
|
"phpman.warnings.outdated.title" = "This version of PHP Monitor is outdated";
|
||||||
|
"phpman.warnings.outdated.desc" = "It is highly likely that the Homebrew formulae have changed since this version of PHP Monitor was created. I highly recommend updating the application before using the version manager to install, remove or upgrade PHP versions.";
|
||||||
|
|
||||||
"phpman.warnings.unsupported.title" = "Your version of Homebrew may cause issues";
|
"phpman.warnings.unsupported.title" = "Your version of Homebrew may cause issues";
|
||||||
"phpman.warnings.unsupported.desc" = "No functionality is disabled, but some commands may not work as expected. You are currently running Homebrew %@.
|
"phpman.warnings.unsupported.desc" = "No functionality is disabled, but some commands may not work as expected. You are currently running Homebrew %@.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user