1c06feb5da248c0706c2ce72bd00e65111223436
[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 \TYPO3\CMS\Core\Configuration\ConfigurationManager
26 */
27 protected $configurationManager;
28
29 /**
30 * @var bool TRUE if package manager is in failsafe mode
31 */
32 protected $inFailsafeMode = false;
33
34 /**
35 * Constructor
36 */
37 public function __construct()
38 {
39 $this->configurationManager = new \TYPO3\CMS\Core\Configuration\ConfigurationManager;
40 parent::__construct();
41 }
42
43 /**
44 * Loads the states of available packages from the PackageStates.php file.
45 * The result is stored in $this->packageStatesConfiguration.
46 *
47 * @return void
48 */
49 protected function loadPackageStates()
50 {
51 try {
52 parent::loadPackageStates();
53 } catch (Exception\PackageStatesUnavailableException $exception) {
54 $this->inFailsafeMode = true;
55 $this->packageStatesConfiguration = array();
56 $this->scanAvailablePackages();
57 }
58 }
59
60 /**
61 * Requires and registers all packages which were defined in packageStatesConfiguration
62 *
63 * @return void
64 */
65 protected function registerPackagesFromConfiguration($registerOnlyNewPackages = false)
66 {
67 $this->packageStatesConfiguration['packages']['install']['state'] = 'active';
68 parent::registerPackagesFromConfiguration($registerOnlyNewPackages);
69 }
70
71 /**
72 * Sort and save states
73 *
74 * @return void
75 */
76 protected function sortAndSavePackageStates()
77 {
78 // Do not save if in rescue mode
79 if (!$this->inFailsafeMode) {
80 parent::sortAndSavePackageStates();
81 }
82 }
83
84 /**
85 * To enable writing of the package states file the package states
86 * migration needs to override eventual failsafe blocks.
87 */
88 public function forceSortAndSavePackageStates()
89 {
90 parent::sortAndSavePackageStates();
91 }
92 }