Compare commits
No commits in common. "master" and "599dc81f7a2ac343c935642e1670986d4c66677e" have entirely different histories.
master
...
599dc81f7a
@ -12,28 +12,17 @@ namespace Cjel\TemplatesAide\Controller;
|
|||||||
*
|
*
|
||||||
***/
|
***/
|
||||||
|
|
||||||
use Cjel\TemplatesAide\Traits\FormatResultTrait;
|
|
||||||
use Cjel\TemplatesAide\Traits\ValidationTrait;
|
use Cjel\TemplatesAide\Traits\ValidationTrait;
|
||||||
|
use Cjel\TemplatesAide\Traits\FormatResultTrait;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
use TYPO3\CMS\Core\Cache\CacheManager;
|
use TYPO3\CMS\Core\Cache\CacheManager;
|
||||||
use TYPO3\CMS\Core\Context\Context;
|
|
||||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||||
use TYPO3\CMS\Core\Database\Query\Restriction\DefaultRestrictionContainer;
|
use TYPO3\CMS\Core\Database\Query\Restriction\DefaultRestrictionContainer;
|
||||||
use TYPO3\CMS\Core\Http\Response;
|
|
||||||
use TYPO3\CMS\Core\Http\ServerRequestFactory;
|
|
||||||
use TYPO3\CMS\Core\Localization\LanguageService;
|
|
||||||
use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
|
|
||||||
use TYPO3\CMS\Core\Log\LogManager;
|
use TYPO3\CMS\Core\Log\LogManager;
|
||||||
use TYPO3\CMS\Core\Routing\SiteMatcher;
|
|
||||||
use TYPO3\CMS\Core\Site\SiteFinder;
|
|
||||||
use TYPO3\CMS\Core\TypoScript\TemplateService;
|
|
||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
use TYPO3\CMS\Core\Utility\RootlineUtility;
|
|
||||||
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
||||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||||
use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper;
|
|
||||||
use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
|
|
||||||
use TYPO3\CMS\Extbase\Reflection\ClassSchema;
|
use TYPO3\CMS\Extbase\Reflection\ClassSchema;
|
||||||
use TYPO3\CMS\Extbase\Reflection\ReflectionService;
|
use TYPO3\CMS\Extbase\Reflection\ReflectionService;
|
||||||
use TYPO3\CMS\Frontend\Plugin\AbstractPlugin;
|
use TYPO3\CMS\Frontend\Plugin\AbstractPlugin;
|
||||||
@ -97,16 +86,6 @@ class AbstractEIDController
|
|||||||
*/
|
*/
|
||||||
protected $importLogger = null;
|
protected $importLogger = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* uriMapping
|
|
||||||
*/
|
|
||||||
protected $uriMapping = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* uriMappingValues
|
|
||||||
*/
|
|
||||||
protected $uriMappingValues = [];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* returns the extensionkey set in the exended calss
|
* returns the extensionkey set in the exended calss
|
||||||
@ -156,26 +135,15 @@ class AbstractEIDController
|
|||||||
$this->importLogger = $this->logManager->getLogger(
|
$this->importLogger = $this->logManager->getLogger(
|
||||||
'importLogger'
|
'importLogger'
|
||||||
);
|
);
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$this->reflectionService = GeneralUtility::makeInstance(
|
||||||
$this->reflectionService = GeneralUtility::makeInstance(
|
ReflectionService::class, GeneralUtility::makeInstance(
|
||||||
ReflectionService::class
|
CacheManager::class
|
||||||
);
|
)
|
||||||
} else {
|
);
|
||||||
$this->reflectionService = GeneralUtility::makeInstance(
|
|
||||||
ReflectionService::class, GeneralUtility::makeInstance(
|
|
||||||
CacheManager::class
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$classInfo = $this->reflectionService->getClassSchema(
|
$classInfo = $this->reflectionService->getClassSchema(
|
||||||
get_class($this)
|
get_class($this)
|
||||||
);
|
);
|
||||||
foreach ($classInfo->getInjectMethods() as $method => $className) {
|
foreach ($classInfo->getInjectMethods() as $method => $className) {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
|
||||||
$className = $className
|
|
||||||
->getFirstParameter()
|
|
||||||
->getDependency();
|
|
||||||
}
|
|
||||||
$class = $this->objectManager->get(
|
$class = $this->objectManager->get(
|
||||||
$className
|
$className
|
||||||
);
|
);
|
||||||
@ -188,37 +156,45 @@ class AbstractEIDController
|
|||||||
*/
|
*/
|
||||||
private function initFrontendController()
|
private function initFrontendController()
|
||||||
{
|
{
|
||||||
$request = ServerRequestFactory::fromGlobals();
|
$currentDomain = strtok(GeneralUtility::getIndpEnv('HTTP_HOST'), ':');
|
||||||
$context = GeneralUtility::makeInstance(Context::class);
|
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
|
||||||
$siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
|
->getQueryBuilderForTable('sys_domain');
|
||||||
$siteMatcher = GeneralUtility::makeInstance(SiteMatcher::class);
|
$queryBuilder->setRestrictions(
|
||||||
$site = $siteMatcher->matchRequest($request);
|
GeneralUtility::makeInstance(DefaultRestrictionContainer::class)
|
||||||
$pageId = $site->getSite()->getRootPageId();
|
|
||||||
$template = GeneralUtility::makeInstance(TemplateService::class);
|
|
||||||
$template->tt_track = false;
|
|
||||||
$rootline = GeneralUtility::makeInstance(
|
|
||||||
RootlineUtility::class, $pageId
|
|
||||||
)->get();
|
|
||||||
$template->runThroughTemplates($rootline, 0);
|
|
||||||
$template->generateConfig();
|
|
||||||
$setup = $template->setup;
|
|
||||||
$setup = GeneralUtility::removeDotsFromTS($setup);
|
|
||||||
$extKey = 'tx_' . $this->getExtensionKey();
|
|
||||||
if (array_key_exists('plugin', $setup)
|
|
||||||
&& array_key_exists($extKey, $setup['plugin'])
|
|
||||||
&& array_key_exists('persistence', $setup['plugin'][$extKey])
|
|
||||||
&& array_key_exists('storagePid', $setup['plugin'][$extKey]['persistence'])
|
|
||||||
) {
|
|
||||||
$storagePids = $setup['plugin'][$extKey]['persistence']['storagePid'];
|
|
||||||
$this->storagePids = GeneralUtility::trimExplode(
|
|
||||||
',',
|
|
||||||
$storagePids
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$languageServiceFactory = GeneralUtility::makeInstance(
|
|
||||||
LanguageServiceFactory::class
|
|
||||||
);
|
);
|
||||||
$GLOBALS['LANG'] = $languageServiceFactory->create('default');
|
$result = $queryBuilder
|
||||||
|
->select('uid', 'pid', 'domainName')
|
||||||
|
->from('sys_domain')
|
||||||
|
->where(
|
||||||
|
$queryBuilder->expr()->eq(
|
||||||
|
'domainName',
|
||||||
|
$queryBuilder->createNamedParameter(
|
||||||
|
$currentDomain,
|
||||||
|
\PDO::PARAM_STR
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
->orderBy('sorting', 'ASC')
|
||||||
|
->execute()
|
||||||
|
->fetchAll();
|
||||||
|
//if (count($result) < 1) {
|
||||||
|
// throw new \Exception('Domain not configured');
|
||||||
|
//}
|
||||||
|
$frontendController = GeneralUtility::makeInstance(
|
||||||
|
\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::class,
|
||||||
|
$GLOBALS['TYPO3_CONF_VARS'],
|
||||||
|
null,
|
||||||
|
0,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$GLOBALS['TSFE'] = $frontendController;
|
||||||
|
$frontendController->connectToDB();
|
||||||
|
$frontendController->fe_user = EidUtility::initFeUser();
|
||||||
|
$frontendController->id = $result[0]['pid'];
|
||||||
|
$frontendController->determineId();
|
||||||
|
$frontendController->initTemplate();
|
||||||
|
$frontendController->getConfigArray();
|
||||||
|
EidUtility::initTCA();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -241,46 +217,16 @@ class AbstractEIDController
|
|||||||
return $response->withStatus(404);
|
return $response->withStatus(404);
|
||||||
}
|
}
|
||||||
$httpMethod = strtolower($request->getMethod());
|
$httpMethod = strtolower($request->getMethod());
|
||||||
if ($this->uriMapping) {
|
if ($apiObjectId) {
|
||||||
$uriParts = explode('/', $request->getUri()->getPath());
|
$requestMethod = $httpMethod
|
||||||
$uriParts = array_slice($uriParts, 3);
|
. ucfirst($apiObject)
|
||||||
foreach ($this->uriMapping[$httpMethod] as $mapping => $function) {
|
. 'SingleRequest';
|
||||||
$mappingParts = explode('/', $mapping);
|
$request->apiObjectId = $apiObjectId;
|
||||||
$mappingParts = array_slice($mappingParts, 1);
|
|
||||||
$max = max(count($mappingParts), count($uriParts));
|
|
||||||
$mappingMatching = true;
|
|
||||||
for ($i = 0; $i < $max; $i++) {
|
|
||||||
if ($uriParts[$i] == $mappingParts[$i]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
$uriParts[$i]
|
|
||||||
&& substr($mappingParts[$i], 0, 1) == '{'
|
|
||||||
&& substr($mappingParts[$i], -1, 1) == '}'
|
|
||||||
) {
|
|
||||||
$mappingKey = substr($mappingParts[$i], 1, -1);
|
|
||||||
$this->uriMappingValues[$mappingKey] = $uriParts[$i];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$mappingMatching = false;
|
|
||||||
}
|
|
||||||
if ($mappingMatching == true) {
|
|
||||||
$requestMethod = $function . 'Request';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if ($apiObjectId) {
|
$requestMethod = $httpMethod
|
||||||
$requestMethod = $httpMethod
|
. ucfirst($apiObject)
|
||||||
. ucfirst($apiObject)
|
. 'Request';
|
||||||
. 'SingleRequest';
|
|
||||||
$request->apiObjectId = $apiObjectId;
|
|
||||||
} else {
|
|
||||||
$requestMethod = $httpMethod
|
|
||||||
. ucfirst($apiObject)
|
|
||||||
. 'Request';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$response = new Response();
|
|
||||||
if (method_exists($this, $requestMethod)) {
|
if (method_exists($this, $requestMethod)) {
|
||||||
$responseData = $this->$requestMethod($request, $response);
|
$responseData = $this->$requestMethod($request, $response);
|
||||||
$response = $response->withHeader(
|
$response = $response->withHeader(
|
||||||
@ -311,17 +257,6 @@ class AbstractEIDController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function persistAll()
|
|
||||||
{
|
|
||||||
($this->objectManager->get(
|
|
||||||
PersistenceManager::class
|
|
||||||
))->persistAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return function
|
* return function
|
||||||
*
|
*
|
||||||
|
@ -27,8 +27,6 @@ use TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationBuilder;
|
|||||||
use TYPO3\CMS\Extbase\Service\EnvironmentService;
|
use TYPO3\CMS\Extbase\Service\EnvironmentService;
|
||||||
use TYPO3\CMS\Extbase\Service\ExtensionService;
|
use TYPO3\CMS\Extbase\Service\ExtensionService;
|
||||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||||
use Blueways\BwCaptcha\Validation\Validator\CaptchaValidator;
|
|
||||||
use TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication;
|
|
||||||
|
|
||||||
class ActionController extends BaseController
|
class ActionController extends BaseController
|
||||||
{
|
{
|
||||||
@ -143,11 +141,6 @@ class ActionController extends BaseController
|
|||||||
*/
|
*/
|
||||||
protected $propertyMapperConfigurationBuilder;
|
protected $propertyMapperConfigurationBuilder;
|
||||||
|
|
||||||
/**
|
|
||||||
* translation extensions
|
|
||||||
*/
|
|
||||||
protected $translations = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \TYPO3\CMS\Extbase\Service\ExtensionService $extensionService
|
* @param \TYPO3\CMS\Extbase\Service\ExtensionService $extensionService
|
||||||
*/
|
*/
|
||||||
@ -172,6 +165,22 @@ class ActionController extends BaseController
|
|||||||
$this->environmentService = $environmentService;
|
$this->environmentService = $environmentService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* propertyMapper
|
||||||
|
*
|
||||||
|
* @var PropertyMapper
|
||||||
|
*/
|
||||||
|
protected $propertyMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param
|
||||||
|
*/
|
||||||
|
public function injectPropertyMapper(
|
||||||
|
PropertyMapper $propertyMapper
|
||||||
|
) {
|
||||||
|
$this->propertyMapper = $propertyMapper;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* propertyMappingConfigurationBuilder
|
* propertyMappingConfigurationBuilder
|
||||||
*
|
*
|
||||||
@ -479,8 +488,18 @@ class ActionController extends BaseController
|
|||||||
if ($error->keyword() == 'additionalProperties') {
|
if ($error->keyword() == 'additionalProperties') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch ($error->keyword()) {
|
if ($error->keyword() != 'required') {
|
||||||
case 'required':
|
$errorLabel = $this->getTranslation(
|
||||||
|
'error.' . $field . '.' . $error->keyword()
|
||||||
|
);
|
||||||
|
if ($errorLabel == null) {
|
||||||
|
$errorLabel = 'error.'
|
||||||
|
. $field
|
||||||
|
. '.'
|
||||||
|
. $error->keyword();
|
||||||
|
}
|
||||||
|
$this->errorLabels[$field] = $errorLabel;
|
||||||
|
} else {
|
||||||
$errorLabel = $this->getTranslation(
|
$errorLabel = $this->getTranslation(
|
||||||
'error.' . $field . '.required'
|
'error.' . $field . '.required'
|
||||||
);
|
);
|
||||||
@ -499,59 +518,6 @@ class ActionController extends BaseController
|
|||||||
. $error->keyword();
|
. $error->keyword();
|
||||||
}
|
}
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
$this->errorLabels[$field] = $errorLabel;
|
||||||
break;
|
|
||||||
case 'pattern':
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.pattern'
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$fieldLabel = $this->getTranslation(
|
|
||||||
'field.' . $field
|
|
||||||
);
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.pattern', [$fieldLabel]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
case 'format':
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.format'
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$fieldLabel = $this->getTranslation(
|
|
||||||
'field.' . $field
|
|
||||||
);
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.format', [$fieldLabel]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.' . $error->keyword()
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -586,7 +552,7 @@ class ActionController extends BaseController
|
|||||||
if (in_array($argument->getName(), ['step', 'submit', $object])) {
|
if (in_array($argument->getName(), ['step', 'submit', $object])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (is_string($argument->getValue()) && method_exists($argument->getValue(), 'getUid')) {
|
if (method_exists($argument->getValue(), 'getUid')) {
|
||||||
$pluginArguments[$argument->getName()]
|
$pluginArguments[$argument->getName()]
|
||||||
= $argument->getValue()->getUid();
|
= $argument->getValue()->getUid();
|
||||||
} else {
|
} else {
|
||||||
@ -607,26 +573,10 @@ class ActionController extends BaseController
|
|||||||
$this->request->getControllerActionName(),
|
$this->request->getControllerActionName(),
|
||||||
$pluginArguments
|
$pluginArguments
|
||||||
);
|
);
|
||||||
$uriTranslation = $this->getControllerContext()
|
|
||||||
->getUriBuilder()
|
|
||||||
->reset()
|
|
||||||
->setCreateAbsoluteUri(true)
|
|
||||||
->setAddQueryString(true)
|
|
||||||
->setTargetPageType(6001)
|
|
||||||
->uriFor(
|
|
||||||
'translations',
|
|
||||||
[
|
|
||||||
'extensions' => $this->translations,
|
|
||||||
],
|
|
||||||
'Translation',
|
|
||||||
'TemplatesAide',
|
|
||||||
'Translationplugin'
|
|
||||||
);
|
|
||||||
$this->ajaxEnv = [
|
$this->ajaxEnv = [
|
||||||
'uri' => $uri,
|
'uri' => $uri,
|
||||||
'uriTranslation' => $uriTranslation,
|
'object' => $object,
|
||||||
'object' => $object,
|
'namespace' => $this->getPluginNamespace(),
|
||||||
'namespace' => $this->getPluginNamespace(),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,36 +712,11 @@ class ActionController extends BaseController
|
|||||||
}
|
}
|
||||||
if ($this->pageType) {
|
if ($this->pageType) {
|
||||||
if (is_array($this->responseStatus)) {
|
if (is_array($this->responseStatus)) {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$this->response->setStatus(
|
||||||
$response = $this
|
array_key_first($this->responseStatus)
|
||||||
->responseFactory
|
);
|
||||||
->createResponse()
|
|
||||||
->withHeader(
|
|
||||||
'Content-Type',
|
|
||||||
'application/json; charset=utf-8'
|
|
||||||
)
|
|
||||||
->withStatus(
|
|
||||||
array_key_first($this->responseStatus),
|
|
||||||
''
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$this->response->setStatus(
|
|
||||||
array_key_first($this->responseStatus)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$this->response->setStatus($this->responseStatus);
|
||||||
$response = $this
|
|
||||||
->responseFactory
|
|
||||||
->createResponse()
|
|
||||||
->withHeader(
|
|
||||||
'Content-Type',
|
|
||||||
'application/json; charset=utf-8'
|
|
||||||
)
|
|
||||||
->withStatus($this->responseStatus, '');
|
|
||||||
} else {
|
|
||||||
$this->response->setStatus($this->responseStatus);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($this->pageType == $this->ajaxPageType) {
|
if ($this->pageType == $this->ajaxPageType) {
|
||||||
if ($this->environmentService->isEnvironmentInBackendMode()) {
|
if ($this->environmentService->isEnvironmentInBackendMode()) {
|
||||||
@ -807,12 +732,7 @@ class ActionController extends BaseController
|
|||||||
if ($this->reload) {
|
if ($this->reload) {
|
||||||
$result['reload'] = true;
|
$result['reload'] = true;
|
||||||
}
|
}
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
return json_encode($result);
|
||||||
$response->getBody()->write(json_encode($result));
|
|
||||||
return $response;
|
|
||||||
} else {
|
|
||||||
return json_encode($result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$result = array_merge(
|
$result = array_merge(
|
||||||
$result,
|
$result,
|
||||||
@ -827,53 +747,5 @@ class ActionController extends BaseController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
$this->view->assignMultiple($result);
|
$this->view->assignMultiple($result);
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
|
||||||
return $this
|
|
||||||
->responseFactory
|
|
||||||
->createResponse()
|
|
||||||
->withHeader('Content-Type', 'text/html; charset=utf-8')
|
|
||||||
->withBody($this->streamFactory->createStream(
|
|
||||||
(string)($html ?? $this->view->render()))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** **/
|
|
||||||
protected function valideCaptcha($captchaId, $value
|
|
||||||
) {
|
|
||||||
$captchaPhrases = $this->getFeUser()->getKey('ses', 'captchaPhrases');
|
|
||||||
if (!$captchaPhrases || !is_array($captchaPhrases) || !is_string($value)) {
|
|
||||||
$this->addValidationError(
|
|
||||||
'captcha',
|
|
||||||
'validator.notvalid'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// get captcha secret from cache and compare
|
|
||||||
$time = time();
|
|
||||||
$captchaPhrases = array_filter(
|
|
||||||
$captchaPhrases,
|
|
||||||
function ($captchaLifetime) use ($time) {
|
|
||||||
return $captchaLifetime > $time;
|
|
||||||
},
|
|
||||||
ARRAY_FILTER_USE_KEY
|
|
||||||
);
|
|
||||||
foreach ($captchaPhrases as $lifetime => $captchaPhrase) {
|
|
||||||
$isValid = !empty($captchaPhrase) && $captchaPhrase === $value;
|
|
||||||
if ($isValid) {
|
|
||||||
// remove solved captcha
|
|
||||||
unset($captchaPhrases[$lifetime]);
|
|
||||||
$this->getFeUser()->setKey('ses', 'captchaPhrases', $captchaPhrases);
|
|
||||||
$this->getFeUser()->storeSessionData();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->addValidationError(
|
|
||||||
'captcha',
|
|
||||||
'validator.notvalid'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getFeUser(): FrontendUserAuthentication
|
|
||||||
{
|
|
||||||
return $GLOBALS['TSFE']->fe_user;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Controller;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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) 2024 Philipp Dieter <philippdieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use TYPO3\CMS\Core\Localization\LocalizationFactory;
|
|
||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TranslationController
|
|
||||||
*/
|
|
||||||
class TranslationController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
|
|
||||||
{
|
|
||||||
|
|
||||||
protected static $locallangPath = 'Resources/Private/Language/';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* action translations
|
|
||||||
*
|
|
||||||
* @param array $extensions
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function translationsAction($extensions = [])
|
|
||||||
{
|
|
||||||
$result = [];
|
|
||||||
foreach ($extensions as $extension) {
|
|
||||||
$langfilePath = 'EXT:'
|
|
||||||
. GeneralUtility::camelCaseToLowerCaseUnderscored($extension)
|
|
||||||
. '/'
|
|
||||||
. self::$locallangPath
|
|
||||||
. 'locallang.xlf';
|
|
||||||
$languageFactory = GeneralUtility::makeInstance(
|
|
||||||
LocalizationFactory::class
|
|
||||||
);
|
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
|
||||||
$language = $this->request->getAttribute('language');
|
|
||||||
} else {
|
|
||||||
$language = $GLOBALS['TYPO3_REQUEST']->getAttribute('language');
|
|
||||||
}
|
|
||||||
$locale = $language->getLocale();
|
|
||||||
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
|
||||||
// $locale, '$locale', 3, true, false
|
|
||||||
//);
|
|
||||||
$langfileContent = $languageFactory->getParsedData(
|
|
||||||
$langfilePath,
|
|
||||||
$locale
|
|
||||||
);
|
|
||||||
$langfileResult = [];
|
|
||||||
foreach (reset($langfileContent) as $key => $row) {
|
|
||||||
$langfileResult[$key] = reset($row)['target'];
|
|
||||||
}
|
|
||||||
$result[$extension] = $langfileResult;
|
|
||||||
}
|
|
||||||
$GLOBALS['TSFE']->setContentType('application/json');
|
|
||||||
return json_encode($result);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Domain\Model;
|
|
||||||
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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) 2024 Philipp Dieter <philippdieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
/**
|
|
||||||
* Translation
|
|
||||||
*/
|
|
||||||
class Translation extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
|
|
||||||
{
|
|
||||||
}
|
|
@ -102,17 +102,11 @@ trait DependencyInjectionTrait
|
|||||||
$frameworkConfiguration['persistence']['storagePid']
|
$frameworkConfiguration['persistence']['storagePid']
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$this->reflectionService = GeneralUtility::makeInstance(
|
||||||
$this->reflectionService = GeneralUtility::makeInstance(
|
ReflectionService::class, GeneralUtility::makeInstance(
|
||||||
ReflectionService::class
|
CacheManager::class
|
||||||
);
|
)
|
||||||
} else {
|
);
|
||||||
$this->reflectionService = GeneralUtility::makeInstance(
|
|
||||||
ReflectionService::class, GeneralUtility::makeInstance(
|
|
||||||
CacheManager::class
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$classInfo = $this->reflectionService->getClassSchema(
|
$classInfo = $this->reflectionService->getClassSchema(
|
||||||
get_class($this)
|
get_class($this)
|
||||||
);
|
);
|
||||||
|
@ -119,14 +119,10 @@ trait ValidationTrait
|
|||||||
* @param schema
|
* @param schema
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function validateAgainstSchema(
|
protected function validateAgainstSchema($input, $schema)
|
||||||
$input, $schema, $translate = false
|
{
|
||||||
) {
|
|
||||||
$validator = new Validator();
|
$validator = new Validator();
|
||||||
$input = ArrayUtility::removeEmptyStrings($input);
|
$input = ArrayUtility::removeEmptyStrings($input);
|
||||||
if (is_array($input) && array_key_exists('eID', $input)) {
|
|
||||||
unset($input['eID']);
|
|
||||||
}
|
|
||||||
//@TODO make optional when usiing rest api
|
//@TODO make optional when usiing rest api
|
||||||
//array_walk_recursive(
|
//array_walk_recursive(
|
||||||
// $input,
|
// $input,
|
||||||
@ -142,7 +138,6 @@ trait ValidationTrait
|
|||||||
json_encode($schema),
|
json_encode($schema),
|
||||||
-1
|
-1
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!$validationResult->isValid()) {
|
if (!$validationResult->isValid()) {
|
||||||
$this->isValid = false;
|
$this->isValid = false;
|
||||||
$this->responseStatus = [400 => 'validationError'];
|
$this->responseStatus = [400 => 'validationError'];
|
||||||
@ -168,9 +163,6 @@ trait ValidationTrait
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($translate) {
|
|
||||||
$this->translateErrorMessages($validationResult);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return $validationResult;
|
return $validationResult;
|
||||||
}
|
}
|
||||||
@ -218,8 +210,7 @@ trait ValidationTrait
|
|||||||
$translation = LocalizationUtility::translate(
|
$translation = LocalizationUtility::translate(
|
||||||
$key,
|
$key,
|
||||||
$this->getExtensionKey(),
|
$this->getExtensionKey(),
|
||||||
$arguments,
|
$arguments
|
||||||
'de'
|
|
||||||
);
|
);
|
||||||
if ($translation) {
|
if ($translation) {
|
||||||
return $translation;
|
return $translation;
|
||||||
@ -235,97 +226,5 @@ trait ValidationTrait
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* translate error messages to user readable strings
|
|
||||||
*/
|
|
||||||
protected function translateErrorMessages($validationResult)
|
|
||||||
{
|
|
||||||
foreach ($validationResult->getErrors() as $error){
|
|
||||||
$errorLabel = null;
|
|
||||||
$field = implode('.', $error->dataPointer());
|
|
||||||
if ($error->keyword() == 'required') {
|
|
||||||
$tmp = $error->dataPointer();
|
|
||||||
array_push($tmp, $error->keywordArgs()['missing']);
|
|
||||||
$field = implode('.', $tmp);
|
|
||||||
}
|
|
||||||
if ($error->keyword() == 'additionalProperties') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch ($error->keyword()) {
|
|
||||||
case 'required':
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.required'
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$fieldLabel = $this->getTranslation(
|
|
||||||
'field.' . $field
|
|
||||||
);
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.required', [$fieldLabel]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
case 'pattern':
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.pattern'
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$fieldLabel = $this->getTranslation(
|
|
||||||
'field.' . $field
|
|
||||||
);
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.pattern', [$fieldLabel]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
case 'format':
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.format'
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$fieldLabel = $this->getTranslation(
|
|
||||||
'field.' . $field
|
|
||||||
);
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.format', [$fieldLabel]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$errorLabel = $this->getTranslation(
|
|
||||||
'error.' . $field . '.' . $error->keyword()
|
|
||||||
);
|
|
||||||
if ($errorLabel == null) {
|
|
||||||
$errorLabel = 'error.'
|
|
||||||
. $field
|
|
||||||
. '.'
|
|
||||||
. $error->keyword();
|
|
||||||
}
|
|
||||||
$this->errorLabels[$field] = $errorLabel;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\UserFunc;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file is part of the "Site Templates" 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) 2021 Philipp Dieter <philipp@glanzstueck.agency>, Glanzstück GmbH
|
|
||||||
*/
|
|
||||||
|
|
||||||
use DiDom\Document;
|
|
||||||
use DiDom\Element;
|
|
||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
||||||
|
|
||||||
class ParseExternalLinks
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function render($content, $conf = [])
|
|
||||||
{
|
|
||||||
$domDocument = new \DOMDocument();
|
|
||||||
$testdocument = $domDocument->loadXML($content);
|
|
||||||
if ($testdocument === false) {
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
$document = new Document($content);
|
|
||||||
$a = $document->find('a')[0];
|
|
||||||
$href = $a->getAttribute('href');
|
|
||||||
if (substr($href, 0, 7) != "http://"
|
|
||||||
&& substr($href, 0, 8) != "https://"
|
|
||||||
) {
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
$parsedHref = parse_url($href);
|
|
||||||
if ($_SERVER['SERVER_NAME'] == $parsedHref['host']) {
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
if ($a->getAttribute('target') == '_blank') {
|
|
||||||
$a->setAttribute('rel', 'noopener');
|
|
||||||
}
|
|
||||||
$class = $a->getAttribute('class');
|
|
||||||
if ($class) {
|
|
||||||
$class .= ' link link-external';
|
|
||||||
} else {
|
|
||||||
$class = 'link link-external';
|
|
||||||
}
|
|
||||||
$a->setAttribute('class', $class);
|
|
||||||
if ($conf['linkText']) {
|
|
||||||
$screenreaderHint = new Element('span', $conf['linkText'] . ' ');
|
|
||||||
$screenreaderHint->setAttribute('class', 'link-external-sr-only');
|
|
||||||
$a->prependChild($screenreaderHint);
|
|
||||||
}
|
|
||||||
if ($conf['iconFile']) {
|
|
||||||
$iconDataFile = GeneralUtility::getFileAbsFileName(
|
|
||||||
$conf['iconFile']
|
|
||||||
);
|
|
||||||
$iconData = file_get_contents($iconDataFile);
|
|
||||||
$icon = new Element('span');
|
|
||||||
$icon->setInnerHtml($iconData);
|
|
||||||
$icon->setAttribute('class', 'icon-link-external');
|
|
||||||
if ($iconPosition == 'start') {
|
|
||||||
$a->prepentChild($icon);
|
|
||||||
} else {
|
|
||||||
$a->appendChild($icon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$innerHtml = $a->innerHtml();
|
|
||||||
$a->setInnerHtml(
|
|
||||||
'<span class="link-external-inner">'
|
|
||||||
. $innerHtml
|
|
||||||
. '</span>'
|
|
||||||
);
|
|
||||||
return $document->find('body')[0]->innerHtml();
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,12 +12,10 @@ namespace Cjel\TemplatesAide\Utility;
|
|||||||
*
|
*
|
||||||
***/
|
***/
|
||||||
|
|
||||||
use TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException;
|
|
||||||
use TYPO3\CMS\Core\Resource\FileReference as CoreFileReference;
|
use TYPO3\CMS\Core\Resource\FileReference as CoreFileReference;
|
||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
||||||
use TYPO3\CMS\Extbase\Domain\Model\FileReference as ExtbaseFileReference;
|
use TYPO3\CMS\Extbase\Domain\Model\FileReference as ExtbaseFileReference;
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||||
use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy;
|
|
||||||
use TYPO3\CMS\Extbase\Persistence\Generic\LazyObjectStorage;
|
use TYPO3\CMS\Extbase\Persistence\Generic\LazyObjectStorage;
|
||||||
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
|
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
|
||||||
use TYPO3\CMS\Extbase\Service\ImageService;
|
use TYPO3\CMS\Extbase\Service\ImageService;
|
||||||
@ -77,11 +75,6 @@ class ApiUtility
|
|||||||
if (substr($method, 0, 3) === 'get') {
|
if (substr($method, 0, 3) === 'get') {
|
||||||
$methodResult = call_user_func([$row, $method]);
|
$methodResult = call_user_func([$row, $method]);
|
||||||
$attributeName = lcfirst(substr($method, 3));
|
$attributeName = lcfirst(substr($method, 3));
|
||||||
if (is_object($methodResult)
|
|
||||||
&& get_class($methodResult) == LazyLoadingProxy::class
|
|
||||||
) {
|
|
||||||
$methodResult = $methodResult->_loadRealInstance();
|
|
||||||
}
|
|
||||||
$propertieResults[$attributeName] = $methodResult;
|
$propertieResults[$attributeName] = $methodResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,15 +229,11 @@ class ApiUtility
|
|||||||
$absoluteUrl = $requestHost
|
$absoluteUrl = $requestHost
|
||||||
. '/'
|
. '/'
|
||||||
. $publicUrl;
|
. $publicUrl;
|
||||||
try {
|
$imagePreview = $this->imageService->getImage(
|
||||||
$imagePreview = $this->imageService->getImage(
|
$publicUrl,
|
||||||
$publicUrl,
|
null,
|
||||||
null,
|
0
|
||||||
0
|
);
|
||||||
);
|
|
||||||
} catch (FolderDoesNotExistException $e) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
$processingInstructionsPreview = array(
|
$processingInstructionsPreview = array(
|
||||||
//'width' => '1024c',
|
//'width' => '1024c',
|
||||||
//'height' => '768c',
|
//'height' => '768c',
|
||||||
|
@ -45,11 +45,7 @@ class ArrayUtility
|
|||||||
$value = self::removeEmptyStrings($value);
|
$value = self::removeEmptyStrings($value);
|
||||||
} else {
|
} else {
|
||||||
if (is_string($value) && !strlen($value)) {
|
if (is_string($value) && !strlen($value)) {
|
||||||
if (is_array($array)) {
|
unset($array[$key]);
|
||||||
unset($array[$key]);
|
|
||||||
} else {
|
|
||||||
unset($array->$key);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,20 +63,4 @@ class ArrayUtility
|
|||||||
return array_keys($arr) !== range(0, count($arr) - 1);
|
return array_keys($arr) !== range(0, count($arr) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the depth of an array
|
|
||||||
*/
|
|
||||||
function depth(array $array) {
|
|
||||||
$depthMax = 1;
|
|
||||||
foreach ($array as $value) {
|
|
||||||
if (is_array($value)) {
|
|
||||||
$depth = self::depth($value) + 1;
|
|
||||||
if ($depth > $depthMax) {
|
|
||||||
$depthMax = $depth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $depthMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,114 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Utility;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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 Philipp Dieter
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
|
||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
||||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
|
||||||
use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds functions to help with database interactions
|
|
||||||
*/
|
|
||||||
class DatabaseUtility
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mysql date format
|
|
||||||
*/
|
|
||||||
const MYSQL_DATE_FORMAT = 'Y-m-d H:i:s';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns table name by model
|
|
||||||
*
|
|
||||||
* @param $model object model
|
|
||||||
* @return string table name
|
|
||||||
*/
|
|
||||||
public static function getTableNameFromModelClass($class)
|
|
||||||
{
|
|
||||||
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
|
|
||||||
$dataMapper = $objectManager->get(DataMapper::class);
|
|
||||||
return $dataMapper->getDataMap($class)->getTableName();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new query builder and returns it
|
|
||||||
*
|
|
||||||
* @param $tablename string table name
|
|
||||||
* @return object queryBuilder
|
|
||||||
*/
|
|
||||||
public static function getQueryBuilderFromTableName($tableName)
|
|
||||||
{
|
|
||||||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
|
|
||||||
->getConnectionForTable($tableName)
|
|
||||||
->createQueryBuilder();
|
|
||||||
return $queryBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a connection for a table and returns it
|
|
||||||
*
|
|
||||||
* @param $tablename string table name
|
|
||||||
* @return object connection
|
|
||||||
*/
|
|
||||||
public static function getConnectionFromTableName($tableName)
|
|
||||||
{
|
|
||||||
return GeneralUtility::makeInstance(ConnectionPool::class)
|
|
||||||
->getConnectionForTable($tableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* testAndCreateIndex
|
|
||||||
*/
|
|
||||||
public static function testAndCreateIndex(
|
|
||||||
$table, $indexName, $indexColumns, $type
|
|
||||||
) {
|
|
||||||
$connection = GeneralUtility::makeInstance(
|
|
||||||
ConnectionPool::class
|
|
||||||
)->getConnectionForTable($table);
|
|
||||||
$existTestQuery = "
|
|
||||||
SHOW TABLES LIKE '${table}'
|
|
||||||
";
|
|
||||||
$existTestResult = $connection
|
|
||||||
->executeQuery($existTestQuery)
|
|
||||||
->fetchAll();
|
|
||||||
if (!count($existTestResult)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$indexTestQuery = "
|
|
||||||
SHOW INDEX FROM ${table}
|
|
||||||
WHERE Key_name = '${indexName}'
|
|
||||||
";
|
|
||||||
$indexTestResult = $connection
|
|
||||||
->executeQuery($indexTestQuery)
|
|
||||||
->fetchAll();
|
|
||||||
if (count($indexTestResult)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch ($type) {
|
|
||||||
case 'btree':
|
|
||||||
$queryCreate = "
|
|
||||||
CREATE INDEX ${indexName}
|
|
||||||
USING BTREE ON ${table} (${indexColumns})
|
|
||||||
";
|
|
||||||
break;
|
|
||||||
case 'fulltext':
|
|
||||||
$queryCreate = "
|
|
||||||
CREATE FULLTEXT INDEX ${indexName}
|
|
||||||
ON ${table} (${indexColumns})
|
|
||||||
";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$connection->executeQuery($queryCreate);
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,8 +20,7 @@ use TYPO3\CMS\Extbase\Service\ImageService;
|
|||||||
use TYPO3\CMS\Fluid\View\StandaloneView;
|
use TYPO3\CMS\Fluid\View\StandaloneView;
|
||||||
use TYPO3\CMS\Fluid\View\TemplatePaths;
|
use TYPO3\CMS\Fluid\View\TemplatePaths;
|
||||||
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
||||||
use Symfony\Component\Mime\Address;
|
|
||||||
use TYPO3\CMS\Frontend\Page\PageRepository;
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -80,10 +79,6 @@ class MailUtility
|
|||||||
$type = 'tableLayout';
|
$type = 'tableLayout';
|
||||||
$textPart = substr($textPart, 3);
|
$textPart = substr($textPart, 3);
|
||||||
}
|
}
|
||||||
if (substr($textPart, 0, 3) === '---') {
|
|
||||||
$type = 'divider';
|
|
||||||
$textPart = substr($textPart, 3);
|
|
||||||
}
|
|
||||||
if (substr($textPart, 0, 9) === '%subject ') {
|
if (substr($textPart, 0, 9) === '%subject ') {
|
||||||
$type = 'subject';
|
$type = 'subject';
|
||||||
$textPart = substr($textPart, 9);
|
$textPart = substr($textPart, 9);
|
||||||
@ -133,28 +128,6 @@ class MailUtility
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets row from content by given type
|
|
||||||
*
|
|
||||||
* @param array $content the mail content
|
|
||||||
* @param string $type the type to search
|
|
||||||
*/
|
|
||||||
public static function extractByType($content, $type)
|
|
||||||
{
|
|
||||||
$elementPosition = array_search(
|
|
||||||
$type,
|
|
||||||
array_column($content, 'type')
|
|
||||||
);
|
|
||||||
if (!$elementPosition === false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!array_key_exists('data', $content[$elementPosition])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return $content[$elementPosition]['data'];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tages maildata, builds html and text mails an decides where to send them
|
* tages maildata, builds html and text mails an decides where to send them
|
||||||
* allows to intercept sender for testing
|
* allows to intercept sender for testing
|
||||||
@ -220,20 +193,14 @@ class MailUtility
|
|||||||
}
|
}
|
||||||
$textView->setTemplate($templateNameText);
|
$textView->setTemplate($templateNameText);
|
||||||
$mail = GeneralUtility::makeInstance(MailMessage::class);
|
$mail = GeneralUtility::makeInstance(MailMessage::class);
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$mail->setFrom($sender);
|
||||||
$mail->from(new Address(key($sender),$sender[key($sender)]));
|
$mail->setSubject($subject);
|
||||||
$mail->subject($subject);
|
|
||||||
} else {
|
|
||||||
$mail->setFrom($sender);
|
|
||||||
$mail->setSubject($subject);
|
|
||||||
}
|
|
||||||
$bodydataText = [];
|
$bodydataText = [];
|
||||||
$bodydataHtml = [];
|
$bodydataHtml = [];
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
switch($row['type']) {
|
switch($row['type']) {
|
||||||
case 'text':
|
case 'text':
|
||||||
case 'table':
|
case 'table':
|
||||||
case 'tablelr':
|
|
||||||
case 'tableLayout':
|
case 'tableLayout':
|
||||||
case 'list':
|
case 'list':
|
||||||
case 'textbold':
|
case 'textbold':
|
||||||
@ -244,8 +211,6 @@ class MailUtility
|
|||||||
case 'buttonleft':
|
case 'buttonleft':
|
||||||
case 'buttoncenter':
|
case 'buttoncenter':
|
||||||
case 'buttonright':
|
case 'buttonright':
|
||||||
case 'divider':
|
|
||||||
case 'hr':
|
|
||||||
$row['data'] = str_replace(
|
$row['data'] = str_replace(
|
||||||
"\\\n",
|
"\\\n",
|
||||||
'',
|
'',
|
||||||
@ -264,15 +229,19 @@ class MailUtility
|
|||||||
case 'buttonleft':
|
case 'buttonleft':
|
||||||
case 'buttoncenter':
|
case 'buttoncenter':
|
||||||
case 'buttonright':
|
case 'buttonright':
|
||||||
return json_encode([
|
return '<a style="display: inline-block;" href="'
|
||||||
$matchesInner[1],
|
. $matchesInner[1]
|
||||||
$matchesInner[2]
|
. '">'
|
||||||
]);
|
. '<span style="display: inline-block; padding: 10px 15px; border-radius: 3px; background-color: red;">'
|
||||||
|
. 'Button!!!! '
|
||||||
|
. $matchesInner[2]
|
||||||
|
. '</span>'
|
||||||
|
. '</a>';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return '<a href="'
|
return '<a href="'
|
||||||
. $matchesInner[1]
|
. $matchesInner[1]
|
||||||
. '" target="_blank">'
|
. '">'
|
||||||
. $matchesInner[2]
|
. $matchesInner[2]
|
||||||
. '</a>';
|
. '</a>';
|
||||||
break;
|
break;
|
||||||
@ -321,24 +290,83 @@ class MailUtility
|
|||||||
$bodydataText[] = $textRow;
|
$bodydataText[] = $textRow;
|
||||||
$bodydataHtml[] = $htmlRow;
|
$bodydataHtml[] = $htmlRow;
|
||||||
break;
|
break;
|
||||||
case 'contentBlockHtml':
|
//case 'button':
|
||||||
$htmlRow = $row;
|
// $row['data'] = str_replace(
|
||||||
$bodydataHtml[] = $htmlRow;
|
// "\\\n",
|
||||||
break;
|
// '',
|
||||||
|
// $row['data']
|
||||||
|
// );
|
||||||
|
// $htmlRow = $row;
|
||||||
|
// $htmlRow['data'] = preg_replace_callback(
|
||||||
|
// '/\[.*\]/mU',
|
||||||
|
// function($matches) {
|
||||||
|
// foreach ($matches as $match) {
|
||||||
|
// $test = preg_replace_callback(
|
||||||
|
// '/\[(\S*)\s(.*)\]/mU',
|
||||||
|
// function($matchesInner) {
|
||||||
|
//
|
||||||
|
// return '<a href="'
|
||||||
|
// . $matchesInner[1]
|
||||||
|
// . '">'
|
||||||
|
// . $matchesInner[2]
|
||||||
|
// . '</a>';
|
||||||
|
// },
|
||||||
|
// $match
|
||||||
|
// );
|
||||||
|
// \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
||||||
|
// $test, null, 3, true, false
|
||||||
|
// );
|
||||||
|
// return $test;
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// $htmlRow['data']
|
||||||
|
// );
|
||||||
|
// \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
||||||
|
// $htmlRow['data'], null, 3, true, false
|
||||||
|
// );
|
||||||
|
// $htmlRow['data'] = preg_replace_callback(
|
||||||
|
// '/\*.*\*/mU',
|
||||||
|
// function($matches) {
|
||||||
|
// foreach ($matches as $match) {
|
||||||
|
// return '<b>'
|
||||||
|
// . substr($match, 1, -1)
|
||||||
|
// . '</b>';
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// $htmlRow['data']
|
||||||
|
// );
|
||||||
|
// $textRow = $row;
|
||||||
|
// $textRow['data'] = preg_replace_callback(
|
||||||
|
// '/\[.*\]/mU',
|
||||||
|
// function($matches) {
|
||||||
|
// foreach ($matches as $match) {
|
||||||
|
// return preg_replace_callback(
|
||||||
|
// '/\[(\S*)\s(.*)\]/mU',
|
||||||
|
// function($matchesInner) {
|
||||||
|
// if (
|
||||||
|
// $matchesInner[2] == $matchesInner[1]
|
||||||
|
// ) {
|
||||||
|
// return $matchesInner[1];
|
||||||
|
// }
|
||||||
|
// return $matchesInner[2]
|
||||||
|
// . ': '
|
||||||
|
// . $matchesInner[1];
|
||||||
|
// },
|
||||||
|
// $match
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// $textRow['data']
|
||||||
|
// );
|
||||||
|
// $bodydataText[] = $textRow;
|
||||||
|
// $bodydataHtml[] = $htmlRow;
|
||||||
|
// break;
|
||||||
case 'attachment':
|
case 'attachment':
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$mail->attach(new \Swift_Attachment(
|
||||||
$mail->attach(
|
$row['data'][0],
|
||||||
$row['data'][0],
|
$row['data'][1],
|
||||||
$row['data'][1],
|
$row['data'][2]
|
||||||
$row['data'][2]
|
));
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$mail->attach(new \Swift_Attachment(
|
|
||||||
$row['data'][0],
|
|
||||||
$row['data'][1],
|
|
||||||
$row['data'][2]
|
|
||||||
));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'attachmentBase64':
|
case 'attachmentBase64':
|
||||||
$attachmentdata = explode(',', $row['data']);
|
$attachmentdata = explode(',', $row['data']);
|
||||||
@ -346,39 +374,24 @@ class MailUtility
|
|||||||
$mimetype = $matches[1];
|
$mimetype = $matches[1];
|
||||||
preg_match('/\w*\/(.*);\w*/', $attachmentdata[0], $matches);
|
preg_match('/\w*\/(.*);\w*/', $attachmentdata[0], $matches);
|
||||||
$fileextension = $matches[1];
|
$fileextension = $matches[1];
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$mail->attach(new \Swift_Attachment(
|
||||||
$mail->attach(
|
base64_decode($attachmentdata[1]),
|
||||||
base64_decode($attachmentdata[1]),
|
'attachment.' . $fileextension,
|
||||||
'attachment.' . $fileextension,
|
$mimetype
|
||||||
$mimetype
|
));
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$mail->attach(new \Swift_Attachment(
|
|
||||||
base64_decode($attachmentdata[1]),
|
|
||||||
'attachment.' . $fileextension,
|
|
||||||
$mimetype
|
|
||||||
));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$textView->assign('content', $bodydataText);
|
$textView->assign('content', $bodydataText);
|
||||||
$htmlView->assign('content', $bodydataHtml);
|
$htmlView->assign('content', $bodydataHtml);
|
||||||
|
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
||||||
|
// $bodydataHtml, null, 8, true, false
|
||||||
|
//);
|
||||||
$domain = $settings['mailDomain'];
|
$domain = $settings['mailDomain'];
|
||||||
if ($assetDomain) {
|
if ($assetDomain) {
|
||||||
$domain = $assetDomain;
|
$domain = $assetDomain;
|
||||||
}
|
}
|
||||||
$dataProtectionPid = $settings['dataProtectionPid'];
|
|
||||||
$uriBuilder = $objectManager->get(
|
|
||||||
UriBuilder::class
|
|
||||||
);
|
|
||||||
if ($dataProtectionPid) {
|
|
||||||
$pageRepository = GeneralUtility::makeInstance(PageRepository::class);
|
|
||||||
$urlPage = $pageRepository->getPage($settings['dataProtectionPid']);
|
|
||||||
$dataProtectionPid = $domain.$urlPage['slug'];
|
|
||||||
}
|
|
||||||
$htmlView->assign('domain', $domain);
|
$htmlView->assign('domain', $domain);
|
||||||
$htmlView->assign('linkDataprotection', $dataProtectionPid);
|
|
||||||
$textBody = $textView->render();
|
$textBody = $textView->render();
|
||||||
$htmlBody = $htmlView->render();
|
$htmlBody = $htmlView->render();
|
||||||
if ($domain) {
|
if ($domain) {
|
||||||
@ -412,48 +425,18 @@ class MailUtility
|
|||||||
);
|
);
|
||||||
foreach ($recipientsIntercecpted as $recipientIntercepted) {
|
foreach ($recipientsIntercecpted as $recipientIntercepted) {
|
||||||
foreach ($recipients as $recipient) {
|
foreach ($recipients as $recipient) {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$mail->setSubject(
|
||||||
$mail->subject(
|
$subjectOrig . ' [ORIG-TO: ' . trim($recipient) . ']'
|
||||||
$subjectOrig . ' [ORIG-TO: ' . trim($recipient) . ']'
|
);
|
||||||
);
|
$mail->setTo(trim($recipientIntercepted));
|
||||||
$mail->to(new Address(trim($recipientIntercepted)));
|
|
||||||
} else {
|
|
||||||
$mail->setSubject(
|
|
||||||
$subjectOrig . ' [ORIG-TO: ' . trim($recipient) . ']'
|
|
||||||
);
|
|
||||||
$mail->setTo(trim($recipientIntercepted));
|
|
||||||
}
|
|
||||||
$mail->send();
|
$mail->send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($recipients as $recipient) {
|
foreach ($recipients as $recipient) {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$mail->setTo(trim($recipient));
|
||||||
$mail->to(new Address(trim($recipient)));
|
|
||||||
} else {
|
|
||||||
$mail->setTo(trim($recipient));
|
|
||||||
}
|
|
||||||
$mail->send();
|
$mail->send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Debug print
|
|
||||||
*/
|
|
||||||
public static function printMaildata($maildata)
|
|
||||||
{
|
|
||||||
foreach ($maildata as $row) {
|
|
||||||
if (!is_array($row['data'])) {
|
|
||||||
print($row['data']);
|
|
||||||
} else {
|
|
||||||
print($row['data'][0]);
|
|
||||||
print(PHP_EOL);
|
|
||||||
print($row['data'][1]);
|
|
||||||
}
|
|
||||||
print(PHP_EOL);
|
|
||||||
}
|
|
||||||
print(PHP_EOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -136,31 +136,4 @@ class ObjectUtility
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears all object fields
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function clearData(
|
|
||||||
&$object
|
|
||||||
) {
|
|
||||||
foreach ($object->_getProperties() as $property => $value) {
|
|
||||||
if ($property == 'uid' || $property == 'pid') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (getType($value)) {
|
|
||||||
case 'string':
|
|
||||||
$object->_setProperty($property, '');
|
|
||||||
break;
|
|
||||||
case 'boolean':
|
|
||||||
$object->_setProperty($property, false);
|
|
||||||
break;
|
|
||||||
case 'integer':
|
|
||||||
$object->_setProperty($property, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ namespace Cjel\TemplatesAide\Utility;
|
|||||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
||||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||||
use TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility to work with site config
|
* Utility to work with site config
|
||||||
@ -36,33 +35,20 @@ class SiteConfigUtility
|
|||||||
$objectManager = GeneralUtility::makeInstance(
|
$objectManager = GeneralUtility::makeInstance(
|
||||||
ObjectManager::class
|
ObjectManager::class
|
||||||
);
|
);
|
||||||
$typoScriptParser = GeneralUtility::makeInstance(
|
|
||||||
TypoScriptParser::class
|
|
||||||
);
|
|
||||||
$configurationManager = $objectManager->get(
|
$configurationManager = $objectManager->get(
|
||||||
ConfigurationManagerInterface::class
|
ConfigurationManagerInterface::class
|
||||||
);
|
);
|
||||||
$typoscript = $configurationManager->getConfiguration(
|
$typoscript = $configurationManager->getConfiguration(
|
||||||
ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT
|
ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT
|
||||||
);
|
);
|
||||||
|
$typoscript = GeneralUtility::removeDotsFromTS($typoscript);
|
||||||
$siteConfig = $typoscript;
|
$siteConfig = $typoscript;
|
||||||
if ($limitToSiteConfig) {
|
if ($limitToSiteConfig) {
|
||||||
$siteConfig = $typoscript['config.']['site.'];
|
$siteConfig = $typoscript['config']['site'];
|
||||||
}
|
}
|
||||||
$current = &$siteConfig;
|
$current = &$siteConfig;
|
||||||
foreach ($pathParts as $key) {
|
foreach ($pathParts as $key) {
|
||||||
if ($current[$key . '.']) {
|
|
||||||
$key .= '.';
|
|
||||||
}
|
|
||||||
$current = &$current[$key];
|
$current = &$current[$key];
|
||||||
if (isset($current[0]) && $current[0] === '<') {
|
|
||||||
$searchkey = trim(substr($current, 1));
|
|
||||||
list($name, $conf) = $typoScriptParser->getVal(
|
|
||||||
$searchkey,
|
|
||||||
$typoscript
|
|
||||||
);
|
|
||||||
$current = $conf;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (is_array($current)
|
if (is_array($current)
|
||||||
&& array_key_exists('value', $current)
|
&& array_key_exists('value', $current)
|
||||||
|
@ -45,7 +45,7 @@ class StringUtility
|
|||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getRandomString(
|
function getRandomString(
|
||||||
int $length = 64,
|
int $length = 64,
|
||||||
string $keyspace = null
|
string $keyspace = null
|
||||||
): string {
|
): string {
|
||||||
|
@ -142,26 +142,6 @@ class TcaUtility
|
|||||||
return implode(', ', $fieldlist);
|
return implode(', ', $fieldlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function listMoveFieldBeforeField(
|
|
||||||
$fieldlist, $field, $fieldBefore
|
|
||||||
) {
|
|
||||||
$fieldlist = GeneralUtility::trimExplode(
|
|
||||||
',',
|
|
||||||
$fieldlist
|
|
||||||
);
|
|
||||||
unset($fieldlist[(array_search($field, $fieldlist))]);
|
|
||||||
array_splice(
|
|
||||||
$fieldlist,
|
|
||||||
array_search($fieldBefore, $fieldlist),
|
|
||||||
0,
|
|
||||||
$field
|
|
||||||
);
|
|
||||||
return implode(', ', $fieldlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove element from fieldlist
|
* remove element from fieldlist
|
||||||
*
|
*
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Utility;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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) 2021 Philipp Dieter <philipp.dieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class TranslationUtility
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all interface constants per prefix
|
|
||||||
*/
|
|
||||||
public static function buildSelectOptionsFromOptions(
|
|
||||||
$options,
|
|
||||||
$column,
|
|
||||||
$element,
|
|
||||||
$extensionKey = null
|
|
||||||
) {
|
|
||||||
$items = [];
|
|
||||||
if ($addEmpty) {
|
|
||||||
$items[] = ['-', ''];
|
|
||||||
}
|
|
||||||
foreach ($options as $option) {
|
|
||||||
$translationKey = "option.$element.$column.$option";
|
|
||||||
$translation = self::getTranslation(
|
|
||||||
$translationKey,
|
|
||||||
$extensionKey
|
|
||||||
);
|
|
||||||
if ($translation) {
|
|
||||||
$items[] = [
|
|
||||||
'code' => $option,
|
|
||||||
'label' => $translation,
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
$items[] = [
|
|
||||||
'code' => $option,
|
|
||||||
'label' => $translationKey,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $items;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* shortcut to get translation
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function getTranslation($key, $extensionKey)
|
|
||||||
{
|
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
|
||||||
if (!$extensionKey) {
|
|
||||||
$extensionKey = 'site_templates';
|
|
||||||
}
|
|
||||||
return implode([
|
|
||||||
'LLL:EXT:',
|
|
||||||
$extensionKey,
|
|
||||||
'/Resources/Private/Language/locallang_db.xlf:',
|
|
||||||
$key
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
if ($extensionKey) {
|
|
||||||
$translation = LocalizationUtility::translate(
|
|
||||||
$key,
|
|
||||||
$extensionKey
|
|
||||||
);
|
|
||||||
if ($translation) {
|
|
||||||
return $translation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$translation = LocalizationUtility::translate(
|
|
||||||
$key,
|
|
||||||
'site_templates'
|
|
||||||
);
|
|
||||||
if ($translation) {
|
|
||||||
return $translation;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers;
|
|
||||||
|
|
||||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
||||||
|
|
||||||
class CamelcaseToKebabcaseViewHelper extends AbstractViewHelper
|
|
||||||
{
|
|
||||||
public static function renderStatic(
|
|
||||||
array $arguments,
|
|
||||||
\Closure $renderChildrenClosure,
|
|
||||||
RenderingContextInterface $renderingContext
|
|
||||||
) {
|
|
||||||
$string = preg_replace('/[\s.]+/', '_', $renderChildrenClosure());
|
|
||||||
$string = preg_replace('/[^0-9a-zA-Z_\-]/', '-', $string);
|
|
||||||
$string = strtolower(preg_replace('/[A-Z]+/', '-\0', $string));
|
|
||||||
$string = trim($string, '-_');
|
|
||||||
return preg_replace('/[_\-][_\-]+/', '-', $string);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers\Format;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the FluidTYPO3/Vhs project under GPLv2 or later.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please read the
|
|
||||||
* LICENSE.md file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderStatic;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ### Wordwrap: Wrap a string at provided character count
|
|
||||||
*
|
|
||||||
* Wraps a string to $limit characters and at $break character
|
|
||||||
* while maintaining complete words. Concatenates the resulting
|
|
||||||
* strings with $glue. Code is heavily inspired
|
|
||||||
* by Codeigniter's word_wrap helper.
|
|
||||||
*/
|
|
||||||
class WordWrapViewHelper extends AbstractViewHelper
|
|
||||||
{
|
|
||||||
use CompileWithContentArgumentAndRenderStatic;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function initializeArguments()
|
|
||||||
{
|
|
||||||
$this->registerArgument('subject', 'string', 'Text to wrap');
|
|
||||||
$this->registerArgument('limit', 'integer', 'Maximum length of resulting parts after wrapping', false, 80);
|
|
||||||
$this->registerArgument('break', 'string', 'Character to wrap text at', false, PHP_EOL);
|
|
||||||
$this->registerArgument('glue', 'string', 'Character to concatenate parts with after wrapping', false, PHP_EOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $arguments
|
|
||||||
* @param \Closure $renderChildrenClosure
|
|
||||||
* @param RenderingContextInterface $renderingContext
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function renderStatic(
|
|
||||||
array $arguments,
|
|
||||||
\Closure $renderChildrenClosure,
|
|
||||||
RenderingContextInterface $renderingContext
|
|
||||||
) {
|
|
||||||
$subject = $renderChildrenClosure();
|
|
||||||
$limit = (integer) $arguments['limit'];
|
|
||||||
$break = $arguments['break'];
|
|
||||||
$glue = $arguments['glue'];
|
|
||||||
$subject = preg_replace('/ +/', ' ', $subject);
|
|
||||||
$subject = str_replace(["\r\n", "\r"], PHP_EOL, $subject);
|
|
||||||
$subject = wordwrap($subject, $limit, $break, false);
|
|
||||||
$output = '';
|
|
||||||
foreach (explode($break, $subject) as $line) {
|
|
||||||
if (mb_strlen($line) <= $limit) {
|
|
||||||
$output .= $line . $glue;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$temp = '';
|
|
||||||
//while (mb_strlen($line) > $limit) {
|
|
||||||
// $temp .= mb_substr($line, 0, $limit - 1);
|
|
||||||
// $line = mb_substr($line, $limit - 1);
|
|
||||||
//}
|
|
||||||
if (false === empty($temp)) {
|
|
||||||
$output .= $temp . $glue . $line . $glue;
|
|
||||||
} else {
|
|
||||||
$output .= $line . $glue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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) 2021 Philipp Dieter <philippdieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
|
|
||||||
use TYPO3\CMS\Extbase\Service\ImageService;
|
|
||||||
use TYPO3\CMS\Core\Imaging\ImageMagickFile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class ImageAppendViewHelper extends AbstractTagBasedViewHelper
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ImageService
|
|
||||||
*
|
|
||||||
* @var ImageService
|
|
||||||
*/
|
|
||||||
protected $imageService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param
|
|
||||||
*/
|
|
||||||
public function injectImageService(
|
|
||||||
ImageService $imageService
|
|
||||||
) {
|
|
||||||
$this->imageService = $imageService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize arguments.
|
|
||||||
*/
|
|
||||||
public function initializeArguments()
|
|
||||||
{
|
|
||||||
parent::initializeArguments();
|
|
||||||
$this->registerUniversalTagAttributes();
|
|
||||||
$this->registerArgument('images', 'array', '');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resizes a given image (if required) and renders the respective img tag
|
|
||||||
*
|
|
||||||
* @see https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Image/
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
* @return string Rendered tag
|
|
||||||
*/
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
foreach ($this->arguments['images'] as $image) {
|
|
||||||
$imagePath = $image->getForLocalProcessing(false);
|
|
||||||
//$image = $this->imageService->getImage('', $imageArgument, true);
|
|
||||||
//$image = $this->imageService->getImageUri($image);
|
|
||||||
|
|
||||||
$imageMagickFile = ImageMagickFile::fromFilePath($imagePath, 0);
|
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
|
||||||
$imageMagickFile, null, 3
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers;
|
|
||||||
|
|
||||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
||||||
|
|
||||||
class IsEmptyViewHelper extends AbstractViewHelper
|
|
||||||
{
|
|
||||||
public static function renderStatic(
|
|
||||||
array $arguments,
|
|
||||||
\Closure $renderChildrenClosure,
|
|
||||||
RenderingContextInterface $renderingContext
|
|
||||||
) {
|
|
||||||
if (empty($renderChildrenClosure())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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 Philipp Dieter <philipp.dieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use Cjel\TemplatesAide\Utility\SiteConfigUtility;
|
|
||||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
|
|
||||||
|
|
||||||
class SiteConfigViewHelper extends AbstractViewHelper
|
|
||||||
{
|
|
||||||
use CompileWithRenderStatic;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize arguements
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function initializeArguments()
|
|
||||||
{
|
|
||||||
$this->registerArgument(
|
|
||||||
'key',
|
|
||||||
'string',
|
|
||||||
'The config key to get',
|
|
||||||
true
|
|
||||||
);
|
|
||||||
$this->registerArgument(
|
|
||||||
'siteConfig',
|
|
||||||
'bool',
|
|
||||||
'Limit the typoscript to the config.site part',
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render tranlation
|
|
||||||
*
|
|
||||||
* @param $arguments array arguments
|
|
||||||
* @param $renderChildrenClosure Closure
|
|
||||||
* @param $renderingContext $renderChildrenClosure
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function renderStatic(
|
|
||||||
array $arguments,
|
|
||||||
\Closure $renderChildrenClosure,
|
|
||||||
RenderingContextInterface $renderingContext
|
|
||||||
) {
|
|
||||||
return SiteConfigUtility::getByPath(
|
|
||||||
$arguments['key'],
|
|
||||||
$arguments['siteConfig']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,76 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\ViewHelpers;
|
|
||||||
|
|
||||||
/***
|
|
||||||
*
|
|
||||||
* This file is part of the "Templates Aide" 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 Philipp Dieter <philipp.dieter@attic-media.net>
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
|
||||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
|
|
||||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
|
||||||
|
|
||||||
class TranslationViewHelper extends AbstractViewHelper
|
|
||||||
{
|
|
||||||
use CompileWithRenderStatic;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize arguements
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function initializeArguments()
|
|
||||||
{
|
|
||||||
$this->registerArgument(
|
|
||||||
'key',
|
|
||||||
'string',
|
|
||||||
'The translation key to render',
|
|
||||||
true
|
|
||||||
);
|
|
||||||
$this->registerArgument(
|
|
||||||
'extensionKey',
|
|
||||||
'string',
|
|
||||||
'The extension key to search in',
|
|
||||||
false,
|
|
||||||
'site_templates'
|
|
||||||
);
|
|
||||||
$this->registerArgument(
|
|
||||||
'arguments',
|
|
||||||
'array',
|
|
||||||
'The arguments',
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render tranlation
|
|
||||||
*
|
|
||||||
* @param $arguments array arguments
|
|
||||||
* @param $renderChildrenClosure Closure
|
|
||||||
* @param $renderingContext $renderChildrenClosure
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function renderStatic(
|
|
||||||
array $arguments,
|
|
||||||
\Closure $renderChildrenClosure,
|
|
||||||
RenderingContextInterface $renderingContext
|
|
||||||
) {
|
|
||||||
$translation = LocalizationUtility::translate(
|
|
||||||
$arguments['key'],
|
|
||||||
$arguments['extensionKey'],
|
|
||||||
(array) $arguments['arguments']
|
|
||||||
);
|
|
||||||
if ($translation) {
|
|
||||||
return $translation;
|
|
||||||
}
|
|
||||||
return $arguments['extensionKey'] . ': ' . $arguments['key'];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
<T3DataStructure>
|
|
||||||
<sheets>
|
|
||||||
<sDEF>
|
|
||||||
<ROOT>
|
|
||||||
<TCEforms>
|
|
||||||
<sheetTitle>Function</sheetTitle>
|
|
||||||
</TCEforms>
|
|
||||||
<type>array</type>
|
|
||||||
<el>
|
|
||||||
<switchableControllerActions>
|
|
||||||
<TCEforms>
|
|
||||||
<label>Select function</label>
|
|
||||||
<config>
|
|
||||||
<type>select</type>
|
|
||||||
<items>
|
|
||||||
<numIndex index="0">
|
|
||||||
<numIndex index="0">Translation</numIndex>
|
|
||||||
<numIndex index="1">Translation->translations</numIndex>
|
|
||||||
</numIndex>
|
|
||||||
</items>
|
|
||||||
</config>
|
|
||||||
</TCEforms>
|
|
||||||
</switchableControllerActions>
|
|
||||||
</el>
|
|
||||||
</ROOT>
|
|
||||||
</sDEF>
|
|
||||||
</sheets>
|
|
||||||
</T3DataStructure>
|
|
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('TYPO3_MODE') || die();
|
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
|
||||||
'TemplatesAide',
|
|
||||||
'Dummy',
|
|
||||||
'dummy'
|
|
||||||
);
|
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
|
||||||
'TemplatesAide',
|
|
||||||
'Translationplugin',
|
|
||||||
'translation'
|
|
||||||
);
|
|
@ -23,14 +23,24 @@ return [
|
|||||||
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, ',
|
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, ',
|
||||||
],
|
],
|
||||||
'types' => [
|
'types' => [
|
||||||
'1' => ['showitem' => ', --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, sys_language_uid, l10n_parent, l10n_diffsource, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime'],
|
'1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, , --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
|
||||||
],
|
],
|
||||||
'columns' => [
|
'columns' => [
|
||||||
'sys_language_uid' => [
|
'sys_language_uid' => [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
||||||
'config' => [
|
'config' => [
|
||||||
'type' => 'language',
|
'type' => 'select',
|
||||||
|
'renderType' => 'selectSingle',
|
||||||
|
'special' => 'languages',
|
||||||
|
'items' => [
|
||||||
|
[
|
||||||
|
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
|
||||||
|
-1,
|
||||||
|
'flags-multiple'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'default' => 0,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'l10n_parent' => [
|
'l10n_parent' => [
|
||||||
|
@ -1,110 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
'ctrl' => [
|
|
||||||
'title' => 'LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templatesaide_domain_model_translation',
|
|
||||||
'label' => 'uid',
|
|
||||||
'tstamp' => 'tstamp',
|
|
||||||
'crdate' => 'crdate',
|
|
||||||
'cruser_id' => 'cruser_id',
|
|
||||||
'versioningWS' => true,
|
|
||||||
'languageField' => 'sys_language_uid',
|
|
||||||
'transOrigPointerField' => 'l10n_parent',
|
|
||||||
'transOrigDiffSourceField' => 'l10n_diffsource',
|
|
||||||
'delete' => 'deleted',
|
|
||||||
'enablecolumns' => [
|
|
||||||
'disabled' => 'hidden',
|
|
||||||
'starttime' => 'starttime',
|
|
||||||
'endtime' => 'endtime',
|
|
||||||
],
|
|
||||||
'searchFields' => '',
|
|
||||||
'iconfile' => 'EXT:templates_aide/Resources/Public/Icons/tx_templatesaide_domain_model_translation.gif'
|
|
||||||
],
|
|
||||||
'interface' => [
|
|
||||||
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, ',
|
|
||||||
],
|
|
||||||
'types' => [
|
|
||||||
'1' => ['showitem' => ', --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, sys_language_uid, l10n_parent, l10n_diffsource, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, hidden, starttime, endtime'],
|
|
||||||
],
|
|
||||||
'columns' => [
|
|
||||||
'sys_language_uid' => [
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'language',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'l10n_parent' => [
|
|
||||||
'displayCond' => 'FIELD:sys_language_uid:>:0',
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'select',
|
|
||||||
'renderType' => 'selectSingle',
|
|
||||||
'default' => 0,
|
|
||||||
'items' => [
|
|
||||||
['', 0],
|
|
||||||
],
|
|
||||||
'foreign_table' => 'tx_templatesaide_domain_model_translation',
|
|
||||||
'foreign_table_where' => 'AND {#tx_templatesaide_domain_model_translation}.{#pid}=###CURRENT_PID### AND {#tx_templatesaide_domain_model_translation}.{#sys_language_uid} IN (-1,0)',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'l10n_diffsource' => [
|
|
||||||
'config' => [
|
|
||||||
'type' => 'passthrough',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
't3ver_label' => [
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'input',
|
|
||||||
'size' => 30,
|
|
||||||
'max' => 255,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'hidden' => [
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'check',
|
|
||||||
'renderType' => 'checkboxToggle',
|
|
||||||
'items' => [
|
|
||||||
[
|
|
||||||
0 => '',
|
|
||||||
1 => '',
|
|
||||||
'invertStateDisplay' => true
|
|
||||||
]
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'starttime' => [
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'input',
|
|
||||||
'renderType' => 'inputDateTime',
|
|
||||||
'eval' => 'datetime,int',
|
|
||||||
'default' => 0,
|
|
||||||
'behaviour' => [
|
|
||||||
'allowLanguageSynchronization' => true
|
|
||||||
]
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'endtime' => [
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'input',
|
|
||||||
'renderType' => 'inputDateTime',
|
|
||||||
'eval' => 'datetime,int',
|
|
||||||
'default' => 0,
|
|
||||||
'range' => [
|
|
||||||
'upper' => mktime(0, 0, 0, 1, 1, 2038)
|
|
||||||
],
|
|
||||||
'behaviour' => [
|
|
||||||
'allowLanguageSynchronization' => true
|
|
||||||
]
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
],
|
|
||||||
];
|
|
@ -14,21 +14,6 @@ plugin.tx_templatesaide_dummy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.tx_templatesaide_translationplugin {
|
|
||||||
view {
|
|
||||||
# cat=plugin.tx_templatesaide_translationplugin/file; type=string; label=Path to template root (FE)
|
|
||||||
templateRootPath = EXT:templates_aide/Resources/Private/Templates/
|
|
||||||
# cat=plugin.tx_templatesaide_translationplugin/file; type=string; label=Path to template partials (FE)
|
|
||||||
partialRootPath = EXT:templates_aide/Resources/Private/Partials/
|
|
||||||
# cat=plugin.tx_templatesaide_translationplugin/file; type=string; label=Path to template layouts (FE)
|
|
||||||
layoutRootPath = EXT:templates_aide/Resources/Private/Layouts/
|
|
||||||
}
|
|
||||||
persistence {
|
|
||||||
# cat=plugin.tx_templatesaide_translationplugin//a; type=string; label=Default storage PID
|
|
||||||
storagePid =
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
||||||
|
|
||||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:templates_aide/Resources/Private/TypoScript/constants.ts">
|
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:templates_aide/Resources/Private/TypoScript/constants.ts">
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
plugin.tx_templatesaide_dummy {
|
plugin.tx_templatesaide_dummy {
|
||||||
view {
|
view {
|
||||||
templateRootPaths.0 = EXT:templates_aide/Resources/Private/Templates/
|
templateRootPaths.0 = EXT:{extension.shortExtensionKey}/Resources/Private/Templates/
|
||||||
templateRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.templateRootPath}
|
templateRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.templateRootPath}
|
||||||
partialRootPaths.0 = EXT:templates_aide/Resources/Private/Partials/
|
partialRootPaths.0 = EXT:templates_aide/Resources/Private/Partials/
|
||||||
partialRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.partialRootPath}
|
partialRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.partialRootPath}
|
||||||
layoutRootPaths.0 = EXT:templates_aide/Resources/Private/Layouts/
|
layoutRootPaths.0 = EXT:tx_templatesaide/Resources/Private/Layouts/
|
||||||
layoutRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.layoutRootPath}
|
layoutRootPaths.1 = {$plugin.tx_templatesaide_dummy.view.layoutRootPath}
|
||||||
}
|
}
|
||||||
persistence {
|
persistence {
|
||||||
@ -24,31 +24,6 @@ plugin.tx_templatesaide_dummy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.tx_templatesaide_translationplugin {
|
|
||||||
view {
|
|
||||||
templateRootPaths.0 = EXT:templates_aide/Resources/Private/Templates/
|
|
||||||
templateRootPaths.1 = {$plugin.tx_templatesaide_translationplugin.view.templateRootPath}
|
|
||||||
partialRootPaths.0 = EXT:templates_aide/Resources/Private/Partials/
|
|
||||||
partialRootPaths.1 = {$plugin.tx_templatesaide_translationplugin.view.partialRootPath}
|
|
||||||
layoutRootPaths.0 = EXT:templates_aide/Resources/Private/Layouts/
|
|
||||||
layoutRootPaths.1 = {$plugin.tx_templatesaide_translationplugin.view.layoutRootPath}
|
|
||||||
}
|
|
||||||
persistence {
|
|
||||||
storagePid = {$plugin.tx_templatesaide_translationplugin.persistence.storagePid}
|
|
||||||
#recursive = 1
|
|
||||||
}
|
|
||||||
features {
|
|
||||||
#skipDefaultArguments = 1
|
|
||||||
# if set to 1, the enable fields are ignored in BE context
|
|
||||||
ignoreAllEnableFieldsInBe = 0
|
|
||||||
# Should be on by default, but can be disabled if all action in the plugin are uncached
|
|
||||||
requireCHashArgumentForActionArguments = 1
|
|
||||||
}
|
|
||||||
mvc {
|
|
||||||
#callDefaultActionIfActionCantBeResolved = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# these classes are only used in auto-generated templates
|
# these classes are only used in auto-generated templates
|
||||||
plugin.tx_templatesaide._CSS_DEFAULT_STYLE (
|
plugin.tx_templatesaide._CSS_DEFAULT_STYLE (
|
||||||
textarea.f3-form-error {
|
textarea.f3-form-error {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
.. include:: ../Includes.txt
|
.. include:: ../Includes.txt
|
||||||
|
|
||||||
|
|
||||||
.. _configuration:
|
.. _configuration:
|
||||||
|
|
||||||
@ -6,17 +7,20 @@
|
|||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
How is the extension configured?
|
Target group: **Developers, Integrators**
|
||||||
Aim to provide simple instructions detailing how the extension is configured.
|
|
||||||
Always assume that the user has no prior experience of using the extension.
|
How is the extension configured? Aim to provide simple instructions detailing
|
||||||
|
how the extension is configured. Always assume that the user has no prior experience
|
||||||
|
of using your extension.
|
||||||
|
|
||||||
|
Try and provide a typical use case for your extension and detail each of the
|
||||||
|
steps required to get the extension running.
|
||||||
|
|
||||||
Try and provide a typical use case for your extension
|
|
||||||
and detail each of the steps required to get the extension running.
|
|
||||||
|
|
||||||
Typical Example
|
Typical Example
|
||||||
===============
|
===============
|
||||||
|
|
||||||
- Does the integrator need to include a static template?
|
- Do we need to include a static template?
|
||||||
- For example add a code snippet with comments
|
- For example add a code snippet with comments
|
||||||
|
|
||||||
Minimal example of TypoScript:
|
Minimal example of TypoScript:
|
||||||
@ -39,12 +43,12 @@ Minimal example of TypoScript:
|
|||||||
TypoScript Reference
|
TypoScript Reference
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Possible subsections: Reference of TypoScript options.
|
When detailing data types or standard TypoScript
|
||||||
The construct below show the recommended structure for TypoScript properties listing and description.
|
features, don't hesitate to cross-link to the TypoScript
|
||||||
|
Reference.
|
||||||
|
|
||||||
When detailing data types or standard TypoScript features,
|
Information about how to use cross-references:
|
||||||
don't hesitate to cross-link to the TypoScript Reference as shown below.
|
https://docs.typo3.org/typo3cms/HowToDocument/WritingReST/Hyperlinks.html
|
||||||
|
|
||||||
See :ref:`h2document:how-to-document-hyperlinks` for information about how to use cross-references.
|
|
||||||
|
|
||||||
See the :file:`Settings.cfg` file for the declaration of cross-linking keys.
|
See the :file:`Settings.cfg` file for the declaration of cross-linking keys.
|
||||||
|
You can add more keys besides tsref.
|
||||||
|
@ -38,47 +38,6 @@
|
|||||||
"relations": []
|
"relations": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"config": {
|
|
||||||
"position": [
|
|
||||||
398,
|
|
||||||
234
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"name": "New Model Object",
|
|
||||||
"value": {
|
|
||||||
"actionGroup": {
|
|
||||||
"_default0_list": false,
|
|
||||||
"_default1_show": false,
|
|
||||||
"_default2_new_create": false,
|
|
||||||
"_default3_edit_update": false,
|
|
||||||
"_default4_delete": false,
|
|
||||||
"customActions": [
|
|
||||||
"translations"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"name": "Translation",
|
|
||||||
"objectsettings": {
|
|
||||||
"addDeletedField": true,
|
|
||||||
"addHiddenField": true,
|
|
||||||
"addStarttimeEndtimeFields": true,
|
|
||||||
"aggregateRoot": false,
|
|
||||||
"categorizable": false,
|
|
||||||
"description": "",
|
|
||||||
"mapToTable": "",
|
|
||||||
"parentClass": "",
|
|
||||||
"sorting": false,
|
|
||||||
"type": "Entity",
|
|
||||||
"uid": "291507465262"
|
|
||||||
},
|
|
||||||
"propertyGroup": {
|
|
||||||
"properties": []
|
|
||||||
},
|
|
||||||
"relationGroup": {
|
|
||||||
"relations": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -118,25 +77,14 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"key": "dummy",
|
"key": "dummy",
|
||||||
"name": "dummy"
|
"name": "dummy"
|
||||||
},
|
|
||||||
{
|
|
||||||
"actions": {
|
|
||||||
"controllerActionCombinations": "Translation => translations",
|
|
||||||
"noncacheableActions": "",
|
|
||||||
"switchableActions": ""
|
|
||||||
},
|
|
||||||
"description": "",
|
|
||||||
"key": "translationplugin",
|
|
||||||
"name": "translation"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vendorName": "Cjel"
|
"vendorName": "Cjel"
|
||||||
},
|
},
|
||||||
"wires": [],
|
"wires": [],
|
||||||
"storagePath": "\/var\/www\/html\/webroot\/typo3conf\/ext\/",
|
|
||||||
"log": {
|
"log": {
|
||||||
"last_modified": "2024-02-07 06:12",
|
"last_modified": "2020-04-26 10:03",
|
||||||
"extension_builder_version": "9.10.6",
|
"extension_builder_version": "9.10.2",
|
||||||
"be_user": " (68)"
|
"be_user": " (1)"
|
||||||
}
|
}
|
||||||
}
|
}
|
3
Makefile
3
Makefile
@ -1,3 +0,0 @@
|
|||||||
add_upstreams:
|
|
||||||
git remote add upstream-dt git@git.datentonne.net:typo3/template_aide.git
|
|
||||||
git remote add upstream-gs ssh://vcs@phabricator.glanzstueck.agency/source/typo3-template_aide.git
|
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<xliff version="1.0">
|
<xliff version="1.0">
|
||||||
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2022-04-28T10:23:09Z">
|
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2020-07-16T21:32:04Z">
|
||||||
<header>
|
<header>
|
||||||
<generator>LFEditor</generator>
|
<generator>LFEditor</generator>
|
||||||
</header>
|
</header>
|
||||||
@ -9,10 +9,6 @@
|
|||||||
<source><![CDATA[Default]]></source>
|
<source><![CDATA[Default]]></source>
|
||||||
<target><![CDATA[Standard]]></target>
|
<target><![CDATA[Standard]]></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="disableDragModal" approved="yes">
|
|
||||||
<source><![CDATA[Disable drag and drop confirmation in page tree]]></source>
|
|
||||||
<target><![CDATA[Drag & Drop-Bestätigung im Seitenbaum deaktivieren]]></target>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="homepage" approved="yes">
|
<trans-unit id="homepage" approved="yes">
|
||||||
<source><![CDATA[Homepage]]></source>
|
<source><![CDATA[Homepage]]></source>
|
||||||
<target><![CDATA[Startseite]]></target>
|
<target><![CDATA[Startseite]]></target>
|
||||||
|
@ -1,26 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<xliff version="1.0">
|
<xliff version="1.0">
|
||||||
<file source-language="en" datatype="plaintext" original="EXT:templates_aide/Resources/Private/Language/locallang" date="2024-02-07T18:12:19Z" product-name="templates_aide">
|
<file source-language="en" datatype="plaintext" original="messages" date="2020-07-16T21:32:04Z">
|
||||||
<header/>
|
<header>
|
||||||
|
<generator>LFEditor</generator>
|
||||||
|
</header>
|
||||||
<body>
|
<body>
|
||||||
<trans-unit id="tx_templatesaide_domain_model_dummy" resname="tx_templatesaide_domain_model_dummy">
|
<trans-unit id="default">
|
||||||
<source>Dummy</source>
|
<source><![CDATA[Default]]></source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="tx_templatesaide_domain_model_translation" resname="tx_templatesaide_domain_model_translation">
|
<trans-unit id="homepage">
|
||||||
<source>Translation</source>
|
<source><![CDATA[Homepage]]></source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="default" resname="default">
|
<trans-unit id="subpage">
|
||||||
<source>Default</source>
|
<source><![CDATA[Subpage]]></source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="disableDragModal" resname="disableDragModal">
|
<trans-unit id="tx_templatesaide_domain_model_dummy">
|
||||||
<source>Disable drag and drop confirmation in page tree</source>
|
<source><![CDATA[Dummy]]></source>
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="homepage" resname="homepage">
|
|
||||||
<source>Homepage</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="subpage" resname="subpage">
|
|
||||||
<source>Subpage</source>
|
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
@ -1,32 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<xliff version="1.0">
|
<xliff version="1.0">
|
||||||
<file source-language="en" datatype="plaintext" original="EXT:templates_aide/Resources/Private/Language/locallang_db" date="2024-02-07T18:12:19Z" product-name="templates_aide">
|
<file source-language="en" datatype="plaintext" original="messages" date="2020-04-26T22:03:44Z" product-name="templates_aide">
|
||||||
<header/>
|
<header/>
|
||||||
<body>
|
<body>
|
||||||
<trans-unit id="tx_templatesaide_domain_model_dummy" resname="tx_templatesaide_domain_model_dummy">
|
<trans-unit id="tx_templatesaide_domain_model_dummy">
|
||||||
<source>Dummy</source>
|
<source>Dummy</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="tx_templatesaide_domain_model_translation" resname="tx_templatesaide_domain_model_translation">
|
<trans-unit id="tx_templates_aide_dummy.name">
|
||||||
<source>Translation</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="tx_templates_aide_dummy.name" resname="tx_templates_aide_dummy.name">
|
|
||||||
<source>dummy</source>
|
<source>dummy</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="tx_templates_aide_dummy.description" resname="tx_templates_aide_dummy.description">
|
<trans-unit id="tx_templates_aide_dummy.description">
|
||||||
<source></source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="tx_templates_aide_translationplugin.name" resname="tx_templates_aide_translationplugin.name">
|
|
||||||
<source>translation</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="tx_templates_aide_translationplugin.description" resname="tx_templates_aide_translationplugin.description">
|
|
||||||
<source></source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="tx_templates_aide_translation.name" resname="tx_templates_aide_translation.name">
|
|
||||||
<source>translation</source>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="tx_templates_aide_translation.description" resname="tx_templates_aide_translation.description">
|
|
||||||
<source></source>
|
<source></source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
@ -8,43 +8,18 @@
|
|||||||
<f:variable name="padding" value="20" />
|
<f:variable name="padding" value="20" />
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
<f:if condition="{buttonColor}">
|
|
||||||
<f:else>
|
|
||||||
<f:variable name="buttonColor" value="#ffffff" />
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
<f:if condition="{buttonBackgroundcolor}">
|
|
||||||
<f:else>
|
|
||||||
<f:variable name="buttonBackgroundcolor" value="#8ABF6F" />
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
<f:if condition="{styleH1}">
|
|
||||||
<f:else>
|
|
||||||
<f:variable name="styleH1" value="" />
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
<f:if condition="{styleButton}">
|
|
||||||
<f:else>
|
|
||||||
<f:variable name="styleButton" value="padding: 10px 15px; border-radius: 3px;" />
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
<f:variable name="widthPadded" value="{width - padding - padding}" />
|
<f:variable name="widthPadded" value="{width - padding - padding}" />
|
||||||
<f:variable name="widthTableColumn" value="{widthPadded / 2}" />
|
<f:variable name="widthTableColumn" value="{widthPadded / 2}" />
|
||||||
|
|
||||||
<f:for each="{content}" as="row" key="rowKey" iteration="rowI" >
|
<f:for each="{content}" as="row" key="rowKey" iteration="rowI" >
|
||||||
<v:condition.type.isArray value="{row.data}">
|
<v:condition.type.isArray value="{row.data}">
|
||||||
<f:else>
|
<f:else>
|
||||||
<f:if condition="{row.type} == 'contentBlockHtml'">
|
|
||||||
{row.data -> f:format.raw()}
|
|
||||||
</f:if>
|
|
||||||
<f:if condition="{v:condition.string.contains(haystack: '{row.type}', needle: 'headline', then: '1')}
|
<f:if condition="{v:condition.string.contains(haystack: '{row.type}', needle: 'headline', then: '1')}
|
||||||
|| {row.type} == 'text'
|
|| {row.type} == 'text'
|
||||||
|| {row.type} == 'button'
|
|| {row.type} == 'button'
|
||||||
|| {row.type} == 'buttonleft'
|
|| {row.type} == 'buttonleft'
|
||||||
|| {row.type} == 'buttoncenter'
|
|| {row.type} == 'buttoncenter'
|
||||||
|| {row.type} == 'buttonright'
|
|| {row.type} == 'buttonright'
|
||||||
|| {row.type} == 'divider'
|
|
||||||
|| {row.type} == 'hr'
|
|
||||||
">
|
">
|
||||||
<!--[if mso | IE]>
|
<!--[if mso | IE]>
|
||||||
<table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:{width}px;" width="{width}" >
|
<table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:{width}px;" width="{width}" >
|
||||||
@ -65,14 +40,6 @@
|
|||||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<f:switch expression="{row.type}">
|
|
||||||
<f:case value="divider">
|
|
||||||
<f:variable name='paddingTd' value='20px 0' />
|
|
||||||
</f:case>
|
|
||||||
<f:defaultCase>
|
|
||||||
<f:variable name='paddingTd' value='0' />
|
|
||||||
</f:defaultCase>
|
|
||||||
</f:switch>
|
|
||||||
<td style="vertical-align:top;padding:0;">
|
<td style="vertical-align:top;padding:0;">
|
||||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style width="100%">
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
@ -87,11 +54,11 @@
|
|||||||
<f:variable name='align' value='left' />
|
<f:variable name='align' value='left' />
|
||||||
</f:defaultCase>
|
</f:defaultCase>
|
||||||
</f:switch>
|
</f:switch>
|
||||||
<td align="{align}" style="font-size:0px;padding:{paddingTd};word-break:break-word;">
|
<td align="{align}" style="font-size:0px;padding:0;word-break:break-word;">
|
||||||
<div style="font-family:Arial, sans-serif;font-size:16px;line-height:1.4;text-align:{align};color:#000000;">
|
<div style="font-family:Arial, sans-serif;font-size:16px;line-height:1.4;text-align:{align};color:#000000;">
|
||||||
<f:switch expression="{row.type}">
|
<f:switch expression="{row.type}">
|
||||||
<f:case value="headline">
|
<f:case value="headline">
|
||||||
<h1 style="{styleH1}">{row.data -> f:format.nl2br() -> f:format.raw()}</h1>
|
<h1>{row.data -> f:format.nl2br() -> f:format.raw()}</h1>
|
||||||
</f:case>
|
</f:case>
|
||||||
<f:case value="headline2">
|
<f:case value="headline2">
|
||||||
<h2>{row.data -> f:format.nl2br() -> f:format.raw()}</h2>
|
<h2>{row.data -> f:format.nl2br() -> f:format.raw()}</h2>
|
||||||
@ -111,12 +78,7 @@
|
|||||||
</f:case>
|
</f:case>
|
||||||
<f:case value="buttoncenter">
|
<f:case value="buttoncenter">
|
||||||
<span style="display: inline-block;" class="buttonwrapper">
|
<span style="display: inline-block;" class="buttonwrapper">
|
||||||
<f:variable name="rowData">{row.data -> v:format.json.decode()}</f:variable>
|
{row.data -> f:format.nl2br() -> f:format.raw()}
|
||||||
<a style="display: inline-block; color: {buttonColor}" target="_blank" href="{rowData.0}">
|
|
||||||
<span style="display: inline-block; background-color: {buttonBackgroundcolor}; {styleButton}">
|
|
||||||
{rowData.1}
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</span>
|
</span>
|
||||||
</f:case>
|
</f:case>
|
||||||
<f:case value="buttonright">
|
<f:case value="buttonright">
|
||||||
@ -124,38 +86,6 @@
|
|||||||
{row.data -> f:format.nl2br() -> f:format.raw()}
|
{row.data -> f:format.nl2br() -> f:format.raw()}
|
||||||
</span>
|
</span>
|
||||||
</f:case>
|
</f:case>
|
||||||
<f:case value="hr">
|
|
||||||
<p style="border-top:solid 1px #bababa;font-size:1px;margin:13px auto;width:100%;">
|
|
||||||
</p>
|
|
||||||
<!--[if mso | IE]>
|
|
||||||
|
|
||||||
<table
|
|
||||||
align="center"
|
|
||||||
border="0"
|
|
||||||
cellpadding="0"
|
|
||||||
cellspacing="0"
|
|
||||||
style="border-top:solid 1px #bababa;font-size:1px;margin:13px auto;width:100%;"
|
|
||||||
role="presentation"
|
|
||||||
width="550px"
|
|
||||||
>
|
|
||||||
<tr>
|
|
||||||
<td style="height:0;line-height:0;">
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<![endif]-->
|
|
||||||
</f:case>
|
|
||||||
<f:case value="divider">
|
|
||||||
<p style="border-top:solid 2px #025093;font-size:1px;margin:0px auto;width:100%;">
|
|
||||||
</p>
|
|
||||||
<!--[if mso | IE]>
|
|
||||||
<table align="center" border="0" cellpadding="0" cellspacing="0" style="border-top:solid 2px #025093;font-size:1px;margin:0px auto;width:550px;" role="presentation" width="550px" >
|
|
||||||
<tr><td style="height:0;line-height:0;"> </td></tr>
|
|
||||||
</table>
|
|
||||||
<![endif]-->
|
|
||||||
</f:case>
|
|
||||||
<f:defaultCase>
|
<f:defaultCase>
|
||||||
<p>{row.data -> f:format.nl2br() -> f:format.raw()}</p>
|
<p>{row.data -> f:format.nl2br() -> f:format.raw()}</p>
|
||||||
</f:defaultCase>
|
</f:defaultCase>
|
||||||
@ -192,9 +122,6 @@
|
|||||||
<f:case value="table">
|
<f:case value="table">
|
||||||
<f:variable name="type" value="table" />
|
<f:variable name="type" value="table" />
|
||||||
</f:case>
|
</f:case>
|
||||||
<f:case value="tablelr">
|
|
||||||
<f:variable name="type" value="table" />
|
|
||||||
</f:case>
|
|
||||||
<f:case value="tableLayout">
|
<f:case value="tableLayout">
|
||||||
<f:variable name="type" value="table" />
|
<f:variable name="type" value="table" />
|
||||||
</f:case>
|
</f:case>
|
||||||
@ -236,19 +163,11 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="" style="vertical-align:top;width:{widthTableColumn}px;">
|
<td class="" style="vertical-align:top;width:{widthTableColumn}px;">
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<f:switch expression="{row.type}">
|
<div class="mj-column-per-50 outlook-group-fix" style="font-size:13px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
<f:case value="tablelr">
|
|
||||||
<f:variable name="align" value="right" />
|
|
||||||
</f:case>
|
|
||||||
<f:defaultCase>
|
|
||||||
<f:variable name="align" value="left" />
|
|
||||||
</f:defaultCase>
|
|
||||||
</f:switch>
|
|
||||||
<div class="mj-column-per-50 outlook-group-fix" style="font-size:13px;text-align:{align};direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
|
||||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td align="{align}" style="font-size:0px;padding:0px 4px;word-break:break-word;">
|
<td align="left" style="font-size:0px;padding:0px 4px;word-break:break-word;">
|
||||||
<div style="font-family:Arial, sans-serif;font-size:16px;line-height:1.4;text-align:{align};color:#000000;">
|
<div style="font-family:Arial, sans-serif;font-size:16px;line-height:1.4;text-align:left;color:#000000;">
|
||||||
<div>{row.data.1 -> f:format.nl2br() -> f:format.raw()}</div>
|
<div>{row.data.1 -> f:format.nl2br() -> f:format.raw()}</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
### {row.data -> f:format.nl2br() -> f:format.raw()}
|
### {row.data -> f:format.nl2br() -> f:format.raw()}
|
||||||
</f:case>
|
</f:case>
|
||||||
<f:defaultCase>
|
<f:defaultCase>
|
||||||
<f:spaceless><c:format.wordWrap limit="76" glue="{br}">
|
<f:spaceless><v:format.wordWrap limit="76" glue="{br}">
|
||||||
{row.data -> f:format.raw()}
|
{row.data -> f:format.raw()}
|
||||||
</c:format.wordWrap>
|
</v:format.wordWrap>
|
||||||
</f:spaceless>{br}{br}
|
</f:spaceless>{br}{br}
|
||||||
</f:defaultCase>
|
</f:defaultCase>
|
||||||
</f:switch>
|
</f:switch>
|
||||||
|
@ -55,19 +55,3 @@ pageContentelement {
|
|||||||
no_cache = 1
|
no_cache = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pageTranslation = PAGE
|
|
||||||
pageTranslation {
|
|
||||||
typeNum = 6001
|
|
||||||
10 = USER_INT
|
|
||||||
10 {
|
|
||||||
userFunc = Cjel\TemplatesAide\UserFunc\Translation->render
|
|
||||||
}
|
|
||||||
config {
|
|
||||||
disableAllHeaderCode = 1
|
|
||||||
xhtml_cleaning = 0
|
|
||||||
admPanel = 0
|
|
||||||
debug = 0
|
|
||||||
no_cache = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
page.10.stdWrap.parseFunc {
|
|
||||||
htmlSanitize = 0
|
|
||||||
externalBlocks = a
|
|
||||||
externalBlocks {
|
|
||||||
a.stdWrap.postUserFunc = Cjel\TemplatesAide\UserFunc\ParseExternalLinks->render
|
|
||||||
a.stdWrap.postUserFunc {
|
|
||||||
iconFile = EXT:site_templates/Resources/Private/Partials/Atoms/IconExternalLinkFill.html
|
|
||||||
iconPosistion = end
|
|
||||||
linkText = Externer Link zu
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +1,6 @@
|
|||||||
|
#options.pageTree.showPageIdWithTitle = 1
|
||||||
|
options.pageTree.showNavTitle = 1
|
||||||
|
|
||||||
options {
|
options {
|
||||||
folderTree {
|
folderTree {
|
||||||
uploadFieldsInLinkBrowser = 0
|
uploadFieldsInLinkBrowser = 0
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 230 B |
@ -1,4 +1 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#666" d="M12.053 11.026c-.238.07-.427.095-.674.095-2.033 0-5.017-7.1-5.017-9.462 0-.87.207-1.16.497-1.41C4.373.54 1.39 1.452.435 2.613c-.207.29-.332.746-.332 1.326C.103 7.628 4.04 16 6.82 16c1.283 0 3.45-2.114 5.233-4.974M10.756 0c2.57 0 5.14.415 5.14 1.865 0 2.943-1.865 6.508-2.818 6.508-1.7 0-3.814-4.725-3.814-7.088C9.264.207 9.68 0 10.756 0"/></svg>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
|
||||||
<path fill="#666" d="M12.053 11.026c-.238.07-.427.095-.674.095-2.033 0-5.017-7.1-5.017-9.462 0-.87.207-1.16.497-1.41C4.373.54 1.39 1.452.435 2.613c-.207.29-.332.746-.332 1.326C.103 7.628 4.04 16 6.82 16c1.283 0 3.45-2.114 5.233-4.974M10.756 0c2.57 0 5.14.415 5.14 1.865 0 2.943-1.865 6.508-2.818 6.508-1.7 0-3.814-4.725-3.814-7.088C9.264.207 9.68 0 10.756 0"></path>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 476 B After Width: | Height: | Size: 426 B |
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
|
||||||
<path fill="#666" d="M12.053 11.026c-.238.07-.427.095-.674.095-2.033 0-5.017-7.1-5.017-9.462 0-.87.207-1.16.497-1.41C4.373.54 1.39 1.452.435 2.613c-.207.29-.332.746-.332 1.326C.103 7.628 4.04 16 6.82 16c1.283 0 3.45-2.114 5.233-4.974M10.756 0c2.57 0 5.14.415 5.14 1.865 0 2.943-1.865 6.508-2.818 6.508-1.7 0-3.814-4.725-3.814-7.088C9.264.207 9.68 0 10.756 0"></path>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 476 B |
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
|
||||||
<path fill="#666" d="M12.053 11.026c-.238.07-.427.095-.674.095-2.033 0-5.017-7.1-5.017-9.462 0-.87.207-1.16.497-1.41C4.373.54 1.39 1.452.435 2.613c-.207.29-.332.746-.332 1.326C.103 7.628 4.04 16 6.82 16c1.283 0 3.45-2.114 5.233-4.974M10.756 0c2.57 0 5.14.415 5.14 1.865 0 2.943-1.865 6.508-2.818 6.508-1.7 0-3.814-4.725-3.814-7.088C9.264.207 9.68 0 10.756 0"></path>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 476 B |
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Tests\Unit\Controller;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case.
|
|
||||||
*
|
|
||||||
* @author Philipp Dieter <philippdieter@attic-media.net>
|
|
||||||
*/
|
|
||||||
class TranslationControllerTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var \Cjel\TemplatesAide\Controller\TranslationController
|
|
||||||
*/
|
|
||||||
protected $subject = null;
|
|
||||||
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->subject = $this->getMockBuilder(\Cjel\TemplatesAide\Controller\TranslationController::class)
|
|
||||||
->setMethods(['redirect', 'forward', 'addFlashMessage'])
|
|
||||||
->disableOriginalConstructor()
|
|
||||||
->getMock();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown()
|
|
||||||
{
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Cjel\TemplatesAide\Tests\Unit\Domain\Model;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case.
|
|
||||||
*
|
|
||||||
* @author Philipp Dieter <philippdieter@attic-media.net>
|
|
||||||
*/
|
|
||||||
class TranslationTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var \Cjel\TemplatesAide\Domain\Model\Translation
|
|
||||||
*/
|
|
||||||
protected $subject = null;
|
|
||||||
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->subject = new \Cjel\TemplatesAide\Domain\Model\Translation();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown()
|
|
||||||
{
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function dummyTestToNotLeaveThisFileEmpty()
|
|
||||||
{
|
|
||||||
self::markTestIncomplete();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
*** webroot/typo3/sysext/core/Classes/DataHandling/DataHandler.php.orig 2022-04-22 13:15:26.314780488 +0200
|
|
||||||
--- webroot/typo3/sysext/core/Classes/DataHandling/DataHandler.php 2022-04-22 13:15:39.018129312 +0200
|
|
||||||
*************** class DataHandler implements LoggerAware
|
|
||||||
*** 7431,7446 ****
|
|
||||||
}
|
|
||||||
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
|
|
||||||
$insertErrorMessage = '';
|
|
||||||
! try {
|
|
||||||
// Execute the INSERT query:
|
|
||||||
$connection->insert(
|
|
||||||
$table,
|
|
||||||
$fieldArray,
|
|
||||||
$typeArray
|
|
||||||
);
|
|
||||||
! } catch (DBALException $e) {
|
|
||||||
! $insertErrorMessage = $e->getPrevious()->getMessage();
|
|
||||||
! }
|
|
||||||
// If succees, do...:
|
|
||||||
if ($insertErrorMessage === '') {
|
|
||||||
// Set mapping for NEW... -> real uid:
|
|
||||||
--- 7431,7446 ----
|
|
||||||
}
|
|
||||||
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
|
|
||||||
$insertErrorMessage = '';
|
|
||||||
! //try {
|
|
||||||
// Execute the INSERT query:
|
|
||||||
$connection->insert(
|
|
||||||
$table,
|
|
||||||
$fieldArray,
|
|
||||||
$typeArray
|
|
||||||
);
|
|
||||||
! //} catch (DBALException $e) {
|
|
||||||
! // $insertErrorMessage = $e->getPrevious()->getMessage();
|
|
||||||
! //}
|
|
||||||
// If succees, do...:
|
|
||||||
if ($insertErrorMessage === '') {
|
|
||||||
// Set mapping for NEW... -> real uid:
|
|
@ -1,12 +0,0 @@
|
|||||||
--- webroot/typo3/sysext/impexp/Classes/Import.php 2022-04-22 12:43:09.439221153 +0200
|
|
||||||
+++ webroot/typo3/sysext/impexp/Classes/Import.php 2022-04-22 12:43:27.169242298 +0200
|
|
||||||
@@ -446,7 +446,8 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($newFile->getSha1() !== $fileRecord['sha1']) {
|
|
||||||
- $this->error('Error: The hash of the written file is not identical to the import data! File could be corrupted! File: "' . $fileRecord['identifier'] . '" with storage uid "' . $fileRecord['storage'] . '"');
|
|
||||||
+ print('Error: The hash of the written file is not identical to the import data! File could be corrupted! File: "' . $fileRecord['identifier'] . '" with storage uid "' . $fileRecord['storage'] . '"');
|
|
||||||
+ print(PHP_EOL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
--- a/Resources/Public/JavaScript/SvgTree.js 2022-04-28 12:32:01.961189044 +0200
|
|
||||||
+++ b/Resources/Public/JavaScript/SvgTree.js 2022-04-28 12:32:06.047858227 +0200
|
|
||||||
@@ -37,6 +37,7 @@
|
|
||||||
showCheckboxes: false,
|
|
||||||
showIcons: false,
|
|
||||||
allowRecursiveDelete: false,
|
|
||||||
+ disableDragModal: false,
|
|
||||||
marginTop: 15,
|
|
||||||
nodeHeight: 20,
|
|
||||||
indentWidth: 16,
|
|
||||||
--- a/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js 2022-04-28 11:43:41.046705421 +0200
|
|
||||||
+++ b/Resources/Public/JavaScript/PageTree/PageTreeDragDrop.js 2022-04-28 12:30:40.741138721 +0200
|
|
||||||
@@ -275,6 +275,10 @@
|
|
||||||
var modalText = options.position === 'in' ? TYPO3.lang['mess.move_into'] : TYPO3.lang['mess.move_after'];
|
|
||||||
modalText = modalText.replace('%s', options.node.name).replace('%s', options.target.name);
|
|
||||||
|
|
||||||
+ if (tree.settings.disableDragModal) {
|
|
||||||
+ options.command = 'move';
|
|
||||||
+ tree.sendChangeCommand(options);
|
|
||||||
+ } else {
|
|
||||||
Modal.confirm(
|
|
||||||
TYPO3.lang.move_page,
|
|
||||||
modalText,
|
|
||||||
@@ -307,6 +311,7 @@
|
|
||||||
|
|
||||||
Modal.dismiss();
|
|
||||||
});
|
|
||||||
+ }
|
|
||||||
} else if (tree.nodeIsOverDelete) {
|
|
||||||
var options = _this.changeNodePosition({droppedNode: droppedNode, command: 'delete'});
|
|
||||||
if (tree.settings.displayDeleteConfirmation) {
|
|
||||||
--- a/Classes/Controller/Page/TreeController.php 2022-04-28 13:00:20.025466105 +0200
|
|
||||||
+++ b/Classes/Controller/Page/TreeController.php 2022-04-28 13:00:22.312133921 +0200
|
|
||||||
@@ -155,6 +155,7 @@
|
|
||||||
'doktypes' => $this->getDokTypes(),
|
|
||||||
'displayDeleteConfirmation' => $this->getBackendUser()->jsConfirmation(JsConfirmation::DELETE),
|
|
||||||
'temporaryMountPoint' => $this->getMountPointPath((int)($this->getBackendUser()->uc['pageTree_temporaryMountPoint'] ?? 0)),
|
|
||||||
+ 'disableDragModal' => !empty($this->getBackendUser()->uc['disableDragModal'])
|
|
||||||
];
|
|
||||||
|
|
||||||
return new JsonResponse($configuration);
|
|
@ -9,7 +9,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"typo3/cms-core": "8.7.0 - 11.99.99",
|
"typo3/cms-core": "8.7.0 - 10.99.99",
|
||||||
"sarhan/php-flatten": "^4.0"
|
"sarhan/php-flatten": "^4.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -23,6 +23,7 @@ $EM_CONF[$_EXTKEY] = [
|
|||||||
'version' => '0.0.1',
|
'version' => '0.0.1',
|
||||||
'constraints' => [
|
'constraints' => [
|
||||||
'depends' => [
|
'depends' => [
|
||||||
|
'typo3' => '8.7.0-10.99.99',
|
||||||
],
|
],
|
||||||
'conflicts' => [],
|
'conflicts' => [],
|
||||||
'suggests' => [],
|
'suggests' => [],
|
||||||
|
@ -1,88 +1,41 @@
|
|||||||
<?php
|
<?php
|
||||||
defined('TYPO3_MODE') || die('Access denied.');
|
defined('TYPO3_MODE') || die('Access denied.');
|
||||||
|
|
||||||
|
|
||||||
(static function() {
|
|
||||||
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
||||||
call_user_func(
|
call_user_func(
|
||||||
function()
|
function()
|
||||||
{
|
{
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||||
'TemplatesAide',
|
'Cjel.TemplatesAide',
|
||||||
'Translationplugin',
|
'Dummy',
|
||||||
[
|
[
|
||||||
\Cjel\TemplatesAide\Controller\TranslationController::class => 'translations'
|
'Dummy' => 'list'
|
||||||
],
|
],
|
||||||
// non-cacheable actions
|
// non-cacheable actions
|
||||||
[
|
[
|
||||||
\Cjel\TemplatesAide\Controller\TranslationController::class => ''
|
'Dummy' => ''
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
// wizards
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
'mod {
|
||||||
'Cjel.TemplatesAide',
|
wizards.newContentElement.wizardItems.plugins {
|
||||||
'Dummy',
|
elements {
|
||||||
[
|
dummy {
|
||||||
'Dummy' => 'list',
|
iconIdentifier = templates_aide-plugin-dummy
|
||||||
'Translation' => 'translations'
|
title = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_dummy.name
|
||||||
],
|
description = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_dummy.description
|
||||||
// non-cacheable actions
|
tt_content_defValues {
|
||||||
[
|
CType = list
|
||||||
'Dummy' => '',
|
list_type = templatesaide_dummy
|
||||||
'Translation' => ''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
|
||||||
'Cjel.TemplatesAide',
|
|
||||||
'Translationplugin',
|
|
||||||
[
|
|
||||||
'Translation' => 'translations'
|
|
||||||
],
|
|
||||||
// non-cacheable actions
|
|
||||||
[
|
|
||||||
'Dummy' => '',
|
|
||||||
'Translation' => ''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// wizards
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
|
|
||||||
'mod {
|
|
||||||
wizards.newContentElement.wizardItems.plugins {
|
|
||||||
elements {
|
|
||||||
dummy {
|
|
||||||
iconIdentifier = templates_aide-plugin-dummy
|
|
||||||
title = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_dummy.name
|
|
||||||
description = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_dummy.description
|
|
||||||
tt_content_defValues {
|
|
||||||
CType = list
|
|
||||||
list_type = templatesaide_dummy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
translationplugin {
|
|
||||||
iconIdentifier = templates_aide-plugin-translationplugin
|
|
||||||
title = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_translationplugin.name
|
|
||||||
description = LLL:EXT:templates_aide/Resources/Private/Language/locallang_db.xlf:tx_templates_aide_translationplugin.description
|
|
||||||
tt_content_defValues {
|
|
||||||
CType = list
|
|
||||||
list_type = templatesaide_translationplugin
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
show = *
|
|
||||||
}
|
}
|
||||||
}'
|
show = *
|
||||||
);
|
}
|
||||||
|
}'
|
||||||
|
);
|
||||||
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
|
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
|
||||||
|
|
||||||
$iconRegistry->registerIcon(
|
$iconRegistry->registerIcon(
|
||||||
@ -91,12 +44,6 @@ call_user_func(
|
|||||||
['source' => 'EXT:templates_aide/Resources/Public/Icons/user_plugin_dummy.svg']
|
['source' => 'EXT:templates_aide/Resources/Public/Icons/user_plugin_dummy.svg']
|
||||||
);
|
);
|
||||||
|
|
||||||
$iconRegistry->registerIcon(
|
|
||||||
'templates_aide-plugin-translationplugin',
|
|
||||||
\TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
|
|
||||||
['source' => 'EXT:templates_aide/Resources/Public/Icons/user_plugin_translationplugin.svg']
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
||||||
|
@ -11,20 +11,11 @@ call_user_func(
|
|||||||
'dummy'
|
'dummy'
|
||||||
);
|
);
|
||||||
|
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
|
||||||
'Cjel.TemplatesAide',
|
|
||||||
'Translationplugin',
|
|
||||||
'translation'
|
|
||||||
);
|
|
||||||
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('templates_aide', 'Configuration/TypoScript', 'Templates Aide');
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('templates_aide', 'Configuration/TypoScript', 'Templates Aide');
|
||||||
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_templatesaide_domain_model_dummy', 'EXT:templates_aide/Resources/Private/Language/locallang_csh_tx_templatesaide_domain_model_dummy.xlf');
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_templatesaide_domain_model_dummy', 'EXT:templates_aide/Resources/Private/Language/locallang_csh_tx_templatesaide_domain_model_dummy.xlf');
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_templatesaide_domain_model_dummy');
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_templatesaide_domain_model_dummy');
|
||||||
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_templatesaide_domain_model_translation', 'EXT:templates_aide/Resources/Private/Language/locallang_csh_tx_templatesaide_domain_model_translation.xlf');
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_templatesaide_domain_model_translation');
|
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
||||||
@ -39,28 +30,17 @@ call_user_func(
|
|||||||
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms']['db_new_content_el']['wizardItemsHook'][] =
|
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms']['db_new_content_el']['wizardItemsHook'][] =
|
||||||
\Cjel\TemplatesAide\Hooks\WizardItems::class;
|
\Cjel\TemplatesAide\Hooks\WizardItems::class;
|
||||||
|
|
||||||
|
if(\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->isDevelopment()) {
|
||||||
if (version_compare(TYPO3_branch, '10.0', '>=')) {
|
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
||||||
if (\TYPO3\CMS\Core\Core\Environment::getContext()->isDevelopment()) {
|
'EXT:templates_aide/Resources/Public/Css/backend/dev';
|
||||||
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
|
||||||
'EXT:templates_aide/Resources/Public/Css/backend/dev';
|
|
||||||
}
|
|
||||||
if(\TYPO3\CMS\Core\Core\Environment::getContext()->__toString() === 'Production/Stage') {
|
|
||||||
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
|
||||||
'EXT:templates_aide/Resources/Public/Css/backend/production-stage';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->isDevelopment()) {
|
|
||||||
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
|
||||||
'EXT:templates_aide/Resources/Public/Css/backend/dev';
|
|
||||||
}
|
|
||||||
if(\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->__toString() === 'Production/Stage') {
|
|
||||||
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
|
||||||
'EXT:templates_aide/Resources/Public/Css/backend/production-stage';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['templates_aide_default'] =
|
if(\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->__toString() === 'Production/Stage') {
|
||||||
|
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['dev'] =
|
||||||
|
'EXT:templates_aide/Resources/Public/Css/backend/production-stage';
|
||||||
|
}
|
||||||
|
|
||||||
|
$GLOBALS['TBE_STYLES']['skins']['backend']['stylesheetDirectories']['default'] =
|
||||||
'EXT:templates_aide/Resources/Public/Css/backend/default';
|
'EXT:templates_aide/Resources/Public/Css/backend/default';
|
||||||
|
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
|
||||||
@ -85,13 +65,3 @@ call_user_func(
|
|||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$GLOBALS['TYPO3_USER_SETTINGS']['columns']['disableDragModal'] = [
|
|
||||||
'type' => 'check',
|
|
||||||
'label' => 'LLL:EXT:templates_aide/Resources/Private/Language/locallang.xlf:disableDragModal',
|
|
||||||
];
|
|
||||||
$GLOBALS['TYPO3_USER_SETTINGS']['showitem'] = str_replace(
|
|
||||||
'recursiveDelete',
|
|
||||||
'recursiveDelete,disableDragModal',
|
|
||||||
$GLOBALS['TYPO3_USER_SETTINGS']['showitem'],
|
|
||||||
);
|
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
#
|
|
||||||
# Table structure for table 'tx_templatesaide_domain_model_dummy'
|
|
||||||
#
|
|
||||||
CREATE TABLE tx_templatesaide_domain_model_dummy (
|
|
||||||
|
|
||||||
uid int(11) NOT NULL auto_increment,
|
|
||||||
pid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
crdate int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
deleted smallint(5) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
hidden smallint(5) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
starttime int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
endtime int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
t3ver_oid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_id int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_wsid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_label varchar(255) DEFAULT '' NOT NULL,
|
|
||||||
t3ver_state smallint(6) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_stage int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_count int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_tstamp int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_move_id int(11) DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
sys_language_uid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
l10n_parent int(11) DEFAULT '0' NOT NULL,
|
|
||||||
l10n_diffsource mediumblob,
|
|
||||||
l10n_state text,
|
|
||||||
|
|
||||||
PRIMARY KEY (uid),
|
|
||||||
KEY parent (pid),
|
|
||||||
KEY t3ver_oid (t3ver_oid,t3ver_wsid),
|
|
||||||
KEY language (l10n_parent,sys_language_uid)
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
#
|
|
||||||
# Table structure for table 'tx_templatesaide_domain_model_translation'
|
|
||||||
#
|
|
||||||
CREATE TABLE tx_templatesaide_domain_model_translation (
|
|
||||||
|
|
||||||
uid int(11) NOT NULL auto_increment,
|
|
||||||
pid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
crdate int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
deleted smallint(5) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
hidden smallint(5) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
starttime int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
endtime int(11) unsigned DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
t3ver_oid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_id int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_wsid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_label varchar(255) DEFAULT '' NOT NULL,
|
|
||||||
t3ver_state smallint(6) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_stage int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_count int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_tstamp int(11) DEFAULT '0' NOT NULL,
|
|
||||||
t3ver_move_id int(11) DEFAULT '0' NOT NULL,
|
|
||||||
|
|
||||||
sys_language_uid int(11) DEFAULT '0' NOT NULL,
|
|
||||||
l10n_parent int(11) DEFAULT '0' NOT NULL,
|
|
||||||
l10n_diffsource mediumblob,
|
|
||||||
l10n_state text,
|
|
||||||
|
|
||||||
PRIMARY KEY (uid),
|
|
||||||
KEY parent (pid),
|
|
||||||
KEY t3ver_oid (t3ver_oid,t3ver_wsid),
|
|
||||||
KEY language (l10n_parent,sys_language_uid)
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
## EXTENSION BUILDER DEFAULTS END TOKEN - Everything BEFORE this line is overwritten with the defaults of the extension builder
|
|
@ -1,34 +0,0 @@
|
|||||||
.link-external
|
|
||||||
.link-external-inner
|
|
||||||
position: relative
|
|
||||||
.icon-circle-right
|
|
||||||
display: none
|
|
||||||
.icon-link-external
|
|
||||||
display: inline-block
|
|
||||||
position: relative
|
|
||||||
top: 2px
|
|
||||||
margin-left: 4px
|
|
||||||
//right: 2px
|
|
||||||
width: 16px
|
|
||||||
line-height: 1
|
|
||||||
div
|
|
||||||
display: inline-block
|
|
||||||
.svg-icon-element,
|
|
||||||
.svg-icon
|
|
||||||
display: block
|
|
||||||
width: 16px
|
|
||||||
height: 16px
|
|
||||||
.link-external-sr-only
|
|
||||||
position: absolute !important
|
|
||||||
margin: 0
|
|
||||||
border: 0
|
|
||||||
padding: 0
|
|
||||||
width: 1px
|
|
||||||
height: 1px
|
|
||||||
overflow: hidden
|
|
||||||
white-space: nowrap
|
|
||||||
clip: rect(1px 1px 1px 1px)
|
|
||||||
clip: rect(1px, 1px, 1px, 1px)
|
|
||||||
clip-path: inset(50%)
|
|
||||||
&.imagelink
|
|
||||||
padding-left: 0
|
|
Loading…
x
Reference in New Issue
Block a user