Initial commit - Typo3 11.5.41

This commit is contained in:
Matteo Gallo
2026-07-03 17:53:31 +02:00
commit 5ca4743197
6811 changed files with 568848 additions and 0 deletions
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Directive;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Mutation;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationCollection;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationMode;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Scope;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceScheme;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\UriValue;
use TYPO3\CMS\Core\Type\Map;
return Map::fromEntries(
[
Scope::backend(),
// NOTICE: When using `MutationMode::Set` existing declarations will be overridden
new MutationCollection(
// results in `default-src 'self'`
new Mutation(MutationMode::Extend, Directive::ImgSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
new Mutation(MutationMode::Extend, Directive::ScriptSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
new Mutation(MutationMode::Extend, Directive::ConnectSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
),
],
[
Scope::frontend(),
// NOTICE: When using `MutationMode::Set` existing declarations will be overridden
new MutationCollection(
// results in `default-src 'self'`
new Mutation(MutationMode::Extend, Directive::ImgSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
new Mutation(MutationMode::Extend, Directive::ScriptSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
new Mutation(MutationMode::Extend, Directive::ConnectSrc, SourceScheme::data, new UriValue('https://*.openstreetmap.org')),
),
]
);
@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
use FriendsOfTYPO3\TtAddress\Domain\Model\Address;
return [
Address::class => [
'tableName' => 'tt_address'
]
];
@@ -0,0 +1,311 @@
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sheet_selection
</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.singleRecords>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.single_records</label>
<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>tt_address</allowed>
<size>5</size>
<minitems>0</minitems>
<autoSizeMax>10</autoSizeMax>
<wizards>
<suggest>
<type>suggest</type>
</suggest>
</wizards>
<suggestOptions>
<default>
<addWhere>AND tt_address.sys_language_uid IN (-1,0)</addWhere>
</default>
</suggestOptions>
</config>
</TCEforms>
</settings.singleRecords>
<settings.groups>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.group_selection</label>
<config>
<type>select</type>
<renderMode>tree</renderMode>
<renderType>selectTree</renderType>
<treeView>1</treeView>
<foreign_table>sys_category</foreign_table>
<foreign_table_where>AND sys_category.sys_language_uid IN (-1, 0) ORDER BY
sys_category.sorting ASC
</foreign_table_where>
<size>10</size>
<minitems>0</minitems>
<treeConfig>
<parentField>parent</parentField>
<appearance>
<expandAll>1</expandAll>
<showHeader>1</showHeader>
<maxLevels>99</maxLevels>
</appearance>
</treeConfig>
</config>
</TCEforms>
</settings.groups>
<settings.includeSubcategories>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.includeSubcategories</label>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.includeSubcategories>
<settings.groupsCombination>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.combination</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.combination.and
</numIndex>
<numIndex index="1">0</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.combination.or
</numIndex>
<numIndex index="1">1</numIndex>
</numIndex>
</items>
<default>0</default>
</config>
</TCEforms>
</settings.groupsCombination>
<settings.sortBy>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortBy</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortBy.sorting.default</numIndex>
<numIndex index="1">default</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortBy.sorting.sorting</numIndex>
<numIndex index="1">sorting</numIndex>
</numIndex>
</items>
<itemsProcFunc>FriendsOfTYPO3\TtAddress\Hooks\Tca\AddFieldsToSelector->main
</itemsProcFunc>
</config>
</TCEforms>
</settings.sortBy>
<settings.sortOrder>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortOrder</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortOrder.ascending
</numIndex>
<numIndex index="1">ASC</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sortOrder.descending
</numIndex>
<numIndex index="1">DESC</numIndex>
</numIndex>
</items>
<default>ASC</default>
</config>
</TCEforms>
</settings.sortOrder>
<settings.pages>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.startingpoint</label>
<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>pages</allowed>
<size>3</size>
<minitems>0</minitems>
<wizards>
<suggest>
<type>suggest</type>
</suggest>
</wizards>
</config>
</TCEforms>
</settings.pages>
<settings.recursive>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.recursive</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items type="array">
<numIndex index="1" type="array">
<numIndex index="0">LLL:EXT:news/Resources/Private/Language/locallang_be.xlf:flexforms_general.recursive.I.inherit</numIndex>
<numIndex index="1"></numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.0</numIndex>
<numIndex index="1">0</numIndex>
</numIndex>
<numIndex index="3" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.1</numIndex>
<numIndex index="1">1</numIndex>
</numIndex>
<numIndex index="4" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.2</numIndex>
<numIndex index="1">2</numIndex>
</numIndex>
<numIndex index="5" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.3</numIndex>
<numIndex index="1">3</numIndex>
</numIndex>
<numIndex index="6" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.4</numIndex>
<numIndex index="1">4</numIndex>
</numIndex>
<numIndex index="7" type="array">
<numIndex index="0">LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.5</numIndex>
<numIndex index="1">250</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</settings.recursive>
<settings.ignoreWithoutCoordinates>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.ignoreWithoutCoordinates</label>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.ignoreWithoutCoordinates>
<settings.allowOverride>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.allowOverride</label>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.allowOverride>
</el>
</ROOT>
</sDEF>
<sDISPLAY>
<ROOT>
<TCEforms>
<sheetTitle>
LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.sheet_display
</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<settings.displayMode>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.displayMode</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.displayMode.listView</numIndex>
<numIndex index="1">list</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.displayMode.singleView</numIndex>
<numIndex index="1">single</numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.displayMode.map</numIndex>
<numIndex index="1">map</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</settings.displayMode>
<settings.hidePagination>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.hidePagination</label>
<config>
<type>check</type>
</config>
</TCEforms>
</settings.hidePagination>
<settings.paginate.itemsPerPage>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.itemsPerPage</label>
<config>
<type>input</type>
<size>5</size>
<max>5</max>
<eval>trim, intval</eval>
</config>
</TCEforms>
</settings.paginate.itemsPerPage>
<settings.singlePid>
<TCEforms>
<exclude>1</exclude>
<label>LLL:EXT:tt_address/Resources/Private/Language/ff/locallang_ff.xlf:pi1_flexform.singlePid</label>
<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>pages</allowed>
<size>1</size>
<maxitems>1</maxitems>
<minitems>0</minitems>
<wizards>
<suggest>
<type>suggest</type>
</suggest>
</wizards>
</config>
</TCEforms>
</settings.singlePid>
</el>
</ROOT>
</sDISPLAY>
</sheets>
</T3DataStructure>
@@ -0,0 +1,16 @@
<?php
return [
'apps-pagetree-folder-contains-tt-address' => [
'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
'source' => 'EXT:tt_address/Resources/Public/Icons/page-tree-module.svg',
],
'tt-address-plugin' => [
'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
'source' => 'EXT:tt_address/Resources/Public/Icons/ContentElementWizard.svg',
],
'location-map-wizard' => [
'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
'source' => 'EXT:tt_address/Resources/Public/Icons/actions-geo.svg',
],
];
@@ -0,0 +1,8 @@
<?php
defined('TYPO3') or die;
return [
'imports' => [
'@friendsoftypo3/tt-address/' => 'EXT:tt_address/Resources/Public/JavaScript/esm/',
],
];
@@ -0,0 +1,17 @@
services:
_defaults:
autowire: true
autoconfigure: true
public: false
FriendsOfTYPO3\TtAddress\:
resource: '../Classes/*'
exclude: '../Classes/Domain/Model/*'
FriendsOfTYPO3\TtAddress\Command\GeocodeCommand:
tags:
- name: 'console.command'
command: 'ttaddress:geocode'
description: 'Geocode tt_address records'
schedulable: true
hidden: false
@@ -0,0 +1,25 @@
<?php
defined('TYPO3_MODE') or defined('TYPO3') or die;
$typo3Version = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class)->getMajorVersion();
// Override news icon
$GLOBALS['TCA']['pages']['columns']['module']['config']['items'][] = $typo3Version < 12 ? [
0 => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address',
1 => 'tt_address',
2 => 'apps-pagetree-folder-contains-tt-address',
] : [
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address',
'value' => 'tt_address',
'icon' => 'apps-pagetree-folder-contains-tt-address',
];
$GLOBALS['TCA']['pages']['ctrl']['typeicon_classes']['contains-tt-address'] = 'apps-pagetree-folder-contains-tt-address';
$GLOBALS['TCA']['pages']['ctrl']['typeicon_classes']['contains-tt_address'] = 'apps-pagetree-folder-contains-tt-address';
$GLOBALS['TCA']['pages']['ctrl']['typeicon_classes']['contains-ttaddress'] = 'apps-pagetree-folder-contains-tt-address';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
'tt_address',
'Configuration/TSconfig/AllowedNewTables.typoscript',
'EXT:tt_address :: Restrict pages to tt_address records'
);
@@ -0,0 +1,13 @@
<?php
if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('reactions')) {
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
'sys_reaction',
'table_name',
[
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address',
'value' => 'tt_address',
'icon' => 'EXT:tt_address/Resources/Public/Icons/tt_address.svg',
]
);
}
@@ -0,0 +1,4 @@
<?php
defined('TYPO3_MODE') or defined('TYPO3') or die;
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('tt_address', 'Configuration/TypoScript/', 'Addresses (Extbase/Fluid)');
@@ -0,0 +1,36 @@
<?php
defined('TYPO3_MODE') or defined('TYPO3') or die;
call_user_func(static function () {
// Enable language synchronisation for the category field
$GLOBALS['TCA']['tt_address']['columns']['categories']['config']['behaviour']['allowLanguageSynchronization'] = true;
$versionInformation = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class);
if ($versionInformation->getMajorVersion() > 11) {
unset($GLOBALS['TCA']['tt_address']['ctrl']['cruser_id']);
$GLOBALS['TCA']['tt_address']['columns']['birthday']['config'] = [
'type' => 'datetime',
];
$GLOBALS['TCA']['tt_address']['columns']['starttime']['config'] = [
'type' => 'datetime',
];
$GLOBALS['TCA']['tt_address']['columns']['endtime']['config'] = [
'type' => 'datetime',
];
$GLOBALS['TCA']['tt_address']['columns']['crdate']['config'] = [
'type' => 'datetime',
];
$GLOBALS['TCA']['tt_address']['columns']['tstamp']['config'] = [
'type' => 'datetime',
];
$GLOBALS['TCA']['tt_address']['columns']['email']['config'] = [
'type' => 'email',
];
$GLOBALS['TCA']['tt_address']['columns']['www']['config'] = [
'type' => 'link',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
];
}
});
@@ -0,0 +1,17 @@
<?php
defined('TYPO3_MODE') or defined('TYPO3') or die;
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'tt_address',
'ListView',
'LLL:EXT:tt_address/Resources/Private/Language/db/locallang.xlf:extbase_title'
);
$pluginSignature = 'ttaddress_listview';
$GLOBALS['TCA']['tt_content']['types']['list']['previewRenderer'][$pluginSignature] = \FriendsOfTYPO3\TtAddress\FormEngine\TtAddressPreviewRenderer::class;
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_excludelist'][$pluginSignature] = 'select_key,pages,recursive';
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature, 'FILE:EXT:tt_address/Configuration/FlexForms/List.xml');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToInsertRecords('tt_address');
@@ -0,0 +1,736 @@
<?php
$imageSettings = [
'maxitems' => 6,
'minitems' => 0,
'appearance' => [
'collapseAll' => true,
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'overrideChildTca' => [
'types' => [
'0' => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
],
],
];
$versionInformation = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class);
if ($versionInformation->getMajorVersion() > 11) {
$imageConfiguration = [
'type' => 'file',
'maxItems' => 6,
'appearance' => $imageSettings['appearance'],
'behaviour' => $imageSettings['behaviour'],
'overrideChildTca' => $imageSettings['overrideChildTca'],
'allowed' => \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], true),
];
} else {
$imageConfiguration = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'image',
$imageSettings,
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
);
}
return [
'ctrl' => [
'label' => 'name',
'label_alt' => 'last_name,first_name,email,pid',
'label_alt_force' => true,
'label_userFunc' => \FriendsOfTYPO3\TtAddress\Hooks\Tca\Label::class . '->getAddressLabel',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'sortby' => 'sorting',
'default_sortby' => 'ORDER BY last_name, first_name, middle_name',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'prependAtCopy' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.prependAtCopy',
'delete' => 'deleted',
'title' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address',
'versioningWS' => true,
'origUid' => 't3_origuid',
'thumbnail' => 'image',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
'fe_group' => 'fe_group',
],
'security' => [
'ignorePageTypeRestriction' => true,
],
'iconfile' => 'EXT:tt_address/Resources/Public/Icons/tt_address.svg',
'searchFields' => 'name, first_name, middle_name, last_name, email',
],
'columns' => [
'pid' => [
'label' => 'pid',
'config' => [
'type' => 'passthrough'
]
],
'crdate' => [
'label' => 'crdate',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime'
]
],
'cruser_id' => [
'label' => 'cruser_id',
'config' => [
'type' => 'passthrough'
]
],
'tstamp' => [
'label' => 'tstamp',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime'
]
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden',
'config' => [
'type' => 'check'
]
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 16,
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 16,
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'fe_group' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.fe_group',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'size' => 5,
'maxitems' => 20,
'items' => $versionInformation->getMajorVersion() < 12 ? [
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hide_at_login',
-1,
],
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.any_login',
-2,
],
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.usergroups',
'--div--',
],
] : [
['label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hide_at_login', 'value' => -1],
['label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.any_login', 'value' => -2],
['label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.usergroups', 'value' => '--div--'],
],
'exclusiveKeys' => '-1,-2',
'foreign_table' => 'fe_groups',
'foreign_table_where' => 'ORDER BY fe_groups.title',
],
],
'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',
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => $versionInformation->getMajorVersion() < 12 ? [
['', 0],
] : [
['label' => '', 'value' => 0],
],
'default' => 0,
'foreign_table' => 'tt_address',
'foreign_table_where' => 'AND tt_address.pid=###CURRENT_PID### AND tt_address.sys_language_uid IN (-1,0)',
]
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
'default' => ''
]
],
'gender' => [
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender',
'l10n_mode' => 'exclude',
'l10n_display' => 'defaultAsReadonly',
'config' => [
'type' => 'radio',
'default' => '',
'items' => $versionInformation->getMajorVersion() < 12 ? [
['LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.m', 'm'],
['LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.f', 'f'],
['LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.v', 'v'],
['LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.undefined', '']
] : [
['label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.m', 'value' => 'm'],
['label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.f', 'value' => 'f'],
['label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.v', 'value' => 'v'],
['label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.gender.undefined', 'value' => '']
]
]
],
'title' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.title_person',
'config' => [
'type' => 'input',
'size' => 8,
'eval' => 'trim',
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'title_suffix' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.title_suffix',
'config' => [
'type' => 'input',
'size' => 8,
'eval' => 'trim',
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'slug' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:pages.slug',
'displayCond' => 'VERSION:IS:false',
'config' => [
'type' => 'slug',
'size' => 50,
'generatorOptions' => [
'fields' => ['first_name', 'middle_name', 'last_name'],
'fieldSeparator' => '-',
'replacements' => [
'/' => '-'
],
],
'fallbackCharacter' => '-',
'eval' => 'unique',
'default' => ''
]
],
'name' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.name',
'config' => [
'type' => 'input',
'size' => 40,
'eval' => 'trim',
'max' => 255
]
],
'first_name' => [
'exclude' => false,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.first_name',
'l10n_mode' => 'exclude',
'l10n_display' => 'defaultAsReadonly',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255
]
],
'middle_name' => [
'exclude' => false,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.middle_name',
'l10n_mode' => 'exclude',
'l10n_display' => 'defaultAsReadonly',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255
]
],
'last_name' => [
'exclude' => false,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.last_name',
'l10n_mode' => 'exclude',
'l10n_display' => 'defaultAsReadonly',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255
]
],
'birthday' => [
'exclude' => true,
'l10n_display' => 'defaultAsReadonly',
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.birthday',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'date,int',
'default' => 0
]
],
'address' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.address',
'config' => [
'type' => 'text',
'cols' => 20,
'rows' => 3,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'building' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.building',
'config' => [
'type' => 'input',
'eval' => 'trim',
'size' => 20,
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'room' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.room',
'config' => [
'type' => 'input',
'eval' => 'trim',
'size' => 15,
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'phone' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.phone',
'config' => [
'type' => 'input',
'eval' => \FriendsOfTYPO3\TtAddress\Evaluation\TelephoneEvaluation::class,
'size' => 20,
'max' => 30,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'fax' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.fax',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => \FriendsOfTYPO3\TtAddress\Evaluation\TelephoneEvaluation::class,
'max' => 30,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'mobile' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.mobile',
'config' => [
'type' => 'input',
'eval' => \FriendsOfTYPO3\TtAddress\Evaluation\TelephoneEvaluation::class,
'size' => 20,
'max' => 30,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'www' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.www',
'config' => [
'type' => 'input',
'renderType' => 'inputLink',
'fieldControl' => [
'linkPopup' => [
'options' => [
'blindLinkOptions' => 'mail,file,spec,folder',
],
],
],
'eval' => 'trim',
'size' => 20,
'max' => 255,
'softref' => 'typolink,url',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
],
],
'email' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.email',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim,email',
'max' => 255,
'softref' => 'email',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'skype' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.skype',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => 'johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'twitter' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.twitter',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => '@johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'facebook' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.facebook',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => '/johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'instagram' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.instagram',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => '@johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'tiktok' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.tiktok',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => '@johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'linkedin' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.linkedin',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'placeholder' => 'johndoe',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'company' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.organization',
'config' => [
'type' => 'input',
'eval' => 'trim',
'size' => 20,
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'position' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.position',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'city' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.city',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'zip' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.zip',
'config' => [
'type' => 'input',
'eval' => 'trim',
'size' => 10,
'max' => 20,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'region' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.region',
'config' => [
'type' => 'input',
'size' => 10,
'eval' => 'trim',
'max' => 255,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'country' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.country',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim',
'max' => 128,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'image' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.image',
'config' => $imageConfiguration,
],
'description' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.description',
'config' => [
'type' => 'text',
'rows' => 5,
'cols' => 48,
'enableRichtext' => true,
'richtextConfiguration' => 'default',
'softref' => 'typolink_tag,url',
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'categories' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_category.categories',
'config' => [
'type' => 'category'
]
],
'latitude' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.latitude',
'config' => [
'type' => 'input',
'eval' => \FriendsOfTYPO3\TtAddress\Evaluation\LatitudeEvaluation::class,
'default' => null,
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
'longitude' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.longitude',
'config' => [
'type' => 'input',
'eval' => \FriendsOfTYPO3\TtAddress\Evaluation\LongitudeEvaluation::class,
'default' => null,
'fieldControl' => [
'locationMap' => [
'renderType' => 'locationMapWizard'
]
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
]
],
],
'types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.name;name,
image, description,
--div--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_tab.address,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.address;address,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.coordinates;coordinates,
--div--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_tab.contact,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.contact;contact,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.organization;organization,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.building;building,
--palette--;LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address_palette.social;social,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
--palette--;;language,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
--palette--;;paletteHidden,
--palette--;;paletteAccess,
--div--;' . 'LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_category.tabs.category, categories
'
]
],
'palettes' => [
'name' => [
'showitem' => 'gender, title, title_suffix,--linebreak--,
first_name, middle_name, last_name,--linebreak--,name,--linebreak--,slug'
],
'organization' => [
'showitem' => 'position, company'
],
'address' => [
'showitem' => 'address, --linebreak--,
city, zip, region, --linebreak--,
country, --linebreak--,'
],
'building' => [
'showitem' => 'building, room'
],
'coordinates' => [
'showitem' => 'latitude,longitude'
],
'contact' => [
'showitem' => 'email, --linebreak--,
phone, mobile, fax, --linebreak--,
www, --linebreak--,
birthday'
],
'social' => [
'showitem' => 'skype, twitter, --linebreak--,
linkedin, tiktok, --linebreak--,
facebook, instagram'
],
'paletteHidden' => [
'showitem' => 'hidden',
],
'paletteAccess' => [
'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access',
'showitem' => '
starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel,
endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel,
--linebreak--,
fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:fe_group_formlabel
',
],
'language' => ['showitem' => 'sys_language_uid, l10n_parent'],
],
];
@@ -0,0 +1 @@
mod.web_list.allowedNewTables := addToList(tt_address)
@@ -0,0 +1,18 @@
mod.wizards.newContentElement.wizardItems {
plugins {
elements {
tx_ttaddress_listview {
title = LLL:EXT:tt_address/Resources/Private/Language/db/locallang.xlf:extbase_title
description = LLL:EXT:tt_address/Resources/Private/Language/db/locallang.xlf:extbase_description
icon = EXT:tt_address/Resources/Public/Icons/ContentElementWizard.svg
iconIdentifier = tt-address-plugin
tt_content_defValues {
CType = list
list_type = ttaddress_listview
}
}
}
show := addToList(tx_ttaddress_listview)
}
}
@@ -0,0 +1,10 @@
plugin.tx_ttaddress {
view {
# cat=plugin.tx_ttaddress/file; type=string; label=Path to template root (FE)
templateRootPath = EXT:tt_address/Resources/Private/Templates/
# cat=plugin.tx_ttaddress/file; type=string; label=Path to template partials (FE)
partialRootPath = EXT:tt_address/Resources/Private/Partials/
# cat=plugin.tx_ttaddress/file; type=string; label=Path to template layouts (FE)
layoutRootPath = EXT:tt_address/Resources/Private/Layouts/
}
}
@@ -0,0 +1,104 @@
plugin.tx_ttaddress {
view {
templateRootPaths {
0 = EXT:tt_address/Resources/Private/Templates/
1 = {$plugin.tx_ttaddress.view.templateRootPath}
}
partialRootPaths {
0 = EXT:tt_address/Resources/Private/Partials/
1 = {$plugin.tx_ttaddress.view.partialRootPath}
}
layoutRootPaths {
0 = EXT:tt_address/Resources/Private/Layouts/
1 = {$plugin.tx_ttaddress.view.layoutRootPath}
}
}
settings {
## Override settings if empty in flexform
overrideFlexformSettingsIfEmpty = paginate.itemsPerPage, singlePid, pages, recursive, hidePagination, sortBy, sortOrder, groupsCombination
# comma separated list of page IDs containing address records
pages =
# recursion level: same_page_only=0
recursive =
# display mode: List=0, Detail=1, Map=2
displayMode =
# groups combination: AND=0, OR=1
groupsCombination =
# sort by field
sortBy =
# order: ASC, DESC
sortOrder =
# page ID of single view
singlePid =
detail {
## Set your lightbox here. The address records UID is appended, see fluid template
imageClass = lightbox lightbox_
## Check PID of address record
checkPidOfAddressRecord = 0
}
map {
# leaflet, googleMaps, staticGoogleMaps
rendering = leaflet
defaultPosition {
lat = 48.3057664
lng = 14.2873126
}
googleMaps {
key =
}
staticGoogleMaps {
parameters {
key =
size = 500x400
}
}
}
paginate {
# can be overridden by plugin
itemsPerPage = 10
insertAbove = 0
insertBelow = 1
maximumNumberOfLinks = 10
}
seo {
pageTitle {
properties = title,firstName,middleName,lastName
glue = " "
}
}
}
}
# Rendering of tt_address, displayed by "Insert Record" content element
tt_content.shortcut.variables.shortcuts.tables := addToList(tt_address)
tt_content.shortcut.variables.shortcuts.conf.tt_address = USER
tt_content.shortcut.variables.shortcuts.conf.tt_address {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = TtAddress
pluginName = ListView
vendorName = FriendsOfTYPO3
settings =< plugin.tx_ttaddress.settings
settings {
displayMode = single
insertRecord = 1
}
}