TYPO3 CMS  TYPO3_7-6
LocalizationController.php
Go to the documentation of this file.
1 <?php
3 
4 /*
5  * This file is part of the TYPO3 CMS project.
6  *
7  * It is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License, either version 2
9  * of the License, or any later version.
10  *
11  * For the full copyright and license information, please read the
12  * LICENSE.txt file that was distributed with this source code.
13  *
14  * The TYPO3 project - inspiring people to share!
15  */
16 
25 
30 {
34  const ACTION_COPY = 'copyFromLanguage';
35 
39  const ACTION_LOCALIZE = 'localize';
40 
44  protected $iconFactory;
45 
50 
54  public function __construct()
55  {
56  $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
57  $this->localizationRepository = GeneralUtility::makeInstance(LocalizationRepository::class);
58  }
59 
67  public function getUsedLanguagesInPageAndColumn(ServerRequestInterface $request, ResponseInterface $response)
68  {
69  $params = $request->getQueryParams();
70  if (!isset($params['pageId'], $params['colPos'], $params['languageId'])) {
71  $response = $response->withStatus(500);
72  return $response;
73  }
74 
75  $pageId = (int)$params['pageId'];
76  $colPos = (int)$params['colPos'];
77  $languageId = (int)$params['languageId'];
78 
80  $translationProvider = GeneralUtility::makeInstance(TranslationConfigurationProvider::class);
81  $systemLanguages = $translationProvider->getSystemLanguages($pageId);
82 
83  $availableLanguages = [];
84 
85  // First check whether column has localized records
86  $elementsInColumnCount = $this->localizationRepository->getLocalizedRecordCount($pageId, $colPos, $languageId);
87 
88  if ($elementsInColumnCount === 0) {
89  $fetchedAvailableLanguages = $this->localizationRepository->fetchAvailableLanguages($pageId, $colPos, $languageId);
90  $availableLanguages[] = $systemLanguages[0];
91 
92  foreach ($fetchedAvailableLanguages as $language) {
93  if (isset($systemLanguages[$language['uid']])) {
94  $availableLanguages[] = $systemLanguages[$language['uid']];
95  }
96  }
97  } else {
98  $result = $this->localizationRepository->fetchOriginLanguage($pageId, $colPos, $languageId);
99  $availableLanguages[] = $systemLanguages[$result['sys_language_uid']];
100  }
101 
102  // Pre-render all flag icons
103  foreach ($availableLanguages as &$language) {
104  if ($language['flagIcon'] === 'empty-empty') {
105  $language['flagIcon'] = '';
106  } else {
107  $language['flagIcon'] = $this->iconFactory->getIcon($language['flagIcon'], Icon::SIZE_SMALL)->render();
108  }
109  }
110 
111  $response->getBody()->write(json_encode($availableLanguages));
112  return $response;
113  }
114 
122  public function getRecordLocalizeSummary(ServerRequestInterface $request, ResponseInterface $response)
123  {
124  $params = $request->getQueryParams();
125  if (!isset($params['pageId'], $params['colPos'], $params['destLanguageId'], $params['languageId'])) {
126  $response = $response->withStatus(500);
127  return $response;
128  }
129 
130  $records = [];
131  $databaseConnection = $this->getDatabaseConnection();
132  $res = $this->localizationRepository->getRecordsToCopyDatabaseResult($params['pageId'], $params['colPos'], $params['destLanguageId'], $params['languageId'], '*');
133  while ($row = $databaseConnection->sql_fetch_assoc($res)) {
134  $records[] = [
135  'icon' => $this->iconFactory->getIconForRecord('tt_content', $row, Icon::SIZE_SMALL)->render(),
136  'title' => $row[$GLOBALS['TCA']['tt_content']['ctrl']['label']],
137  'uid' => $row['uid']
138  ];
139  }
140  $databaseConnection->sql_free_result($res);
141 
142  $response->getBody()->write(json_encode($records));
143  return $response;
144  }
145 
151  public function getRecordUidsToCopy(ServerRequestInterface $request, ResponseInterface $response)
152  {
153  $params = $request->getQueryParams();
154  if (!isset($params['pageId'], $params['colPos'], $params['languageId'])) {
155  $response = $response->withStatus(500);
156  return $response;
157  }
158 
159  $pageId = (int)$params['pageId'];
160  $colPos = (int)$params['colPos'];
161  $languageId = (int)$params['languageId'];
162  $databaseConnection = $this->getDatabaseConnection();
163 
164  $res = $this->localizationRepository->getRecordsToCopyDatabaseResult($pageId, $colPos, $languageId, 'uid');
165  $uids = [];
166  while ($row = $databaseConnection->sql_fetch_assoc($res)) {
167  $uids[] = (int)$row['uid'];
168  }
169  $databaseConnection->sql_free_result($res);
170 
171  $response->getBody()->write(json_encode($uids));
172  return $response;
173  }
174 
180  public function localizeRecords(ServerRequestInterface $request, ResponseInterface $response)
181  {
182  $params = $request->getQueryParams();
183  if (!isset($params['pageId'], $params['srcLanguageId'], $params['destLanguageId'], $params['action'], $params['uidList'])) {
184  $response = $response->withStatus(500);
185  return $response;
186  }
187 
188  if ($params['action'] !== static::ACTION_COPY && $params['action'] !== static::ACTION_LOCALIZE) {
189  $response->getBody()->write('Invalid action "' . $params['action'] . '" called.');
190  $response = $response->withStatus(500);
191  return $response;
192  }
193 
194  $this->process($params);
195 
196  $response->getBody()->write(json_encode([]));
197  return $response;
198  }
199 
205  protected function process($params)
206  {
207  $destLanguageId = (int)$params['destLanguageId'];
208 
209  // Build command map
210  $cmd = [
211  'tt_content' => []
212  ];
213 
214  if (isset($params['uidList']) && is_array($params['uidList'])) {
215  foreach ($params['uidList'] as $currentUid) {
216  if ($params['action'] === static::ACTION_LOCALIZE) {
217  $cmd['tt_content'][$currentUid] = [
218  'localize' => $destLanguageId
219  ];
220  } else {
221  $cmd['tt_content'][$currentUid] = [
222  'copyToLanguage' => $destLanguageId,
223  ];
224  }
225  }
226  }
227 
228  $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
229  $dataHandler->start([], $cmd);
230  $dataHandler->process_cmdmap();
231  }
232 
238  protected function getDatabaseConnection()
239  {
240  return $GLOBALS['TYPO3_DB'];
241  }
242 }
getRecordUidsToCopy(ServerRequestInterface $request, ResponseInterface $response)
localizeRecords(ServerRequestInterface $request, ResponseInterface $response)
getRecordLocalizeSummary(ServerRequestInterface $request, ResponseInterface $response)
if(TYPO3_MODE==='BE') $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController']['default']