Merge branch '3.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / importer / AbstractImporter.class.php
CommitLineData
c2836ca3
MW
1<?php
2namespace wcf\system\importer;
112dcc44
AE
3use wcf\data\package\PackageCache;
4use wcf\system\WCF;
c2836ca3
MW
5
6/**
7 * Basic implementation of IImporter.
e3369fd2 8 *
c2836ca3 9 * @author Marcel Werk
c839bd49 10 * @copyright 2001-2018 WoltLab GmbH
c2836ca3 11 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
e71525e4 12 * @package WoltLabSuite\Core\System\Importer
c2836ca3
MW
13 */
14abstract class AbstractImporter implements IImporter {
15 /**
16 * database object class name
06355ec3 17 * @var string
c2836ca3
MW
18 */
19 protected $className = '';
20
21 /**
0fcfe5f6 22 * @inheritDoc
c2836ca3
MW
23 */
24 public function getClassName() {
25 return $this->className;
26 }
112dcc44
AE
27
28 /**
29 * Imports a list of language items.
30 *
31 * @param string[][] $items
32 * @param string $languageCategory
33 * @param string $package
34 */
35 protected function importI18nValues(array $items, $languageCategory, $package) {
36 // get package id
37 $packageID = PackageCache::getInstance()->getPackageID($package);
38
39 $sql = "INSERT INTO wcf".WCF_N."_language_item
40 (languageID, languageItem, languageItemValue, languageCategoryID, packageID)
41 VALUES (?, ?, ?, ?, ?)
42 ON DUPLICATE KEY
43 UPDATE languageItemValue = VALUES(languageItemValue)";
44 $statement = WCF::getDB()->prepareStatement($sql);
45 WCF::getDB()->beginTransaction();
46 foreach ($items as $itemData) {
47 $statement->execute([
48 $itemData['languageID'],
49 $itemData['languageItem'],
50 $itemData['languageItemValue'],
51 $this->getLanguageCategoryID($languageCategory),
52 $packageID
53 ]);
54 }
55 WCF::getDB()->commitTransaction();
56 }
57
58 /**
59 * Returns the language category id.
60 *
61 * @param string $languageCategory
62 * @return integer
63 */
64 protected function getLanguageCategoryID($languageCategory) {
65 static $languageCategoryIDs = [];
66
67 if (!isset($languageCategoryIDs[$languageCategory])) {
68 // get language category id
69 $sql = "SELECT languageCategoryID
70 FROM wcf" . WCF_N . "_language_category
71 WHERE languageCategory = ?";
72 $statement = WCF::getDB()->prepareStatement($sql);
73 $statement->execute([$languageCategory]);
74
75 $languageCategoryIDs[$languageCategory] = $statement->fetchSingleColumn();
76 }
77
78 return $languageCategoryIDs[$languageCategory];
79 }
c2836ca3 80}