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