Skip to content

Commit 743c64e

Browse files
committed
Remove block copy mapping
1 parent f7f42f1 commit 743c64e

File tree

7 files changed

+93
-205
lines changed

7 files changed

+93
-205
lines changed

cronjobs/opencast_courseware_block_copy_mapping.php

Lines changed: 0 additions & 72 deletions
This file was deleted.

lib/BlockTypes/OpencastBlockV3.php

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
use Courseware\BlockTypes\BlockType;
44
use Opis\JsonSchema\Schema;
5-
use Opencast\Models\VideoCoursewareBlocks;
6-
use Opencast\Models\CoursewareBlockMappings;
75
use Opencast\Models\Videos;
86
/**
97
* This class represents the content of a Courseware test block.
@@ -57,28 +55,8 @@ public static function getFileTypes(): array
5755
return [];
5856
}
5957

60-
public function copyPayload(string $rangeId = ''): array
61-
{
62-
$payload = $this->getPayload();
63-
64-
$token = md5($this->block['id'] . time());
65-
$payload['copied_token'] = $token;
66-
67-
if (!empty($payload['token']) && Course::exists($rangeId)) {
68-
$video = Videos::findByToken($payload['token']);
69-
CoursewareBlockMappings::setRecord($token, $video->id, $rangeId);
70-
}
71-
72-
return $payload;
73-
}
74-
7558
public function setPayload($payload): void
7659
{
77-
if (!empty($payload['token'])) {
78-
$rangeId = $this->block->container->structural_element->range_id;
79-
VideoCoursewareBlocks::setRecord($rangeId, $payload['token'], $this->block['id']);
80-
}
81-
8260
parent::setPayload($payload);
8361
}
8462
}

lib/Models/CoursewareBlockMappings.php

Lines changed: 0 additions & 38 deletions
This file was deleted.

lib/Models/VideoCoursewareBlocks.php

Lines changed: 0 additions & 47 deletions
This file was deleted.

lib/Routes/Opencast/UserRoles.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,13 @@ public function __invoke(Request $request, Response $response, $args)
123123
}
124124

125125
// get all videos in courseware blocks in courses and add them to the permission list as well
126-
$stmt_courseware = \DBManager::get()->prepare("SELECT episode FROM oc_video_cw_blocks
127-
LEFT JOIN oc_video USING (token)
128-
LEFT JOIN seminar_user USING (seminar_id)
129-
WHERE seminar_user.user_id = :user_id");#
126+
$stmt_courseware = \DBManager::get()->prepare("SELECT episode FROM cw_blocks
127+
JOIN cw_containers ON (cw_containers.id = cw_blocks.container_id)
128+
JOIN cw_structural_elements ON (cw_structural_elements.id = cw_containers.structural_element_id AND range_type = 'course')
129+
JOIN seminar_user ON (seminar_id = cw_structural_elements.range_id)
130+
JOIN oc_video ON (oc_video.token = CONVERT(JSON_VALUE(cw_blocks.payload, '$.token') USING latin1))
131+
WHERE cw_blocks.block_type = 'plugin-opencast-video' AND seminar_user.user_id = :user_id
132+
");
130133

131134
$stmt_courseware->execute([':user_id' => $user_id]);
132135

lib/Versions/5.x/OpencastBlockV3.php

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
use Courseware\BlockTypes\BlockType;
44
use Opis\JsonSchema\Schema;
5-
use Opencast\Models\VideoCoursewareBlocks;
6-
use Opencast\Models\CoursewareBlockMappings;
75
use Opencast\Models\Videos;
86

97
/**
@@ -58,28 +56,8 @@ public static function getFileTypes(): array
5856
return [];
5957
}
6058

61-
public function copyPayload(string $rangeId = ''): array
62-
{
63-
$payload = $this->getPayload();
64-
65-
$token = md5($this->block['id'] . time());
66-
$payload['copied_token'] = $token;
67-
68-
if (!empty($payload['token']) && Course::exists($rangeId)) {
69-
$video = Videos::findByToken($payload['token']);
70-
CoursewareBlockMappings::setRecord($token, $video->id, $rangeId);
71-
}
72-
73-
return $payload;
74-
}
75-
7659
public function setPayload($payload): void
7760
{
78-
if (!empty($payload['token'])) {
79-
$rangeId = $this->block->container->structural_element->range_id;
80-
VideoCoursewareBlocks::setRecord($rangeId, $payload['token'], $this->block['id']);
81-
}
82-
8361
parent::setPayload($payload);
8462
}
8563
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
class RemoveCwBlockCopyMapping extends Migration
4+
{
5+
const CRONJOB_FILE = 'public/plugins_packages/elan-ev/OpencastV3/cronjobs/opencast_courseware_block_copy_mapping.php';
6+
7+
public function description()
8+
{
9+
return 'Remove courseware block copy mapping tables and cronjob.';
10+
}
11+
12+
public function up()
13+
{
14+
$scheduler = CronjobScheduler::getInstance();
15+
16+
// remove worker cronjob
17+
if ($task_id = CronjobTask::findByFilename(self::CRONJOB_FILE)[0]->task_id) {
18+
$scheduler->unregisterTask($task_id);
19+
}
20+
21+
$db = DBManager::get();
22+
23+
$db->exec('DROP TABLE IF EXISTS `oc_cw_block_copy_mapping`');
24+
$db->exec('DROP TABLE IF EXISTS `oc_video_cw_blocks`');
25+
}
26+
27+
public function down()
28+
{
29+
$db = DBManager::get();
30+
31+
$db->exec("CREATE TABLE IF NOT EXISTS `oc_cw_block_copy_mapping` (
32+
`id` int NOT NULL AUTO_INCREMENT,
33+
`token` varchar(32),
34+
`video_id` int,
35+
`new_seminar_id` varchar(32) CHARACTER SET latin1 COLLATE latin1_bin,
36+
PRIMARY KEY (`id`),
37+
FOREIGN KEY (`new_seminar_id`) REFERENCES `seminare` (`Seminar_id`) ON DELETE CASCADE
38+
);");
39+
40+
$db->exec("CREATE TABLE IF NOT EXISTS `oc_video_cw_blocks` (
41+
`token` varchar(12) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
42+
`block_id` int NOT NULL,
43+
`seminar_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
44+
PRIMARY KEY `token_block_id` (`token`, `block_id`),
45+
FOREIGN KEY `token` (`token`) REFERENCES `oc_video` (`token`) ON DELETE CASCADE ON UPDATE RESTRICT,
46+
FOREIGN KEY (`seminar_id`) REFERENCES `seminare` (`Seminar_id`) ON DELETE CASCADE
47+
);");
48+
49+
50+
// Fill table oc_video_cw_blocks
51+
52+
// Database statements
53+
$insert_block_stmt = $db->prepare('INSERT IGNORE INTO `oc_video_cw_blocks` (token, block_id, seminar_id)
54+
VALUES (:token, :block_id, :seminar_id)');
55+
56+
$blocks = $db->query("SELECT cw_blocks.id, cw_blocks.payload, range_id FROM cw_blocks
57+
INNER JOIN cw_containers ON (cw_blocks.container_id = cw_containers.id)
58+
INNER JOIN cw_structural_elements ON (cw_containers.structural_element_id = cw_structural_elements.id)
59+
WHERE block_type = 'plugin-opencast-video' AND range_type = 'course'");
60+
61+
// Iterate over all opencast blocks
62+
while ($block = $blocks->fetch(PDO::FETCH_ASSOC)) {
63+
$payload = json_decode($block['payload'], true);
64+
65+
if (isset($payload['token'])) {
66+
// Insert row to oc_video_cw_blocks and ignore if exists
67+
$insert_block_stmt->execute([
68+
':token' => $payload['token'],
69+
':block_id' => $block['id'],
70+
':seminar_id' => $block['range_id'],
71+
]);
72+
}
73+
}
74+
75+
// Re-add cronjob
76+
if (file_exists($GLOBALS['STUDIP_BASE_PATH'] . '/' . self::CRONJOB_FILE)) {
77+
$scheduler = CronjobScheduler::getInstance();
78+
$task_id = $scheduler->registerTask(self::CRONJOB_FILE, true);
79+
80+
81+
if ($task_id) {
82+
$scheduler->schedulePeriodic($task_id, -1);
83+
}
84+
}
85+
}
86+
}

0 commit comments

Comments
 (0)