ILIAS  trunk Revision v11.0_alpha-1846-g895b5f47236
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ilResourceStorageMigrationHelper Class Reference

Class ilResourceStorageMigrationHelper. More...

+ Collaboration diagram for ilResourceStorageMigrationHelper:

Public Member Functions

 __construct (protected ResourceStakeholder $stakeholder, Environment $environment)
 ilResourceStorageMigrationHelper constructor. More...
 
 getClientDataDir ()
 
 getDatabase ()
 
 getStakeholder ()
 
 getResourceBuilder ()
 
 getFlavourBuilder ()
 
 getCollectionBuilder ()
 
 getManager ()
 
 moveResourceToNewStakeholderAndOwner (ResourceIdentification $resource_identification, ResourceStakeholder $old_stakeholder, ResourceStakeholder $new_stakeholder, ?int $new_owner_id=null)
 
 moveFilesOfPatternToCollection (string $absolute_base_path, string $pattern, int $resource_owner_id, int $collection_owner_user_id=ResourceCollection::NO_SPECIFIC_OWNER, ?Closure $file_name_callback=null, ?Closure $revision_name_callback=null)
 
 moveFirstFileOfPatternToStorage (string $absolute_base_path, string $pattern, int $resource_owner_id, ?Closure $file_name_callback=null, ?Closure $revision_name_callback=null)
 
 movePathToStorage (string $absolute_path, int $owner_user_id, ?Closure $file_name_callback=null, ?Closure $revision_name_callback=null, ?bool $copy_instead_of_move=false)
 
 moveDirectoryToContainerResource (string $absolute_path_to_directory, int $owner_user_id,)
 

Static Public Member Functions

static getPreconditions ()
 

Protected Member Functions

 buildRecursivePatternIterator (string $absolute_base_path, string $pattern='.*')
 

Protected Attributes

string $client_data_dir
 
ilDBInterface $database
 
FlavourBuilder $flavour_builder
 
ResourceBuilder $resource_builder
 
CollectionBuilder $collection_builder
 
Repositories $repositories
 
Manager $manager
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilResourceStorageMigrationHelper::__construct ( protected ResourceStakeholder  $stakeholder,
Environment  $environment 
)

ilResourceStorageMigrationHelper constructor.

Parameters
string$client_data_dir
ilDBInterface$database

PhpFieldAssignmentTypeMismatchInspection

Definition at line 60 of file class.ilResourceStorageMigrationHelper.php.

References $client_data_dir, $client_id, $container, $data_dir, Vendor\Package\$f, InitResourceStorage\D_REPOSITORIES, InitResourceStorage\D_REPOSITORY_PRELOADER, and ILIAS\Setup\Environment\getResource().

63  {
65  $db = $environment->getResource(Environment::RESOURCE_DATABASE);
66  $ilias_ini = $environment->getResource(Environment::RESOURCE_ILIAS_INI);
67  $client_id = $environment->getResource(Environment::RESOURCE_CLIENT_ID);
68  $data_dir = $ilias_ini->readVariable('clients', 'datadir');
69  $client_data_dir = "{$data_dir}/{$client_id}";
70  if (!defined("CLIENT_WEB_DIR")) {
71  define("CLIENT_WEB_DIR", dirname(__DIR__, 5) . "/public/data/" . $client_id);
72  }
73  if (!defined("ILIAS_WEB_DIR")) {
74  define("ILIAS_WEB_DIR", 'public/data');
75  }
76  if (!defined("CLIENT_ID")) {
77  define("CLIENT_ID", $client_id);
78  }
79  if (!defined("ILIAS_DATA_DIR")) {
80  define("ILIAS_DATA_DIR", $data_dir);
81  }
82  $this->client_data_dir = $client_data_dir;
83  $this->database = $db;
84 
85  if (!is_writable("{$data_dir}/{$client_id}/storage/fsv2")) {
86  throw new Exception('storage directory is not writable, abort...');
87  }
88 
89  // Build Container
90  $init = new InitResourceStorage();
91  $container = new Container();
92  $container['ilDB'] = $db;
93  $storageConfiguration = new LocalConfig($client_data_dir);
95  $container['filesystem.storage'] = $f->getLocal($storageConfiguration);
96 
97  $this->resource_builder = $init->getResourceBuilder($container);
98  $this->flavour_builder = $init->getFlavourBuilder($container);
99  $this->collection_builder = new CollectionBuilder(
100  new CollectionDBRepository($db),
101  new Subject()
102  );
103 
104  $this->repositories = $container[InitResourceStorage::D_REPOSITORIES];
105 
106  $this->manager = new Manager(
107  $this->resource_builder,
108  $this->collection_builder,
110  );
111  }
Responsible for loading the Resource Storage into the dependency injection container of ILIAS...
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:35
$container
Definition: wac.php:36
getResource(string $id)
Consumers of this method should check if the result is what they expect, e.g.
This class is used to configure the local filesystem adapter.
Definition: LocalConfig.php:29
$client_id
Definition: ltiauth.php:66
+ Here is the call graph for this function:

Member Function Documentation

◆ buildRecursivePatternIterator()

ilResourceStorageMigrationHelper::buildRecursivePatternIterator ( string  $absolute_base_path,
string  $pattern = '.*' 
)
protected

Definition at line 363 of file class.ilResourceStorageMigrationHelper.php.

Referenced by moveFilesOfPatternToCollection(), and moveFirstFileOfPatternToStorage().

366  : RecursiveRegexIterator {
367  return new RecursiveRegexIterator(
368  new RecursiveDirectoryIterator($absolute_base_path),
369  $pattern,
370  RecursiveRegexIterator::MATCH
371  );
372  }
+ Here is the caller graph for this function:

◆ getClientDataDir()

ilResourceStorageMigrationHelper::getClientDataDir ( )

Definition at line 128 of file class.ilResourceStorageMigrationHelper.php.

References $client_data_dir.

128  : string
129  {
130  return $this->client_data_dir;
131  }

◆ getCollectionBuilder()

ilResourceStorageMigrationHelper::getCollectionBuilder ( )

◆ getDatabase()

ilResourceStorageMigrationHelper::getDatabase ( )

◆ getFlavourBuilder()

ilResourceStorageMigrationHelper::getFlavourBuilder ( )

◆ getManager()

ilResourceStorageMigrationHelper::getManager ( )

◆ getPreconditions()

static ilResourceStorageMigrationHelper::getPreconditions ( )
static
Returns
[]|[]|[]

Definition at line 116 of file class.ilResourceStorageMigrationHelper.php.

Referenced by ilTestQuestionPoolFileUploadQuestionMigration\getPreconditions(), ilExportFilesToIRSSMigration\getPreconditions(), ilStyleIRSSMigration\getPreconditions(), ilMobMigration\getPreconditions(), ilHTLMMigration\getPreconditions(), ilBadgeTemplatesFilesMigration\getPreconditions(), ilBadgesFilesMigration\getPreconditions(), ilDataCollectionStorageMigration\getPreconditions(), and ILIAS\File\Icon\ilObjFileDefaultIconsObjective\getPreconditions().

116  : array
117  {
118  return [
125  ];
126  }
Class ilResourceStorageDB90.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the caller graph for this function:

◆ getResourceBuilder()

ilResourceStorageMigrationHelper::getResourceBuilder ( )

◆ getStakeholder()

ilResourceStorageMigrationHelper::getStakeholder ( )

Definition at line 138 of file class.ilResourceStorageMigrationHelper.php.

139  {
140  return $this->stakeholder;
141  }

◆ moveDirectoryToContainerResource()

ilResourceStorageMigrationHelper::moveDirectoryToContainerResource ( string  $absolute_path_to_directory,
int  $owner_user_id 
)

Definition at line 324 of file class.ilResourceStorageMigrationHelper.php.

References ILIAS\ResourceStorage\Resource\CONTAINER, and null.

328  // check if directory exists
329  if (!is_dir($absolute_path_to_directory)) {
330  return null;
331  }
332 
333  $zip = new Zip(
334  (new ZipOptions())->withDirectoryHandling(ZipDirectoryHandling::KEEP_STRUCTURE)
335  );
336  $zip->addDirectory($absolute_path_to_directory);
337  try {
338  $zip_stream = $zip->get();
339  } catch (Throwable) {
340  return null; // could not create zip
341  }
342 
343  $resource = $this->resource_builder->newFromStream(
344  $zip_stream,
345  new StreamInfoResolver(
346  $zip_stream,
347  1,
348  $owner_user_id,
349  basename($absolute_path_to_directory),
350  basename($absolute_path_to_directory)
351  ),
352  true,
354  );
355 
356  // add stakeholder and store resource
357  $resource->addStakeholder($this->stakeholder);
358  $this->resource_builder->store($resource);
359 
360  return $resource->getIdentification();
361  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null

◆ moveFilesOfPatternToCollection()

ilResourceStorageMigrationHelper::moveFilesOfPatternToCollection ( string  $absolute_base_path,
string  $pattern,
int  $resource_owner_id,
int  $collection_owner_user_id = ResourceCollection::NO_SPECIFIC_OWNER,
?Closure  $file_name_callback = null,
?Closure  $revision_name_callback = null 
)

Definition at line 214 of file class.ilResourceStorageMigrationHelper.php.

References buildRecursivePatternIterator(), getCollectionBuilder(), movePathToStorage(), and null.

222  $collection = $this->getCollectionBuilder()->new($collection_owner_user_id);
223 
224  $regex_iterator = $this->buildRecursivePatternIterator($absolute_base_path, $pattern);
225 
226  foreach ($regex_iterator as $file_info) {
227  if (!$file_info->isFile()) {
228  continue;
229  }
230  $resource_id = $this->movePathToStorage(
231  $file_info->getRealPath(),
232  $resource_owner_id,
233  $file_name_callback,
234  $revision_name_callback
235  );
236  if ($resource_id !== null) {
237  $collection->add($resource_id);
238  }
239  }
240  if ($collection->count() === 0) {
241  return null;
242  }
243 
244  if ($this->getCollectionBuilder()->store($collection)) {
245  return $collection->getIdentification();
246  }
247  return null;
248  }
buildRecursivePatternIterator(string $absolute_base_path, string $pattern='.*')
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
movePathToStorage(string $absolute_path, int $owner_user_id, ?Closure $file_name_callback=null, ?Closure $revision_name_callback=null, ?bool $copy_instead_of_move=false)
+ Here is the call graph for this function:

◆ moveFirstFileOfPatternToStorage()

ilResourceStorageMigrationHelper::moveFirstFileOfPatternToStorage ( string  $absolute_base_path,
string  $pattern,
int  $resource_owner_id,
?Closure  $file_name_callback = null,
?Closure  $revision_name_callback = null 
)

Definition at line 250 of file class.ilResourceStorageMigrationHelper.php.

References buildRecursivePatternIterator(), movePathToStorage(), and null.

257  $regex_iterator = $this->buildRecursivePatternIterator($absolute_base_path, $pattern);
258 
259  foreach ($regex_iterator as $file_info) {
260  if (!$file_info->isFile()) {
261  continue;
262  }
263  $resource_id = $this->movePathToStorage(
264  $file_info->getRealPath(),
265  $resource_owner_id,
266  $file_name_callback,
267  $revision_name_callback
268  );
269  if ($resource_id !== null) {
270  return $resource_id; // stop after first file
271  }
272  }
273 
274  return null;
275  }
buildRecursivePatternIterator(string $absolute_base_path, string $pattern='.*')
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
movePathToStorage(string $absolute_path, int $owner_user_id, ?Closure $file_name_callback=null, ?Closure $revision_name_callback=null, ?bool $copy_instead_of_move=false)
+ Here is the call graph for this function:

◆ movePathToStorage()

ilResourceStorageMigrationHelper::movePathToStorage ( string  $absolute_path,
int  $owner_user_id,
?Closure  $file_name_callback = null,
?Closure  $revision_name_callback = null,
?bool  $copy_instead_of_move = false 
)

Definition at line 277 of file class.ilResourceStorageMigrationHelper.php.

References null.

Referenced by moveFilesOfPatternToCollection(), moveFirstFileOfPatternToStorage(), and moveResourceToNewStakeholderAndOwner().

284  try {
285  // in some cases fopen throws a warning instead of returning false
286  $open_path = fopen($absolute_path, 'rb');
287  } catch (Throwable) {
288  return null;
289  }
290 
291  if ($open_path === false) {
292  return null;
293  }
294  $stream = Streams::ofResource($open_path);
295 
296  // create new resource from legacy files stream
297  $revision_title = $revision_name_callback !== null
298  ? $revision_name_callback(basename($absolute_path))
299  : basename($absolute_path);
300 
301  $file_name = $file_name_callback !== null
302  ? $file_name_callback(basename($absolute_path))
303  : null;
304 
305  $resource = $this->resource_builder->newFromStream(
306  $stream,
307  new StreamInfoResolver(
308  $stream,
309  1,
310  $owner_user_id,
311  $revision_title,
312  $file_name
313  ),
314  $copy_instead_of_move ?? false
315  );
316 
317  // add stakeholder and store resource
318  $resource->addStakeholder($this->stakeholder);
319  $this->resource_builder->store($resource);
320 
321  return $resource->getIdentification();
322  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the caller graph for this function:

◆ moveResourceToNewStakeholderAndOwner()

ilResourceStorageMigrationHelper::moveResourceToNewStakeholderAndOwner ( ResourceIdentification  $resource_identification,
ResourceStakeholder  $old_stakeholder,
ResourceStakeholder  $new_stakeholder,
?int  $new_owner_id = null 
)

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

References getCollectionBuilder(), movePathToStorage(), and null.

167  : void {
168  $resource = $this->manager->getResource($resource_identification);
169  $resource->removeStakeholder($old_stakeholder);
170  $this->repositories->getStakeholderRepository()->deregister($resource_identification, $old_stakeholder);
171  $resource->addStakeholder($new_stakeholder);
172  $this->repositories->getStakeholderRepository()->register($resource_identification, $new_stakeholder);
173 
174  if ($new_owner_id !== null) {
175  foreach ($resource->getAllRevisionsIncludingDraft() as $revision) {
176  $revision->setOwnerId($new_owner_id);
177  }
178  }
179 
180  $this->resource_builder->store($resource);
181  }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
+ Here is the call graph for this function:

Field Documentation

◆ $client_data_dir

string ilResourceStorageMigrationHelper::$client_data_dir
protected

Definition at line 47 of file class.ilResourceStorageMigrationHelper.php.

Referenced by __construct(), and getClientDataDir().

◆ $collection_builder

CollectionBuilder ilResourceStorageMigrationHelper::$collection_builder
protected

Definition at line 51 of file class.ilResourceStorageMigrationHelper.php.

Referenced by getCollectionBuilder().

◆ $database

ilDBInterface ilResourceStorageMigrationHelper::$database
protected

Definition at line 48 of file class.ilResourceStorageMigrationHelper.php.

Referenced by getDatabase().

◆ $flavour_builder

FlavourBuilder ilResourceStorageMigrationHelper::$flavour_builder
protected

Definition at line 49 of file class.ilResourceStorageMigrationHelper.php.

Referenced by getFlavourBuilder().

◆ $manager

Manager ilResourceStorageMigrationHelper::$manager
protected

Definition at line 53 of file class.ilResourceStorageMigrationHelper.php.

Referenced by getManager().

◆ $repositories

Repositories ilResourceStorageMigrationHelper::$repositories
protected

Definition at line 52 of file class.ilResourceStorageMigrationHelper.php.

◆ $resource_builder

ResourceBuilder ilResourceStorageMigrationHelper::$resource_builder
protected

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

Referenced by getResourceBuilder().


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