[BUGFIX] FailsafePackageManager: do not prevent package sorting
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Package / FailsafePackageManager.php
1 <?php
2 namespace TYPO3\CMS\Core\Package;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 /**
18 * This is an intermediate package manager that loads just
19 * the required extensions for the install in case the package
20 * states are unavailable.
21 */
22 class FailsafePackageManager extends PackageManager
23 {
24 /**
25 * @var bool TRUE if package manager is in failsafe mode
26 */
27 protected $inFailsafeMode = false;
28
29 /**
30 * Loads the states of available packages from the PackageStates.php file.
31 * The result is stored in $this->packageStatesConfiguration.
32 */
33 protected function loadPackageStates()
34 {
35 try {
36 parent::loadPackageStates();
37 } catch (Exception\PackageStatesUnavailableException $exception) {
38 $this->inFailsafeMode = true;
39 $this->packageStatesConfiguration = [];
40 $this->scanAvailablePackages();
41 }
42 }
43
44 /**
45 * Save states
46 */
47 protected function savePackageStates()
48 {
49 // Do not save if in rescue mode
50 if (!$this->inFailsafeMode) {
51 parent::savePackageStates();
52 }
53 }
54
55 /**
56 * To enable writing of the package states file the package states
57 * migration needs to override eventual failsafe blocks.
58 */
59 public function forceSortAndSavePackageStates()
60 {
61 parent::sortActivePackagesByDependencies();
62 parent::savePackageStates();
63 }
64 }