|
|
@@ -9,11 +9,8 @@ use Opentalent\OtCore\Domain\Repository\OrganizationRepository;
|
|
|
use Opentalent\OtCore\Exception\ApiRequestException;
|
|
|
use Opentalent\OtCore\Page\OtPageRepository;
|
|
|
use PDO;
|
|
|
-use Psr\Log\LoggerAwareInterface;
|
|
|
use Symfony\Component\Yaml\Yaml;
|
|
|
-use TYPO3\CMS\Core\Cache\CacheManager;
|
|
|
use TYPO3\CMS\Core\Crypto\Random;
|
|
|
-use TYPO3\CMS\Core\Database\ConnectionPool;
|
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
|
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
|
|
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
|
|
@@ -70,10 +67,24 @@ class SiteController extends ActionController
|
|
|
const MODE_DEV = 1;
|
|
|
|
|
|
/**
|
|
|
- * Doctrine connection pool
|
|
|
- * @var object|LoggerAwareInterface|\TYPO3\CMS\Core\SingletonInterface
|
|
|
+ * @var \TYPO3\CMS\Core\Database\ConnectionPool
|
|
|
*/
|
|
|
- private $cnnPool;
|
|
|
+ private $connectionPool;
|
|
|
+
|
|
|
+ public function injectConnectionPool(\TYPO3\CMS\Core\Database\ConnectionPool $connectionPool)
|
|
|
+ {
|
|
|
+ $this->connectionPool = $connectionPool;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var \TYPO3\CMS\Core\Cache\CacheManager
|
|
|
+ */
|
|
|
+ private $cacheManager;
|
|
|
+
|
|
|
+ public function injectCacheManager(\TYPO3\CMS\Core\Cache\CacheManager $cacheManager)
|
|
|
+ {
|
|
|
+ $this->cacheManager = $cacheManager;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Index of the pages created during the process
|
|
|
@@ -97,7 +108,6 @@ class SiteController extends ActionController
|
|
|
public function __construct()
|
|
|
{
|
|
|
parent::__construct();
|
|
|
- $this->cnnPool = GeneralUtility::makeInstance(ConnectionPool::class);
|
|
|
$this->createdPagesIndex = [];
|
|
|
$this->createdDirs = [];
|
|
|
$this->createdFiles = [];
|
|
|
@@ -128,7 +138,7 @@ class SiteController extends ActionController
|
|
|
// ** Test the existence of a website with this name and or organization id
|
|
|
|
|
|
// Is there a site with this organization's name?
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder->getRestrictions()->removeAll();
|
|
|
$queryBuilder
|
|
|
->select('uid')
|
|
|
@@ -142,7 +152,7 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// Is there a site with this organization's id?
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder->getRestrictions()->removeAll();
|
|
|
$statement = $queryBuilder
|
|
|
->select('uid')
|
|
|
@@ -157,7 +167,7 @@ class SiteController extends ActionController
|
|
|
// ** Create the new website
|
|
|
|
|
|
// start transactions
|
|
|
- $this->cnnPool->getConnectionByName('Default')->beginTransaction();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->beginTransaction();
|
|
|
|
|
|
// keep tracks of the created folders and files to be able to remove them during a rollback
|
|
|
try {
|
|
|
@@ -401,7 +411,7 @@ class SiteController extends ActionController
|
|
|
throw new RuntimeException('Unknown value for $mode: ' . $mode);
|
|
|
}
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_domain');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_domain');
|
|
|
$queryBuilder->insert('sys_domain')
|
|
|
->values([
|
|
|
'pid' => $rootUid,
|
|
|
@@ -420,7 +430,7 @@ class SiteController extends ActionController
|
|
|
$include .= ",EXT:frontend_editing/Configuration/TypoScript/FluidStyledContent9";
|
|
|
$include .= ",EXT:ot_templating/Configuration/TypoScript";
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_template');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_template');
|
|
|
$queryBuilder->insert('sys_template')
|
|
|
->values([
|
|
|
'pid' => $rootUid,
|
|
|
@@ -452,7 +462,7 @@ class SiteController extends ActionController
|
|
|
$this->mkDir($formsDir);
|
|
|
|
|
|
// Insert the filemounts points (sys_filemounts)
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
$queryBuilder->insert('sys_filemounts')
|
|
|
->values([
|
|
|
'title' => 'Documents',
|
|
|
@@ -461,7 +471,7 @@ class SiteController extends ActionController
|
|
|
])
|
|
|
->execute();
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
$queryBuilder->insert('sys_filemounts')
|
|
|
->values([
|
|
|
'title' => 'Forms_' . $organizationId,
|
|
|
@@ -482,7 +492,7 @@ class SiteController extends ActionController
|
|
|
// Update the user TsConfig
|
|
|
$tsconfig = "options.uploadFieldsInTopOfEB = 1\n" .
|
|
|
"options.defaultUploadFolder=1:" . $defaultUploadDir . "\n";
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('be_users');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('be_users');
|
|
|
$queryBuilder
|
|
|
->update('be_users')
|
|
|
->where($queryBuilder->expr()->eq('uid', $beUserUid))
|
|
|
@@ -490,7 +500,7 @@ class SiteController extends ActionController
|
|
|
->execute();
|
|
|
|
|
|
// Give the keys of the website to this user (makes him the owner)
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
foreach($this->createdPagesIndex as $slug => $uid) {
|
|
|
$queryBuilder
|
|
|
->update('pages')
|
|
|
@@ -500,7 +510,7 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// Try to commit the result
|
|
|
- $commitSuccess = $this->cnnPool->getConnectionByName('Default')->commit();
|
|
|
+ $commitSuccess = $this->connectionPool->getConnectionByName('Default')->commit();
|
|
|
if (!$commitSuccess) {
|
|
|
throw new \RuntimeException('Something went wrong while commiting the result');
|
|
|
}
|
|
|
@@ -508,7 +518,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
} catch(\Exception $e) {
|
|
|
// rollback
|
|
|
- $this->cnnPool->getConnectionByName('Default')->rollback();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->rollback();
|
|
|
|
|
|
// remove created files and dirs
|
|
|
foreach (array_reverse($this->createdFiles) as $filename) {
|
|
|
@@ -547,7 +557,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
$constants = $this->getTemplateConstants($organizationId, $organizationExtraData);
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_template');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_template');
|
|
|
$queryBuilder
|
|
|
->update('sys_template')
|
|
|
->set('constants', $constants)
|
|
|
@@ -574,7 +584,7 @@ class SiteController extends ActionController
|
|
|
public function deleteSiteAction(int $organizationId, bool $hard=false) {
|
|
|
$rootUid = $this->findRootUidFor($organizationId);
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$isDeleted = $queryBuilder
|
|
|
->select('deleted')
|
|
|
->from('pages')
|
|
|
@@ -592,13 +602,13 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// start transactions
|
|
|
- $this->cnnPool->getConnectionByName('Default')->beginTransaction();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->beginTransaction();
|
|
|
|
|
|
// keep track of renamed file for an eventual rollback
|
|
|
$renamed = [];
|
|
|
|
|
|
try {
|
|
|
- $repository = new OtPageRepository();
|
|
|
+ $repository = GeneralUtility::makeInstance(ObjectManager::class)->get(OtPageRepository::class);
|
|
|
$pages = $repository->getAllSubpagesForPage($rootUid);
|
|
|
foreach($pages as $page) {
|
|
|
$this->delete('tt_content', 'pid', $page['uid'], $hard);
|
|
|
@@ -720,7 +730,7 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// Try to commit the result (before any eventual file deletion or renaming)
|
|
|
- $commitSuccess = $this->cnnPool->getConnectionByName('Default')->commit();
|
|
|
+ $commitSuccess = $this->connectionPool->getConnectionByName('Default')->commit();
|
|
|
if (!$commitSuccess) {
|
|
|
throw new \RuntimeException('Something went wrong while commiting the result');
|
|
|
}
|
|
|
@@ -728,7 +738,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
} catch(\Exception $e) {
|
|
|
// rollback
|
|
|
- $this->cnnPool->getConnectionByName('Default')->rollback();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->rollback();
|
|
|
if (!$hard) {
|
|
|
foreach ($renamed as $initialPath => $newPath) {
|
|
|
rename($newPath, $initialPath);
|
|
|
@@ -748,7 +758,7 @@ class SiteController extends ActionController
|
|
|
* @param int $hard
|
|
|
*/
|
|
|
private function delete(string $table, string $whereKey, $whereValue, $hard=0) {
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable($table);
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable($table);
|
|
|
if (!$hard) {
|
|
|
$queryBuilder
|
|
|
->update($table)
|
|
|
@@ -768,45 +778,45 @@ class SiteController extends ActionController
|
|
|
$rootUid = $this->findRootUidFor($organizationId);
|
|
|
|
|
|
// start transactions
|
|
|
- $this->cnnPool->getConnectionByName('Default')->beginTransaction();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->beginTransaction();
|
|
|
|
|
|
// keep track of renamed file for an eventual rollback
|
|
|
$renamed = [];
|
|
|
|
|
|
try {
|
|
|
- $repository = new OtPageRepository();
|
|
|
+ $repository = GeneralUtility::makeInstance(ObjectManager::class)->get(OtPageRepository::class);
|
|
|
$pages = $repository->getAllSubpagesForPage($rootUid);
|
|
|
|
|
|
foreach($pages as $page) {
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('tt_content');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('tt_content');
|
|
|
$queryBuilder
|
|
|
->update('tt_content')
|
|
|
->set('deleted', 0)
|
|
|
->where($queryBuilder->expr()->eq('pid', $page['uid']))
|
|
|
->execute();
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder
|
|
|
->update('pages')
|
|
|
->set('deleted', 0)
|
|
|
->where($queryBuilder->expr()->eq('uid', $page['uid']))
|
|
|
->execute();
|
|
|
}
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('tt_content');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('tt_content');
|
|
|
$queryBuilder
|
|
|
->update('tt_content')
|
|
|
->set('deleted', 0)
|
|
|
->where($queryBuilder->expr()->eq('pid', $rootUid))
|
|
|
->execute();
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder
|
|
|
->update('pages')
|
|
|
->set('deleted', 0)
|
|
|
->where($queryBuilder->expr()->eq('uid', $rootUid))
|
|
|
->execute();
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_template');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_template');
|
|
|
$queryBuilder
|
|
|
->update('sys_template')
|
|
|
->set('deleted', 0)
|
|
|
@@ -814,7 +824,7 @@ class SiteController extends ActionController
|
|
|
->execute();
|
|
|
|
|
|
// remove filemounts
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
$queryBuilder
|
|
|
->update('sys_filemounts')
|
|
|
->set('deleted', 0)
|
|
|
@@ -827,7 +837,7 @@ class SiteController extends ActionController
|
|
|
->where($queryBuilder->expr()->eq('path', "'/user_upload/" . $organizationId . "/Forms'"))
|
|
|
->execute();
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('be_users');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('be_users');
|
|
|
$queryBuilder
|
|
|
->update('be_users')
|
|
|
->set('deleted', 0)
|
|
|
@@ -873,7 +883,7 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// Try to commit the result
|
|
|
- $commitSuccess = $this->cnnPool->getConnectionByName('Default')->commit();
|
|
|
+ $commitSuccess = $this->connectionPool->getConnectionByName('Default')->commit();
|
|
|
if (!$commitSuccess) {
|
|
|
throw new \RuntimeException('Something went wrong while commiting the result');
|
|
|
}
|
|
|
@@ -881,7 +891,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
} catch(\Exception $e) {
|
|
|
// rollback
|
|
|
- $this->cnnPool->getConnectionByName('Default')->rollback();
|
|
|
+ $this->connectionPool->getConnectionByName('Default')->rollback();
|
|
|
foreach ($renamed as $initialPath => $newPath) {
|
|
|
rename($newPath, $initialPath);
|
|
|
}
|
|
|
@@ -911,11 +921,7 @@ class SiteController extends ActionController
|
|
|
* @return Organization
|
|
|
*/
|
|
|
private function fetchOrganization($organizationId) {
|
|
|
- $manager = GeneralUtility::makeInstance(ObjectManager::class);
|
|
|
- $organizationRepository = GeneralUtility::makeInstance(
|
|
|
- OrganizationRepository::class,
|
|
|
- $manager
|
|
|
- );
|
|
|
+ $organizationRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(OrganizationRepository::class);
|
|
|
try {
|
|
|
return $organizationRepository->findById($organizationId);
|
|
|
} catch (ApiRequestException $e) {
|
|
|
@@ -930,7 +936,7 @@ class SiteController extends ActionController
|
|
|
* @return int
|
|
|
*/
|
|
|
private function findRootUidFor($organizationId) {
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder->getRestrictions()->removeAll();
|
|
|
$rootUid = $queryBuilder
|
|
|
->select('uid')
|
|
|
@@ -945,7 +951,7 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
$organization = $this->fetchOrganization($organizationId);
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$rootUid = $queryBuilder
|
|
|
->count('uid')
|
|
|
->from('pages')
|
|
|
@@ -969,7 +975,7 @@ class SiteController extends ActionController
|
|
|
*/
|
|
|
private function getParentFolderUid() {
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$siteCount = $queryBuilder
|
|
|
->count('uid')
|
|
|
->from('pages')
|
|
|
@@ -981,7 +987,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
$folderName = "Web Sites " . (1000 * $thousand) . " - " . ((1000 * $thousand) + 999);
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$uid = $queryBuilder
|
|
|
->select('uid')
|
|
|
->from('pages')
|
|
|
@@ -991,7 +997,7 @@ class SiteController extends ActionController
|
|
|
->fetchColumn(0);
|
|
|
|
|
|
if ($uid == null) {
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder->insert('pages')
|
|
|
->values([
|
|
|
'pid' => 0,
|
|
|
@@ -1049,7 +1055,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
$values = array_merge($defaultValues, $moreValues);
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('pages');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
|
|
|
$queryBuilder->insert('pages')
|
|
|
->values($values)
|
|
|
->execute();
|
|
|
@@ -1107,7 +1113,7 @@ class SiteController extends ActionController
|
|
|
|
|
|
$values = array_merge($defaultValues, $moreValues);
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('tt_content');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('tt_content');
|
|
|
$queryBuilder->insert('tt_content')
|
|
|
->values($values)
|
|
|
->execute();
|
|
|
@@ -1299,10 +1305,9 @@ class SiteController extends ActionController
|
|
|
}
|
|
|
|
|
|
// Flush cache:
|
|
|
- $cacheSystem = GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_core');
|
|
|
+ $cacheSystem = $this->cacheManager->getCache('cache_core');
|
|
|
$cacheSystem->remove('site-configuration');
|
|
|
$cacheSystem->remove('pseudo-sites');
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1329,7 +1334,7 @@ class SiteController extends ActionController
|
|
|
$randomStr = (new Random)->generateRandomHexString(20);
|
|
|
|
|
|
// get the existing filemounts
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_filemounts');
|
|
|
$queryBuilder
|
|
|
->select('uid')
|
|
|
->from('sys_filemounts')
|
|
|
@@ -1358,7 +1363,7 @@ class SiteController extends ActionController
|
|
|
'tx_opentalent_generationDate' => date('Y/m/d H:i:s')
|
|
|
];
|
|
|
|
|
|
- $queryBuilder = $this->cnnPool->getQueryBuilderForTable('be_users');
|
|
|
+ $queryBuilder = $this->connectionPool->getQueryBuilderForTable('be_users');
|
|
|
$queryBuilder->insert('be_users')
|
|
|
->values($values)
|
|
|
->execute();
|