ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilComponentUpdatePluginObjective.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use ILIAS\Setup;
22use ILIAS\DI;
25
27{
31 protected $plugin_name;
32
33 public function __construct(string $plugin_name)
34 {
35 $this->plugin_name = $plugin_name;
36 }
37
41 public function getHash(): string
42 {
43 return hash("sha256", self::class . $this->plugin_name);
44 }
45
49 public function getLabel(): string
50 {
51 return "Update plugin $this->plugin_name.";
52 }
53
57 public function isNotable(): bool
58 {
59 return true;
60 }
61
65 public function getPreconditions(Setup\Environment $environment): array
66 {
67 return [
69 new \ilIniFilesLoadedObjective(),
70 new \ilDatabaseInitializedObjective(),
71 new \ilComponentPluginAdminInitObjective(),
72 new \ilComponentRepositoryExistsObjective(),
73 new \ilComponentFactoryExistsObjective()
74 ];
75 }
76
80 public function achieve(Setup\Environment $environment): Setup\Environment
81 {
82 $component_repository = $environment->getResource(Setup\Environment::RESOURCE_COMPONENT_REPOSITORY);
83 $component_factory = $environment->getResource(Setup\Environment::RESOURCE_COMPONENT_FACTORY);
84 $info = $component_repository->getPluginByName($this->plugin_name);
85
86 if (!$info->supportsCLISetup()) {
87 throw new \RuntimeException(
88 "Plugin $this->plugin_name does not support command line setup."
89 );
90 }
91
92 if (!$info->isUpdateRequired()) {
93 throw new \RuntimeException(
94 "Plugin $this->plugin_name is already updated."
95 );
96 }
97
98 [$ORIG_DIC, $ORIG_ilDB] = $this->initEnvironment($environment, $component_repository, $component_factory);
99 $plugin = $component_factory->getPlugin($info->getId());
100 $plugin->update();
101 $GLOBALS["DIC"] = $ORIG_DIC;
102 $GLOBALS["ilDB"] = $ORIG_ilDB;
103
104 return $environment;
105 }
106
110 public function isApplicable(Setup\Environment $environment): bool
111 {
112 $component_repository = $environment->getResource(Setup\Environment::RESOURCE_COMPONENT_REPOSITORY);
113 $plugin = $component_repository->getPluginByName($this->plugin_name);
114
115 return $plugin->isUpdateRequired();
116 }
117
118 protected function initEnvironment(
119 Setup\Environment $environment,
120 \ilComponentRepository $component_repository,
121 \ilComponentFactory $component_factory
122 ): array {
123 $db = $environment->getResource(Setup\Environment::RESOURCE_DATABASE);
124 $plugin_admin = $environment->getResource(Setup\Environment::RESOURCE_PLUGIN_ADMIN);
125 $ini = $environment->getResource(Setup\Environment::RESOURCE_ILIAS_INI);
126 $client_ini = $environment->getResource(Setup\Environment::RESOURCE_CLIENT_INI);
127
128 // ATTENTION: This is a total abomination. It only exists to allow various
129 // sub components of the various readers to run. This is a memento to the
130 // fact, that dependency injection is something we want. Currently, every
131 // component could just service locate the whole world via the global $DIC.
132 $ORIG_DIC = $GLOBALS["DIC"];
133 $ORIG_ilDB = $GLOBALS["ilDB"];
134
135 $GLOBALS["DIC"] = new DI\Container();
136 $GLOBALS["DIC"]["component.repository"] = $component_repository;
137 $GLOBALS["DIC"]["component.factory"] = $component_factory;
138 $GLOBALS["DIC"]["ilDB"] = $db;
139 $GLOBALS["ilDB"] = $db;
140 $GLOBALS["DIC"]["ilIliasIniFile"] = $ini;
141 $GLOBALS["DIC"]["ilClientIniFile"] = $client_ini;
142 $GLOBALS["DIC"]["ilLogger"] = new NullLogger();
143 $GLOBALS["DIC"]["ilLog"] = new NullLogger();
144 $GLOBALS["DIC"]["ilLoggerFactory"] = new class () extends ilLoggerFactory {
145 public function __construct()
146 {
147 }
148 public static function getRootLogger(): ilLogger
149 {
150 return $GLOBALS["DIC"]["ilLogger"];
151 }
152 public static function getLogger(string $a_component_id): ilLogger
153 {
154 return $GLOBALS["DIC"]["ilLogger"];
155 }
156 };
157 $GLOBALS["ilLog"] = $GLOBALS["DIC"]["ilLog"];
158 $GLOBALS["DIC"]["ilBench"] = null;
159 $GLOBALS["DIC"]["lng"] = new ilLanguage('en');
160 $GLOBALS["DIC"]["ilPluginAdmin"] = $plugin_admin;
161 $GLOBALS["DIC"]["ilias"] = null;
162 $GLOBALS["DIC"]["ilErr"] = null;
163 $GLOBALS["DIC"]["tree"] = new class () extends ilTree {
164 public function __construct()
165 {
166 }
167 };
168 $GLOBALS["DIC"]["ilAppEventHandler"] = new class () extends ilAppEventHandler {
169 public function __construct()
170 {
171 }
172 public function raise($a_component, $a_event, $a_parameter = ""): void
173 {
174 }
175 };
176 $GLOBALS["DIC"]["ilObjDataCache"] = new ilObjectDataCache();
177 $GLOBALS["DIC"]["ilSetting"] = new ilSetting();
178 $GLOBALS["DIC"]["rbacadmin"] = new class () extends ilRbacAdmin {
179 public function __construct()
180 {
181 }
182 };
183 $GLOBALS["DIC"]["rbacreview"] = new class () extends ilRbacReview {
184 public function __construct()
185 {
186 }
187 };
188 $GLOBALS["DIC"]["ilUser"] = new class () extends ilObjUser {
189 public array $prefs = [];
190
191 public function __construct()
192 {
193 $this->prefs["language"] = "en";
194 }
195 };
196
197 if (!defined('DEBUG')) {
198 define('DEBUG', false);
199 }
200
201 if (!defined('SYSTEM_ROLE_ID')) {
202 define('SYSTEM_ROLE_ID', '2');
203 }
204
205 if (!defined("ILIAS_ABSOLUTE_PATH")) {
206 define("ILIAS_ABSOLUTE_PATH", dirname(__FILE__, 6));
207 }
208
209 if (!defined("CLIENT_ID")) {
210 define('CLIENT_ID', $client_ini->readVariable('client', 'name'));
211 }
212
213 if (!defined("ILIAS_WEB_DIR")) {
214 define('ILIAS_WEB_DIR', "public/data/");
215 }
216
217 // initialise this last to make sure the environment defined here
218 // will be available for plugins, ilObjectDefinition will create
219 // plugin instances, see https://mantis.ilias.de/view.php?id=40890
220 $GLOBALS["DIC"]["objDefinition"] = new ilObjectDefinition();
221
222 return [$ORIG_DIC, $ORIG_ilDB];
223 }
224}
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:36
Read the client id of the installation from the data directory.
Global event handler.
initEnvironment(Setup\Environment $environment, \ilComponentRepository $component_repository, \ilComponentFactory $component_factory)
isApplicable(Setup\Environment $environment)
@inheritDoc
language handling
Component logger with individual log levels by component id.
User class.
class ilObjectDataCache
parses the objects.xml it handles the xml-description of all ilias objects
Class ilRbacAdmin Core functions for role based access control.
class ilRbacReview Contains Review functions of core Rbac.
ILIAS Setting Class.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
$info
Definition: entry_point.php:21
An environment holds resources to be used in the setup process.
Definition: Environment.php:28
getResource(string $id)
Consumers of this method should check if the result is what they expect, e.g.
An objective is a desired state of the system that is supposed to be created by the setup.
Definition: Objective.php:31
Readable part of repository interface to ilComponentDataDB.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Container.php:19
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$ini
Definition: raiseError.php:20
$GLOBALS["DIC"]
Definition: wac.php:54