protected function populateElasticsearch1x($source, $target) { // search for files to process if (($files = $this->searchFiles($source)) === false) { return false; } // load context from cache $context = $this->loadContext($target); $this->stdout('Checking for updated files... '); foreach ($context->files as $file => $sha) { if (!file_exists($file)) { $this->stdout('At least one file has been removed. Rebuilding the context...'); $context = new Context(); if (($files = $this->searchFiles($source)) === false) { return false; } break; } if (sha1_file($file) === $sha) { unset($files[$file]); } } $this->stdout('done.' . PHP_EOL, Console::FG_GREEN); // process files $fileCount = count($files); $this->stdout($fileCount . ' file' . ($fileCount == 1 ? '' : 's') . ' to update.' . PHP_EOL); Console::startProgress(0, $fileCount, 'Processing files... ', false); $done = 0; foreach ($files as $file) { if (file_exists("{$target}/api/" . basename($file, '.php') . '.html')) { $context->addFile($file); } Console::updateProgress(++$done, $fileCount); } Console::endProgress(true); $this->stdout('done.' . PHP_EOL, Console::FG_GREEN); // save processed data to cache $this->storeContext($context, $target); $this->updateContext($context); $types = array_merge($context->classes, $context->interfaces, $context->traits); try { Console::startProgress(0, $count = count($types), 'populating elasticsearch index...', false); $version = $this->version; // first delete all records for this version SearchApiType::setMappings(); SearchApiPrimitive::setMappings(); // ApiPrimitive::deleteAllForVersion($version); // SearchApiType::deleteAllForVersion($version); sleep(1); $i = 0; foreach ($types as $type) { SearchApiType::createRecord($type, $version); Console::updateProgress(++$i, $count); } Console::endProgress(true, true); $this->stdout("done.\n", Console::FG_GREEN); } catch (\Exception $e) { if (YII_DEBUG) { $this->stdout("!!! FAILED !!! Search will not be available.\n", Console::FG_RED, Console::BOLD); $this->stdout((string) $e . "\n\n"); } else { throw $e; } } $this->writeJsonFiles1x($target, $types); return true; }
/** * @inheritdoc */ public function render($context, $targetDir) { $types = array_merge($context->classes, $context->interfaces, $context->traits); $extTypes = []; foreach ($this->extensions as $k => $ext) { $extType = $this->filterTypes($types, $ext); if (empty($extType)) { unset($this->extensions[$k]); continue; } $extTypes[$ext] = $extType; } // render view files parent::render($context, $targetDir); if ($this->controller !== null) { $this->controller->stdout('generating extension index files...'); } foreach ($extTypes as $ext => $extType) { $readme = @file_get_contents("https://raw.github.com/yiisoft/yii2-{$ext}/master/README.md"); $indexFileContent = $this->renderWithLayout($this->indexView, ['docContext' => $context, 'types' => $extType, 'readme' => $readme ?: null]); file_put_contents($targetDir . "/ext-{$ext}-index.html", $indexFileContent); } if ($this->controller !== null) { $this->controller->stdout("done.\n", Console::FG_GREEN); } // create index.html $yiiTypes = $this->filterTypes($types, 'yii'); $indexFileContent = $this->renderWithLayout($this->indexView, ['docContext' => $context, 'types' => $yiiTypes, 'readme' => null]); file_put_contents($targetDir . '/index.html', $indexFileContent); // create file with page titles $titles = []; foreach ($types as $type) { $titles[$this->generateFileName($type->name)] = StringHelper::basename($type->name) . ", {$type->name}"; } file_put_contents($targetDir . '/titles.php', '<?php return ' . VarDumper::export($titles) . ';'); try { if ($this->controller !== null) { Console::startProgress(0, $count = count($types), 'populating elasticsearch index...', false); } // first delete all records for this version $version = $this->version; SearchApiType::setMappings(); SearchApiPrimitive::setMappings(); // ApiPrimitive::deleteAllForVersion($version); SearchApiType::deleteAllForVersion($version); sleep(1); $i = 0; foreach ($types as $type) { SearchApiType::createRecord($type, $version); if ($this->controller !== null) { Console::updateProgress(++$i, $count); } } if ($this->controller !== null) { Console::endProgress(true, true); $this->controller->stdout("done.\n", Console::FG_GREEN); } } catch (\Exception $e) { if (YII_DEBUG && $this->controller !== null) { $this->controller->stdout("!!! FAILED !!! Search will not be available.\n", Console::FG_RED, Console::BOLD); $this->controller->stdout((string) $e . "\n\n"); } else { throw $e; } } // if ($this->controller !== null) { // $this->controller->stdout('done.' . PHP_EOL, Console::FG_GREEN); // $this->controller->stdout('generating search index...'); // } // // $indexer = new ApiIndexer(); // $indexer->indexFiles(FileHelper::findFiles($targetDir, ['only' => ['*.html']]), $targetDir); // $js = $indexer->exportJs(); // file_put_contents($targetDir . '/jssearch.index.js', $js); // // if ($this->controller !== null) { // $this->controller->stdout('done.' . PHP_EOL, Console::FG_GREEN); // } }