Merge pull request #5989 from WoltLab/wsc-rpc-api-const
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / importer / AbstractImporter.class.php
CommitLineData
c2836ca3 1<?php
a9229942 2
c2836ca3 3namespace wcf\system\importer;
a9229942 4
112dcc44
AE
5use wcf\data\package\PackageCache;
6use wcf\system\WCF;
c2836ca3
MW
7
8/**
9 * Basic implementation of IImporter.
a9229942
TD
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>
c2836ca3 14 */
a9229942
TD
15abstract 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 }
c2836ca3 84}