Internal: Fix HTML lesson item migration to update internal links - refs BT#21821

pull/5624/head
christianbeeznst 1 year ago
parent f151704a5e
commit e0358f42cf
  1. 6
      public/main/lp/LearnPathItemForm.php
  2. 37
      src/CoreBundle/Migrations/Schema/V200/Version20230913162700.php

@ -122,17 +122,13 @@ class LearnPathItemForm
'ToolbarSet' => 'LearningPathDocuments', 'ToolbarSet' => 'LearningPathDocuments',
'Width' => '100%', 'Width' => '100%',
'Height' => '500', 'Height' => '500',
'FullPage' => true,
// 'CreateDocumentDir' => $relative_prefix,
//'CreateDocumentWebDir' => api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/',
//'BaseHref' => api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/'.$relative_path,
]; ];
if (($document && $document->getResourceNode()->hasEditableTextContent()) || 'add' === $action) { if (($document && $document->getResourceNode()->hasEditableTextContent()) || 'add' === $action) {
$renderer = $form->defaultRenderer(); $renderer = $form->defaultRenderer();
$renderer->setElementTemplate(' {label}{element}', 'content_lp'); $renderer->setElementTemplate(' {label}{element}', 'content_lp');
$form->addHtml('<div class="editor-lp">'); $form->addHtml('<div class="editor-lp">');
$form->addHtmlEditor('content_lp', null, null, true, $editorConfig); $form->addHtmlEditor('content_lp', null, null, false, $editorConfig);
$form->addHtml('</div>'); $form->addHtml('</div>');
if ($document) { if ($document) {
$form->addHidden('document_id', $document->getIid()); $form->addHidden('document_id', $document->getIid());

@ -11,6 +11,7 @@ use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
use Chamilo\CoreBundle\Repository\Node\CourseRepository; use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CourseBundle\Entity\CDocument; use Chamilo\CourseBundle\Entity\CDocument;
use Chamilo\CourseBundle\Repository\CDocumentRepository; use Chamilo\CourseBundle\Repository\CDocumentRepository;
use Chamilo\CoreBundle\Repository\ResourceNodeRepository;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Exception; use Exception;
use RecursiveDirectoryIterator; use RecursiveDirectoryIterator;
@ -28,6 +29,7 @@ final class Version20230913162700 extends AbstractMigrationChamilo
public function up(Schema $schema): void public function up(Schema $schema): void
{ {
$documentRepo = $this->container->get(CDocumentRepository::class); $documentRepo = $this->container->get(CDocumentRepository::class);
$resourceNodeRepo = $this->container->get(ResourceNodeRepository::class);
$q = $this->entityManager->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c'); $q = $this->entityManager->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
$updateConfigurations = [ $updateConfigurations = [
@ -60,6 +62,8 @@ final class Version20230913162700 extends AbstractMigrationChamilo
foreach ($updateConfigurations as $config) { foreach ($updateConfigurations as $config) {
$this->updateContent($config, $courseDirectory, $courseId, $documentRepo); $this->updateContent($config, $courseDirectory, $courseId, $documentRepo);
} }
$this->updateHtmlContent($courseDirectory, $courseId, $documentRepo, $resourceNodeRepo);
} }
} }
@ -92,6 +96,39 @@ final class Version20230913162700 extends AbstractMigrationChamilo
} }
} }
private function updateHtmlContent($courseDirectory, $courseId, $documentRepo, $resourceNodeRepo): void
{
$sql = "SELECT iid, resource_node_id FROM c_document WHERE filetype = 'file'";
$result = $this->connection->executeQuery($sql);
$items = $result->fetchAllAssociative();
foreach ($items as $item) {
$document = $documentRepo->find($item['iid']);
if ($document) {
$resourceNode = $document->getResourceNode();
if ($resourceNode && $resourceNode->hasResourceFile()) {
$resourceFile = $resourceNode->getResourceFile();
$filePath = $resourceFile->getTitle();
if ($resourceFile && $resourceFile->getMimeType() === 'text/html') {
error_log("Verifying HTML file: " . $filePath);
try {
$content = $resourceNodeRepo->getResourceNodeFileContent($resourceNode);
$updatedContent = $this->replaceOldURLsWithNew($content, $courseDirectory, $courseId, $documentRepo);
if ($content !== $updatedContent) {
$documentRepo->updateResourceFileContent($document, $updatedContent);
$documentRepo->update($document);
}
} catch (\Exception $e) {
error_log("Error processing file $filePath: " . $e->getMessage());
}
}
}
}
}
}
private function replaceOldURLsWithNew($itemDataText, $courseDirectory, $courseId, $documentRepo): array|string|null private function replaceOldURLsWithNew($itemDataText, $courseDirectory, $courseId, $documentRepo): array|string|null
{ {
$contentText = $itemDataText; $contentText = $itemDataText;

Loading…
Cancel
Save