Jarves\Command\ContentImportCommand::import PHP Method

import() protected method

protected import ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    protected function import(InputInterface $input, OutputInterface $output)
    {
        $basePath = 'app/jarves/';
        $openedFiles = [];
        $domains = [];
        $nodes = [];
        $rootNodes = [];
        $ymlParser = new Parser();
        Propel::getWriteConnection('default')->beginTransaction();
        //import files
        $fileReferencesPath = $basePath . '/file_references.yml';
        if (file_exists($fileReferencesPath)) {
            $openedFiles[$fileReferencesPath] = filemtime($fileReferencesPath);
            $fileReferences = $ymlParser->parse(file_get_contents($fileReferencesPath));
            $output->writeln(sprintf('Import %d file references ...', count($fileReferences)));
            FileQuery::create()->deleteAll();
            foreach ($fileReferences as $id => $path) {
                $file = new File();
                $file->setId($id);
                $file->setPath($path);
                $file->save();
            }
        }
        $relativePathBase = $basePath . 'website/';
        $dir = opendir($relativePathBase);
        while ($domainName = readdir($dir)) {
            if ('.' === $domainName || '..' === $domainName || '.yml' === substr($domainName, -4)) {
                continue;
            }
            $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($basePath . 'website/' . $domainName));
            $files = iterator_to_array($files);
            ksort($files);
            $output->writeln(sprintf('Import domain %s ...', $domainName));
            $domain = DomainQuery::create()->findOneByDomain($domainName);
            if (!$domain) {
                $domain = new Domain();
            }
            $ymlPath = $relativePathBase . $domainName . '.yml';
            $domainFromYml = $ymlParser->parse(file_get_contents($ymlPath));
            $openedFiles[$ymlPath] = filemtime($ymlPath);
            $oldData = $domain->toArray(TableMap::TYPE_CAMELNAME);
            $domain->fromArray(array_merge($oldData, $domainFromYml), TableMap::TYPE_CAMELNAME);
            $domain->setStartnodeId(null);
            if (isset($domainFromYml['startnode'])) {
                $domain->setVirtualColumn('startnodePath', $domainFromYml['startnode']);
            }
            $domain->save();
            $domains[$domainName] = $domain;
            NodeQuery::create()->filterByDomain($domain)->delete();
            $rootNode = new Node();
            $rootNode->setTitle('root');
            $rootNode->makeRoot();
            $rootNode->setDomain($domain);
            $rootNode->save();
            $rootNodes[$domainName] = $rootNode;
            $nodes[''] = $rootNode;
            $parentNodeQueue = [];
            /** @var \SplFileInfo $file */
            foreach ($files as $file) {
                if ('.' === $file->getFilename() || '..' === $file->getFilename() || '.yml' !== substr($file->getFilename(), -4)) {
                    continue;
                }
                $path = $file->getPath() . '/' . $file->getFilename();
                $path = substr($path, strlen($relativePathBase . $domainName) + 1);
                if (!$path) {
                    continue;
                }
                $parentPath = '';
                if (false !== strpos($path, '/')) {
                    $parentPath = dirname($path);
                }
                $baseName = substr(basename($path), 0, -4);
                //without .yml
                if ($baseName) {
                    //its a node
                    $node = isset($nodes[$path]) ? $nodes[$path] : new Node();
                    $ymlPath = $relativePathBase . $domainName . '/' . $path;
                    $nodeFromYml = $ymlParser->parse(file_get_contents($ymlPath));
                    $openedFiles[$ymlPath] = filemtime($ymlPath);
                    $node->fromArray($nodeFromYml, TableMap::TYPE_CAMELNAME);
                    $node->setDomain($domain);
                    $urn = $baseName;
                    if (false !== ($dotPos = strpos($baseName, '.'))) {
                        $prefix = substr($baseName, 0, $dotPos);
                        if ($prefix) {
                            $urn = substr($baseName, $dotPos + 1);
                        }
                    }
                    $node->setUrn($urn);
                    $output->writeln(sprintf('Import page %s%s ...', str_repeat('  ', substr_count($path, '/')), $node->getTitle()));
                    $nodes[substr($path, 0, -4)] = $node;
                    $end = isset($parentNodeQueue[$parentPath]) ? count($parentNodeQueue[$parentPath]) : 1;
                    $position = isset($nodeFromYml['sort']) ? $nodeFromYml['sort'] : $end;
                    $parentNodeQueue[$parentPath][$position][] = $node;
                    if (isset($nodeFromYml['contents'])) {
                        foreach ($nodeFromYml['contents'] as $idx => $contentFromYaml) {
                            if (isset($contentFromYaml['content']) && is_array($contentFromYaml['content'])) {
                                $contentFromYaml['content'] = json_encode($contentFromYaml['content']);
                            }
                            $content = new Content();
                            $content->setSort($idx);
                            $content->fromArray($contentFromYaml, TableMap::TYPE_CAMELNAME);
                            $content->setNode($node);
                        }
                        if ($domain->hasVirtualColumn('startnodePath') && substr($path, 0, -4) === $domain->getVirtualColumn('startnodePath')) {
                            $domain->setStartnode($node);
                        }
                    }
                }
            }
            //save queued nodes
            foreach ($parentNodeQueue as $parentPath => $nodesQueue) {
                ksort($nodesQueue);
                //key is sort
                /** @var Node $node */
                foreach ($nodesQueue as $position => $nodesToInsert) {
                    foreach ($nodesToInsert as $node) {
                        $node->insertAsLastChildOf($nodes[$parentPath]);
                        $node->save();
                        //saves Content as well.
                    }
                }
            }
            $domain->save();
        }
        Propel::getWriteConnection('default')->commit();
        $cacher = $this->getContainer()->get('jarves.cache.cacher');
        $cacher->invalidateCache('core');
        return $openedFiles;
    }