public function importDirectoriesFromCsv($file) { $data = file_get_contents($file); $data = $this->container->get('claroline.utilities.misc')->formatCsvOutput($data); $lines = str_getcsv($data, PHP_EOL); $this->om->startFlushSuite(); $i = 0; $resourceType = $this->om->getRepository('ClarolineCoreBundle:Resource\\ResourceType')->findOneByName('directory'); foreach ($lines as $line) { $values = str_getcsv($line, ';'); $code = $values[0]; $workspace = $this->om->getRepository('ClarolineCoreBundle:Workspace\\Workspace')->findOneByCode($code); $name = $values[1]; $directory = $this->om->getRepository('ClarolineCoreBundle:Resource\\ResourceNode')->findOneBy(['workspace' => $workspace, 'name' => $name, 'resourceType' => $resourceType]); if (!$directory) { $directory = new Directory(); $directory->setName($name); $this->log("Create directory {$name} for workspace {$code}"); $this->create($directory, $resourceType, $workspace->getCreator(), $workspace, $this->getWorkspaceRoot($workspace)); ++$i; } else { $this->log("Directory {$name} already exists for workspace {$code}"); } if ($i % 100 === 0) { $this->om->forceFlush(); $this->om->clear(); $resourceType = $this->om->getRepository('ClarolineCoreBundle:Resource\\ResourceType')->findOneByName('directory'); $this->om->merge($resourceType); } } $this->om->endFlushSuite(); }
public function checkIntegrity() { $this->log('Checking roles integrity for resources... This may take a while.'); $workspaceManager = $this->container->get('claroline.manager.workspace_manager'); $workspaces = $this->om->getRepository('Claroline\\CoreBundle\\Entity\\Workspace\\Workspace')->findAll(); $this->om->startFlushSuite(); $i = 0; foreach ($workspaces as $workspace) { $this->log('Checking ' . $workspace->getCode() . '...'); $roles = $workspace->getRoles(); $root = $this->container->get('claroline.manager.resource_manager')->getWorkspaceRoot($workspace); $collaboratorRole = $this->roleManager->getCollaboratorRole($workspace); if ($root && $collaboratorRole) { $collaboratorFound = false; foreach ($root->getRights() as $right) { if ($right->getRole()->getName() == $this->roleManager->getCollaboratorRole($workspace)->getName()) { $collaboratorFound = true; } } if (!$collaboratorFound) { $this->log('Adding missing right on root for ' . $workspace->getCode() . '.', LogLevel::DEBUG); $collaboratorRole = $this->roleManager->getCollaboratorRole($workspace); $this->editPerms(5, $collaboratorRole, $root, true, array(), true); $i++; if ($i % 3 === 0) { $this->log('flushing...'); $this->om->forceFlush(); $this->om->clear(); } } } } $this->om->endFlushSuite(); }
/** * Import a workspace list from a csv data. * * @param array $workspaces */ public function importWorkspaces(array $workspaces, $logger = null) { //$this->om->clear(); $ds = DIRECTORY_SEPARATOR; $i = 0; $j = 0; $workspaceModelManager = $this->container->get('claroline.manager.workspace_model_manager'); foreach ($workspaces as $workspace) { $this->om->startFlushSuite(); $model = null; $name = $workspace[0]; $code = $workspace[1]; $isVisible = $workspace[2]; $selfRegistration = $workspace[3]; $registrationValidation = $workspace[4]; $selfUnregistration = $workspace[5]; $errors = array(); if (isset($workspace[6]) && trim($workspace[6]) !== '') { $user = $this->om->getRepository('ClarolineCoreBundle:User')->findOneByUsername($workspace[6]); } else { $user = $this->container->get('security.context')->getToken()->getUser(); } if (isset($workspace[7])) { $model = $this->om->getRepository('ClarolineCoreBundle:Model\\WorkspaceModel')->findOneByName($workspace[7]); } if ($model) { $guid = $this->ut->generateGuid(); $workspace = new Workspace(); $this->createWorkspace($workspace); $workspace->setName($name); $workspace->setCode($code); $workspace->setDisplayable($isVisible); $workspace->setSelfRegistration($selfRegistration); $workspace->setSelfUnregistration($selfUnregistration); $workspace->setRegistrationValidation($registrationValidation); $workspace->setGuid($guid); $date = new \Datetime(date('d-m-Y H:i')); $workspace->setCreationDate($date->getTimestamp()); $workspace->setCreator($user); $workspaceModelManager->addDataFromModel($model, $workspace, $user, $errors); } else { //this should be changed later $configuration = new Configuration($this->templateDir . $ds . 'default.zip'); $configuration->setWorkspaceName($name); $configuration->setWorkspaceCode($code); $configuration->setDisplayable($isVisible); $configuration->setSelfRegistration($selfRegistration); $configuration->setSelfUnregistration($registrationValidation); $this->container->get('claroline.manager.transfert_manager')->createWorkspace($configuration, $user); } $i++; $j++; if ($i % self::MAX_WORKSPACE_BATCH_SIZE === 0) { $this->om->forceFlush(); $this->om->clear(); } $this->om->endFlushSuite(); } }
private function updateOrder() { /** @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager = $this->container->get('doctrine.orm.entity_manager'); /** @var \Claroline\CoreBundle\Repository\ResourceNodeRepository $resourceNodeRepository */ $resourceNodeRepository = $entityManager->getRepository('ClarolineCoreBundle:Resource\\ResourceNode'); /** @var \Claroline\CoreBundle\Manager\ResourceManager $resourceManager */ $resourceManager = $this->container->get('claroline.manager.resource_manager'); /** @var \Claroline\CoreBundle\Entity\Resource\ResourceType $dirType */ $dirType = $entityManager->getRepository('ClarolineCoreBundle:Resource\\ResourceType')->findByName('directory'); $baseResourceNodeQuery = $resourceNodeRepository->createQueryBuilder('resourceNode')->where('resourceNode.resourceType = :resourceNodeType')->setParameter('resourceNodeType', $dirType); $countResourceNodeQuery = clone $baseResourceNodeQuery; $totalNodes = $countResourceNodeQuery->select('COUNT(resourceNode.id)')->getQuery()->getSingleScalarResult(); $nbNodes = 0; $currentBatchNodes = 0; $refreshOutputInterval = (int) round($totalNodes / 50); if (0 === $refreshOutputInterval) { $refreshOutputInterval = 1; } $this->log(sprintf('Updating %d resource order - %s', $totalNodes, date('Y/m/d H:i:s'))); $this->log('It may take a while to process, go grab a coffee.'); $nodesQuery = $baseResourceNodeQuery->getQuery(); $iterableResult = $nodesQuery->iterate(); foreach ($iterableResult as $row) { $node = $row[0]; $resourceManager->reorder($node, true); $nbNodes++; $currentBatchNodes++; if ($refreshOutputInterval === $currentBatchNodes) { $this->log(' ' . $nbNodes . ' resource ordered - ' . date('Y/m/d H:i:s') . ' - ' . $this->convert(memory_get_usage(true))); $currentBatchNodes = 0; $this->objectManager->clear(); } } if (0 < $currentBatchNodes) { $this->log(' ' . $nbNodes . ' resource ordered - ' . date('Y/m/d H:i:s') . ' - ' . $this->convert(memory_get_usage(true))); } $this->log('Resource order updated.'); }
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(); }