public function createOrderedToolByToolForAllUsers(LoggerInterface $logger, Tool $tool, $type = 0, $isVisible = true) { $toolName = $tool->getName(); $usersQuery = $this->userRepo->findAllEnabledUsers(false); $users = $usersQuery->iterate(); $this->om->startFlushSuite(); $index = 0; $countUser = $this->userRepo->countAllEnabledUsers(); $logger->info(sprintf("%d users to check tools on.", $countUser)); foreach ($users as $row) { $user = $row[0]; /** @var \Claroline\CoreBundle\Entity\Tool\OrderedTool[] $orderedTools */ $orderedTools = $this->orderedToolRepo->findOrderedToolsByToolAndUser($tool, $user, $type); if (count($orderedTools) === 0) { $orderedTool = new OrderedTool(); $orderedTool->setName($toolName); $orderedTool->setTool($tool); $orderedTool->setUser($user); $orderedTool->setVisibleInDesktop($isVisible); $orderedTool->setOrder(1); $orderedTool->setType($type); $this->om->persist($orderedTool); $index++; if ($index % 100 === 0) { $this->om->forceFlush(); $this->om->clear($orderedTool); $logger->info(sprintf(" %d users checked.", 100)); } } else { $orderedTool = $orderedTools[0]; if ($orderedTool->isVisibleInDesktop() !== $isVisible) { $orderedTool->setVisibleInDesktop($isVisible); $this->om->persist($orderedTool); $index++; if ($index % 100 === 0) { $this->om->forceFlush(); $this->om->clear($orderedTool); $logger->info(sprintf(" %d users checked.", 100)); } } } } if ($index % 100 !== 0) { $logger->info(sprintf(" %d users checked.", 100 - $index)); } $this->om->endFlushSuite(); }