[MERGE] Branch 'master' of ssh://phabricator.glanzstueck.agency/source/typo3-template_aide
This commit is contained in:
@@ -45,7 +45,11 @@ class ArrayUtility
|
||||
$value = self::removeEmptyStrings($value);
|
||||
} else {
|
||||
if (is_string($value) && !strlen($value)) {
|
||||
unset($array[$key]);
|
||||
if (is_array($array)) {
|
||||
unset($array[$key]);
|
||||
} else {
|
||||
unset($array->$key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
57
Classes/Utility/DatabaseUtility.php
Normal file
57
Classes/Utility/DatabaseUtility.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,18 @@ class MailUtility
|
||||
$type = 'list';
|
||||
$textPart = substr($textPart, 2);
|
||||
}
|
||||
if (substr($textPart, 0, 3) === '+< ') {
|
||||
$type = 'buttonleft';
|
||||
$textPart = substr($textPart, 3);
|
||||
}
|
||||
if (substr($textPart, 0, 3) === '+| ') {
|
||||
$type = 'buttoncenter';
|
||||
$textPart = substr($textPart, 3);
|
||||
}
|
||||
if (substr($textPart, 0, 3) === '+> ') {
|
||||
$type = 'buttonright';
|
||||
$textPart = substr($textPart, 3);
|
||||
}
|
||||
if (substr($textPart, 0, 2) === '| ') {
|
||||
$type = 'table';
|
||||
$textPart = substr($textPart, 2);
|
||||
@@ -116,6 +128,28 @@ class MailUtility
|
||||
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
|
||||
* allows to intercept sender for testing
|
||||
@@ -195,6 +229,10 @@ class MailUtility
|
||||
case 'headline':
|
||||
case 'headline2':
|
||||
case 'headline3':
|
||||
case 'button':
|
||||
case 'buttonleft':
|
||||
case 'buttoncenter':
|
||||
case 'buttonright':
|
||||
$row['data'] = str_replace(
|
||||
"\\\n",
|
||||
'',
|
||||
@@ -203,16 +241,33 @@ class MailUtility
|
||||
$htmlRow = $row;
|
||||
$htmlRow['data'] = preg_replace_callback(
|
||||
'/\[.*\]/mU',
|
||||
function($matches) {
|
||||
function($matches) use ($row) {
|
||||
foreach ($matches as $match) {
|
||||
return preg_replace_callback(
|
||||
'/\[(\S*)\s(.*)\]/mU',
|
||||
function($matchesInner) {
|
||||
return '<a href="'
|
||||
. $matchesInner[1]
|
||||
. '">'
|
||||
. $matchesInner[2]
|
||||
. '</a>';
|
||||
function($matchesInner) use ($row) {
|
||||
switch($row['type']) {
|
||||
case 'button':
|
||||
case 'buttonleft':
|
||||
case 'buttoncenter':
|
||||
case 'buttonright':
|
||||
return '<a style="display: inline-block;" href="'
|
||||
. $matchesInner[1]
|
||||
. '">'
|
||||
. '<span style="display: inline-block; padding: 10px 15px; border-radius: 3px; background-color: red;">'
|
||||
. 'Button!!!! '
|
||||
. $matchesInner[2]
|
||||
. '</span>'
|
||||
. '</a>';
|
||||
break;
|
||||
default:
|
||||
return '<a href="'
|
||||
. $matchesInner[1]
|
||||
. '">'
|
||||
. $matchesInner[2]
|
||||
. '</a>';
|
||||
break;
|
||||
}
|
||||
},
|
||||
$match
|
||||
);
|
||||
@@ -257,51 +312,77 @@ class MailUtility
|
||||
$bodydataText[] = $textRow;
|
||||
$bodydataHtml[] = $htmlRow;
|
||||
break;
|
||||
case 'button':
|
||||
case 'buttons':
|
||||
$htmlRow = $row;
|
||||
//$htmlRow['targets'] = preg_replace_callback(
|
||||
// '/\[.*\]/mU',
|
||||
// function($matches) {
|
||||
// foreach ($matches as $match) {
|
||||
// return preg_replace_callback(
|
||||
// '/\[(\S*)\s(.*)\]/mU',
|
||||
// function($matchesInner) {
|
||||
// return $matchesInner;
|
||||
// //return '<a href="'
|
||||
// // . $matchesInner[1]
|
||||
// // . '">'
|
||||
// // . $matchesInner[2]
|
||||
// // . '</a>';
|
||||
// },
|
||||
// $match
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
// $htmlRow['targets']
|
||||
//);
|
||||
$textRow = $row;
|
||||
//$textRow['targets'] = preg_replace_callback(
|
||||
// '/\[.*\]/mU',
|
||||
// function($matches) {
|
||||
// foreach ($matches as $match) {
|
||||
// return preg_replace_callback(
|
||||
// '/\[(\S*)\s(.*)\]/mU',
|
||||
// function($matchesInner) {
|
||||
// return $matchesInner;
|
||||
// //return $matchesInner[2]
|
||||
// // . ': '
|
||||
// // . $matchesInner[1];
|
||||
// },
|
||||
// $match
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
// $textRow['targets']
|
||||
//);
|
||||
$bodydataText[] = $textRow;
|
||||
$bodydataHtml[] = $htmlRow;
|
||||
break;
|
||||
//case 'button':
|
||||
// $row['data'] = str_replace(
|
||||
// "\\\n",
|
||||
// '',
|
||||
// $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':
|
||||
$mail->attach(new \Swift_Attachment(
|
||||
$row['data'][0],
|
||||
@@ -325,6 +406,9 @@ class MailUtility
|
||||
}
|
||||
$textView->assign('content', $bodydataText);
|
||||
$htmlView->assign('content', $bodydataHtml);
|
||||
//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
|
||||
// $bodydataHtml, null, 8, true, false
|
||||
//);
|
||||
$domain = $settings['mailDomain'];
|
||||
if ($assetDomain) {
|
||||
$domain = $assetDomain;
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace Cjel\TemplatesAide\Utility;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
use TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser;
|
||||
|
||||
/**
|
||||
* Utility to work with site config
|
||||
@@ -35,20 +36,33 @@ class SiteConfigUtility
|
||||
$objectManager = GeneralUtility::makeInstance(
|
||||
ObjectManager::class
|
||||
);
|
||||
$typoScriptParser = GeneralUtility::makeInstance(
|
||||
TypoScriptParser::class
|
||||
);
|
||||
$configurationManager = $objectManager->get(
|
||||
ConfigurationManagerInterface::class
|
||||
);
|
||||
$typoscript = $configurationManager->getConfiguration(
|
||||
ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT
|
||||
);
|
||||
$typoscript = GeneralUtility::removeDotsFromTS($typoscript);
|
||||
$siteConfig = $typoscript;
|
||||
if ($limitToSiteConfig) {
|
||||
$siteConfig = $typoscript['config']['site'];
|
||||
$siteConfig = $typoscript['config.']['site.'];
|
||||
}
|
||||
$current = &$siteConfig;
|
||||
foreach ($pathParts as $key) {
|
||||
if ($current[$key . '.']) {
|
||||
$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)
|
||||
&& array_key_exists('value', $current)
|
||||
|
||||
64
Classes/ViewHelpers/SiteConfigViewHelper.php
Normal file
64
Classes/ViewHelpers/SiteConfigViewHelper.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?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']
|
||||
);
|
||||
}
|
||||
}
|
||||
53
Classes/ViewHelpers/TranslationViewHelper.php
Normal file
53
Classes/ViewHelpers/TranslationViewHelper.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?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;
|
||||
|
||||
class TranslationViewHelper extends AbstractViewHelper
|
||||
{
|
||||
use CompileWithRenderStatic;
|
||||
|
||||
/**
|
||||
* Initialize arguements
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function initializeArguments()
|
||||
{
|
||||
$this->registerArgument(
|
||||
'key',
|
||||
'string',
|
||||
'The translation key to render',
|
||||
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 'this.extension.translation';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user