yii\console\controllers\MessageController::saveMessagesToDb PHP Method

saveMessagesToDb() protected method

Saves messages to database
protected saveMessagesToDb ( array $messages, Connection $db, string $sourceMessageTable, string $messageTable, boolean $removeUnused, array $languages, boolean $markUnused )
$messages array
$db yii\db\Connection
$sourceMessageTable string
$messageTable string
$removeUnused boolean
$languages array
$markUnused boolean
    protected function saveMessagesToDb($messages, $db, $sourceMessageTable, $messageTable, $removeUnused, $languages, $markUnused)
    {
        $q = new \yii\db\Query();
        $current = [];
        foreach ($q->select(['id', 'category', 'message'])->from($sourceMessageTable)->all($db) as $row) {
            $current[$row['category']][$row['id']] = $row['message'];
        }
        $new = [];
        $obsolete = [];
        foreach ($messages as $category => $msgs) {
            $msgs = array_unique($msgs);
            if (isset($current[$category])) {
                $new[$category] = array_diff($msgs, $current[$category]);
                $obsolete += array_diff($current[$category], $msgs);
            } else {
                $new[$category] = $msgs;
            }
        }
        foreach (array_diff(array_keys($current), array_keys($messages)) as $category) {
            $obsolete += $current[$category];
        }
        if (!$removeUnused) {
            foreach ($obsolete as $pk => $m) {
                if (mb_substr($m, 0, 2) === '@@' && mb_substr($m, -2) === '@@') {
                    unset($obsolete[$pk]);
                }
            }
        }
        $obsolete = array_keys($obsolete);
        $this->stdout('Inserting new messages...');
        $savedFlag = false;
        foreach ($new as $category => $msgs) {
            foreach ($msgs as $m) {
                $savedFlag = true;
                $lastPk = $db->schema->insert($sourceMessageTable, ['category' => $category, 'message' => $m]);
                foreach ($languages as $language) {
                    $db->createCommand()->insert($messageTable, ['id' => $lastPk['id'], 'language' => $language])->execute();
                }
            }
        }
        $this->stdout($savedFlag ? "saved.\n" : "Nothing new...skipped.\n");
        $this->stdout($removeUnused ? 'Deleting obsoleted messages...' : 'Updating obsoleted messages...');
        if (empty($obsolete)) {
            $this->stdout("Nothing obsoleted...skipped.\n");
        } else {
            if ($removeUnused) {
                $db->createCommand()->delete($sourceMessageTable, ['in', 'id', $obsolete])->execute();
                $this->stdout("deleted.\n");
            } elseif ($markUnused) {
                $db->createCommand()->update($sourceMessageTable, ['message' => new \yii\db\Expression("CONCAT('@@',message,'@@')")], ['in', 'id', $obsolete])->execute();
                $this->stdout("updated.\n");
            } else {
                $this->stdout("kept untouched.\n");
            }
        }
    }