mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
✨ Read composer.json for version requirement
This commit is contained in:
@ -129,6 +129,7 @@
|
|||||||
C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CCBA6B275C567B008C7055 /* PMWindowController.swift */; };
|
C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CCBA6B275C567B008C7055 /* PMWindowController.swift */; };
|
||||||
C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CCBA6B275C567B008C7055 /* PMWindowController.swift */; };
|
C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CCBA6B275C567B008C7055 /* PMWindowController.swift */; };
|
||||||
C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; };
|
C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; };
|
||||||
|
C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; };
|
||||||
C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
||||||
C4D9ADC0277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
C4D9ADC0277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
||||||
C4D9ADC1277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
C4D9ADC1277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; };
|
||||||
@ -268,6 +269,7 @@
|
|||||||
C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpConfigWatcher.swift; sourceTree = "<group>"; };
|
C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpConfigWatcher.swift; sourceTree = "<group>"; };
|
||||||
C4CCBA6B275C567B008C7055 /* PMWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMWindowController.swift; sourceTree = "<group>"; };
|
C4CCBA6B275C567B008C7055 /* PMWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMWindowController.swift; sourceTree = "<group>"; };
|
||||||
C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = "<group>"; };
|
C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = "<group>"; };
|
||||||
|
C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = "<group>"; };
|
||||||
C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = "<group>"; };
|
C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = "<group>"; };
|
||||||
C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcher.swift; sourceTree = "<group>"; };
|
C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcher.swift; sourceTree = "<group>"; };
|
||||||
C4E713562570150F00007428 /* SECURITY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = "<group>"; };
|
C4E713562570150F00007428 /* SECURITY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = "<group>"; };
|
||||||
@ -521,6 +523,7 @@
|
|||||||
C4AF9F6B275445D300D44ED0 /* Integrations */ = {
|
C4AF9F6B275445D300D44ED0 /* Integrations */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
C4D89BC42783C98800A02B68 /* Composer */,
|
||||||
C4AF9F6C275445D900D44ED0 /* Homebrew */,
|
C4AF9F6C275445D900D44ED0 /* Homebrew */,
|
||||||
C4AF9F6A275445C900D44ED0 /* Valet */,
|
C4AF9F6A275445C900D44ED0 /* Valet */,
|
||||||
);
|
);
|
||||||
@ -576,6 +579,14 @@
|
|||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
C4D89BC42783C98800A02B68 /* Composer */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
C4D89BC52783C99400A02B68 /* ComposerJson.swift */,
|
||||||
|
);
|
||||||
|
path = Composer;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
C4D9ADBD27761084007277F4 /* PHP */ = {
|
C4D9ADBD27761084007277F4 /* PHP */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -852,6 +863,7 @@
|
|||||||
C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */,
|
C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */,
|
||||||
C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */,
|
C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */,
|
||||||
C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */,
|
C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */,
|
||||||
|
C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */,
|
||||||
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */,
|
C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */,
|
||||||
C4B97B75275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */,
|
C4B97B75275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */,
|
||||||
C464ADAC275A7A3F003FCD53 /* SiteListWC.swift in Sources */,
|
C464ADAC275A7A3F003FCD53 /* SiteListWC.swift in Sources */,
|
||||||
|
@ -473,7 +473,7 @@
|
|||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Lock" id="aJ0-ia-YrZ"/>
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Lock" id="aJ0-ia-YrZ"/>
|
||||||
</imageView>
|
</imageView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jKi-Ls-7FZ">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jKi-Ls-7FZ">
|
||||||
<rect key="frame" x="459" y="28" width="64" height="11"/>
|
<rect key="frame" x="449" y="28" width="64" height="11"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="DRIVER TYPE" id="fjd-eb-itv">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="DRIVER TYPE" id="fjd-eb-itv">
|
||||||
<font key="font" metaFont="miniSystem"/>
|
<font key="font" metaFont="miniSystem"/>
|
||||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -481,7 +481,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TbX-e2-3QL">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TbX-e2-3QL">
|
||||||
<rect key="frame" x="459" y="15" width="36" height="14"/>
|
<rect key="frame" x="449" y="15" width="36" height="14"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Driver" id="GMt-SG-vFl">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Driver" id="GMt-SG-vFl">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -492,7 +492,7 @@
|
|||||||
<rect key="frame" x="0.0" y="-2" width="531" height="5"/>
|
<rect key="frame" x="0.0" y="-2" width="531" height="5"/>
|
||||||
</box>
|
</box>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="0NQ-ZD-CqD">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="0NQ-ZD-CqD">
|
||||||
<rect key="frame" x="435" y="18" width="18" height="18"/>
|
<rect key="frame" x="425" y="18" width="18" height="18"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="18" id="Suw-gm-AEi"/>
|
<constraint firstAttribute="width" constant="18" id="Suw-gm-AEi"/>
|
||||||
<constraint firstAttribute="height" constant="18" id="qO6-vg-5nC"/>
|
<constraint firstAttribute="height" constant="18" id="qO6-vg-5nC"/>
|
||||||
@ -506,22 +506,33 @@
|
|||||||
<constraint firstAttribute="width" constant="18" id="jKJ-Xn-BPA"/>
|
<constraint firstAttribute="width" constant="18" id="jKJ-Xn-BPA"/>
|
||||||
<constraint firstAttribute="height" constant="18" id="lSH-of-WzD"/>
|
<constraint firstAttribute="height" constant="18" id="lSH-of-WzD"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSCaution" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="9XB-KO-aSI">
|
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSCaution" catalog="system" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="9XB-KO-aSI">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="150" translatesAutoresizingMaskIntoConstraints="NO" id="MD8-ef-Ht8">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="150" translatesAutoresizingMaskIntoConstraints="NO" id="MD8-ef-Ht8">
|
||||||
<rect key="frame" x="235" y="16" width="182" height="22"/>
|
<rect key="frame" x="235" y="5" width="112" height="44"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Warning: This is a warning message. Please take this into account." id="iub-KH-clf">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Warning: This is a warning message. Please take this into account." id="iub-KH-clf">
|
||||||
<font key="font" metaFont="miniSystem"/>
|
<font key="font" metaFont="miniSystem"/>
|
||||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3xt-wC-hUJ">
|
||||||
|
<rect key="frame" x="352" y="18" width="59" height="18"/>
|
||||||
|
<buttonCell key="cell" type="inline" title=" PHP X.X" bezelStyle="inline" alignment="center" borderStyle="border" inset="2" id="anZ-hP-G0R">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystemBold"/>
|
||||||
|
</buttonCell>
|
||||||
|
<color key="contentTintColor" name="systemGreenColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pressedPhpVersion:" target="5GY-nN-BWd" id="mB5-WD-aZy"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" secondItem="MD8-ef-Ht8" secondAttribute="trailing" constant="20" id="1Rb-Or-Nnn"/>
|
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" secondItem="MD8-ef-Ht8" secondAttribute="trailing" constant="80" id="1Rb-Or-Nnn"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="TbX-e2-3QL" secondAttribute="trailing" constant="20" symbolic="YES" id="3vE-LR-S7N"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="TbX-e2-3QL" secondAttribute="trailing" constant="20" symbolic="YES" id="3vE-LR-S7N"/>
|
||||||
<constraint firstItem="TbX-e2-3QL" firstAttribute="leading" secondItem="0NQ-ZD-CqD" secondAttribute="trailing" constant="8" symbolic="YES" id="4cb-D9-8d1"/>
|
<constraint firstItem="TbX-e2-3QL" firstAttribute="leading" secondItem="0NQ-ZD-CqD" secondAttribute="trailing" constant="8" symbolic="YES" id="4cb-D9-8d1"/>
|
||||||
<constraint firstItem="XJL-Uw-frD" firstAttribute="leading" secondItem="QPX-eu-eV8" secondAttribute="trailing" constant="10" id="55y-3V-RYt"/>
|
<constraint firstItem="XJL-Uw-frD" firstAttribute="leading" secondItem="QPX-eu-eV8" secondAttribute="trailing" constant="10" id="55y-3V-RYt"/>
|
||||||
@ -534,18 +545,21 @@
|
|||||||
<constraint firstItem="CXK-Q9-CpO" firstAttribute="leading" secondItem="XJL-Uw-frD" secondAttribute="leading" id="Ojw-VZ-3EG"/>
|
<constraint firstItem="CXK-Q9-CpO" firstAttribute="leading" secondItem="XJL-Uw-frD" secondAttribute="leading" id="Ojw-VZ-3EG"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="syz-LF-l6P" secondAttribute="trailing" id="PWd-5k-AlD"/>
|
<constraint firstAttribute="trailing" secondItem="syz-LF-l6P" secondAttribute="trailing" id="PWd-5k-AlD"/>
|
||||||
<constraint firstItem="XJL-Uw-frD" firstAttribute="top" secondItem="5GY-nN-BWd" secondAttribute="top" constant="12" id="QeE-c7-I9U"/>
|
<constraint firstItem="XJL-Uw-frD" firstAttribute="top" secondItem="5GY-nN-BWd" secondAttribute="top" constant="12" id="QeE-c7-I9U"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="jKi-Ls-7FZ" secondAttribute="trailing" constant="10" id="Uhk-Dy-c65"/>
|
|
||||||
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="centerY" secondItem="5GY-nN-BWd" secondAttribute="centerY" id="Utr-aa-tqX"/>
|
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="centerY" secondItem="5GY-nN-BWd" secondAttribute="centerY" id="Utr-aa-tqX"/>
|
||||||
<constraint firstItem="CXK-Q9-CpO" firstAttribute="top" secondItem="XJL-Uw-frD" secondAttribute="bottom" id="VKg-Vq-sYa"/>
|
<constraint firstItem="CXK-Q9-CpO" firstAttribute="top" secondItem="XJL-Uw-frD" secondAttribute="bottom" id="VKg-Vq-sYa"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="3xt-wC-hUJ" secondAttribute="trailing" constant="120" id="W5B-63-qmy"/>
|
||||||
<constraint firstItem="TbX-e2-3QL" firstAttribute="centerY" secondItem="5GY-nN-BWd" secondAttribute="centerY" constant="5" id="cN8-zO-fnc"/>
|
<constraint firstItem="TbX-e2-3QL" firstAttribute="centerY" secondItem="5GY-nN-BWd" secondAttribute="centerY" constant="5" id="cN8-zO-fnc"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="syz-LF-l6P" secondAttribute="bottom" id="gj7-cJ-Lle"/>
|
<constraint firstAttribute="bottom" secondItem="syz-LF-l6P" secondAttribute="bottom" id="gj7-cJ-Lle"/>
|
||||||
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="CXK-Q9-CpO" secondAttribute="trailing" constant="8" symbolic="YES" id="iEd-Y3-zhp"/>
|
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="CXK-Q9-CpO" secondAttribute="trailing" constant="8" symbolic="YES" id="iEd-Y3-zhp"/>
|
||||||
<constraint firstItem="ypa-iv-wLD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="XJL-Uw-frD" secondAttribute="trailing" constant="30" id="koV-Sj-tO8"/>
|
<constraint firstItem="ypa-iv-wLD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="XJL-Uw-frD" secondAttribute="trailing" constant="30" id="koV-Sj-tO8"/>
|
||||||
<constraint firstItem="MD8-ef-Ht8" firstAttribute="centerY" secondItem="ypa-iv-wLD" secondAttribute="centerY" id="lIN-pm-mCo"/>
|
<constraint firstItem="MD8-ef-Ht8" firstAttribute="centerY" secondItem="ypa-iv-wLD" secondAttribute="centerY" id="lIN-pm-mCo"/>
|
||||||
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="XJL-Uw-frD" secondAttribute="trailing" constant="8" symbolic="YES" id="lLA-Jx-Q4W"/>
|
<constraint firstItem="0NQ-ZD-CqD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="XJL-Uw-frD" secondAttribute="trailing" constant="8" symbolic="YES" id="lLA-Jx-Q4W"/>
|
||||||
|
<constraint firstItem="3xt-wC-hUJ" firstAttribute="centerY" secondItem="5GY-nN-BWd" secondAttribute="centerY" id="vhb-WC-3NC"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="jKi-Ls-7FZ" secondAttribute="trailing" constant="20" id="vwD-Sg-Lzc"/>
|
||||||
<constraint firstItem="jKi-Ls-7FZ" firstAttribute="leading" secondItem="TbX-e2-3QL" secondAttribute="leading" id="zjN-s3-2Ww"/>
|
<constraint firstItem="jKi-Ls-7FZ" firstAttribute="leading" secondItem="TbX-e2-3QL" secondAttribute="leading" id="zjN-s3-2Ww"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="buttonPhpVersion" destination="3xt-wC-hUJ" id="LpB-7n-qUr"/>
|
||||||
<outlet property="buttonWarning" destination="ypa-iv-wLD" id="NwX-H3-8um"/>
|
<outlet property="buttonWarning" destination="ypa-iv-wLD" id="NwX-H3-8um"/>
|
||||||
<outlet property="imageViewLock" destination="QPX-eu-eV8" id="Nnh-kB-adG"/>
|
<outlet property="imageViewLock" destination="QPX-eu-eV8" id="Nnh-kB-adG"/>
|
||||||
<outlet property="imageViewType" destination="0NQ-ZD-CqD" id="Cph-FN-LaY"/>
|
<outlet property="imageViewType" destination="0NQ-ZD-CqD" id="Cph-FN-LaY"/>
|
||||||
@ -608,7 +622,7 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<image name="IconLinked" width="512" height="512"/>
|
<image name="IconLinked" width="512" height="512"/>
|
||||||
<image name="Lock" width="30" height="30"/>
|
<image name="Lock" width="30" height="30"/>
|
||||||
<image name="NSCaution" width="32" height="32"/>
|
<image name="NSCaution" catalog="system" width="32" height="32"/>
|
||||||
<image name="arrow.clockwise" catalog="system" width="14" height="16"/>
|
<image name="arrow.clockwise" catalog="system" width="14" height="16"/>
|
||||||
</resources>
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
@ -59,6 +59,5 @@ class Alert {
|
|||||||
secondButtonTitle: "",
|
secondButtonTitle: "",
|
||||||
style: style
|
style: style
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
46
phpmon/Domain/Integrations/Composer/ComposerJson.swift
Normal file
46
phpmon/Domain/Integrations/Composer/ComposerJson.swift
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// ComposerJson.swift
|
||||||
|
// PHP Monitor
|
||||||
|
//
|
||||||
|
// Created by Nico Verbruggen on 04/01/2022.
|
||||||
|
// Copyright © 2022 Nico Verbruggen. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct ComposerJson: Decodable {
|
||||||
|
let dependencies: Dictionary<String, String>?
|
||||||
|
let devDependencies: Dictionary<String, String>?
|
||||||
|
let configuration: Config?
|
||||||
|
|
||||||
|
public func getPhpVersion() -> (String, String) {
|
||||||
|
// Check if in platform
|
||||||
|
if configuration?.platform?.php != nil {
|
||||||
|
return (configuration!.platform!.php!, "platform")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if in dependencies
|
||||||
|
if dependencies?["php"] != nil {
|
||||||
|
return (dependencies!["php"]!, "dependency list")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unknown!
|
||||||
|
return ("", "unknown")
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case dependencies = "require"
|
||||||
|
case devDependencies = "require-dev"
|
||||||
|
case configuration = "config"
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Config: Decodable {
|
||||||
|
let platform: Platform?
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Platform: Decodable {
|
||||||
|
let php: String?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -160,6 +160,12 @@ class Valet {
|
|||||||
/// What driver is currently in use. If not detected, defaults to nil.
|
/// What driver is currently in use. If not detected, defaults to nil.
|
||||||
var driver: String? = nil
|
var driver: String? = nil
|
||||||
|
|
||||||
|
/// The PHP version as discovered in composer.json
|
||||||
|
var composerPhp: String = "???"
|
||||||
|
|
||||||
|
/// How the PHP version was determined
|
||||||
|
var composerPhpSource: String = "unknown"
|
||||||
|
|
||||||
init() {}
|
init() {}
|
||||||
|
|
||||||
convenience init(absolutePath: String, tld: String) {
|
convenience init(absolutePath: String, tld: String) {
|
||||||
@ -169,6 +175,7 @@ class Valet {
|
|||||||
self.aliasPath = nil
|
self.aliasPath = nil
|
||||||
determineSecured(tld)
|
determineSecured(tld)
|
||||||
determineDriver()
|
determineDriver()
|
||||||
|
determineComposerPhpVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
convenience init(aliasPath: String, tld: String) {
|
convenience init(aliasPath: String, tld: String) {
|
||||||
@ -178,6 +185,7 @@ class Valet {
|
|||||||
self.aliasPath = aliasPath
|
self.aliasPath = aliasPath
|
||||||
determineSecured(tld)
|
determineSecured(tld)
|
||||||
determineDriver()
|
determineDriver()
|
||||||
|
determineComposerPhpVersion()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func determineSecured(_ tld: String) {
|
public func determineSecured(_ tld: String) {
|
||||||
@ -195,6 +203,20 @@ class Valet {
|
|||||||
self.driver = nil
|
self.driver = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func determineComposerPhpVersion() {
|
||||||
|
let path = "\(absolutePath!)/composer.json"
|
||||||
|
do {
|
||||||
|
if Filesystem.fileExists(path) {
|
||||||
|
(self.composerPhp, self.composerPhpSource) = try JSONDecoder().decode(
|
||||||
|
ComposerJson.self,
|
||||||
|
from: String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8).data(using: .utf8)!
|
||||||
|
).getPhpVersion()
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Log.err("Something went wrong reading the composer JSON file.")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Configuration: Decodable {
|
struct Configuration: Decodable {
|
||||||
|
@ -11,6 +11,8 @@ import AppKit
|
|||||||
|
|
||||||
class SiteListCell: NSTableCellView
|
class SiteListCell: NSTableCellView
|
||||||
{
|
{
|
||||||
|
var site: Valet.Site? = nil
|
||||||
|
|
||||||
@IBOutlet weak var labelSiteName: NSTextField!
|
@IBOutlet weak var labelSiteName: NSTextField!
|
||||||
@IBOutlet weak var labelPathName: NSTextField!
|
@IBOutlet weak var labelPathName: NSTextField!
|
||||||
|
|
||||||
@ -22,11 +24,15 @@ class SiteListCell: NSTableCellView
|
|||||||
@IBOutlet weak var buttonWarning: NSButton!
|
@IBOutlet weak var buttonWarning: NSButton!
|
||||||
@IBOutlet weak var labelWarning: NSTextField!
|
@IBOutlet weak var labelWarning: NSTextField!
|
||||||
|
|
||||||
|
@IBOutlet weak var buttonPhpVersion: NSButton!
|
||||||
|
|
||||||
override func draw(_ dirtyRect: NSRect) {
|
override func draw(_ dirtyRect: NSRect) {
|
||||||
super.draw(dirtyRect)
|
super.draw(dirtyRect)
|
||||||
}
|
}
|
||||||
|
|
||||||
func populateCell(with site: Valet.Site) {
|
func populateCell(with site: Valet.Site) {
|
||||||
|
self.site = site
|
||||||
|
|
||||||
// Make sure to show the TLD
|
// Make sure to show the TLD
|
||||||
labelSiteName.stringValue = "\(site.name!).\(Valet.shared.config.tld)"
|
labelSiteName.stringValue = "\(site.name!).\(Valet.shared.config.tld)"
|
||||||
|
|
||||||
@ -54,6 +60,24 @@ class SiteListCell: NSTableCellView
|
|||||||
: NSColor.init(red: 246/255, green: 71/255, blue: 71/255, alpha: 1.0) // red
|
: NSColor.init(red: 246/255, green: 71/255, blue: 71/255, alpha: 1.0) // red
|
||||||
|
|
||||||
// Show the current driver
|
// Show the current driver
|
||||||
labelDriver.stringValue = site.driver ?? "???"
|
labelDriver.stringValue = "\(site.driver ?? "???")"
|
||||||
|
|
||||||
|
// Show the PHP version
|
||||||
|
buttonPhpVersion.title = " PHP \(site.composerPhp) "
|
||||||
|
buttonPhpVersion.isHidden = (site.composerPhp == "???")
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func pressedPhpVersion(_ sender: Any) {
|
||||||
|
guard let site = self.site else { return }
|
||||||
|
|
||||||
|
Alert.confirm(
|
||||||
|
onWindow: App.shared.siteListWindowController!.window!,
|
||||||
|
messageText: "alert.composer_php_requirement.title"
|
||||||
|
.localized("\(site.name!).\(Valet.shared.config.tld)", site.composerPhp),
|
||||||
|
informativeText: "alert.composer_php_requirement.info"
|
||||||
|
.localized(site.composerPhpSource),
|
||||||
|
secondButtonTitle: "",
|
||||||
|
onFirstButtonPressed: {}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,8 +179,10 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
|||||||
sites = Valet.shared.sites.filter({ site in
|
sites = Valet.shared.sites.filter({ site in
|
||||||
return site.name.lowercased().contains(searchString)
|
return site.name.lowercased().contains(searchString)
|
||||||
})
|
})
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
self.tableView.reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
tableView.reloadData()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Deinitialization
|
// MARK: - Deinitialization
|
||||||
|
@ -147,10 +147,13 @@
|
|||||||
You can find more information in the terminal output below. You’ll have to fix this
|
You can find more information in the terminal output below. You’ll have to fix this
|
||||||
problem manually, using your own Terminal app (this just shows you the output).";
|
problem manually, using your own Terminal app (this just shows you the output).";
|
||||||
|
|
||||||
|
|
||||||
"alert.composer_success.title" = "Composer’s done updating!";
|
"alert.composer_success.title" = "Composer’s done updating!";
|
||||||
"alert.composer_success.info" = "Your global Composer dependencies have been successfully updated.";
|
"alert.composer_success.info" = "Your global Composer dependencies have been successfully updated.";
|
||||||
|
|
||||||
|
// Composer Version
|
||||||
|
"alert.composer_php_requirement.title" = "`%@` has the following PHP requirement: \"php\": \"%@\".";
|
||||||
|
"alert.composer_php_requirement.info" = "This required PHP version was determined by checking the %@ in `composer.json`.\n\nPlease note that the lockfile is not checked and this reflects the current Composer configuration file as it existed at the time of refreshing the site list.";
|
||||||
|
|
||||||
// Force Reload Started
|
// Force Reload Started
|
||||||
"alert.force_reload.title" = "PHP Monitor will force reload the latest version of PHP";
|
"alert.force_reload.title" = "PHP Monitor will force reload the latest version of PHP";
|
||||||
"alert.force_reload.info" = "This can take a while. You'll get another alert when the force reload has completed.";
|
"alert.force_reload.info" = "This can take a while. You'll get another alert when the force reload has completed.";
|
||||||
|
Reference in New Issue
Block a user