|
|
|
@ -13,7 +13,23 @@ use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter; |
|
|
|
|
|
|
|
|
|
require_once __DIR__.'/../../main/inc/global.inc.php'; |
|
|
|
|
|
|
|
|
|
$sql = "SELECT * FROM c_item_property WHERE tool = 'document' LIMIT 10"; |
|
|
|
|
$sql = "SELECT |
|
|
|
|
d.id, |
|
|
|
|
d.c_id, |
|
|
|
|
d.session_id, |
|
|
|
|
i.to_group_id, |
|
|
|
|
i.to_user_id, |
|
|
|
|
i.iid, |
|
|
|
|
insert_user_id, |
|
|
|
|
insert_date, |
|
|
|
|
lastedit_date, |
|
|
|
|
tool, |
|
|
|
|
visibility |
|
|
|
|
FROM c_item_property i |
|
|
|
|
INNER JOIN c_document d |
|
|
|
|
ON (d.iid = i.ref AND i.c_id = d.c_id) |
|
|
|
|
WHERE i.tool = 'document' AND filetype <> 'folder' AND d.c_id = 4 |
|
|
|
|
ORDER BY d.path LIMIT 10"; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
|
|
|
|
|
$fs = Container::$container->get('oneup_flysystem.courses_filesystem'); |
|
|
|
@ -22,6 +38,9 @@ $em = Database::getManager(); |
|
|
|
|
$resourceType = $em->getRepository('ChamiloCoreBundle:Resource\ResourceType')->findOneBy(['name' => 'document']); |
|
|
|
|
$coursePath = api_get_path(SYS_PATH).'app/courses/'; |
|
|
|
|
$mediaManager = Container::$container->get('sonata.media.manager.media'); |
|
|
|
|
$documentManager = $em->getRepository('ChamiloCourseBundle:CDocument'); |
|
|
|
|
$contextManager = Container::$container->get('sonata.classification.manager.context'); |
|
|
|
|
$defaultContext = $contextManager->findOneBy(['id' => 'default']); |
|
|
|
|
|
|
|
|
|
while ($row = Database::fetch_array($result, 'ASSOC')) { |
|
|
|
|
$itemIid = $row['iid']; |
|
|
|
@ -29,20 +48,31 @@ while ($row = Database::fetch_array($result, 'ASSOC')) { |
|
|
|
|
$sessionId = $row['session_id']; |
|
|
|
|
$groupId = $row['to_group_id']; |
|
|
|
|
$toUserId = $row['to_user_id']; |
|
|
|
|
$documentId = $row['id']; |
|
|
|
|
|
|
|
|
|
$toUser = api_get_user_entity($toUserId); |
|
|
|
|
$author = api_get_user_entity($row['insert_user_id']); |
|
|
|
|
|
|
|
|
|
if (empty($author)) { |
|
|
|
|
error_log("User does not exists in the DB ".$row['insert_user_id']); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$createdAt = api_get_utc_datetime($row['insert_date'], true, true); |
|
|
|
|
$lastUpdatedAt = api_get_utc_datetime($row['lastedit_date'], true, true); |
|
|
|
|
|
|
|
|
|
$course = api_get_course_entity($courseId); |
|
|
|
|
$session = api_get_course_entity($sessionId); |
|
|
|
|
if (empty($course)) { |
|
|
|
|
error_log("Course does not exists in the DB $courseId"); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
$session = api_get_session_entity($sessionId); |
|
|
|
|
$group = api_get_group_entity($groupId); |
|
|
|
|
|
|
|
|
|
switch ($row['tool']) { |
|
|
|
|
case 'document': |
|
|
|
|
$documentData = DocumentManager::get_document_data_by_id($row['ref'], $course->getCode(), $sessionId); |
|
|
|
|
var_dump($documentData); |
|
|
|
|
$documentData = DocumentManager::get_document_data_by_id($documentId, $course->getCode(), $sessionId); |
|
|
|
|
//var_dump($documentData); |
|
|
|
|
if (!$documentData) { |
|
|
|
|
//$documentData = DocumentManager::get_document_data_by_id($row['ref'], $course->getCode(), $sessionId); |
|
|
|
|
error_log("Skipped item property iid #$itemIid"); |
|
|
|
@ -50,103 +80,114 @@ while ($row = Database::fetch_array($result, 'ASSOC')) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$folderPath = $course->getDirectory().'/document/'.$documentData['path']; |
|
|
|
|
|
|
|
|
|
$file = $coursePath.$folderPath; |
|
|
|
|
|
|
|
|
|
switch ($documentData['filetype']) { |
|
|
|
|
case 'folder': |
|
|
|
|
//$fs->createDir($folderPath); |
|
|
|
|
/*$node = new ResourceNode(); |
|
|
|
|
$node |
|
|
|
|
->setName($documentData['title']) |
|
|
|
|
->setDescription('') |
|
|
|
|
->setCreator($author) |
|
|
|
|
->setResourceType($resourceType) |
|
|
|
|
->setCreatedAt($createdAt) |
|
|
|
|
->setUpdatedAt($lastUpdatedAt) |
|
|
|
|
; |
|
|
|
|
$em->persist($node); |
|
|
|
|
$em->flush();*/ |
|
|
|
|
break; |
|
|
|
|
case 'file': |
|
|
|
|
//$stream = fopen($file, 'r+'); |
|
|
|
|
//$fs->writeStream($folderPath, $stream); |
|
|
|
|
//fclose($stream); |
|
|
|
|
$document = $documentManager->find($documentData['iid']); |
|
|
|
|
var_dump('Parsing document iid #'.$document->getIid()); |
|
|
|
|
|
|
|
|
|
/** @var Media $media */ |
|
|
|
|
$media = $mediaManager->create(); |
|
|
|
|
//$media = new Media(); |
|
|
|
|
$media->setName($documentData['title']); |
|
|
|
|
|
|
|
|
|
$fileName = basename($documentData['path']); |
|
|
|
|
$extension = pathinfo($fileName, PATHINFO_EXTENSION); |
|
|
|
|
|
|
|
|
|
$media->setSize($documentData['size']); |
|
|
|
|
$media->setContext('default'); |
|
|
|
|
$media->setProviderName('sonata.media.provider.image'); |
|
|
|
|
var_dump($file); |
|
|
|
|
|
|
|
|
|
$provider = 'sonata.media.provider.image'; |
|
|
|
|
if (!in_array($extension, ['jpeg', 'jpg', 'gif', 'png'])) { |
|
|
|
|
$provider = 'sonata.media.provider.file'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$media->setProviderName($provider); |
|
|
|
|
$media->setEnabled(true); |
|
|
|
|
$stdFile = new Std |
|
|
|
|
$media->setBinaryContent(file_get_contents($file)); |
|
|
|
|
$media->setBinaryContent($file); |
|
|
|
|
|
|
|
|
|
$mediaManager->save($media, true); |
|
|
|
|
|
|
|
|
|
$resourceFile = new ResourceFile(); |
|
|
|
|
$resourceFile->setMedia($media); |
|
|
|
|
$resourceFile->setName($documentData['title']); |
|
|
|
|
|
|
|
|
|
$em->persist($resourceFile); |
|
|
|
|
|
|
|
|
|
$node = new ResourceNode(); |
|
|
|
|
$node |
|
|
|
|
->setName($documentData['title']) |
|
|
|
|
->setDescription($documentData['comment'] ?? '') |
|
|
|
|
->setResourceFile($resourceFile) |
|
|
|
|
->setCreator($author) |
|
|
|
|
->setResourceType($resourceType) |
|
|
|
|
->setCreatedAt($createdAt) |
|
|
|
|
->setUpdatedAt($lastUpdatedAt) |
|
|
|
|
; |
|
|
|
|
$em->persist($node); |
|
|
|
|
|
|
|
|
|
$document->setResourceNode($node); |
|
|
|
|
$em->persist($document); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
$rights = []; |
|
|
|
|
switch ($row['visibility']) { |
|
|
|
|
case '0': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_DRAFT; |
|
|
|
|
|
|
|
|
|
$readerMask = ResourceNodeVoter::getReaderMask(); |
|
|
|
|
$editorMask = ResourceNodeVoter::getEditorMask(); |
|
|
|
|
|
|
|
|
|
$resourceRight = new ResourceRight(); |
|
|
|
|
$resourceRight |
|
|
|
|
->setMask($editorMask) |
|
|
|
|
->setRole(ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER) |
|
|
|
|
; |
|
|
|
|
$rights[] = $resourceRight; |
|
|
|
|
break; |
|
|
|
|
case '1': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_PUBLISHED; |
|
|
|
|
break; |
|
|
|
|
case '2': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_DELETED; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$link = new ResourceLink(); |
|
|
|
|
$link |
|
|
|
|
->setCourse($course) |
|
|
|
|
->setSession($session) |
|
|
|
|
->setGroup($group) |
|
|
|
|
->setUser($toUser) |
|
|
|
|
->setResourceNode($node) |
|
|
|
|
->setVisibility($newVisibility) |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
if (!empty($rights)) { |
|
|
|
|
foreach ($rights as $right) { |
|
|
|
|
$link->addResourceRight($right); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
$em->persist($link); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
$file = new ResourceFile(); |
|
|
|
|
$file |
|
|
|
|
->setHash('') |
|
|
|
|
->setName($documentData['title']) |
|
|
|
|
->setOriginalFilename(basename($documentData['path'])) |
|
|
|
|
->setSize($documentData['size']) |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
$node = new ResourceNode(); |
|
|
|
|
$node |
|
|
|
|
->setName($documentData['title']) |
|
|
|
|
->setDescription($documentData['comment']) |
|
|
|
|
->setResourceFile($file) |
|
|
|
|
->setCreator($author) |
|
|
|
|
->setResourceFile($file) |
|
|
|
|
->setResourceType($resourceType) |
|
|
|
|
|
|
|
|
|
->setCreatedAt($createdAt) |
|
|
|
|
->setUpdatedAt($lastUpdatedAt) |
|
|
|
|
; |
|
|
|
|
$em->persist($node); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
$rights = []; |
|
|
|
|
switch ($row['visibility']) { |
|
|
|
|
case '0': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_DRAFT; |
|
|
|
|
|
|
|
|
|
$readerMask = ResourceNodeVoter::getReaderMask(); |
|
|
|
|
$editorMask = ResourceNodeVoter::getEditorMask(); |
|
|
|
|
|
|
|
|
|
$resourceRight = new ResourceRight(); |
|
|
|
|
$resourceRight |
|
|
|
|
->setMask($editorMask) |
|
|
|
|
->setRole(ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER) |
|
|
|
|
; |
|
|
|
|
$rights[] = $resourceRight; |
|
|
|
|
break; |
|
|
|
|
case '1': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_PUBLISHED; |
|
|
|
|
break; |
|
|
|
|
case '2': |
|
|
|
|
$newVisibility = ResourceLink::VISIBILITY_DELETED; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$link = new ResourceLink(); |
|
|
|
|
$link |
|
|
|
|
->setCourse($course) |
|
|
|
|
->setSession($session) |
|
|
|
|
->setGroup($group) |
|
|
|
|
->setUser($toUser) |
|
|
|
|
->setResourceNode($node) |
|
|
|
|
->setVisibility($newVisibility) |
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
if (!empty($rights)) { |
|
|
|
|
foreach ($rights as $right) { |
|
|
|
|
$link->addResourceRight($right); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$em->persist($link); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|