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);
     //        }
 }