Skip to content
Snippets Groups Projects
Commit fe3c5bcd authored by Torsten Oppermann's avatar Torsten Oppermann
Browse files

[TASK] Implementing cateegory map, reespecting corect title & ceategory translations

parent 414b9a1f
No related branches found
No related tags found
1 merge request!6Feature news migration
...@@ -83,20 +83,28 @@ class MigrateNewsCommandController extends CommandController { ...@@ -83,20 +83,28 @@ class MigrateNewsCommandController extends CommandController {
*/ */
protected $languageMap = []; protected $languageMap = [];
/**
* @var array $languageMap
*/
protected $categoryMap = [];
/** /**
* @param string $copyPageId the page id of the template that should be copied * @param string $copyPageId the page id of the template that should be copied
* @param int $categoryPid the page id of the category page * @param int $categoryPid the page id of the category page
* @param int $year only news from that year will be migrated * @param int $year only news from that year will be migrated
* @param string $languageMapAsJson a json, mapping language ids (old => new). this is needed if the sys_language_uids have changed * @param string $languageMapAsJson a json, mapping language ids (old => new). this is needed if the sys_language_uids have changed
* @param string $categoryMapAsJson a json, mapping sys_category ids (old => new). t
* *
* @throws IllegalObjectTypeException * @throws IllegalObjectTypeException
* @throws UnknownObjectException * @throws UnknownObjectException
*/ */
public function runMigrateNewsCommand( public function runMigrateNewsCommand(
$copyPageId, $categoryPid, $year = 2015, $copyPageId, $categoryPid, $year = 2015,
$languageMapAsJson = '{"3":1,"1":0,"2":2,"0":3}' $languageMapAsJson = '{"3":1,"1":0,"2":2,"0":3}',
$categoryMapAsJson = '{"2":10,"3":11,"4":12,"5":13,"6":14,"7":15,"8":16,"9":17}'
) { ) {
$this->languageMap = json_decode($languageMapAsJson, TRUE); $this->languageMap = json_decode($languageMapAsJson, TRUE);
$this->categoryMap = json_decode($categoryMapAsJson, TRUE);
/** @var DatabaseConnection $db */ /** @var DatabaseConnection $db */
$db = $GLOBALS['TYPO3_DB']; $db = $GLOBALS['TYPO3_DB'];
...@@ -121,7 +129,6 @@ class MigrateNewsCommandController extends CommandController { ...@@ -121,7 +129,6 @@ class MigrateNewsCommandController extends CommandController {
if ((int) date('Y', ($row['datetime'])) !== $year) { if ((int) date('Y', ($row['datetime'])) !== $year) {
continue; continue;
} }
$resultArray[] = $row; $resultArray[] = $row;
// if no l10n_parent exists, create a copy of the page // if no l10n_parent exists, create a copy of the page
...@@ -141,11 +148,13 @@ class MigrateNewsCommandController extends CommandController { ...@@ -141,11 +148,13 @@ class MigrateNewsCommandController extends CommandController {
$newsPage = $this->newsRepository->findByUidIgnoreEnableFields($newPageId); $newsPage = $this->newsRepository->findByUidIgnoreEnableFields($newPageId);
if ($newsPage !== NULL) { if ($newsPage !== NULL) {
// @todo create tt content element, map images, author, categories etc.
$title = date('Y-m-d', $row['datetime']) . ' - ' . $row['title']; $title = date('Y-m-d', $row['datetime']) . ' - ' . $row['title'];
$newsPage->setTitle($title); $newsPage->setTitle($title);
$newsPage->setAuthor($row['author']);
$newsPage->addTag($this->getMatchingTag($row)); $matchingTag = $this->getMatchingTag($row);
if ($matchingTag && $matchingTag instanceof Tag) {
$newsPage->addTag($matchingTag);
}
$this->newsRepository->update($newsPage); $this->newsRepository->update($newsPage);
$this->persistenceManager->persistAll(); $this->persistenceManager->persistAll();
...@@ -162,32 +171,20 @@ class MigrateNewsCommandController extends CommandController { ...@@ -162,32 +171,20 @@ class MigrateNewsCommandController extends CommandController {
/** /**
* @param array $row * @param array $row
* @return Tag $tag * @return Object $tag
* *
* @throws IllegalObjectTypeException * @throws IllegalObjectTypeException
* @throws UnknownObjectException * @throws UnknownObjectException
*/ */
private function getMatchingTag(array $row) { private function getMatchingTag(array $row) {
/** @var Tag $matchingTag */ // look up the correct category id, if they have changed
$matchingTag = $this->tagRepository->findByUid((int) $row['categories']); if (isset($this->categoryMap[(int) $row['categories']])) {
$categoryId = $this->categoryMap[(int) $row['categories']];
if ($matchingTag === NULL) { } else {
$matchingTag = $this->objectManager->get(Tag::class); $categoryId = (int) $row['categories'];
/** @var DatabaseConnection $db */
$db = $GLOBALS['TYPO3_DB'];
$where = 'uid = ' . $row['categories'];
/** @var \mysqli_result $result */
$result = $db->exec_SELECTquery('title', 'sys_category', $where);
$matchingTag->setTitle($result->fetch_row()[0]);
$matchingTag->setPid(1);
$this->tagRepository->add($matchingTag);
} }
$this->persistenceManager->persistAll(); return $this->tagRepository->findByUid($categoryId);
return $matchingTag;
} }
/** /**
...@@ -209,7 +206,7 @@ class MigrateNewsCommandController extends CommandController { ...@@ -209,7 +206,7 @@ class MigrateNewsCommandController extends CommandController {
$result = $db->exec_SELECTquery('l18n_parent', 'tt_content', $where); $result = $db->exec_SELECTquery('l18n_parent', 'tt_content', $where);
$originalContentElement = $result->fetch_row(); $originalContentElement = $result->fetch_row();
// if its the new defaul, there is no l18n_parent // if its the new default, there is no l18n_parent
if ((int) $this->languageMap[(int) $row['sys_language_uid'] === 0]) { if ((int) $this->languageMap[(int) $row['sys_language_uid'] === 0]) {
$where = 'uid = ' . (int) $originalContentElement[0]; $where = 'uid = ' . (int) $originalContentElement[0];
} else { } else {
...@@ -224,6 +221,33 @@ class MigrateNewsCommandController extends CommandController { ...@@ -224,6 +221,33 @@ class MigrateNewsCommandController extends CommandController {
} }
$db->exec_UPDATEquery('tt_content', $where, ['bodytext' => $row['bodytext']]); $db->exec_UPDATEquery('tt_content', $where, ['bodytext' => $row['bodytext']]);
// possibly the default language needs to be overwritten and the old default translation needs to be preserved
if (isset($this->languageMap[(int) $row['sys_language_uid']]) && $this->languageMap[(int) $row['sys_language_uid']] === 0) {
$where = 'uid = ' . (int) $parentId;
/** @var \mysqli_result $result */
$result = $db->exec_SELECTquery('title', 'pages', $where);
$where = 'pid = ' . (int) $parentId . ' AND sys_language_uid = ' . $this->languageMap[0];
$db->exec_UPDATEquery('pages_language_overlay', $where, ['title' => $result->fetch_row()[0]]);
$where = 'uid = ' . (int) $parentId;
$db->exec_UPDATEquery(
'pages', $where, ['title' => date('Y-m-d', $row['datetime']) . ' - ' . $row['title']]
);
} else {
// finally translate the page title if necessary
if (isset($this->languageMap[(int) $row['sys_language_uid']]) && $this->languageMap[(int) $row['sys_language_uid']] > 0) {
$where = 'pid = ' . (int) $parentId . ' AND sys_language_uid = ' . $this->languageMap[(int) $row['sys_language_uid']];
} else {
$where = 'pid = ' . (int) $parentId . ' AND sys_language_uid = ' . (int) $row['sys_language_uid'];
}
}
$db->exec_UPDATEquery(
'pages_language_overlay', $where, ['title' => date('Y-m-d', $row['datetime']) . ' - ' . $row['title']]
);
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment