ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilMobMigration.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24
25class ilMobMigration implements Migration
26{
28
29 public function getLabel(): string
30 {
31 return 'Migration of Media Objects to the Resource Storage Service.';
32 }
33
35 {
36 return 10000;
37 }
38
39 public function getPreconditions(Environment $environment): array
40 {
42 }
43
44 public function prepare(Environment $environment): void
45 {
46 $this->helper = new ilResourceStorageMigrationHelper(
47 new ilMobStakeholder(),
48 $environment
49 );
50 }
51
52 public function step(Environment $environment): void
53 {
54 $r = $this->helper->getDatabase()->query(
55 "SELECT * FROM object_data od LEFT JOIN mob_data md ON (od.obj_id = md.id) WHERE od.type='mob' AND (rid='' OR rid IS NULL) LIMIT 1;"
56 );
57
58 $d = $this->helper->getDatabase()->fetchObject($r);
59 $object_id = (int) ($d->obj_id ?? null);
60
61 $resource_owner_id = (int) ($d->owner_id ?? 6); // TODO JOIN
62
63 $mob_path = $this->buildBasePath($object_id);
64
65 $rid = $this->helper->moveDirectoryToContainerResource(
66 $mob_path,
67 $resource_owner_id
68 );
69
70 if ($rid !== null) {
71 $this->helper->getDatabase()->replace(
72 "mob_data",
73 [
74 "id" => ["integer", $object_id]
75 ],
76 [
77 "rid" => ["text", $rid->serialize()]
78 ]
79 );
80
81 $this->recursiveRmDir($mob_path);
82 } else {
83 $this->helper->getDatabase()->replace(
84 "mob_data",
85 [
86 "id" => ["integer", $object_id]
87 ],
88 [
89 "rid" => ["text", "-"]
90 ]
91 );
92 }
93 }
94
95 private function recursiveRmDir(string $path): void
96 {
97 // recursively remove directory
98 $files = array_diff(scandir($path), ['.', '..']);
99 foreach ($files as $file) {
100 (is_dir("$path/$file")) ? $this->recursiveRmDir("$path/$file") : unlink("$path/$file");
101 }
102 }
103
105 {
106 $r = $this->helper->getDatabase()->query(
107 "SELECT COUNT(od.obj_id) amount FROM object_data od LEFT JOIN mob_data md ON (od.obj_id = md.id) WHERE od.type='mob' AND (rid='' OR rid IS NULL)"
108 );
109 $d = $this->helper->getDatabase()->fetchObject($r) ?? new stdClass();
110 return (int) ($d->amount ?? 0);
111 }
112
113 protected function buildBasePath(int $object_id): string
114 {
115 return CLIENT_WEB_DIR . '/mobs/mm_' . $object_id;
116 }
117
118 public function getFileNameCallback(string $pattern): Closure
119 {
120 return static function (string $file_name) use ($pattern): string {
121 if (preg_match($pattern, $file_name, $matches)) {
122 return $matches[1] ?? $file_name;
123 }
124 return $file_name;
125 };
126 }
127
128 public function getRevisionNameCallback(): Closure
129 {
130 return static function (string $file_name): string {
131 return md5($file_name);
132 };
133 }
134}
getDefaultAmountOfStepsPerRun()
Tell the default amount of steps to be executed for one run of the migration.
buildBasePath(int $object_id)
step(Environment $environment)
Run one step of the migration.
getPreconditions(Environment $environment)
Objectives the migration depend on.
getRemainingAmountOfSteps()
Count up how many "things" need to be migrated.
recursiveRmDir(string $path)
ilResourceStorageMigrationHelper $helper
getFileNameCallback(string $pattern)
prepare(Environment $environment)
Prepare the migration by means of some environment.
const CLIENT_WEB_DIR
Definition: constants.php:47
An environment holds resources to be used in the setup process.
Definition: Environment.php:28
A migration is a potentially long lasting operation that can be broken into discrete steps.
Definition: Migration.php:29
$path
Definition: ltiservices.php:30