Since: 1.1
Author: Lajos Molnár (lajax.m@gmail.com)
 /**
  * Detecting new language elements.
  */
 public function actionScan()
 {
     $this->stdout("Scanning translations...\n", Console::BOLD);
     $scanner = new Scanner();
     $items = $scanner->run();
     $this->stdout("{$items} new item(s) inserted into database.\n");
 }
 /**
  * Detecting new language elements.
  * @return string
  */
 public function run()
 {
     $scanner = new Scanner();
     $scanner->run();
     $newDataProvider = $this->controller->createLanguageSourceDataProvider($scanner->getNewLanguageElements());
     $oldDataProvider = $this->_createLanguageSourceDataProvider($scanner->getRemovableLanguageSourceIds());
     return $this->controller->render('scan', ['newDataProvider' => $newDataProvider, 'oldDataProvider' => $oldDataProvider]);
 }
 /**
  * Initializing $_languageElements array.
  * @param array $languageSourceIds
  */
 private function _initLanguageElements($languageSourceIds)
 {
     $languageSources = LanguageSource::findAll(['id' => $languageSourceIds]);
     foreach ($languageSources as $languageSource) {
         $this->_languageElements[$languageSource->category][$languageSource->message] = $languageSource->id;
         $category = Console::ansiFormat($languageSource->category, [Console::FG_RED]);
         $message = Console::ansiFormat($languageSource->message, [Console::FG_RED]);
         $this->_scanner->stdout('category: ' . $category . ', message: ' . $message);
     }
 }
 /**
  * Removing unused language elements from database.
  * @return integer The number of removed language elements.
  */
 private function _optimizeDatabase()
 {
     $scanner = new Scanner();
     $this->_languageItems = $scanner->getLanguageItems();
     $this->_createLanguageSource();
     // Removing active elements from array.
     // Only removable inactive elements left in array.
     foreach ($this->_languageItems as $category => $messages) {
         foreach ($messages as $message => $id) {
             if (isset($this->_languageSources[$category][$message])) {
                 unset($this->_languageSources[$category][$message]);
             }
         }
     }
     $ids = [];
     foreach ($this->_languageSources as $messages) {
         foreach ($messages as $id) {
             $ids[$id] = true;
             // Duplication filtering
         }
     }
     LanguageSource::deleteAll(['IN', 'id', array_keys($ids)]);
     return count($ids);
 }
 /**
  * Detecting new language elements.
  * @return string
  */
 public function run()
 {
     $scanner = new Scanner();
     return $this->controller->render('scan', ['items_count' => $scanner->scanning()]);
 }