Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions Classes/Controller/MigrationController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
<?php

declare(strict_types=1);

namespace NITSAN\NsT3dev\Controller;

use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* This file is part of the "T3 Dev" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2022 Nilesh Malankiya <[email protected]>, NITSAN Technologies
*/

/**
* ProductAreaController
*/
class MigrationController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{

/**
* migrationRepository
*
* @var \NITSAN\NsT3dev\Domain\Repository\MigrationRepository
*/
protected $migrationRepository = null;

/**
* @param \NITSAN\NsT3dev\Domain\Repository\MigrationRepository $migrationRepository
*/
public function injectMigrationRepository(\NITSAN\NsT3dev\Domain\Repository\MigrationRepository $migrationRepository)
{
$this->migrationRepository = $migrationRepository;
}

public function dashboardAction(){
if(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('gridelements')){
$grids = $this->migrationRepository->getGrids();
if($grids){
$assign = [
'action' => 'dashboard',
'extension' => 'gridelements',
];
$this->view->assignMultiple($assign);
}
}
else{
$assign = [
'action' => 'dashboard',
'extension' => '',
];
$this->view->assignMultiple($assign);
}

}

public function executeMigrationAction(){
$grids = $this->migrationRepository->getGrids();
if($grids){
$result = $this->migrationRepository->executeUpdate();
if($result){
$assign = [
'action' => 'executeMigration',
'result' => $result,
];
}
}
else{
$assign = [
'action' => 'executeMigration',
'result' => '',
];

}
$this->view->assignMultiple($assign);
}

public function specificGridMigrateAction(){
$gridelementsElements = $this->migrationRepository->findGridelements();
if(empty($gridelementsElements)){
$assign = [
'action' => 'executeMigration',
'grid' => '',
];
}
else{
$gridElementsArray=[];
$layoutColumns = [];
foreach ($gridelementsElements as $gridElement) {
$columnElement = $this->migrationRepository->findContentfromGridElements($gridElement['uid']);
if($columnElement) {
$columnElementFlip = array_fill_keys(array_column($columnElement, 'tx_gridelements_columns'), '1');
if(!isset($layoutColumns[$gridElement['tx_gridelements_backend_layout']])) $layoutColumns[$gridElement['tx_gridelements_backend_layout']] = [];
if(array_diff_assoc($columnElementFlip, $layoutColumns[$gridElement['tx_gridelements_backend_layout']])) {
$gridElementsArray[$gridElement['tx_gridelements_backend_layout']] = $gridElement;
$layoutColumns[$gridElement['tx_gridelements_backend_layout']] += $columnElementFlip;
}
}
}
$assign = [
"gridelementsElements" => $gridElementsArray,
"layoutColumns" => $layoutColumns,
"grid" => "find",
];
}
$this->view->assignMultiple($assign);
}

public function processMirgrateAction(){
$arguments = $this->request->getArguments();
$migrateAllElements = $this->migrationRepository->updateAllElements($arguments['migrategeneral']['elements']);
$this->view->assignMultiple(
array(
"arguments" => $arguments,
"migrateAllElements" => $migrateAllElements
)
);
}
}
6 changes: 3 additions & 3 deletions Classes/Controller/ProductAreaController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace NITSAN\NsT3dev\Controller;


use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* This file is part of the "T3 Dev" Extension for TYPO3 CMS.
*
Expand Down Expand Up @@ -116,5 +116,5 @@ public function deleteAction(\NITSAN\NsT3dev\Domain\Model\ProductArea $productAr
$this->addFlashMessage('The object was deleted. Please be aware that this action is publicly accessible unless you implement an access check. See https://docs.typo3.org/p/friendsoftypo3/extension-builder/master/en-us/User/Index.html', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING);
$this->productAreaRepository->remove($productArea);
$this->redirect('list');
}
}
}
}
232 changes: 232 additions & 0 deletions Classes/Domain/Repository/MigrationRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
<?php

declare(strict_types=1);

namespace NITSAN\NsT3dev\Domain\Repository;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
/**
* This file is part of the "T3 Dev" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2022 Nilesh Malankiya <[email protected]>, NITSAN Technologies
*/

/**
* The repository for Migration
*/
class MigrationRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
{
public function getGrids(){
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$elementCount = $queryBuilder->count('uid')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('gridelements_pi1', \PDO::PARAM_STR))
)
->execute()->fetchColumn(0);
return (bool)$elementCount && \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('container');
}

public function executeUpdate(): bool
{
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tt_content');
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$statement = $queryBuilder->select('uid', 'tx_gridelements_backend_layout')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('gridelements_pi1', \PDO::PARAM_STR)),
)
->execute();
while ($record = $statement->fetchAll()) {
foreach ($record as $key => $value) {
$cType = $value['tx_gridelements_backend_layout'];
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->update('tt_content')
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($value['uid'], \PDO::PARAM_INT)
)
)
->set('CType', $cType);
$queryBuilder->execute();
}
$queryBuilder = $connection->createQueryBuilder();
$statement = $queryBuilder->select('uid', 'tx_gridelements_columns', 'tx_gridelements_container')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('colPos', $queryBuilder->createNamedParameter('-1', \PDO::PARAM_STR)),
)
->execute();

while ($record = $statement->fetchAll()) {
foreach ($record as $key => $value) {
$colPos = $value['tx_gridelements_columns'] + 100;
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->update('tt_content')
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($value['uid'], \PDO::PARAM_INT)
)
)
->set('colPos', $colPos)
->set('tx_gridelements_container', 0)
->set('tx_gridelements_columns', 0)
->set('tx_container_parent', $value['tx_gridelements_container']);
$queryBuilder->execute();
}
return true;
}
}
}

/**
* @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
*/
public function findGridelements()
{
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$results = $queryBuilder
->select('*')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('gridelements_pi1', \PDO::PARAM_STR))
)
->execute()
->fetchAll(\Doctrine\DBAL\FetchMode::ASSOCIATIVE);

return $results;
}

public function findContentfromGridElements($id)
{
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

$results = $queryBuilder
->select('*')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('tx_gridelements_container', $id)
)
->execute()
->fetchAll(\Doctrine\DBAL\FetchMode::ASSOCIATIVE);
return $results;
}


/**
* @param $elementsArray
* @return bool
*/
public function updateAllElements($elementsArray)
{

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

foreach ($elementsArray as $key => $element) {
if ($elementsArray[$key]['active'] == 1) {
$elementsArray[$key]['contentelements'] = $queryBuilder
->select('*')
->from('tt_content')
->where(
$queryBuilder->expr()->like('CType', '"%gridelements_pi%"'),
$queryBuilder->expr()->eq('tx_gridelements_backend_layout',
$queryBuilder->createNamedParameter($key))
)
->execute()
->fetchAll(\Doctrine\DBAL\FetchMode::ASSOCIATIVE);
} else {
unset($elementsArray[$key]);
}
}

$contentElementResults = [];
foreach ($elementsArray as $key => $results) {
foreach ($results as $key2 => $elements) {
if ($key2 == 'contentelements') {
foreach ($results[$key2] as $element) {

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

// Find Content Elements uids in a Grid
$contentElements = $queryBuilder
->select('*')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('tx_gridelements_container', $element['uid'])
)
->execute()
->fetchAll(\Doctrine\DBAL\FetchMode::ASSOCIATIVE);
foreach ($contentElements as $contentElement) {
$contentElementResults['parents'][$contentElement['uid']] = $contentElement['tx_gridelements_container'];
}
$contentElementResults[$key]['elements'][$element['uid']] = $contentElements;
}
}
}
}
// $contentElementResults - All elements uids which is stored in Grid
foreach ($contentElementResults as $grids) {
foreach ($grids as $key => $contents) {
foreach ($grids['elements'] as $key3 => $elements) {
foreach ($elements as $element) {
if ($element['tx_gridelements_columns']) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

$queryBuilder->update('tt_content')
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($element['uid'], \PDO::PARAM_INT)
)
)
->set('colPos', $element['tx_gridelements_columns'] + 100)
->set('tx_gridelements_container', 0)
->set('tx_gridelements_columns', 0)
->set('tx_container_parent', $element['tx_gridelements_container']);
$queryBuilder->execute();
}
}
}
}
}

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

foreach ($elementsArray as $results) {
foreach ($results as $key => $elements) {
if ($key == 'contentelements') {
foreach ($results[$key] as $element) {

$queryBuilder->update('tt_content')
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($element['uid'], \PDO::PARAM_INT)
)
)
->set('CType', $results['containername'])
->set('pi_flexform', '')
->set('tx_gridelements_backend_layout', '');
$queryBuilder->execute();
}
}
}
}
return true;
}
}
5 changes: 4 additions & 1 deletion Classes/Domain/Repository/ProductAreaRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace NITSAN\NsT3dev\Domain\Repository;


use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
/**
* This file is part of the "T3 Dev" Extension for TYPO3 CMS.
*
Expand All @@ -19,4 +21,5 @@
*/
class ProductAreaRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
{

}
Loading