2 namespace TYPO3\CMS\Core\Tests\Functional\DataHandling\Framework
;
4 /***************************************************************
7 * (c) 2014 Oliver Hader <oliver.hader@typo3.org>
10 * This script is part of the TYPO3 project. The TYPO3 project is
11 * free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * The GNU General Public License can be found at
17 * http://www.gnu.org/copyleft/gpl.html.
19 * This script is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * This copyright notice MUST APPEAR in all copies of the script!
25 ***************************************************************/
27 use TYPO3\CMS\Core\DataHandling\DataHandler
;
37 protected $dataHandler;
40 * @param DataHandler $dataHandler
42 public function __construct(DataHandler
$dataHandler) {
43 $this->setDataHandler($dataHandler);
47 * @param DataHandler $dataHandler
49 public function setDataHandler(DataHandler
$dataHandler) {
50 $this->dataHandler
= $dataHandler;
56 public function getDataHander() {
57 return $this->dataHandler
;
61 * @param string $tableName
62 * @param integer $pageId
63 * @param array $recordData
65 public function createNewRecord($tableName, $pageId, array $recordData) {
66 $this->createNewRecords($pageId, array($tableName => $recordData));
70 * @param integer $pageId
71 * @param array $tableRecordData
74 public function createNewRecords($pageId, array $tableRecordData) {
76 $newTableIds = array();
78 foreach ($tableRecordData as $tableName => $recordData) {
79 $recordData = $this->resolvePreviousUid($recordData, $currentUid);
80 $recordData['pid'] = $pageId;
81 $currentUid = uniqid('NEW');
82 $newTableIds[$tableName][] = $currentUid;
83 $dataMap[$tableName][$currentUid] = $recordData;
85 $this->dataHandler
->start($dataMap, array());
86 $this->dataHandler
->process_datamap();
88 foreach ($newTableIds as $tableName => &$ids) {
89 foreach ($ids as &$id) {
90 if (!empty($this->dataHandler
->substNEWwithIDs
[$id])) {
91 $id = $this->dataHandler
->substNEWwithIDs
[$id];
100 * @param string $tableName
101 * @param integer $uid
102 * @param array $recordData
103 * @param NULL|array $deleteTableRecordIds
105 public function modifyRecord($tableName, $uid, array $recordData, array $deleteTableRecordIds = NULL) {
111 $commandMap = array();
112 if (!empty($deleteTableRecordIds)) {
113 foreach ($deleteTableRecordIds as $tableName => $recordIds) {
114 foreach ($recordIds as $recordId) {
115 $commandMap[$tableName][$recordId]['delete'] = TRUE;
119 $this->dataHandler
->start($dataMap, $commandMap);
120 $this->dataHandler
->process_datamap();
121 if (!empty($commandMap)) {
122 $this->dataHandler
->process_cmdmap();
127 * @param integer $pageId
128 * @param array $tableRecordData
130 public function modifyRecords($pageId, array $tableRecordData) {
133 foreach ($tableRecordData as $tableName => $recordData) {
134 if (empty($recordData['uid'])) {
137 $recordData = $this->resolvePreviousUid($recordData, $currentUid);
138 $currentUid = $recordData['uid'];
139 if ($recordData['uid'] === '__NEW') {
140 $recordData['pid'] = $pageId;
141 $currentUid = uniqid('NEW');
143 unset($recordData['uid']);
144 $dataMap[$tableName][$currentUid] = $recordData;
146 $this->dataHandler
->start($dataMap, array());
147 $this->dataHandler
->process_datamap();
151 * @param string $tableName
152 * @param integer $uid
154 public function deleteRecord($tableName, $uid) {
162 $this->dataHandler
->start(array(), $commandMap);
163 $this->dataHandler
->process_cmdmap();
167 * @param string $tableName
168 * @param integer $uid
169 * @param integer $pageId
171 public function copyRecord($tableName, $uid, $pageId) {
179 $this->dataHandler
->start(array(), $commandMap);
180 $this->dataHandler
->process_cmdmap();
184 * @param string $tableName
185 * @param integer $uid
186 * @param integer $pageId
188 public function moveRecord($tableName, $uid, $pageId) {
196 $this->dataHandler
->start(array(), $commandMap);
197 $this->dataHandler
->process_cmdmap();
201 * @param string $tableName
202 * @param integer $uid
203 * @param integer $languageId
205 public function localizeRecord($tableName, $uid, $languageId) {
209 'localize' => $languageId,
213 $this->dataHandler
->start(array(), $commandMap);
214 $this->dataHandler
->process_cmdmap();
218 * @param string $tableName
219 * @param integer $uid
220 * @param string $fieldName
221 * @param array $referenceIds
223 public function modifyReferences($tableName, $uid, $fieldName, array $referenceIds) {
227 $fieldName => implode(',', $referenceIds),
231 $this->dataHandler
->start($dataMap, array());
232 $this->dataHandler
->process_datamap();
236 * @param string $tableName
237 * @param integer $uid
238 * @param string $fieldName
239 * @param integer $referenceId
241 public function addReference($tableName, $uid, $fieldName, $referenceId) {
242 $recordValues = $this->getRecordValues($tableName, $uid, $fieldName);
244 if (!in_array($referenceId, $recordValues)) {
245 $recordValues[] = $referenceId;
248 $this->modifyReferences($tableName, $uid, $fieldName, $recordValues);
252 * @param string $tableName
253 * @param integer $uid
254 * @param string $fieldName
255 * @param integer $referenceId
257 public function deleteReference($tableName, $uid, $fieldName, $referenceId) {
258 $recordValues = $this->getRecordValues($tableName, $uid, $fieldName);
260 if (($index = array_search($referenceId, $recordValues)) !== FALSE) {
261 unset($recordValues[$index]);
264 $this->modifyReferences($tableName, $uid, $fieldName, $recordValues);
268 * @param array $recordData
269 * @param NULL|int $previousUid
272 protected function resolvePreviousUid(array $recordData, $previousUid) {
273 if ($previousUid === NULL) {
276 foreach ($recordData as $fieldName => $fieldValue) {
277 if (strpos($fieldValue, '__previousUid') === FALSE) {
280 $recordData[$fieldName] = str_replace('__previousUid', $previousUid, $fieldValue);
286 * @param string $tableName
287 * @param integer $uid
288 * @param string $fieldName
291 protected function getRecordValues($tableName, $uid, $fieldName) {
292 $recordValues = array();
294 $recordValue = $this->getRecordValue($tableName, $uid, $fieldName);
295 if (!empty($recordValue)) {
296 $recordValues = explode(',', $recordValues);
299 return $recordValues;
303 * @param string $tableName
304 * @param integer $uid
305 * @param string $fieldName
306 * @return bool|string|NULL
308 protected function getRecordValue($tableName, $uid, $fieldName) {
309 $recordValue = FALSE;
311 $record = $this->getDatabaseConnection()->exec_SELECTgetSingleRow(
312 $fieldName, $tableName, 'uid=' . (int)$uid
315 if (isset($record[$fieldName])) {
316 $recordValue = $record[$fieldName];
323 * @return \TYPO3\CMS\Core\Database\DatabaseConnection
325 protected function getDatabaseConnection() {
326 return $GLOBALS['TYPO3_DB'];