/Tests/DataHandling/Handler.php

https://bitbucket.org/trotzek/cq_wstest · PHP · 199 lines · 123 code · 24 blank · 52 comment · 10 complexity · e2927d41e2e2b870aa6b8d3f8dde6be0 MD5 · raw file

  1. <?php
  2. namespace CITEQ\CqWstest\Tests\DataHandling;
  3. use TYPO3\CMS\Core\DataHandling\DataHandler;
  4. use TYPO3\CMS\Core\Utility\DebugUtility;
  5. Class Handler {
  6. /**
  7. * @var \TYPO3\CMS\Core\DataHandling\DataHandler
  8. */
  9. protected $theDataHandler = NULL;
  10. public function __construct(){
  11. $this->theDataHandler = new DataHandler();
  12. }
  13. /**
  14. * @param $dataToCreate Data
  15. * @return \CITEQ\CqWstest\Tests\DataHandling\Data
  16. */
  17. public function create(Data $dataToCreate){
  18. $cmd = array();
  19. $cmd[$dataToCreate->getTablename()]['NEW'] = array_merge($dataToCreate->getValues(), array("CType" => $dataToCreate->getCType()));
  20. $this->theDataHandler->start($cmd, array());
  21. $this->theDataHandler->process_datamap();
  22. if ($GLOBALS['BE_USER']->workspace !== 0){
  23. $placeholderUid = $this->theDataHandler->substNEWwithIDs['NEW'];
  24. $versionUid = $this->theDataHandler->autoVersionIdMap[$dataToCreate->getTablename()][$placeholderUid];
  25. $recordFromDb = $this->get($versionUid, $dataToCreate->getTablename());
  26. }else{
  27. $newUid = $this->theDataHandler->substNEWwithIDs['NEW'];
  28. $recordFromDb = $this->get($newUid , $dataToCreate->getTablename());
  29. }
  30. return $recordFromDb;
  31. }
  32. /**
  33. * @param $theModification Data
  34. * @param $dataToModify Data
  35. * @return \CITEQ\CqWstest\Tests\DataHandling\Data
  36. */
  37. public function modify(Data $theModification, Data $dataToModify){
  38. $cmd = array();
  39. $cmd[$dataToModify->getTablename()][$dataToModify->getUid()] = $theModification->getValues();
  40. $this->theDataHandler->start($cmd, array());
  41. $this->theDataHandler->process_datamap();
  42. if ($GLOBALS['BE_USER']->workspace !== 0){
  43. $versionUid = $this->theDataHandler->autoVersionIdMap[$dataToModify->getTablename()][$dataToModify->getUid()];
  44. $recordFromDb = $this->get($versionUid, $dataToModify ->getTablename());
  45. }else{
  46. $recordFromDb = $this->get($dataToModify->getUid(), $dataToModify->getTablename());
  47. }
  48. return $recordFromDb;
  49. }
  50. /**
  51. * Moves an element to another page
  52. * @param $recordToMove Data
  53. * @param $newPageUid
  54. * @return \CITEQ\CqWstest\Tests\DataHandling\Data
  55. */
  56. public function moveToPage(Data $recordToMove, $newPageUid){
  57. $cmd = array();
  58. $cmd[$recordToMove->getTablename()][$recordToMove->getUid()]['move'] = $newPageUid;
  59. $this->theDataHandler->start(array(), $cmd);
  60. $this->theDataHandler->process_cmdmap();
  61. if ($GLOBALS['BE_USER']->workspace !== 0){
  62. $versionUid = $this->theDataHandler->copyMappingArray_merged[$recordToMove->getTablename()][$recordToMove->getUid()];
  63. if ($versionUid === NULL){
  64. $recordFromDb = $this->get($recordToMove->getUid(), $recordToMove->getTablename());
  65. }else{
  66. $recordFromDb = $this->get($versionUid, $recordToMove ->getTablename());
  67. }
  68. }else{
  69. $recordFromDb = $this->get($recordToMove->getUid(), $recordToMove->getTablename());
  70. }
  71. return $recordFromDb;
  72. }
  73. /**
  74. * Localizes an Element and returns the localized record
  75. * @param \CITEQ\CqWstest\Tests\DataHandling\Data|\CITEQ\CqWstest\Tests\DataHandling\DataBase $recordToLocalize Data The record to localize
  76. * @param $languageUid int the uid to translate the given record into
  77. * @return Data the localized record
  78. */
  79. public function localize(DataBase $recordToLocalize, $languageUid){
  80. $cmd = array();
  81. $cmd[$recordToLocalize->getTablename()][$recordToLocalize->getUid()]['localize'] = $languageUid;
  82. $this->theDataHandler->start(array(), $cmd);
  83. $this->theDataHandler->process_cmdmap();
  84. if ($GLOBALS['BE_USER']->workspace !== 0){
  85. $versionCopyUid = $this->theDataHandler->copyMappingArray_merged[$recordToLocalize->getTablename()][$recordToLocalize->getUid()];
  86. $versionUid = $this->theDataHandler->autoVersionIdMap[$recordToLocalize->getTablename()][$versionCopyUid];
  87. $localizedFromDb = $this->get($versionUid, $recordToLocalize ->getTablename());
  88. }else{
  89. $localizedUid = $this->theDataHandler->copyMappingArray_merged[$recordToLocalize->getTablename()][$recordToLocalize->getUid()];
  90. $localizedFromDb = $this->get($localizedUid, $recordToLocalize->getTablename());
  91. }
  92. return $localizedFromDb;
  93. }
  94. /**
  95. * @param $uid int
  96. * @param $tableName string
  97. * @return \CITEQ\CqWstest\Tests\DataHandling\Data
  98. */
  99. public function get($uid, $tableName){
  100. $uid = intval($uid);
  101. $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow("*", $tableName, " uid = ".$uid);
  102. if (!is_array($row)){
  103. return NULL;
  104. }
  105. $data = new Data($tableName);
  106. $data->setValues($row);
  107. return $data;
  108. }
  109. /**
  110. * Refreshed multiple objects with the current values from the db by calling refreshRecordFromDb for each object
  111. * @param $recordsToRefresh array
  112. */
  113. public function refreshMultipleRecordsFromDb(&$recordsToRefresh){
  114. for ($i = 0; $i < count($recordsToRefresh); $i++){
  115. /** @var $this \CITEQ\CqWstest\Tests\DataHandling\Data */
  116. $this->refreshRecordFromDb($recordsToRefresh[$i]);
  117. }
  118. }
  119. /**
  120. * Refreshes the object with the current values from db
  121. * @param \CITEQ\CqWstest\Tests\DataHandling\Data|\CITEQ\CqWstest\Tests\DataHandling\DataBase $recordToRefresh
  122. */
  123. public function refreshRecordFromDb(DataBase &$recordToRefresh){
  124. $recordToRefresh = $this->get($recordToRefresh->getUid(), $recordToRefresh->getTablename());
  125. }
  126. /**
  127. * Gets a placeholder for the given data object
  128. * @param Data $data
  129. * @return \CITEQ\CqWstest\Tests\DataHandling\Data
  130. */
  131. public function getNewLivePlaceholderFor(Data $data){
  132. $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow("*", //fields
  133. $data->getTablename(), //table
  134. " uid = ".$data->get('t3ver_oid')."
  135. AND t3ver_state in (1,2)
  136. AND t3ver_wsid <> 0
  137. AND pid <> -1
  138. "); //where
  139. if (!is_array($row)){
  140. return NULL;
  141. }
  142. $placeHolder = new DataPlaceholder($data->getTablename());
  143. $placeHolder->setValues($row);
  144. $placeHolder->setPlaceholderFor($data);
  145. return $placeHolder;
  146. }
  147. /**
  148. * Gets the move Live-Placeholder for the given workspace record
  149. * @param Data $workspaceRecord
  150. * @return \CITEQ\CqWstest\Tests\DataHandling\DataPlaceholder|null
  151. */
  152. public function getMovePlaceholderFor(Data $workspaceRecord){
  153. //get the live record first
  154. $whereLiveRecord = "uid = ".$workspaceRecord->get('t3ver_oid') ." AND pid <> -1";
  155. $liveRow = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow("*", $workspaceRecord->getTablename(), $whereLiveRecord);
  156. if (!is_array($liveRow)){
  157. //move placeholder cannot be found
  158. return NULL;
  159. }
  160. //get the placeholder
  161. $whereMovePlaceholder = "t3ver_move_id = ".$liveRow['uid']."
  162. AND t3ver_state = 3
  163. AND t3ver_wsid <> 0
  164. AND pid <> -1";
  165. $movePlaceholderRow = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow("*", $workspaceRecord->getTablename(), $whereMovePlaceholder);
  166. if (!is_array($movePlaceholderRow)){
  167. //move placeholder cannot be found
  168. return NULL;
  169. }
  170. $placeHolder = new DataPlaceholder($workspaceRecord->getTablename());
  171. $placeHolder->setValues($movePlaceholderRow);
  172. $placeHolder->setPlaceholderFor($workspaceRecord);
  173. return $placeHolder;
  174. }
  175. }