ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilIniFilesLoadedObjective.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
21 use ILIAS\Setup;
22 
23 class ilIniFilesLoadedObjective implements Setup\Objective
24 {
25  // ATTENTION: This is an evil hack to make bootstrapping of the system simpler.
26  // We have three variariations on loading ini-files: (1) during the setup,
27  // (2) after the setup and while collecting status (3). It should be simple
28  // for consumers in ILIAS (and plugins) to attempt to load ini files in all
29  // circumstances. Hence one objective. Still, the details on how this should
30  // be achieved vary. For (1), we want to populate and load the files. For (2)
31  // we want to just load the files, but make sure they are populated. For (3)
32  // we want to maybe load the files if they exist, but not populate them for
33  // sure. This is the switch to change that behaviour, but also maintain the
34  // simple interface. There for sure are other ways to achieve this, maybe
35  // even better ones, but this hack seems to be okish atm. I suspect it
36  // could go away when we work on the system on how inis are build, the clients
37  // (abandoned) are implemented and the config is loaded in general, but this
38  // is task for another day. If anyone has an idea or wants to work on getting
39  // rid of these, feel free to get in contact with Richard.
40  public static bool $might_populate_ini_files_as_well = true;
41 
42  public function getHash(): string
43  {
44  return hash("sha256", self::class);
45  }
46 
47  public function getLabel(): string
48  {
49  return "The ilias.ini.php and client.ini.php are loaded";
50  }
51 
52  public function isNotable(): bool
53  {
54  return false;
55  }
56 
57  public function getPreconditions(Setup\Environment $environment): array
58  {
59  if (self::$might_populate_ini_files_as_well) {
60  return [
61  new Setup\Objective\ClientIdReadObjective(),
63  ];
64  } else {
65  return [
66  new Setup\Objective\ClientIdReadObjective(),
67  ];
68  }
69  }
70 
71  public function achieve(Setup\Environment $environment): Setup\Environment
72  {
73  $client_id = $environment->getResource(Setup\Environment::RESOURCE_CLIENT_ID);
74  if ($client_id === null) {
75  throw new Setup\UnachievableException(
76  "To initialize the ini-files, we need a client id, but it does not " .
77  "exist in the environment."
78  );
79  }
80 
81  if ($environment->getResource(Setup\Environment::RESOURCE_ILIAS_INI) == null) {
82  $path = dirname(__DIR__, 2) . "/ilias.ini.php";
83  $ini = new ilIniFile($path);
84  $ini->read();
85  $environment = $environment
86  ->withResource(Setup\Environment::RESOURCE_ILIAS_INI, $ini);
87  }
88 
89  if ($environment->getResource(Setup\Environment::RESOURCE_CLIENT_INI) == null) {
90  $path = $this->getClientDir($client_id) . "/client.ini.php";
91  $client_ini = new ilIniFile($path);
92  $client_ini->read();
93  $environment = $environment
94  ->withResource(Setup\Environment::RESOURCE_CLIENT_INI, $client_ini);
95  }
96 
97  return $environment;
98  }
99 
103  public function isApplicable(Setup\Environment $environment): bool
104  {
105  $ini = $environment->getResource(Setup\Environment::RESOURCE_ILIAS_INI);
106  $client_ini = $environment->getResource(Setup\Environment::RESOURCE_CLIENT_INI);
107 
108  return is_null($ini) || is_null($client_ini);
109  }
110 
111  protected function getClientDir($client_id): string
112  {
113  return dirname(__DIR__, 2) . "/data/$client_id";
114  }
115 }
isApplicable(Setup\Environment $environment)
$path
Definition: ltiservices.php:32
achieve(Setup\Environment $environment)
getPreconditions(Setup\Environment $environment)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
An environment holds resources to be used in the setup process.
Definition: Environment.php:27
$client_id
Definition: ltiauth.php:68
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$ini
Definition: raiseError.php:4