diff --git a/public/main/install/install.lib.php b/public/main/install/install.lib.php index e02f126326..82e1c6d556 100644 --- a/public/main/install/install.lib.php +++ b/public/main/install/install.lib.php @@ -2142,7 +2142,6 @@ function migrate(EntityManager $manager) $planCalculator = $dependency->getMigrationPlanCalculator(); $migrations = $planCalculator->getMigrations(); $lastVersion = $migrations->getLast(); - //var_dump($lastVersion->getVersion()); $plan = $dependency->getMigrationPlanCalculator()->getPlanUntilVersion($lastVersion->getVersion()); diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20170625122900.php b/src/CoreBundle/Migrations/Schema/V200/Version20170625122900.php index a555f5c2f9..2ac8dc64f1 100644 --- a/src/CoreBundle/Migrations/Schema/V200/Version20170625122900.php +++ b/src/CoreBundle/Migrations/Schema/V200/Version20170625122900.php @@ -43,6 +43,11 @@ class Version20170625122900 extends AbstractMigrationChamilo //$this->addSql('ALTER TABLE c_document DROP id, DROP c_id, DROP path, DROP size, DROP session_id'); } + $this->addSql('ALTER TABLE c_document CHANGE c_id c_id INT DEFAULT NULL'); + $this->addSql('ALTER TABLE c_document CHANGE path path VARCHAR(255) DEFAULT NULL'); + $this->addSql('ALTER TABLE c_document CHANGE size size INT DEFAULT NULL'); + $this->addSql('ALTER TABLE c_document CHANGE session_id session_id INT DEFAULT NULL'); + if (false === $table->hasIndex('idx_cdoc_type')) { $this->addSql('CREATE INDEX idx_cdoc_type ON c_document (filetype)'); } diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20201216122012.php b/src/CoreBundle/Migrations/Schema/V200/Version20201216122012.php index db5528f030..e020d202c3 100644 --- a/src/CoreBundle/Migrations/Schema/V200/Version20201216122012.php +++ b/src/CoreBundle/Migrations/Schema/V200/Version20201216122012.php @@ -16,6 +16,7 @@ use Chamilo\CourseBundle\Entity\CLpCategory; use Chamilo\CourseBundle\Entity\CLpItem; use Chamilo\CourseBundle\Repository\CGroupRepository; use Chamilo\CourseBundle\Repository\CLpCategoryRepository; +use Chamilo\CourseBundle\Repository\CLpItemRepository; use Chamilo\CourseBundle\Repository\CLpRepository; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Schema\Schema; @@ -42,9 +43,9 @@ final class Version20201216122012 extends AbstractMigrationChamilo $sessionRepo = $container->get(SessionRepository::class); $groupRepo = $container->get(CGroupRepository::class); $userRepo = $container->get(UserRepository::class); + $lpItemRepo = $container->get(CLpItemRepository::class); - $lpItemRepo = $container->get(CLpItem::class); - + $batchSize = self::BATCH_SIZE; $admin = $this->getAdmin(); $q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c'); @@ -86,13 +87,20 @@ final class Version20201216122012 extends AbstractMigrationChamilo $em->flush(); $em->clear(); + // AND iid = 242 with error // c_lp. $sql = "SELECT * FROM c_lp WHERE c_id = {$courseId} ORDER BY iid"; $result = $connection->executeQuery($sql); $lps = $result->fetchAllAssociative(); + $counter = 1; + + $course = $courseRepo->find($courseId); + $admin = $this->getAdmin(); + foreach ($lps as $lp) { - $lpId = $lp['iid']; + $lpId = (int) $lp['iid']; + error_log("LP #$lpId"); /** @var CLp $resource */ $resource = $lpRepo->find($lpId); @@ -100,8 +108,6 @@ final class Version20201216122012 extends AbstractMigrationChamilo continue; } - $course = $courseRepo->find($courseId); - $result = $this->fixItemProperty( 'learnpath', $lpRepo, @@ -116,11 +122,11 @@ final class Version20201216122012 extends AbstractMigrationChamilo } $em->persist($resource); - $em->flush(); + //$em->flush(); - $itemRoot = $lpItemRepo->getItemRoot($lpId); + $rootItem = $lpItemRepo->getRootItem($lpId); - if (!empty($itemRoot)) { + if (null === $rootItem) { continue; } @@ -131,23 +137,29 @@ final class Version20201216122012 extends AbstractMigrationChamilo ->setLp($resource) ->setItemType('root'); $em->persist($lpItem); - $em->flush(); // Migrate c_lp_item - $sql = "SELECT * FROM c_lp_item WHERE lp_id = $lpId + $sql = "SELECT * FROM c_lp_item WHERE lp_id = $lpId AND path <> 'root' ORDER BY display_order"; - $resultItems = $connection->executeQuery($sql); $lpItems = $resultItems->fetchAllAssociative(); $orderList = []; foreach ($lpItems as $item) { + var_dump($item); $object = new \stdClass(); $object->id = $item['iid']; - $object->parent_id = $item['parentId']; + $object->parent_id = (int) $item['parent_item_id']; $orderList[] = $object; } - \learnpath::sortItemByOrderList($lpId, $orderList); + \learnpath::sortItemByOrderList($lpItem, $orderList, false); + + if (0 === $counter % $batchSize) { + $em->flush(); + $em->clear(); // Detaches all objects from Doctrine! + } + $counter++; + $em->flush(); } } } diff --git a/src/CourseBundle/Repository/CLpItemRepository.php b/src/CourseBundle/Repository/CLpItemRepository.php index 37a165ff06..2253ceec29 100644 --- a/src/CourseBundle/Repository/CLpItemRepository.php +++ b/src/CourseBundle/Repository/CLpItemRepository.php @@ -24,7 +24,7 @@ final class CLpItemRepository extends ServiceEntityRepository $this->initializeTreeRepository($this->getEntityManager(), $this->getClassMetadata()); } - public function getItemRoot($lpId): ?CLpItem + public function getRootItem($lpId): ?CLpItem { return $this->findOneBy([ 'path' => 'root',