ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ILIAS\Object\Setup\ilObjectTileImageMigration Class Reference
+ Inheritance diagram for ILIAS\Object\Setup\ilObjectTileImageMigration:
+ Collaboration diagram for ILIAS\Object\Setup\ilObjectTileImageMigration:

Public Member Functions

 getLabel ()
 
 getDefaultAmountOfStepsPerRun ()
 Tell the default amount of steps to be executed for one run of the migration. More...
 
 getPreconditions (Environment $environment)
 Objectives the migration depend on. More...
 
 prepare (Environment $environment)
 Prepare the migration by means of some environment. More...
 
 step (Environment $environment)
 Run one step of the migration. More...
 
 getRemainingAmountOfSteps ()
 Count up how many "things" need to be migrated. More...
 

Private Member Functions

 removeDirectoryOrInform (string $directory, \stdClass $record)
 
 getFullPath (int $object_id, ?string $extension)
 
 cleanupTileInformationWithoutCorrespondingObject ()
 
 deleteTileImageInfoFromContainerSettings (int $id)
 

Private Attributes

ilResourceStorageMigrationHelper $helper
 
FlavourBuilder $flavour_builder
 
ilObjectTileImageFlavourDefinition $flavour_definition
 
AdminInteraction $admin_interaction
 

Additional Inherited Members

- Data Fields inherited from ILIAS\Setup\Migration
const INFINITE = -1
 

Detailed Description

Member Function Documentation

◆ cleanupTileInformationWithoutCorrespondingObject()

ILIAS\Object\Setup\ilObjectTileImageMigration::cleanupTileInformationWithoutCorrespondingObject ( )
private

Definition at line 162 of file class.ilObjectTileImageMigration.php.

References $path, ILIAS\Object\Setup\ilObjectTileImageMigration\deleteTileImageInfoFromContainerSettings(), ILIAS\Object\Setup\ilObjectTileImageMigration\getFullPath(), and ILIAS\Object\Setup\ilObjectTileImageMigration\removeDirectoryOrInform().

Referenced by ILIAS\Object\Setup\ilObjectTileImageMigration\step().

162  : void
163  {
164  $select_next_id = $this->helper->getDatabase()->query('
165  SELECT
166  id,
167  value AS extension
168  FROM container_settings
169  WHERE keyword = "tile_image"
170  ORDER BY id
171  LIMIT 1;
172  ');
173  $next_record = $this->helper->getDatabase()->fetchObject($select_next_id);
174 
175  if ($next_record === null) {
176  return;
177  }
178 
179  $check_object_query = $this->helper->getDatabase()->queryF(
180  'SELECT
181  count(obj_id) AS objs
182  FROM object_data
183  WHERE obj_id = %s;
184  ',
185  ['integer'],
186  [$next_record->id]
187  );
188  $has_objects = $this->helper->getDatabase()->fetchObject($check_object_query);
189  $path = $this->getFullPath($next_record->id, $next_record->extension);
190 
191  if ($has_objects->objs > 0) {
192  return;
193  }
194 
195  if (is_file($path)) {
196  unlink($path);
197  }
198 
199  $this->removeDirectoryOrInform(\dirname($path), $next_record);
200  $this->deleteTileImageInfoFromContainerSettings($next_record->id);
201  }
$path
Definition: ltiservices.php:32
removeDirectoryOrInform(string $directory, \stdClass $record)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ deleteTileImageInfoFromContainerSettings()

ILIAS\Object\Setup\ilObjectTileImageMigration::deleteTileImageInfoFromContainerSettings ( int  $id)
private

Definition at line 203 of file class.ilObjectTileImageMigration.php.

Referenced by ILIAS\Object\Setup\ilObjectTileImageMigration\cleanupTileInformationWithoutCorrespondingObject(), and ILIAS\Object\Setup\ilObjectTileImageMigration\step().

203  : void
204  {
205  $query_delete = $this->helper->getDatabase()->queryF('
206  DELETE FROM container_settings
207  WHERE keyword = "tile_image" AND id = %s
208  ', ['integer'], [$id]);
209  $this->helper->getDatabase()->execute($query_delete);
210  }
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
+ Here is the caller graph for this function:

◆ getDefaultAmountOfStepsPerRun()

ILIAS\Object\Setup\ilObjectTileImageMigration::getDefaultAmountOfStepsPerRun ( )

Tell the default amount of steps to be executed for one run of the migration.

Return Migration::INFINITE if all units should be migrated at once.

Implements ILIAS\Setup\Migration.

Definition at line 45 of file class.ilObjectTileImageMigration.php.

45  : int
46  {
47  return 10000;
48  }

◆ getFullPath()

ILIAS\Object\Setup\ilObjectTileImageMigration::getFullPath ( int  $object_id,
?string  $extension 
)
private

Definition at line 148 of file class.ilObjectTileImageMigration.php.

References CLIENT_WEB_DIR.

Referenced by ILIAS\Object\Setup\ilObjectTileImageMigration\cleanupTileInformationWithoutCorrespondingObject(), and ILIAS\Object\Setup\ilObjectTileImageMigration\step().

148  : string
149  {
150  return implode(
151  DIRECTORY_SEPARATOR,
152  [
154  'obj_data',
155  'tile_image',
156  'tile_image_' . $object_id,
157  'tile_image.' . $extension
158  ]
159  );
160  }
const CLIENT_WEB_DIR
Definition: constants.php:47
+ Here is the caller graph for this function:

◆ getLabel()

ILIAS\Object\Setup\ilObjectTileImageMigration::getLabel ( )
Returns
string - a meaningful and concise description for your migration.

Implements ILIAS\Setup\Migration.

Definition at line 40 of file class.ilObjectTileImageMigration.php.

40  : string
41  {
42  return "Migration of Tile Images to the Resource Storage Service.";
43  }

◆ getPreconditions()

ILIAS\Object\Setup\ilObjectTileImageMigration::getPreconditions ( Environment  $environment)

Objectives the migration depend on.

Exceptions
UnachievableExceptionif the objective is not achievable
Returns
Objective[]

Implements ILIAS\Setup\Migration.

Definition at line 50 of file class.ilObjectTileImageMigration.php.

50  : array
51  {
52  return \ilResourceStorageMigrationHelper::getPreconditions();
53  }

◆ getRemainingAmountOfSteps()

ILIAS\Object\Setup\ilObjectTileImageMigration::getRemainingAmountOfSteps ( )

Count up how many "things" need to be migrated.

This helps the admin to decide how big he can create the steps and also how long a migration takes

Implements ILIAS\Setup\Migration.

Definition at line 212 of file class.ilObjectTileImageMigration.php.

References $r.

212  : int
213  {
214  $query = $this->helper->getDatabase()->query('
215  SELECT
216  count(container_settings.id) AS amount
217  FROM container_settings
218  WHERE container_settings.keyword = "tile_image"
219  ');
220  $r = $this->helper->getDatabase()->fetchObject($query);
221 
222  return (int) $r->amount;
223  }
$r

◆ prepare()

ILIAS\Object\Setup\ilObjectTileImageMigration::prepare ( Environment  $environment)

Prepare the migration by means of some environment.

This is not supposed to modify the environment, but will be run to prime the migration object to run step and getRemainingAmountOfSteps afterwards.

Implements ILIAS\Setup\Migration.

Definition at line 55 of file class.ilObjectTileImageMigration.php.

References ILIAS\Setup\Environment\getResource(), and ILIAS\Setup\Environment\RESOURCE_ADMIN_INTERACTION.

55  : void
56  {
57  $this->helper = new \ilResourceStorageMigrationHelper(
58  new ilObjectTileImageStakeholder(),
59  $environment
60  );
61  $this->admin_interaction = $environment->getResource(Environment::RESOURCE_ADMIN_INTERACTION);
62  $this->flavour_builder = $this->helper->getFlavourBuilder();
63  $this->flavour_definition = new ilObjectTileImageFlavourDefinition();
64  }
+ Here is the call graph for this function:

◆ removeDirectoryOrInform()

ILIAS\Object\Setup\ilObjectTileImageMigration::removeDirectoryOrInform ( string  $directory,
\stdClass  $record 
)
private

Definition at line 127 of file class.ilObjectTileImageMigration.php.

Referenced by ILIAS\Object\Setup\ilObjectTileImageMigration\cleanupTileInformationWithoutCorrespondingObject(), and ILIAS\Object\Setup\ilObjectTileImageMigration\step().

127  : void
128  {
129  if (!is_dir($directory)) {
130  return;
131  }
132 
133  $files = array_diff(scandir($directory), ['.', '..']);
134  if (empty($files)) {
135  rmdir($directory);
136  } else {
137  $file_list = implode(', ', $files);
138  $this->admin_interaction->inform(
139  "The tile image for the object with the id $record->id was probably migrated successfully. "
140  . "However, the directory $directory could not be removed because it is not empty. "
141  . "Remaining files: $file_list. "
142  . 'You may want to verify that the tile image is visible for the object, and remove '
143  . 'the remaining files manually if they are not needed.'
144  );
145  }
146  }
+ Here is the caller graph for this function:

◆ step()

ILIAS\Object\Setup\ilObjectTileImageMigration::step ( Environment  $environment)

Run one step of the migration.

Implements ILIAS\Setup\Migration.

Definition at line 66 of file class.ilObjectTileImageMigration.php.

References $path, ILIAS\Object\Setup\ilObjectTileImageMigration\cleanupTileInformationWithoutCorrespondingObject(), ILIAS\Object\Setup\ilObjectTileImageMigration\deleteTileImageInfoFromContainerSettings(), ILIAS\Object\Setup\ilObjectTileImageMigration\getFullPath(), and ILIAS\Object\Setup\ilObjectTileImageMigration\removeDirectoryOrInform().

66  : void
67  {
68  $query_select = $this->helper->getDatabase()->query('
69  SELECT
70  cs.id,
71  cs.value AS extension,
72  o.owner
73  FROM container_settings AS cs
74  INNER JOIN object_data AS o
75  ON cs.id = o.obj_id
76  WHERE cs.keyword = "tile_image"
77  ORDER BY cs.id
78  LIMIT 1;
79  ');
80  $next_record = $this->helper->getDatabase()->fetchObject($query_select);
81 
82  if ($next_record === null) {
84  return;
85  }
86 
87  $path = $this->getFullPath($next_record->id, $next_record->extension);
88 
89  if (is_readable(dirname(dirname($path)))
90  && (!file_exists(dirname($path))
91  || is_readable(dirname($path)) && !file_exists($path))) {
92  $this->deleteTileImageInfoFromContainerSettings($next_record->id);
93  $this->admin_interaction->inform(
94  "The tile image for the object with the id {$next_record->id} and the path {$path} "
95  . 'could not be migrated. The entry linking the image to the object '
96  . 'was removed, the path to the image has been left on the system.'
97  );
98  return;
99  }
100 
101  $rid = $this->helper->movePathToStorage(
102  $path,
103  $next_record->owner
104  );
105 
106  if ($rid === null) {
107  $this->deleteTileImageInfoFromContainerSettings($next_record->id);
108  $this->admin_interaction->inform(
109  "The tile image for the object with the id {$next_record->id} and the path {$path} "
110  . 'could not be migrated. The database entry linking the image to the object '
111  . 'was removed, the path to the image has been left on the system.'
112  );
113  return;
114  }
115  $this->flavour_builder->get($rid, $this->flavour_definition, true);
116 
117  $this->helper->getDatabase()->update(
118  'object_data',
119  ['tile_image_rid' => ['text', $rid->serialize()]],
120  ['obj_id' => ['integer', $next_record->id],]
121  );
122 
123  $this->removeDirectoryOrInform(\dirname($path), $next_record);
124  $this->deleteTileImageInfoFromContainerSettings($next_record->id);
125  }
$path
Definition: ltiservices.php:32
removeDirectoryOrInform(string $directory, \stdClass $record)
+ Here is the call graph for this function:

Field Documentation

◆ $admin_interaction

AdminInteraction ILIAS\Object\Setup\ilObjectTileImageMigration::$admin_interaction
private

Definition at line 38 of file class.ilObjectTileImageMigration.php.

◆ $flavour_builder

FlavourBuilder ILIAS\Object\Setup\ilObjectTileImageMigration::$flavour_builder
private

Definition at line 36 of file class.ilObjectTileImageMigration.php.

◆ $flavour_definition

ilObjectTileImageFlavourDefinition ILIAS\Object\Setup\ilObjectTileImageMigration::$flavour_definition
private

Definition at line 37 of file class.ilObjectTileImageMigration.php.

◆ $helper

ilResourceStorageMigrationHelper ILIAS\Object\Setup\ilObjectTileImageMigration::$helper
private

Definition at line 35 of file class.ilObjectTileImageMigration.php.


The documentation for this class was generated from the following file: