Composer extensions
15
.gitignore
vendored
@@ -1,12 +1,25 @@
|
||||
*.bak
|
||||
*.old
|
||||
~*
|
||||
*.swp
|
||||
*~
|
||||
~*
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
/.idea/
|
||||
/.vscode/
|
||||
/nbproject/
|
||||
|
||||
/vendor/
|
||||
/typo3_src/
|
||||
/typo3/
|
||||
/index.php
|
||||
|
||||
/var/
|
||||
/typo3temp/
|
||||
/typo3conf/ext/cartedalegare
|
||||
/_temp_/
|
||||
|
||||
/typo3conf/ext/
|
||||
/typo3conf/PackageStates.php
|
||||
/typo3conf/autoload/
|
||||
/typo3conf/l10n/
|
||||
57
composer.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "catbird/cdl-typo3-app",
|
||||
"description": "Carte da legare - TYPO3 Webapp",
|
||||
"homepage": "https://www.catbird.it/",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matteo Gallo",
|
||||
"email": "matteogal@gmail.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"license": "GPL-2.0-or-later",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "path",
|
||||
"url": "../t3ext/cartedalegare",
|
||||
"options": {
|
||||
"symlink": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"typo3/cms-core": "11.5.41",
|
||||
"typo3/cms-extbase": "11.5.41",
|
||||
"typo3/cms-fluid": "11.5.41",
|
||||
"typo3/cms-frontend": "11.5.41",
|
||||
"typo3/cms-install": "11.5.41",
|
||||
"typo3/cms-rte-ckeditor": "11.5.41",
|
||||
"typo3/cms-setup": "11.5.41",
|
||||
"catbird/cartedalegare": "@dev",
|
||||
"t3brightside/youtubevideo": "2.1.1",
|
||||
"sjbr/static-info-tables": "11.5.3",
|
||||
"sjbr/sr-freecap": "11.5.2",
|
||||
"t3brightside/paginatedprocessors": "1.5.1",
|
||||
"georgringer/numbered-pagination": "2.0.0",
|
||||
"georgringer/news": "9.4.0",
|
||||
"sgalinski/lfeditor": "7.1.10",
|
||||
"dirkpersky/typo3-dp_cookieconsent": "11.6.3",
|
||||
"friendsoftypo3/tt-address": "8.1.1",
|
||||
"sjbr/sr-feuser-register": "11.5.4",
|
||||
"bobosch/ods-osm": "4.2.2",
|
||||
"minifranske/fs-media-gallery": "3.0.2",
|
||||
"t3brightside/embedassets": "1.3.0"
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"typo3/cms-composer-installers": true,
|
||||
"typo3/class-alias-loader": true
|
||||
},
|
||||
"vendor-dir": "vendor"
|
||||
},
|
||||
"extra": {
|
||||
"typo3/cms": {
|
||||
"web-dir": "."
|
||||
}
|
||||
}
|
||||
}
|
||||
4916
typo3conf/ext/ods_osm/composer.lock → composer.lock
generated
@@ -1,202 +0,0 @@
|
||||
<?php
|
||||
return [
|
||||
'BE' => [
|
||||
'debug' => false,
|
||||
'explicitADmode' => 'explicitAllow',
|
||||
'installToolPassword' => '$P$CKv1YpXOGKx/h3bCrFQL8F8tqyYeag1',
|
||||
'lockSSL' => true,
|
||||
'versionNumberInFilename' => '0',
|
||||
],
|
||||
'DB' => [
|
||||
'Connections' => [
|
||||
'Default' => [
|
||||
'charset' => 'utf8',
|
||||
'dbname' => 't3_carte',
|
||||
'driver' => 'mysqli',
|
||||
'host' => 'localhost',
|
||||
'password' => 'e4gYL5k4',
|
||||
'port' => 3306,
|
||||
'user' => 'carte',
|
||||
],
|
||||
],
|
||||
'extTablesDefinitionScript' => 'extTables.php',
|
||||
],
|
||||
'EXT' => [],
|
||||
'EXTCONF' => [
|
||||
'lang' => [
|
||||
'availableLanguages' => [
|
||||
'it',
|
||||
],
|
||||
],
|
||||
],
|
||||
'EXTENSIONS' => [
|
||||
'backend' => [
|
||||
'backendFavicon' => '',
|
||||
'backendLogo' => '',
|
||||
'loginBackgroundImage' => '',
|
||||
'loginFootnote' => '',
|
||||
'loginHighlightColor' => '',
|
||||
'loginLogo' => '',
|
||||
'loginLogoAlt' => '',
|
||||
],
|
||||
'cartedalegare' => [
|
||||
'debug' => '0',
|
||||
],
|
||||
'extensionmanager' => [
|
||||
'automaticInstallation' => '1',
|
||||
'offlineMode' => '0',
|
||||
],
|
||||
'fs_media_gallery' => [
|
||||
'allowedActionsInFlexforms' => 'nestedList,flatList,showAlbumByParam,showAlbumByConfig,randomAsset',
|
||||
'asset' => [
|
||||
'orderOptions' => 'name,crdate,title,content_creation_date,content_modification_date',
|
||||
],
|
||||
'clearCacheAfterFileChange' => '',
|
||||
'enableAutoCreateFileCollection' => '1',
|
||||
'list' => [
|
||||
'orderOptions' => 'datetime,crdate,sorting',
|
||||
],
|
||||
],
|
||||
'lfeditor' => [
|
||||
'beMainModuleName' => 'user',
|
||||
'changeXlfDate' => '1',
|
||||
'defaultLanguage' => '',
|
||||
'editModeExtension' => '1',
|
||||
'extIgnore' => '/^(CVS|.svn|.git|csh_)/',
|
||||
'extWhitelist' => '',
|
||||
'pathAdditionalConfiguration' => 'typo3conf/AdditionalConfiguration.php',
|
||||
'searchRegex' => '/^([a-z0-9_]*locallang[a-z0-9_-]*\\.(php|xml)|[^\\.]*\\.xlf)$/i',
|
||||
'viewLanguages' => '',
|
||||
],
|
||||
'news' => [
|
||||
'advancedMediaPreview' => '1',
|
||||
'archiveDate' => 'date',
|
||||
'categoryBeGroupTceFormsRestriction' => '0',
|
||||
'categoryRestriction' => '',
|
||||
'contentElementPreview' => '1',
|
||||
'contentElementRelation' => '1',
|
||||
'dateTimeNotRequired' => '0',
|
||||
'hidePageTreeForAdministrationModule' => '0',
|
||||
'manualSorting' => '0',
|
||||
'prependAtCopy' => '1',
|
||||
'resourceFolderImporter' => '/news_import',
|
||||
'rteForTeaser' => '0',
|
||||
'showAdministrationModule' => '1',
|
||||
'showImporter' => '0',
|
||||
'slugBehaviour' => 'unique',
|
||||
'storageUidImporter' => '1',
|
||||
'tagPid' => '1',
|
||||
],
|
||||
'ods_osm' => [
|
||||
'autocomplete' => '1',
|
||||
'cache_enabled' => '1',
|
||||
'default_country' => 'DE',
|
||||
'default_lat' => '51.27',
|
||||
'default_lon' => '10.41',
|
||||
'default_zoom' => '8',
|
||||
'geo_service' => '2',
|
||||
'geo_service_email' => '',
|
||||
'geo_service_user' => '',
|
||||
'local_js' => '1',
|
||||
],
|
||||
'sr_feuser_register' => [
|
||||
'imageMaxSize' => '7168',
|
||||
'imageTypes' => 'gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,ai,svg',
|
||||
'uploadFolder' => '2:/tx_srfeuserregister/',
|
||||
],
|
||||
'sr_freecap' => [
|
||||
'encryptionAlgorithm' => 'aes-256-cbc',
|
||||
'salt' => 'cH!swe!retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39=E@rAsp7c-Ph@pH',
|
||||
],
|
||||
'static_info_tables' => [
|
||||
'enableManager' => '0',
|
||||
],
|
||||
'tt_address' => [
|
||||
'backwardsCompatFormat' => '%1$s %3$s',
|
||||
'newPagination' => '1',
|
||||
'readOnlyNameField' => '1',
|
||||
'storeBackwardsCompatName' => '1',
|
||||
],
|
||||
'youtubevideo' => [
|
||||
'youtubevideoEnableBePlayer' => '1',
|
||||
'youtubevideoEnablePagination' => '0',
|
||||
],
|
||||
],
|
||||
'FE' => [
|
||||
'debug' => false,
|
||||
],
|
||||
'GFX' => [
|
||||
'jpg_quality' => '80',
|
||||
'processor' => 'GraphicsMagick',
|
||||
'processor_allowTemporaryMasksAsPng' => '',
|
||||
'processor_colorspace' => 'RGB',
|
||||
'processor_effects' => false,
|
||||
'processor_enabled' => '1',
|
||||
'processor_path' => '/usr/bin/',
|
||||
'processor_path_lzw' => '/usr/bin/',
|
||||
],
|
||||
'INSTALL' => [],
|
||||
'LOG' => [
|
||||
'TYPO3' => [
|
||||
'CMS' => [
|
||||
'deprecations' => [
|
||||
'writerConfiguration' => [
|
||||
'notice' => [
|
||||
'TYPO3\CMS\Core\Log\Writer\FileWriter' => [
|
||||
'disabled' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
'MAIL' => [
|
||||
'defaultMailFromAddress' => 'cartedalegare@cultura.gov.it',
|
||||
'defaultMailFromName' => 'Carte da legare',
|
||||
'defaultMailReplyToAddress' => 'cartedalegare@cultura.gov.it',
|
||||
'defaultMailReplyToName' => 'Carte da legare',
|
||||
'transport' => 'sendmail',
|
||||
'transport_sendmail_command' => '/usr/sbin/sendmail -t',
|
||||
'transport_smtp_encrypt' => '',
|
||||
'transport_smtp_password' => '',
|
||||
'transport_smtp_server' => 'localhost:25',
|
||||
'transport_smtp_username' => '',
|
||||
],
|
||||
'SYS' => [
|
||||
'caching' => [
|
||||
'cacheConfigurations' => [
|
||||
'extbase_object' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
'frontend' => 'TYPO3\\CMS\\Core\\Cache\\Frontend\\VariableFrontend',
|
||||
'groups' => [
|
||||
'system',
|
||||
],
|
||||
'options' => [
|
||||
'defaultLifetime' => 0,
|
||||
],
|
||||
],
|
||||
'hash' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
],
|
||||
'imagesizes' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
],
|
||||
'pages' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
],
|
||||
'pagesection' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
],
|
||||
'rootline' => [
|
||||
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||
],
|
||||
],
|
||||
],
|
||||
'devIPmask' => '',
|
||||
'displayErrors' => 0,
|
||||
'encryptionKey' => 'efccad22f08ec986fda57f4e46959a58eb14d68c3f43726306c7850ba81e5ae0bc621f40cf3ab47589bbef1c3f23f96f',
|
||||
'exceptionalErrors' => 4096,
|
||||
'sitename' => 'Carte da legare',
|
||||
],
|
||||
];
|
||||
@@ -1,133 +0,0 @@
|
||||
<?php
|
||||
# PackageStates.php
|
||||
|
||||
# This file is maintained by TYPO3's package management. Although you can edit it
|
||||
# manually, you should rather use the extension manager for maintaining packages.
|
||||
# This file will be regenerated automatically if it doesn't exist. Deleting this file
|
||||
# should, however, never become necessary if you use the package commands.
|
||||
|
||||
return [
|
||||
'packages' => [
|
||||
'core' => [
|
||||
'packagePath' => 'typo3/sysext/core/',
|
||||
],
|
||||
'extbase' => [
|
||||
'packagePath' => 'typo3/sysext/extbase/',
|
||||
],
|
||||
'fluid' => [
|
||||
'packagePath' => 'typo3/sysext/fluid/',
|
||||
],
|
||||
'frontend' => [
|
||||
'packagePath' => 'typo3/sysext/frontend/',
|
||||
],
|
||||
'fluid_styled_content' => [
|
||||
'packagePath' => 'typo3/sysext/fluid_styled_content/',
|
||||
],
|
||||
'filelist' => [
|
||||
'packagePath' => 'typo3/sysext/filelist/',
|
||||
],
|
||||
'impexp' => [
|
||||
'packagePath' => 'typo3/sysext/impexp/',
|
||||
],
|
||||
'form' => [
|
||||
'packagePath' => 'typo3/sysext/form/',
|
||||
],
|
||||
'install' => [
|
||||
'packagePath' => 'typo3/sysext/install/',
|
||||
],
|
||||
'recordlist' => [
|
||||
'packagePath' => 'typo3/sysext/recordlist/',
|
||||
],
|
||||
'backend' => [
|
||||
'packagePath' => 'typo3/sysext/backend/',
|
||||
],
|
||||
'setup' => [
|
||||
'packagePath' => 'typo3/sysext/setup/',
|
||||
],
|
||||
'rte_ckeditor' => [
|
||||
'packagePath' => 'typo3/sysext/rte_ckeditor/',
|
||||
],
|
||||
'adminpanel' => [
|
||||
'packagePath' => 'typo3/sysext/adminpanel/',
|
||||
],
|
||||
'belog' => [
|
||||
'packagePath' => 'typo3/sysext/belog/',
|
||||
],
|
||||
'beuser' => [
|
||||
'packagePath' => 'typo3/sysext/beuser/',
|
||||
],
|
||||
'extensionmanager' => [
|
||||
'packagePath' => 'typo3/sysext/extensionmanager/',
|
||||
],
|
||||
'felogin' => [
|
||||
'packagePath' => 'typo3/sysext/felogin/',
|
||||
],
|
||||
'info' => [
|
||||
'packagePath' => 'typo3/sysext/info/',
|
||||
],
|
||||
'lowlevel' => [
|
||||
'packagePath' => 'typo3/sysext/lowlevel/',
|
||||
],
|
||||
'recycler' => [
|
||||
'packagePath' => 'typo3/sysext/recycler/',
|
||||
],
|
||||
'reports' => [
|
||||
'packagePath' => 'typo3/sysext/reports/',
|
||||
],
|
||||
'sys_note' => [
|
||||
'packagePath' => 'typo3/sysext/sys_note/',
|
||||
],
|
||||
't3editor' => [
|
||||
'packagePath' => 'typo3/sysext/t3editor/',
|
||||
],
|
||||
'tstemplate' => [
|
||||
'packagePath' => 'typo3/sysext/tstemplate/',
|
||||
],
|
||||
'viewpage' => [
|
||||
'packagePath' => 'typo3/sysext/viewpage/',
|
||||
],
|
||||
'sr_freecap' => [
|
||||
'packagePath' => 'typo3conf/ext/sr_freecap/',
|
||||
],
|
||||
'static_info_tables' => [
|
||||
'packagePath' => 'typo3conf/ext/static_info_tables/',
|
||||
],
|
||||
'sr_feuser_register' => [
|
||||
'packagePath' => 'typo3conf/ext/sr_feuser_register/',
|
||||
],
|
||||
'numbered_pagination' => [
|
||||
'packagePath' => 'typo3conf/ext/numbered_pagination/',
|
||||
],
|
||||
'news' => [
|
||||
'packagePath' => 'typo3conf/ext/news/',
|
||||
],
|
||||
'cartedalegare' => [
|
||||
'packagePath' => 'typo3conf/ext/cartedalegare/',
|
||||
],
|
||||
'embedassets' => [
|
||||
'packagePath' => 'typo3conf/ext/embedassets/',
|
||||
],
|
||||
'paginatedprocessors' => [
|
||||
'packagePath' => 'typo3conf/ext/paginatedprocessors/',
|
||||
],
|
||||
'dp_cookieconsent' => [
|
||||
'packagePath' => 'typo3conf/ext/dp_cookieconsent/',
|
||||
],
|
||||
'fs_media_gallery' => [
|
||||
'packagePath' => 'typo3conf/ext/fs_media_gallery/',
|
||||
],
|
||||
'lfeditor' => [
|
||||
'packagePath' => 'typo3conf/ext/lfeditor/',
|
||||
],
|
||||
'ods_osm' => [
|
||||
'packagePath' => 'typo3conf/ext/ods_osm/',
|
||||
],
|
||||
'tt_address' => [
|
||||
'packagePath' => 'typo3conf/ext/tt_address/',
|
||||
],
|
||||
'youtubevideo' => [
|
||||
'packagePath' => 'typo3conf/ext/youtubevideo/',
|
||||
],
|
||||
],
|
||||
'version' => 5,
|
||||
];
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
return array (
|
||||
'aliasToClassNameMapping' =>
|
||||
array (
|
||||
),
|
||||
'classNameToAliasMapping' =>
|
||||
array (
|
||||
),
|
||||
);
|
||||
@@ -1,365 +0,0 @@
|
||||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by TYPO3
|
||||
|
||||
$typo3InstallDir = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/';
|
||||
|
||||
return array(
|
||||
'Bobosch\\OdsOsm\\Backend\\FormDataProvider\\FlexFormManipulation' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Backend/FormDataProvider/FlexFormManipulation.php',
|
||||
'Bobosch\\OdsOsm\\Controller\\PluginController' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Controller/PluginController.php',
|
||||
'Bobosch\\OdsOsm\\Div' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Div.php',
|
||||
'Bobosch\\OdsOsm\\Evaluation\\LonLat' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Evaluation/LonLat.php',
|
||||
'Bobosch\\OdsOsm\\EventListener\\CalendarizeOdsOsmSqlListener' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/EventListener/CalendarizeOdsOsmSqlListener.php',
|
||||
'Bobosch\\OdsOsm\\Provider\\BaseProvider' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Provider/BaseProvider.php',
|
||||
'Bobosch\\OdsOsm\\Provider\\Leaflet' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Provider/Leaflet.php',
|
||||
'Bobosch\\OdsOsm\\Provider\\Openlayers' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Provider/Openlayers.php',
|
||||
'Bobosch\\OdsOsm\\Provider\\Staticmap' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Provider/Staticmap.php',
|
||||
'Bobosch\\OdsOsm\\TceMain' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/TceMain.php',
|
||||
'Bobosch\\OdsOsm\\Updates\\FileLocationUpdater' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Updates/FileLocationUpdater.php',
|
||||
'Bobosch\\OdsOsm\\Updates\\MigrateSettings' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Updates/MigrateSettings.php',
|
||||
'Bobosch\\OdsOsm\\Wizard\\CoordinatepickerWizard' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Wizard/CoordinatepickerWizard.php',
|
||||
'Bobosch\\OdsOsm\\Wizard\\VectordrawWizard' => $typo3InstallDir . 'typo3conf/ext/ods_osm/Classes/Wizard/VectordrawWizard.php',
|
||||
'Brightside\\Embedassets\\ViewHelpers\\Asset\\CssViewHelper' => $typo3InstallDir . 'typo3conf/ext/embedassets/Classes/ViewHelpers/Asset/CssViewHelper.php',
|
||||
'Brightside\\Embedassets\\ViewHelpers\\Asset\\ScriptViewHelper' => $typo3InstallDir . 'typo3conf/ext/embedassets/Classes/ViewHelpers/Asset/ScriptViewHelper.php',
|
||||
'Brightside\\Paginatedprocessors\\DataProcessing\\PaginatedDatabaseQueryProcessor' => $typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes/DataProcessing/PaginatedDatabaseQueryProcessor.php',
|
||||
'Brightside\\Paginatedprocessors\\DataProcessing\\PaginatedFilesProcessor' => $typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes/DataProcessing/PaginatedFilesProcessor.php',
|
||||
'Brightside\\Paginatedprocessors\\DataProcessing\\PaginatedMenuProcessor' => $typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes/DataProcessing/PaginatedMenuProcessor.php',
|
||||
'Brightside\\Paginatedprocessors\\Processing\\DataToPaginatedData' => $typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes/Processing/DataToPaginatedData.php',
|
||||
'Brightside\\Paginatedprocessors\\Routing\\Aspect\\PaginatedprocessorsContentMapper' => $typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes/Routing/Aspect/PaginatedprocessorsContentMapper.php',
|
||||
'Brightside\\Youtubevideo\\DataProcessing\\YoutubevideoFilesProcessor' => $typo3InstallDir . 'typo3conf/ext/youtubevideo/Classes/DataProcessing/YoutubevideoFilesProcessor.php',
|
||||
'Brightside\\Youtubevideo\\Evaluation\\HoursMinutesSeconds' => $typo3InstallDir . 'typo3conf/ext/youtubevideo/Classes/Evaluation/HoursMinutesSeconds.php',
|
||||
'Brightside\\Youtubevideo\\Hooks\\PageLayoutView\\YoutubevideoContentElementPreviewRenderer' => $typo3InstallDir . 'typo3conf/ext/youtubevideo/Classes/Hooks/PageLayoutView/YoutubevideoContentElementPreviewRenderer.php',
|
||||
'Cartedalegare\\Backend\\FlexFormsItems' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Backend/FlexFormsItems.php',
|
||||
'Cartedalegare\\Controller\\Pi1Controller' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Controller/Pi1Controller.php',
|
||||
'Cartedalegare\\Domain\\Charts\\ChartManager' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Domain/Charts/ChartManager.php',
|
||||
'Cartedalegare\\Domain\\Search\\SearchManager' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Domain/Search/SearchManager.php',
|
||||
'Cartedalegare\\Domain\\Utility\\Utils' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Domain/Utility/Utils.php',
|
||||
'Cartedalegare\\Domain\\WebService\\SiusaWs' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Domain/WebService/SiusaWs.php',
|
||||
'Cartedalegare\\Hooks\\PageLayoutView' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Hooks/PageLayoutView.php',
|
||||
'Cartedalegare\\Legacy\\CLI' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/CLI.php',
|
||||
'Cartedalegare\\Legacy\\Chronometer' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/Chronometer.php',
|
||||
'Cartedalegare\\Legacy\\DBManager' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/DBManager.php',
|
||||
'Cartedalegare\\Legacy\\DBUtils' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/DBUtils.php',
|
||||
'Cartedalegare\\Legacy\\Exception' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/Exception.php',
|
||||
'Cartedalegare\\Legacy\\URLContent' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/URLContent.php',
|
||||
'Cartedalegare\\Legacy\\Utils' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/Utils.php',
|
||||
'Cartedalegare\\Legacy\\XSLTManager' => $typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes/Legacy/XSLTManager.php',
|
||||
'DirkPersky\\DpCookieconsent\\Controller\\CookieController' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/Controller/CookieController.php',
|
||||
'DirkPersky\\DpCookieconsent\\Controller\\ScriptController' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/Controller/ScriptController.php',
|
||||
'DirkPersky\\DpCookieconsent\\DataProcessing\\CookieScriptsProcessor' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/DataProcessing/CookieScriptsProcessor.php',
|
||||
'DirkPersky\\DpCookieconsent\\Domain\\Model\\Cookie' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/Domain/Model/Cookie.php',
|
||||
'DirkPersky\\DpCookieconsent\\Domain\\Repository\\CookieRepository' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/Domain/Repository/CookieRepository.php',
|
||||
'DirkPersky\\DpCookieconsent\\Middleware\\PlainRenderingMiddleware' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/Middleware/PlainRenderingMiddleware.php',
|
||||
'DirkPersky\\DpCookieconsent\\ViewHelpers\\JsonViewHelper' => $typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes/ViewHelpers/JsonViewHelper.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Command\\GeocodeCommand' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Command/GeocodeCommand.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Controller\\AddressController' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Controller/AddressController.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Database\\QueryGenerator' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Database/QueryGenerator.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Domain\\Model\\Address' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Domain/Model/Address.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Domain\\Model\\Dto\\Demand' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Domain/Model/Dto/Demand.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Domain\\Model\\Dto\\Settings' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Domain/Model/Dto/Settings.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Domain\\Repository\\AddressRepository' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Domain/Repository/AddressRepository.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Evaluation\\LatitudeEvaluation' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Evaluation/LatitudeEvaluation.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Evaluation\\LongitudeEvaluation' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Evaluation/LongitudeEvaluation.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Evaluation\\TelephoneEvaluation' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Evaluation/TelephoneEvaluation.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\FormEngine\\FieldControl\\LocationMapWizard' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/FormEngine/FieldControl/LocationMapWizard.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\FormEngine\\TtAddressPreviewRenderer' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/FormEngine/TtAddressPreviewRenderer.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Hooks\\Tca\\AddFieldsToSelector' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Hooks/Tca/AddFieldsToSelector.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Hooks\\Tca\\Label' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Hooks/Tca/Label.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Seo\\AddressTitleProvider' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Seo/AddressTitleProvider.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Service\\CategoryService' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Service/CategoryService.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Service\\GeocodeService' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Service/GeocodeService.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Utility\\CacheUtility' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Utility/CacheUtility.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Utility\\EvalcoordinatesUtility' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Utility/EvalcoordinatesUtility.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Utility\\PropertyModification' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Utility/PropertyModification.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\Utility\\TypoScript' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/Utility/TypoScript.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\ViewHelpers\\Clean\\DomainViewHelper' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/ViewHelpers/Clean/DomainViewHelper.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\ViewHelpers\\Clean\\PhoneNumberViewHelper' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/ViewHelpers/Clean/PhoneNumberViewHelper.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\ViewHelpers\\MetaTagViewHelper' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/ViewHelpers/MetaTagViewHelper.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\ViewHelpers\\RemoveSpacesViewHelper' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/ViewHelpers/RemoveSpacesViewHelper.php',
|
||||
'FriendsOfTYPO3\\TtAddress\\ViewHelpers\\StaticGoogleMapsViewHelper' => $typo3InstallDir . 'typo3conf/ext/tt_address/Classes/ViewHelpers/StaticGoogleMapsViewHelper.php',
|
||||
'GeorgRinger\\News\\Backend\\FieldInformation\\StaticText' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/FieldInformation/StaticText.php',
|
||||
'GeorgRinger\\News\\Backend\\FormDataProvider\\NewsFlexFormManipulation' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/FormDataProvider/NewsFlexFormManipulation.php',
|
||||
'GeorgRinger\\News\\Backend\\FormDataProvider\\NewsRowInitializeNew' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/FormDataProvider/NewsRowInitializeNew.php',
|
||||
'GeorgRinger\\News\\Backend\\RecordList\\NewsDatabaseRecordList' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/RecordList/NewsDatabaseRecordList.php',
|
||||
'GeorgRinger\\News\\Backend\\RecordList\\RecordListConstraint' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/RecordList/RecordListConstraint.php',
|
||||
'GeorgRinger\\News\\Backend\\Wizard\\SuggestWizardReceiver' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Backend/Wizard/SuggestWizardReceiver.php',
|
||||
'GeorgRinger\\News\\Controller\\AdministrationController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/AdministrationController.php',
|
||||
'GeorgRinger\\News\\Controller\\CategoryController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/CategoryController.php',
|
||||
'GeorgRinger\\News\\Controller\\ImportController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/ImportController.php',
|
||||
'GeorgRinger\\News\\Controller\\NewsBaseController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/NewsBaseController.php',
|
||||
'GeorgRinger\\News\\Controller\\NewsController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/NewsController.php',
|
||||
'GeorgRinger\\News\\Controller\\TagController' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Controller/TagController.php',
|
||||
'GeorgRinger\\News\\DataProcessing\\AddNewsToMenuProcessor' => $typo3InstallDir . 'typo3conf/ext/news/Classes/DataProcessing/AddNewsToMenuProcessor.php',
|
||||
'GeorgRinger\\News\\DataProcessing\\DisableLanguageMenuProcessor' => $typo3InstallDir . 'typo3conf/ext/news/Classes/DataProcessing/DisableLanguageMenuProcessor.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Category' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Category.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\DemandInterface' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/DemandInterface.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Dto\\AdministrationDemand' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Dto/AdministrationDemand.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Dto\\EmConfiguration' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Dto/EmConfiguration.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Dto\\NewsDemand' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Dto/NewsDemand.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Dto\\Search' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Dto/Search.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\FileReference' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/FileReference.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Link' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Link.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\News' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/News.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\NewsDefault' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/NewsDefault.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\NewsExternal' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/NewsExternal.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\NewsInternal' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/NewsInternal.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\Tag' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/Tag.php',
|
||||
'GeorgRinger\\News\\Domain\\Model\\TtContent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Model/TtContent.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\AbstractDemandedRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/AbstractDemandedRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\AdministrationRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/AdministrationRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\CategoryRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/CategoryRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\DemandedRepositoryInterface' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/DemandedRepositoryInterface.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\FileRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/FileRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\LinkRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/LinkRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\MediaRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/MediaRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\NewsDefaultRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/NewsDefaultRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\NewsRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/NewsRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\TagRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/TagRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Repository\\TtContentRepository' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Repository/TtContentRepository.php',
|
||||
'GeorgRinger\\News\\Domain\\Service\\AbstractImportService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Service/AbstractImportService.php',
|
||||
'GeorgRinger\\News\\Domain\\Service\\CategoryImportService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Service/CategoryImportService.php',
|
||||
'GeorgRinger\\News\\Domain\\Service\\NewsImportService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Domain/Service/NewsImportService.php',
|
||||
'GeorgRinger\\News\\Event\\AdministrationExtendMenuEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/AdministrationExtendMenuEvent.php',
|
||||
'GeorgRinger\\News\\Event\\AdministrationIndexActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/AdministrationIndexActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\AdministrationNewsPidListingActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/AdministrationNewsPidListingActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\CategoryImportPostHydrateEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/CategoryImportPostHydrateEvent.php',
|
||||
'GeorgRinger\\News\\Event\\CategoryListActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/CategoryListActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsCheckPidOfNewsRecordFailedInDetailActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsCheckPidOfNewsRecordFailedInDetailActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsDateMenuActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsDateMenuActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsDetailActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsDetailActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsImportPostHydrateEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsImportPostHydrateEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsImportPreHydrateEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsImportPreHydrateEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsListActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsListActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsListSelectedActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsListSelectedActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsSearchFormActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsSearchFormActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\NewsSearchResultActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/NewsSearchResultActionEvent.php',
|
||||
'GeorgRinger\\News\\Event\\TagListActionEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Event/TagListActionEvent.php',
|
||||
'GeorgRinger\\News\\Hooks\\BackendUtility' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/BackendUtility.php',
|
||||
'GeorgRinger\\News\\Hooks\\Backend\\PageViewQueryHook' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/Backend/PageViewQueryHook.php',
|
||||
'GeorgRinger\\News\\Hooks\\Backend\\RecordListQueryHook' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/Backend/RecordListQueryHook.php',
|
||||
'GeorgRinger\\News\\Hooks\\DataHandler' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/DataHandler.php',
|
||||
'GeorgRinger\\News\\Hooks\\InlineElementHook' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/InlineElementHook.php',
|
||||
'GeorgRinger\\News\\Hooks\\ItemsProcFunc' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/ItemsProcFunc.php',
|
||||
'GeorgRinger\\News\\Hooks\\Labels' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/Labels.php',
|
||||
'GeorgRinger\\News\\Hooks\\PageLayoutView' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Hooks/PageLayoutView.php',
|
||||
'GeorgRinger\\News\\Jobs\\AbstractImportJob' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Jobs/AbstractImportJob.php',
|
||||
'GeorgRinger\\News\\Jobs\\ImportJobInterface' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Jobs/ImportJobInterface.php',
|
||||
'GeorgRinger\\News\\Pagination\\CustomAbstractPaginator' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Pagination/CustomAbstractPaginator.php',
|
||||
'GeorgRinger\\News\\Pagination\\QueryResultPaginator' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Pagination/QueryResultPaginator.php',
|
||||
'GeorgRinger\\News\\Seo\\HrefLangEvent' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Seo/HrefLangEvent.php',
|
||||
'GeorgRinger\\News\\Seo\\NewsAvailability' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Seo/NewsAvailability.php',
|
||||
'GeorgRinger\\News\\Seo\\NewsTitleProvider' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Seo/NewsTitleProvider.php',
|
||||
'GeorgRinger\\News\\Seo\\NewsXmlSitemapDataProvider' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Seo/NewsXmlSitemapDataProvider.php',
|
||||
'GeorgRinger\\News\\Service\\AccessControlService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/AccessControlService.php',
|
||||
'GeorgRinger\\News\\Service\\CategoryService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/CategoryService.php',
|
||||
'GeorgRinger\\News\\Service\\Import\\DataProviderServiceInterface' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/Import/DataProviderServiceInterface.php',
|
||||
'GeorgRinger\\News\\Service\\LinkHandlerTargetPageService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/LinkHandlerTargetPageService.php',
|
||||
'GeorgRinger\\News\\Service\\SettingsService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/SettingsService.php',
|
||||
'GeorgRinger\\News\\Service\\SlugService' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Service/SlugService.php',
|
||||
'GeorgRinger\\News\\TreeProvider\\DatabaseTreeDataProvider' => $typo3InstallDir . 'typo3conf/ext/news/Classes/TreeProvider/DatabaseTreeDataProvider.php',
|
||||
'GeorgRinger\\News\\Updates\\NewsSlugUpdater' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Updates/NewsSlugUpdater.php',
|
||||
'GeorgRinger\\News\\Updates\\PopulateCategorySlugs' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Updates/PopulateCategorySlugs.php',
|
||||
'GeorgRinger\\News\\Updates\\PopulateTagSlugs' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Updates/PopulateTagSlugs.php',
|
||||
'GeorgRinger\\News\\Updates\\RealurlAliasNewsSlugUpdater' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Updates/RealurlAliasNewsSlugUpdater.php',
|
||||
'GeorgRinger\\News\\Utility\\Cache' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/Cache.php',
|
||||
'GeorgRinger\\News\\Utility\\ClassCacheManager' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/ClassCacheManager.php',
|
||||
'GeorgRinger\\News\\Utility\\ClassLoader' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/ClassLoader.php',
|
||||
'GeorgRinger\\News\\Utility\\ClassParser' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/ClassParser.php',
|
||||
'GeorgRinger\\News\\Utility\\ConstraintHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/ConstraintHelper.php',
|
||||
'GeorgRinger\\News\\Utility\\ImportJob' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/ImportJob.php',
|
||||
'GeorgRinger\\News\\Utility\\Page' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/Page.php',
|
||||
'GeorgRinger\\News\\Utility\\TemplateLayout' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/TemplateLayout.php',
|
||||
'GeorgRinger\\News\\Utility\\TypoScript' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/TypoScript.php',
|
||||
'GeorgRinger\\News\\Utility\\Url' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/Url.php',
|
||||
'GeorgRinger\\News\\Utility\\Validation' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Utility/Validation.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Be\\IsCheckboxActiveViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Be/IsCheckboxActiveViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Category\\CountViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Category/CountViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Check\\PageAvailableInLanguageViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Check/PageAvailableInLanguageViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\ExcludeDisplayedNewsViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/ExcludeDisplayedNewsViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\ExtensionLoadedViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/ExtensionLoadedViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Format\\NothingViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Format/NothingViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\HeaderDataViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/HeaderDataViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\IfIsActiveViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/IfIsActiveViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\ImageSizeViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/ImageSizeViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\IncludeFileViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/IncludeFileViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Iterator\\ChunkViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Iterator/ChunkViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\LinkViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/LinkViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\MetaTagViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/MetaTagViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\MultiCategoryLink\\ArgumentsViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/MultiCategoryLink/ArgumentsViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\MultiCategoryLink\\IsCategoryActiveViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/MultiCategoryLink/IsCategoryActiveViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\PaginateBodytextViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/PaginateBodytextViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\RemoveMediaTagsViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/RemoveMediaTagsViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\RenderMediaViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/RenderMediaViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\SimplePrevNextViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/SimplePrevNextViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\Tag\\CountViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/Tag/CountViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\TargetLinkViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/TargetLinkViewHelper.php',
|
||||
'GeorgRinger\\News\\ViewHelpers\\TitleTagViewHelper' => $typo3InstallDir . 'typo3conf/ext/news/Classes/ViewHelpers/TitleTagViewHelper.php',
|
||||
'GeorgRinger\\News\\Xclass\\InlineRecordContainerForNews' => $typo3InstallDir . 'typo3conf/ext/news/Classes/Xclass/InlineRecordContainerForNews.php',
|
||||
'GeorgRinger\\NumberedPagination\\Contract\\PaginationInterface' => $typo3InstallDir . 'typo3conf/ext/numbered_pagination/Classes/Contract/PaginationInterface.php',
|
||||
'GeorgRinger\\NumberedPagination\\Contract\\PaginatorInterface' => $typo3InstallDir . 'typo3conf/ext/numbered_pagination/Classes/Contract/PaginatorInterface.php',
|
||||
'GeorgRinger\\NumberedPagination\\NumberedPagination' => $typo3InstallDir . 'typo3conf/ext/numbered_pagination/Classes/NumberedPagination.php',
|
||||
'MiniFranske\\FsMediaGallery\\ContextMenu\\ItemProviders\\FsMediaGalleryProvider' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/ContextMenu/ItemProviders/FsMediaGalleryProvider.php',
|
||||
'MiniFranske\\FsMediaGallery\\Controller\\MediaAlbumController' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Controller/MediaAlbumController.php',
|
||||
'MiniFranske\\FsMediaGallery\\Domain\\Model\\MediaAlbum' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Domain/Model/MediaAlbum.php',
|
||||
'MiniFranske\\FsMediaGallery\\Domain\\Repository\\MediaAlbumRepository' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Domain/Repository/MediaAlbumRepository.php',
|
||||
'MiniFranske\\FsMediaGallery\\Hooks\\BackendControllerHook' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Hooks/BackendControllerHook.php',
|
||||
'MiniFranske\\FsMediaGallery\\Hooks\\DocHeaderButtonsHook' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Hooks/DocHeaderButtonsHook.php',
|
||||
'MiniFranske\\FsMediaGallery\\Hooks\\ItemsProcFuncHook' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Hooks/ItemsProcFuncHook.php',
|
||||
'MiniFranske\\FsMediaGallery\\Hooks\\PageLayoutView' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Hooks/PageLayoutView.php',
|
||||
'MiniFranske\\FsMediaGallery\\Hooks\\ProcessDatamapHook' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Hooks/ProcessDatamapHook.php',
|
||||
'MiniFranske\\FsMediaGallery\\Listeners\\FolderChangedListener' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Listeners/FolderChangedListener.php',
|
||||
'MiniFranske\\FsMediaGallery\\Listeners\\IconFactoryListener' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Listeners/IconFactoryListener.php',
|
||||
'MiniFranske\\FsMediaGallery\\Pagination\\ExtendedArrayPaginator' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Pagination/ExtendedArrayPaginator.php',
|
||||
'MiniFranske\\FsMediaGallery\\Service\\AbstractBeAlbumButtons' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Service/AbstractBeAlbumButtons.php',
|
||||
'MiniFranske\\FsMediaGallery\\Service\\SlugService' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Service/SlugService.php',
|
||||
'MiniFranske\\FsMediaGallery\\Service\\Utility' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Service/Utility.php',
|
||||
'MiniFranske\\FsMediaGallery\\Updates\\PopulateMedialAlbumsSlug' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Updates/PopulateMedialAlbumsSlug.php',
|
||||
'MiniFranske\\FsMediaGallery\\Updates\\RealurlAliasMediaAlbumsSlug' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Updates/RealurlAliasMediaAlbumsSlug.php',
|
||||
'MiniFranske\\FsMediaGallery\\Utility\\TypoScriptUtility' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/Utility/TypoScriptUtility.php',
|
||||
'MiniFranske\\FsMediaGallery\\ViewHelpers\\Embed\\JavaScriptViewHelper' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/ViewHelpers/Embed/JavaScriptViewHelper.php',
|
||||
'MiniFranske\\FsMediaGallery\\ViewHelpers\\FileDescriptionViewHelper' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/ViewHelpers/FileDescriptionViewHelper.php',
|
||||
'MiniFranske\\FsMediaGallery\\ViewHelpers\\FileTitleViewHelper' => $typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes/ViewHelpers/FileTitleViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\AbstractBackendController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/AbstractBackendController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\AbstractController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/AbstractController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\AddConstantController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/AddConstantController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\DeleteConstantController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/DeleteConstantController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\EditConstantController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/EditConstantController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\EditFileController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/EditFileController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\GeneralController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/GeneralController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\ManageBackupsController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/ManageBackupsController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\RenameConstantController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/RenameConstantController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\SearchConstantController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/SearchConstantController.php',
|
||||
'SGalinski\\Lfeditor\\Controller\\ViewTreeController' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Controller/ViewTreeController.php',
|
||||
'SGalinski\\Lfeditor\\Exceptions\\DirectoryAccessRightsException' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Exceptions/DirectoryAccessRightsException.php',
|
||||
'SGalinski\\Lfeditor\\Exceptions\\LFException' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Exceptions/LFException.php',
|
||||
'SGalinski\\Lfeditor\\Service\\AbstractService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/AbstractService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\BackupService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/BackupService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\ConfigurationService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/ConfigurationService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileBackupService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileBackupService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileBasePHPService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileBasePHPService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileBaseService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileBaseService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileBaseXLFService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileBaseXLFService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileBaseXMLService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileBaseXMLService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileOverrideService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileOverrideService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\FileService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/FileService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\LicensingService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/LicensingService.php',
|
||||
'SGalinski\\Lfeditor\\Service\\SysLanguageService' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Service/SysLanguageService.php',
|
||||
'SGalinski\\Lfeditor\\Session\\PhpSession' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Session/PhpSession.php',
|
||||
'SGalinski\\Lfeditor\\Utility\\CdataSupportingSimpleXMLElement' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Utility/CdataSupportingSimpleXMLElement.php',
|
||||
'SGalinski\\Lfeditor\\Utility\\ExtensionUtility' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Utility/ExtensionUtility.php',
|
||||
'SGalinski\\Lfeditor\\Utility\\Functions' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Utility/Functions.php',
|
||||
'SGalinski\\Lfeditor\\Utility\\SgLib' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Utility/SgLib.php',
|
||||
'SGalinski\\Lfeditor\\Utility\\Typo3Lib' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/Utility/Typo3Lib.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\AbstractViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/AbstractViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\AddCssFileViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/AddCssFileViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\AddJavaScriptFileViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/AddJavaScriptFileViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\Be\\Menus\\ActionMenuOptionGroupViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuOptionGroupViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\Be\\Menus\\ActionMenuViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php',
|
||||
'SGalinski\\Lfeditor\\ViewHelpers\\InlineLanguageLabelsViewHelper' => $typo3InstallDir . 'typo3conf/ext/lfeditor/Classes/ViewHelpers/InlineLanguageLabelsViewHelper.php',
|
||||
'SJBR\\SrFeuserRegister\\Captcha\\CaptchaInterface' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaInterface.php',
|
||||
'SJBR\\SrFeuserRegister\\Captcha\\CaptchaManager' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaManager.php',
|
||||
'SJBR\\SrFeuserRegister\\Captcha\\Freecap' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Captcha/Freecap.php',
|
||||
'SJBR\\SrFeuserRegister\\Configuration\\ConfigurationCheck' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Configuration/ConfigurationCheck.php',
|
||||
'SJBR\\SrFeuserRegister\\Configuration\\Reports\\StatusProvider' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Configuration/Reports/StatusProvider.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\AbstractActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/AbstractActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\CreateActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/CreateActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\DeleteActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/DeleteActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\EditActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/EditActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\InfomailActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/InfomailActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\RegisterPluginController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/RegisterPluginController.php',
|
||||
'SJBR\\SrFeuserRegister\\Controller\\SetfixedActionController' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Controller/SetfixedActionController.php',
|
||||
'SJBR\\SrFeuserRegister\\Domain\\Data' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Domain/Data.php',
|
||||
'SJBR\\SrFeuserRegister\\Exception' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Exception.php',
|
||||
'SJBR\\SrFeuserRegister\\Hooks\\FileUploadHooks' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Hooks/FileUploadHooks.php',
|
||||
'SJBR\\SrFeuserRegister\\Hooks\\RegistrationProcessHooks' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Hooks/RegistrationProcessHooks.php',
|
||||
'SJBR\\SrFeuserRegister\\Hooks\\UsergroupHooks' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Hooks/UsergroupHooks.php',
|
||||
'SJBR\\SrFeuserRegister\\Mail\\Message' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Mail/Message.php',
|
||||
'SJBR\\SrFeuserRegister\\Request\\Parameters' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Request/Parameters.php',
|
||||
'SJBR\\SrFeuserRegister\\Security\\Authentication' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Security/Authentication.php',
|
||||
'SJBR\\SrFeuserRegister\\Security\\SecuredData' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Security/SecuredData.php',
|
||||
'SJBR\\SrFeuserRegister\\Security\\SessionData' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Security/SessionData.php',
|
||||
'SJBR\\SrFeuserRegister\\Security\\StorageSecurity' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Security/StorageSecurity.php',
|
||||
'SJBR\\SrFeuserRegister\\Setfixed\\SetfixedUrls' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Setfixed/SetfixedUrls.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\CssUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/CssUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\DataUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/DataUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\HashUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/HashUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\HtmlUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/HtmlUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\LocalizationUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/LocalizationUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\Utility\\UrlUtility' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/Utility/UrlUtility.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\AbstractView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/AbstractView.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\AfterSaveView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/AfterSaveView.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\CreateView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/CreateView.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\DeleteView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/DeleteView.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\EditView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/EditView.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\Email' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/Email.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\Marker' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/Marker.php',
|
||||
'SJBR\\SrFeuserRegister\\View\\PlainView' => $typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes/View/PlainView.php',
|
||||
'SJBR\\SrFreecap\\Configuration\\ConfigurationHelper' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Configuration/ConfigurationHelper.php',
|
||||
'SJBR\\SrFreecap\\Controller\\AudioPlayerController' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Controller/AudioPlayerController.php',
|
||||
'SJBR\\SrFreecap\\Controller\\FontMakerController' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Controller/FontMakerController.php',
|
||||
'SJBR\\SrFreecap\\Controller\\ImageGeneratorController' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Controller/ImageGeneratorController.php',
|
||||
'SJBR\\SrFreecap\\Domain\\Model\\Font' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Domain/Model/Font.php',
|
||||
'SJBR\\SrFreecap\\Domain\\Model\\Word' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Domain/Model/Word.php',
|
||||
'SJBR\\SrFreecap\\Domain\\Repository\\FontRepository' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Domain/Repository/FontRepository.php',
|
||||
'SJBR\\SrFreecap\\Domain\\Repository\\WordRepository' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Domain/Repository/WordRepository.php',
|
||||
'SJBR\\SrFreecap\\Domain\\Session\\SessionStorage' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Domain/Session/SessionStorage.php',
|
||||
'SJBR\\SrFreecap\\Http\\EidDispatcher' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Http/EidDispatcher.php',
|
||||
'SJBR\\SrFreecap\\Middleware\\EidHandler' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Middleware/EidHandler.php',
|
||||
'SJBR\\SrFreecap\\PiBaseApi' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/PiBaseApi.php',
|
||||
'SJBR\\SrFreecap\\Utility\\AudioContentUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/AudioContentUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\EncryptionUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/EncryptionUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\FontMakingUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/FontMakingUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\GifBuilderUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/GifBuilderUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\ImageContentUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/ImageContentUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\LocalizationUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/LocalizationUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\Mp3ContentUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/Mp3ContentUtility.php',
|
||||
'SJBR\\SrFreecap\\Utility\\RandomContentUtility' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Utility/RandomContentUtility.php',
|
||||
'SJBR\\SrFreecap\\Validation\\Validator\\CaptchaValidator' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Validation/Validator/CaptchaValidator.php',
|
||||
'SJBR\\SrFreecap\\Validation\\Validator\\TtfFileValidator' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/Validation/Validator/TtfFileValidator.php',
|
||||
'SJBR\\SrFreecap\\ViewHelpers\\AudioViewHelper' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/ViewHelpers/AudioViewHelper.php',
|
||||
'SJBR\\SrFreecap\\ViewHelpers\\ImageViewHelper' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/ViewHelpers/ImageViewHelper.php',
|
||||
'SJBR\\SrFreecap\\ViewHelpers\\TranslateViewHelper' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/ViewHelpers/TranslateViewHelper.php',
|
||||
'SJBR\\SrFreecap\\View\\AudioPlayer\\AbstractPlayFormat' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/AbstractPlayFormat.php',
|
||||
'SJBR\\SrFreecap\\View\\AudioPlayer\\PlayMp3' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayMp3.php',
|
||||
'SJBR\\SrFreecap\\View\\AudioPlayer\\PlayWav' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayWav.php',
|
||||
'SJBR\\SrFreecap\\View\\ImageGenerator\\ShowPng' => $typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes/View/ImageGenerator/ShowPng.php',
|
||||
'SJBR\\StaticInfoTables\\Cache\\CachedClassLoader' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Cache/CachedClassLoader.php',
|
||||
'SJBR\\StaticInfoTables\\Cache\\ClassCacheManager' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Cache/ClassCacheManager.php',
|
||||
'SJBR\\StaticInfoTables\\Configuration\\Tca\\Provider' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Configuration/Tca/Provider.php',
|
||||
'SJBR\\StaticInfoTables\\Configuration\\TypoScript\\ConfigurationHelper' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Configuration/TypoScript/ConfigurationHelper.php',
|
||||
'SJBR\\StaticInfoTables\\Controller\\ManagerController' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Controller/ManagerController.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\AbstractEntity' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/AbstractEntity.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\Country' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/Country.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\CountryZone' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/CountryZone.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\Currency' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/Currency.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\Language' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/Language.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\LanguagePack' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/LanguagePack.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\SystemLanguage' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/SystemLanguage.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Model\\Territory' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Model/Territory.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\AbstractEntityRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/AbstractEntityRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\CountryRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\CountryZoneRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryZoneRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\CurrencyRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/CurrencyRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\LanguagePackRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguagePackRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\LanguageRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguageRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\SystemLanguageRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/SystemLanguageRepository.php',
|
||||
'SJBR\\StaticInfoTables\\Domain\\Repository\\TerritoryRepository' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Domain/Repository/TerritoryRepository.php',
|
||||
'SJBR\\StaticInfoTables\\EventListener\\AbstractEventListener' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/EventListener/AbstractEventListener.php',
|
||||
'SJBR\\StaticInfoTables\\EventListener\\AfterExtensionStaticDatabaseContentHasBeenImportedEventListener' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/EventListener/AfterExtensionStaticDatabaseContentHasBeenImportedEventListener.php',
|
||||
'SJBR\\StaticInfoTables\\EventListener\\AfterPackageActivationEventListener' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/EventListener/AfterPackageActivationEventListener.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Backend\\Form\\FormDataProvider\\SuggestLabelProcessor' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/SuggestLabelProcessor.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Backend\\Form\\FormDataProvider\\TcaLabelProcessor' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaLabelProcessor.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Backend\\Form\\FormDataProvider\\TcaSelectItemsProcessor' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaSelectItemsProcessor.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Backend\\Form\\Wizard\\SuggestReceiver' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/Wizard/SuggestReceiver.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Backend\\Recordlist\\ModifyQuery' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Backend/Recordlist/ModifyQuery.php',
|
||||
'SJBR\\StaticInfoTables\\Hook\\Core\\DataHandling\\ProcessDataMap' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Hook/Core/DataHandling/ProcessDataMap.php',
|
||||
'SJBR\\StaticInfoTables\\PiBaseApi' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/PiBaseApi.php',
|
||||
'SJBR\\StaticInfoTables\\Service\\SqlSchemaMigrationService' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Service/SqlSchemaMigrationService.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\DatabaseUpdateUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/DatabaseUpdateUtility.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\DatabaseUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/DatabaseUtility.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\HtmlElementUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/HtmlElementUtility.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\LocaleUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/LocaleUtility.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\LocalizationUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/LocalizationUtility.php',
|
||||
'SJBR\\StaticInfoTables\\Utility\\VersionNumberUtility' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/Utility/VersionNumberUtility.php',
|
||||
'SJBR\\StaticInfoTables\\ViewHelpers\\Form\\SelectViewHelper' => $typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes/ViewHelpers/Form/SelectViewHelper.php',
|
||||
);
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by TYPO3
|
||||
|
||||
$typo3InstallDir = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/';
|
||||
|
||||
return array(
|
||||
'Bobosch\\OdsOsm\\' => array($typo3InstallDir . 'typo3conf/ext/ods_osm/Classes'),
|
||||
'Brightside\\Embedassets\\' => array($typo3InstallDir . 'typo3conf/ext/embedassets/Classes'),
|
||||
'Brightside\\Paginatedprocessors\\' => array($typo3InstallDir . 'typo3conf/ext/paginatedprocessors/Classes'),
|
||||
'Brightside\\Youtubevideo\\' => array($typo3InstallDir . 'typo3conf/ext/youtubevideo/Classes'),
|
||||
'Cartedalegare\\' => array($typo3InstallDir . 'typo3conf/ext/cartedalegare/Classes'),
|
||||
'DirkPersky\\DpCookieconsent\\' => array($typo3InstallDir . 'typo3conf/ext/dp_cookieconsent/Classes'),
|
||||
'FriendsOfTYPO3\\TtAddress\\' => array($typo3InstallDir . 'typo3conf/ext/tt_address/Classes'),
|
||||
'GeorgRinger\\News\\' => array($typo3InstallDir . 'typo3conf/ext/news/Classes'),
|
||||
'GeorgRinger\\NumberedPagination\\' => array($typo3InstallDir . 'typo3conf/ext/numbered_pagination/Classes'),
|
||||
'MiniFranske\\FsMediaGallery\\' => array($typo3InstallDir . 'typo3conf/ext/fs_media_gallery/Classes'),
|
||||
'SGalinski\\Lfeditor\\' => array($typo3InstallDir . 'typo3conf/ext/lfeditor/Classes'),
|
||||
'SJBR\\SrFeuserRegister\\' => array($typo3InstallDir . 'typo3conf/ext/sr_feuser_register/Classes'),
|
||||
'SJBR\\SrFreecap\\' => array($typo3InstallDir . 'typo3conf/ext/sr_freecap/Classes'),
|
||||
'SJBR\\StaticInfoTables\\' => array($typo3InstallDir . 'typo3conf/ext/static_info_tables/Classes'),
|
||||
);
|
||||
@@ -1,624 +0,0 @@
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:40: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:42: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:42: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:42: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:43: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:47: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:47: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:47: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:48: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:48: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:48: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:49: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:49: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:49: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:50: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:51: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:51: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:51: Usage of client related conditions (browser, device, version, system, useragent) is deprecated since 7.0.
|
||||
14-07-22 17:56: TYPO3\CMS\Core\Core\Bootstrap->ensureClassLoadingInformationExists() - since TYPO3 v8, will be removed in TYPO3 v9. Use the Install Tool to dump autoload information. - require(s\Private\Php\install.php),#3 // {closure}#104 // TYPO3\CMS\Install\Http\Application->run#103 // TYPO3\CMS\Core\Core\Bootstrap->handleRequest#75 // TYPO3\CMS\Install\Http\RequestHandler->handleRequest#319 // TYPO3\CMS\Install\Controller\ToolController->execute#63 // TYPO3\CMS\Install\Controller\ToolController->dispatchAuthenticationActions#63 // TYPO3\CMS\Install\Controller\Action\AbstractAction->handle#187 // TYPO3\CMS\Install\Controller\Action\Tool\UpgradeWizard->executeAction#68 // TYPO3\CMS\Install\Controller\Action\AbstractAction->loadExtLocalconfDatabaseAndExtTables#52 // TYPO3\CMS\Core\Core\Bootstrap->ensureClassLoadingInformationExists#194 // TYPO3\CMS\Core\Utility\GeneralUtility::logDeprecatedFunction#455 (e\Bootstrap.php#452)
|
||||
14-07-22 17:56: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:57: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:58: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 17:59: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:00: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:01: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:01: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:01: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:01: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:01: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:02: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:02: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:02: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:02: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:03: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:04: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:05: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:05: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:06: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:06: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:06: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:06: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:07: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:07: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:07: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:08: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:13: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:16: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:17: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:17: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:18: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:19: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:20: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:21: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:22: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:22: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:23: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:24: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:25: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:26: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:26: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:26: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:26: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:26: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:27: The core extension CSS styled content has been deprecated since TYPO3 CMS 8 and will be removed in TYPO3 CMS 9.
|
||||
14-07-22 18:27: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:28: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:37: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 18:43: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:08: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:10: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:11: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:17: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:17: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:17: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:17: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:18: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
14-07-22 20:21: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
15-07-22 08:07: Automatic TCA migration done during bootstrap. Please adapt TCA accordingly, these migrations will be removed. The backend module "Configuration -> TCA" shows the modified values. Please adapt these areas:
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'username' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['username']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'lastlogin' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['lastlogin']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'name' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['name']['defaultExtras']".
|
||||
The 4th parameter 'specConf' of the field 'showitem' with fieldName = 'company' has been migrated, from TCA table "fe_users['types']['0']['showitem']"to "fe_users['types']['0']['columnsOverrides']['company']['defaultExtras']".
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['2']" as 3rd argument of field "fe_users['types']['0']['name']"to an own palette. The result of this part is: "name, --palette--;;2"
|
||||
Migrated 'showitem' field from TCA table fe_users['types']['0']" : Moved additional palette with name "fe_users['types']['0']['1']" as 3rd argument of field "fe_users['types']['0']['company']"to an own palette. The result of this part is: "company, --palette--;;1"
|
||||
2
typo3conf/ext/dp_cookieconsent/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
github: DirkPersky
|
||||
custom: ['https://www.paypal.com/paypalme/dirkpersky']
|
||||
37
typo3conf/ext/dp_cookieconsent/.github/workflows/Deploy.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v?[0-9]+.[0-9]+.[0-9]+"
|
||||
|
||||
jobs:
|
||||
Ship-to-TER:
|
||||
name: 'Ship to TER'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
|
||||
- name: "Extract tag, version from GITHUB_REF"
|
||||
id: "github-ref"
|
||||
run: |
|
||||
echo "::set-output name=tag::$(echo $GITHUB_REF | sed -E -n 's#^refs/tags/(.*)$#\1#p')"
|
||||
echo "::set-output name=version::$(echo $GITHUB_REF | sed -E -n 's#^refs/tags/v?([0-9]+\.)([0-9]+\.)([0-9]+)#\1\2\3#p')"
|
||||
|
||||
- name: Deploy to TER
|
||||
run: |
|
||||
if [ -n "${{ secrets.TYPO3_ORG_USERNAME }}" ] && [ -n "${{ secrets.TYPO3_ORG_PASSWORD }}" ]; then
|
||||
echo -e "Preparing upload of release ${{ steps.github-ref.outputs.version }} to TER\n";
|
||||
# Install ter client
|
||||
composer global require helhum/ter-client
|
||||
# Upload
|
||||
echo "Uploading release ${{ steps.github-ref.outputs.version }} to TER\n"
|
||||
$HOME/.composer/vendor/helhum/ter-client/ter-client upload dp_cookieconsent . -u "${{ secrets.TYPO3_ORG_USERNAME }}" -p "${{ secrets.TYPO3_ORG_PASSWORD }}" -m "https://github.com/DirkPersky/typo3-dp_cookieconsent/releases/tag/${{ steps.github-ref.outputs.tag }}"
|
||||
fi;
|
||||
5
typo3conf/ext/dp_cookieconsent/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Created by .ignore support plugin (hsz.mobi)
|
||||
|
||||
# IntelliJ project files
|
||||
.idea
|
||||
|
||||
@@ -1,39 +1,30 @@
|
||||
<?php
|
||||
|
||||
/***************************************************************
|
||||
* Extension Manager/Repository config file for ext "dp_cookieconsent".
|
||||
/*
|
||||
* Copyright (c) 2021.
|
||||
*
|
||||
* Auto generated 15-07-2022 12:27
|
||||
* @category TYPO3
|
||||
*
|
||||
* Manual updates:
|
||||
* Only the data in the array - everything else is removed by next
|
||||
* writing. "version" and "dependencies" must not be touched!
|
||||
***************************************************************/
|
||||
* @copyright 2021 Dirk Persky (https://github.com/DirkPersky)
|
||||
* @author Dirk Persky <info@dp-wired.de>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
$EM_CONF[$_EXTKEY] = array (
|
||||
'title' => 'Cookie Consent',
|
||||
'description' => 'Enable a cookie consent box. Let you visitors control the usage of cookies and load script or content after a consent. (ePrivacy, TTDSG)',
|
||||
'category' => 'fe',
|
||||
'clearCacheOnLoad' => true,
|
||||
'author' => 'Dirk Persky',
|
||||
'author_company' => '',
|
||||
'author_email' => 'infoy@dp-wired.de',
|
||||
'constraints' =>
|
||||
array (
|
||||
'depends' =>
|
||||
array (
|
||||
'typo3' => '10.4.0-11.5.99',
|
||||
),
|
||||
'conflicts' =>
|
||||
array (
|
||||
),
|
||||
'suggests' =>
|
||||
array (
|
||||
),
|
||||
),
|
||||
'state' => 'stable',
|
||||
'version' => '11.6.3',
|
||||
'uploadfolder' => true,
|
||||
'clearcacheonload' => false,
|
||||
);
|
||||
$EM_CONF[$_EXTKEY] = [
|
||||
'title' => 'Cookie Consent',
|
||||
'description' => 'Enable a cookie consent box. Let you visitors control the usage of cookies and load script or content after a consent. (ePrivacy, TTDSG)',
|
||||
'category' => 'fe',
|
||||
'clearCacheOnLoad' => true,
|
||||
'author' => 'Dirk Persky',
|
||||
'author_company' => '',
|
||||
'author_email' => 'infoy@dp-wired.de',
|
||||
'constraints' => [
|
||||
'depends' => [
|
||||
'typo3' => '10.4.0-11.5.99'
|
||||
],
|
||||
'conflicts' => [],
|
||||
'suggests' => [],
|
||||
],
|
||||
'state' => 'stable', // stable
|
||||
'version' => '11.6.3'
|
||||
];
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# EditorConfig is awesome: http://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
@@ -10,44 +12,45 @@ indent_size = 4
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# JS files
|
||||
[*.js]
|
||||
# TS/JS-Files
|
||||
[*.{ts,js}]
|
||||
indent_size = 2
|
||||
|
||||
# JSON files
|
||||
# JSON-Files
|
||||
[*.json]
|
||||
indent_style = tab
|
||||
|
||||
# ReST-Files
|
||||
[*.rst]
|
||||
indent_size = 4
|
||||
max_line_length = 80
|
||||
|
||||
# YAML-Files
|
||||
[*.{yaml,yml}]
|
||||
indent_size = 2
|
||||
|
||||
# NEON-Files
|
||||
[*.neon]
|
||||
indent_size = 2
|
||||
indent_style = tab
|
||||
|
||||
# package.json
|
||||
[package.json]
|
||||
indent_size = 2
|
||||
|
||||
# ReST files
|
||||
[*.rst]
|
||||
indent_size = 3
|
||||
max_line_length = 80
|
||||
# TypoScript
|
||||
[*.{typoscript,tsconfig}]
|
||||
indent_size = 2
|
||||
|
||||
# SQL files
|
||||
# XLF-Files
|
||||
[*.xlf]
|
||||
indent_style = tab
|
||||
|
||||
# SQL-Files
|
||||
[*.sql]
|
||||
indent_style = tab
|
||||
indent_size = 2
|
||||
|
||||
# TypoScript files
|
||||
[*.{typoscript,tsconfig}]
|
||||
indent_size = 2
|
||||
|
||||
# YAML files
|
||||
[{*.yml,*.yaml}]
|
||||
indent_size = 2
|
||||
|
||||
# XLF files
|
||||
[*.xlf]
|
||||
indent_style = tab
|
||||
|
||||
# .htaccess
|
||||
[.htaccess]
|
||||
[{_.htaccess,.htaccess}]
|
||||
indent_style = tab
|
||||
|
||||
# Markdown files
|
||||
[*.md]
|
||||
max_line_length = 80
|
||||
27
typo3conf/ext/embedassets/.gitignore
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
@@ -1,38 +1,17 @@
|
||||
<?php
|
||||
|
||||
/***************************************************************
|
||||
* Extension Manager/Repository config file for ext "embedassets".
|
||||
*
|
||||
* Auto generated 15-10-2025 10:35
|
||||
*
|
||||
* Manual updates:
|
||||
* Only the data in the array - everything else is removed by next
|
||||
* writing. "version" and "dependencies" must not be touched!
|
||||
***************************************************************/
|
||||
|
||||
$EM_CONF[$_EXTKEY] = array (
|
||||
'title' => 'Embed Assets',
|
||||
'description' => 'Fluid viewhelpers for embed and minified CSS/JS',
|
||||
'category' => 'fe',
|
||||
'version' => '1.3.0',
|
||||
'state' => 'stable',
|
||||
'uploadfolder' => false,
|
||||
'clearcacheonload' => true,
|
||||
'author' => 'Tanel Põld',
|
||||
'author_email' => 'tanel@brightside.ee',
|
||||
'author_company' => 'Brightside OÜ',
|
||||
'constraints' =>
|
||||
array (
|
||||
'depends' =>
|
||||
array (
|
||||
'typo3' => '11.5.0-13.99.99',
|
||||
),
|
||||
'conflicts' =>
|
||||
array (
|
||||
),
|
||||
'suggests' =>
|
||||
array (
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$EM_CONF[$_EXTKEY] = [
|
||||
'title' => 'Embed Assets',
|
||||
'description' => 'Fluid viewhelpers for embed and minified CSS/JS',
|
||||
'category' => 'fe',
|
||||
'version' => '1.3.0',
|
||||
'state' => 'stable',
|
||||
'clearCacheOnLoad' => 1,
|
||||
'author' => 'Tanel Põld',
|
||||
'author_email' => 'tanel@brightside.ee',
|
||||
'author_company' => 'Brightside OÜ',
|
||||
'constraints' => [
|
||||
'depends' => [
|
||||
'typo3' => '11.5.0-13.99.99',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -1,57 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2022-07-18T16:43:34Z">
|
||||
<header>
|
||||
<generator>LFEditor</generator>
|
||||
</header>
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2014-08-06T00:00:00Z" product-name="fs_media_gallery">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="asset">
|
||||
<source><![CDATA[asset]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="assets">
|
||||
<source><![CDATA[assets]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_%s">
|
||||
<source><![CDATA[Back to %s]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_album">
|
||||
<source><![CDATA[Back to album]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_albums_list">
|
||||
<source><![CDATA[Back to albums list]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="date_format">
|
||||
<source><![CDATA[Y-m-d]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lightbox_current">
|
||||
<source><![CDATA[{current}/{total}]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="link_to_album">
|
||||
<source><![CDATA[Show album '%s']]></source>
|
||||
<source>Y-m-d</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="media_album">
|
||||
<source><![CDATA[Media Album]]></source>
|
||||
<source>Media Album</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="media_albums">
|
||||
<source><![CDATA[Media Albums]]></source>
|
||||
<source>Media Albums</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_album_found">
|
||||
<source><![CDATA[Album not found]]></source>
|
||||
<trans-unit id="asset">
|
||||
<source>asset</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="assets">
|
||||
<source>assets</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_albums_found">
|
||||
<source><![CDATA[No albums found]]></source>
|
||||
<source>No albums found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_album_found">
|
||||
<source>Album not found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_assets_found">
|
||||
<source><![CDATA[No assets found]]></source>
|
||||
<source>No assets found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_album">
|
||||
<source>Back to album</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_%s">
|
||||
<source>Back to %s</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="back_to_albums_list">
|
||||
<source>Back to albums list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lightbox_current">
|
||||
<source>image {current} of {total}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="link_to_album">
|
||||
<source>Show album '%s'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="widget.pagination.ellipsis">
|
||||
<source><![CDATA[…]]></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="widget.pagination.next">
|
||||
<source><![CDATA[»]]></source>
|
||||
<source>…</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="widget.pagination.previous">
|
||||
<source><![CDATA[«]]></source>
|
||||
<source>«</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="widget.pagination.next">
|
||||
<source>»</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -1,39 +1,31 @@
|
||||
<?php
|
||||
|
||||
/***************************************************************
|
||||
* Extension Manager/Repository config file for ext "fs_media_gallery".
|
||||
*
|
||||
* Auto generated 15-07-2022 15:24
|
||||
*
|
||||
* Manual updates:
|
||||
* Only the data in the array - everything else is removed by next
|
||||
* writing. "version" and "dependencies" must not be touched!
|
||||
* Extension Manager/Repository config file for ext: "fs_media_gallery"
|
||||
***************************************************************/
|
||||
|
||||
$EM_CONF[$_EXTKEY] = array (
|
||||
'title' => 'Media Gallery',
|
||||
'description' => 'A media gallery based on the FAL integration of TYPO3.
|
||||
$EM_CONF[$_EXTKEY] = [
|
||||
'title' => 'Media Gallery',
|
||||
'description' => 'A media gallery based on the FAL integration of TYPO3.
|
||||
Show your media assets from your local or remote storage as a gallery of albums.',
|
||||
'category' => 'plugin',
|
||||
'version' => '3.0.2',
|
||||
'state' => 'stable',
|
||||
'uploadfolder' => false,
|
||||
'clearcacheonload' => true,
|
||||
'author' => 'Frans Saris',
|
||||
'author_email' => 'franssaris@gmail.com',
|
||||
'author_company' => '',
|
||||
'constraints' =>
|
||||
array (
|
||||
'depends' =>
|
||||
array (
|
||||
'typo3' => '11.4.0-11.5.99',
|
||||
),
|
||||
'conflicts' =>
|
||||
array (
|
||||
),
|
||||
'suggests' =>
|
||||
array (
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
'category' => 'plugin',
|
||||
'author' => 'Frans Saris',
|
||||
'author_email' => 'franssaris@gmail.com',
|
||||
'author_company' => '',
|
||||
'shy' => '',
|
||||
'priority' => '',
|
||||
'module' => '',
|
||||
'state' => 'stable',
|
||||
'uploadfolder' => false,
|
||||
'createDirs' => '',
|
||||
'clearCacheOnLoad' => 1,
|
||||
'lockType' => '',
|
||||
'version' => '3.0.2',
|
||||
'constraints' => [
|
||||
'depends' => [
|
||||
'typo3' => '11.4.0-11.5.99',
|
||||
],
|
||||
'conflicts' => [],
|
||||
'suggests' => [],
|
||||
],
|
||||
];
|
||||
|
||||
1
typo3conf/ext/lfeditor
Submodule
@@ -1,236 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Backend\Template\ModuleTemplate;
|
||||
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* Abstract Backend Controller
|
||||
*/
|
||||
abstract class AbstractBackendController extends AbstractController {
|
||||
/**
|
||||
* @var BackendUserAuthentication
|
||||
*/
|
||||
protected $backendUser;
|
||||
|
||||
/**
|
||||
* @var ?ModuleTemplate
|
||||
*/
|
||||
protected $moduleTemplate = NULL;
|
||||
|
||||
/**
|
||||
* Initializes any action
|
||||
*
|
||||
* @return void
|
||||
* @throws \SGalinski\Lfeditor\Exceptions\DirectoryAccessRightsException
|
||||
*/
|
||||
public function initializeAction() {
|
||||
parent::initializeAction();
|
||||
|
||||
if (\TYPO3\CMS\Core\Http\ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend()) {
|
||||
$this->backendUser = $GLOBALS['BE_USER'];
|
||||
}
|
||||
|
||||
$editingMode = $this->session->getDataByKey('editingMode');
|
||||
$availableEditingModes = $this->configurationService->getAvailableEditingModes();
|
||||
if ($this->backendUser->isAdmin()) {
|
||||
if (!\array_key_exists($editingMode, $availableEditingModes)) {
|
||||
$firstAvailableEditMode = \key($availableEditingModes);
|
||||
$this->session->setDataByKey('editingMode', $firstAvailableEditMode);
|
||||
}
|
||||
$canChangeEditingModes = \count($availableEditingModes) > 0;
|
||||
} else {
|
||||
$canChangeEditingModes = \count($availableEditingModes) > 0
|
||||
&& $this->backendUser->user['lfeditor_change_editing_modes'] !== 0;
|
||||
if (!$canChangeEditingModes || !\array_key_exists($editingMode, $availableEditingModes)) {
|
||||
$lastAvailableEditMode = array_key_last($availableEditingModes);
|
||||
$this->session->setDataByKey('editingMode', $lastAvailableEditMode);
|
||||
}
|
||||
}
|
||||
|
||||
$this->session->setDataByKey('defaultLanguagePermission', $this->backendUser->checkLanguageAccess(0));
|
||||
$this->session->setDataByKey('canChangeEditingModes', $canChangeEditingModes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the the last called controller/action pair into the backend user
|
||||
* configuration if available
|
||||
*
|
||||
* @param bool $saveWithRedirectPair
|
||||
* @return void
|
||||
*/
|
||||
protected function setLastCalledControllerActionPair($saveWithRedirectPair = TRUE) {
|
||||
if (!$this->backendUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
$extensionKey = $this->request->getControllerExtensionKey();
|
||||
$pair = [
|
||||
'action' => $this->request->getControllerActionName(),
|
||||
'controller' => $this->request->getControllerName(),
|
||||
];
|
||||
|
||||
$this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPair'] = $pair;
|
||||
if ($saveWithRedirectPair) {
|
||||
$this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPairForRedirect'] = $pair;
|
||||
}
|
||||
$this->backendUser->writeUC($this->backendUser->uc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the last called controller/action pair combination from the
|
||||
* backend user session
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function resetLastCalledControllerActionPair() {
|
||||
if (!$this->backendUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
$extensionKey = $this->request->getControllerExtensionKey();
|
||||
$this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPair'] = [];
|
||||
$this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPairForRedirect'] = [];
|
||||
$this->backendUser->writeUC($this->backendUser->uc);
|
||||
|
||||
if ($this->view instanceof ViewInterface) {
|
||||
$this->view->assign('lastCalledControllerActionPair', NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last called controller/action pair from the backend user session
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getLastCalledControllerActionPair() {
|
||||
if (!$this->backendUser) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$extensionKey = $this->request->getControllerExtensionKey();
|
||||
$state = $this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPair'];
|
||||
return (!\is_array($state) ? [] : $state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last called controller/action pair from the backend user session
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getLastCalledControllerActionPairForRedirect() {
|
||||
if (!$this->backendUser) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$extensionKey = $this->request->getControllerExtensionKey();
|
||||
return $this->backendUser->uc[$extensionKey . 'State']['LastActionControllerPairForRedirect'] ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirects to the last called controller/action pair saved inside the
|
||||
* backend user session
|
||||
*
|
||||
* @return \TYPO3\CMS\Extbase\Http\ForwardResponse|null
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
protected function redirectToLastCalledControllerActionPair(): ?\TYPO3\CMS\Extbase\Http\ForwardResponse {
|
||||
$state = $this->getLastCalledControllerActionPairForRedirect();
|
||||
if (\count($state) && \trim($state['action']) !== '' && \trim($state['controller']) !== '') {
|
||||
$currentAction = $this->request->getControllerActionName();
|
||||
$currentController = $this->request->getControllerName();
|
||||
if (!($currentController === $state['controller'] && $currentAction === $state['action'])) {
|
||||
$extensionName = $this->request->getControllerExtensionName();
|
||||
$moduleSignature = $this->request->getPluginName();
|
||||
$extensionConfig = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName];
|
||||
$availableControllers = $extensionConfig['modules'][$moduleSignature]['controllers'];
|
||||
$controllerExists = isset($availableControllers[$state['controller']]);
|
||||
if ($controllerExists) {
|
||||
$actionExists = \in_array(
|
||||
$state['action'],
|
||||
$availableControllers[$state['controller']]['actions'],
|
||||
TRUE
|
||||
);
|
||||
if ($actionExists) {
|
||||
if (version_compare(
|
||||
\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(),
|
||||
'11.0.0',
|
||||
'<'
|
||||
)) {
|
||||
$this->forward($state['action'], $state['controller']);
|
||||
}
|
||||
|
||||
return (new \TYPO3\CMS\Extbase\Http\ForwardResponse($state['action']))->withControllerName(
|
||||
$state['controller']
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets last called controller-action pair and assigns common view variables.
|
||||
* This function should be called at the end of actions which render view
|
||||
* (and does not do redirection or forwarding at the end)
|
||||
*/
|
||||
protected function commonViewRenderingActionSettings() {
|
||||
$this->setLastCalledControllerActionPair();
|
||||
$this->view->assign('editingMode', $this->session->getDataByKey('editingMode'));
|
||||
$this->view->assign('editingModeOptions', $this->configurationService->getAvailableEditingModes());
|
||||
$this->view->assign('adminUser', $this->backendUser->isAdmin());
|
||||
$this->view->assign('defaultLanguagePermission', $this->session->getDataByKey('defaultLanguagePermission'));
|
||||
$this->view->assign('canChangeEditingModes', $this->session->getDataByKey('canChangeEditingModes'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Since we cannot use constructor Injection, we do have to get one dynamically. If we want to use
|
||||
* our ModuleTemplate, call GetModuleTemplate before, which will init one if there is none for some reason
|
||||
*/
|
||||
protected function getModuleTemplate() {
|
||||
if ($this->moduleTemplate === NULL) {
|
||||
$moduleTemplateFactory = GeneralUtility::makeInstance(
|
||||
\TYPO3\CMS\Backend\Template\ModuleTemplateFactory::class
|
||||
);
|
||||
$this->moduleTemplate = $moduleTemplateFactory->create($this->request);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the ModuleTemplateResponse to create a response object for the backend
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface
|
||||
*/
|
||||
protected function createBackendResponse(): \Psr\Http\Message\ResponseInterface {
|
||||
return $this->htmlResponse($this->view->render());
|
||||
}
|
||||
}
|
||||
@@ -1,317 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Service\BackupService;
|
||||
use SGalinski\Lfeditor\Service\ConfigurationService;
|
||||
use SGalinski\Lfeditor\Session\PhpSession;
|
||||
use TYPO3\CMS\Core\Cache\CacheManager;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* Abstract Controller
|
||||
*/
|
||||
abstract class AbstractController extends ActionController {
|
||||
/**
|
||||
* @var \SGalinski\Lfeditor\Session\PhpSession
|
||||
*/
|
||||
protected $session;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var ConfigurationService
|
||||
*/
|
||||
protected $configurationService;
|
||||
|
||||
/**
|
||||
* Inject the ConfigurationService
|
||||
*
|
||||
* @param ConfigurationService $configurationService
|
||||
*/
|
||||
public function injectConfigurationService(ConfigurationService $configurationService) {
|
||||
$this->configurationService = $configurationService;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @var BackupService
|
||||
*/
|
||||
protected $backupService;
|
||||
|
||||
/**
|
||||
* Inject the BackupService
|
||||
*
|
||||
* @param BackupService $backupService
|
||||
*/
|
||||
public function injectBackupService(BackupService $backupService) {
|
||||
$this->backupService = $backupService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the actions.
|
||||
* - Initializes the session object.
|
||||
* - Fetches configuration.
|
||||
*
|
||||
* @return void
|
||||
* @throws \SGalinski\Lfeditor\Exceptions\DirectoryAccessRightsException
|
||||
*/
|
||||
public function initializeAction() {
|
||||
parent::initializeAction();
|
||||
if (!($this->session instanceof PhpSession)) {
|
||||
$this->session = GeneralUtility::makeInstance(PhpSession::class);
|
||||
$this->session->setSessionKey('tx_lfeditor_sessionVariables');
|
||||
}
|
||||
$this->configurationService->prepareConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves in session currently selected values of select tags.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $referenceLanguageSelection
|
||||
* @param string $constantSelection
|
||||
* @param string $languageSelection
|
||||
* @param string $constantTypeSelection
|
||||
* @param string $bottomReferenceLanguageSelection
|
||||
* @param string $numSiteConstsSelection
|
||||
* @param string $extkey
|
||||
* @return void
|
||||
*/
|
||||
protected function saveSelectionsInSession(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$referenceLanguageSelection = NULL,
|
||||
$constantSelection = NULL,
|
||||
$languageSelection = NULL,
|
||||
$constantTypeSelection = NULL,
|
||||
$bottomReferenceLanguageSelection = NULL,
|
||||
$numSiteConstsSelection = NULL,
|
||||
$extkey = NULL
|
||||
) {
|
||||
/* Extension/language file select box can't be unselected.
|
||||
Only situation when $extensionSelection === NULL is when the form is submitted by
|
||||
selection change of some other box. That is because <f:be.menus.actionMenu> with 'optgroup' tags is used */
|
||||
if ($extensionSelection) {
|
||||
$this->session->setDataByKey('extensionSelection', $extensionSelection);
|
||||
}
|
||||
if ($languageFileSelection) {
|
||||
$this->session->setDataByKey('languageFileSelection', $languageFileSelection);
|
||||
}
|
||||
if ($referenceLanguageSelection) {
|
||||
$this->session->setDataByKey('referenceLanguageSelection', $referenceLanguageSelection);
|
||||
}
|
||||
if ($constantSelection) {
|
||||
$this->session->setDataByKey('constantSelection', $constantSelection);
|
||||
}
|
||||
if ($languageSelection) {
|
||||
$this->session->setDataByKey('languageSelection', $languageSelection);
|
||||
}
|
||||
if ($constantTypeSelection) {
|
||||
$this->session->setDataByKey('constantTypeSelection', $constantTypeSelection);
|
||||
}
|
||||
if ($bottomReferenceLanguageSelection) {
|
||||
$this->session->setDataByKey('bottomReferenceLanguageSelection', $bottomReferenceLanguageSelection);
|
||||
}
|
||||
if ($numSiteConstsSelection) {
|
||||
$this->session->setDataByKey('numSiteConstsSelection', $numSiteConstsSelection);
|
||||
}
|
||||
if ($extkey) {
|
||||
$this->session->setDataByKey('extkey', $extkey);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assigns view width menu options and default menu selection which is fetched from session.
|
||||
*
|
||||
* @param string $menuName Name of the menu, which will be used as prefix of view keys for menu options and menu selection.
|
||||
* Example: menuName 'extension' will produce view keys 'extensionOptions' and 'extensionSelection'
|
||||
* @param array $options menu options to be assigned to view
|
||||
* @return void
|
||||
*/
|
||||
protected function assignViewWidthMenuVariables($menuName, $options) {
|
||||
$this->view->assign($menuName . 'Options', $options);
|
||||
|
||||
$selection = $this->checkMenuSelection($menuName, $options);
|
||||
$this->view->assign($menuName . 'Selection', $selection);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks does selection exists in session or among menu options and if it does not,
|
||||
* first option becomes selected.
|
||||
*
|
||||
* @param string $menuName Name of the menu, which will be used as prefix of view keys for menu options and menu selection.
|
||||
* Example: menuName 'extension' will produce view keys 'extensionOptions' and 'extensionSelection'
|
||||
* @param array $options menu options to be checked upon.
|
||||
* @return string
|
||||
*/
|
||||
protected function checkMenuSelection($menuName, array $options) {
|
||||
$selection = $this->session->getDataByKey($menuName . 'Selection');
|
||||
if (!\array_key_exists($selection, $options)) {
|
||||
$selection = NULL;
|
||||
}
|
||||
if ($selection === NULL && !empty($options)) {
|
||||
$selection = array_key_first($options);
|
||||
$this->session->setDataByKey($menuName . 'Selection', $selection);
|
||||
return $selection;
|
||||
}
|
||||
return $selection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets FlashMessage from LFException.
|
||||
*
|
||||
* @param LFException $lFException
|
||||
* @return void
|
||||
*/
|
||||
public function addLFEFlashMessage(LFException $lFException) {
|
||||
if ($lFException->getCode() === 0) {
|
||||
$this->addFlashMessage(
|
||||
$lFException->getMessage(),
|
||||
LocalizationUtility::translate('failure.failure', 'lfeditor'),
|
||||
AbstractMessage::ERROR
|
||||
);
|
||||
} elseif ($lFException->getCode() === 1) {
|
||||
$this->addFlashMessage(
|
||||
$lFException->getMessage(),
|
||||
'',
|
||||
AbstractMessage::NOTICE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares language file select options for each extension and sets combined data in view.
|
||||
*
|
||||
* @return void
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws LFException
|
||||
*/
|
||||
protected function prepareExtensionAndLangFileOptions() {
|
||||
/** @var CacheManager $cacheManager */
|
||||
$cacheManager = GeneralUtility::makeInstance(CacheManager::class);
|
||||
$extensions = $cacheManager->getCache('lfeditor_select_options_cache')->get('extensionAndLangFileOptions');
|
||||
if (!is_array($extensions)) {
|
||||
$extensions = [];
|
||||
$extensionOptions = $this->configurationService->menuExtList();
|
||||
$extensionGroupCount = 0;
|
||||
foreach ($extensionOptions as $extAddress => $extLabel) {
|
||||
$extension['extKey'] = $extLabel;
|
||||
((int) ExtensionManagementUtility::isLoaded(basename($extLabel))) ?
|
||||
$state = LocalizationUtility::translate('ext.loaded', 'lfeditor') :
|
||||
$state = LocalizationUtility::translate('ext.notLoaded', 'lfeditor');
|
||||
$extension['extLabel'] = $extLabel . ' [' . $state . ']';
|
||||
|
||||
$extension['languageFileOptions'] = [];
|
||||
$isExtensionGroupStart = $extAddress === '###extensionGroup###' . $extLabel;
|
||||
try {
|
||||
if (!$isExtensionGroupStart) {
|
||||
$extension['languageFileOptions'] = $this->configurationService->menuLangFileList($extAddress);
|
||||
if (empty($extension['languageFileOptions'])) {
|
||||
continue;
|
||||
}
|
||||
} elseif (++$extensionGroupCount > 1) {
|
||||
$extensions[$extAddress . 'EmptySpaceBefore'] = [
|
||||
'extLabel' => '',
|
||||
'languageFileOptions' => [],
|
||||
];
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
continue;
|
||||
}
|
||||
$extensions[$extAddress] = $extension;
|
||||
|
||||
if ($isExtensionGroupStart) {
|
||||
$extensions[$extAddress . 'DelimiterAfter'] = [
|
||||
'extLabel' => '======',
|
||||
'languageFileOptions' => [],
|
||||
];
|
||||
}
|
||||
}
|
||||
$cacheManager->getCache('lfeditor_select_options_cache')->set('extensionAndLangFileOptions', $extensions);
|
||||
}
|
||||
$this->checkExtensionAndLangFileSelection($extensions);
|
||||
$extensionSelection = $this->session->getDataByKey('extensionSelection');
|
||||
|
||||
$this->view->assign('extensions', $extensions);
|
||||
$this->view->assign('extensionSelection', $extensionSelection);
|
||||
$this->view->assign('extensionLabel', $extensions[$extensionSelection]['extLabel'] ?? '');
|
||||
$this->view->assign('languageFileSelection', $this->session->getDataByKey('languageFileSelection'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks do extensionSelection and languageFileSelection exist in session or among menu options and if it does not,
|
||||
* first language file and belonging extension become selected and saved to session.
|
||||
*
|
||||
* @param array $extensions
|
||||
* @return void
|
||||
*/
|
||||
protected function checkExtensionAndLangFileSelection(array $extensions) {
|
||||
$extensionSelection = $this->session->getDataByKey('extensionSelection');
|
||||
$languageFileSelection = $this->session->getDataByKey('languageFileSelection');
|
||||
|
||||
$selectFirstLanguageFileAndBelongingExtension = !$extensionSelection || !$languageFileSelection ||
|
||||
!(array_key_exists($extensionSelection, $extensions) && array_key_exists(
|
||||
$languageFileSelection,
|
||||
$extensions[$extensionSelection]['languageFileOptions']
|
||||
));
|
||||
if ($selectFirstLanguageFileAndBelongingExtension) {
|
||||
foreach ($extensions as $extAddress => $extension) {
|
||||
if (empty($extension['languageFileOptions'])) {
|
||||
continue;
|
||||
}
|
||||
$languageFileSelection = array_key_first($extension['languageFileOptions']);
|
||||
$this->session->setDataByKey('languageFileSelection', $languageFileSelection);
|
||||
$this->session->setDataByKey('extensionSelection', $extAddress);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears cache used for storing select options.
|
||||
* If $identifier is set, it clears only that entry in cache,
|
||||
* otherwise it clears whole select options cache.
|
||||
*
|
||||
* @param string $identifier
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
protected function clearSelectOptionsCache($identifier = NULL) {
|
||||
/** @var CacheManager $cacheManager */
|
||||
$cacheManager = GeneralUtility::makeInstance(CacheManager::class);
|
||||
if ($identifier !== NULL) {
|
||||
$cacheManager->getCache('lfeditor_select_options_cache')->set($identifier, NULL);
|
||||
} else {
|
||||
$cacheManager->getCache('lfeditor_select_options_cache')->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,176 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* AddConstant controller. It contains extbase actions for AddConstant page.
|
||||
*/
|
||||
class AddConstantController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens addConstant view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of addConstant option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
*/
|
||||
public function addConstantAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'AddConstant');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->prepareAddConstantViewMainSectionContent();
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in addConstant view.
|
||||
* It is called on change of selection of any select menu in addConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction($extensionSelection = NULL, $languageFileSelection = NULL, $extKey = ''): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('addConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('addConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of addConstant view.
|
||||
*
|
||||
* @param string $nameOfConstant
|
||||
* @param array $addConstTextArea
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function addConstantSaveAction($nameOfConstant, array $addConstTextArea): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
if (empty($nameOfConstant)) {
|
||||
throw new LFException('failure.select.noConstDefined');
|
||||
}
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
|
||||
$constExists = !empty($langData['default'][$nameOfConstant])
|
||||
|| !empty($langData[$extConfig['defaultLanguage']][$nameOfConstant]);
|
||||
if ($constExists) {
|
||||
throw new LFException('failure.langfile.constExists');
|
||||
}
|
||||
|
||||
$newConstLanguages = [];
|
||||
foreach ($addConstTextArea as $lang => $value) {
|
||||
$newConstLanguages[$lang][$nameOfConstant] = $value;
|
||||
}
|
||||
|
||||
$this->configurationService->execWrite($newConstLanguages);
|
||||
$this->session->setDataByKey('constantSelection', $nameOfConstant);
|
||||
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('addConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('addConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('addConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('addConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of addConstant view.
|
||||
*
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareAddConstantViewMainSectionContent() {
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$langArray = $this->configurationService->getLangArray($this->backendUser);
|
||||
|
||||
$this->view->assign('languages', $langArray);
|
||||
$this->view->assign('numTextAreaRows', $extConfig['numTextAreaRows']);
|
||||
}
|
||||
}
|
||||
@@ -1,189 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Service\FileOverrideService;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* DeleteConstant controller. It contains extbase actions for DeleteConstant page.
|
||||
*/
|
||||
class DeleteConstantController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens deleteConstant view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of deleteConstant option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
*/
|
||||
public function deleteConstantAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'DeleteConstant');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$fileObject = $this->configurationService->getFileObj();
|
||||
if ($this->session->getDataByKey('editingMode') === 'override') {
|
||||
/** @var FileOverrideService $overrideFileObject */
|
||||
$overrideFileObject = $fileObject;
|
||||
$overrideFileObject->deleteDuplicates();
|
||||
}
|
||||
|
||||
$langData = $fileObject->getLocalLangData();
|
||||
$constantOptions = $this->configurationService->menuConstList(
|
||||
$langData,
|
||||
LocalizationUtility::translate('select.nothing', 'lfeditor')
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('constant', $constantOptions);
|
||||
$this->prepareDeleteConstantViewMainSectionContent();
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in deleteConstant view.
|
||||
* It is called on change of selection of any select menu in deleteConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $constantSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$constantSelection = NULL,
|
||||
$extKey = ''
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
$constantSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('deleteConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('deleteConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of deleteConstant view.
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function deleteConstantSaveAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$constantSelection = $this->session->getDataByKey('constantSelection');
|
||||
$langArray = Functions::buildLangArray();
|
||||
|
||||
// build modArray
|
||||
$newLang = [];
|
||||
foreach ($langArray as $lang) {
|
||||
$newLang[$lang][$constantSelection] = '';
|
||||
}
|
||||
|
||||
$this->configurationService->execWrite($newLang, [], TRUE);
|
||||
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('deleteConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('deleteConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('deleteConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('deleteConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of deleteConstant view.
|
||||
*
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareDeleteConstantViewMainSectionContent() {
|
||||
$constantSelection = $this->session->getDataByKey('constantSelection');
|
||||
if (empty($constantSelection) || $constantSelection == '###default###') {
|
||||
throw new LFException('failure.select.noConst', 1);
|
||||
}
|
||||
|
||||
$this->view->assign('constantSelection', $constantSelection);
|
||||
}
|
||||
}
|
||||
@@ -1,204 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* EditConstant controller. It contains extbase actions for EditConstant page.
|
||||
*/
|
||||
class EditConstantController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens editConstant view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of editConstant option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
public function editConstantAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'EditConstant');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$constantOptions = $this->configurationService->menuConstList(
|
||||
$langData,
|
||||
LocalizationUtility::translate('select.nothing', 'lfeditor')
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('constant', $constantOptions);
|
||||
|
||||
$this->prepareEditConstantViewMainSectionContent($langData);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
$this->commonViewRenderingActionSettings();
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in editConstant view.
|
||||
* It is called on change of selection of any select menu in editConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $constantSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$constantSelection = NULL,
|
||||
$extKey = ''
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
$constantSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of editConstant view.
|
||||
*
|
||||
* @param array $editConstTextArea
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function editConstantSaveAction(array $editConstTextArea): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->configurationService->execWrite($editConstTextArea);
|
||||
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of editConstant view.
|
||||
*
|
||||
* @param array $langData
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareEditConstantViewMainSectionContent(array $langData = NULL) {
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$langArray = $this->configurationService->getLangArray($this->backendUser);
|
||||
|
||||
$constantSelection = $this->session->getDataByKey('constantSelection');
|
||||
if (empty($constantSelection) || $constantSelection == '###default###') {
|
||||
throw new LFException('failure.select.noConst', 1);
|
||||
}
|
||||
|
||||
$languages = [];
|
||||
foreach ($langArray as $lang) {
|
||||
if (array_key_exists($lang, $langData) && array_key_exists($constantSelection, $langData[$lang])) {
|
||||
$languages[$lang] = $langData[$lang][$constantSelection];
|
||||
} else {
|
||||
$languages[$lang] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$this->view->assign('constantSelection', $constantSelection);
|
||||
$this->view->assign('languages', $languages);
|
||||
$this->view->assign('numTextAreaRows', $extConfig['numTextAreaRows']);
|
||||
$this->view->assign('defaultLanguage', $extConfig['defaultLanguage']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets chosen constant and redirects to editConstant view.
|
||||
*
|
||||
* @param string $constantKey
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareEditConstantAction($constantKey) {
|
||||
$this->session->setDataByKey('constantSelection', $constantKey);
|
||||
|
||||
$this->redirect('editConstant', 'EditConstant');
|
||||
}
|
||||
}
|
||||
@@ -1,365 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* EditFile controller. It contains extbase actions of EditFile page.
|
||||
*/
|
||||
class EditFileController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens editFile view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of editFile option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @param integer $buttonType :
|
||||
* -1 - cancel,
|
||||
* 0 - no button clicked,
|
||||
* 1 - back,
|
||||
* 2 - next,
|
||||
* 3 - save.
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
public function editFileAction(int $buttonType = 0): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'EditFile');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
|
||||
$languageOptions = $this->configurationService->menuLangList($langData, '', $this->backendUser);
|
||||
$this->assignViewWidthMenuVariables('language', $languageOptions);
|
||||
|
||||
$referenceLanguageOptions = $this->configurationService->menuLangList(
|
||||
$langData,
|
||||
LocalizationUtility::translate('select.nothing', 'lfeditor'),
|
||||
$this->backendUser
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('referenceLanguage', $referenceLanguageOptions);
|
||||
|
||||
$bottomReferenceLanguageOptions = $this->configurationService->menuLangList(
|
||||
$langData,
|
||||
'',
|
||||
$this->backendUser,
|
||||
TRUE
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('bottomReferenceLanguage', $bottomReferenceLanguageOptions);
|
||||
|
||||
$constantTypeOptions = $this->getConstantTypeOptions();
|
||||
$this->assignViewWidthMenuVariables('constantType', $constantTypeOptions);
|
||||
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$this->assignViewWidthMenuVariables('numSiteConsts', $extConfig['numSiteConstsOptions']);
|
||||
|
||||
$this->prepareEditFileViewMainSectionContent($langData, $buttonType);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in editFile view.
|
||||
* It is called on change of selection of any select menu in editFile view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $languageSelection
|
||||
* @param string $referenceLanguageSelection
|
||||
* @param string $constantTypeSelection
|
||||
* @param string $bottomReferenceLanguageSelection
|
||||
* @param string $numSiteConstsSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$languageSelection = NULL,
|
||||
$referenceLanguageSelection = NULL,
|
||||
$constantTypeSelection = NULL,
|
||||
$bottomReferenceLanguageSelection = NULL,
|
||||
$numSiteConstsSelection = NULL,
|
||||
$extKey = ''
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
$referenceLanguageSelection,
|
||||
NULL,
|
||||
$languageSelection,
|
||||
$constantTypeSelection,
|
||||
$bottomReferenceLanguageSelection,
|
||||
$numSiteConstsSelection,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editFile', NULL, NULL, ['buttonType' => 0]);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editFile', NULL, NULL, ['buttonType' => 0]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editFile', NULL, NULL, ['buttonType' => 0]);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editFile', NULL, NULL, ['buttonType' => 0]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of editFile view.
|
||||
* Structure of the content:
|
||||
* $constValues[$constant]['edit'],
|
||||
* $constValues[$constant]['pattern'],
|
||||
* $constValues[$constant][$extConfig['defaultLanguage']].
|
||||
*
|
||||
* @param array $langData
|
||||
* @param integer $buttonType :
|
||||
* -1 - cancel,
|
||||
* 0 - no button clicked,
|
||||
* 1 - back,
|
||||
* 2 - next,
|
||||
* 3 - save.
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareEditFileViewMainSectionContent(array $langData, int $buttonType) {
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$numConstantsPerPage = $this->session->getDataByKey('numSiteConstsSelection');
|
||||
|
||||
$langList = $this->session->getDataByKey('languageSelection');
|
||||
$patternList = $this->session->getDataByKey('referenceLanguageSelection');
|
||||
$constTypeList = $this->session->getDataByKey('constantTypeSelection');
|
||||
$parallelEdit = $patternList !== '###default###' && $patternList != $langList;
|
||||
|
||||
$langEdit = (array_key_exists($langList, $langData) && is_array($langData[$langList])) ? $langData[$langList] : [];
|
||||
$langPattern = (array_key_exists($patternList, $langData) && is_array($langData[$patternList])) ? $langData[$patternList] : [];
|
||||
$bottomReferenceLanguageSelection = $this->session->getDataByKey('bottomReferenceLanguageSelection');
|
||||
$bottomReferenceLanguage = is_array($langData[$bottomReferenceLanguageSelection])
|
||||
? $langData[$bottomReferenceLanguageSelection] : [];
|
||||
if (empty($bottomReferenceLanguage)) {
|
||||
$bottomReferenceLanguage = is_array($langData['default']) ? $langData['default'] : [];
|
||||
}
|
||||
|
||||
$langDataSessionContinued = $buttonType !== 3;
|
||||
if ($buttonType === 0) {
|
||||
$this->session->setDataByKey('sessionLangDataConstantsIterator', 0);
|
||||
$this->session->setDataByKey('numberLastPageConstants', 0);
|
||||
}
|
||||
$sessionLangDataConstantsIterator = $this->session->getDataByKey('sessionLangDataConstantsIterator');
|
||||
$numberLastPageConstants = $this->session->getDataByKey('numberLastPageConstants');
|
||||
|
||||
// new translation
|
||||
if (!$langDataSessionContinued || $buttonType <= 0) {
|
||||
// adjust number of session constants
|
||||
if ($constTypeList === 'untranslated' || $constTypeList === 'translated' ||
|
||||
$constTypeList === 'unknown' || $buttonType <= 0
|
||||
) {
|
||||
$sessionLangDataConstantsIterator = 0;
|
||||
} elseif (!$langDataSessionContinued) { // session written to file
|
||||
$sessionLangDataConstantsIterator -= $numberLastPageConstants;
|
||||
}
|
||||
|
||||
// delete old data in session
|
||||
$this->session->setDataByKey('langfileEditNewLangData', NULL);
|
||||
$this->session->setDataByKey('langfileEditConstantsList', NULL);
|
||||
|
||||
// get language data
|
||||
if ($constTypeList === 'untranslated') {
|
||||
$myLangData = array_diff_key($bottomReferenceLanguage, $langEdit);
|
||||
} elseif ($constTypeList === 'unknown') {
|
||||
$myLangData = array_diff_key($langEdit, $bottomReferenceLanguage);
|
||||
} elseif ($constTypeList === 'translated') {
|
||||
$myLangData = array_intersect_key($bottomReferenceLanguage, $langEdit);
|
||||
} else {
|
||||
$myLangData = $bottomReferenceLanguage;
|
||||
}
|
||||
$this->session->setDataByKey('langfileEditConstantsList', array_keys($myLangData));
|
||||
} elseif ($buttonType === 1) { // back button
|
||||
$sessionLangDataConstantsIterator -= ($numConstantsPerPage + $numberLastPageConstants);
|
||||
}
|
||||
|
||||
// get language constants
|
||||
$langData = $this->session->getDataByKey('langfileEditConstantsList');
|
||||
$numConsts = is_countable($langData) ? count($langData) : 0;
|
||||
if (!(is_countable($langData) ? count($langData) : 0)) {
|
||||
throw new LFException('failure.select.emptyLangDataArray', 1);
|
||||
}
|
||||
$langfileEditNewLangData = $this->session->getDataByKey('langfileEditNewLangData');
|
||||
if ($langfileEditNewLangData === '') {
|
||||
$langfileEditNewLangData = [];
|
||||
}
|
||||
|
||||
// prepare constant list for this page
|
||||
$numberLastPageConstants = 0;
|
||||
$constValues = [];
|
||||
do {
|
||||
// check number of session constants
|
||||
if ($sessionLangDataConstantsIterator >= $numConsts) {
|
||||
break;
|
||||
}
|
||||
++$numberLastPageConstants;
|
||||
|
||||
// set constant value (maybe already changed in this session)
|
||||
$constant = $langData[$sessionLangDataConstantsIterator];
|
||||
$editLangVal = $langEdit[$constant] ?? '';
|
||||
if (!isset($langfileEditNewLangData[$langList][$constant])) {
|
||||
$langfileEditNewLangData[$langList][$constant] = $editLangVal;
|
||||
} else {
|
||||
$editLangVal = $langfileEditNewLangData[$langList][$constant];
|
||||
}
|
||||
|
||||
// set constant value (maybe already changed in this session)
|
||||
$editPatternVal = $langPattern[$constant] ?? '';
|
||||
if (!isset($langfileEditNewLangData[$patternList][$constant])) {
|
||||
$langfileEditNewLangData[$patternList][$constant] = $editPatternVal;
|
||||
} else {
|
||||
$editPatternVal =
|
||||
$langfileEditNewLangData[$patternList][$constant];
|
||||
}
|
||||
|
||||
// save information about the constant
|
||||
$constValues[$constant]['edit'] = $editLangVal;
|
||||
$constValues[$constant]['pattern'] = $editPatternVal;
|
||||
$constValues[$constant]['default'] = $bottomReferenceLanguage[$constant];
|
||||
} while (++$sessionLangDataConstantsIterator % $numConstantsPerPage);
|
||||
|
||||
$this->session->setDataByKey('langfileEditNewLangData', $langfileEditNewLangData);
|
||||
$this->session->setDataByKey('sessionLangDataConstantsIterator', $sessionLangDataConstantsIterator);
|
||||
$this->session->setDataByKey('numberLastPageConstants', $numberLastPageConstants);
|
||||
|
||||
$this->view->assign('numTextAreaRows', $extConfig['numTextAreaRows']);
|
||||
$this->view->assign('defaultLanguage', $extConfig['defaultLanguage']);
|
||||
$this->view->assign('parallelEdit', $parallelEdit);
|
||||
$this->view->assign('displayBackButton', $sessionLangDataConstantsIterator > $numConstantsPerPage);
|
||||
$this->view->assign('displayNextButton', $sessionLangDataConstantsIterator < $numConsts);
|
||||
|
||||
$this->view->assign('constValues', $constValues);
|
||||
$this->view->assign('curConsts', $sessionLangDataConstantsIterator);
|
||||
$this->view->assign('totalConsts', $numConsts);
|
||||
$this->view->assign('numSiteConstsSelection', $numConstantsPerPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for the constant type selector
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function getConstantTypeOptions(): array {
|
||||
$constantTypeOptions = [];
|
||||
$constantTypeOptions['all'] = LocalizationUtility::translate('const.type.all', 'lfeditor');
|
||||
$constantTypeOptions['translated'] = LocalizationUtility::translate('const.type.translated', 'lfeditor');
|
||||
$constantTypeOptions['unknown'] = LocalizationUtility::translate('const.type.unknown', 'lfeditor');
|
||||
$constantTypeOptions['untranslated'] = LocalizationUtility::translate('const.type.untranslated', 'lfeditor');
|
||||
return $constantTypeOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of editFile view.
|
||||
*
|
||||
* @param integer $buttonType
|
||||
* @param array $editFileTextArea editFileTextArea[{languageSelection}][{constKey}]
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function editFileSaveAction(int $buttonType, array $editFileTextArea): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$languageSelection = $this->session->getDataByKey('languageSelection');
|
||||
$referenceLanguageSelection = $this->session->getDataByKey('referenceLanguageSelection');
|
||||
$langDataSessionContinued = $buttonType !== 3;
|
||||
|
||||
$langfileEditNewLangData = $this->session->getDataByKey('langfileEditNewLangData');
|
||||
$langfileEditNewLangData[$languageSelection] =
|
||||
array_merge(
|
||||
$langfileEditNewLangData[$languageSelection],
|
||||
$editFileTextArea[$languageSelection]
|
||||
);
|
||||
|
||||
// parallel edit mode?
|
||||
if ($referenceLanguageSelection !== '###default###' && $referenceLanguageSelection != $languageSelection) {
|
||||
$langfileEditNewLangData[$referenceLanguageSelection] =
|
||||
array_merge(
|
||||
$langfileEditNewLangData[$referenceLanguageSelection],
|
||||
$editFileTextArea[$referenceLanguageSelection] ?? []
|
||||
);
|
||||
}
|
||||
$this->session->setDataByKey('langfileEditNewLangData', $langfileEditNewLangData);
|
||||
|
||||
// write if no session continued
|
||||
if (!$langDataSessionContinued) {
|
||||
// Making array of languages that were changed, so only that language files will be edited.
|
||||
$editedLanguages = [$languageSelection];
|
||||
if ($languageSelection !== $referenceLanguageSelection) {
|
||||
$editedLanguages[] = $referenceLanguageSelection;
|
||||
}
|
||||
|
||||
$this->configurationService->execWrite($langfileEditNewLangData, [], FALSE, $editedLanguages);
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editFile', NULL, NULL, ['buttonType' => $buttonType]);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editFile', NULL, NULL, ['buttonType' => $buttonType]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,302 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* General controller. It contains extbase actions for general page.
|
||||
*/
|
||||
class GeneralController extends AbstractBackendController {
|
||||
/** Code for normal split operation */
|
||||
public const NORMAL_SPLIT = 1;
|
||||
|
||||
/** Code for merge operation */
|
||||
public const MERGE = 2;
|
||||
|
||||
/**
|
||||
* Renders last-opened page. This action ai called upon opening LFEditor.
|
||||
*
|
||||
* @param bool $doStateRedirect
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function indexAction($doStateRedirect = TRUE): ?\Psr\Http\Message\ResponseInterface {
|
||||
if ($doStateRedirect) {
|
||||
$this->redirectToLastCalledControllerActionPair();
|
||||
}
|
||||
|
||||
$this->resetLastCalledControllerActionPair();
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('general', 'General');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('general', 'General');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens general view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of general option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
public function generalAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'General');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
if (!$this->session->getDataByKey('languageFileSelection')) {
|
||||
throw new LFException('failure.select.noLangfile', 1);
|
||||
}
|
||||
$this->prepareGeneralViewMainSectionContent();
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in general view.
|
||||
* It is called on change of selection of any select menu in general view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*
|
||||
*/
|
||||
public function changeSelectionAction($extensionSelection = NULL, $languageFileSelection = NULL, $extKey = ''): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('general');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('general');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of general view.
|
||||
*
|
||||
* @param string $authorName
|
||||
* @param string $authorEmail
|
||||
* @param string $metaDescription
|
||||
* @param string $transformFile
|
||||
* @param integer $splitFile
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function generalSaveAction(
|
||||
$authorName = NULL,
|
||||
$authorEmail = NULL,
|
||||
$metaDescription = NULL,
|
||||
$transformFile = NULL,
|
||||
$splitFile = NULL
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$metaArray = [
|
||||
'authorName' => $authorName,
|
||||
'authorEmail' => $authorEmail,
|
||||
'description' => $metaDescription
|
||||
];
|
||||
$this->configurationService->execWrite([], $metaArray);
|
||||
|
||||
// split or merge
|
||||
if ($transformFile === 'xlf') {
|
||||
$splitFile = self::NORMAL_SPLIT;
|
||||
}
|
||||
if (($splitFile == self::NORMAL_SPLIT || $splitFile == self::MERGE)) {
|
||||
$langModes = [];
|
||||
// set vars
|
||||
if ($splitFile != self::NORMAL_SPLIT && $splitFile != self::MERGE) {
|
||||
$splitFile = 0;
|
||||
}
|
||||
$langKeys = Functions::buildLangArray();
|
||||
|
||||
// generate langModes
|
||||
foreach ($langKeys as $langKey) {
|
||||
if (!isset($langModes[$langKey])) {
|
||||
$langModes[$langKey] = $splitFile;
|
||||
}
|
||||
}
|
||||
|
||||
// exec split or merge
|
||||
$this->configurationService->execSplitFile($langModes);
|
||||
// reinitialize file object
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
}
|
||||
|
||||
if (!empty($transformFile)
|
||||
&& $this->configurationService->getFileObj()->getVar('fileType') != $transformFile
|
||||
) {
|
||||
$newFile = SgLib::setFileExtension(
|
||||
$transformFile,
|
||||
$this->configurationService->getFileObj()->getVar('relFile')
|
||||
);
|
||||
$this->configurationService->execTransform($transformFile, $newFile);
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
}
|
||||
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('general');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('general');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('general');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('general');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of general view.
|
||||
*
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
protected function prepareGeneralViewMainSectionContent() {
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$referenceLanguageSelection = $extConfig['defaultLanguage'];
|
||||
$langArray = $this->configurationService->getLangArray($this->backendUser);
|
||||
$infoArray = Functions::genGeneralInfoArray(
|
||||
$referenceLanguageSelection,
|
||||
$langArray,
|
||||
$this->configurationService->getFileObj()
|
||||
);
|
||||
$description = $infoArray['default']['meta']['description'] ?? '';
|
||||
$langFileExtension = $this->configurationService->getFileObj()->getVar('fileType');
|
||||
$preselectMerge = $this->isOriginSameForAllLanguages($infoArray);
|
||||
|
||||
$this->view->assign('infos', $infoArray);
|
||||
$this->view->assign('refLangNumTranslated', $infoArray[$referenceLanguageSelection]['numTranslated']);
|
||||
$this->view->assign('numTextAreaRows', $extConfig['numTextAreaRows']);
|
||||
$this->view->assign('metaDescription', $description);
|
||||
$this->view->assign('langFileExtension', $langFileExtension);
|
||||
$this->view->assign('preselectMerge', $preselectMerge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares parameters for redirection to viewTreeAction.
|
||||
*
|
||||
* @param string $language
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function goToEditFileAction($language): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->session->setDataByKey('languageSelection', $language);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('editFile', 'EditFile');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('editFile', 'EditFile');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Switches between override mode and normal mode.
|
||||
*
|
||||
* @param string $editingMode 'extension', 'l10n', 'override'.
|
||||
* @return void
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function switchEditingModeAction($editingMode = 'extension') {
|
||||
$this->session->setDataByKey('editingMode', $editingMode);
|
||||
$this->indexAction();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks do all language translations originate from same file.
|
||||
*
|
||||
* @param array $infoArray
|
||||
* @return bool
|
||||
*/
|
||||
private function isOriginSameForAllLanguages(array $infoArray) {
|
||||
foreach ($infoArray as $langInfo) {
|
||||
if ($infoArray['default']['origin'] !== $langInfo['origin']) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1,500 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* ManageBackups controller. It contains extbase actions for ManageBackups page.
|
||||
*/
|
||||
class ManageBackupsController extends AbstractBackendController {
|
||||
/**
|
||||
* A constant which is used in backup feature to indicate that
|
||||
* language constant is added after backup file was made.
|
||||
*/
|
||||
public const LANG_CONST_ADDED = 2;
|
||||
|
||||
/**
|
||||
* A constant which is used in backup feature to indicate that
|
||||
* language constant is deleted after backup file was made.
|
||||
*/
|
||||
public const LANG_CONST_DELETED = 1;
|
||||
|
||||
/**
|
||||
* A constant which is used in backup feature to indicate that
|
||||
* language constant isn't deleted nor added after backup file was made. It was just changed.
|
||||
*/
|
||||
public const LANG_CONST_NORMAL = 0;
|
||||
|
||||
/**
|
||||
* Opens manageBackups view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of manageBackups option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @param string $fileName
|
||||
* @param string $langFile language file which was altered.
|
||||
* @param bool $showDiff
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function manageBackupsAction($fileName = '', $langFile = '', $showDiff = FALSE): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'ManageBackups');
|
||||
|
||||
$extensionOptions = $this->configurationService->menuExtList();
|
||||
$this->assignViewWidthMenuVariables('extension', $extensionOptions);
|
||||
|
||||
$this->initializeBackupObject($langFile);
|
||||
$this->prepareManageBackupsViewMainSectionContent();
|
||||
if ($showDiff) {
|
||||
$this->generateDiffContent($fileName);
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in manageBackups view.
|
||||
* It is called on change of selection of any select menu in searchConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $extKey
|
||||
*/
|
||||
public function changeSelectionAction($extensionSelection = NULL, $extKey = ''): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('manageBackups');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('manageBackups');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('manageBackups');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('manageBackups');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of manageBackupsConstant view.
|
||||
*
|
||||
* @throws LFException
|
||||
*/
|
||||
protected function prepareManageBackupsViewMainSectionContent() {
|
||||
$backups = $this->makeBackupsList();
|
||||
if (empty($backups)) {
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('failure.backup.noFiles', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::NOTICE,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
return;
|
||||
}
|
||||
$recoverLabelThead = strtoupper(
|
||||
substr(LocalizationUtility::translate('function.backupMgr.recover', 'lfeditor'), 0, 1)
|
||||
);
|
||||
$differenceLabelThead = strtoupper(
|
||||
substr(LocalizationUtility::translate('function.backupMgr.diff.diff', 'lfeditor'), 0, 1)
|
||||
);
|
||||
|
||||
$this->view->assign('backups', $backups);
|
||||
$this->view->assign('recoverLabelThead', $recoverLabelThead);
|
||||
$this->view->assign('differenceLabelThead', $differenceLabelThead);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes list of backups for use in fluid page.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function makeBackupsList() {
|
||||
$backups = [];
|
||||
$metaArray = $this->backupService->getBackupObj()->getMetaInfos(2);
|
||||
if (is_array($metaArray)) {
|
||||
$keys = array_keys($metaArray);
|
||||
foreach ($keys as $langFile) {
|
||||
foreach ($metaArray[$langFile] as $fileName => $informations) {
|
||||
$backup = [];
|
||||
|
||||
// get path to filename
|
||||
$backupPath = $informations['pathBackup'];
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
|
||||
$file = Typo3Lib::fixFilePath($pathSite . '/' . $backupPath . '/' . $fileName);
|
||||
$origFile = Typo3Lib::fixFilePath(
|
||||
$this->session->getDataByKey('extensionSelection') . '/' . $langFile
|
||||
);
|
||||
|
||||
// check state
|
||||
if (!is_file($file)) {
|
||||
$backup['state'] = 'function.backupMgr.missing';
|
||||
} elseif (!is_file($origFile)) {
|
||||
$backup['state'] = 'lang.file.missing';
|
||||
} else {
|
||||
$backup['state'] = 'function.backupMgr.ok';
|
||||
}
|
||||
|
||||
$backup['date'] = date('Y-m-d H:i:s', $informations['createdAt']);
|
||||
$backup['langFile'] = $langFile;
|
||||
$backup['fileName'] = $fileName;
|
||||
$backups[] = $backup;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $backups;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all backups.
|
||||
*
|
||||
*/
|
||||
public function deleteAllBackupAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->initializeBackupObject();
|
||||
$delFiles = [];
|
||||
$metaArray = $this->backupService->getBackupObj()->getMetaInfos(2);
|
||||
foreach ($metaArray as $langFile => $metaPiece) {
|
||||
$files = array_keys($metaPiece);
|
||||
foreach ($files as $filename) {
|
||||
$delFiles[$filename] = $langFile;
|
||||
}
|
||||
}
|
||||
$this->backupService->execBackupDelete($delFiles);
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('function.backupMgr.success.deleteAll', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('manageBackups');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('manageBackups');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes backup.
|
||||
*
|
||||
* @param string $fileName
|
||||
* @param string $langFile
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function deleteBackupAction($fileName, $langFile): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->initializeBackupObject($langFile);
|
||||
$delFiles = [];
|
||||
$delFiles[$fileName] = '';
|
||||
$this->backupService->execBackupDelete($delFiles);
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('function.backupMgr.success.delete', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->redirect('manageBackups');
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('manageBackups');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('manageBackups');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses backup to recover changes.
|
||||
*
|
||||
* @param string $fileName
|
||||
* @param string $langFile
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function recoverBackupAction($fileName, $langFile): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->initializeBackupObject($langFile);
|
||||
// set backup file
|
||||
$metaArray = $this->backupService->getBackupObj()->getMetaInfos(3);
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
|
||||
$information = [
|
||||
'absPath' => $pathSite . $metaArray[$fileName]['pathBackup'],
|
||||
'relFile' => $fileName,
|
||||
];
|
||||
$this->backupService->getBackupObj()->setVar($information);
|
||||
$this->backupService->getBackupObj()->readFile();
|
||||
// read original file
|
||||
$this->configurationService->initFileObject(
|
||||
$this->backupService->getBackupObj()->getVar('langFile'),
|
||||
Typo3Lib::fixFilePath($pathSite . '/' . $this->backupService->getBackupObj()->getVar('extPath'))
|
||||
);
|
||||
// restore
|
||||
$this->backupService->execBackupRestore();
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('function.backupMgr.success.restore', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('manageBackups');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('manageBackups');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows differences between backup and original.
|
||||
*
|
||||
* @param string $fileName
|
||||
* @param string $langFile
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function showDifferenceBackupAction($fileName, $langFile): ?\Psr\Http\Message\ResponseInterface {
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect(
|
||||
'manageBackups',
|
||||
NULL,
|
||||
NULL,
|
||||
['fileName' => $fileName, 'langFile' => $langFile, 'showDiff' => TRUE]
|
||||
);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect(
|
||||
'manageBackups',
|
||||
NULL,
|
||||
NULL,
|
||||
['fileName' => $fileName, 'langFile' => $langFile, 'showDiff' => TRUE]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes backup object.
|
||||
*
|
||||
* @param string $langFile
|
||||
* @throws LFException
|
||||
* @throws \Exception
|
||||
* @return void
|
||||
*/
|
||||
protected function initializeBackupObject($langFile = '') {
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
$information = [
|
||||
'extPath' => SgLib::trimPath($pathSite, $this->session->getDataByKey('extensionSelection')),
|
||||
'langFile' => $langFile,
|
||||
];
|
||||
$this->backupService->initBackupObject('base', $information);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates content which illustrates differences between backup and current state.
|
||||
*
|
||||
* @param string $fileName
|
||||
* @return void
|
||||
*/
|
||||
protected function generateDiffContent($fileName) {
|
||||
$localLangDiff = NULL;
|
||||
$metaDiff = NULL;
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
// set backup file
|
||||
$metaArray = $this->backupService->getBackupObj()->getMetaInfos(3);
|
||||
$informations = [
|
||||
'absPath' => Typo3Lib::fixFilePath(
|
||||
$pathSite . '/' .
|
||||
$metaArray[$fileName]['pathBackup']
|
||||
),
|
||||
'relFile' => $fileName,
|
||||
];
|
||||
$this->backupService->getBackupObj()->setVar($informations);
|
||||
|
||||
// exec diff
|
||||
// read original file
|
||||
$this->configurationService->initFileObject(
|
||||
$this->backupService->getBackupObj()->getVar('langFile'),
|
||||
Typo3Lib::fixFilePath($pathSite . '/' . $this->backupService->getBackupObj()->getVar('extPath'))
|
||||
);
|
||||
|
||||
// read backup file
|
||||
$this->backupService->getBackupObj()->readFile();
|
||||
|
||||
// get language data
|
||||
$originalLocalLang = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$backupLocalLang = $this->backupService->getBackupObj()->getLocalLangData();
|
||||
|
||||
// get meta data
|
||||
$origMeta = $this->configurationService->getFileObj()->getMetaData();
|
||||
$backupMeta = $this->backupService->getBackupObj()->getMetaData();
|
||||
|
||||
SgLib::fixMetaAttributes($origMeta);
|
||||
unset($originalLocalLang['trans-unit']);
|
||||
$localLangDiff = Functions::getBackupDiff(0, $originalLocalLang, $backupLocalLang);
|
||||
$metaDiff = Functions::getMetaDiff(0, $origMeta, $backupMeta);
|
||||
|
||||
// generate diff
|
||||
if (is_countable($localLangDiff) ? count($localLangDiff) : 0) {
|
||||
$this->outputManageBackupsDiff(
|
||||
$localLangDiff,
|
||||
$metaDiff,
|
||||
$originalLocalLang,
|
||||
$backupLocalLang,
|
||||
$this->configurationService->getFileObj()->getOriginLangData(),
|
||||
$this->backupService->getBackupObj()->getOriginLangData(),
|
||||
$origMeta,
|
||||
$backupMeta
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates output of difference between backup and original.
|
||||
*
|
||||
* @param array $diff language content (difference between backup and origin)
|
||||
* @param array $metaDiff meta content (difference between backup and origin)
|
||||
* @param array $origLang original language content
|
||||
* @param array $backupLang backup language content
|
||||
* @param array $origOriginLang original origins of each language
|
||||
* @param array $backupOriginLang backup origins of each language
|
||||
* @param array $origMeta original meta content
|
||||
* @param array $backupMeta backup meta content
|
||||
* @return void
|
||||
*/
|
||||
protected function outputManageBackupsDiff(
|
||||
$diff,
|
||||
$metaDiff,
|
||||
$origLang,
|
||||
$backupLang,
|
||||
$origOriginLang,
|
||||
$backupOriginLang,
|
||||
$origMeta,
|
||||
$backupMeta
|
||||
) {
|
||||
$differences = [];
|
||||
|
||||
// meta entry
|
||||
if (count($metaDiff)) {
|
||||
$difference = [];
|
||||
$difference['legend'] = LocalizationUtility::translate('function.backupMgr.diff.meta', 'lfeditor');
|
||||
$difference['constants'] = [];
|
||||
foreach ($metaDiff as $label => $value) {
|
||||
$constant = [];
|
||||
$constant['value'] = $value;
|
||||
$constant['label'] = $label;
|
||||
if (!isset($backupMeta[$label])) {
|
||||
$constant['state'] = self::LANG_CONST_ADDED;
|
||||
} elseif (!isset($origMeta[$label])) {
|
||||
$constant['state'] = self::LANG_CONST_DELETED;
|
||||
} else {
|
||||
$constant['state'] = self::LANG_CONST_NORMAL;
|
||||
}
|
||||
$difference['constants'][] = $constant;
|
||||
}
|
||||
$differences[] = $difference;
|
||||
}
|
||||
|
||||
// loop each language entry
|
||||
foreach ($diff as $langKey => $data) {
|
||||
$difference = [];
|
||||
if (!(is_countable($data) ? count($data) : 0) && ($origOriginLang[$langKey] == $backupOriginLang[$langKey])) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$languageFile = Typo3Lib::transTypo3File($backupOriginLang[$langKey], FALSE);
|
||||
} catch (\Exception $e) {
|
||||
$languageFile = $backupOriginLang[$langKey];
|
||||
}
|
||||
$difference['legend'] = $langKey . ' (' . $languageFile . ')';
|
||||
$difference['constants'] = [];
|
||||
foreach ($data as $label => $value) {
|
||||
$constant = [];
|
||||
$constant['value'] = $value;
|
||||
$constant['label'] = $label;
|
||||
|
||||
if (!isset($backupLang[$langKey][$label])) {
|
||||
$constant['state'] = self::LANG_CONST_ADDED;
|
||||
} elseif (!isset($origLang[$langKey][$label])) {
|
||||
$constant['state'] = self::LANG_CONST_DELETED;
|
||||
} else {
|
||||
$constant['state'] = self::LANG_CONST_NORMAL;
|
||||
}
|
||||
$difference['constants'][] = $constant;
|
||||
}
|
||||
$differences[] = $difference;
|
||||
}
|
||||
$this->view->assign('differences', $differences);
|
||||
}
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use TYPO3\CMS\Core\Messaging\AbstractMessage;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* RenameConstant controller. It contains extbase actions for RenameConstant page.
|
||||
*/
|
||||
class RenameConstantController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens renameConstant view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of renameConstant option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
public function renameConstantAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'RenameConstant');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$constantOptions = $this->configurationService->menuConstList(
|
||||
$langData,
|
||||
LocalizationUtility::translate('select.nothing', 'lfeditor')
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('constant', $constantOptions);
|
||||
$this->prepareRenameConstantViewMainSectionContent();
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in renameConstant view.
|
||||
* It is called on change of selection of any select menu in renameConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $constantSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$constantSelection = NULL,
|
||||
$extKey = ''
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
$constantSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('renameConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('renameConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of renameConstant view.
|
||||
*
|
||||
* @param string $newConstantName
|
||||
*/
|
||||
public function renameConstantSaveAction($newConstantName): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$oldConstantName = $this->session->getDataByKey('constantSelection');
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
|
||||
if ($oldConstantName === $newConstantName) {
|
||||
throw new LFException('failure.langfile.noChange');
|
||||
}
|
||||
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$constExists = !empty($langData['default'][$newConstantName])
|
||||
|| !empty($langData[$extConfig['defaultLanguage']][$newConstantName]);
|
||||
if ($constExists) {
|
||||
throw new LFException('failure.langfile.constExists');
|
||||
}
|
||||
|
||||
$langArray = Functions::buildLangArray();
|
||||
$newLang = [];
|
||||
foreach ($langArray as $lang) {
|
||||
if (isset($langData[$lang][$oldConstantName])) {
|
||||
$newLang[$lang][$newConstantName] = $langData[$lang][$oldConstantName];
|
||||
}
|
||||
$newLang[$lang][$oldConstantName] = '';
|
||||
}
|
||||
|
||||
$this->configurationService->execWrite($newLang, [], TRUE);
|
||||
|
||||
$this->addFlashMessage(
|
||||
LocalizationUtility::translate('lang.file.write.success', 'lfeditor'),
|
||||
'',
|
||||
$severity = AbstractMessage::OK,
|
||||
$storeInSession = TRUE
|
||||
);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('renameConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('renameConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
* @return \Psr\Http\Message\ResponseInterface|null
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('renameConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('renameConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of deleteConstant view.
|
||||
*
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareRenameConstantViewMainSectionContent() {
|
||||
$constantSelection = $this->session->getDataByKey('constantSelection');
|
||||
if (empty($constantSelection) || $constantSelection === '###default###') {
|
||||
throw new LFException('failure.select.noConst', 1);
|
||||
}
|
||||
|
||||
$this->view->assign('constantSelection', $constantSelection);
|
||||
}
|
||||
}
|
||||
@@ -1,182 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
|
||||
|
||||
/**
|
||||
* SearchConstant controller. It contains extbase actions for SearchConstant page.
|
||||
*/
|
||||
class SearchConstantController extends AbstractBackendController {
|
||||
/**
|
||||
* Opens searchConstant view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of searchConstant option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
* @param bool $searchDone
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
*/
|
||||
public function searchConstantAction($searchDone = FALSE): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'SearchConstant');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->prepareSearchConstantViewMainSectionContent($searchDone);
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in searchConstant view.
|
||||
* It is called on change of selection of any select menu in searchConstant view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction($extensionSelection = NULL, $languageFileSelection = NULL, $extKey = ''): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('searchConstant');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('searchConstant');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the changes made in main section of searchConstant view.
|
||||
*
|
||||
* @param boolean $caseSensitive
|
||||
* @param string $searchStr
|
||||
*/
|
||||
public function searchConstantSearchAction($caseSensitive, $searchStr): ?\Psr\Http\Message\ResponseInterface {
|
||||
$searchResultArray = [];
|
||||
try {
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$viewLanguages = $this->configurationService->getLangArray($this->backendUser);
|
||||
|
||||
$searchOptions = $caseSensitive ? '' : 'i';
|
||||
if (!preg_match('/^\/.*\/.*$/', $searchStr) && !empty($searchStr)) {
|
||||
foreach ($viewLanguages as $langKey) {
|
||||
if (!array_key_exists($langKey, $langData) || !is_array($langData[$langKey])) {
|
||||
continue;
|
||||
}
|
||||
foreach ($langData[$langKey] as $labelKey => $labelValue) {
|
||||
$labelKeyOrValueContainSearchStr = preg_match(
|
||||
'/' . $searchStr . '/' . $searchOptions,
|
||||
$labelKey
|
||||
) || preg_match('/' . $searchStr . '/' . $searchOptions, $labelValue);
|
||||
if ($labelKeyOrValueContainSearchStr) {
|
||||
$searchResultArray[$langKey][$labelKey] = $labelValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!count($searchResultArray)) {
|
||||
throw new LFException('failure.search.noConstants', 1);
|
||||
}
|
||||
} else {
|
||||
throw new LFException('function.const.search.enterSearchStr', 1);
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->session->setDataByKey('searchResultArray', $searchResultArray);
|
||||
$this->session->setDataByKey('searchString', $searchStr);
|
||||
$this->session->setDataByKey('searchCaseSensitive', $caseSensitive);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('searchConstant', NULL, NULL, ['searchDone' => TRUE]);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('searchConstant', NULL, NULL, ['searchDone' => TRUE]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('searchConstant', NULL, NULL, ['searchDone' => TRUE]);
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('searchConstant', NULL, NULL, ['searchDone' => TRUE]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of searchConstant view.
|
||||
*
|
||||
* @param bool $searchDone
|
||||
* @return void
|
||||
*/
|
||||
protected function prepareSearchConstantViewMainSectionContent($searchDone) {
|
||||
$searchResultArray = [];
|
||||
if ($searchDone) {
|
||||
$searchResultArray = $this->session->getDataByKey('searchResultArray');
|
||||
} else {
|
||||
$this->session->setDataByKey('searchResultArray', []);
|
||||
}
|
||||
$searchString = $this->session->getDataByKey('searchString');
|
||||
$searchCaseSensitive = $this->session->getDataByKey('searchCaseSensitive');
|
||||
|
||||
$this->view->assign('searchResultArray', $searchResultArray);
|
||||
$this->view->assign('searchString', $searchString);
|
||||
$this->view->assign('searchCaseSensitive', $searchCaseSensitive);
|
||||
}
|
||||
}
|
||||
@@ -1,283 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Controller;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* ViewTree controller. It contains extbase actions for ViewTree page.
|
||||
*/
|
||||
class ViewTreeController extends AbstractBackendController {
|
||||
/*********************************************
|
||||
* Actions called from viewTree view *
|
||||
*********************************************/
|
||||
|
||||
/**
|
||||
* Opens viewTree view.
|
||||
* It is called in 2 cases:
|
||||
* - on selection of viewTree option in main menu,
|
||||
* - after redirection from action which must not change the view.
|
||||
*
|
||||
*/
|
||||
public function viewTreeAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
try {
|
||||
$this->view->assign('controllerName', 'ViewTree');
|
||||
|
||||
$this->prepareExtensionAndLangFileOptions();
|
||||
$this->configurationService->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$languageOptions = $this->configurationService->menuLangList(
|
||||
$this->configurationService->getFileObj()->getLocalLangData(),
|
||||
'',
|
||||
$this->backendUser
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('language', $languageOptions);
|
||||
$referenceLanguageOptions = $this->configurationService->menuLangList(
|
||||
$this->configurationService->getFileObj()->getLocalLangData(),
|
||||
LocalizationUtility::translate('select.nothing', 'lfeditor'),
|
||||
$this->backendUser
|
||||
);
|
||||
$this->assignViewWidthMenuVariables('referenceLanguage', $referenceLanguageOptions);
|
||||
$this->prepareViewTreeViewMainSectionContent();
|
||||
} catch (LFException $e) {
|
||||
$this->addLFEFlashMessage($e);
|
||||
}
|
||||
$this->commonViewRenderingActionSettings();
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->view->assign('V11', FALSE);
|
||||
return NULL;
|
||||
} else {
|
||||
$this->view->assign('V11', TRUE);
|
||||
return $this->createBackendResponse();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action saves in session currently selected options from selection menus in viewTree view.
|
||||
* It is called on change of selection of any select menu in viewTree view.
|
||||
*
|
||||
* @param string $extensionSelection
|
||||
* @param string $languageFileSelection
|
||||
* @param string $languageSelection
|
||||
* @param string $referenceLanguageSelection
|
||||
* @param string $extKey
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function changeSelectionAction(
|
||||
$extensionSelection = NULL,
|
||||
$languageFileSelection = NULL,
|
||||
$languageSelection = NULL,
|
||||
$referenceLanguageSelection = NULL,
|
||||
$extKey = ''
|
||||
): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->saveSelectionsInSession(
|
||||
$extensionSelection,
|
||||
$languageFileSelection,
|
||||
$referenceLanguageSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
$languageSelection,
|
||||
NULL,
|
||||
NULL,
|
||||
$extKey
|
||||
);
|
||||
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('viewTree');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('viewTree');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Selects explodeToken.
|
||||
*
|
||||
* @param string $explodeToken
|
||||
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
|
||||
*/
|
||||
public function selectExplodeTokenAction($explodeToken): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->session->setDataByKey('explodeToken', $explodeToken);
|
||||
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('viewTree');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('viewTree');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears extensionAndLangFileOptions cache, and in that way refreshes list of language file options in select box.
|
||||
*
|
||||
*/
|
||||
public function refreshLanguageFileListAction(): ?\Psr\Http\Message\ResponseInterface {
|
||||
$this->clearSelectOptionsCache('extensionAndLangFileOptions');
|
||||
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
$this->redirect('viewTree');
|
||||
return NULL;
|
||||
} else {
|
||||
return $this->redirect('viewTree');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares main section content of viewTree view.
|
||||
*
|
||||
*/
|
||||
protected function prepareViewTreeViewMainSectionContent(): void {
|
||||
$explodeToken = $this->session->getDataByKey('explodeToken');
|
||||
if ($explodeToken === "") {
|
||||
$explodeToken = '.';
|
||||
}
|
||||
|
||||
$langData = $this->configurationService->getFileObj()->getLocalLangData();
|
||||
$refLangSelection = $this->session->getDataByKey('referenceLanguageSelection');
|
||||
$languageSelection = $this->session->getDataByKey('languageSelection');
|
||||
$tree = Functions::genTreeInfoArray($langData[$languageSelection] ?? [], $langData[$refLangSelection] ?? [], $explodeToken);
|
||||
$extConfig = $this->configurationService->getExtConfig();
|
||||
$treeHide = $extConfig['treeHide'];
|
||||
|
||||
$fluidTree = [];
|
||||
$levelIndex = 0;
|
||||
$this->addLevelElementsToFluidTree($tree, $levelIndex, NULL, $fluidTree, $treeHide);
|
||||
|
||||
$this->view->assign('fluidTree', $fluidTree);
|
||||
$this->view->assign('treeHide', $treeHide);
|
||||
$this->view->assign('explodeToken', $explodeToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var integer Width of margin which is added if a branch is missing.
|
||||
*/
|
||||
protected $marginLeftSpaceUnit = 18;
|
||||
|
||||
/**
|
||||
* Makes tree structure which contains constants. The structure is optimised for recursive use on fluid pages.
|
||||
*
|
||||
* @param array $sourceTree
|
||||
* @param int $level
|
||||
* @param string $parentKey
|
||||
* @param array $fluidTree This structure is used for setting tree-data for use in fluid.
|
||||
* @param boolean $treeHide Default state of tree (TRUE - hidden, FALSE - opened)
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
protected function addLevelElementsToFluidTree(
|
||||
array $sourceTree,
|
||||
int $level,
|
||||
$parentKey,
|
||||
array &$fluidTree,
|
||||
$treeHide
|
||||
) {
|
||||
if (empty($sourceTree)) {
|
||||
throw new LFException('failure.select.emptyLanguage', 1);
|
||||
}
|
||||
$constKeys = array_keys($sourceTree[$level]);
|
||||
$index = 0;
|
||||
foreach ($sourceTree[$level] as $constKey => $treeNode) {
|
||||
if ($level === 0 || $treeNode['parent'] === $parentKey) {
|
||||
$fluidTreeElem = [];
|
||||
$fluidTreeElem['label'] = $treeNode['name'];
|
||||
$fluidTreeElem['parent'] = $fluidTree; //$treeNode['parent'];//; //
|
||||
$fluidTreeElem['type'] = $treeNode['type'] ?? '';
|
||||
$fluidTreeElem['isBottom'] = (!array_key_exists($index + 1, $constKeys) ||
|
||||
$sourceTree[$level][$constKeys[$index + 1]]['parent'] !== $treeNode['parent']) ? 1 : 0;
|
||||
|
||||
$icons = $this->prepareTreeIcons($level, $treeHide, $fluidTreeElem, isset($treeNode['childs']));
|
||||
$fluidTreeElem['icons'] = $icons;
|
||||
|
||||
if (array_key_exists($level + 1, $sourceTree)) {
|
||||
$this->addLevelElementsToFluidTree(
|
||||
$sourceTree,
|
||||
$level + 1,
|
||||
$constKey,
|
||||
$fluidTreeElem,
|
||||
$treeHide
|
||||
);
|
||||
}
|
||||
if ($level > 0) {
|
||||
$fluidTree['children'][$constKey] = $fluidTreeElem;
|
||||
} else {
|
||||
$fluidTree[$constKey] = $fluidTreeElem;
|
||||
}
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts and adds icons in tree structure.
|
||||
*
|
||||
* @param int $level Tree level of constant.
|
||||
* @param boolean $treeHide Indicator which shows should all tree elements be closed (hidden) by default.
|
||||
* @param array $fluidTreeElem Element of tree which is built for use on fluid page.
|
||||
* @param boolean $hasChildren Indicator does this tree element have children
|
||||
* @return array
|
||||
*/
|
||||
protected function prepareTreeIcons(int $level, $treeHide, array $fluidTreeElem, $hasChildren): array {
|
||||
$icons = [];
|
||||
$leftMargins = [];
|
||||
$marginLeftSpaceCounter = 0;
|
||||
for ($iconLevel = $level, $currentFluidTreeElem = $fluidTreeElem;
|
||||
$currentFluidTreeElem;
|
||||
$iconLevel--, $currentFluidTreeElem = $currentFluidTreeElem['parent']) {
|
||||
$iconName = '.png';
|
||||
if ($iconLevel === $level) {
|
||||
if ($currentFluidTreeElem['isBottom']) {
|
||||
$iconName = 'Bottom' . $iconName;
|
||||
}
|
||||
if ($hasChildren) {
|
||||
$iconName = 'tree' . ($treeHide && $level != 0 ? 'Plus' : 'Minus') . $iconName;
|
||||
} else {
|
||||
$iconName = 'join' . $iconName;
|
||||
}
|
||||
} else {
|
||||
if (!$currentFluidTreeElem['isBottom']) {
|
||||
$iconName = 'line' . $iconName;
|
||||
$leftMargins[] = $marginLeftSpaceCounter;
|
||||
$marginLeftSpaceCounter = 0;
|
||||
} else {
|
||||
$marginLeftSpaceCounter += $this->marginLeftSpaceUnit;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$icons[] = ['name' => $iconName];
|
||||
}
|
||||
$leftMargins[] = $marginLeftSpaceCounter;
|
||||
for ($iterator = 0, $iconsSize = count($icons); $iterator < $iconsSize; $iterator++) {
|
||||
$icons[$iterator]['marginLeft'] = $leftMargins[$iterator];
|
||||
}
|
||||
return $icons;
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
*/
|
||||
|
||||
namespace SGalinski\Lfeditor\Exceptions;
|
||||
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* DirectoryAccessRightsException can be thrown for exceptions relating to file access and write permissions
|
||||
* in directories
|
||||
*
|
||||
* @package SGalinski\Lfeditor\Exceptions
|
||||
* @author Kevin Ditscheid <kevin.ditscheid@sgalinski.de>
|
||||
*/
|
||||
class DirectoryAccessRightsException extends \Exception {
|
||||
/**
|
||||
* DirectoryAccessRightsException constructor.
|
||||
*
|
||||
* @param string $message
|
||||
* @param int $code
|
||||
* @param \Exception|NULL $previous
|
||||
*/
|
||||
public function __construct($message = '', $code = 0, $previous = NULL) {
|
||||
if (\strpos($message, 'LLL:') === 0) {
|
||||
$locallizedMessage = LocalizationUtility::translate($message, 'lfeditor');
|
||||
$message = $locallizedMessage ?? $message;
|
||||
}
|
||||
|
||||
if ($message === '') {
|
||||
$message = 'LFExeption: no error message given !!!';
|
||||
}
|
||||
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Exceptions;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* adds a new error exception
|
||||
*/
|
||||
class LFException extends Exception {
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $msg error message (this message would be translated by TYPO3)
|
||||
* @param integer $severityCode (0 = error (default), 1 = notice)
|
||||
* @param string $staticMsg static message (appended at the localized string)
|
||||
*/
|
||||
public function __construct($msg, $severityCode = 0, $staticMsg = '') {
|
||||
if (!empty($msg)) {
|
||||
$msg = LocalizationUtility::translate($msg, 'lfeditor');
|
||||
}
|
||||
|
||||
if (empty($msg)) {
|
||||
$msg = 'LFExeption: no error message given !!!';
|
||||
}
|
||||
|
||||
parent::__construct($msg . ' ' . $staticMsg, $severityCode);
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Session\PhpSession;
|
||||
use TYPO3\CMS\Core\SingletonInterface;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* Class AbstractService
|
||||
*/
|
||||
abstract class AbstractService implements SingletonInterface {
|
||||
/**
|
||||
* @var PhpSession
|
||||
*/
|
||||
protected $session;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->session = GeneralUtility::makeInstance(PhpSession::class);
|
||||
$this->session->setSessionKey('tx_lfeditor_sessionVariables');
|
||||
}
|
||||
}
|
||||
@@ -1,316 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* Class BackupService
|
||||
*/
|
||||
class BackupService extends AbstractService {
|
||||
/**
|
||||
* @var \SGalinski\Lfeditor\Service\FileBackupService $backupObj
|
||||
*/
|
||||
private $backupObj;
|
||||
|
||||
/**
|
||||
* init backup object
|
||||
*
|
||||
* @throws LFException raised if directories cant be created or backup class instantiated
|
||||
* @throws Exception|LFException
|
||||
* @param string $mode workspace
|
||||
* @param boolean|array $infos set to true if you want use information from the file object
|
||||
* @return void
|
||||
*/
|
||||
public function initBackupObject($mode = 'base', $infos = NULL) {
|
||||
$informations = [];
|
||||
$mode = ($mode ?: 'base');
|
||||
/** @var ConfigurationService $confService */
|
||||
$confService = GeneralUtility::makeInstance(ConfigurationService::class);
|
||||
|
||||
// create backup and meta directory
|
||||
$extConfig = $confService->getExtConfig();
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
try {
|
||||
SgLib::createDir($extConfig['pathBackup'], $pathSite);
|
||||
SgLib::createDir(dirname($extConfig['metaFile']), $pathSite);
|
||||
} catch (Exception $e) {
|
||||
throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
|
||||
}
|
||||
|
||||
// get information
|
||||
$extPath = '';
|
||||
$langFile = '';
|
||||
if (!is_array($infos)) {
|
||||
// build language file and extension path
|
||||
if ($mode == 'xlf') {
|
||||
try {
|
||||
$typo3RelFile = $confService->getFileObj()->getVar('typo3RelFile');
|
||||
$typo3AbsFile = Typo3Lib::transTypo3File($typo3RelFile, TRUE);
|
||||
} catch (Exception $e) {
|
||||
throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
|
||||
}
|
||||
|
||||
$langFile = SgLib::trimPath('EXT:', $typo3RelFile);
|
||||
$langFile = substr($langFile, strpos($langFile, '/') + 1);
|
||||
|
||||
$extPath = SgLib::trimPath(
|
||||
$langFile,
|
||||
SgLib::trimPath(
|
||||
$pathSite,
|
||||
$typo3AbsFile
|
||||
),
|
||||
'/'
|
||||
);
|
||||
} else {
|
||||
$extPath = SgLib::trimPath($pathSite, $confService->getFileObj()->getVar('absPath'), '/');
|
||||
$langFile = $confService->getFileObj()->getVar('relFile');
|
||||
}
|
||||
|
||||
// set data information
|
||||
$informations['localLang'] = $confService->getFileObj()->getLocalLangData();
|
||||
$informations['originLang'] = $confService->getFileObj()->getOriginLangData();
|
||||
$informations['meta'] = $confService->getFileObj()->getMetaData();
|
||||
}
|
||||
|
||||
// set information
|
||||
$informations['workspace'] = $mode;
|
||||
$informations['extPath'] = is_array($infos) ? $infos['extPath'] : $extPath;
|
||||
$informations['langFile'] = is_array($infos) ? $infos['langFile'] : $langFile;
|
||||
|
||||
// create and initialize the backup object
|
||||
try {
|
||||
$this->backupObj = GeneralUtility::makeInstance(FileBackupService::class);
|
||||
$this->backupObj->init('', $extConfig['pathBackup'], $extConfig['metaFile']);
|
||||
$this->backupObj->setVar($informations);
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* executes the deletion of backup files
|
||||
*
|
||||
* @throws LFException raised if a backup file couldnt be deleted
|
||||
* @param array $delFiles files as key and the language file as value
|
||||
* @return void
|
||||
*/
|
||||
public function execBackupDelete($delFiles) {
|
||||
// delete files
|
||||
try {
|
||||
foreach ($delFiles as $filename => $langFile) {
|
||||
$this->backupObj->deleteSpecFile($filename, '', $langFile);
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* restores a backup file
|
||||
*
|
||||
* @throws LFException raised if some unneeded files couldnt be deleted
|
||||
* @throws Exception|LFException
|
||||
* @return void
|
||||
*/
|
||||
public function execBackupRestore() {
|
||||
/** @var ConfigurationService $confService */
|
||||
$confService = GeneralUtility::makeInstance(ConfigurationService::class);
|
||||
|
||||
// get vars
|
||||
$localLang = [];
|
||||
$meta = [];
|
||||
$origLang = $confService->getFileObj()->getLocalLangData();
|
||||
$origMeta = $confService->getFileObj()->getMetaData();
|
||||
$backupMeta = $this->backupObj->getMetaData();
|
||||
$backupLocalLang = $this->backupObj->getLocalLangData();
|
||||
$backupOriginLang = $this->backupObj->getOriginLangData();
|
||||
|
||||
// get differences between original and backup file
|
||||
$origDiff = Functions::getBackupDiff(1, $origLang, $backupLocalLang);
|
||||
$backupDiff = Functions::getBackupDiff(2, $origLang, $backupLocalLang);
|
||||
|
||||
if (is_countable($origDiff) ? count($origDiff) : 0) {
|
||||
foreach ($origDiff as $langKey => $data) {
|
||||
foreach ($data as $label => $value) {
|
||||
if (isset($backupLocalLang[$langKey][$label])) {
|
||||
$localLang[$langKey][$label] = $value;
|
||||
} else {
|
||||
$localLang[$langKey][$label] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_countable($backupDiff) ? count($backupDiff) : 0) {
|
||||
foreach ($backupDiff as $langKey => $data) {
|
||||
foreach ($data as $label => $value) {
|
||||
$localLang[$langKey][$label] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get differences between original and backup meta
|
||||
SgLib::fixMetaAttributes($origMeta);
|
||||
$origDiff = Functions::getMetaDiff(1, $origMeta, $backupMeta);
|
||||
$backupDiff = Functions::getMetaDiff(2, $origMeta, $backupMeta);
|
||||
|
||||
if (is_countable($origDiff) ? count($origDiff) : 0) {
|
||||
foreach ($origDiff as $label => $value) {
|
||||
if (isset($backupMeta[$label])) {
|
||||
$meta[$label] = $value;
|
||||
} else {
|
||||
$meta[$label] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_countable($backupDiff) ? count($backupDiff) : 0) {
|
||||
foreach ($backupDiff as $label => $value) {
|
||||
$meta[$label] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
// restore origins of languages
|
||||
$deleteFiles = [];
|
||||
foreach ($backupOriginLang as $langKey => $file) {
|
||||
$curFile = $confService->getFileObj()->getOriginLangData($langKey);
|
||||
if ($curFile != $file && $curFile != $confService->getFileObj()->getVar('absFile')) {
|
||||
$deleteFiles[] = $curFile;
|
||||
}
|
||||
$confService->getFileObj()->setOriginLangData($file, $langKey);
|
||||
}
|
||||
|
||||
// write modified language array
|
||||
try {
|
||||
$confService->setExecBackup(0);
|
||||
$confService->execWrite($localLang, $meta, TRUE);
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// delete all old files
|
||||
try {
|
||||
if (count($deleteFiles)) {
|
||||
SgLib::deleteFiles($deleteFiles);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
throw new LFException(
|
||||
'failure.langfile.notDeleted',
|
||||
0,
|
||||
'(' . $e->getMessage() . ')'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* exec the backup of files and deletes automatic old files
|
||||
*
|
||||
* @throws LFException raised if backup file cant written or unneeded files cant deleted
|
||||
* @return boolean
|
||||
*/
|
||||
public function execBackup() {
|
||||
$createdAt = [];
|
||||
/** @var ConfigurationService $confService */
|
||||
$confService = GeneralUtility::makeInstance(ConfigurationService::class);
|
||||
|
||||
// create backup object
|
||||
try {
|
||||
$this->initBackupObject('base', TRUE);
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// write backup file
|
||||
try {
|
||||
$this->backupObj->writeFile();
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// exec automatic deletion of backup files, if anzBackup greater zero
|
||||
$extConfig = $confService->getExtConfig();
|
||||
if ($extConfig['anzBackup'] <= 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// get difference information
|
||||
$metaArray = $this->backupObj->getMetaInfos(3);
|
||||
$rows = count($metaArray);
|
||||
$dif = $rows - $extConfig['anzBackup'];
|
||||
|
||||
if ($dif <= 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// sort metaArray
|
||||
foreach ($metaArray as $key => $row) {
|
||||
$createdAt[$key] = $row['createdAt'];
|
||||
}
|
||||
array_multisort($createdAt, SORT_DESC, $metaArray);
|
||||
|
||||
// get filenames
|
||||
$files = array_keys($metaArray);
|
||||
$numberFiles = count($files);
|
||||
|
||||
// delete files
|
||||
try {
|
||||
for (; $dif > 0; --$dif, --$numberFiles) {
|
||||
$this->backupObj->deleteSpecFile($files[$numberFiles - 1]);
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
try { // delete current written file
|
||||
$this->backupObj->deleteFile();
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FileBackupService
|
||||
*/
|
||||
public function getBackupObj() {
|
||||
return $this->backupObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FileBackupService $backupObj
|
||||
*/
|
||||
public function setBackupObj($backupObj) {
|
||||
$this->backupObj = $backupObj;
|
||||
}
|
||||
}
|
||||
@@ -1,843 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use SGalinski\Lfeditor\Exceptions\DirectoryAccessRightsException;
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\ExtensionUtility;
|
||||
use SGalinski\Lfeditor\Utility\Functions;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
|
||||
use TYPO3\CMS\Core\Cache\CacheManager;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Localization\Locales;
|
||||
use TYPO3\CMS\Core\Package\PackageInterface;
|
||||
use TYPO3\CMS\Core\Package\PackageManager;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* Class ConfigurationService
|
||||
*/
|
||||
class ConfigurationService extends AbstractService {
|
||||
/**
|
||||
* @var array extension configuration
|
||||
* @see prepareConfig()
|
||||
*/
|
||||
protected $extConfig = [];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $invalidLanguages = '';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $langArray = [];
|
||||
|
||||
/**
|
||||
* Available editing modes based on extension configuration
|
||||
*
|
||||
* @var array
|
||||
* @see prepareConfig()
|
||||
*/
|
||||
protected $availabledEditingModes = [];
|
||||
|
||||
/**
|
||||
* @var \SGalinski\Lfeditor\Service\FileBaseService
|
||||
*/
|
||||
protected $fileObj;
|
||||
|
||||
/**
|
||||
* @var \SGalinski\Lfeditor\Service\FileBaseService
|
||||
*/
|
||||
protected $convObj;
|
||||
|
||||
/**
|
||||
* @var PackageManager $packageManager
|
||||
*/
|
||||
private $packageManager;
|
||||
|
||||
public function __construct(PackageManager $packageManager) {
|
||||
parent::__construct();
|
||||
$this->packageManager = $packageManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* preparation and check of the configuration
|
||||
*
|
||||
* Note that the default value will be set, if a option check fails.
|
||||
*
|
||||
* @return array
|
||||
* @throws DirectoryAccessRightsException
|
||||
*/
|
||||
public function prepareConfig() {
|
||||
if (!empty($this->extConfig)) {
|
||||
return $this->extConfig;
|
||||
}
|
||||
$this->extConfig = ExtensionUtility::getExtensionConfiguration();
|
||||
|
||||
// regular expressions
|
||||
if (!array_key_exists('searchRegex', $this->extConfig)) {
|
||||
$this->extConfig['searchRegex'] = '/^([a-z0-9_]*locallang[a-z0-9_-]*\.(php|xml)|[^\.]*\.xlf)$/i';
|
||||
} elseif (!\preg_match('/^\/.*\/.*$/', $this->extConfig['searchRegex'])) {
|
||||
$this->extConfig['searchRegex'] = '/^([a-z0-9_]*locallang[a-z0-9_-]*\.(php|xml)|[^\.]*\.xlf)$/i';
|
||||
}
|
||||
|
||||
if (!array_key_exists('searchRegex', $this->extConfig)) {
|
||||
$this->extConfig['extIgnore'] = '/^csh_.*$/';
|
||||
} elseif (!\preg_match('/^\/.*\/.*$/', $this->extConfig['extIgnore'])) {
|
||||
$this->extConfig['extIgnore'] = '/^csh_.*$/';
|
||||
}
|
||||
|
||||
if (!array_key_exists('extWhitelist', $this->extConfig)) {
|
||||
$this->extConfig['extWhitelist'] = '';
|
||||
} elseif (!\preg_match('/^\/.*\/.*$/', $this->extConfig['extWhitelist'])) {
|
||||
$this->extConfig['extWhitelist'] = '';
|
||||
}
|
||||
|
||||
$this->extConfig['execBackup'] = TRUE;
|
||||
$this->extConfig['viewSysExt'] = TRUE;
|
||||
$this->extConfig['viewGlobalExt'] = TRUE;
|
||||
$this->extConfig['viewLocalExt'] = TRUE;
|
||||
$this->extConfig['treeHide'] = TRUE;
|
||||
|
||||
$this->extConfig['viewStateExt'] = 1;
|
||||
$this->extConfig['numTextAreaRows'] = 5;
|
||||
$this->extConfig['numSiteConsts'] = 6;
|
||||
$this->extConfig['anzBackup'] = 5;
|
||||
// Options for number of constants presented on EditFile page
|
||||
$this->extConfig['numSiteConstsOptions']
|
||||
= ['100' => 100, '200' => 200, '500' => 500, '1000' => 1000, '1500' => 1500, '2000' => 2000];
|
||||
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
// paths and files (don't need to exist)
|
||||
$this->extConfig['pathBackup'] = Typo3Lib::fixFilePath(
|
||||
$pathSite . '/typo3temp/LFEditor/Backup/'
|
||||
) . '/';
|
||||
$this->extConfig['metaFile'] = Typo3Lib::fixFilePath(
|
||||
$pathSite . '/typo3temp/LFEditor/Backup/Meta.xml'
|
||||
);
|
||||
$this->extConfig['pathOverrideFiles'] = Typo3Lib::fixFilePath(
|
||||
$pathSite . '/typo3conf/LFEditor/OverrideFiles/'
|
||||
);
|
||||
|
||||
// files
|
||||
$this->extConfig['pathCSS'] = 'Resources/Public/StyleSheets/Lfeditor.css';
|
||||
|
||||
// languages (default is forbidden)
|
||||
if (!empty($this->extConfig['viewLanguages'])) {
|
||||
$langs = GeneralUtility::trimExplode(',', $this->extConfig['viewLanguages'], TRUE);
|
||||
unset($this->extConfig['viewLanguages']);
|
||||
|
||||
$availableLanguageKeys = [];
|
||||
$locales = GeneralUtility::makeInstance(Locales::class);
|
||||
$languages = $locales->getLocales();
|
||||
|
||||
foreach ($languages as $language) {
|
||||
$availableLanguageKeys[$language] = TRUE;
|
||||
}
|
||||
|
||||
foreach ($langs as $lang) {
|
||||
if (!isset($availableLanguageKeys[$lang])) {
|
||||
if ($this->invalidLanguages === '') {
|
||||
$this->invalidLanguages = $lang;
|
||||
} else {
|
||||
$this->invalidLanguages .= ', ' . $lang;
|
||||
}
|
||||
}
|
||||
|
||||
if ($lang !== 'default') {
|
||||
$this->extConfig['viewLanguages'][] = $lang;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($this->extConfig['defaultLanguage'])) {
|
||||
$this->extConfig['defaultLanguage'] = 'default';
|
||||
} else {
|
||||
/** @var Locales $locales */
|
||||
$locales = GeneralUtility::makeInstance(Locales::class);
|
||||
$availableLanguageKeys = $locales->getLanguages();
|
||||
if (!isset($availableLanguageKeys[$this->extConfig['defaultLanguage']])) {
|
||||
$this->extConfig['defaultLanguage'] = 'default';
|
||||
}
|
||||
}
|
||||
|
||||
// editing modes
|
||||
$this->availabledEditingModes = [
|
||||
'extension' => LocalizationUtility::translate('select.editingMode.extension', 'lfeditor'),
|
||||
// The l10n mode does not work for TYPO3 9 and the var folder and we do not want to fix this, yet
|
||||
//'l10n' => LocalizationUtility::translate('select.editingMode.l10n', 'lfeditor'),
|
||||
// Note: override should be always available because it is the fallback mode for editors
|
||||
'override' => LocalizationUtility::translate('select.editingMode.override', 'lfeditor'),
|
||||
];
|
||||
|
||||
if (isset($this->extConfig['editModeExtension']) && ((int) $this->extConfig['editModeExtension']) === 0) {
|
||||
unset($this->availabledEditingModes['extension']);
|
||||
}
|
||||
if (isset($this->extConfig['editModeL10n']) && ((int) $this->extConfig['editModeL10n']) === 0) {
|
||||
unset($this->availabledEditingModes['l10n']);
|
||||
}
|
||||
|
||||
if (isset($this->extConfig['pathAdditionalConfiguration']) && $this->extConfig['pathAdditionalConfiguration']) {
|
||||
$pathAdditionalConfiguration = Typo3Lib::fixFilePath($this->extConfig['pathAdditionalConfiguration']);
|
||||
$this->extConfig['pathAdditionalConfiguration'] = $pathSite . $pathAdditionalConfiguration;
|
||||
$additionalConfigurationDirectory = \dirname($this->extConfig['pathAdditionalConfiguration']);
|
||||
if (!\is_writable($additionalConfigurationDirectory)) {
|
||||
$message = 'Directory ' . $additionalConfigurationDirectory . ' is not writable.'
|
||||
. 'This directory should be writable in order to write the language override configuration '
|
||||
. 'file ' . $pathAdditionalConfiguration;
|
||||
throw new DirectoryAccessRightsException($message);
|
||||
}
|
||||
} else {
|
||||
/** @var \TYPO3\CMS\Core\Configuration\ConfigurationManager $configurationManager */
|
||||
$configurationManager = GeneralUtility::makeInstance(
|
||||
\TYPO3\CMS\Core\Configuration\ConfigurationManager::class
|
||||
);
|
||||
$this->extConfig['pathAdditionalConfiguration'] = $configurationManager->getAdditionalConfigurationFileLocation(
|
||||
);
|
||||
}
|
||||
|
||||
return $this->extConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds extensions for the extension menu selector.
|
||||
*
|
||||
* Note: $this->extConfig must be initialized before call of this method (method prepareConfig() must be executed before this method).
|
||||
*
|
||||
* @return array
|
||||
* @throws LFException raised if no extensions are found
|
||||
*/
|
||||
public function menuExtList() {
|
||||
// search extensions
|
||||
$tmpExtList = [];
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
try {
|
||||
// local extensions
|
||||
|
||||
$labelLocal = LocalizationUtility::translate('ext.local', 'lfeditor');
|
||||
$labelSystem = LocalizationUtility::translate('ext.system', 'lfeditor');
|
||||
$tmpExtList[$labelLocal] = [];
|
||||
$tmpExtList[$labelSystem] = [];
|
||||
foreach ($this->packageManager->getAvailablePackages() as $package) {
|
||||
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '<')) {
|
||||
// local extensions
|
||||
if ($this->extConfig['viewLocalExt'] && \count(
|
||||
$content = Functions::searchExtensions(
|
||||
$pathSite . Typo3Lib::PATH_LOCAL_EXT,
|
||||
$this->extConfig['viewStateExt'],
|
||||
$this->extConfig['extIgnore'],
|
||||
$this->extConfig['extWhitelist']
|
||||
)
|
||||
)
|
||||
) {
|
||||
$tmpExtList[LocalizationUtility::translate('ext.local', 'lfeditor')] = $content;
|
||||
}
|
||||
|
||||
// global extensions
|
||||
if ($this->extConfig['viewGlobalExt'] && \is_dir(Typo3Lib::PATH_GLOBAL_EXT) && \count(
|
||||
$content = Functions::searchExtensions(
|
||||
$pathSite . Typo3Lib::PATH_GLOBAL_EXT,
|
||||
$this->extConfig['viewStateExt'],
|
||||
$this->extConfig['extIgnore'],
|
||||
$this->extConfig['extWhitelist']
|
||||
)
|
||||
)
|
||||
) {
|
||||
$tmpExtList[LocalizationUtility::translate('ext.global', 'lfeditor')] = $content;
|
||||
}
|
||||
|
||||
// system extensions
|
||||
if ($this->extConfig['viewSysExt'] && \count(
|
||||
$content = Functions::searchExtensions(
|
||||
$pathSite . Typo3Lib::PATH_SYS_EXT,
|
||||
$this->extConfig['viewStateExt'],
|
||||
$this->extConfig['extIgnore'],
|
||||
$this->extConfig['extWhitelist']
|
||||
)
|
||||
)
|
||||
) {
|
||||
$tmpExtList[LocalizationUtility::translate('ext.system', 'lfeditor')] = $content;
|
||||
}
|
||||
} else {
|
||||
// check, if the directory/extension should be saved
|
||||
if ($this->extConfig['extWhitelist'] !== ''
|
||||
&& !preg_match($this->extConfig['extWhitelist'], $package->getPackageKey())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($this->extConfig['viewLocalExt'] && $this->isPackageLocal($package)) {
|
||||
$tmpExtList[$labelLocal][] = $package->getPackagePath();
|
||||
}
|
||||
|
||||
if ($this->extConfig['viewSysExt'] && $this->isPackageSystemPackage($package)) {
|
||||
$tmpExtList[$labelSystem][] = $package->getPackagePath();
|
||||
}
|
||||
}
|
||||
}
|
||||
sort($tmpExtList[$labelLocal]);
|
||||
sort($tmpExtList[$labelSystem]);
|
||||
} catch (Exception $e) {
|
||||
throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
|
||||
}
|
||||
|
||||
// check extension array
|
||||
if (!\count($tmpExtList)) {
|
||||
throw new LFException('failure.search.noExtension');
|
||||
}
|
||||
|
||||
// create list
|
||||
$extList = Functions::prepareExtList($tmpExtList);
|
||||
$extList = \array_merge([$pathSite . 'fileadmin' => 'fileadmin/', ''], $extList);
|
||||
|
||||
foreach ($extList as $extAddress => $extLabel) {
|
||||
unset($extList[$extAddress]);
|
||||
$fixedExtAddress = Typo3Lib::fixFilePath($extAddress);
|
||||
$extList[$fixedExtAddress] = $extLabel;
|
||||
}
|
||||
return $extList;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if package is system package
|
||||
*
|
||||
* @param PackageInterface $package
|
||||
* @return bool
|
||||
*/
|
||||
private function isPackageLocal(PackageInterface $package): bool {
|
||||
return $package->getPackageMetaData()->getPackageType() === 'typo3-cms-extension';
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if package is system package
|
||||
*
|
||||
* @param PackageInterface $package
|
||||
* @return bool
|
||||
*/
|
||||
private function isPackageSystemPackage(PackageInterface $package): bool {
|
||||
return $package->getPackageMetaData()->isFrameworkType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds language files of extension which address is passed as $extensionAddress parameter.
|
||||
*
|
||||
* @param string $extensionAddress
|
||||
* @return array
|
||||
* @throws LFException
|
||||
*/
|
||||
public function menuLangFileList($extensionAddress) {
|
||||
// check
|
||||
if (empty($extensionAddress)) {
|
||||
throw new LFException('failure.search.noLangFile', 1);
|
||||
}
|
||||
|
||||
// search and prepare files
|
||||
try {
|
||||
/** @var array $files */
|
||||
$files = SgLib::searchFiles(
|
||||
$extensionAddress,
|
||||
$this->extConfig['searchRegex']
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
throw new LFException(
|
||||
'failure.search.noLangFile',
|
||||
1,
|
||||
'(' . $e->getMessage() . ')'
|
||||
);
|
||||
}
|
||||
|
||||
$fileArray = [];
|
||||
if (\count($files)) {
|
||||
foreach ($files as $file) {
|
||||
$filename = \substr($file, \strlen($extensionAddress) + 1);
|
||||
$fileArray[$filename] = $filename;
|
||||
}
|
||||
} else {
|
||||
throw new LFException('failure.search.noLangFile', 1);
|
||||
}
|
||||
|
||||
return $fileArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for the language menu selector
|
||||
*
|
||||
* @param array $langData language data
|
||||
* @param string $default optional default value (if you dont want a default let it empty)
|
||||
* @param BackendUserAuthentication $backendUser
|
||||
* @param bool $translatedLanguagesOnly looks only for translated languages
|
||||
* @return array
|
||||
* @throws LFException
|
||||
*/
|
||||
public function menuLangList(
|
||||
$langData,
|
||||
$default = '',
|
||||
BackendUserAuthentication $backendUser = NULL,
|
||||
$translatedLanguagesOnly = FALSE
|
||||
) {
|
||||
// build languages
|
||||
$languageArray = $this->getLangArray($backendUser);
|
||||
$languageList = [];
|
||||
foreach ($languageArray as $language) {
|
||||
$constCount = 0;
|
||||
if (array_key_exists($language, $langData) && \is_array($langData[$language])) {
|
||||
$constCount = \count($langData[$language]);
|
||||
}
|
||||
if ($translatedLanguagesOnly && $constCount <= 0) {
|
||||
continue;
|
||||
}
|
||||
$languageLabel = $language;
|
||||
if ($language === 'default') {
|
||||
$languageLabel = 'en';
|
||||
}
|
||||
$languageList[$language] = $languageLabel . ' (' . $constCount . ' ' .
|
||||
LocalizationUtility::translate('const.consts', 'lfeditor') . ')';
|
||||
}
|
||||
|
||||
// add default value
|
||||
if (!empty($default)) {
|
||||
$languageList = \array_merge(['###default###' => $default], $languageList);
|
||||
}
|
||||
return $languageList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list (array) of constants.
|
||||
*
|
||||
* @param array $langData language data
|
||||
* @param string $default name of default entry
|
||||
* @return array
|
||||
*/
|
||||
public function menuConstList($langData, $default) {
|
||||
// generate constant list
|
||||
$constList = [];
|
||||
$languages = Functions::buildLangArray();
|
||||
foreach ($languages as $language) {
|
||||
if (!\array_key_exists($language, $langData) || !\is_array($langData[$language]) || !\count(
|
||||
$langData[$language]
|
||||
)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/** @var array $constants */
|
||||
$constants = \array_keys($langData[$language]);
|
||||
foreach ($constants as $constant) {
|
||||
$constList[\str_replace('#', '$*-*$', $constant)] = $constant;
|
||||
}
|
||||
}
|
||||
|
||||
// sorting and default entry
|
||||
\asort($constList);
|
||||
$constList = \array_merge(['###default###' => $default], $constList);
|
||||
return $constList;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates and instantiates a file object
|
||||
*
|
||||
* Naming Convention:
|
||||
* File<workspace><filetype>Service
|
||||
*
|
||||
*
|
||||
* @param string $langFile
|
||||
* @param string $extPath
|
||||
* @param bool $flagReadFile
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
public function initFileObject($langFile, $extPath, $flagReadFile = TRUE) {
|
||||
$fileType = SgLib::getFileExtension($langFile);
|
||||
$className = __NAMESPACE__ . '\FileBase' . \strtoupper($fileType) . 'Service';
|
||||
if (!\class_exists($className)) {
|
||||
throw new LFException('failure.langfile.unknownType');
|
||||
}
|
||||
/** @var \SGalinski\Lfeditor\Service\FileService $originalFileObject */
|
||||
$originalFileObject = GeneralUtility::makeInstance($className);
|
||||
$originalFileObject->init($langFile, $extPath, '');
|
||||
|
||||
try {
|
||||
if ($this->session->getDataByKey('editingMode') === 'override') {
|
||||
/** @var FileOverrideService $overrideFileObj */
|
||||
$overrideFileObj = GeneralUtility::makeInstance(FileOverrideService::class);
|
||||
$overrideFileObj->init($originalFileObject, '', '');
|
||||
$this->fileObj = $overrideFileObj;
|
||||
} else {
|
||||
$this->fileObj = $originalFileObject;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
throw new LFException('failure.failure', 0, '(' . $e->getMessage() . ')');
|
||||
}
|
||||
|
||||
if ($flagReadFile) {
|
||||
$this->fileObj->readFile();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes writing of language files
|
||||
*
|
||||
*
|
||||
* @param array $modArray changes (constants with empty values will be deleted)
|
||||
* @param array $modMetaArray meta changes (indexes with empty values will be deleted)
|
||||
* @param boolean $forceDel set to true if you want delete default constants
|
||||
* @param array|NULL $editedLanguages
|
||||
* @return void
|
||||
* @throws LFException if file could not be written or some param criteria is not correct
|
||||
* @throws \TYPO3\CMS\Core\Cache\Exception\NoSuchCacheException
|
||||
* @throws Exception
|
||||
*/
|
||||
public function execWrite($modArray, $modMetaArray = [], $forceDel = FALSE, $editedLanguages = NULL) {
|
||||
// checks
|
||||
if (!\is_array($modArray)) {
|
||||
throw new LFException('failure.file.notWritten');
|
||||
}
|
||||
|
||||
$fileObject = $this->getFileObj();
|
||||
if ($fileObject === NULL) {
|
||||
$this->initFileObject(
|
||||
$this->session->getDataByKey('languageFileSelection'),
|
||||
$this->session->getDataByKey('extensionSelection')
|
||||
);
|
||||
$fileObject = $this->getFileObj();
|
||||
}
|
||||
|
||||
// execute backup
|
||||
$extConfig = $this->getExtConfig();
|
||||
if ($extConfig['execBackup'] && $this->session->getDataByKey('editingMode') === 'extension') {
|
||||
/** @var BackupService $backupService */
|
||||
$backupService = GeneralUtility::makeInstance(BackupService::class);
|
||||
$backupService->execBackup();
|
||||
}
|
||||
|
||||
if (!$this->session->getDataByKey('defaultLanguagePermission')) {
|
||||
unset($modArray[$this->extConfig['defaultLanguage']]);
|
||||
}
|
||||
// set new language data
|
||||
foreach ($modArray as $langKey => $data) {
|
||||
if (\is_array($data)) {
|
||||
foreach ($data as $const => $value) {
|
||||
$fileObject->setLocalLangData($const, $value, $langKey, $forceDel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set changed meta data
|
||||
foreach ($modMetaArray as $metaIndex => $metaValue) {
|
||||
$fileObject->setMetaData($metaIndex, $metaValue);
|
||||
}
|
||||
|
||||
// write new language data
|
||||
$fileObject->writeFile($editedLanguages);
|
||||
|
||||
// delete possible language files
|
||||
$absFile = $fileObject->getVar('absFile');
|
||||
$originLang = $fileObject->getOriginLangData();
|
||||
$emptyFiles = [];
|
||||
foreach ($originLang as $lang => $origin) {
|
||||
if ($origin === $absFile || !\is_file($origin)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$langData = $fileObject->getLocalLangData($lang);
|
||||
if (\is_array($langData) && !\count($langData)) {
|
||||
$emptyFiles[] = $origin;
|
||||
}
|
||||
}
|
||||
|
||||
// delete all empty language files
|
||||
try {
|
||||
if (\count($emptyFiles)) {
|
||||
SgLib::deleteFiles($emptyFiles);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
throw new LFException('failure.langfile.notDeleted', 0, '(' . $e->getMessage() . ')');
|
||||
}
|
||||
|
||||
/** @var CacheManager $cacheManager */
|
||||
$cacheManager = GeneralUtility::makeInstance(CacheManager::class);
|
||||
$cacheManager->getCache('l10n')->flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits or merges a language file
|
||||
*
|
||||
* @param array $langModes language shortcuts and their mode (1 = splitNormal, 2 = merge)
|
||||
* @return void
|
||||
* @throws LFException raised if file could not be split or merged (i.e. empty langModes)
|
||||
* @throws Exception|LFException
|
||||
*/
|
||||
public function execSplitFile(array $langModes) {
|
||||
// check
|
||||
if (!\is_array($langModes) || !\count($langModes)) {
|
||||
throw new LFException('failure.langfile.notSplittedOrMerged');
|
||||
}
|
||||
|
||||
// rewrite originLang array
|
||||
$delLangFiles = [];
|
||||
foreach ($langModes as $langKey => $mode) {
|
||||
if ($langKey === 'default') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// get origin of this language
|
||||
$origin = $this->fileObj->getOriginLangData($langKey);
|
||||
|
||||
// split or merge
|
||||
if ($mode === 1) {
|
||||
// nothing to do if the file is already a normal splitted file
|
||||
if (Typo3Lib::checkFileLocation($origin) !== 'l10n') {
|
||||
if ($this->fileObj->checkLocalizedFile(\basename($origin), $langKey)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// delete file if was it a l10n file
|
||||
if ($this->fileObj->checkLocalizedFile(\basename($origin), $langKey)) {
|
||||
$delLangFiles[] = $origin;
|
||||
}
|
||||
|
||||
$origin = Typo3Lib::fixFilePath(
|
||||
\dirname($this->fileObj->getVar('absFile')) .
|
||||
'/' . $this->fileObj->nameLocalizedFile($langKey)
|
||||
);
|
||||
} elseif ($mode === 2) {
|
||||
if ($this->fileObj->checkLocalizedFile(\basename($origin), $langKey)) {
|
||||
$delLangFiles[] = $origin;
|
||||
}
|
||||
$origin = $this->fileObj->getVar('absFile');
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
$this->fileObj->setOriginLangData($origin, $langKey);
|
||||
}
|
||||
|
||||
// write new language file
|
||||
$this->execWrite([]);
|
||||
|
||||
// delete old localized files, if single mode was selected
|
||||
try {
|
||||
if (\count($delLangFiles)) {
|
||||
SgLib::deleteFiles($delLangFiles);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
throw new LFException(
|
||||
'failure.langfile.notDeleted',
|
||||
0,
|
||||
'(' . $e->getMessage() . ')'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* converts language files between different formats
|
||||
*
|
||||
* @param string $type new file format
|
||||
* @param string $newFile new relative file
|
||||
* @return void
|
||||
* @throws Exception|LFException
|
||||
* @throws LFException raised if transforming or deletion of old files failed
|
||||
*/
|
||||
public function execTransform($type, $newFile) {
|
||||
// copy current object to convObj
|
||||
$this->convObj = clone $this->fileObj;
|
||||
unset($this->fileObj);
|
||||
|
||||
// init new language file object (dont try to read file)
|
||||
$this->initFileObject($newFile, $this->convObj->getVar('absPath'), FALSE);
|
||||
|
||||
// recreate originLang
|
||||
$origins = $this->convObj->getOriginLangData();
|
||||
foreach ($origins as $langKey => $file) {
|
||||
// localized or merged language origin
|
||||
$newFile = SgLib::setFileExtension($type, $file);
|
||||
if ($this->convObj->getVar('workspace') === 'base') {
|
||||
if ($this->convObj->checkLocalizedFile(\basename($file), $langKey)) {
|
||||
$newFile = \dirname($file) . '/' . $this->fileObj->nameLocalizedFile($langKey);
|
||||
}
|
||||
}
|
||||
$this->fileObj->setOriginLangData(Typo3Lib::fixFilePath($newFile), $langKey);
|
||||
}
|
||||
|
||||
// recreate meta data
|
||||
$meta = $this->convObj->getMetaData();
|
||||
foreach ($meta as $metaIndex => $metaValue) {
|
||||
$this->fileObj->setMetaData($metaIndex, $metaValue);
|
||||
}
|
||||
|
||||
// write new language file
|
||||
$this->extConfig['execBackup'] = 0;
|
||||
$this->execWrite($this->convObj->getLocalLangData());
|
||||
|
||||
// delete all old files
|
||||
try {
|
||||
$delFiles = $this->convObj->getOriginLangData();
|
||||
if (\is_array($delFiles) && \count($delFiles)) {
|
||||
SgLib::deleteFiles($delFiles);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
throw new LFException(
|
||||
'failure.langfile.notDeleted',
|
||||
0,
|
||||
'(' . $e->getMessage() . ')'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/*************************
|
||||
* Getters and setters *
|
||||
*************************/
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getExtConfig() {
|
||||
return $this->extConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets 'execBackup' parameter of extension configuration.
|
||||
*
|
||||
* @param int $execBackup
|
||||
*/
|
||||
public function setExecBackup($execBackup) {
|
||||
$this->extConfig['execBackup'] = $execBackup;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $extConfig
|
||||
*/
|
||||
public function setExtConfig($extConfig) {
|
||||
$this->extConfig = $extConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getInvalidLanguages() {
|
||||
return $this->invalidLanguages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $invalidLanguages
|
||||
*/
|
||||
public function setInvalidLanguages($invalidLanguages) {
|
||||
$this->invalidLanguages = $invalidLanguages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getAvailableEditingModes() {
|
||||
return $this->availabledEditingModes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FileBaseService
|
||||
*/
|
||||
public function getFileObj() {
|
||||
return $this->fileObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FileBasePHPService $fileObj
|
||||
*/
|
||||
public function setFileObj($fileObj) {
|
||||
$this->fileObj = $fileObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns array of system languages.
|
||||
*
|
||||
* @param BackendUserAuthentication $backendUser
|
||||
* @return array
|
||||
* @throws LFException
|
||||
*/
|
||||
public function getLangArray(BackendUserAuthentication $backendUser = NULL) {
|
||||
if ($this->invalidLanguages !== '') {
|
||||
throw new LFException('failure.config.invalidLanguage', 0, $this->invalidLanguages);
|
||||
}
|
||||
|
||||
if (empty($this->langArray)) {
|
||||
$languages = Functions::buildLangArray($this->extConfig['viewLanguages']);
|
||||
$languages = $this->narrowToUserLanguages($languages, $backendUser);
|
||||
|
||||
if (!\in_array('default', $languages, TRUE)) {
|
||||
$languages = \array_merge(['default'], $languages);
|
||||
}
|
||||
if (!\in_array($this->extConfig['defaultLanguage'], $languages, TRUE)) {
|
||||
$languages = \array_merge([$this->extConfig['defaultLanguage']], $languages);
|
||||
}
|
||||
$this->langArray = $languages;
|
||||
}
|
||||
return $this->langArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $langArray
|
||||
*/
|
||||
public function setLangArray($langArray) {
|
||||
$this->langArray = $langArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the path to the configured AdditionalConfiguration.php file
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAdditionalConfigurationFilePath() {
|
||||
return $this->extConfig['pathAdditionalConfiguration'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Narrows $languages to user languages if user is not admin.
|
||||
*
|
||||
* @param array $languages
|
||||
* @param BackendUserAuthentication $backendUser
|
||||
* @return array
|
||||
*/
|
||||
protected function narrowToUserLanguages(array $languages, BackendUserAuthentication $backendUser) {
|
||||
if ($backendUser !== NULL && !$backendUser->isAdmin()) {
|
||||
$sysLanguageService = GeneralUtility::makeInstance(SysLanguageService::class);
|
||||
foreach ($languages as $index => $languageFlag) {
|
||||
$sysLanguageId = $sysLanguageService->getSysLanguageIdByFlag($languageFlag);
|
||||
if ($languageFlag === 'default'
|
||||
|| ($sysLanguageId !== NULL && $backendUser->checkLanguageAccess($sysLanguageId))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
unset($languages[$index]);
|
||||
}
|
||||
}
|
||||
return $languages;
|
||||
}
|
||||
}
|
||||
@@ -1,478 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
|
||||
/**
|
||||
* backup class
|
||||
*/
|
||||
class FileBackupService extends FileService {
|
||||
/**
|
||||
* @var string $metaFile
|
||||
*/
|
||||
private $metaFile;
|
||||
|
||||
/**
|
||||
* @var array $metaArray
|
||||
*/
|
||||
private $metaArray = [];
|
||||
|
||||
/**
|
||||
* @var string $extName
|
||||
*/
|
||||
private $extName = '';
|
||||
|
||||
/**
|
||||
* @var string $extPath
|
||||
*/
|
||||
private $extPath = '';
|
||||
|
||||
/**
|
||||
* @var string $langFile
|
||||
*/
|
||||
private $langFile = '';
|
||||
|
||||
/**
|
||||
* extended init
|
||||
*
|
||||
* @throws LFException raised if the meta file cant be correctly read
|
||||
* @param string $file name of the file (can be a path, if you need this (no check))
|
||||
* @param string $path path to the file
|
||||
* @param string $metaFile absolute path to the meta file (includes filename)
|
||||
* @return void
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
// init
|
||||
$this->setVar(['metaFile' => $metaFile]);
|
||||
parent::init($file, $path, $metaFile);
|
||||
|
||||
// read meta file
|
||||
try {
|
||||
if (is_file($this->metaFile)) {
|
||||
$this->readMetaFile();
|
||||
}
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
#####################
|
||||
###### Set/Get ######
|
||||
#####################
|
||||
|
||||
/**
|
||||
* sets information
|
||||
*
|
||||
* structure:
|
||||
* $infos["metaFile"] = absolute path to the meta file (includes filename)
|
||||
* $infos["extPath"] = extension path
|
||||
* $infos["langFile"] = language file
|
||||
*
|
||||
* @param array $informations information (see above)
|
||||
* @return void
|
||||
*/
|
||||
public function setVar($informations) {
|
||||
if (!empty($informations['metaFile'])) {
|
||||
$this->metaFile = Typo3Lib::fixFilePath($informations['metaFile']);
|
||||
}
|
||||
|
||||
if (!empty($informations['extPath'])) {
|
||||
$this->extPath = Typo3Lib::fixFilePath($informations['extPath']);
|
||||
$this->extName = basename($informations['extPath']);
|
||||
}
|
||||
|
||||
if (!empty($informations['langFile'])) {
|
||||
$this->langFile = Typo3Lib::fixFilePath($informations['langFile']);
|
||||
}
|
||||
|
||||
parent::setVar($informations);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns requested information
|
||||
*
|
||||
* @param string $info
|
||||
* @return mixed
|
||||
*/
|
||||
public function getVar($info) {
|
||||
if ($info == 'metaFile') {
|
||||
return $this->metaFile;
|
||||
} elseif ($info == 'extName') {
|
||||
return $this->extName;
|
||||
} elseif ($info == 'extPath') {
|
||||
return $this->extPath;
|
||||
} elseif ($info == 'langFile') {
|
||||
return $this->langFile;
|
||||
} else {
|
||||
return parent::getVar($info);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns meta information about backup files
|
||||
*
|
||||
* Modes:
|
||||
* - 0 => full meta information (default)
|
||||
* - 1 => only meta information of given extension key
|
||||
* - 2 => only meta information of given extension key and workspace
|
||||
* - 3 => only meta information of given extension key, workspace and language file
|
||||
*
|
||||
* @param integer $mode
|
||||
* @param string $extName extension Name (default = $this->extName)
|
||||
* @param string $workspace (default = $this->workspace)
|
||||
* @param string $langFile language file (default = $this->langFile)
|
||||
* @return array
|
||||
*/
|
||||
public function getMetaInfos($mode = 0, $extName = '', $workspace = '', $langFile = '') {
|
||||
$extName = empty($extName) ? $this->extName : $extName;
|
||||
$langFile = empty($langFile) ? $this->langFile : $langFile;
|
||||
$workspace = empty($workspace) ? $this->workspace : $workspace;
|
||||
|
||||
// build return value
|
||||
if (!$mode) {
|
||||
return $this->metaArray;
|
||||
} elseif ($mode == 1) {
|
||||
return $this->metaArray[$extName] ?? [];
|
||||
} elseif ($mode == 2) {
|
||||
return $this->metaArray[$extName][$workspace] ?? [];
|
||||
} elseif ($mode == 3) {
|
||||
return $this->metaArray[$extName][$workspace][$langFile] ?? [];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rewrites current meta information array with the given equivalent
|
||||
*
|
||||
* Modes:
|
||||
* - 0 => full meta information (default)
|
||||
* - 1 => only meta information of given extension key
|
||||
* - 2 => only meta information of given extension key and workspace
|
||||
* - 3 => only meta information of given extension key, workspace and language file
|
||||
*
|
||||
* @param array $metaArray meta information
|
||||
* @param integer $mode
|
||||
* @param string $extName extension Name (default = $this->extName)
|
||||
* @param string $workspace (default = $this->workspace)
|
||||
* @param string $langFile language file (default = $this->langFile)
|
||||
* @return void
|
||||
*/
|
||||
private function setMetaInfos($metaArray, $mode = 0, $extName = '', $workspace = '', $langFile = '') {
|
||||
$extName = empty($extName) ? $this->extName : $extName;
|
||||
$langFile = empty($langFile) ? $this->langFile : $langFile;
|
||||
$workspace = empty($workspace) ? $this->workspace : $workspace;
|
||||
|
||||
// build new meta information array
|
||||
if (is_array($metaArray) && count($metaArray)) {
|
||||
if (!$mode) {
|
||||
$this->metaArray = $metaArray;
|
||||
} elseif ($mode == 1) {
|
||||
$this->metaArray[$extName] = $metaArray;
|
||||
} elseif ($mode == 2) {
|
||||
$this->metaArray[$extName][$workspace] = $metaArray;
|
||||
} elseif ($mode == 3) {
|
||||
$this->metaArray[$extName][$workspace][$langFile] = $metaArray;
|
||||
}
|
||||
} else {
|
||||
if (!$mode) {
|
||||
unset($this->metaArray);
|
||||
} elseif ($mode == 1) {
|
||||
unset($this->metaArray[$extName]);
|
||||
} elseif ($mode == 2) {
|
||||
unset($this->metaArray[$extName][$workspace]);
|
||||
} elseif ($mode == 3) {
|
||||
unset($this->metaArray[$extName][$workspace][$langFile]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
###############################
|
||||
###### Meta FileService Methods ######
|
||||
###############################
|
||||
|
||||
/**
|
||||
* reads the meta information file and parses the content into $this->metaArray
|
||||
*
|
||||
* @throws LFException raised if no meta content was generated
|
||||
* @return void
|
||||
*/
|
||||
private function readMetaFile() {
|
||||
// read file and parse xml to array
|
||||
$metaArray = GeneralUtility::xml2array(file_get_contents($this->metaFile));
|
||||
if (!is_array($metaArray)) {
|
||||
throw new LFException('failure.backup.metaFile.notRead');
|
||||
}
|
||||
|
||||
$this->metaArray = $metaArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* generate meta XML
|
||||
*
|
||||
* @return string meta information (xml)
|
||||
*/
|
||||
private function genMetaXML() {
|
||||
$options = [];
|
||||
// define assocTagNames
|
||||
$options['parentTagMap'] = [
|
||||
'' => 'extKey',
|
||||
'extKey' => 'workspace',
|
||||
'workspace' => 'langFile',
|
||||
'langFile' => 'file',
|
||||
];
|
||||
return GeneralUtility::array2xml($this->getMetaInfos(), '', 0, 'LFBackupMeta', 0, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* writes the meta information file
|
||||
*
|
||||
* @throws LFException raised if the meta file cant be written
|
||||
* @return void
|
||||
*/
|
||||
private function writeMetaFile() {
|
||||
$metaXML = $this->genMetaXML();
|
||||
if (empty($metaXML)) {
|
||||
throw new LFException('failure.backup.metaFile.notWritten');
|
||||
}
|
||||
|
||||
if (!GeneralUtility::writeFile($this->metaFile, $this->getXMLHeader() . $metaXML)) {
|
||||
throw new LFException('failure.backup.metaFile.notWritten');
|
||||
}
|
||||
}
|
||||
|
||||
#################################
|
||||
###### Backup FileService Methods ######
|
||||
#################################
|
||||
|
||||
/**
|
||||
* generates the xml header
|
||||
*
|
||||
* @return string xml header
|
||||
*/
|
||||
private function getXMLHeader() {
|
||||
return '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* removes the meta information entry and the backup file
|
||||
*
|
||||
* @param string $filename
|
||||
* @param string $extName (default = $this->extName)
|
||||
* @param string $langFile (default = $this->langFile)
|
||||
* @throws Exception|LFException
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
public function deleteSpecFile($filename, $extName = '', $langFile = '') {
|
||||
// get needed meta information
|
||||
$extName = empty($extName) ? $this->extName : $extName;
|
||||
$langFile = empty($langFile) ? $this->langFile : $langFile;
|
||||
$metaArray = $this->getMetaInfos(3, $extName, '', $langFile);
|
||||
|
||||
// check backup file
|
||||
if (!isset($metaArray[$filename])) {
|
||||
throw new LFException('failure.backup.notDeleted');
|
||||
}
|
||||
|
||||
// get file
|
||||
$backupPath = $metaArray[$filename]['pathBackup'];
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
$file = GeneralUtility::fixWindowsFilePath($pathSite . $backupPath . '/' . $filename);
|
||||
|
||||
// build new meta information file
|
||||
unset($metaArray[$filename]);
|
||||
if (!count($metaArray)) {
|
||||
$metaArray = NULL;
|
||||
}
|
||||
$this->setMetaInfos($metaArray, 3, $extName, '', $langFile);
|
||||
|
||||
$extMetaArray = $this->getMetaInfos(2, $extName);
|
||||
if (!count($extMetaArray)) {
|
||||
$extMetaArray = NULL;
|
||||
}
|
||||
$this->setMetaInfos($extMetaArray, 2, $extName);
|
||||
|
||||
// write meta information
|
||||
try {
|
||||
$this->writeMetaFile();
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// delete backup file
|
||||
try {
|
||||
SgLib::deleteFiles([$file]);
|
||||
} catch (Exception $e) {
|
||||
throw new LFException(
|
||||
'failure.backup.notDeleted',
|
||||
0,
|
||||
'(' . $e->getMessage() . ')',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for deleteSpecFile()
|
||||
*
|
||||
* @throws LFException raised if the backup or meta file cant be written
|
||||
* @return void
|
||||
*/
|
||||
public function deleteFile() {
|
||||
try {
|
||||
$this->deleteSpecFile($this->relFile);
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* reads a backup file
|
||||
*
|
||||
* @throws LFException raised if the backup file can't be read
|
||||
* @return void
|
||||
*/
|
||||
public function readFile() {
|
||||
if (!is_file($this->absFile)) {
|
||||
throw new LFException('failure.backup.notRead');
|
||||
}
|
||||
|
||||
// read file and transform from xml to array
|
||||
$phpArray = GeneralUtility::xml2array(file_get_contents($this->absFile));
|
||||
if (!is_array($phpArray)) {
|
||||
throw new LFException('failure.backup.notRead');
|
||||
}
|
||||
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
// read array
|
||||
$localLang = $originLang = [];
|
||||
foreach ($phpArray['data'] as $langKey => $informations) {
|
||||
// read origin
|
||||
try {
|
||||
$originLang[$langKey] = Typo3Lib::transTypo3File($informations['meta']['origin'], TRUE);
|
||||
} catch (Exception $e) {
|
||||
$originLang[$langKey] = $pathSite . $informations['meta']['origin'];
|
||||
}
|
||||
|
||||
// read data
|
||||
if (is_array($informations['langData'])) {
|
||||
foreach ($informations['langData'] as $const => $value) {
|
||||
$localLang[$langKey][$const] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check
|
||||
if (!count($localLang) || !count($originLang)) {
|
||||
throw new LFException('failure.backup.notRead');
|
||||
}
|
||||
|
||||
$this->localLang = $localLang;
|
||||
$this->originLang = $originLang;
|
||||
$this->meta = $phpArray['meta'];
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the final Content
|
||||
*
|
||||
* @return string prepared content (xml)
|
||||
*/
|
||||
private function prepareBackupContent() {
|
||||
$phpArray = [];
|
||||
$options = [];
|
||||
// set meta
|
||||
$phpArray['meta'] = $this->meta;
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
// set array
|
||||
foreach ($this->originLang as $lang => $origin) {
|
||||
// set origin
|
||||
try {
|
||||
$phpArray['data'][$lang]['meta']['origin'] = Typo3Lib::transTypo3File($origin, FALSE);
|
||||
} catch (Exception $e) {
|
||||
$phpArray['data'][$lang]['meta']['origin'] = substr($origin, strlen($pathSite));
|
||||
}
|
||||
|
||||
// set data
|
||||
if (\array_key_exists($lang, $this->localLang) && \is_array($this->localLang[$lang])) {
|
||||
foreach ($this->localLang[$lang] as $labelKey => $labelVal) {
|
||||
$phpArray['data'][$lang]['langData'][$labelKey] = $labelVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// define assocTagNames
|
||||
$options['parentTagMap'] = [
|
||||
'data' => 'languageKey',
|
||||
'langData' => 'label'
|
||||
];
|
||||
|
||||
// get xml
|
||||
return GeneralUtility::array2xml($phpArray, '', 0, 'LFBackup', 0, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the backup file and writes the new meta information
|
||||
*
|
||||
* @param array | NULL $editedLanguages
|
||||
* @return array raised if meta file cant be written
|
||||
* @throws Exception
|
||||
* @throws LFException
|
||||
* @return array
|
||||
*/
|
||||
protected function prepareFileContents($editedLanguages = NULL) {
|
||||
$backupFiles = [];
|
||||
// get content
|
||||
$xml = $this->prepareBackupContent();
|
||||
|
||||
// get and set name of backup
|
||||
$backupName = 'locallang_' . substr(md5(md5($xml)), 0, 10) . '.bak';
|
||||
$this->setVar(['relFile' => $backupName]);
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
// get new meta information
|
||||
$metaArray = $this->getMetaInfos(3);
|
||||
$metaArray[$this->relFile]['createdAt'] = time();
|
||||
$metaArray[$this->relFile]['pathBackup'] = str_replace($pathSite, '', $this->absPath);
|
||||
$this->setMetaInfos($metaArray, 3);
|
||||
|
||||
// write meta information file
|
||||
try {
|
||||
$this->writeMetaFile();
|
||||
} catch (LFException $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$backupFiles[$this->absPath . $this->relFile] = $this->getXMLHeader() . $xml;
|
||||
return $backupFiles;
|
||||
}
|
||||
}
|
||||
@@ -1,256 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
|
||||
/**
|
||||
* base workspace class (php)
|
||||
*/
|
||||
class FileBasePHPService extends FileBaseService {
|
||||
/**
|
||||
* extended init
|
||||
*
|
||||
* @param string $file name of the file (can be a path, if you need this (no check))
|
||||
* @param string $path path to the file
|
||||
*
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
$this->setVar(['fileType' => 'php']);
|
||||
parent::init($file, $path, $metaFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* reads a language file
|
||||
*
|
||||
* @throws LFException raised if the file does not contain a locallang array
|
||||
* @param string $file language file
|
||||
* @param string $langKey language shortcut (not used)
|
||||
* @return array language content
|
||||
*/
|
||||
protected function readLLFile($file, $langKey) {
|
||||
$LOCAL_LANG = NULL;
|
||||
if (!is_file($file)) {
|
||||
throw new LFException('failure.select.noLangfile');
|
||||
}
|
||||
|
||||
include($file);
|
||||
|
||||
/** @var array $LOCAL_LANG */
|
||||
if (!is_array($LOCAL_LANG) || !count($LOCAL_LANG)) {
|
||||
throw new LFException('failure.search.noFileContent', 0, '(' . $file . ')');
|
||||
}
|
||||
|
||||
/** @var array $LFMETA */
|
||||
if ($langKey == 'default') {
|
||||
$this->meta = $LFMETA;
|
||||
}
|
||||
|
||||
return $LOCAL_LANG;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks the given content, if its a localized language file reference
|
||||
*
|
||||
* @param mixed $content language content (only one language)
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (absolute) or a boolean false
|
||||
*/
|
||||
protected function getLocalizedFile($content, $langKey) {
|
||||
if ((string) $content != 'EXT') {
|
||||
return '';
|
||||
}
|
||||
|
||||
return Typo3Lib::fixFilePath(
|
||||
dirname($this->absFile) .
|
||||
'/' . $this->nameLocalizedFile($langKey)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks a filename, if its a localized file
|
||||
*
|
||||
* @param string $filename filename
|
||||
* @param string $langKey language shortcut
|
||||
* @return boolean true(localized) or false
|
||||
*/
|
||||
public function checkLocalizedFile($filename, $langKey) {
|
||||
if (!preg_match('/^.*\.(' . $langKey . ')\.php$/', $filename)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the name of a localized file
|
||||
*
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (only filename)
|
||||
*/
|
||||
public function nameLocalizedFile($langKey) {
|
||||
return SgLib::setFileExtension($langKey . '.php', basename($this->relFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the meta data for writing into a file
|
||||
*
|
||||
* @return string meta data for writing purposes
|
||||
*/
|
||||
private function prepareMeta() {
|
||||
if (!is_array($this->meta) || !count($this->meta)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$metaData = '';
|
||||
foreach ($this->meta as $metaIndex => $value) {
|
||||
$value = preg_replace('/[^\\\]\'/', '\\\'', $value);
|
||||
$metaData .= "\t" . '\'' . $metaIndex . '\' => \'' . $value . '\',' . "\n";
|
||||
}
|
||||
|
||||
return $metaData;
|
||||
}
|
||||
|
||||
/**
|
||||
* generates the header data of a language file
|
||||
*
|
||||
* @return string header data
|
||||
*/
|
||||
private function getHeader() {
|
||||
$extKey = basename($this->absPath);
|
||||
|
||||
$header = '<?php' . "\n";
|
||||
$header .= "/**\n * local language labels of module \"$extKey\"\n";
|
||||
$header .= " *\n * This file is detected by the translation tool\n";
|
||||
$header .= " *\n * Modified/Created by extension 'lfeditor'\n */\n\n";
|
||||
|
||||
return $header;
|
||||
}
|
||||
|
||||
/**
|
||||
* generates the footer data of a language file
|
||||
*
|
||||
* @return string footer data
|
||||
*/
|
||||
private function getFooter() {
|
||||
return '?>' . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the content of a language file
|
||||
*
|
||||
* @param array $localLang content of the given language
|
||||
* @param string $lang language shortcut
|
||||
* @return string language part of the main file
|
||||
*/
|
||||
private function getLangContent($localLang, $lang) {
|
||||
$content = "\t'$lang' => array (\n";
|
||||
if (is_array($localLang) && count($localLang)) {
|
||||
ksort($localLang);
|
||||
foreach ($localLang as $const => $value) {
|
||||
$value = preg_replace("/([^\\\])'/", "$1\'", $value);
|
||||
$value = str_replace("\r", '', $value);
|
||||
$content .= "\t\t'$const' => '$value',\n";
|
||||
}
|
||||
}
|
||||
$content .= "\t),\n";
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the content of a localized language file
|
||||
*
|
||||
* @param array $localLang content of the given language
|
||||
* @param string $lang language shortcut
|
||||
* @return string language content
|
||||
*/
|
||||
private function getLangContentLoc($localLang, $lang) {
|
||||
$content = '$LOCAL_LANG[\'' . $lang . '\'] = array (' . "\n";
|
||||
if (is_array($localLang) && count($localLang)) {
|
||||
ksort($localLang);
|
||||
foreach ($localLang as $const => $value) {
|
||||
$value = preg_replace("/([^\\\])'/", "$1\'", $value);
|
||||
$value = str_replace("\r", '', $value);
|
||||
$content .= "\t'$const' => '$value',\n";
|
||||
}
|
||||
}
|
||||
$content .= ");\n";
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the final content
|
||||
*
|
||||
* @param array | NULL $editedLanguages
|
||||
* @return array language files as key and content as value
|
||||
*/
|
||||
protected function prepareFileContents($editedLanguages = NULL) {
|
||||
// prepare Content
|
||||
$mainFileContent = '';
|
||||
$languages = SgLib::getSystemLanguages();
|
||||
$languageFiles = [];
|
||||
foreach ($languages as $lang) {
|
||||
// get content of localized and main file
|
||||
if ($this->checkLocalizedFile(basename($this->originLang[$lang]), $lang)) {
|
||||
if (is_array($this->localLang[$lang]) && count($this->localLang[$lang])) {
|
||||
$languageFiles[$this->originLang[$lang]] = $this->getHeader();
|
||||
$languageFiles[$this->originLang[$lang]] .=
|
||||
$this->getLangContentLoc($this->localLang[$lang], $lang);
|
||||
$languageFiles[$this->originLang[$lang]] .= $this->getFooter();
|
||||
$mainFileContent .= "\t'$lang' => 'EXT',\n";
|
||||
} else {
|
||||
$mainFileContent .= "\t'$lang' => '',\n";
|
||||
}
|
||||
} else {
|
||||
$mainFileContent .= $this->getLangContent($this->localLang[$lang], $lang);
|
||||
}
|
||||
}
|
||||
|
||||
// only a localized file?
|
||||
if ($this->checkLocalizedFile(basename($this->absFile), implode('|', SgLib::getSystemLanguages()))) {
|
||||
return $languageFiles;
|
||||
}
|
||||
|
||||
// prepare Content for the main file
|
||||
$languageFiles[$this->absFile] = $this->getHeader();
|
||||
$languageFiles[$this->absFile] .= '$LFMETA = array (' . "\n";
|
||||
$languageFiles[$this->absFile] .= $this->prepareMeta();
|
||||
$languageFiles[$this->absFile] .= ');' . "\n\n";
|
||||
$languageFiles[$this->absFile] .= '$LOCAL_LANG = array (' . "\n";
|
||||
$languageFiles[$this->absFile] .= $mainFileContent;
|
||||
$languageFiles[$this->absFile] .= ');' . "\n";
|
||||
$languageFiles[$this->absFile] .= $this->getFooter();
|
||||
|
||||
return $languageFiles;
|
||||
}
|
||||
}
|
||||
@@ -1,186 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Localization\Locales;
|
||||
use TYPO3\CMS\Core\Utility\ArrayUtility;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Core\Utility\PathUtility;
|
||||
|
||||
/**
|
||||
* base workspace class
|
||||
*/
|
||||
abstract class FileBaseService extends FileService {
|
||||
/**
|
||||
* @param string $content
|
||||
* @param string $lang
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function getLocalizedFile($content, $lang);
|
||||
|
||||
/**
|
||||
* @param string $filename
|
||||
* @param string $langKey
|
||||
* @return mixed
|
||||
*/
|
||||
abstract public function checkLocalizedFile($filename, $langKey);
|
||||
|
||||
/**
|
||||
* @param string $langKey
|
||||
* @return mixed
|
||||
*/
|
||||
abstract public function nameLocalizedFile($langKey);
|
||||
|
||||
/**
|
||||
* @param string $file
|
||||
* @param string $langKey
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function readLLFile($file, $langKey);
|
||||
|
||||
/**
|
||||
* extended init
|
||||
*
|
||||
* @param string $file name of the file (can be a path, if you need this (no check))
|
||||
* @param string $path path to the file
|
||||
* @param string $metaFile
|
||||
*
|
||||
* @return void
|
||||
* @throws \InvalidArgumentException
|
||||
* @throws LFException
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
$locales = GeneralUtility::makeInstance(Locales::class);
|
||||
$availableLanguages = implode('|', $locales->getLocales());
|
||||
|
||||
// localization files should not be edited
|
||||
if ($this->checkLocalizedFile(basename($file), $availableLanguages)) {
|
||||
throw new LFException('failure.langfile.notSupported');
|
||||
}
|
||||
|
||||
$this->setWorkspace('base');
|
||||
parent::init($file, $path, $metaFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* reads the absolute language file with all localized sub files
|
||||
*
|
||||
* @throws \Exception
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
public function readFile() {
|
||||
// read absolute file
|
||||
$localLang = $this->readLLFile($this->absFile, 'default');
|
||||
// loop all languages
|
||||
$languages = SgLib::getSystemLanguages();
|
||||
$originLang = [];
|
||||
foreach ($languages as $lang) {
|
||||
$originLang[$lang] = $this->absFile;
|
||||
if (!\array_key_exists($lang, $localLang)) {
|
||||
continue;
|
||||
}
|
||||
if ($lang === 'default' || (\is_array($localLang[$lang]) && \count($localLang[$lang]))) {
|
||||
if (\is_array($localLang[$lang]) && \count($localLang[$lang])) {
|
||||
\ksort($localLang[$lang]);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// get localized file
|
||||
$lFile = $this->getLocalizedFile($localLang[$lang], $lang);
|
||||
if ($lFile && $this->checkLocalizedFile(basename($lFile), $lang)) {
|
||||
$originLang[$lang] = $lFile;
|
||||
$localLang[$lang] = [];
|
||||
|
||||
if (!is_file($lFile)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// read the content
|
||||
try {
|
||||
$llang = $this->readLLFile($lFile, $lang);
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// merge arrays and save origin of current language
|
||||
ArrayUtility::mergeRecursiveWithOverrule($localLang, $llang);
|
||||
}
|
||||
}
|
||||
|
||||
// check
|
||||
if (!\is_array($localLang)) {
|
||||
throw new LFException('failure.search.noFileContent');
|
||||
}
|
||||
|
||||
// copy all to object variables, if everything was ok
|
||||
$this->localLang = $localLang;
|
||||
$this->originLang = $originLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a localized file is found in labels pack (e.g. a language pack was downloaded in the backend)
|
||||
* or if $sameLocation is set, then checks for a file located in "{language}.locallang.xlf" at the same directory
|
||||
*
|
||||
* @param string $fileRef Absolute file reference to locallang file
|
||||
* @param string $language Language key
|
||||
* @param bool $sameLocation If TRUE, then locallang localization file name will be returned with same directory as $fileRef
|
||||
* @return string|null Absolute path to the language file, or null if error occurred
|
||||
*/
|
||||
protected function getLocalizedFileName($fileRef, $language, $sameLocation = FALSE) {
|
||||
// If $fileRef is already prefixed with "[language key]" then we should return it as is
|
||||
$fileName = PathUtility::basename($fileRef);
|
||||
if (GeneralUtility::isFirstPartOfStr($fileName, $language . '.')) {
|
||||
return GeneralUtility::getFileAbsFileName($fileRef);
|
||||
}
|
||||
|
||||
if ($sameLocation) {
|
||||
return GeneralUtility::getFileAbsFileName(str_replace($fileName, $language . '.' . $fileName, $fileRef));
|
||||
}
|
||||
|
||||
// Analyze file reference
|
||||
$validatedPrefix = Typo3Lib::getLocalizedFilePrefix($fileRef);
|
||||
if ($validatedPrefix) {
|
||||
// Divide file reference into extension key, directory (if any) and base name:
|
||||
[$extensionKey, $file_extPath] = explode('/', substr($fileRef, strlen($validatedPrefix)), 2);
|
||||
$temp = GeneralUtility::revExplode('/', $file_extPath, 2);
|
||||
if (count($temp) === 1) {
|
||||
array_unshift($temp, '');
|
||||
}
|
||||
// Add empty first-entry if not there.
|
||||
[$file_extPath, $file_fileName] = $temp;
|
||||
|
||||
// The filename is prefixed with "[language key]." because it prevents the llxmltranslate tool from detecting it.
|
||||
return Typo3Lib::getLabelsPath() . $language . '/' . $extensionKey . '/' . ($file_extPath ? $file_extPath . '/' : '') . $language . '.' . $file_fileName;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -1,429 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\ExtensionUtility;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Utility\ArrayUtility;
|
||||
|
||||
/**
|
||||
* base workspace class (xlf)
|
||||
*/
|
||||
class FileBaseXLFService extends FileBaseService {
|
||||
/**
|
||||
* extended init
|
||||
*
|
||||
* @param string $file name of the file (can be a path, if you need this (no check))
|
||||
* @param string $path path to the file
|
||||
* @param string $metaFile
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
$this->setFileType('xlf');
|
||||
parent::init($file, $path, $metaFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* calls the parent function and convert all values from utf-8 to the original charset
|
||||
*
|
||||
* @return void
|
||||
* @throws LFException raised if the parent read file method fails
|
||||
*/
|
||||
public function readFile() {
|
||||
$this->readXlfFile();
|
||||
|
||||
foreach ($this->localLang['default'] as $constant => $value) {
|
||||
if (empty($value)) {
|
||||
$this->localLang['default'][$constant] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* reads a language file
|
||||
*
|
||||
* @param string $file language file
|
||||
* @param string $langKey language shortcut
|
||||
* @return array language content
|
||||
* @throws LFException thrown if no data can be found
|
||||
*/
|
||||
protected function readLLFile($file, $langKey) {
|
||||
if (!\is_file($file)) {
|
||||
throw new LFException('failure.select.noLangfile');
|
||||
}
|
||||
|
||||
// LIBXML_NOCDATA treat CDATA node as text node.
|
||||
// htmlentities in CDATA are not modified,
|
||||
// and those - normaly encoded if XML is valid - outside CDATA will be decoded.
|
||||
|
||||
$xmlContent = \simplexml_load_string(\file_get_contents($file), \SimpleXMLElement::class, LIBXML_NOCDATA);
|
||||
|
||||
// Cast XML to associative array with json_decode/encode.
|
||||
// This way, value is XML are casted to string.
|
||||
$xmlContent = \json_decode(\json_encode($xmlContent), TRUE);
|
||||
|
||||
// check data
|
||||
if (!\is_array($xmlContent['file']['body'])) {
|
||||
throw new LFException('failure.search.noFileContent', 0, '(' . $file . ')');
|
||||
}
|
||||
|
||||
if ($langKey === 'default') {
|
||||
$this->meta = $xmlContent['file']['header'] ?? [];
|
||||
}
|
||||
$this->meta['@attributes'] = $xmlContent['file']['@attributes'];
|
||||
|
||||
return $xmlContent['file']['body'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the trans-unit parts of the xlf language files into flat
|
||||
* source arrays with the target language or the source if the target is en
|
||||
*
|
||||
* @param array $sourceData
|
||||
* @return array
|
||||
*/
|
||||
public function resolveTranslationUnitsArrayIntoFlatArray(array $sourceData) {
|
||||
$flatData = [];
|
||||
|
||||
if (isset($sourceData['trans-unit']['@attributes'])) {
|
||||
$sourceData['trans-unit'] = [$sourceData['trans-unit']];
|
||||
}
|
||||
if (!array_key_exists('trans-unit', $sourceData)) {
|
||||
return $flatData;
|
||||
}
|
||||
|
||||
foreach ((array) $sourceData['trans-unit'] as $data) {
|
||||
if (isset($data['@attributes']['id'])) {
|
||||
$constant = $data['@attributes']['id'];
|
||||
if (array_key_exists('target', $data)) {
|
||||
$flatData[$constant] = $data['target'];
|
||||
} else {
|
||||
$flatData[$constant] = $data['source'];
|
||||
}
|
||||
|
||||
if (empty($flatData[$constant])) {
|
||||
$flatData[$constant] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $flatData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the absolute language file with all localized sub files
|
||||
*
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
public function readXlfFile() {
|
||||
$localLang = [];
|
||||
// read absolute file
|
||||
$localLang['default'] = $this->readLLFile($this->absFile, 'default');
|
||||
$localLang['default'] = $this->resolveTranslationUnitsArrayIntoFlatArray($localLang['default']);
|
||||
|
||||
// loop all languages
|
||||
$originLang = [];
|
||||
$languages = SgLib::getSystemLanguages();
|
||||
foreach ($languages as $lang) {
|
||||
$originLang[$lang] = $this->absFile;
|
||||
if ($lang === 'default') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// get localized file
|
||||
$content = array_key_exists($lang, $localLang) ? $localLang[$lang] : '';
|
||||
$lFile = $this->getLocalizedFile($content, $lang);
|
||||
if ($this->checkLocalizedFile(\basename($lFile), $lang)) {
|
||||
$originLang[$lang] = $lFile;
|
||||
$localLang[$lang] = [];
|
||||
|
||||
if (!\is_file($lFile)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// read the content
|
||||
$localSubLanguage = $this->readLLFile($lFile, $lang);
|
||||
$localLang[$lang] = $this->resolveTranslationUnitsArrayIntoFlatArray($localSubLanguage);
|
||||
|
||||
// merge arrays and save origin of current language
|
||||
ArrayUtility::mergeRecursiveWithOverrule($localLang, $localSubLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
// copy all to object variables, if everything was ok
|
||||
$this->localLang = $localLang;
|
||||
$this->originLang = $originLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks the localLang array to find localized version of the language
|
||||
* (checks l10n directory too)
|
||||
*
|
||||
* @param string $content language content (only one language)
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (absolute)
|
||||
*/
|
||||
protected function getLocalizedFile($content, $langKey) {
|
||||
$file = '';
|
||||
if ($this->session->getDataByKey('editingMode') !== 'extension') {
|
||||
$file = $this->getLocalizedFileName($this->absFile, $langKey);
|
||||
}
|
||||
if (!\is_file($file)) {
|
||||
$file = \dirname($this->absFile) . '/' . $this->nameLocalizedFile($langKey);
|
||||
}
|
||||
return Typo3Lib::fixFilePath($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks a filename if its a localized file reference
|
||||
*
|
||||
* @param string $filename
|
||||
* @param string $langKey language shortcut
|
||||
* @return boolean true(localized) or false
|
||||
*/
|
||||
public function checkLocalizedFile($filename, $langKey) {
|
||||
if (!\preg_match('/^(' . $langKey . ')\..*\.xlf$/', $filename)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the name of a localized file
|
||||
*
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (only filename)
|
||||
*/
|
||||
public function nameLocalizedFile($langKey) {
|
||||
return $langKey . '.' . \basename($this->relFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* generates the xml header
|
||||
*
|
||||
* @return string xml header
|
||||
*/
|
||||
private function getXMLHeader() {
|
||||
return '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* converts the array to a xml string
|
||||
*
|
||||
* @param array $phpArray
|
||||
* @param string $targetLanguage
|
||||
* @param array $enLanguage
|
||||
* @return string xml content
|
||||
*/
|
||||
private function array2xml($phpArray, $targetLanguage, $enLanguage) {
|
||||
$targetLanguage = \htmlspecialchars($targetLanguage);
|
||||
$targetLanguageAttribute = ($targetLanguage !== 'default' ? ' target-language="' . $targetLanguage . '"' : '');
|
||||
|
||||
$lfeditorExtConf = ExtensionUtility::getExtensionConfiguration();
|
||||
$date = ($lfeditorExtConf['changeXlfDate'] ? \gmdate('Y-m-d\TH:i:s\Z') : $this->meta['@attributes']['date']);
|
||||
|
||||
$xmlString = $this->getXMLHeader() . '<xliff version="1.0">
|
||||
<file source-language="en"' . $targetLanguageAttribute . ' datatype="plaintext" original="messages" date="' . $date . '">
|
||||
###HEADER###
|
||||
###BODY###
|
||||
</file>
|
||||
</xliff>';
|
||||
|
||||
$header = '<header/>';
|
||||
if (\is_array($phpArray['header']) && \count($phpArray['header'])) {
|
||||
$header = '<header>' . "\n";
|
||||
foreach ($phpArray['header'] as $tagName => $tagValue) {
|
||||
$tagName = \htmlspecialchars($tagName);
|
||||
$header .= "\t\t\t" . '<' . $tagName . '>' . \htmlspecialchars(implode(' ', $tagValue)) .
|
||||
'</' . $tagName . '>' . "\n";
|
||||
}
|
||||
$header .= "\t\t" . '</header>';
|
||||
}
|
||||
$xmlString = \str_replace('###HEADER###', $header, $xmlString);
|
||||
|
||||
$body = '<body/>';
|
||||
if (\is_array($phpArray['data']) && \count($phpArray['data'])) {
|
||||
$body = '<body>' . "\n";
|
||||
$startCDATA = "<![CDATA[";
|
||||
$endCDATA = "]]>";
|
||||
$approved = ($targetLanguage !== 'default' ? ' approved="yes"' : '');
|
||||
foreach ($phpArray['data'] as $constant => $value) {
|
||||
if (!array_key_exists($constant, $enLanguage)) {
|
||||
continue;
|
||||
}
|
||||
$enValue = $enLanguage[$constant];
|
||||
|
||||
// CDATA markers are stripped when reading the XML file from the disk,
|
||||
// and html entities are not decoded.
|
||||
// So, for simplicity and safety, when writing back the data to the file,
|
||||
// we will always enclose value in CDATA, so html entities are preserved
|
||||
// and XML remains valid.
|
||||
$value = $startCDATA . $value . $endCDATA;
|
||||
$enValue = $startCDATA . $enValue . $endCDATA;
|
||||
|
||||
$body .= "\t\t\t" . '<trans-unit id="' . \htmlspecialchars(
|
||||
$constant
|
||||
) . '"' . $approved . $this->addPreserveSpaceAttribute(
|
||||
$value,
|
||||
$enValue,
|
||||
$targetLanguage
|
||||
) . '>' . "\n";
|
||||
|
||||
if ($targetLanguage !== 'default') {
|
||||
$body .= "\t\t\t\t" . '<source>' . $enValue . '</source>' . "\n";
|
||||
$body .= "\t\t\t\t" . '<target>' . $value . '</target>' . "\n";
|
||||
} else {
|
||||
$body .= "\t\t\t\t" . '<source>' . $value . '</source>' . "\n";
|
||||
}
|
||||
$body .= "\t\t\t" . '</trans-unit>' . "\n";
|
||||
}
|
||||
$body .= "\t\t" . '</body>';
|
||||
}
|
||||
$xmlString = \str_replace('###BODY###', $body, $xmlString);
|
||||
|
||||
return $xmlString;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the content of a language file
|
||||
*
|
||||
* @param array $localLang
|
||||
* @return array new xml array
|
||||
*/
|
||||
private function getLangContent($localLang) {
|
||||
$content = [];
|
||||
if (!\is_array($localLang) || !\count($localLang)) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
\ksort($localLang);
|
||||
foreach ($localLang as $const => $value) {
|
||||
$content[$const] = \str_replace("\r", '', $value);
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the meta array for nicer saving
|
||||
*
|
||||
* @return array meta content
|
||||
*/
|
||||
private function prepareMeta() {
|
||||
if (\is_array($this->meta) && \count($this->meta)) {
|
||||
foreach ($this->meta as $label => $value) {
|
||||
$this->meta[$label] = \str_replace("\r", '', $value);
|
||||
}
|
||||
}
|
||||
$this->addGeneratorString();
|
||||
|
||||
$metadata = $this->meta;
|
||||
unset($metadata['@attributes']);
|
||||
|
||||
return $metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the final content
|
||||
*
|
||||
* @param array | NULL $editedLanguages
|
||||
* @return array language files as key and content as value
|
||||
*/
|
||||
protected function prepareFileContents($editedLanguages = NULL) {
|
||||
// prepare Content
|
||||
$metaData = $this->prepareMeta();
|
||||
$languages = SgLib::getSystemLanguages();
|
||||
$languageFiles = [];
|
||||
$enLanguage = $this->getLangContent($this->localLang['default']);
|
||||
foreach ($languages as $lang) {
|
||||
if ($lang === 'default') {
|
||||
continue;
|
||||
}
|
||||
// If default language content and $lang language content are not edited, skip this file.
|
||||
if ($editedLanguages !== NULL &&
|
||||
!\in_array('default', $editedLanguages, TRUE) && !\in_array($lang, $editedLanguages, TRUE)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (\array_key_exists($lang, $this->localLang) && \is_array($this->localLang[$lang]) && \count(
|
||||
$this->localLang[$lang]
|
||||
)) {
|
||||
$file = $this->originLang[$lang];
|
||||
$data = [
|
||||
'header' => $metaData,
|
||||
'data' => $this->getLangContent($this->localLang[$lang]),
|
||||
];
|
||||
if (array_key_exists($file, $languageFiles)) {
|
||||
$languageFiles[$file] .= $this->array2xml($data, $lang, $enLanguage);
|
||||
} else {
|
||||
$languageFiles[$file] = $this->array2xml($data, $lang, $enLanguage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// only a localized file?
|
||||
if ($this->checkLocalizedFile(\basename($this->absFile), \implode('|', SgLib::getSystemLanguages()))) {
|
||||
return $languageFiles;
|
||||
}
|
||||
if ($editedLanguages !== NULL && !\in_array('default', $editedLanguages, TRUE)) {
|
||||
return $languageFiles;
|
||||
}
|
||||
|
||||
// prepare content for the main file
|
||||
$data = [
|
||||
'header' => $metaData,
|
||||
'data' => $enLanguage,
|
||||
];
|
||||
$languageFiles[$this->absFile] = $this->array2xml($data, 'default', $enLanguage);
|
||||
|
||||
return $languageFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* If constant's source (en) or target value contains multiple spaces or LF character,
|
||||
* returns string ' xml:space="preserve"'.
|
||||
*
|
||||
* @param string $value
|
||||
* @param string $enValue
|
||||
* @param string $targetLanguage
|
||||
* @return string
|
||||
*/
|
||||
protected function addPreserveSpaceAttribute($value, $enValue, $targetLanguage) {
|
||||
$valueContainsSpacesOrLF = \strpos($value, ' ') !== FALSE || \strpos($value, "\n") !== FALSE;
|
||||
$enValueContainsSpacesOrLF = FALSE;
|
||||
if ($targetLanguage !== 'default') {
|
||||
$enValueContainsSpacesOrLF = \strpos($enValue, ' ') !== FALSE || \strpos($enValue, "\n") !== FALSE;
|
||||
}
|
||||
return ($valueContainsSpacesOrLF || $enValueContainsSpacesOrLF ? ' xml:space="preserve"' : '');
|
||||
}
|
||||
}
|
||||
@@ -1,358 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use DOMDocument;
|
||||
use Exception;
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\CdataSupportingSimpleXMLElement;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* base workspace class (xml)
|
||||
*/
|
||||
class FileBaseXMLService extends FileBaseService {
|
||||
/**
|
||||
* extended init
|
||||
*
|
||||
* @param string $file name of the file (can be a path, if you need this (no check))
|
||||
* @param string $path path to the file
|
||||
*
|
||||
* @param string $metaFile
|
||||
* @return void
|
||||
* @throws LFException
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
$this->setVar(['fileType' => 'xml']);
|
||||
parent::init($file, $path, $metaFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* reads a language file
|
||||
*
|
||||
* @throws LFException raised if the file does not contain a valid llxml or xml is not valid
|
||||
* @param string $file language file
|
||||
* @param string $langKey language shortcut
|
||||
* @return array language content
|
||||
*/
|
||||
protected function readLLFile($file, $langKey) {
|
||||
if (!\is_file($file)) {
|
||||
throw new LFException('failure.select.noLangfile');
|
||||
}
|
||||
|
||||
// read xml into array
|
||||
$xmlContent = GeneralUtility::xml2array(\file_get_contents($file));
|
||||
|
||||
// check data
|
||||
if (!\is_array($xmlContent['data'])) {
|
||||
throw new LFException('failure.search.noFileContent', 0, '(' . $file . ')');
|
||||
}
|
||||
|
||||
// set header data
|
||||
if ($langKey === 'default') {
|
||||
$this->meta = $xmlContent['meta'];
|
||||
}
|
||||
|
||||
return $xmlContent['data'];
|
||||
}
|
||||
|
||||
/**
|
||||
* checks the localLang array to find localized version of the language
|
||||
* (checks l10n directory too)
|
||||
*
|
||||
* @param string $content language content (only one language)
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (absolute)
|
||||
*/
|
||||
protected function getLocalizedFile($content, $langKey) {
|
||||
if ($this->session->getDataByKey('editingMode') === 'l10n') {
|
||||
$file = $this->getLocalizedFileName($this->absFile, $langKey);
|
||||
if (\is_file($file)) {
|
||||
return Typo3Lib::fixFilePath($file);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$file = Typo3Lib::transTypo3File($content, TRUE);
|
||||
} catch (Exception $e) {
|
||||
if (!$file = $this->getLocalizedFileName($this->absFile, $langKey, TRUE)) {
|
||||
return $content;
|
||||
}
|
||||
if (!\is_file($file)) {
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
||||
return Typo3Lib::fixFilePath($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks a filename if its a localized file reference
|
||||
*
|
||||
* @param string $filename filename
|
||||
* @param string $langKey language shortcut
|
||||
* @return boolean true(localized) or false
|
||||
*/
|
||||
public function checkLocalizedFile($filename, $langKey) {
|
||||
if (!\preg_match('/^(' . $langKey . ')\..*\.xml$/', $filename)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the name of a localized file
|
||||
*
|
||||
* @param string $langKey language shortcut
|
||||
* @return string localized file (only filename)
|
||||
*/
|
||||
public function nameLocalizedFile($langKey) {
|
||||
return $langKey . '.' . \basename($this->relFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* generates the xml header
|
||||
*
|
||||
* @return string xml header
|
||||
*/
|
||||
private function getXMLHeader() {
|
||||
return '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts php array to xml string with support for CDATA tags.
|
||||
*
|
||||
* @param array $phpArray
|
||||
* @param CdataSupportingSimpleXMLElement $xmlElement
|
||||
* @param array $parentTagMap
|
||||
* @param string $parentTagName
|
||||
* @return void
|
||||
*/
|
||||
protected function arrayToXml(
|
||||
array $phpArray,
|
||||
CdataSupportingSimpleXMLElement $xmlElement,
|
||||
array $parentTagMap = [],
|
||||
$parentTagName = NULL
|
||||
) {
|
||||
foreach ($phpArray as $key => $value) {
|
||||
if (\strcasecmp($key, '@attributes') === 0) {
|
||||
continue;
|
||||
}
|
||||
$tagName = $key;
|
||||
$indexAttributeValue = NULL;
|
||||
if (\count($parentTagMap) !== 0 && !empty($parentTagMap[$parentTagName])) {
|
||||
$tagName = $parentTagMap[$parentTagName];
|
||||
$indexAttributeValue = $key;
|
||||
}
|
||||
// If element is array, check that it is not 'label' tag, just in case
|
||||
if (\is_array($value) && $tagName !== 'label') {
|
||||
if (\is_numeric($tagName)) {
|
||||
$tagName = 'item' . $tagName;
|
||||
}
|
||||
$subNode = $xmlElement->addChild($tagName);
|
||||
if ($indexAttributeValue !== NULL) {
|
||||
$subNode->addAttribute('index', $indexAttributeValue);
|
||||
}
|
||||
$subNode->addAttribute('type', 'array');
|
||||
$this->arrayToXml($value, $subNode, $parentTagMap, $tagName);
|
||||
} else {
|
||||
// CDATA markers are stripped when reading the XML file from the disk,
|
||||
// and html entities are not decoded.
|
||||
// So, for simplicity and safety, when writing back the data to the file,
|
||||
// we will always enclose value in CDATA, so html entities are preserved
|
||||
// and XML remains valid.
|
||||
$simpleSubNode = $xmlElement->addChildCData($tagName, $value);
|
||||
if ($indexAttributeValue !== NULL) {
|
||||
$simpleSubNode->addAttribute('index', $indexAttributeValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts php array to formatted xml string with support for CDATA tags.
|
||||
*
|
||||
* @param array $phpArray php structure with data
|
||||
* @param string $firstTag name of first tag
|
||||
* @return string xml content
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function array2xml(array $phpArray, $firstTag) {
|
||||
if (\count($phpArray) === 0) {
|
||||
return '';
|
||||
}
|
||||
|
||||
/** @var CdataSupportingSimpleXMLElement $xmlElement */
|
||||
$xmlElement = new CdataSupportingSimpleXMLElement(
|
||||
$this->getXMLHeader() . '<' . $firstTag . '></' . $firstTag . '>'
|
||||
);
|
||||
$xmlElement->addAttribute('type', 'array');
|
||||
|
||||
$parentTagMap = [
|
||||
'data' => 'languageKey',
|
||||
'languageKey' => 'label',
|
||||
];
|
||||
|
||||
$this->arrayToXml($phpArray, $xmlElement, $parentTagMap);
|
||||
$formattedXml = $this->formatXml($xmlElement);
|
||||
|
||||
return $formattedXml;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the content of a language file
|
||||
*
|
||||
* @param array $localLang content of the given language
|
||||
* @param string $lang shortcut
|
||||
* @return array new xml array
|
||||
*/
|
||||
private function getLangContent($localLang, $lang) {
|
||||
$content = [];
|
||||
$content['data'][$lang] = '';
|
||||
if (!\is_array($localLang) || !\count($localLang)) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
\ksort($localLang);
|
||||
foreach ($localLang as $const => $value) {
|
||||
if ($content['data'][$lang] === '') {
|
||||
$content['data'][$lang] = [];
|
||||
}
|
||||
|
||||
$content['data'][$lang][$const] = \str_replace("\r", '', $value);
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the meta array for nicer saving
|
||||
*
|
||||
* @return array meta content
|
||||
*/
|
||||
private function prepareMeta() {
|
||||
if (\is_array($this->meta) && \count($this->meta)) {
|
||||
foreach ($this->meta as $label => $value) {
|
||||
$this->meta[$label] = \str_replace("\r", '', $value);
|
||||
}
|
||||
}
|
||||
$this->addGeneratorString();
|
||||
|
||||
return $this->meta;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares the final content
|
||||
*
|
||||
* @param array | NULL $editedLanguages
|
||||
* @return array language files as key and content as value
|
||||
*/
|
||||
protected function prepareFileContents($editedLanguages = NULL) {
|
||||
$mergedFile = TRUE;
|
||||
|
||||
// prepare Content
|
||||
$mainFileContent = ['meta' => $this->prepareMeta()];
|
||||
$languages = SgLib::getSystemLanguages();
|
||||
$languageFiles = [];
|
||||
foreach ($languages as $lang) {
|
||||
// get content of localized and main file
|
||||
if (array_key_exists($lang, $this->originLang) && $this->checkLocalizedFile(\basename($this->originLang[$lang]), $lang)) {
|
||||
$mergedFile = FALSE;
|
||||
if (\is_array($this->localLang[$lang]) && \count($this->localLang[$lang])
|
||||
// check if this language content was edited
|
||||
&& (NULL === $editedLanguages || \in_array($lang, $editedLanguages, TRUE))
|
||||
) {
|
||||
$languageFiles[$this->originLang[$lang]] .=
|
||||
$this->array2xml(
|
||||
$this->getLangContent($this->localLang[$lang], $lang),
|
||||
'T3locallangExt'
|
||||
);
|
||||
|
||||
try {
|
||||
$mainFileContent['data'][$lang] =
|
||||
Typo3Lib::transTypo3File($this->originLang[$lang], FALSE);
|
||||
} catch (Exception $e) {
|
||||
if (!Typo3Lib::checkFileLocation($this->originLang[$lang]) == 'l10n') {
|
||||
$mainFileContent['data'][$lang] = $this->originLang[$lang];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$mainFileContent['data'][$lang] = '';
|
||||
}
|
||||
} elseif (array_key_exists($lang, $this->localLang)) {
|
||||
$mainFileContent = \array_merge_recursive(
|
||||
$mainFileContent,
|
||||
$this->getLangContent($this->localLang[$lang], $lang)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// only a localized file?
|
||||
if ($this->checkLocalizedFile(\basename($this->absFile), \implode('|', SgLib::getSystemLanguages()))) {
|
||||
return $languageFiles;
|
||||
}
|
||||
if (!$mergedFile && $editedLanguages !== NULL && !\in_array('default', $editedLanguages, TRUE)) {
|
||||
return $languageFiles;
|
||||
}
|
||||
|
||||
// prepare Content for the main file
|
||||
$languageFiles[$this->absFile] = $this->array2xml($mainFileContent, 'T3locallang');
|
||||
|
||||
return $languageFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats xml and returns as a string.
|
||||
*
|
||||
* @param \SimpleXMLElement $xmlElement
|
||||
* @return string
|
||||
*/
|
||||
private function formatXml(\SimpleXMLElement $xmlElement) {
|
||||
$dom = new DOMDocument('1.0');
|
||||
$dom->preserveWhiteSpace = FALSE;
|
||||
$dom->formatOutput = TRUE;
|
||||
|
||||
$xmlRaw = $xmlElement->asXML();
|
||||
|
||||
//Search CDATA tags to decode the content inside
|
||||
//Because $xmlElement->asXML() encode html entities
|
||||
$xmlRaw = preg_replace_callback(
|
||||
"#(<\!\[CDATA\[.*\]\]>)#sU",
|
||||
function ($matches) {
|
||||
return htmlspecialchars_decode($matches[1]);
|
||||
},
|
||||
$xmlRaw
|
||||
);
|
||||
$dom->loadXML($xmlRaw);
|
||||
|
||||
$formattedXml = $dom->saveXML();
|
||||
return $formattedXml;
|
||||
}
|
||||
}
|
||||
@@ -1,360 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* FileOverrideService
|
||||
*/
|
||||
class FileOverrideService extends FileBaseXLFService {
|
||||
/**
|
||||
* Object which represents original (overridden) language file.
|
||||
*
|
||||
* @var \SGalinski\Lfeditor\Service\FileService
|
||||
*/
|
||||
protected $originalFileObject;
|
||||
|
||||
/**
|
||||
* Initialises fileObject of override language file.
|
||||
*
|
||||
* @param FileService $originalFileObject
|
||||
* @return void
|
||||
*/
|
||||
public function init($originalFileObject, $path, $metaFile) {
|
||||
$typo3ExtRelativeFilePath = '';
|
||||
$file = $this->session->getDataByKey('languageFileSelection');
|
||||
$extensionKey = $this->session->getDataByKey('extkey');
|
||||
if ($file !== '' && $extensionKey !== '') {
|
||||
$typo3ExtRelativeFilePath = 'EXT:' . $this->cleanSessionExtKey($extensionKey) . '/' . $file;
|
||||
}
|
||||
if ($typo3ExtRelativeFilePath === '') {
|
||||
try {
|
||||
$typo3ExtRelativeFilePath = Typo3Lib::transTypo3File($originalFileObject->getAbsFile(), FALSE);
|
||||
} catch (\Exception $e) {
|
||||
$typo3ExtRelativeFilePath = '';
|
||||
}
|
||||
}
|
||||
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
$overrideFileAbsolutePath = Typo3Lib::fixFilePath(
|
||||
$pathSite . '/' .
|
||||
($GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$typo3ExtRelativeFilePath][0] ?? '')
|
||||
);
|
||||
|
||||
if (!is_file($overrideFileAbsolutePath)) {
|
||||
$extRelativeFilePath = SgLib::trimPath('EXT:', $typo3ExtRelativeFilePath);
|
||||
$extRelativeFilePath = substr($extRelativeFilePath, 0, strrpos($extRelativeFilePath, '.')) . '.xlf';
|
||||
|
||||
/** @var ConfigurationService $configurationService */
|
||||
$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
|
||||
$extConfig = $configurationService->getExtConfig();
|
||||
$overrideFileAbsolutePath = $extConfig['pathOverrideFiles']
|
||||
. $extRelativeFilePath;
|
||||
}
|
||||
|
||||
$this->originalFileObject = $originalFileObject;
|
||||
parent::init(basename($overrideFileAbsolutePath), dirname($overrideFileAbsolutePath), $metaFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the parent function and convert all values from utf-8 to the original charset
|
||||
*
|
||||
* @return void
|
||||
* @throws LFException raised if the parent read file method fails
|
||||
*/
|
||||
public function readFile() {
|
||||
if (is_file($this->absFile)) {
|
||||
parent::readFile();
|
||||
}
|
||||
|
||||
$oldXMLFile = $this->getOlderPath($this->absFile);
|
||||
if (is_file($oldXMLFile)) {
|
||||
$xmlFile = GeneralUtility::makeInstance(FileBaseXMLService::class);
|
||||
// i do think we are fine omitting metaFile
|
||||
$xmlFile->init(basename($oldXMLFile), dirname($oldXMLFile), '');
|
||||
$xmlFile->readFile();
|
||||
$this->mergeFileObjectWidthOverrideLangData($xmlFile);
|
||||
}
|
||||
|
||||
$this->originalFileObject->readFile();
|
||||
$this->mergeOriginalWidthOverrideLangData();
|
||||
}
|
||||
|
||||
/**
|
||||
* when setting session key, we are using the folder, which has
|
||||
* a) "-" as delimiter
|
||||
* b) "cms-" as prefix for core extension
|
||||
*
|
||||
* @param string $extkey
|
||||
* @return string
|
||||
*/
|
||||
private function cleanSessionExtKey(string $extkey): string {
|
||||
// cant be merged, because cms_ only is in string after we did first replacement
|
||||
return str_replace('cms_', '', str_replace('-', '_', $extkey));
|
||||
}
|
||||
|
||||
/**
|
||||
* check for possible old files:
|
||||
* 1. we do now have cms_ prefix for some reason
|
||||
* 2. we only write localLang.xlf
|
||||
*
|
||||
* @param string $absolutePath
|
||||
* @return string
|
||||
*/
|
||||
public function getOlderPath(string $absolutePath): string {
|
||||
return str_replace(['.xlf', 'cms_'], ['.xml', ''], $absolutePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges Language data from original and override files, so all data can e presented to user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function mergeOriginalWidthOverrideLangData() {
|
||||
foreach ($this->originalFileObject->getLocalLang() as $lang => $langData) {
|
||||
if (!is_array($langData)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($langData as $costKey => $constValue) {
|
||||
if (isset($this->localLang[$lang][$costKey]) && $this->localLang[$lang][$costKey] !== $constValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!array_key_exists($lang, $this->localLang) || !is_array($this->localLang[$lang])) {
|
||||
$this->localLang[$lang] = [];
|
||||
}
|
||||
|
||||
$this->localLang[$lang][$costKey] = $constValue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->originalFileObject->getMeta() as $metaTag => $metaTagValue) {
|
||||
if ($metaTag === '@attributes') {
|
||||
foreach ($metaTagValue as $attributeKey => $attributeValue) {
|
||||
if (isset($this->meta[$metaTag][$attributeKey])
|
||||
&& $this->meta[$metaTag][$attributeKey] !== $attributeValue
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->meta[$metaTag][$attributeKey] = $attributeValue;
|
||||
}
|
||||
} else {
|
||||
if (isset($this->meta[$metaTag]) && $this->meta[$metaTag] !== $metaTagValue) {
|
||||
continue;
|
||||
}
|
||||
$this->meta[$metaTag] = $metaTagValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges Language data from original and override files, so all data can e presented to user.
|
||||
*
|
||||
* @param FileService $fileObject
|
||||
* @return void
|
||||
*/
|
||||
protected function mergeFileObjectWidthOverrideLangData(FileService $fileObject) {
|
||||
foreach ($fileObject->getLocalLang() as $lang => $langData) {
|
||||
if (!is_array($langData)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($langData as $costKey => $constValue) {
|
||||
if (isset($this->localLang[$lang][$costKey]) && $this->localLang[$lang][$costKey] !== $constValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!array_key_exists($lang, $this->localLang) || !is_array($this->localLang[$lang])) {
|
||||
$this->localLang[$lang] = [];
|
||||
}
|
||||
|
||||
$this->localLang[$lang][$costKey] = $constValue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($fileObject->getMeta() as $metaTag => $metaTagValue) {
|
||||
if ($metaTag === '@attributes') {
|
||||
foreach ($metaTagValue as $attributeKey => $attributeValue) {
|
||||
if (isset($this->meta[$metaTag][$attributeKey])
|
||||
&& $this->meta[$metaTag][$attributeKey] !== $attributeValue
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$this->meta[$metaTag][$attributeKey] = $attributeValue;
|
||||
}
|
||||
} else {
|
||||
if (isset($this->meta[$metaTag]) && $this->meta[$metaTag] !== $metaTagValue) {
|
||||
continue;
|
||||
}
|
||||
$this->meta[$metaTag] = $metaTagValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes language override files.
|
||||
*
|
||||
* @param array|null $editedLanguages
|
||||
* @return void
|
||||
* @throws \Exception
|
||||
* @throws LFException raised if a file cant be written
|
||||
*/
|
||||
public function writeFile($editedLanguages = NULL) {
|
||||
$this->deleteDuplicates();
|
||||
if (!$this->langDataExists() && !is_file($this->absFile)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
try {
|
||||
SgLib::createDir($this->absPath, $pathSite);
|
||||
} catch (\Exception $exception) {
|
||||
throw new LFException('failure.failure', 0, '(' . $exception->getMessage() . ')');
|
||||
}
|
||||
|
||||
$translationFile = basename($this->absFile);
|
||||
$translationDir = dirname($this->absFile);
|
||||
foreach ($this->localLang as $langKey => $val) {
|
||||
if ($langKey !== 'default' && $langKey !== 'trans-unit') {
|
||||
$this->originLang[$langKey] = $translationDir . '/' . $langKey . '.' . $translationFile;
|
||||
}
|
||||
}
|
||||
|
||||
parent::writeFile();
|
||||
|
||||
// Set only new values in GlobalConfiguration if something changed
|
||||
$originalAbsPath = $this->originalFileObject->getAbsFile();
|
||||
$pathSpecsOriginialFile = pathinfo($originalAbsPath);
|
||||
$locallangXMLOverride = &$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'];
|
||||
$file = $this->session->getDataByKey('languageFileSelection');
|
||||
$extensionKey = $this->session->getDataByKey('extkey');
|
||||
$oldExtensionName = $this->cleanSessionExtKey($extensionKey);
|
||||
$typo3ExtRelativeFilePath = 'EXT:' . $oldExtensionName . '/' . $file;
|
||||
$relativeOverridePath = str_replace(
|
||||
'EXT:' . $oldExtensionName,
|
||||
'typo3conf/LFEditor/OverrideFiles/' . $oldExtensionName,
|
||||
$typo3ExtRelativeFilePath
|
||||
);
|
||||
if (array_key_exists($typo3ExtRelativeFilePath, $locallangXMLOverride) &&
|
||||
$locallangXMLOverride[$typo3ExtRelativeFilePath][0] === $relativeOverridePath) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var ConfigurationService $configurationService */
|
||||
$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
|
||||
$additionalConfigurationFilePath = $configurationService->getAdditionalConfigurationFilePath();
|
||||
|
||||
try {
|
||||
// what we need:
|
||||
$addLine = '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SYS\'][\'locallangXMLOverride\'][\''
|
||||
. $typo3ExtRelativeFilePath . '\'][0] = \'' . $relativeOverridePath . '\';';
|
||||
Typo3Lib::writeLineToAdditionalConfiguration($addLine, $additionalConfigurationFilePath);
|
||||
$GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$typo3ExtRelativeFilePath][0]
|
||||
= $relativeOverridePath;
|
||||
} catch (\Exception $exception) {
|
||||
throw new LFException('failure.failure', 0, '(' . $exception->getMessage() . ')');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes duplicated language data (data that exist in both files - original file and override file),
|
||||
* so that only changed data will be saved in override file.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function deleteDuplicates() {
|
||||
$defaultLangData = $this->originalFileObject->getLocalLangData('default');
|
||||
foreach ($this->localLang as $language => $languageData) {
|
||||
if (!is_array($languageData)) {
|
||||
continue;
|
||||
}
|
||||
foreach ($languageData as $constKey => $constValue) {
|
||||
$localLangData = $this->originalFileObject->getLocalLangData($language);
|
||||
if (array_key_exists($constKey, $localLangData) && SgLib::strCmpIgnoreCR(
|
||||
$constValue,
|
||||
$localLangData[$constKey]
|
||||
)) {
|
||||
unset($this->localLang[$language][$constKey]);
|
||||
} elseif ($language !== 'default' && $language !== 'trans-unit') {
|
||||
// if we are not in default, but we deleted the default key, we have to restore it, else we would
|
||||
// not write the correct language content in xlf
|
||||
if (!array_key_exists($constKey, $this->localLang['default'])) {
|
||||
$this->localLang['default'][$constKey] = $defaultLangData[$constKey] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->meta as $metaTag => $metaValue) {
|
||||
if (SgLib::strCmpIgnoreCR($metaValue, $this->originalFileObject->getMetaData($metaTag))) {
|
||||
unset($this->meta[$metaTag]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks is there any lang data (constants in $localLang and meta data).
|
||||
*
|
||||
* @return bool Returns true if any constant or meta data exist.
|
||||
*/
|
||||
protected function langDataExists() {
|
||||
foreach ($this->meta as $metaTag => $metaValue) {
|
||||
if (isset($this->meta[$metaTag]) && $metaTag !== '@attributes') {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->localLang as $language => $languageData) {
|
||||
if (!is_array($languageData)) {
|
||||
continue;
|
||||
}
|
||||
foreach ($languageData as $constKey => $constValue) {
|
||||
if (isset($languageData[$constKey])) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes generator meta tag.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function addGeneratorString() {
|
||||
if ($this->originalFileObject->getMetaData('generator') !== 'LFEditor') {
|
||||
$this->meta['generator'] = 'LFEditor';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,487 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use SGalinski\Lfeditor\Exceptions\LFException;
|
||||
use SGalinski\Lfeditor\Utility\SgLib;
|
||||
use SGalinski\Lfeditor\Utility\Typo3Lib;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* include some general functions only usable for the 'lfeditor' module
|
||||
*/
|
||||
abstract class FileService extends AbstractService {
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $localLang = [];
|
||||
|
||||
/**
|
||||
* Absolute address (origin) of language file
|
||||
* which contains translation for language given as a key of the array.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $originLang = [];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $absPath;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $relFile;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $absFile;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $fileType;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $workspace;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $meta = [];
|
||||
|
||||
/**
|
||||
* @param array|NULL $editedLanguages
|
||||
* @return mixed
|
||||
*/
|
||||
abstract protected function prepareFileContents($editedLanguages);
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
abstract public function readFile();
|
||||
|
||||
/**
|
||||
* sets some variables
|
||||
*
|
||||
* @param string $file filename or relative path from second param to the language file
|
||||
* @param string $path absolute path to the extension or language file
|
||||
* @param string $metaFile absolute path to the meta file (includes filename) DO NOT REMOVE! It's required in some
|
||||
* implementations.
|
||||
* @return void
|
||||
*/
|
||||
public function init($file, $path, $metaFile) {
|
||||
$this->setAbsPath($path);
|
||||
$this->setRelFile($file);
|
||||
$this->setAbsFile($this->absPath . '/' . $this->relFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* sets information
|
||||
*
|
||||
* structure:
|
||||
* $infos["absPath"] = absolute path to an extension or file
|
||||
* $infos["relFile"] = relative path with filename from "absPath"
|
||||
* $infos["workspace"] = workspace (base or xll)
|
||||
* $infos["fileType"] = file type (php or xml)
|
||||
* $infos["localLang"] = language data
|
||||
* $infos["originLang"] = origin language array
|
||||
* $infos["meta"] = meta data
|
||||
*
|
||||
* @param array $informations
|
||||
* @return void
|
||||
*/
|
||||
public function setVar($informations) {
|
||||
// path and file information
|
||||
if (!empty($informations['absPath'])) {
|
||||
$this->absPath = Typo3Lib::fixFilePath($informations['absPath'] . '/');
|
||||
}
|
||||
if (!empty($informations['relFile'])) {
|
||||
$this->relFile = Typo3Lib::fixFilePath($informations['relFile']);
|
||||
}
|
||||
$this->absFile = $this->absPath . $this->relFile;
|
||||
|
||||
// file type and workspace
|
||||
if (!empty($informations['workspace'])) {
|
||||
$this->workspace = $informations['workspace'];
|
||||
}
|
||||
if (!empty($informations['fileType'])) {
|
||||
$this->fileType = $informations['fileType'];
|
||||
}
|
||||
|
||||
// data arrays
|
||||
if (!count($this->localLang) && array_key_exists('localLang', $informations) && is_array($informations['localLang'])) {
|
||||
$this->localLang = $informations['localLang'];
|
||||
}
|
||||
if (!count($this->originLang) && array_key_exists('originLang', $informations) && is_array($informations['originLang'])) {
|
||||
$this->originLang = $informations['originLang'];
|
||||
}
|
||||
if (!count($this->meta) && array_key_exists('meta', $informations) && is_array($informations['meta'])) {
|
||||
$this->meta = $informations['meta'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns requested information
|
||||
*
|
||||
* @param string $info
|
||||
* @return string
|
||||
*/
|
||||
public function getVar($info) {
|
||||
$value = '';
|
||||
if ($info == 'relFile') {
|
||||
$value = $this->relFile;
|
||||
} elseif ($info == 'absPath') {
|
||||
$value = $this->absPath;
|
||||
} elseif ($info == 'absFile') {
|
||||
$value = $this->absFile;
|
||||
} elseif ($info == 'fileType') {
|
||||
$value = $this->fileType;
|
||||
} elseif ($info == 'workspace') {
|
||||
$value = $this->workspace;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns language data
|
||||
*
|
||||
* @param string $langKey valid language key
|
||||
* @return array language data
|
||||
*/
|
||||
public function getLocalLangData($langKey = '') {
|
||||
if (empty($langKey)) {
|
||||
return $this->localLang;
|
||||
}
|
||||
if (array_key_exists($langKey, $this->localLang) && is_array($this->localLang[$langKey])) {
|
||||
return $this->localLang[$langKey];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* deletes or sets constants in local language data
|
||||
*
|
||||
* @param string $constant constant name (if empty an index number will be used)
|
||||
* @param string $value new value (if empty the constant will be deleted)
|
||||
* @param string $langKey language shortcut
|
||||
* @param boolean $forceDel set to true, if you want delete default values too
|
||||
* @return void
|
||||
*/
|
||||
public function setLocalLangData($constant, $value, $langKey, $forceDel = FALSE) {
|
||||
if (!empty($value) || (($langKey === 'default' && !$forceDel))) {
|
||||
if (!array_key_exists($langKey, $this->localLang) || $this->localLang[$langKey] === '') {
|
||||
$this->localLang[$langKey] = [];
|
||||
}
|
||||
$this->localLang[$langKey][$constant] = $value;
|
||||
} elseif (isset($this->localLang[$langKey][$constant])) {
|
||||
if ($this->session->getDataByKey('editingMode') === 'override' &&
|
||||
isset($this->localLang[$langKey][$constant])
|
||||
) {
|
||||
$this->localLang[$langKey][$constant] = "";
|
||||
} else {
|
||||
unset($this->localLang[$langKey][$constant]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns origin
|
||||
*
|
||||
* @param string $langKey valid language key
|
||||
* @return mixed an origin or full array
|
||||
*/
|
||||
public function getOriginLangData($langKey = '') {
|
||||
if (empty($langKey)) {
|
||||
return $this->originLang;
|
||||
} else {
|
||||
return $this->originLang[$langKey] ?? [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* sets new origin of a given language
|
||||
*
|
||||
* @param string $origin new origin
|
||||
* @param string $langKey language shortcut
|
||||
* @return void
|
||||
*/
|
||||
public function setOriginLangData($origin, $langKey) {
|
||||
if (!empty($origin)) {
|
||||
$this->originLang[$langKey] = $origin;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns meta data
|
||||
*
|
||||
* @param string $metaIndex special meta index
|
||||
* @return mixed meta data
|
||||
*/
|
||||
public function getMetaData($metaIndex = '') {
|
||||
if (!empty($metaIndex)) {
|
||||
return $this->meta[$metaIndex] ?? '';
|
||||
} else {
|
||||
return $this->meta;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* deletes or sets constants in meta data
|
||||
*
|
||||
* @param string $metaIndex
|
||||
* @param string $value new value (if empty the meta index will be deleted)
|
||||
* @return void
|
||||
*/
|
||||
public function setMetaData($metaIndex, $value) {
|
||||
if (!empty($value)) {
|
||||
$this->meta[$metaIndex] = $value;
|
||||
} elseif (isset($this->meta[$metaIndex])) {
|
||||
unset($this->meta[$metaIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* writes language files
|
||||
*
|
||||
* @param array | NULL $editedLanguages
|
||||
* @throws LFException raised if a file cant be written
|
||||
* @return void
|
||||
*/
|
||||
public function writeFile($editedLanguages = NULL) {
|
||||
// get prepared language files
|
||||
$languageFiles = $this->prepareFileContents($editedLanguages);
|
||||
$this->writeFilesWithContent($languageFiles);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the given files with the given content.
|
||||
*
|
||||
* Array structure:
|
||||
* array (
|
||||
* '/var/www/file.xlf' => 'My content',
|
||||
* ...
|
||||
* )
|
||||
*
|
||||
* @param array $files
|
||||
* @throws LFException
|
||||
* @return void
|
||||
*/
|
||||
public function writeFilesWithContent(array $files = []) {
|
||||
// check write permissions of all files
|
||||
foreach ($files as $file => $content) {
|
||||
[$extensionNameFromFile, $extPrefixedPath] = Typo3Lib::getExtNameFromOverrideFile($file);
|
||||
if (strpos($extensionNameFromFile, '-') !== FALSE) {
|
||||
$file = str_replace(
|
||||
$extensionNameFromFile,
|
||||
str_replace('-', '_', $extensionNameFromFile),
|
||||
$file
|
||||
);
|
||||
}
|
||||
if (!SgLib::checkWritePerms($file)) {
|
||||
throw new LFException('failure.file.badPermissions');
|
||||
}
|
||||
}
|
||||
|
||||
// write files
|
||||
foreach ($files as $file => $content) {
|
||||
[$extensionNameFromFile, $extPrefixedPath] = Typo3Lib::getExtNameFromOverrideFile($file);
|
||||
if (strpos($extensionNameFromFile, '-') !== FALSE) {
|
||||
$file = str_replace(
|
||||
$extensionNameFromFile,
|
||||
str_replace('-', '_', $extensionNameFromFile),
|
||||
$file
|
||||
);
|
||||
}
|
||||
if (!GeneralUtility::writeFile($file, $content)) {
|
||||
throw new LFException('failure.file.notWritten');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes generator meta tag.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function addGeneratorString() {
|
||||
$this->meta['generator'] = 'LFEditor';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns $absFile.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAbsFile() {
|
||||
return $this->absFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $absFile.
|
||||
*
|
||||
* @param string $absFile
|
||||
* @return void
|
||||
*/
|
||||
public function setAbsFile($absFile) {
|
||||
$this->absFile = $absFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns $absPath - absolute path to an extension or file.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getAbsPath() {
|
||||
return $this->absPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $absPath - absolute path to an extension or file.
|
||||
*
|
||||
* @param string $absPath
|
||||
* @return void
|
||||
*/
|
||||
public function setAbsPath($absPath) {
|
||||
$this->absPath = $absPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns $fileType
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFileType() {
|
||||
return $this->fileType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $fileType.
|
||||
*
|
||||
* @param string $fileType
|
||||
* @return void
|
||||
*/
|
||||
public function setFileType($fileType) {
|
||||
$this->fileType = $fileType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns $locallang
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocalLang() {
|
||||
return $this->localLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $locallang.
|
||||
*
|
||||
* @param array $localLang
|
||||
*/
|
||||
public function setLocalLang(array $localLang) {
|
||||
$this->localLang = $localLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns meta data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getMeta() {
|
||||
return $this->meta;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets meta data.
|
||||
*
|
||||
* @param array $meta
|
||||
*/
|
||||
public function setMeta(array $meta) {
|
||||
$this->meta = $meta;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns $originLang.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getOriginLang() {
|
||||
return $this->originLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets $originLang.
|
||||
*
|
||||
* @param array $originLang
|
||||
*/
|
||||
public function setOriginLang(array $originLang) {
|
||||
$this->originLang = $originLang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns relFile - relative path with filename from "absPath".
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRelFile() {
|
||||
return $this->relFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets relFile - relative path with filename from "absPath".
|
||||
*
|
||||
* @param string $relFile
|
||||
*/
|
||||
public function setRelFile($relFile) {
|
||||
$this->relFile = $relFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns workspace.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWorkspace() {
|
||||
return $this->workspace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets workspace.
|
||||
*
|
||||
* @param string $workspace
|
||||
*/
|
||||
public function setWorkspace($workspace) {
|
||||
$this->workspace = $workspace;
|
||||
}
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use SGalinski\Lfeditor\Utility\ExtensionUtility;
|
||||
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
|
||||
use TYPO3\CMS\Core\Http\NullResponse;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* Class SGalinski\SgRoutes\Service\LicensingService
|
||||
*/
|
||||
class LicensingService {
|
||||
/**
|
||||
* Licensing Service Url
|
||||
*/
|
||||
public const URL = 'https://www.sgalinski.de/?eID=sgLicensing';
|
||||
|
||||
/**
|
||||
* Licensing Service Url
|
||||
*/
|
||||
public const EXTENSION_KEY = 'lfeditor';
|
||||
|
||||
/**
|
||||
* @var null|bool $isLicenseKeyValid
|
||||
*/
|
||||
private static $isLicenseKeyValid = NULL;
|
||||
|
||||
/**
|
||||
* @return boolean
|
||||
*/
|
||||
public static function checkKey() {
|
||||
if (static::$isLicenseKeyValid === NULL) {
|
||||
static::$isLicenseKeyValid = FALSE;
|
||||
$configuration = ExtensionUtility::getExtensionConfiguration();
|
||||
if (isset($configuration['key']) && $key = \trim($configuration['key'])) {
|
||||
static::$isLicenseKeyValid = (bool) \preg_match('/^([A-Z\d]{6}-?){4}$/', $key);
|
||||
}
|
||||
}
|
||||
|
||||
return static::$isLicenseKeyValid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Licensing Service ping
|
||||
*
|
||||
* @param boolean $returnUrl
|
||||
* @return string
|
||||
*/
|
||||
public static function ping($returnUrl = FALSE) {
|
||||
try {
|
||||
$configuration = ExtensionUtility::getExtensionConfiguration();
|
||||
$key = '';
|
||||
if (isset($configuration['key'])) {
|
||||
$key = \trim($configuration['key']);
|
||||
}
|
||||
$params = [
|
||||
'extension' => self::EXTENSION_KEY,
|
||||
'host' => GeneralUtility::getIndpEnv('HTTP_HOST'),
|
||||
'key' => $key
|
||||
];
|
||||
$params = \http_build_query($params);
|
||||
$pingUrl = self::URL;
|
||||
$pingUrl .= $params !== '' ? (\strpos($pingUrl, '?') === FALSE ? '?' : '&') . $params : '';
|
||||
if ($returnUrl) {
|
||||
return $pingUrl;
|
||||
}
|
||||
|
||||
GeneralUtility::getUrl($pingUrl);
|
||||
} catch (\Exception $exception) {
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a random password string based on the configured password policies.
|
||||
*
|
||||
* @param ServerRequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
* @return ResponseInterface
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function ajaxPing(ServerRequestInterface $request, ResponseInterface $response = NULL) {
|
||||
/** @var BackendUserAuthentication $backendUser */
|
||||
$backendUser = $GLOBALS['BE_USER'];
|
||||
$moduleKey = 'tools_beuser/index.php/user-LfeditorLfeditor_pinged';
|
||||
if ($backendUser && !$backendUser->getModuleData($moduleKey, 'ses')) {
|
||||
$backendUser->pushModuleData($moduleKey, TRUE);
|
||||
self::ping();
|
||||
}
|
||||
|
||||
if ($response === NULL) {
|
||||
$response = new NullResponse();
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
@@ -1,144 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Service;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Core\Database\Connection;
|
||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||
use TYPO3\CMS\Core\Localization\Locales;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
|
||||
/**
|
||||
* Class SysLanguageService works with data from sys_language table.
|
||||
*/
|
||||
class SysLanguageService extends AbstractService {
|
||||
/** @var array */
|
||||
protected $sysLanguageList;
|
||||
|
||||
/** @var array */
|
||||
protected $isoReverseMapping;
|
||||
|
||||
/**
|
||||
* Selects data (uid, title, flag) from sys_language table by list of uid-s ($uids).
|
||||
* If no $uids specified, selects all records.
|
||||
*
|
||||
* @param string $uids Comma separated list of uid-s.
|
||||
* @return array|bool
|
||||
*/
|
||||
public function selectFromSysLanguageByUids($uids = NULL) {
|
||||
$connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
|
||||
$queryBuilder = $connectionPool->getQueryBuilderForTable('sys_language');
|
||||
$queryBuilder = $queryBuilder->select('uid', 'title', 'flag')
|
||||
->from('sys_language')
|
||||
->groupBy('flag', 'uid');
|
||||
if ($uids !== NULL) {
|
||||
$queryBuilder = $queryBuilder->where(
|
||||
$queryBuilder->expr()->in(
|
||||
'uid',
|
||||
$queryBuilder->createNamedParameter($uids, Connection::PARAM_INT_ARRAY)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$rows = $queryBuilder->execute()->fetchAll();
|
||||
$sysLanguageList = [];
|
||||
foreach ($rows as $row) {
|
||||
$sysLanguageList[$row['flag']]['uid'] = $row['uid'];
|
||||
$sysLanguageList[$row['flag']]['title'] = $row['title'];
|
||||
}
|
||||
|
||||
return $sysLanguageList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialises array of system languages from database.
|
||||
*/
|
||||
public function initSysLanguageList() {
|
||||
if (!isset($this->sysLanguageList)) {
|
||||
$this->sysLanguageList = $this->selectFromSysLanguageByUids();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the iso reverse mapped flag language or the given value if nothing could be mapped.
|
||||
*
|
||||
* @param string $flag language acronym (iso language code, e.g.: 'de', 'da', 'fi'...)
|
||||
* @return string
|
||||
*/
|
||||
public function doIsoReverseMapping($flag) {
|
||||
$isoReverseMapping = $this->getIsoReverseMapping();
|
||||
$mappedFlag = isset($isoReverseMapping[$flag]) ? (string) $isoReverseMapping[$flag] : '';
|
||||
if ($mappedFlag !== '') {
|
||||
$flag = $mappedFlag;
|
||||
}
|
||||
|
||||
return $flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns system language id for given language acronym ($flag).
|
||||
* If that language is not registered in system, function returns NULL.
|
||||
*
|
||||
* @param string $flag language acronym (iso language code, e.g.: 'de', 'da', 'fi'...)
|
||||
* @return int|NULL
|
||||
*/
|
||||
public function getSysLanguageIdByFlag($flag) {
|
||||
$this->initSysLanguageList();
|
||||
$flag = $this->doIsoReverseMapping($flag);
|
||||
|
||||
// chinese seems to have a big mapping issue. In general it seems that the iso handling is currently more
|
||||
// or less simply fucked up in TYPO3. Also it's possible that I don't get the bigger picture here. Who knows...
|
||||
// Also note: Chinese isn't working without a default file in the override mode.
|
||||
if ($flag === 'zh') {
|
||||
$flag = 'cn';
|
||||
}
|
||||
|
||||
if (!empty($this->sysLanguageList[$flag]['uid'])) {
|
||||
return (int) $this->sysLanguageList[$flag]['uid'];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the mapping between ISO language codes and TYPO3 (old) codes.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getIsoReverseMapping() {
|
||||
if (!empty($this->isoReverseMapping)) {
|
||||
return $this->isoReverseMapping;
|
||||
}
|
||||
|
||||
/** @var Locales $locales */
|
||||
$locales = GeneralUtility::makeInstance(Locales::class);
|
||||
|
||||
$isoMapping = $locales->getIsoMapping();
|
||||
$this->isoReverseMapping = \array_flip($isoMapping);
|
||||
return $this->isoReverseMapping;
|
||||
}
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Session;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Core\SingletonInterface;
|
||||
|
||||
/**
|
||||
* PHP Session handler
|
||||
*/
|
||||
class PhpSession implements SingletonInterface {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $sessionKey;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
session_start();
|
||||
$this->sessionKey = uniqid('', TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sessionKey
|
||||
* @return void
|
||||
*/
|
||||
public function setSessionKey($sessionKey) {
|
||||
$this->sessionKey = $sessionKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current session key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSessionKey() {
|
||||
return $this->sessionKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exchanges the complete session data
|
||||
*
|
||||
* @param mixed $data
|
||||
* @return void
|
||||
*/
|
||||
public function exchangeData($data) {
|
||||
$this->destroy();
|
||||
$_SESSION[$this->sessionKey] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the complete session data
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getData() {
|
||||
return $_SESSION[$this->sessionKey];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets data inside the session below the given key
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $data
|
||||
* @return void
|
||||
*/
|
||||
public function setDataByKey($key, $data) {
|
||||
$_SESSION[$this->sessionKey][$key] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data of the session defined by the given key
|
||||
*
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function getDataByKey($key) {
|
||||
return $_SESSION[$this->sessionKey][$key] ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes data defined by the given key.
|
||||
*
|
||||
* @param string $key
|
||||
* @return void
|
||||
*/
|
||||
public function unsetDataByKey($key) {
|
||||
unset($_SESSION[$this->sessionKey][$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all session data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function destroy() {
|
||||
unset($_SESSION[$this->sessionKey]);
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Utility;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
/**
|
||||
* Class which adds CDATA support to SimpleXMLElement.
|
||||
*/
|
||||
class CdataSupportingSimpleXMLElement extends \SimpleXMLElement {
|
||||
/**
|
||||
* Add CDATA text in a node
|
||||
*
|
||||
* @param string $cdataText The CDATA value to add
|
||||
* @return void
|
||||
*/
|
||||
protected function addCData($cdataText) {
|
||||
$node = dom_import_simplexml($this);
|
||||
$no = $node->ownerDocument;
|
||||
$node->appendChild($no->createCDATASection($cdataText));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a child with CDATA value
|
||||
*
|
||||
* @param string $name The name of the child element to add.
|
||||
* @param string $cdataText The CDATA value of the child element.
|
||||
* @return CdataSupportingSimpleXMLElement
|
||||
*/
|
||||
public function addChildCData($name, $cdataText) {
|
||||
/** @var CdataSupportingSimpleXMLElement $child */
|
||||
$child = $this->addChild($name);
|
||||
if ($cdataText !== '') {
|
||||
$child->addCData($cdataText);
|
||||
}
|
||||
return $child;
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
*/
|
||||
|
||||
namespace SGalinski\Lfeditor\Utility;
|
||||
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
|
||||
/**
|
||||
* Class ExtensionUtility
|
||||
*
|
||||
* @package SGalinski\Lfeditor\Utility
|
||||
* @author Kevin Ditscheid <kevin.ditscheid@sgalinski.de>
|
||||
*/
|
||||
class ExtensionUtility {
|
||||
/**
|
||||
* Get the extension configuration
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getExtensionConfiguration(): array {
|
||||
return $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['lfeditor'] ?? [];
|
||||
}
|
||||
}
|
||||
@@ -1,400 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Utility;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use SGalinski\Lfeditor\Service\FileBasePHPService;
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* contains functions for the 'lfeditor' extension
|
||||
*/
|
||||
class Functions {
|
||||
/**
|
||||
* Prepares the extension array.
|
||||
*
|
||||
* This function creates the surface of the select box and adds
|
||||
* some additional information to each entry.
|
||||
*
|
||||
* Structure of file array:
|
||||
* $fileArray[textHeader] = further arrays with extension paths
|
||||
*
|
||||
* @param array $fileArray see above
|
||||
* @return array prepared array
|
||||
*/
|
||||
public static function prepareExtList($fileArray) {
|
||||
$myArray = [];
|
||||
foreach ($fileArray as $header => $extPaths) {
|
||||
if (!is_array($extPaths) || !count($extPaths)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unset($prepArray);
|
||||
foreach ($extPaths as $extPath) {
|
||||
$prepArray[$extPath] = basename($extPath);
|
||||
}
|
||||
ksort($prepArray);
|
||||
$myArray = array_merge($myArray, ['###extensionGroup###' . $header => $header], $prepArray);
|
||||
}
|
||||
return $myArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* searches extensions in a given path
|
||||
*
|
||||
* Modes for $state:
|
||||
* 0 - loaded and unloaded
|
||||
* 1 - only loaded
|
||||
* 2 - only unloaded
|
||||
*
|
||||
* @param string $path path
|
||||
* @param integer $state optional: extension state to ignore (see above)
|
||||
* @param string $extIgnoreRegExp optional: directories to ignore (regular expression; pcre with slashes)
|
||||
* @param string $extWhitelistRegExp optional: keep only those directories (regular expression; pcre with slashes)
|
||||
* @return array result of the search
|
||||
* @throws Exception raised, if the given path cant be opened for reading
|
||||
*/
|
||||
public static function searchExtensions($path, $state = 0, $extIgnoreRegExp = '', $extWhitelistRegExp = '') {
|
||||
if (!@$fhd = opendir($path)) {
|
||||
throw new Exception('cant open "' . $path . '"');
|
||||
}
|
||||
|
||||
$path = rtrim($path, '/');
|
||||
$extArray = [];
|
||||
while ($extDir = readdir($fhd)) {
|
||||
$extDirPath = $path . '/' . $extDir;
|
||||
|
||||
// ignore all unless the file is a directory and no point dir
|
||||
if (!is_dir($extDirPath) || preg_match('/^\.{1,2}$/', $extDir)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check, if the directory/extension should be saved
|
||||
if (preg_match($extIgnoreRegExp, $extDir)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check, if the directory/extension should be saved
|
||||
if ($extWhitelistRegExp !== '' && !preg_match($extWhitelistRegExp, $extDir)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// state filter
|
||||
if ($state) {
|
||||
$extState = (int) ExtensionManagementUtility::isLoaded($extDir);
|
||||
if (($extState && $state == 2) || (!$extState && $state == 1)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$extArray[] = $extDirPath;
|
||||
}
|
||||
closedir($fhd);
|
||||
|
||||
return $extArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepares a given language string for section output
|
||||
*
|
||||
* @param string $value language string
|
||||
* @return string prepared output in sections
|
||||
*/
|
||||
public static function prepareSectionName($value) {
|
||||
return html_entity_decode(LocalizationUtility::translate($value, 'lfeditor'));
|
||||
}
|
||||
|
||||
/**
|
||||
* checks and returns given languages or TYPO3 language list if the given content was empty
|
||||
*
|
||||
* @param array $languages optional: some language shortcuts
|
||||
* @return array language list
|
||||
*/
|
||||
public static function buildLangArray($languages = NULL) {
|
||||
if (!is_array($languages) || !count($languages)) {
|
||||
return SgLib::getSystemLanguages();
|
||||
} else {
|
||||
return $languages;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* generates output for a diff between the backup and original file
|
||||
*
|
||||
* Note that the generated diff will be an array with a normal structure like
|
||||
* any language content array.
|
||||
*
|
||||
* Modes of diffType:
|
||||
* - all changes at the original since the backup was done (0)
|
||||
* - only changes at the original (1)
|
||||
* - only changes at the backup (2)
|
||||
*
|
||||
* @param integer $diffType see above for available modes
|
||||
* @param array $origLang original language data
|
||||
* @param array $backupLocalLang backup language data
|
||||
* @return mixed generated diff
|
||||
*/
|
||||
public static function getBackupDiff($diffType, $origLang, $backupLocalLang) {
|
||||
// get all languages and generate the diff
|
||||
$langKeys = array_merge(array_keys($origLang), array_keys($backupLocalLang));
|
||||
$diff = [];
|
||||
foreach ($langKeys as $langKey) {
|
||||
// prevent warnings
|
||||
if (!is_array($origLang[$langKey])) {
|
||||
$origLang[$langKey] = [];
|
||||
}
|
||||
if (!is_array($backupLocalLang[$langKey])) {
|
||||
$backupLocalLang[$langKey] = [];
|
||||
}
|
||||
$origDiff[$langKey] = [];
|
||||
$backupDiff[$langKey] = [];
|
||||
|
||||
// generate diff
|
||||
if (!$diffType || $diffType == 1) {
|
||||
$origDiff[$langKey] = array_diff_assoc($origLang[$langKey], $backupLocalLang[$langKey]);
|
||||
}
|
||||
if (!$diffType || $diffType == 2) {
|
||||
$backupDiff[$langKey] = array_diff_assoc(
|
||||
$backupLocalLang[$langKey],
|
||||
$origLang[$langKey]
|
||||
);
|
||||
}
|
||||
$diff[$langKey] = array_merge($origDiff[$langKey], $backupDiff[$langKey]);
|
||||
}
|
||||
return $diff;
|
||||
}
|
||||
|
||||
/**
|
||||
* generates output for a meta diff between the backup and original file
|
||||
*
|
||||
* Note that the generated diff will be an array with a normal structure like
|
||||
* any meta content array.
|
||||
*
|
||||
* Modes of diffType:
|
||||
* - all changes at the original since the backup was done (0)
|
||||
* - only changes at the original (1)
|
||||
* - only changes at the backup (2)
|
||||
*
|
||||
* @param integer $diffType see above for available modes
|
||||
* @param array $origMeta original meta data
|
||||
* @param array $backupMeta backup meta data
|
||||
* @return mixed generated diff
|
||||
*/
|
||||
public static function getMetaDiff($diffType, $origMeta, $backupMeta) {
|
||||
$origDiff = [];
|
||||
$backupDiff = [];
|
||||
|
||||
if (!$diffType || $diffType == 1) {
|
||||
$origDiff = array_diff_assoc($origMeta, $backupMeta);
|
||||
}
|
||||
if (!$diffType || $diffType == 2) {
|
||||
$backupDiff = array_diff_assoc($backupMeta, $origMeta);
|
||||
}
|
||||
|
||||
if ($diffType == 1) {
|
||||
return $origDiff;
|
||||
} elseif ($diffType == 2) {
|
||||
return $backupDiff;
|
||||
} else {
|
||||
return array_merge($origDiff, $backupDiff);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* generates a general information array
|
||||
*
|
||||
* @param string $refLang reference language
|
||||
* @param array $languages language key array
|
||||
* @param FileBasePHPService $fileObj file object
|
||||
* @return array general information array
|
||||
* @see outputGeneral()
|
||||
*/
|
||||
public static function genGeneralInfoArray($refLang, $languages, $fileObj) {
|
||||
$numTranslated = [];
|
||||
// reference language data information
|
||||
$localRefLangData = $fileObj->getLocalLangData($refLang);
|
||||
|
||||
// generate needed data
|
||||
$infos = [];
|
||||
foreach ($languages as $langKey) {
|
||||
// get origin data and meta information
|
||||
$origin = $fileObj->getOriginLangData($langKey);
|
||||
$infos['default']['meta'] = $fileObj->getMetaData();
|
||||
|
||||
// language data
|
||||
$localLangData = $fileObj->getLocalLangData($langKey);
|
||||
|
||||
// detailed constants information
|
||||
$infos[$langKey]['numUntranslated'] =
|
||||
count(array_diff_key($localRefLangData, $localLangData));
|
||||
$infos[$langKey]['numUnknown'] =
|
||||
count(array_diff_key($localLangData, $localRefLangData));
|
||||
$infos[$langKey]['numTranslated'] =
|
||||
count(array_intersect_key($localLangData, $localRefLangData));
|
||||
|
||||
// set origin
|
||||
try {
|
||||
$infos[$langKey]['origin'] = '[-]';
|
||||
if (!empty($origin)) {
|
||||
$infos[$langKey]['origin'] = Typo3Lib::transTypo3File($origin, FALSE);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$pathSite = Environment::getPublicPath() . '/';
|
||||
$infos[$langKey]['origin'] = SgLib::trimPath($pathSite, $origin);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort by numTranslated DESC
|
||||
foreach ($infos as $key => $row) {
|
||||
$numTranslated[$key] = $row['numTranslated'];
|
||||
}
|
||||
array_multisort($numTranslated, SORT_DESC, $infos);
|
||||
|
||||
return $infos;
|
||||
}
|
||||
|
||||
/**
|
||||
* generates a tree information array
|
||||
*
|
||||
* structure:
|
||||
* tree[dimension][branch]['name'] = name of constant
|
||||
* tree[dimension][branch]['type'] = type of constant (0=>normal;1=>untranslated;2=>unknown)
|
||||
* tree[dimension][branch]['parent'] = parentOfBranch (absConstName)
|
||||
* tree[dimension][branch]['childs'] = amount of children
|
||||
*
|
||||
* @param array $langData language data (only one language)
|
||||
* @param array $refLang reference data (only reference language)
|
||||
* @param string $expToken explode token
|
||||
* @return array tree information array
|
||||
*/
|
||||
public static function genTreeInfoArray($langData, $refLang, $expToken) {
|
||||
// reference language
|
||||
$refConsts = [];
|
||||
if (is_array($refLang) && count($refLang)) {
|
||||
$refConsts = array_keys($refLang);
|
||||
}
|
||||
$langConsts = array_merge(array_keys($langData), $refConsts);
|
||||
|
||||
// generate tree information array
|
||||
$curAbsName = '';
|
||||
$tree = [];
|
||||
foreach ($langConsts as $constant) {
|
||||
// add root
|
||||
$tree[0]['Root']['name'] = 'Root';
|
||||
|
||||
// get type
|
||||
$type = 0; // normal
|
||||
if (!in_array($constant, $refConsts)) {
|
||||
$type = 2;
|
||||
} // unknown
|
||||
elseif (empty($langData[$constant])) {
|
||||
$type = 1;
|
||||
} // untranslated
|
||||
|
||||
$branches = explode($expToken, $constant);
|
||||
$numBranches = is_countable($branches) ? count($branches) : 0;
|
||||
for ($i = 0, $curDim = 1; $i < $numBranches; ++$i, ++$curDim) {
|
||||
// get current absolute constant name
|
||||
if (!$i) {
|
||||
$curAbsName = $branches[$i];
|
||||
} else {
|
||||
$curAbsName .= $expToken . $branches[$i];
|
||||
}
|
||||
|
||||
if (isset($tree[$curDim][$curAbsName]['name'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// add branch
|
||||
$tree[$curDim][$curAbsName]['name'] = $branches[$i];
|
||||
$tree[$curDim][$curAbsName]['type'] = $type;
|
||||
|
||||
// set parent
|
||||
if ($i > 0) {
|
||||
$parentAbsName = substr($curAbsName, 0, strrpos($curAbsName, (string) $expToken));
|
||||
} else {
|
||||
$parentAbsName = 'Root';
|
||||
}
|
||||
$tree[$curDim][$curAbsName]['parent'] = $parentAbsName;
|
||||
if (array_key_exists('childs', $tree[$curDim - 1][$parentAbsName])) {
|
||||
++$tree[$curDim - 1][$parentAbsName]['childs'];
|
||||
} else {
|
||||
$tree[$curDim - 1][$parentAbsName]['childs'] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $tree;
|
||||
}
|
||||
|
||||
/**
|
||||
* get best explode token of a given language data
|
||||
*
|
||||
* @param string $curToken current token
|
||||
* @param array $langData some test language data
|
||||
* @return string new token
|
||||
*/
|
||||
public static function getExplodeToken($curToken, $langData) {
|
||||
$ascii = [];
|
||||
// get current token
|
||||
if (!empty($curToken)) {
|
||||
return $curToken;
|
||||
}
|
||||
|
||||
// return default token, if no test data found
|
||||
if (!is_array($langData) || !count($langData)) {
|
||||
return '.';
|
||||
}
|
||||
|
||||
// get ascii codes (possible explode values)
|
||||
$ascii['.'] = ord('.');
|
||||
$ascii['_'] = ord('_');
|
||||
|
||||
// get best possible character of the default language
|
||||
$defKeys = array_keys($langData);
|
||||
$numKeys = count($defKeys);
|
||||
$maxTestCount = ($numKeys >= 10) ? 10 : $numKeys;
|
||||
$counts = [];
|
||||
for ($i = 0; $i < $maxTestCount; ++$i) {
|
||||
$curCounts = count_chars($defKeys[$i], 1);
|
||||
foreach ($ascii as $sign) {
|
||||
$counts[$sign] += $curCounts[$sign];
|
||||
}
|
||||
}
|
||||
|
||||
// get curToken
|
||||
foreach ($counts as $sign => $curCounts) {
|
||||
if ($curCounts > $counts[$curToken]) {
|
||||
$curToken = $sign;
|
||||
}
|
||||
}
|
||||
|
||||
return chr($curToken);
|
||||
}
|
||||
}
|
||||
@@ -1,349 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Utility;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use Exception;
|
||||
use TYPO3\CMS\Core\Localization\Locales;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
/**
|
||||
* personal library with lots of useful methods
|
||||
*/
|
||||
class SgLib {
|
||||
#################################
|
||||
######## string functions #######
|
||||
#################################
|
||||
|
||||
/**
|
||||
* trims some string from an given path
|
||||
*
|
||||
* @param string $replace string part to delete
|
||||
* @param string $path some path
|
||||
* @param string $prefix some prefix for the new path
|
||||
* @return string new path
|
||||
*/
|
||||
public static function trimPath($replace, $path, $prefix = '') {
|
||||
return trim(str_replace($replace, '', $path), '/') . $prefix;
|
||||
}
|
||||
|
||||
#####################################
|
||||
######## filesystem functions #######
|
||||
#####################################
|
||||
|
||||
/**
|
||||
* reads the extension of a given filename
|
||||
*
|
||||
* @param string $file filename
|
||||
* @return string extension of a given filename
|
||||
*/
|
||||
public static function getFileExtension($file) {
|
||||
return substr($file, strrpos($file, '.') + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* replaces the file extension in a given filename
|
||||
*
|
||||
* @param string $type new file extension
|
||||
* @param string $file filename
|
||||
* @return string new filename
|
||||
*/
|
||||
public static function setFileExtension($type, $file) {
|
||||
return substr($file, 0, strrpos($file, '.') + 1) . $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks write permission of a given file (checks directory permission if file does not exists)
|
||||
*
|
||||
* @param string $file file path
|
||||
* @return boolean true or false
|
||||
*/
|
||||
public static function checkWritePerms($file) {
|
||||
if (!is_file($file)) {
|
||||
$file = dirname($file);
|
||||
}
|
||||
|
||||
if (!is_writable($file)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* deletes given files
|
||||
*
|
||||
* @param array $files files
|
||||
* @return void
|
||||
* @throws Exception raised, if some files cant be deleted (thrown after deletion of all)
|
||||
*/
|
||||
public static function deleteFiles($files) {
|
||||
// delete all old files
|
||||
$error = [];
|
||||
foreach ($files as $file) {
|
||||
if (is_file($file)) {
|
||||
if (!unlink($file)) {
|
||||
$error[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count($error)) {
|
||||
throw new Exception('following files cant be deleted: "' . implode(', ', $error) . '"');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a full path (all nonexistent directories will be created)
|
||||
*
|
||||
* @param string $path full path
|
||||
* @param string $protectArea protected path (i.e. /var/www -- needed for basedir restrictions)
|
||||
* @return void
|
||||
* @throws Exception raised if some path token cant be created
|
||||
*/
|
||||
public static function createDir($path, $protectArea) {
|
||||
[$extensionNameFromFile, $extPrefixedPath] = Typo3Lib::getExtNameFromOverrideFile($path);
|
||||
if (strpos($extensionNameFromFile, '-') !== FALSE) {
|
||||
$path = str_replace(
|
||||
$extensionNameFromFile,
|
||||
str_replace('-', '_', $extensionNameFromFile),
|
||||
$path
|
||||
);
|
||||
}
|
||||
if (!is_dir($path)) {
|
||||
$pathAsArray = explode('/', self::trimPath($protectArea, $path));
|
||||
$tmp = '';
|
||||
foreach ($pathAsArray as $dir) {
|
||||
$tmp .= $dir . '/';
|
||||
if (is_dir($protectArea . $tmp)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$concurrentDirectory = $protectArea . $tmp;
|
||||
GeneralUtility::mkdir_deep($concurrentDirectory);
|
||||
if (!is_dir($concurrentDirectory)) {
|
||||
throw new Exception('path "' . $protectArea . $tmp . '" can\'t be created.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* deletes a directory (all subdirectories and files will be deleted)
|
||||
*
|
||||
* @param string $path full path
|
||||
* @return void
|
||||
* @throws Exception raised if a file or directory cant be deleted
|
||||
*/
|
||||
public static function deleteDir($path) {
|
||||
if (!$dh = @opendir($path)) {
|
||||
throw new Exception('directory "' . $path . '" cant be readed');
|
||||
}
|
||||
|
||||
while ($file = readdir($dh)) {
|
||||
$myFile = $path . '/' . $file;
|
||||
|
||||
// ignore links and point directories
|
||||
if (preg_match('/\.{1,2}/', $file) || is_link($myFile)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_file($myFile)) {
|
||||
if (!unlink($myFile)) {
|
||||
throw new Exception('file "' . $myFile . '" cant be deleted');
|
||||
}
|
||||
} elseif (is_dir($myFile)) {
|
||||
SgLib::deleteDir($myFile);
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
|
||||
if (!@rmdir($path)) {
|
||||
throw new Exception('directory "' . $path . '" cant be deleted');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* searches defined files in a given path recursively
|
||||
*
|
||||
* @param string $path search in this path
|
||||
* @param string $searchRegex optional: regular expression for files
|
||||
* @param integer $pathDepth optional: current path depth level (max 9)
|
||||
* @return array
|
||||
* @throws Exception raised if the search directory cant be read
|
||||
*/
|
||||
public static function searchFiles($path, $searchRegex = '', $pathDepth = 0) {
|
||||
// endless recursion protection
|
||||
$fileArray = [];
|
||||
if ($pathDepth >= 9) {
|
||||
return $fileArray;
|
||||
}
|
||||
|
||||
// open directory
|
||||
if (!$fhd = @opendir($path)) {
|
||||
throw new Exception('directory "' . $path . '" cant be read');
|
||||
}
|
||||
|
||||
// iterate through the directory entries
|
||||
while ($file = readdir($fhd)) {
|
||||
$filePath = $path . '/' . $file;
|
||||
|
||||
// ignore links and special directories (. and ..)
|
||||
if (preg_match('/^\.{1,2}$/', $file) || is_link($filePath)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// if it's a file and not excluded by the search filter, we can add it
|
||||
// to the file array
|
||||
if (is_file($filePath)) {
|
||||
if ($searchRegex == '') {
|
||||
$fileArray[] = $filePath;
|
||||
} elseif (preg_match($searchRegex, $file)) {
|
||||
$fileArray[] = $filePath;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// next dir
|
||||
if (is_dir($filePath)) {
|
||||
$fileArray = array_merge(
|
||||
$fileArray,
|
||||
(array) SgLib::searchFiles($filePath, $searchRegex, $pathDepth + 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
closedir($fhd);
|
||||
|
||||
return $fileArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all available system languages defined in TYPO3
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getSystemLanguages() {
|
||||
/** @var Locales $locales */
|
||||
$locales = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Localization\Locales::class);
|
||||
$availableLanguageKeys = $locales->getLocales();
|
||||
|
||||
foreach ($availableLanguageKeys as $index => $language) {
|
||||
if ($language === 'default') {
|
||||
$availableLanguageKeys[$index] = 'default';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $availableLanguageKeys;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert special HTML characters to HTML entities, but ignores CDATA section.
|
||||
*
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public static function htmlSpecialCharsIgnoringCdata($value) {
|
||||
$cdataStart = strpos($value, '<![CDATA[');
|
||||
$cdataEnd = strpos($value, ']]>');
|
||||
if ($cdataStart !== FALSE && $cdataEnd !== FALSE) {
|
||||
$cdataEnd += 3;
|
||||
$valueBefore = substr($value, 0, $cdataStart);
|
||||
$cdataValue = substr($value, $cdataStart, $cdataEnd - $cdataStart);
|
||||
$valueAfter = substr($value, $cdataEnd, strlen($value) - $cdataEnd);
|
||||
$value = htmlspecialchars($valueBefore) . '<![CDATA[' . $cdataValue . ']]>'
|
||||
. htmlspecialchars($valueAfter);
|
||||
} else {
|
||||
$value = htmlspecialchars($value);
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if CDATA tag exists in string.
|
||||
*
|
||||
* @param string $value
|
||||
* @return bool
|
||||
*/
|
||||
public static function checkForCdataInString($value) {
|
||||
$cdataStart = strpos($value, '<![CDATA[');
|
||||
$cdataEnd = strpos($value, ']]>');
|
||||
return ($cdataStart !== FALSE && $cdataEnd !== FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes at end of PHP file, just before php closing tag or at the end of file if php closing tag does not exist.
|
||||
* If specified file does not exist, it will be crated.
|
||||
*
|
||||
* @param string $filePath
|
||||
* @param string $lineToAdd
|
||||
* @return void
|
||||
*/
|
||||
public static function appendToPHPFile($filePath, $lineToAdd) {
|
||||
if (!is_file($filePath)) {
|
||||
$emptyPhpFileContent = '<?php' . chr(0x0A) . '?>';
|
||||
file_put_contents($filePath, $emptyPhpFileContent);
|
||||
}
|
||||
$configuration = file_get_contents($filePath);
|
||||
if ($configuration === FALSE) {
|
||||
return;
|
||||
}
|
||||
$phpEndTagPosition = strrpos($configuration, '?>');
|
||||
if ($phpEndTagPosition) {
|
||||
$configuration = substr($configuration, 0, $phpEndTagPosition);
|
||||
} else {
|
||||
$configuration .= chr(0x0A);
|
||||
}
|
||||
$configuration .= chr(0x09) . $lineToAdd;
|
||||
if ($phpEndTagPosition) {
|
||||
$configuration .= chr(0x0A) . '?>';
|
||||
}
|
||||
file_put_contents($filePath, $configuration);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two strings ignoring \r character and seeing \n as <br /> in first string.
|
||||
*
|
||||
* @param array|string $string1
|
||||
* @param string $string2
|
||||
* @return bool
|
||||
*/
|
||||
public static function strCmpIgnoreCR($string1, $string2) {
|
||||
return is_string($string1) && str_replace("\r", '', $string1) === $string2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes meta tag '@attributes' to 'attributes', if it exists.
|
||||
*
|
||||
* @param array $origMeta
|
||||
*/
|
||||
public static function fixMetaAttributes(array &$origMeta) {
|
||||
if (isset($origMeta['@attributes'])) {
|
||||
$origMeta['attributes'] = $origMeta['@attributes'];
|
||||
unset($origMeta['@attributes']);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,186 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\Utility;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Core\Core\Environment;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
|
||||
|
||||
/**
|
||||
* includes special typo3 methods
|
||||
*/
|
||||
class Typo3Lib {
|
||||
/**
|
||||
* @deprecated since version 5, will be removed as soon as TYPO3 8 support is dropped
|
||||
*/
|
||||
public const PATH_LOCAL_EXT = 'typo3conf/ext/';
|
||||
|
||||
/**
|
||||
* @deprecated since version 5, will be removed as soon as TYPO3 8 support is dropped
|
||||
*/
|
||||
public const PATH_GLOBAL_EXT = 'typo3/ext/';
|
||||
|
||||
/**
|
||||
* @deprecated since version 5, will be removed as soon as TYPO3 8 support is dropped
|
||||
*/
|
||||
public const PATH_SYS_EXT = 'typo3/sysext/';
|
||||
|
||||
/**
|
||||
* @deprecated since version 5, will be removed as soon as TYPO3 8 support is dropped
|
||||
*/
|
||||
public const PATH_L10N = 'typo3conf/l10n/';
|
||||
|
||||
/**
|
||||
* checks the file location type
|
||||
*
|
||||
* @param string $file
|
||||
* @return string
|
||||
*/
|
||||
public static function checkFileLocation($file) {
|
||||
$pathExtensions = Environment::getExtensionsPath() . '/';
|
||||
|
||||
if (strpos($file, $pathExtensions) !== FALSE) {
|
||||
return 'local';
|
||||
}
|
||||
|
||||
if (strpos($file, self::PATH_GLOBAL_EXT) !== FALSE) {
|
||||
trigger_error(
|
||||
'The typo3/ext folder does not exist anymore, so this functionality will be dropped',
|
||||
E_USER_DEPRECATED
|
||||
);
|
||||
return 'global';
|
||||
}
|
||||
|
||||
$pathSysExtensions = Environment::getFrameworkBasePath() . '/';
|
||||
|
||||
if (strpos($file, $pathSysExtensions) !== FALSE) {
|
||||
return 'system';
|
||||
}
|
||||
|
||||
$pathL10N = Environment::getLabelsPath() . '/';
|
||||
|
||||
if (strpos($file, $pathL10N) !== FALSE) {
|
||||
return 'l10n';
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $fileRef Absolute path of the language file
|
||||
* @return string Absolute prefix to the language file location
|
||||
*/
|
||||
public static function getLocalizedFilePrefix($fileRef) {
|
||||
// Analyze file reference
|
||||
if (GeneralUtility::isFirstPartOfStr($fileRef, Environment::getFrameworkBasePath() . '/')) {
|
||||
// Is system
|
||||
$validatedPrefix = Environment::getFrameworkBasePath() . '/';
|
||||
} elseif (GeneralUtility::isFirstPartOfStr($fileRef, Environment::getBackendPath() . '/ext/')) {
|
||||
// Is global
|
||||
$validatedPrefix = Environment::getBackendPath() . '/ext/';
|
||||
} elseif (GeneralUtility::isFirstPartOfStr($fileRef, Environment::getExtensionsPath() . '/')) {
|
||||
// Is local
|
||||
$validatedPrefix = Environment::getExtensionsPath() . '/';
|
||||
} else {
|
||||
$validatedPrefix = '';
|
||||
}
|
||||
|
||||
return $validatedPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string Absolute path to the l10n directory
|
||||
*/
|
||||
public static function getLabelsPath() {
|
||||
return Environment::getLabelsPath() . '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* converts an absolute or relative typo3 style (EXT:) file path
|
||||
*
|
||||
* @param string $file absolute file or an typo3 relative file (EXT:)
|
||||
* @param boolean $absolute generate to relative(false) or absolute file
|
||||
* @return string converted file path
|
||||
*
|
||||
* @throws \Exception Conversion of file path failed
|
||||
*/
|
||||
public static function transTypo3File($file, $absolute) {
|
||||
$path = GeneralUtility::getFileAbsFileName($file);
|
||||
if (!$absolute) {
|
||||
$fileLocation = self::checkFileLocation($path);
|
||||
if ($fileLocation === 'local') {
|
||||
$pathToRemove = Environment::getExtensionsPath() . '/';
|
||||
} elseif ($fileLocation === 'system') {
|
||||
$pathToRemove = Environment::getFrameworkBasePath() . '/';
|
||||
} else {
|
||||
throw new \Exception('Can not convert absolute file "' . $file . '"');
|
||||
}
|
||||
|
||||
$path = 'EXT:' . SgLib::trimPath($pathToRemove, $path);
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts an absolute or relative typo3 style (EXT:) file path
|
||||
*
|
||||
* @param string $file absolute file or an typo3 relative file (EXT:)
|
||||
* @return array converted file path
|
||||
*
|
||||
* @throws \Exception Conversion of file path failed
|
||||
*/
|
||||
public static function getExtNameFromOverrideFile($file) {
|
||||
$absoluteWebPath = Environment::getPublicPath();
|
||||
$prefixedWithSettingsPath = str_replace($absoluteWebPath, '', $file);
|
||||
$alreadyExtPrefixedPath = str_replace('/typo3conf/LFEditor/OverrideFiles/', '', $prefixedWithSettingsPath);
|
||||
$extName = explode('/', $alreadyExtPrefixedPath)[0];
|
||||
return [$extName, 'EXT:' . $alreadyExtPrefixedPath];
|
||||
}
|
||||
|
||||
/**
|
||||
* generates portable file paths
|
||||
*
|
||||
* @param string $file file
|
||||
* @return string fixed file
|
||||
*/
|
||||
public static function fixFilePath($file) {
|
||||
return GeneralUtility::fixWindowsFilePath(str_replace('//', '/', $file));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds configuration line to AdditionalConfiguration file.
|
||||
*
|
||||
* @param string $configLine line to be added.
|
||||
* @param string $additionalConfigurationFilePath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function writeLineToAdditionalConfiguration($configLine, $additionalConfigurationFilePath) {
|
||||
SgLib::appendToPHPFile($additionalConfigurationFilePath, $configLine);
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Core\Page\PageRenderer;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper;
|
||||
|
||||
/**
|
||||
* Abstract view helper
|
||||
*/
|
||||
class AbstractViewHelper extends AbstractBackendViewHelper {
|
||||
/**
|
||||
* Returns an instance of the page renderer
|
||||
*
|
||||
* @return PageRenderer
|
||||
*/
|
||||
public function getPageRenderer() {
|
||||
return GeneralUtility::makeInstance(PageRenderer::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base url of the site
|
||||
*
|
||||
* Note: Works only in frontend mode
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBaseUrl() {
|
||||
if ($GLOBALS['TSFE']->absRefPrefix !== '') {
|
||||
$baseUrl = $GLOBALS['TSFE']->absRefPrefix;
|
||||
} else {
|
||||
$baseUrl = $GLOBALS['TSFE']->baseUrl;
|
||||
}
|
||||
|
||||
return $baseUrl;
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
/**
|
||||
* View helper to add custom css files
|
||||
*
|
||||
* Example:
|
||||
* {namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
* <lfe:addCssFile cssFile="{f:uri.resource(path: 'StyleSheets/Frontend.css')}" />
|
||||
*/
|
||||
class AddCssFileViewHelper extends AbstractViewHelper {
|
||||
/**
|
||||
* Register the ViewHelper arguments
|
||||
*/
|
||||
public function initializeArguments() {
|
||||
parent::initializeArguments();
|
||||
$this->registerArgument('cssFile', 'string', 'The css file to include', TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom css file
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function render() {
|
||||
$cssFile = (\TYPO3\CMS\Core\Http\ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend() ? $this->getBaseUrl() : '') . $this->arguments['cssFile'];
|
||||
$this->getPageRenderer()->addCssFile($cssFile, 'stylesheet', 'all', '', FALSE);
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
/**
|
||||
* View helper to add custom javascript files
|
||||
*
|
||||
* Example:
|
||||
* {namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
* <lfe:addJavaScriptFile javaScriptFile="{f:uri.resource(path: 'Scripts/Frontend.js')}" />
|
||||
*/
|
||||
class AddJavaScriptFileViewHelper extends AbstractViewHelper {
|
||||
/**
|
||||
* Register the ViewHelper arguments
|
||||
*/
|
||||
public function initializeArguments() {
|
||||
parent::initializeArguments();
|
||||
$this->registerArgument('javaScriptFile', 'string', 'The JavaScript file to include', TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom javascript file
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function render() {
|
||||
$javaScriptFile = (\TYPO3\CMS\Core\Http\ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend() ? $this->getBaseUrl() : '') . $this->arguments['javaScriptFile'];
|
||||
$this->getPageRenderer()->addJsFile($javaScriptFile);
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers\Be\Menus;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
|
||||
|
||||
/**
|
||||
* Class ActionMenuOptionGroupViewHelper
|
||||
*/
|
||||
class ActionMenuOptionGroupViewHelper extends AbstractTagBasedViewHelper {
|
||||
/**
|
||||
* Initialize
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function initializeArguments() {
|
||||
parent::initializeArguments();
|
||||
$this->tagName = 'optgroup';
|
||||
$this->registerUniversalTagAttributes();
|
||||
$this->registerTagAttribute('label', 'string', 'Specifies a label for an option-group');
|
||||
$this->registerTagAttribute('disabled', 'string', 'Specifies that an option-group should be disabled');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function render() {
|
||||
$this->tag->setContent($this->renderChildren());
|
||||
return $this->tag->render();
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers\Be\Menus;
|
||||
|
||||
/**
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
*/
|
||||
|
||||
use TYPO3Fluid\Fluid\Core\Compiler\TemplateCompiler;
|
||||
use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode;
|
||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
|
||||
|
||||
/**
|
||||
* View helper which returns a select box, that can be used to switch between
|
||||
* multiple actions and controllers and looks similar to TYPO3s funcMenu.
|
||||
* Note: This view helper is experimental!
|
||||
*
|
||||
* = Examples =
|
||||
*
|
||||
* <code title="Simple">
|
||||
* <f:be.menus.actionMenu>
|
||||
* <f:be.menus.actionMenuItem label="Overview" controller="Blog" action="index" />
|
||||
* <f:be.menus.actionMenuItem label="Create new Blog" controller="Blog" action="new" />
|
||||
* <f:be.menus.actionMenuItem label="List Posts" controller="Post" action="index" arguments="{blog: blog}" />
|
||||
* </f:be.menus.actionMenu>
|
||||
* </code>
|
||||
* <output>
|
||||
* Selectbox with the options "Overview", "Create new Blog" and "List Posts"
|
||||
* </output>
|
||||
*
|
||||
* <code title="Localized">
|
||||
* <f:be.menus.actionMenu>
|
||||
* <f:be.menus.actionMenuItem label="{f:translate(key:'overview')}" controller="Blog" action="index" />
|
||||
* <f:be.menus.actionMenuItem label="{f:translate(key:'create_blog')}" controller="Blog" action="new" />
|
||||
* </f:be.menus.actionMenu>
|
||||
* </code>
|
||||
* <output>
|
||||
* localized selectbox
|
||||
* <output>
|
||||
*/
|
||||
class ActionMenuViewHelper extends AbstractTagBasedViewHelper {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $tagName = 'select';
|
||||
|
||||
/**
|
||||
* An array of \TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $childNodes = [];
|
||||
|
||||
/**
|
||||
* Initialize arguments.
|
||||
*
|
||||
* @return void
|
||||
* @throws \TYPO3Fluid\Fluid\Core\ViewHelper\Exception
|
||||
*/
|
||||
public function initializeArguments(): void {
|
||||
parent::initializeArguments();
|
||||
$this->registerArgument('defaultController', 'string', 'defaultController');
|
||||
}
|
||||
|
||||
/**
|
||||
* Render FunctionMenu
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render(): string {
|
||||
$this->tag->addAttribute('onchange', 'jumpToUrl(this.options[this.selectedIndex].value, this);');
|
||||
$options = '';
|
||||
foreach ($this->childNodes as $childNode) {
|
||||
$options .= $childNode->evaluate($this->renderingContext);
|
||||
}
|
||||
$this->tag->setContent($options);
|
||||
return $this->tag->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $argumentsName
|
||||
* @param string $closureName
|
||||
* @param string $initializationPhpCode
|
||||
* @param ViewHelperNode $node
|
||||
* @param TemplateCompiler $compiler
|
||||
* @return string
|
||||
*/
|
||||
public function compile(
|
||||
$argumentsName,
|
||||
$closureName,
|
||||
&$initializationPhpCode,
|
||||
ViewHelperNode $node,
|
||||
TemplateCompiler $compiler
|
||||
) {
|
||||
// @TODO: replace with a true compiling method to make compilable!
|
||||
$compiler->disable();
|
||||
/** @noinspection PhpUnreachableStatementInspection */
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SGalinski\Lfeditor\ViewHelpers;
|
||||
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the AY project. The AY project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
|
||||
|
||||
/**
|
||||
* View helper to render language labels to
|
||||
* json array to be used in js applications.
|
||||
*
|
||||
* Renders to AY.lang.'extension name' object
|
||||
*
|
||||
* Example:
|
||||
* {namespace rs=SGalinski\RsEvents\ViewHelpers}
|
||||
* <rs:inlineLanguageLabels labels="label01,label02" />
|
||||
*/
|
||||
class InlineLanguageLabelsViewHelper extends AbstractViewHelper {
|
||||
public function initializeArguments() {
|
||||
parent::initializeArguments();
|
||||
$this->registerArgument('labels', 'mixed', 'Comma separated list of label keys to include', FALSE, []);
|
||||
$this->registerArgument('htmlEscape', 'bool', 'Escape the output', FALSE, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the required javascript to make the language labels available
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render(): string {
|
||||
$labels = $this->arguments['labels'];
|
||||
$htmlEscape = $this->arguments['htmlEscape'];
|
||||
$controllerContext = $this->renderingContext->getControllerContext();
|
||||
$extensionName = $controllerContext->getRequest()->getControllerExtensionName();
|
||||
if (\is_string($labels)) {
|
||||
$labels = GeneralUtility::trimExplode(',', $labels, TRUE);
|
||||
}
|
||||
|
||||
if (!\is_array($labels)) {
|
||||
throw new \InvalidArgumentException(
|
||||
'The argument "labels" was registered with type "array|string", but is of type "' .
|
||||
\gettype($labels) . '" in view helper "' . \get_class($this) . '".',
|
||||
1256475113
|
||||
);
|
||||
}
|
||||
|
||||
$languageArray = [];
|
||||
foreach ($labels as $key) {
|
||||
$value = LocalizationUtility::translate($key, $extensionName);
|
||||
$languageArray[$key] = ($htmlEscape ? \htmlentities($value) : $value);
|
||||
}
|
||||
|
||||
$javascriptCode = '
|
||||
var AY = AY || {};
|
||||
AY.lang = AY.lang || {};
|
||||
AY.lang.' . $extensionName . ' = AY.lang.' . $extensionName . ' || {};
|
||||
var languageLabels = ' . \json_encode($languageArray) . ';
|
||||
for (label in languageLabels) {
|
||||
AY.lang.' . $extensionName . '[label] = languageLabels[label];
|
||||
}
|
||||
';
|
||||
|
||||
$this->getPageRenderer()->addJsInlineCode($extensionName, $javascriptCode);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'lfeditor::ajaxPing' => [
|
||||
'path' => '/lfeditor/ajaxPing',
|
||||
'target' => SGalinski\Lfeditor\Service\LicensingService::class . '::ajaxPing',
|
||||
]
|
||||
];
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('TYPO3') or die();
|
||||
/***************************************************************
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) sgalinski Internet Services (https://www.sgalinski.de)
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
$fieldDefinition = [
|
||||
'lfeditor_change_editing_modes' => [
|
||||
'exclude' => TRUE,
|
||||
'label' => 'LLL:EXT:lfeditor/Resources/Private/Language/locallang_mod.xlf:mlang_tabs_tab',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
'items' => [
|
||||
'1' => [
|
||||
'0' => 'LLL:EXT:lfeditor/Resources/Private/Language/locallang_mod.xlf:settings_canChangeEditingMode'
|
||||
]
|
||||
]
|
||||
],
|
||||
'displayCond' => 'FIELD:admin:REQ:FALSE',
|
||||
]
|
||||
];
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
|
||||
'be_users',
|
||||
'lfeditor_change_editing_modes',
|
||||
'',
|
||||
'after:allowed_languages'
|
||||
);
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('be_users', $fieldDefinition);
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette(
|
||||
'be_users',
|
||||
'lfeditor',
|
||||
'lfeditor_change_editing_modes',
|
||||
'after:allowed_languages'
|
||||
);
|
||||
@@ -1,28 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
================ ========================================================================== ============================
|
||||
Name Description Default value
|
||||
================ ========================================================================== ============================
|
||||
viewLanguages List of languages which will be available in the extension -
|
||||
(comma separated short names e.g. da, de, fi).
|
||||
If field is empty all languages will be used (Warning: very long list!).
|
||||
Default language is always included.
|
||||
defaultLanguage If 'en' is not default language in TYPO3 BE, -
|
||||
default language must be defined here (e.g. de). If this field is empty,
|
||||
English is used as default.
|
||||
extIgnore Regular expression which limits the extension key list. /^(CVS|.svn|.git|csh_)/
|
||||
extWhitelist Regular expression which restricts the extension key list. -
|
||||
changeXlfDate If set to TRUE, LFEditor will change the date in XLF files on each change. 1
|
||||
================ ========================================================================== ============================
|
||||
|
||||
Administrator can choose which backend users can save localization changes directly to extensions,
|
||||
by selecting checkbox "The user can save localization changes directly to extensions?" when editing non-admin BE user.
|
||||
The box is located in "Access Rights" tab, just after "Limit to languages" section of non-admin BE user.
|
||||
Backend users who don't have this check box selected will be in override mode by default,
|
||||
and they can't switch to another mode.
|
||||
@@ -1,55 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Editing modes
|
||||
-------------
|
||||
|
||||
There are three editing modes:
|
||||
|
||||
- Extension mode
|
||||
- l10n mode
|
||||
- Override mode
|
||||
|
||||
They can be chosen from rightmost select menu on top of the screen.
|
||||
The select menu is visible only for administrators. If user is not admin, than override mode is chosen by default.
|
||||
For administrators, default is extension mode.
|
||||
|
||||
Extension mode
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
This mode is useful for extension developers because in this mode, LFEditor edits extension files directly.
|
||||
|
||||
Even if copies of extension files exist in l10n folder, or extension files are overridden,
|
||||
user will still edit extension files only.
|
||||
|
||||
l10n mode
|
||||
^^^^^^^^^
|
||||
|
||||
This mode is similar to extension mode, but only difference is that l10n directory has higher priority than
|
||||
extension directory. This means that if there is a copy of the language file in l10n folder (e.g. de.locallang),
|
||||
that copy will be edited instead of original extension file. If there is no corresponding file in l10n folder,
|
||||
original file will be edited.
|
||||
|
||||
Here are some of characteristics of l10n mode:
|
||||
|
||||
- Files can't be moved to l10n folder by LFE. They can be edited if they already exist in l10n folder.
|
||||
- Merging/splitting is not allowed in l10n mode.
|
||||
- Renaming of constant will make renaming in main lang file (e.g. ext/.../locallang) and in all sub-files in l10n (e.g. l10n/.../de.locallang) and in ext folder (if those files from ext folder don't have duplicate in l10n folder( e.g. ext/.../fi.locallang)). Consequence of this is file ext/.../de.locallang having old constant name.
|
||||
- Delete and add file work similar like rename in l10n mode.
|
||||
|
||||
Override mode
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
Purpose of this mode is making translations resistant to changes in extension
|
||||
(e.g. when extension updates, translations will be preserved). Thus, this mode is useful for translators,
|
||||
and it is set as default and only mode for non-admin users.
|
||||
|
||||
- Whenever user makes any change in some language file, only changed constants (or meta data) will be saved in corresponding language file in 'typo3conf\LFEditor\OverrideFiles'.
|
||||
|
||||
- When reading language file, LFEditor is first reading constants from files in override folder, then it reads rest of constants from l10n folder (if there is corresponding file in l10n folder), and then reads from ext folder (if there was no file in l10n folder).
|
||||
|
||||
.. important::
|
||||
All the changes (edit/add/delete/rename constant) to language file will be saved in override files only.
|
||||
Original extension files will stay unchanged.
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,60 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
.. _start:
|
||||
|
||||
============
|
||||
EXT:lfeditor
|
||||
============
|
||||
|
||||
.. only:: html
|
||||
|
||||
:Classification:
|
||||
lfeditor
|
||||
|
||||
:Author:
|
||||
Stefan Galinski, Damjan Komlenac
|
||||
|
||||
:Version:
|
||||
|release|
|
||||
|
||||
:Language:
|
||||
en
|
||||
|
||||
:Description:
|
||||
This extension serves several functions for editing of language files (edit/rename/add/delete)
|
||||
and supports XLF, XML, PHP language file formats.
|
||||
The extension differs between editors and administrators with appropriate privileges.
|
||||
Normal users are allowed to edit only languages for which they have permission.
|
||||
Content of l10n folder can be edited and typo3 override feature is supported by this extension.
|
||||
|
||||
:Keywords:
|
||||
localization, translation, language file, locallang, xlf
|
||||
|
||||
:Email:
|
||||
stefan@sgalinski.de
|
||||
|
||||
:License:
|
||||
This document is published under the Open Content License
|
||||
available from http://www.opencontent.org/opl.shtml
|
||||
|
||||
:Rendered:
|
||||
|today|
|
||||
|
||||
The content of this document is related to TYPO3,
|
||||
a GNU/GPL CMS/Framework available from `www.typo3.org <http://www.typo3.org/>`_.
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Introduction/Index
|
||||
MainMenuOptions/Index
|
||||
EditingModes/Index
|
||||
Configuration/Index
|
||||
KnownProblemsAndHints/Index
|
||||
@@ -1,29 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
LFEditor TYPO3 extension makes editing of language files fast and easy.
|
||||
It allows editing, renaming, adding and deleting of language constant and
|
||||
gives a good overview of your language files. The TYPO3 language file override feature is supported.
|
||||
Users can override existing language files of extensions and even of the TYPO3 environment,
|
||||
making their translations independent of the original extensions and resistant to extension updates.
|
||||
|
||||
Features:
|
||||
"""""""""
|
||||
|
||||
* Supported language file formats: XLF (preferred), XML (most stable) and PHP (outdated)
|
||||
* Conversion of formats
|
||||
* Splitting and merging of language files
|
||||
* Override mode
|
||||
* Editing of the TYPO3 l10n folder
|
||||
* Simple editing of constants and languages (edit/add/rename/delete constants)
|
||||
* Flexible search and view of constants and values
|
||||
* Tree view of constants
|
||||
* Meta information handling
|
||||
* Backups, recovering and diff view
|
||||
* Differs editors and administrators with appropriate privileges
|
||||
* Respects user language permissions
|
||||
@@ -1,10 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Known Problems And Hints
|
||||
------------------------
|
||||
|
||||
Problems can be viewed and reported on `forge <http://forge.typo3.org/projects/extension-lfeditor/issues>`_. You
|
||||
can find the code on our `gitlab <http://gitlab.sgalinski.de/typo3/lfeditor>`_.
|
||||
@@ -1,13 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Add Constant
|
||||
------------
|
||||
|
||||
This option serves for adding new constants to language files.
|
||||
The user needs to enter a new name and translations for chosen languages can also be entered right away.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/AddConstant/AddConstant.png
|
||||
:alt: AddConstant
|
||||
@@ -1,12 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Delete Constant
|
||||
---------------
|
||||
|
||||
This option allows user to delete a selected constant. The constant will be deleted from all languages.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/DeleteConstant/DeleteConstant.png
|
||||
:alt: DeleteConstant
|
||||
@@ -1,15 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
.. _edit-constant-reference:
|
||||
|
||||
Edit Constant
|
||||
-------------
|
||||
|
||||
This option serves for translating a single constant in several languages.
|
||||
Available languages depend of user language privileges and of the configured "view languages".
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/EditConstant/EditConstant.png
|
||||
:alt: EditConstant
|
||||
@@ -1,24 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
.. _edit-file-reference:
|
||||
|
||||
Edit File
|
||||
---------
|
||||
|
||||
This option allows editing of all constants in a language file and a selected language.
|
||||
Users can choose between translated, untranslated, unknown or all constants.
|
||||
This whole dialog is handled by a session. This means that a user can translate a whole page and doesn't need to
|
||||
save the changes before clicking on 'next' button to get the next page with language constants.
|
||||
If the translation process is finished or user just wants to make a break, the changes should be saved.
|
||||
|
||||
Parallel editing is nice feature which allows editing two languages at the same time.
|
||||
It is triggered by selecting languages in both language selection lists in section "Select up to two languages".
|
||||
Section "Select reference language" allows user to chose which language will be used as reference for translating.
|
||||
Reference language translations are shown beneath each text box.
|
||||
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/EditFile/EditFile.png
|
||||
:alt: EditFile
|
||||
@@ -1,27 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
.. _general-reference:
|
||||
|
||||
General
|
||||
-------
|
||||
|
||||
This option displays general information about several languages.
|
||||
Displayed languages should be configured in the configuration section of LFEditor,
|
||||
because default behavior of LFEditor for administrators is to displays all existing translation languages of TYPO3.
|
||||
While non-admin users see only languages which they have permissions for.
|
||||
|
||||
Beside the language shortcut, there is state and origin of the related language file.
|
||||
Clicking any language shortcut redirects to :ref:`Edit File <edit-file-reference>` page for this language.
|
||||
Column ‘state‘ shows the state of translation and contains number of translated, unknown and untranslated language constants.
|
||||
Unknown constants are the ones which exist in the language, and don’t exist in default language.
|
||||
|
||||
At the bottom of this page there are options for converting and splitting language files.
|
||||
Those options are not displayed in override mode and it is not possible to merge XLF files.
|
||||
Splitting of language files increases the performance of backend and frontend.
|
||||
There is also a field set which allows editing of meta information of language files.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/General/General.png
|
||||
:alt: General
|
||||
@@ -1,38 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Main Menu Options
|
||||
-----------------
|
||||
|
||||
Main navigation through LFEditor is done by selecting one of the options of drop down menu (main menu)
|
||||
on top-left part of the screen (frame).
|
||||
Main menu options are described in following sections of this chapter.
|
||||
|
||||
.. figure:: ../Images/MainMenuOptions/MainMenu.png
|
||||
:alt: MainMenu
|
||||
|
||||
Page of each main menu option (except backup option) contains selection list of all available language files in typo3 CMS,
|
||||
sorted by belonging extension. First time opening the extension might take few seconds to find all the language files,
|
||||
but after that, the file list is cached and loading goes fast.
|
||||
If language files are added or removed (not by LFEditor) from TYPO3 CMS, user should flush general caches,
|
||||
to force LFEditor to read new list of language files.
|
||||
|
||||
After each "Save" operation, LFEditor will automatically clear language cache, so the changes can be visible immediately
|
||||
when user opens the page which uses changed language file.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
General/Index
|
||||
EditFile/Index
|
||||
EditConstant/Index
|
||||
AddConstant/Index
|
||||
DeleteConstant/Index
|
||||
RenameConstant/Index
|
||||
SearchConstant/Index
|
||||
ViewTree/Index
|
||||
ManageBackups/Index
|
||||
@@ -1,22 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Manage Backups
|
||||
--------------
|
||||
|
||||
The backup option displays all backups of the selected extension.
|
||||
It is possible to recover every backup, delete them or just have a look at the differences.
|
||||
User can revert splitting and merging of files too. Conversions of the file format are not revertible.
|
||||
If language file was converted to other format, there will be red warning in status of the backup table entry
|
||||
and that backup can only be deleted.
|
||||
|
||||
All changes since the backup are visible trough 'differences' functionality.
|
||||
Green color means that the constant was added and red that it was deleted since the backup was made.
|
||||
Example at the bottom of this section shows that user have made changes in value of 'button.cancel' constant,
|
||||
and old value of the constant is shown. If restore is executed, that old value will replace current value
|
||||
(which is not visible in difference view of backup).
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/ManageBackups/ManageBackups.png
|
||||
:alt: Manage Backups
|
||||
@@ -1,13 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Rename Constant
|
||||
---------------
|
||||
|
||||
This option serves for renaming the key of existing language constant.
|
||||
Constant to rename is chosen from select list, and then new name is entered in text field.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/RenameConstant/RenameConstant.png
|
||||
:alt: RenameConstant
|
||||
@@ -1,26 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
Search Constant
|
||||
---------------
|
||||
|
||||
This option allows a user to search for constants in selected language files.
|
||||
|
||||
- Finds constants which match the search string within key or value (translation).
|
||||
- The matching can be case sensitive or insensitive.
|
||||
- Supports regular expressions.
|
||||
- Looks only among subset of languages which is defined in LFEditor configuration.
|
||||
|
||||
Clicking on constant key of any search result, redirects to :ref:`Edit Constant <edit-constant-reference>` page.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/SearchConstant/SearchConstant.png
|
||||
:alt: SearchConstant
|
||||
|
||||
Picture illustrates case sensitive search for string 'Cancel'.
|
||||
The search has found the string in 2 language constants:
|
||||
|
||||
- as value of button.cancel constant in default language,
|
||||
- as part of constant key of function.langfile.confirmCancel constant in default and in 'de' languages,
|
||||
since there is no more languages that contain translation for this constant key in this example.
|
||||
@@ -1,23 +0,0 @@
|
||||
.. ==================================================
|
||||
.. FOR YOUR INFORMATION
|
||||
.. --------------------------------------------------
|
||||
.. -*- coding: utf-8 -*- with BOM.
|
||||
|
||||
View Tree
|
||||
---------
|
||||
|
||||
This option serves for overview and easier access to constants.
|
||||
It displays all constants of language file arranged in a tree.
|
||||
Constants are displayed as leafs of the tree, and they are colored in three colors which indicate translation state
|
||||
of each constant for selected language (language from first select box).
|
||||
The state is calculated in same way like on :ref:`General <general-reference>` page. Constants are compared to language from second select box,
|
||||
resulting in three states:
|
||||
|
||||
- green - normal constant (translated in both languages)
|
||||
- red - untranslated constant (translated only in second language)
|
||||
- blue - unknown constant (translated only in first language)
|
||||
|
||||
Clicking on tree leaf (last segment of constant key) redirects to :ref:`Edit Constant <edit-constant-reference>` page.
|
||||
|
||||
.. figure:: ../../Images/MainMenuOptions/ViewTree/ViewTree.png
|
||||
:alt: ViewTree
|
||||
@@ -1,200 +0,0 @@
|
||||
# Ext: lfeditor
|
||||
|
||||
<img src="https://www.sgalinski.de/typo3conf/ext/project_theme/Resources/Public/Images/logo.svg" />
|
||||
|
||||
License: [GNU GPL, Version 2](https://www.gnu.org/licenses/gpl-2.0.html)
|
||||
|
||||
Repository: https://gitlab.sgalinski.de/typo3/lfeditor
|
||||
|
||||
Please report bugs here: https://gitlab.sgalinski.de/typo3/lfeditor
|
||||
|
||||
## About
|
||||
|
||||
The lfeditor is a GUI for adding, editing and deleting translations in .xlf, .xml and .php files.
|
||||
|
||||
**XML** and **PHP** files can be converted to .xlf files.
|
||||
|
||||
The editor can be found in the
|
||||
**user tool section** of the TYPO3 backend (click on your user in the top panel and select LFEditor).
|
||||
|
||||
## Configuration
|
||||
|
||||
#### Extension Settings
|
||||
In the Extension manager you can configure the following settings of the **lfeditor** extension:
|
||||
|
||||
###### View languages
|
||||
List of languages which will be available in the extension (comma separated country codes e.g. en, de, fi).
|
||||
|
||||
If this setting is empty, all languages will be used (Warning: very long list!). Default language is always included.
|
||||
|
||||
---
|
||||
|
||||
###### Default language
|
||||
If **en** is not the default language in TYPO3 backend, the default language must be defined here. If this field is empty,
|
||||
English is used as default.
|
||||
|
||||
---
|
||||
|
||||
###### Ignore extensions
|
||||
Regular expression which can be used to exclude extensions by their extension key.
|
||||
|
||||
---
|
||||
|
||||
###### Change XLF date
|
||||
If set to TRUE, LFEditor will change the date in the files on each change.
|
||||
|
||||
#### Extension Settings
|
||||
There is an additional option in the **Access Rights** tab on the very bottom, when editing a non-admin backend user.
|
||||
You can now select the **The user can save localization changes directly to extensions?**.
|
||||
|
||||
Backend users who don't have this check box selected, will be in override mode by default
|
||||
and they can't switch to another mode.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
### The Menu
|
||||
Main navigation through LFEditor is done by selecting one of the options of drop down menu
|
||||
on top-left part of the screen.
|
||||
|
||||
###### General
|
||||
This option displays general information about all the languages.
|
||||
|
||||
Displayed languages should be configured in the configuration section of LFEditor,
|
||||
because default behavior of LFEditor for administrators is to displays all existing translation languages of TYPO3.
|
||||
While non-admin users see only languages which they have permissions for.
|
||||
|
||||
Beside the language shortcut, there is state and origin of the related language file.
|
||||
Clicking any language shortcut redirects to the **Edit File <edit-file-reference>** page for this language.
|
||||
|
||||
The column *state* shows the state of translation and contains the amount of translated, unknown and untranslated language constants.
|
||||
Unknown constants are the ones which exist in the language and don’t exist in default language.
|
||||
|
||||
At the bottom of the page there are options for converting and splitting language files.
|
||||
Those options are not displayed in override mode and it is not possible to merge your files.
|
||||
Splitting of language files increases the performance of backend and frontend.
|
||||
There is also a field set which allows editing of the meta information of language files.
|
||||
|
||||
---
|
||||
|
||||
###### Edit File
|
||||
This option allows editing of all constants in a language file and a selected language.
|
||||
Users can choose between translated, untranslated, unknown or all constants.
|
||||
|
||||
This whole dialog is handled by a session. This means that a user can translate a whole page and doesn't need to
|
||||
save the changes before clicking on 'next' button to get the next page with language constants.
|
||||
|
||||
---
|
||||
|
||||
###### Edit Constant
|
||||
This option serves for translating a single constant in several languages.
|
||||
Available languages depend on the user language privileges and on the configured "view languages".
|
||||
|
||||
---
|
||||
|
||||
###### Add Constant
|
||||
This option serves for adding new constants to language files.
|
||||
The user needs to enter a new name and translations for chosen languages can be entered right away.
|
||||
|
||||
---
|
||||
|
||||
###### Delete Constant
|
||||
This option allows the user to delete a selected constant. The constant will be deleted from all languages.
|
||||
|
||||
---
|
||||
|
||||
###### Rename Constant
|
||||
This option serves for renaming the key of a existing language constant.
|
||||
The constant to rename is chosen from a select list and then the new name is entered in text field.
|
||||
|
||||
---
|
||||
|
||||
###### Search constants
|
||||
This option allows the user to search for constants in selected language files.
|
||||
|
||||
- Finds constants which match the search string within a key or value (translation).
|
||||
- The matching can be case sensitive or insensitive
|
||||
- Supports regular expressions
|
||||
- Looks only among a subset of languages which is defined in the **lfeditor** extension configuration
|
||||
|
||||
Clicking on a constant key of any search result, redirects to the **Edit Constant <edit-constant-reference>** page.
|
||||
|
||||
---
|
||||
|
||||
###### View Tree
|
||||
This option serves for a better overview and easier access to constants.
|
||||
It displays all constants of a language file arranged in a tree.
|
||||
|
||||
Constants are displayed as leafs of the tree and they are colored in three colors which indicate the translation state
|
||||
of each constant for a selected language (language from first select box).
|
||||
|
||||
Constants are compared to a language from the second select box,
|
||||
resulting in three states:
|
||||
|
||||
- **green** - normal constant (translated in both languages)
|
||||
- **red** - untranslated constant (translated only in second language)
|
||||
- **blue** - unknown constant (translated only in first language)
|
||||
|
||||
Clicking on tree leaf (last segment of constant key) redirects to the **Edit Constant <edit-constant-reference>** page.
|
||||
|
||||
---
|
||||
|
||||
###### Manage Backups
|
||||
The backup option displays all backups of the selected extension.
|
||||
It is possible to recover every backup, delete them or just have a look at the differences.
|
||||
User can revert splitting and merging of files too.
|
||||
|
||||
**Conversions of the file format are not revertible**.
|
||||
|
||||
If language file was converted to other format, there will be red warning in status of the backup table entry
|
||||
and that backup can only be deleted.
|
||||
|
||||
All changes since the backup are visible trough the **differences** functionality.
|
||||
Green color means that the constant was added and red that it was deleted since the backup was made.
|
||||
|
||||
### Editing modes
|
||||
There are three editing modes:
|
||||
|
||||
- Extension mode
|
||||
- l10n mode
|
||||
- Override mode
|
||||
|
||||
They can be chosen from rightmost select menu on top of the screen.
|
||||
The select menu is visible only for administrators.
|
||||
|
||||
If the user is not an admin, **Override mode** is chosen by default. For administrators the default is the **Extension mode**.
|
||||
|
||||
###### Extension mode
|
||||
This mode is useful for extension developers, because in this mode the **lfeditor** edits the extension files directly.
|
||||
Even if copies of extension files exist in l10n folder or extension files are overridden,
|
||||
**lfeditor** will still edit the extension files only.
|
||||
|
||||
---
|
||||
|
||||
###### l10n mode
|
||||
This mode is similar to extension mode with the only difference being that the l10n directory has higher priority than the
|
||||
extension directory. This means that if there is a copy of the language file in l10n folder (e.g. de.locallang),
|
||||
that copy will be edited instead of original extension file. If there is no corresponding file in l10n folder the original file will be edited.
|
||||
|
||||
Here are some of characteristics of l10n mode:
|
||||
|
||||
- Files can't be moved to the l10n folder. They can be edited if they already exist in l10n folder
|
||||
- Merging/splitting is not allowed in l10n mode
|
||||
- Renaming of a constant will rename it in the main language file (e.g. ext/.../locallang)
|
||||
and in all subfiles in the **l10n** (e.g. l10n/.../de.locallang) and **ext** folder
|
||||
- Deleting and adding files work similar to renaming
|
||||
|
||||
---
|
||||
|
||||
###### Override mode
|
||||
The purpose of this mode is making translations unaffected by changes in an extension
|
||||
(e.g. when extension updates the translations will be preserved). This mode is useful for translators and is the only mode available for non-admin users.
|
||||
|
||||
- If a user makes any changes in a language file, only the changed constants (or meta data) will be saved in the corresponding language file in **typo3confLFEditorOverrideFiles**
|
||||
- When reading language file, LFEditor is first reading constants from files in override folder,
|
||||
then it reads rest of constants from l10n folder (if there is corresponding file in l10n folder), and then reads from ext folder (if there was no file in l10n folder).
|
||||
|
||||
###### Note for switch to v4 of v4 of typo3/cms-composer-installers:
|
||||
|
||||
If you do switch to new composer installer, you will have to rename your Overridesfolder to use "-" instead of "_",
|
||||
since the naming scheme is different.
|
||||
@@ -1,518 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="da" datatype="plaintext" original="messages" date="2015-02-17T12:41:07Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="button.cancel" approved="yes">
|
||||
<source>Cancel</source>
|
||||
<target>Afbryd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.delete" approved="yes">
|
||||
<source>Delete</source>
|
||||
<target>Slet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.rename" approved="yes">
|
||||
<source>Rename</source>
|
||||
<target>Omdøb</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.save" approved="yes">
|
||||
<source>Save</source>
|
||||
<target>Gem</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.search" approved="yes">
|
||||
<source>Search</source>
|
||||
<target>Søg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.back" approved="yes">
|
||||
<source>Back</source>
|
||||
<target>Forrige</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.next" approved="yes">
|
||||
<source>Next</source>
|
||||
<target>Næste</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.const" approved="yes">
|
||||
<source>Constant</source>
|
||||
<target>Konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.consts" approved="yes">
|
||||
<source>Constants</source>
|
||||
<target>Konstanter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.all" approved="yes">
|
||||
<source>all</source>
|
||||
<target>alle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.translated" approved="yes">
|
||||
<source>translated</source>
|
||||
<target>oversat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>ukendt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.untranslated" approved="yes">
|
||||
<source>untranslated</source>
|
||||
<target>ikke oversat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.global" approved="yes">
|
||||
<source>Global</source>
|
||||
<target>Global</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.loaded" approved="yes">
|
||||
<source>loaded</source>
|
||||
<target>indlæst</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.local" approved="yes">
|
||||
<source>Local</source>
|
||||
<target>Lokal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.notLoaded" approved="yes">
|
||||
<source>not loaded</source>
|
||||
<target>ikke indlæst</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.system" approved="yes">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>ukendt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.access.denied" approved="yes">
|
||||
<source>It seems that you are not allowed to use this module.</source>
|
||||
<target>Det ser ud til at du ikke har adgang til at bruge dette modul!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notRead" approved="yes">
|
||||
<source>Can't read from meta file.</source>
|
||||
<target>Kan ikke indlæse metadata filen!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notWritten" approved="yes">
|
||||
<source>Can't write to meta file.</source>
|
||||
<target>Kan ikke gemme metadata filen!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.noFiles" approved="yes">
|
||||
<source>No backup files were found.</source>
|
||||
<target>Backupfilen kunne ikke findes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notDeleted" approved="yes">
|
||||
<source>Can't delete backup file.</source>
|
||||
<target>Backupfilen kunne ikke slettes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notRead" approved="yes">
|
||||
<source>Can't read from backup file.</source>
|
||||
<target>Backupfilen kunne ikke læses.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.failure" approved="yes">
|
||||
<source>Error!</source>
|
||||
<target>Fejl!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.badPermissions" approved="yes">
|
||||
<source>Some language files have insufficient permissions (i.e. write permission).</source>
|
||||
<target>Nogle sprogfiler har ikke de nødvendige rettigheder! (f.eks. skrive rettigheder)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.notWritten" approved="yes">
|
||||
<source>Can't write to file.</source>
|
||||
<target>Filen kunne ikke gemmes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.constExists" approved="yes">
|
||||
<source>The constant already exists.</source>
|
||||
<target>Konstanten eksisterer allerede!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.noChange" approved="yes">
|
||||
<source>The constant wasn't changed.</source>
|
||||
<target>Den konstante blev ikke ændret.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notDeleted" approved="yes">
|
||||
<source>Can't delete language file.</source>
|
||||
<target>Sprogfilen kunne ikke slettes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSplittedOrMerged" approved="yes">
|
||||
<source>Can't split or merge files.</source>
|
||||
<target>Filen kunne ikke deles/samles.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSupported" approved="yes">
|
||||
<source>The file type isn't supported (i.e. localization files).</source>
|
||||
<target>Denne extension understøtter ikke filer af denne type (f.eks. localization filer).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.unknownType" approved="yes">
|
||||
<source>Unknown file type.</source>
|
||||
<target>Filtypen er ukendt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noConstants" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Kunne ikke finde nogle konstanter!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noExtension" approved="yes">
|
||||
<source>No extensions were found.</source>
|
||||
<target>Ingen extensions fundet!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noFileContent" approved="yes">
|
||||
<source>No value was found in the given file.</source>
|
||||
<target>Der er ingen værdier i denne fil!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noLangFile" approved="yes">
|
||||
<source>No language files were found.</source>
|
||||
<target>Der findes ingen sprogfiler!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLangDataArray" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Programmet har modtaget en tom konstant array!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLanguage" approved="yes">
|
||||
<source>Please select a language with constants.</source>
|
||||
<target>Vælg venligst et sprog!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConst" approved="yes">
|
||||
<source>Please select a constant.</source>
|
||||
<target>Du har ikke valgt en konstant!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConstDefined" approved="yes">
|
||||
<source>Please define a valid constant.</source>
|
||||
<target>Du skal definere en konstant!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noLangfile" approved="yes">
|
||||
<source>Please select a language file.</source>
|
||||
<target>Vælg venligst en sprogfil!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.backupMgr" approved="yes">
|
||||
<source>Manage Backups</source>
|
||||
<target>Backupstyring</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.date" approved="yes">
|
||||
<source>Date of Backup</source>
|
||||
<target>Backupdato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.delete" approved="yes">
|
||||
<source>delete</source>
|
||||
<target>slet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.deleteAll" approved="yes">
|
||||
<source>delete all</source>
|
||||
<target>slet alt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.badMarkupHint" approved="yes">
|
||||
<source>only in backup</source>
|
||||
<target>kun i backup</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.diff" approved="yes">
|
||||
<source>Differences between backup and original</source>
|
||||
<target>forskelle mellem backup og original</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.goodMarkupHint" approved="yes">
|
||||
<source>only in original</source>
|
||||
<target>kun i original</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.meta" approved="yes">
|
||||
<source>Meta</source>
|
||||
<target>Meta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.missing" approved="yes">
|
||||
<source>Missing backup file.</source>
|
||||
<target>mangler backup fil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.ok" approved="yes">
|
||||
<source>ok</source>
|
||||
<target>ok</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.recover" approved="yes">
|
||||
<source>recover</source>
|
||||
<target>gendan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.add" approved="yes">
|
||||
<source>Add Constant</source>
|
||||
<target>Tilføj konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.name" approved="yes">
|
||||
<source>constant name</source>
|
||||
<target>konstantnavn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.delete" approved="yes">
|
||||
<source>Delete Constant</source>
|
||||
<target>Slet konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.question" approved="yes">
|
||||
<source>Are you sure that you wish to delete this constant?</source>
|
||||
<target>Er du sikker på at du vil slette dette emne?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.edit.edit" approved="yes">
|
||||
<source>Edit Constant</source>
|
||||
<target>Rediger konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.hint" approved="yes">
|
||||
<source>Please enter new constant name in this field. The old constant will be replaced by the new one.</source>
|
||||
<target>Indtast venligst et nyt konstantnavn i dette felt. Det gamle konstantnavn vil blive erstattet af det nye.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.newName" approved="yes">
|
||||
<source>new constant name</source>
|
||||
<target>nyt konstantnavn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.rename" approved="yes">
|
||||
<source>Rename Constant</source>
|
||||
<target>Omdøb konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.enterSearchStr" approved="yes">
|
||||
<source>Please enter a search word (can contain pcre syntax).</source>
|
||||
<target>Indtast venligst et søgeord (kan være i PCRE format).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.result" approved="yes">
|
||||
<source>Search Result</source>
|
||||
<target>søgeresultat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.search" approved="yes">
|
||||
<source>Search constants</source>
|
||||
<target>Søg i konstanter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.badMarkupHint" approved="yes">
|
||||
<source>untranslated constant</source>
|
||||
<target>ikke oversat konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.goodMarkupHint" approved="yes">
|
||||
<source>normal constant</source>
|
||||
<target>normal konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.hideUnhideAll" approved="yes">
|
||||
<source>hide/unhide all</source>
|
||||
<target>skjul/synligør alle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.root" approved="yes">
|
||||
<source>Root</source>
|
||||
<target>Rod</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.specialMarkupHint" approved="yes">
|
||||
<source>Unknown constant (i.e. name changed, deleted in reference)</source>
|
||||
<target>ukendt konstant (f.eks. ændret navn, slettet i referencen)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.treeview" approved="yes">
|
||||
<source>View Tree</source>
|
||||
<target>Trævisning</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.general" approved="yes">
|
||||
<source>General</source>
|
||||
<target>Generelt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.form" approved="yes">
|
||||
<source>Email information</source>
|
||||
<target>E-mail informationer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.fromAddress" approved="yes">
|
||||
<source>from Address</source>
|
||||
<target>Fra adresse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.subject" approved="yes">
|
||||
<source>Subject</source>
|
||||
<target>Emne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.success" approved="yes">
|
||||
<source>The mail was sent successfully!</source>
|
||||
<target>E-mail'en blev sendt korrekt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.toAddress" approved="yes">
|
||||
<source>to Address</source>
|
||||
<target>Til adresse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author" approved="yes">
|
||||
<source>Extension Author</source>
|
||||
<target>Extensionejer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.email" approved="yes">
|
||||
<source>Email</source>
|
||||
<target>E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.name" approved="yes">
|
||||
<source>Name</source>
|
||||
<target>Navn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.cshTable" approved="yes">
|
||||
<source>csh_table</source>
|
||||
<target>csh_table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.desc" approved="yes">
|
||||
<source>Description</source>
|
||||
<target>Beskrivelse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.metaInfo" approved="yes">
|
||||
<source>Information</source>
|
||||
<target>Informationer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.options" approved="yes">
|
||||
<source>Options</source>
|
||||
<target>Indstillinger</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.merge" approved="yes">
|
||||
<source>Merge</source>
|
||||
<target>saml</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.split" approved="yes">
|
||||
<source>Split</source>
|
||||
<target>del</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitL10n" approved="yes">
|
||||
<source>l10n splitting</source>
|
||||
<target>l10n deling</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitNormal" approved="yes">
|
||||
<source>normal splitting</source>
|
||||
<target>normal deling</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.php" approved="yes">
|
||||
<source>PHP</source>
|
||||
<target>PHP</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.transform" approved="yes">
|
||||
<source>transformation</source>
|
||||
<target>konvertering</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.xml" approved="yes">
|
||||
<source>XML</source>
|
||||
<target>XML</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to cancel?</source>
|
||||
<target>Alle ikke-gemte ændringer vil gå tabt. Er du sikker på, at du ønsker at annullere?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel.title">
|
||||
<source>Warning</source>
|
||||
<target>Advarsel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to change?</source>
|
||||
<target>Alle ikke-gemte ændringer vil gå tabt. Er du sikker på, at du ønsker at ændre?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange.title">
|
||||
<source>Warning</source>
|
||||
<target>Advarsel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.edit" approved="yes">
|
||||
<source>Edit file</source>
|
||||
<target>Rediger fil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.search.caseSensitiveCheckbox" approved="yes">
|
||||
<source>case sensitive</source>
|
||||
<target>case sensitive</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.complete" approved="yes">
|
||||
<source>complete</source>
|
||||
<target>komplet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.file" approved="yes">
|
||||
<source>language file</source>
|
||||
<target>sprog fil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.l10n" approved="yes">
|
||||
<source>l10n</source>
|
||||
<target>l10n</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.missing" approved="yes">
|
||||
<source>missing original file</source>
|
||||
<target>mangler original fil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.write.success" approved="yes">
|
||||
<source>The changes are saved successfully.</source>
|
||||
<target>Filen blev gemt korrekt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.incomplete" approved="yes">
|
||||
<source>incomplete</source>
|
||||
<target>ukomplet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.merged" approved="yes">
|
||||
<source>merged</source>
|
||||
<target>samlet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.origin" approved="yes">
|
||||
<source>Origin</source>
|
||||
<target>Kilde</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.shortcut" approved="yes">
|
||||
<source>Shortcut</source>
|
||||
<target>Forkortelse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.splitted" approved="yes">
|
||||
<source>splitted</source>
|
||||
<target>splittet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constant" approved="yes">
|
||||
<source>Select constant</source>
|
||||
<target>vælg konstant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constantType" approved="yes">
|
||||
<source>Select constant type</source>
|
||||
<target>vælg konstanttype</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.explodeToken" approved="yes">
|
||||
<source>Select explode token</source>
|
||||
<target>Vælg delingstegn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extension" approved="yes">
|
||||
<source>Select extension</source>
|
||||
<target>vælg extension</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extensionAndWorkspace" approved="yes">
|
||||
<source>Select extension and workspace</source>
|
||||
<target>vælg extension og arbejdsrum</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.normal" approved="yes">
|
||||
<source>normal insert mode</source>
|
||||
<target>Normalt tekstfelt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.pmktextarea" approved="yes">
|
||||
<source>enhanced insert mode</source>
|
||||
<target>Udvidet tekstfelt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.langfile" approved="yes">
|
||||
<source>Select language file</source>
|
||||
<target>vælg sprogfil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.languageAndPattern" approved="yes">
|
||||
<source>Select up to two languages</source>
|
||||
<target>vælg sprog og mønster</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.nothing" approved="yes">
|
||||
<source>Nothing selected</source>
|
||||
<target>intet valgt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.referenceLanguage" approved="yes">
|
||||
<source>Select reference language</source>
|
||||
<target>vælg reference sprog</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.backups" approved="yes">
|
||||
<source>This table lists all backup files of the selected extension.</source>
|
||||
<target>Denne tabel viser alle backupfiler fra den valgte extension.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.fileInfo" approved="yes">
|
||||
<source>This table lists all languages of the selected language file with additional information.</source>
|
||||
<target>Denne tabel viser alle sprog fra den valgte sprogfil med ekstra informationer.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="title" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.base" approved="yes">
|
||||
<source>global</source>
|
||||
<target>global</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.xll" approved="yes">
|
||||
<source>local (only BE modules)</source>
|
||||
<target>lokal</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="da" datatype="plaintext" original="messages" date="2015-01-29T15:09:06Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="mlang_labels_tabdescr" approved="yes" xml:space="preserve">
|
||||
<source>This module serves several functions for editing of language files. Translators, extension authors and simple users are supported with special functions for each of them.
|
||||
|
||||
Following functions are implemented in this module:
|
||||
|
||||
* Formats: PHP and XML
|
||||
* enhanced insert types
|
||||
* conversion from PHP to XML and vice versa
|
||||
* splitting and merging of language files
|
||||
* workspaces (local (only in backend modules) and global)
|
||||
* simple editing of constants and languages
|
||||
* flexible search and view of constants and values
|
||||
* meta information handling
|
||||
* backups, recovering and diff view</source>
|
||||
<target>This module serves several functions for editing of language files. Translators and extension authors are supported in equal measure.<br /><br />Following functions are implemented in this module:<br /><br /> * Formats: PHP and XML<br /> * enhanced insert types<br /> * conversion from PHP to XML and vice versa<br /> * splitting and merging of language files<br /> * workspaces (local (only in backend modules) and global)<br /> * simple editing of constants and languages<br /> * flexible search and view of constants and values<br /> * meta information handling<br /> * backups, recovering and diff view</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_labels_tablabel" approved="yes">
|
||||
<source>Editing of Language Files</source>
|
||||
<target>Rediger sprogfiler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_tabs_tab" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,554 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2015-02-17T12:41:07Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="button.cancel" approved="yes">
|
||||
<source>Cancel</source>
|
||||
<target>Abbrechen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.delete" approved="yes">
|
||||
<source>Delete</source>
|
||||
<target>Löschen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.refreshLanguageFileList.title" approved="yes">
|
||||
<source>Refresh list of language file options, only if you have added or deleted a language file</source>
|
||||
<target>Aktualisiert die Liste der verfügbaren Sprachdateien; nur notwendig, falls Sprachdateien gelöscht oder hinzugefügt worden sind</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.rename" approved="yes">
|
||||
<source>Rename</source>
|
||||
<target>Umbenennen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.save" approved="yes">
|
||||
<source>Save</source>
|
||||
<target>Speichern</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.search" approved="yes">
|
||||
<source>Search</source>
|
||||
<target>Suchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.back" approved="yes">
|
||||
<source>Back</source>
|
||||
<target>Zurück</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.next" approved="yes">
|
||||
<source>Next</source>
|
||||
<target>Weiter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.const" approved="yes">
|
||||
<source>Constant</source>
|
||||
<target>Konstante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.consts" approved="yes">
|
||||
<source>Constants</source>
|
||||
<target>Konstanten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.all" approved="yes">
|
||||
<source>all</source>
|
||||
<target>alle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.translated" approved="yes">
|
||||
<source>translated</source>
|
||||
<target>übersetzt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>unbekannt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.untranslated" approved="yes">
|
||||
<source>untranslated</source>
|
||||
<target>nicht übersetzt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.global" approved="yes">
|
||||
<source>Global</source>
|
||||
<target>Global</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.loaded" approved="yes">
|
||||
<source>loaded</source>
|
||||
<target>geladen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.local" approved="yes">
|
||||
<source>Local</source>
|
||||
<target>Lokal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.notLoaded" approved="yes">
|
||||
<source>not loaded</source>
|
||||
<target>nicht geladen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.system" approved="yes">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>unbekannt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.access.denied" approved="yes">
|
||||
<source>It seems that you are not allowed to use this module.</source>
|
||||
<target>Sie sind nicht berechtigt dieses Modul zu nutzen!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notRead" approved="yes">
|
||||
<source>Can't read from meta file.</source>
|
||||
<target>Die Metadatei konnte nicht gelesen werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notWritten" approved="yes">
|
||||
<source>Can't write to meta file.</source>
|
||||
<target>Die Metadatei konnte nicht geschrieben werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.noFiles" approved="yes">
|
||||
<source>No backup files were found.</source>
|
||||
<target>Es konnten keine Backup-Dateien gefunden werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notDeleted" approved="yes">
|
||||
<source>Can't delete backup file.</source>
|
||||
<target>Die Backup-Datei konnte nicht gelöscht werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notRead" approved="yes">
|
||||
<source>Can't read from backup file.</source>
|
||||
<target>Die Backup-Datei konnte nicht gelesen werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.config.invalidLanguage" approved="yes">
|
||||
<source>The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /></source>
|
||||
<target>Die nachfolgenden Sprachen werden nicht von TYPO3 unterstüzt und müssen hinzugefügt werden. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.failure" approved="yes">
|
||||
<source>Error!</source>
|
||||
<target>Fehler!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.badPermissions" approved="yes">
|
||||
<source>Some language files have insufficient permissions (i.e. write permission).</source>
|
||||
<target>Einige Sprachdateien haben ungenügende Rechte (z.B. Schreibberechtigung)!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.notWritten" approved="yes">
|
||||
<source>Can't write to file.</source>
|
||||
<target>Die Datei konnte nicht geschrieben werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.constExists" approved="yes">
|
||||
<source>The constant already exists.</source>
|
||||
<target>Die Konstante existiert bereits.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.noChange" approved="yes">
|
||||
<source>The constant wasn't changed.</source>
|
||||
<target>Die Konstante wurde nicht verändert.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notDeleted" approved="yes">
|
||||
<source>Can't delete language file.</source>
|
||||
<target>Die Sprachdatei konnte nicht gelöscht werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSplittedOrMerged" approved="yes">
|
||||
<source>Can't split or merge files.</source>
|
||||
<target>Die Dateien konnten nicht aufgeteilt oder zusammengefügt werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSupported" approved="yes">
|
||||
<source>The file type isn't supported (i.e. localization files).</source>
|
||||
<target>Dieser Dateityp wird nicht unterstützt (z.B. Lokalisierungsdateien)!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.unknownType" approved="yes">
|
||||
<source>Unknown file type.</source>
|
||||
<target>Dieser Dateityp ist dem System vollkommen unbekannt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noConstants" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Es konnten keine Konstanten gefunden werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noExtension" approved="yes">
|
||||
<source>No extensions were found.</source>
|
||||
<target>Es konnten keine Erweiterungen gefunden werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noFileContent" approved="yes">
|
||||
<source>No value was found in the given file.</source>
|
||||
<target>Es konnte kein Wert in dieser Datei gefunden werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noLangFile" approved="yes">
|
||||
<source>No language files were found.</source>
|
||||
<target>Es konnte keine Sprachdatei gefunden werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLangDataArray" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Es wurden keine Konstanten übergeben!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLanguage" approved="yes">
|
||||
<source>Please select a language with constants.</source>
|
||||
<target>Bitte wählen Sie eine Sprache mit Inhalt aus.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConst" approved="yes">
|
||||
<source>Please select a constant.</source>
|
||||
<target>Sie haben keine Konstante ausgewählt.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConstDefined" approved="yes">
|
||||
<source>Please define a valid constant.</source>
|
||||
<target>Sie müssen eine Konstante definieren.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noLangfile" approved="yes">
|
||||
<source>Please select a language file.</source>
|
||||
<target>Bitte wählen Sie eine Sprachdatei aus.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.backupMgr" approved="yes">
|
||||
<source>Manage Backups</source>
|
||||
<target>Backups verwalten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.date" approved="yes">
|
||||
<source>Date of Backup</source>
|
||||
<target>Datum des Backups</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.delete" approved="yes">
|
||||
<source>delete</source>
|
||||
<target>löschen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.deleteAll" approved="yes">
|
||||
<source>delete all</source>
|
||||
<target>alles löschen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.badMarkupHint" approved="yes">
|
||||
<source>only in backup</source>
|
||||
<target>nur im Backup</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.diff" approved="yes">
|
||||
<source>Differences between backup and original</source>
|
||||
<target>Unterschiede zwischen Backup und Original</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.goodMarkupHint" approved="yes">
|
||||
<source>only in original</source>
|
||||
<target>nur im Original</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.meta" approved="yes">
|
||||
<source>Meta</source>
|
||||
<target>Meta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.missing" approved="yes">
|
||||
<source>Missing backup file.</source>
|
||||
<target>Backupdatei fehlt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.ok" approved="yes">
|
||||
<source>ok</source>
|
||||
<target>ok</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.recover" approved="yes">
|
||||
<source>recover</source>
|
||||
<target>wiederherstellen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.delete" approved="yes">
|
||||
<source>The backup was successfully deleted.</source>
|
||||
<target>Das Backup wurde erfolgreich gelöscht.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.deleteAll" approved="yes">
|
||||
<source>All backups were successfully deleted.</source>
|
||||
<target>Alle Backups wurden erfolgreich gelöscht.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.restore" approved="yes">
|
||||
<source>Restored successfully.</source>
|
||||
<target>Erfolgreich wiederhergestellt.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.add" approved="yes">
|
||||
<source>Add Constant</source>
|
||||
<target>Konstante hinzufügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.name" approved="yes">
|
||||
<source>constant name</source>
|
||||
<target>Konstantenname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.delete" approved="yes">
|
||||
<source>Delete Constant</source>
|
||||
<target>Konstante löschen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.question" approved="yes">
|
||||
<source>Are you sure that you wish to delete this constant?</source>
|
||||
<target>Wollen Sie diese Konstante wirklich löschen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.edit.edit" approved="yes">
|
||||
<source>Edit Constant</source>
|
||||
<target>Konstante editieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.hint" approved="yes">
|
||||
<source>Please enter new constant name in this field. The old constant will be replaced by the new one.</source>
|
||||
<target>Bitte geben Sie einen neuen Konstantennamen in dieses Feld ein. Die alte Konstante wird nach dem absenden der Daten durch diese ersetzt werden.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.newName" approved="yes">
|
||||
<source>new constant name</source>
|
||||
<target>neuer Konstantenname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.rename" approved="yes">
|
||||
<source>Rename Constant</source>
|
||||
<target>Konstante umbenennen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.enterSearchStr" approved="yes">
|
||||
<source>Please enter a search word (can contain pcre syntax).</source>
|
||||
<target>Bitte geben Sie ein Suchwort an (kann PCRE-Syntax enthalten).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.result" approved="yes">
|
||||
<source>Search Result</source>
|
||||
<target>Suchergebnisse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.search" approved="yes">
|
||||
<source>Search constants</source>
|
||||
<target>Konstanten suchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.badMarkupHint" approved="yes">
|
||||
<source>untranslated constant</source>
|
||||
<target>nicht übersetzte Konstante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.goodMarkupHint" approved="yes">
|
||||
<source>normal constant</source>
|
||||
<target>normale Konstante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.hideUnhideAll" approved="yes">
|
||||
<source>hide/unhide all</source>
|
||||
<target>alle Einträge sichtbar/versteckt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.root" approved="yes">
|
||||
<source>Root</source>
|
||||
<target>Wurzel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.specialMarkupHint" approved="yes">
|
||||
<source>Unknown constant (i.e. name changed, deleted in reference)</source>
|
||||
<target>unbekannte Konstante (z.B. Name geändert, gelöscht in Referenz)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.treeview" approved="yes">
|
||||
<source>View Tree</source>
|
||||
<target>Baumansicht</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.general" approved="yes">
|
||||
<source>General</source>
|
||||
<target>Allgemeines</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.hideShowUntranslated" approved="yes">
|
||||
<source>Hide/show untranslated languages</source>
|
||||
<target>Verstecke/Zeige nicht übersetzte Sprachen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.form" approved="yes">
|
||||
<source>Email information</source>
|
||||
<target>Email Informationen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.fromAddress" approved="yes">
|
||||
<source>from Address</source>
|
||||
<target>von Adresse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.subject" approved="yes">
|
||||
<source>Subject</source>
|
||||
<target>Betreff</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.success" approved="yes">
|
||||
<source>The mail was sent successfully!</source>
|
||||
<target>Die Mail wurde erfolgreich versandt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.toAddress" approved="yes">
|
||||
<source>to Address</source>
|
||||
<target>zu Adresse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author" approved="yes">
|
||||
<source>Extension Author</source>
|
||||
<target>Autor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.email" approved="yes">
|
||||
<source>Email</source>
|
||||
<target>Email</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.name" approved="yes">
|
||||
<source>Name</source>
|
||||
<target>Name</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.cshTable" approved="yes">
|
||||
<source>csh_table</source>
|
||||
<target>csh_table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.desc" approved="yes">
|
||||
<source>Description</source>
|
||||
<target>Beschreibung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.metaInfo" approved="yes">
|
||||
<source>Information</source>
|
||||
<target>Informationen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.options" approved="yes">
|
||||
<source>Options</source>
|
||||
<target>Optionen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.merge" approved="yes">
|
||||
<source>Merge</source>
|
||||
<target>zusammenfügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.split" approved="yes">
|
||||
<source>Split</source>
|
||||
<target>aufteilen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitL10n" approved="yes">
|
||||
<source>l10n splitting</source>
|
||||
<target>l10n Aufteilung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitNormal" approved="yes">
|
||||
<source>normal splitting</source>
|
||||
<target>normale Aufteilung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.php" approved="yes">
|
||||
<source>PHP</source>
|
||||
<target>PHP</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.transform" approved="yes">
|
||||
<source>transformation</source>
|
||||
<target>konvertieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.xml" approved="yes">
|
||||
<source>XML</source>
|
||||
<target>XML</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel" approved="yes">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to cancel?</source>
|
||||
<target>Alle nicht gespeicherten Änderungen gehen verloren. Bist du dir sicher, dass du abbrechen möchtest?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel.title">
|
||||
<source>Warning</source>
|
||||
<target>Warnung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to change?</source>
|
||||
<target>Alle nicht gespeicherten Änderungen gehen verloren. Bist du dir sicher, dass du wechseln möchtest?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange.title">
|
||||
<source>Warning</source>
|
||||
<target>Warnung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.edit" approved="yes">
|
||||
<source>Edit file</source>
|
||||
<target>Sprachdatei editieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.search.caseSensitiveCheckbox" approved="yes">
|
||||
<source>case sensitive</source>
|
||||
<target>case sensitive</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.complete" approved="yes">
|
||||
<source>complete</source>
|
||||
<target>vollständig</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.file" approved="yes">
|
||||
<source>language file</source>
|
||||
<target>Sprachdatei</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.l10n" approved="yes">
|
||||
<source>l10n</source>
|
||||
<target>l10n</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.missing" approved="yes">
|
||||
<source>missing original file</source>
|
||||
<target>originale Sprachdatei fehlt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.write.success" approved="yes">
|
||||
<source>The changes are saved successfully.</source>
|
||||
<target>Die Datei konnte erfolgreich geschrieben werden!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.incomplete" approved="yes">
|
||||
<source>incomplete</source>
|
||||
<target>unvollständig</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.merged" approved="yes">
|
||||
<source>merged</source>
|
||||
<target>zusammengefügt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.origin" approved="yes">
|
||||
<source>Origin</source>
|
||||
<target>Pfad</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.shortcut" approved="yes">
|
||||
<source>Shortcut</source>
|
||||
<target>Sprachkürzel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.splitted" approved="yes">
|
||||
<source>splitted</source>
|
||||
<target>aufgeteilt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constant" approved="yes">
|
||||
<source>Select constant</source>
|
||||
<target>wähle Konstante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constantType" approved="yes">
|
||||
<source>Select constant type</source>
|
||||
<target>wähle Art der Konstanten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.extension" approved="yes">
|
||||
<source>Extension mode</source>
|
||||
<target>Extension-Modus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.l10n" approved="yes">
|
||||
<source>l10n mode</source>
|
||||
<target>l10n-Modus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.override" approved="yes">
|
||||
<source>Override mode</source>
|
||||
<target>Override-Modus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.explodeToken" approved="yes">
|
||||
<source>Select explode token</source>
|
||||
<target>Explode-Character</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extension" approved="yes">
|
||||
<source>Select extension</source>
|
||||
<target>wähle Extension</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extensionAndWorkspace" approved="yes">
|
||||
<source>Select extension and workspace</source>
|
||||
<target>wähle Extension und Workspace</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.normal" approved="yes">
|
||||
<source>normal insert mode</source>
|
||||
<target>normaler Eingabemodus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.pmktextarea" approved="yes">
|
||||
<source>enhanced insert mode</source>
|
||||
<target>verbesserter Eingabemodus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.langfile" approved="yes">
|
||||
<source>Select language file</source>
|
||||
<target>wähle Sprachdatei</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.languageAndPattern" approved="yes">
|
||||
<source>Select up to two languages</source>
|
||||
<target>Wähle bis zu zwei Sprachen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.nothing" approved="yes">
|
||||
<source>Nothing selected</source>
|
||||
<target>nichts ausgewählt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.referenceLanguage" approved="yes">
|
||||
<source>Select reference language</source>
|
||||
<target>wähle Referenzsprache</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.backups" approved="yes">
|
||||
<source>This table lists all backup files of the selected extension.</source>
|
||||
<target>Diese Tabelle listet alle Backupdateien der selektierten Extension.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.fileInfo" approved="yes">
|
||||
<source>This table lists all languages of the selected language file with additional information.</source>
|
||||
<target>Diese Tabelle listet alle Sprachen der selektierten Sprachdatei mit zusäauml;tzlichen Informationen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="title" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.base" approved="yes">
|
||||
<source>global</source>
|
||||
<target>global</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.xll" approved="yes">
|
||||
<source>local (only BE modules)</source>
|
||||
<target>lokal (nur BE-Module)</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2015-01-29T15:09:06Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="mlang_labels_tabdescr" approved="yes" xml:space="preserve">
|
||||
<source>This module serves several functions for editing of language files. Translators, extension authors and simple users are supported with special functions for each of them.
|
||||
|
||||
Following functions are implemented in this module:
|
||||
|
||||
* Formats: PHP and XML
|
||||
* enhanced insert types
|
||||
* conversion from PHP to XML and vice versa
|
||||
* splitting and merging of language files
|
||||
* workspaces (local (only in backend modules) and global)
|
||||
* simple editing of constants and languages
|
||||
* flexible search and view of constants and values
|
||||
* meta information handling
|
||||
* backups, recovering and diff view</source>
|
||||
<target>Dieses Modul bietet zahlreiche Funktionen zur Bearbeitung von Sprachdateien. Übersetzer, Extension-Authoren und einfache Benutzer werden mit speziellen Funktionen unterstützt.
|
||||
|
||||
Folgende Funktionen sind in diesem Modul integriert:
|
||||
|
||||
* Formate: PHP und XML
|
||||
* verbesserte Eingabemethoden
|
||||
* Konvertierung von PHP zu XML und umgekehrt
|
||||
* trennen und zuammenfügen von Sprachdateien
|
||||
* Workspaces (lokal (nur BE-Module) und global)
|
||||
* einfache Bearbeitung von Konstanten oder Sprachen
|
||||
* Darstellung und Suche von Konstanten und Werten
|
||||
* Unerstützung von Meta-Information
|
||||
* Backups, Wiederherstellung und Diff-Ansicht</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_labels_tablabel" approved="yes">
|
||||
<source>Editing of Language Files</source>
|
||||
<target>Bearbeitung von Sprachdateien</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_tabs_tab" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="settings_canChangeEditingMode" approved="yes">
|
||||
<source>The user can save localization changes directly to extensions?</source>
|
||||
<target>Der Benutzer kann Lokalisierungsänderungen direkt in Erweiterungen speichern?</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,518 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="fi" datatype="plaintext" original="messages" date="2015-02-17T12:41:07Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="button.cancel" approved="yes">
|
||||
<source>Cancel</source>
|
||||
<target>Peruuta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.delete" approved="yes">
|
||||
<source>Delete</source>
|
||||
<target>Poista</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.rename" approved="yes">
|
||||
<source>Rename</source>
|
||||
<target>Uudelleennimeä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.save" approved="yes">
|
||||
<source>Save</source>
|
||||
<target>Tallenna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.search" approved="yes">
|
||||
<source>Search</source>
|
||||
<target>Etsi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.back" approved="yes">
|
||||
<source>Back</source>
|
||||
<target>Takaisin</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.next" approved="yes">
|
||||
<source>Next</source>
|
||||
<target>Seuraava</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.const" approved="yes">
|
||||
<source>Constant</source>
|
||||
<target>Vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.consts" approved="yes">
|
||||
<source>Constants</source>
|
||||
<target>Vakiot</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.all" approved="yes">
|
||||
<source>all</source>
|
||||
<target>kaikki</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.translated" approved="yes">
|
||||
<source>translated</source>
|
||||
<target>käännetty</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>tuntematon</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.untranslated" approved="yes">
|
||||
<source>untranslated</source>
|
||||
<target>kääntämätön</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.global" approved="yes">
|
||||
<source>Global</source>
|
||||
<target>Globaali</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.loaded" approved="yes">
|
||||
<source>loaded</source>
|
||||
<target>ladattu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.local" approved="yes">
|
||||
<source>Local</source>
|
||||
<target>Paikallinen (local)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.notLoaded" approved="yes">
|
||||
<source>not loaded</source>
|
||||
<target>lataamaton</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.system" approved="yes">
|
||||
<source>System</source>
|
||||
<target>Systeemi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.unknown" approved="yes">
|
||||
<source>unknown</source>
|
||||
<target>tuntematon</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.access.denied" approved="yes">
|
||||
<source>It seems that you are not allowed to use this module.</source>
|
||||
<target>Näyttää siltä, että et voi käyttää tätä modulia!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notRead" approved="yes">
|
||||
<source>Can't read from meta file.</source>
|
||||
<target>Metatiedostoa ei voitu lukea.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notWritten" approved="yes">
|
||||
<source>Can't write to meta file.</source>
|
||||
<target>Metatiedostoon ei voitu kirjoittaa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.noFiles" approved="yes">
|
||||
<source>No backup files were found.</source>
|
||||
<target>Yhtään varmuustallennustiedostoa ei löytynyt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notDeleted" approved="yes">
|
||||
<source>Can't delete backup file.</source>
|
||||
<target>Varmuustallennustiedostoa ei voinut poistaa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notRead" approved="yes">
|
||||
<source>Can't read from backup file.</source>
|
||||
<target>Varmuustallennustiedostoa ei voinut lukea!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.failure" approved="yes">
|
||||
<source>Error!</source>
|
||||
<target>Virhe!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.badPermissions" approved="yes">
|
||||
<source>Some language files have insufficient permissions (i.e. write permission).</source>
|
||||
<target>Joillakin kielitiedostoilla on riittämättömät käyttöoikeudet (esim. kirjoitusoikeus puuttuu)!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.notWritten" approved="yes">
|
||||
<source>Can't write to file.</source>
|
||||
<target>Tiedostoon ei voinut kirjoittaa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.constExists" approved="yes">
|
||||
<source>The constant already exists.</source>
|
||||
<target>Tämä vakio on jo olemassa.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.noChange" approved="yes">
|
||||
<source>The constant wasn't changed.</source>
|
||||
<target>Vakiona ei muutettu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notDeleted" approved="yes">
|
||||
<source>Can't delete language file.</source>
|
||||
<target>Kielitiedostoa ei voinut poistaa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSplittedOrMerged" approved="yes">
|
||||
<source>Can't split or merge files.</source>
|
||||
<target>Tiedostoa ei voinut yhdistää tai jakaa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSupported" approved="yes">
|
||||
<source>The file type isn't supported (i.e. localization files).</source>
|
||||
<target>Tiedostotyyppiä ei tueta (esim. lokalisaatiotiedostot)!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.unknownType" approved="yes">
|
||||
<source>Unknown file type.</source>
|
||||
<target>Tämä tiedostotyyppi on tuntematon!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noConstants" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Yhtään vakiota ei löytynyt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noExtension" approved="yes">
|
||||
<source>No extensions were found.</source>
|
||||
<target>Yhtään lisäosaa ei löytynyt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noFileContent" approved="yes">
|
||||
<source>No value was found in the given file.</source>
|
||||
<target>Tiedostosta ei löynyt yhtään etsittyä arvoa!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noLangFile" approved="yes">
|
||||
<source>No language files were found.</source>
|
||||
<target>Yhtään kielitiedostoa ei löytynyt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLangDataArray" approved="yes">
|
||||
<source>No constants were found.</source>
|
||||
<target>Yhtään vakoita ei löytynyt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLanguage" approved="yes">
|
||||
<source>Please select a language with constants.</source>
|
||||
<target>Ole hyvä ja valitse kieli, jossa on kielivakioita.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConst" approved="yes">
|
||||
<source>Please select a constant.</source>
|
||||
<target>Ole hyvä ja valitse vakio.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConstDefined" approved="yes">
|
||||
<source>Please define a valid constant.</source>
|
||||
<target>Ole hyvä ja määrittele kelvollinen vakio.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noLangfile" approved="yes">
|
||||
<source>Please select a language file.</source>
|
||||
<target>Ole hyvä ja valitse kielitiedosto.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.backupMgr" approved="yes">
|
||||
<source>Manage Backups</source>
|
||||
<target>Hallitse varmuustallennuksia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.date" approved="yes">
|
||||
<source>Date of Backup</source>
|
||||
<target>Varmuustallenteen päivämäärä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.delete" approved="yes">
|
||||
<source>delete</source>
|
||||
<target>poista</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.deleteAll" approved="yes">
|
||||
<source>delete all</source>
|
||||
<target>poista kaikki</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.badMarkupHint" approved="yes">
|
||||
<source>only in backup</source>
|
||||
<target>vain varmuustallenteessa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.diff" approved="yes">
|
||||
<source>Differences between backup and original</source>
|
||||
<target>Varmuustallenteen ja alkuperäisen eroavaisuudet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.goodMarkupHint" approved="yes">
|
||||
<source>only in original</source>
|
||||
<target>vain alkuperäisessä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.meta" approved="yes">
|
||||
<source>Meta</source>
|
||||
<target>Meta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.missing" approved="yes">
|
||||
<source>Missing backup file.</source>
|
||||
<target>varmuustallennustiedosto puuttuu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.ok" approved="yes">
|
||||
<source>ok</source>
|
||||
<target>ok</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.recover" approved="yes">
|
||||
<source>recover</source>
|
||||
<target>palauta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Tila</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.add" approved="yes">
|
||||
<source>Add Constant</source>
|
||||
<target>Lisää vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.name" approved="yes">
|
||||
<source>constant name</source>
|
||||
<target>vakion nimi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.delete" approved="yes">
|
||||
<source>Delete Constant</source>
|
||||
<target>Poista vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.question" approved="yes">
|
||||
<source>Are you sure that you wish to delete this constant?</source>
|
||||
<target>Haluatko todella poistaa tämän vakion?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.edit.edit" approved="yes">
|
||||
<source>Edit Constant</source>
|
||||
<target>Muokkaa vakiota</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.hint" approved="yes">
|
||||
<source>Please enter new constant name in this field. The old constant will be replaced by the new one.</source>
|
||||
<target>Ole hyvä ja määrittele tähän kenttään uusi vakion nimi. Vanha vakio korvataan uudella.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.newName" approved="yes">
|
||||
<source>new constant name</source>
|
||||
<target>uusi vakion nimi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.rename" approved="yes">
|
||||
<source>Rename Constant</source>
|
||||
<target>Nimeä vakio uudelleen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.enterSearchStr" approved="yes">
|
||||
<source>Please enter a search word (can contain pcre syntax).</source>
|
||||
<target>Ole hyvä ja anna etsittävä sana (voi sisältää pcre-syntaksia)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.result" approved="yes">
|
||||
<source>Search Result</source>
|
||||
<target>Hakutulokset</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.search" approved="yes">
|
||||
<source>Search constants</source>
|
||||
<target>Etsi vakioita</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.badMarkupHint" approved="yes">
|
||||
<source>untranslated constant</source>
|
||||
<target>kääntämätön vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.goodMarkupHint" approved="yes">
|
||||
<source>normal constant</source>
|
||||
<target>normaali vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.hideUnhideAll" approved="yes">
|
||||
<source>hide/unhide all</source>
|
||||
<target>piilota/näytä kaikki</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.root" approved="yes">
|
||||
<source>Root</source>
|
||||
<target>Juuri</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.specialMarkupHint" approved="yes">
|
||||
<source>Unknown constant (i.e. name changed, deleted in reference)</source>
|
||||
<target>tuntematon vakio (esim. nimi muutettu, referenssi poistettu)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.treeview" approved="yes">
|
||||
<source>View Tree</source>
|
||||
<target>Näytä sanastopuu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.general" approved="yes">
|
||||
<source>General</source>
|
||||
<target>Yleistoimenpiteet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.form" approved="yes">
|
||||
<source>Email information</source>
|
||||
<target>S-posti informaatiot</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.fromAddress" approved="yes">
|
||||
<source>from Address</source>
|
||||
<target>osoitteesta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.subject" approved="yes">
|
||||
<source>Subject</source>
|
||||
<target>Aihe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.success" approved="yes">
|
||||
<source>The mail was sent successfully!</source>
|
||||
<target>Sähköposti lähettiin onnistuneesti!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.toAddress" approved="yes">
|
||||
<source>to Address</source>
|
||||
<target>osoitteeseen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author" approved="yes">
|
||||
<source>Extension Author</source>
|
||||
<target>Lisäosan tekijä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.email" approved="yes">
|
||||
<source>Email</source>
|
||||
<target>S-posti</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.name" approved="yes">
|
||||
<source>Name</source>
|
||||
<target>Nimi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.cshTable" approved="yes">
|
||||
<source>csh_table</source>
|
||||
<target>csh_table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.desc" approved="yes">
|
||||
<source>Description</source>
|
||||
<target>Kuvaus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.metaInfo" approved="yes">
|
||||
<source>Information</source>
|
||||
<target>Informaatiot</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.options" approved="yes">
|
||||
<source>Options</source>
|
||||
<target>Vaihtoehdot</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.merge" approved="yes">
|
||||
<source>Merge</source>
|
||||
<target>yhdistä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.split" approved="yes">
|
||||
<source>Split</source>
|
||||
<target>jaa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitL10n" approved="yes">
|
||||
<source>l10n splitting</source>
|
||||
<target>paikallistamisjako (l10n)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitNormal" approved="yes">
|
||||
<source>normal splitting</source>
|
||||
<target>normaali jakaminen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.php" approved="yes">
|
||||
<source>PHP</source>
|
||||
<target>PHP</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.transform" approved="yes">
|
||||
<source>transformation</source>
|
||||
<target>muunto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.xml" approved="yes">
|
||||
<source>XML</source>
|
||||
<target>XML</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to cancel?</source>
|
||||
<target>Kaikki tallentamattomat muutokset menetetään. Oletko varma, että haluat peruuttaa?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel.title">
|
||||
<source>Warning</source>
|
||||
<target>Varoitus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to change?</source>
|
||||
<target>Kaikki tallentamattomat muutokset menetetään. Oletko varma, että haluat muuttaa?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange.title">
|
||||
<source>Warning</source>
|
||||
<target>Varoitus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.edit" approved="yes">
|
||||
<source>Edit file</source>
|
||||
<target>Muokkaa tiedostoa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.search.caseSensitiveCheckbox" approved="yes">
|
||||
<source>case sensitive</source>
|
||||
<target>iso-pieni-eroava (case sensitive)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.complete" approved="yes">
|
||||
<source>complete</source>
|
||||
<target>täydellinen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.file" approved="yes">
|
||||
<source>language file</source>
|
||||
<target>kielitiedosto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.l10n" approved="yes">
|
||||
<source>l10n</source>
|
||||
<target>paikallistaminen (l10n)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.missing" approved="yes">
|
||||
<source>missing original file</source>
|
||||
<target>alkuperäinen tiedosto puuttuu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.write.success" approved="yes">
|
||||
<source>The changes are saved successfully.</source>
|
||||
<target>Tiedoston kirjoittaminen onnistui!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.incomplete" approved="yes">
|
||||
<source>incomplete</source>
|
||||
<target>epätäydellinen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.merged" approved="yes">
|
||||
<source>merged</source>
|
||||
<target>yhdistetty</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.origin" approved="yes">
|
||||
<source>Origin</source>
|
||||
<target>Alkuperä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.shortcut" approved="yes">
|
||||
<source>Shortcut</source>
|
||||
<target>Pikavalinta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.splitted" approved="yes">
|
||||
<source>splitted</source>
|
||||
<target>jaettu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.state" approved="yes">
|
||||
<source>State</source>
|
||||
<target>Tila</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constant" approved="yes">
|
||||
<source>Select constant</source>
|
||||
<target>valitse vakio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constantType" approved="yes">
|
||||
<source>Select constant type</source>
|
||||
<target>valitse vakion tyyppi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.explodeToken" approved="yes">
|
||||
<source>Select explode token</source>
|
||||
<target>Valitse jakomerkintä (explode token)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extension" approved="yes">
|
||||
<source>Select extension</source>
|
||||
<target>valitse lisäosa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extensionAndWorkspace" approved="yes">
|
||||
<source>Select extension and workspace</source>
|
||||
<target>valitse lisäosa ja työtila</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.normal" approved="yes">
|
||||
<source>normal insert mode</source>
|
||||
<target>normaali syöttömoodi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.pmktextarea" approved="yes">
|
||||
<source>enhanced insert mode</source>
|
||||
<target>kehittynyt syöttömoodi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.langfile" approved="yes">
|
||||
<source>Select language file</source>
|
||||
<target>valitse kielitiedosto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.languageAndPattern" approved="yes">
|
||||
<source>Select up to two languages</source>
|
||||
<target>valitse kieli ja sen mallikieli</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.nothing" approved="yes">
|
||||
<source>Nothing selected</source>
|
||||
<target>mitään ei ole valittu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.referenceLanguage" approved="yes">
|
||||
<source>Select reference language</source>
|
||||
<target>valitse referenssikieli</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.backups" approved="yes">
|
||||
<source>This table lists all backup files of the selected extension.</source>
|
||||
<target>Tämä taulukko luettelee valitun lisäosan varmuustallennetiedostot.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.fileInfo" approved="yes">
|
||||
<source>This table lists all languages of the selected language file with additional information.</source>
|
||||
<target>Tämä taulukko luettelee kaikki valitun kielitiedoston kaikki kieliversiot lisäinformaatioineen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="title" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.base" approved="yes">
|
||||
<source>global</source>
|
||||
<target>globaali</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.xll" approved="yes">
|
||||
<source>local (only BE modules)</source>
|
||||
<target>lokaali (vain tausakäyttömoduleille)</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="fi" datatype="plaintext" original="messages" date="2015-01-29T15:09:06Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="mlang_labels_tabdescr" approved="yes" xml:space="preserve">
|
||||
<source>This module serves several functions for editing of language files. Translators, extension authors and simple users are supported with special functions for each of them.
|
||||
|
||||
Following functions are implemented in this module:
|
||||
|
||||
* Formats: PHP and XML
|
||||
* enhanced insert types
|
||||
* conversion from PHP to XML and vice versa
|
||||
* splitting and merging of language files
|
||||
* workspaces (local (only in backend modules) and global)
|
||||
* simple editing of constants and languages
|
||||
* flexible search and view of constants and values
|
||||
* meta information handling
|
||||
* backups, recovering and diff view</source>
|
||||
<target>Tämä moduli tarjoaa useita funktioita kielitiedostojen muokkaamiseksi. Lisäosien tekijät voivat käyttää tätä lisäosaa omien lisäosiensa kielitiedostojen luomisessa.<br /><br />Tässä modulissa on seuraavat funtiot:<br /><br /> * formaatit: PHP ja XML<br /> * kehittyneet syöttötyypit<br /> * konversion PHP:stä XML:ään ja päinvastoin<br /> * kielitiedostojen yhdistäminen/jakaminen (splitting/merging)<br /> * työtilat (lokaali/globaali (local/global) - lokaali vain taustakäyttömoduuleille)<br /> * yksinkertainen kielten ja niiden vakioiden muokkaus<br /> * joustavat etsintä ja vakioiden jan niiden arvojen näyttäminen<br /> * metainformaation hallinta<br /> * varmuustallennus, palautus ja diff-tiedostojen näyttäminen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_labels_tablabel" approved="yes">
|
||||
<source>Editing of Language Files</source>
|
||||
<target>Kielitiedostojen muokkaus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_tabs_tab" approved="yes">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,423 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2015-02-17T12:41:07Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="button.cancel">
|
||||
<source>Cancel</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.delete">
|
||||
<source>Delete</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.refreshLanguageFileList.title">
|
||||
<source>Refresh list of language file options, only if you have added or deleted a language file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.rename">
|
||||
<source>Rename</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.save">
|
||||
<source>Save</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.search">
|
||||
<source>Search</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.back">
|
||||
<source>Back</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.next">
|
||||
<source>Next</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.const">
|
||||
<source>Constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.consts">
|
||||
<source>Constants</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.all">
|
||||
<source>all</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.translated">
|
||||
<source>translated</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.unknown">
|
||||
<source>unknown</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.untranslated">
|
||||
<source>untranslated</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.global">
|
||||
<source>Global</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.loaded">
|
||||
<source>loaded</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.local">
|
||||
<source>Local</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.notLoaded">
|
||||
<source>not loaded</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.system">
|
||||
<source>System</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.unknown">
|
||||
<source>unknown</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.access.denied">
|
||||
<source>It seems that you are not allowed to use this module.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notRead">
|
||||
<source>Can't read from meta file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notWritten">
|
||||
<source>Can't write to meta file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.noFiles">
|
||||
<source>No backup files were found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notDeleted">
|
||||
<source>Can't delete backup file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notRead">
|
||||
<source>Can't read from backup file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.config.invalidLanguage">
|
||||
<source>The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.failure">
|
||||
<source>Error!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.badPermissions">
|
||||
<source>Some language files have insufficient permissions (i.e. write permission).</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.notWritten">
|
||||
<source>Can't write to file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.constExists">
|
||||
<source>The constant already exists.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.noChange">
|
||||
<source>The constant wasn't changed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notDeleted">
|
||||
<source>Can't delete language file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSplittedOrMerged">
|
||||
<source>Can't split or merge files.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSupported">
|
||||
<source>The file type isn't supported (i.e. localization files).</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.unknownType">
|
||||
<source>Unknown file type.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noConstants">
|
||||
<source>No constants were found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noExtension">
|
||||
<source>No extensions were found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noFileContent">
|
||||
<source>No value was found in the given file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noLangFile">
|
||||
<source>No language files were found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLangDataArray">
|
||||
<source>No constants were found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLanguage">
|
||||
<source>Please select a language with constants.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConst">
|
||||
<source>Please select a constant.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConstDefined">
|
||||
<source>Please define a valid constant.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noLangfile">
|
||||
<source>Please select a language file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.backupMgr">
|
||||
<source>Manage Backups</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.date">
|
||||
<source>Date of Backup</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.delete">
|
||||
<source>delete</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.deleteAll">
|
||||
<source>delete all</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.badMarkupHint">
|
||||
<source>only in backup</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.diff">
|
||||
<source>Differences between backup and original</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.goodMarkupHint">
|
||||
<source>only in original</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.meta">
|
||||
<source>Meta</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.missing">
|
||||
<source>Missing backup file.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.ok">
|
||||
<source>ok</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.recover">
|
||||
<source>recover</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.state">
|
||||
<source>State</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.delete">
|
||||
<source>The backup was successfully deleted.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.deleteAll">
|
||||
<source>All backups were successfully deleted.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.restore">
|
||||
<source>Restored successfully.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.add">
|
||||
<source>Add Constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.name">
|
||||
<source>constant name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.delete">
|
||||
<source>Delete Constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.question">
|
||||
<source>Are you sure that you wish to delete this constant?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.edit.edit">
|
||||
<source>Edit Constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.hint">
|
||||
<source>Please enter new constant name in this field. The old constant will be replaced by the new one.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.newName">
|
||||
<source>new constant name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.rename">
|
||||
<source>Rename Constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.enterSearchStr">
|
||||
<source>Please enter a search word (can contain pcre syntax).</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.result">
|
||||
<source>Search Result</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.search">
|
||||
<source>Search constants</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.badMarkupHint">
|
||||
<source>untranslated constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.goodMarkupHint">
|
||||
<source>normal constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.hideUnhideAll">
|
||||
<source>hide/unhide all</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.root">
|
||||
<source>Root</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.specialMarkupHint">
|
||||
<source>Unknown constant (i.e. name changed, deleted in reference)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.treeview">
|
||||
<source>View Tree</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.general">
|
||||
<source>General</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.hideShowUntranslated">
|
||||
<source>Hide/show untranslated languages</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.form">
|
||||
<source>Email information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.fromAddress">
|
||||
<source>from Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.subject">
|
||||
<source>Subject</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.success">
|
||||
<source>The mail was sent successfully!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.toAddress">
|
||||
<source>to Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author">
|
||||
<source>Extension Author</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.email">
|
||||
<source>Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.name">
|
||||
<source>Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.cshTable">
|
||||
<source>csh_table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.desc">
|
||||
<source>Description</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.metaInfo">
|
||||
<source>Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.options">
|
||||
<source>Options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.merge">
|
||||
<source>Merge</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.split">
|
||||
<source>Split</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitL10n">
|
||||
<source>l10n splitting</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitNormal">
|
||||
<source>normal splitting</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.php">
|
||||
<source>PHP</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.transform">
|
||||
<source>transformation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.xml">
|
||||
<source>XML</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to cancel?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel.title">
|
||||
<source>Warning</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to change?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange.title">
|
||||
<source>Warning</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.edit">
|
||||
<source>Edit file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.search.caseSensitiveCheckbox">
|
||||
<source>case sensitive</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.complete">
|
||||
<source>complete</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.file">
|
||||
<source>language file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.l10n">
|
||||
<source>l10n</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.missing">
|
||||
<source>missing original file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.write.success">
|
||||
<source>The changes are saved successfully.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.incomplete">
|
||||
<source>incomplete</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.merged">
|
||||
<source>merged</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.origin">
|
||||
<source>Origin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.shortcut">
|
||||
<source>Shortcut</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.splitted">
|
||||
<source>splitted</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.state">
|
||||
<source>State</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constant">
|
||||
<source>Select constant</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constantType">
|
||||
<source>Select constant type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.extension">
|
||||
<source>Extension mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.l10n">
|
||||
<source>l10n mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.override">
|
||||
<source>Override mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.explodeToken">
|
||||
<source>Select explode token</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extension">
|
||||
<source>Select extension</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extensionAndWorkspace">
|
||||
<source>Select extension and workspace</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.normal">
|
||||
<source>normal insert mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.pmktextarea">
|
||||
<source>enhanced insert mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.langfile">
|
||||
<source>Select language file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.languageAndPattern">
|
||||
<source>Select up to two languages</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.nothing">
|
||||
<source>Nothing selected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.numConstants">
|
||||
<source>Select # of constants to show</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.referenceLanguage">
|
||||
<source>Select reference language</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.backups">
|
||||
<source>This table lists all backup files of the selected extension.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.fileInfo">
|
||||
<source>This table lists all languages of the selected language file with additional information.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="title">
|
||||
<source>LFEditor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.base">
|
||||
<source>global</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.xll">
|
||||
<source>local (only BE modules)</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2015-01-29T15:09:06Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="mlang_labels_tabdescr" xml:space="preserve">
|
||||
<source>This module serves several functions for editing of language files. Translators, extension authors and simple users are supported with special functions for each of them.
|
||||
|
||||
Following functions are implemented in this module:
|
||||
|
||||
* Formats: PHP and XML
|
||||
* enhanced insert types
|
||||
* conversion from PHP to XML and vice versa
|
||||
* splitting and merging of language files
|
||||
* workspaces (local (only in backend modules) and global)
|
||||
* simple editing of constants and languages
|
||||
* flexible search and view of constants and values
|
||||
* meta information handling
|
||||
* backups, recovering and diff view</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_labels_tablabel">
|
||||
<source>Editing of Language Files</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_tabs_tab">
|
||||
<source>LFEditor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="settings_canChangeEditingMode">
|
||||
<source>The user can save localization changes directly to extensions?</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,558 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="pl" datatype="plaintext" original="messages" date="2015-02-17T12:41:07Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="button.cancel">
|
||||
<source>Cancel</source>
|
||||
<target>Anuluj</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.delete">
|
||||
<source>Delete</source>
|
||||
<target>Usuń</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.refreshLanguageFileList.title">
|
||||
<source>Refresh list of language file options, only if you have added or deleted a language file</source>
|
||||
<target>Odśwież listę opcji pliku językowego, tylko jeśli dodałeś lub usunąłeś plik językowy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.rename">
|
||||
<source>Rename</source>
|
||||
<target>Zmień nazwę</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.save">
|
||||
<source>Save</source>
|
||||
<target>Zapisz</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.search">
|
||||
<source>Search</source>
|
||||
<target>Szukaj</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.back">
|
||||
<source>Back</source>
|
||||
<target>Wróć</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="button.session.next">
|
||||
<source>Next</source>
|
||||
<target>Następna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.const">
|
||||
<source>Constant</source>
|
||||
<target>Stała</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.consts">
|
||||
<source>Constants</source>
|
||||
<target>Stałe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.all">
|
||||
<source>all</source>
|
||||
<target>wszystkie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.translated">
|
||||
<source>translated</source>
|
||||
<target>przetłumaczone</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.unknown">
|
||||
<source>unknown</source>
|
||||
<target>nieznane</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="const.type.untranslated">
|
||||
<source>untranslated</source>
|
||||
<target>nieprzetłumaczone</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.global">
|
||||
<source>Global</source>
|
||||
<target>Globalne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.loaded">
|
||||
<source>loaded</source>
|
||||
<target>załadowana</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.local">
|
||||
<source>Local</source>
|
||||
<target>Lokalne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.notLoaded">
|
||||
<source>not loaded</source>
|
||||
<target>niezaładowana</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.system">
|
||||
<source>System</source>
|
||||
<target>Systemowe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ext.unknown">
|
||||
<source>unknown</source>
|
||||
<target>nieznane</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.access.denied">
|
||||
<source>It seems that you are not allowed to use this module.</source>
|
||||
<target>Wygląda na to, że nie możesz korzystać z tego modułu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notRead">
|
||||
<source>Can't read from meta file.</source>
|
||||
<target>Nie można czytać z pliku meta.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.metaFile.notWritten">
|
||||
<source>Can't write to meta file.</source>
|
||||
<target>Nie można pisać do pliku meta.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.noFiles">
|
||||
<source>No backup files were found.</source>
|
||||
<target>Nie znaleziono plików kopii zapasowych.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notDeleted">
|
||||
<source>Can't delete backup file.</source>
|
||||
<target>Nie można usunąć pliku kopii zapasowej.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.backup.notRead">
|
||||
<source>Can't read from backup file.</source>
|
||||
<target>Nie można czytać z pliku kopii zapasowej.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.config.invalidLanguage">
|
||||
<source>The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /></source>
|
||||
<target>Następujące języki nie są obsługiwane przez TYPO3 i powinny zostać dodane. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.failure">
|
||||
<source>Error!</source>
|
||||
<target>Błąd!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.badPermissions">
|
||||
<source>Some language files have insufficient permissions (i.e. write permission).</source>
|
||||
<target>Niektóre pliki językowe mają niewystarczające uprawnienia (tj. uprawnienia do zapisu).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.file.notWritten">
|
||||
<source>Can't write to file.</source>
|
||||
<target>Nie można pisać do pliku.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.constExists">
|
||||
<source>The constant already exists.</source>
|
||||
<target>Stała już istnieje.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.noChange">
|
||||
<source>The constant wasn't changed.</source>
|
||||
<target>Stała nie została zmieniona.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notDeleted">
|
||||
<source>Can't delete language file.</source>
|
||||
<target>Nie można usunąć pliku językowego.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSplittedOrMerged">
|
||||
<source>Can't split or merge files.</source>
|
||||
<target>Nie można dzielić ani scalać plików.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.notSupported">
|
||||
<source>The file type isn't supported (i.e. localization files).</source>
|
||||
<target>Typ pliku nie jest obsługiwany (tzn. pliki lokalizacyjne).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.langfile.unknownType">
|
||||
<source>Unknown file type.</source>
|
||||
<target>Nieznany typ pliku.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noConstants">
|
||||
<source>No constants were found.</source>
|
||||
<target>Nie znaleziono stałych.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noExtension">
|
||||
<source>No extensions were found.</source>
|
||||
<target>Nie znaleziono żadnych rozszerzeń.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noFileContent">
|
||||
<source>No value was found in the given file.</source>
|
||||
<target>W podanym pliku nie znaleziono żadnej wartości.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.search.noLangFile">
|
||||
<source>No language files were found.</source>
|
||||
<target>Nie znaleziono plików językowych.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLangDataArray">
|
||||
<source>No constants were found.</source>
|
||||
<target>Nie znaleziono stałych.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.emptyLanguage">
|
||||
<source>Please select a language with constants.</source>
|
||||
<target>Wybierz język ze stałymi.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConst">
|
||||
<source>Please select a constant.</source>
|
||||
<target>Proszę wybrać stałą.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noConstDefined">
|
||||
<source>Please define a valid constant.</source>
|
||||
<target>Zdefiniuj poprawną stałą.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="failure.select.noLangfile">
|
||||
<source>Please select a language file.</source>
|
||||
<target>Wybierz plik językowy.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.backupMgr">
|
||||
<source>Manage Backups</source>
|
||||
<target>Zarządzaj kopiami zapasowymi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.date">
|
||||
<source>Date of Backup</source>
|
||||
<target>Data utworzenia kopii zapasowej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.delete">
|
||||
<source>delete</source>
|
||||
<target>usuń</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.deleteAll">
|
||||
<source>delete all</source>
|
||||
<target>usuń wszystkie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.badMarkupHint">
|
||||
<source>only in backup</source>
|
||||
<target>tylko w kopii zapasowej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.diff">
|
||||
<source>Differences between backup and original</source>
|
||||
<target>Różnice między kopią zapasową a oryginałem</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.goodMarkupHint">
|
||||
<source>only in original</source>
|
||||
<target>tylko w oryginale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.diff.meta">
|
||||
<source>Meta</source>
|
||||
<target>Meta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.missing">
|
||||
<source>Missing backup file.</source>
|
||||
<target>Brak pliku kopii zapasowej.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.ok">
|
||||
<source>ok</source>
|
||||
<target>ok</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.recover">
|
||||
<source>recover</source>
|
||||
<target>odzyskaj</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.state">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.delete">
|
||||
<source>The backup was successfully deleted.</source>
|
||||
<target>Kopia zapasowa została pomyślnie usunięta.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.deleteAll">
|
||||
<source>All backups were successfully deleted.</source>
|
||||
<target>Wszystkie kopie zapasowe zostały pomyślnie usunięte.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.backupMgr.success.restore">
|
||||
<source>Restored successfully.</source>
|
||||
<target>Przywrócono pomyślnie.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.add">
|
||||
<source>Add Constant</source>
|
||||
<target>Dodaj stałą</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.add.name">
|
||||
<source>constant name</source>
|
||||
<target>nazwa stałej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.delete">
|
||||
<source>Delete Constant</source>
|
||||
<target>Usuń stałą</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.delete.question">
|
||||
<source>Are you sure that you wish to delete this constant?</source>
|
||||
<target>Czy na pewno chcesz usunąć tę stałą?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.edit.edit">
|
||||
<source>Edit Constant</source>
|
||||
<target>Edytuj stałą</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.hint">
|
||||
<source>Please enter new constant name in this field. The old constant will be replaced by the new one.</source>
|
||||
<target>Podaj nową nazwę stałej w tym polu. Stara stała zostanie zastąpiona nową.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.newName">
|
||||
<source>new constant name</source>
|
||||
<target>nazwa nowej stałej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.rename.rename">
|
||||
<source>Rename Constant</source>
|
||||
<target>Zmień nazwę stałej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.enterSearchStr">
|
||||
<source>Please enter a search word (can contain pcre syntax).</source>
|
||||
<target>Wprowadź szukane słowo (może zawierać składnię pcre).</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.result">
|
||||
<source>Search Result</source>
|
||||
<target>Wyniki wyszukiwania</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.search.search">
|
||||
<source>Search constants</source>
|
||||
<target>Wyszukaj stałe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.badMarkupHint">
|
||||
<source>untranslated constant</source>
|
||||
<target>stała nieprzetłumaczona</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.goodMarkupHint">
|
||||
<source>normal constant</source>
|
||||
<target>normalna stała</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.hideUnhideAll">
|
||||
<source>hide/unhide all</source>
|
||||
<target>ukryj/odkryj wszystkie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.root">
|
||||
<source>Root</source>
|
||||
<target>Korzeń</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.specialMarkupHint">
|
||||
<source>Unknown constant (i.e. name changed, deleted in reference)</source>
|
||||
<target>nieznana stała (tzn. zmieniła się nazwa, usunięta w odniesieniu)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.const.treeview.treeview">
|
||||
<source>View Tree</source>
|
||||
<target>Widok drzewa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.general">
|
||||
<source>General</source>
|
||||
<target>Ogólne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.hideShowUntranslated">
|
||||
<source>Hide/show untranslated languages</source>
|
||||
<target>Ukryj/pokaż nieprzetłumaczone języki</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.form">
|
||||
<source>Email information</source>
|
||||
<target>Informacja e-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.fromAddress">
|
||||
<source>from Address</source>
|
||||
<target>z adresu</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.subject">
|
||||
<source>Subject</source>
|
||||
<target>Temat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.success">
|
||||
<source>The mail was sent successfully!</source>
|
||||
<target>Wiadomość została wysłana pomyślnie!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.mail.toAddress">
|
||||
<source>to Address</source>
|
||||
<target>na adres</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author">
|
||||
<source>Extension Author</source>
|
||||
<target>Autor rozszerzenia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.email">
|
||||
<source>Email</source>
|
||||
<target>Email</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.author.name">
|
||||
<source>Name</source>
|
||||
<target>Nazwa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.cshTable">
|
||||
<source>csh_table</source>
|
||||
<target>csh_table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.desc">
|
||||
<source>Description</source>
|
||||
<target>Opis</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.metaInfo.metaInfo">
|
||||
<source>Information</source>
|
||||
<target>Informacja</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.options">
|
||||
<source>Options</source>
|
||||
<target>Opcje</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.merge">
|
||||
<source>Merge</source>
|
||||
<target>Połącz</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.split">
|
||||
<source>Split</source>
|
||||
<target>Podziel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitL10n">
|
||||
<source>l10n splitting</source>
|
||||
<target>dzielenie l10n</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.split.splitNormal">
|
||||
<source>normal splitting</source>
|
||||
<target>dzielenie normalne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.php">
|
||||
<source>PHP</source>
|
||||
<target>PHP</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.transform">
|
||||
<source>transformation</source>
|
||||
<target>przekształcenie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.general.transform.xml">
|
||||
<source>XML</source>
|
||||
<target>XML</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to cancel?</source>
|
||||
<target>Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno chcesz anulować?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmCancel.title">
|
||||
<source>Warning</source>
|
||||
<target>Ostrzeżenie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange">
|
||||
<source>All unsaved changes will be lost. Are you sure that you wish to change?</source>
|
||||
<target>Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno chcesz anulować?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.confirmChange.title">
|
||||
<source>Warning</source>
|
||||
<target>Ostrzeżenie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.langfile.edit">
|
||||
<source>Edit file</source>
|
||||
<target>Edytuj plik</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="function.search.caseSensitiveCheckbox">
|
||||
<source>case sensitive</source>
|
||||
<target>wrażliwe na wielkość liter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.complete">
|
||||
<source>complete</source>
|
||||
<target>kompletne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.file">
|
||||
<source>language file</source>
|
||||
<target>plik językowy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.l10n">
|
||||
<source>l10n</source>
|
||||
<target>l10n</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.missing">
|
||||
<source>missing original file</source>
|
||||
<target>brakuje oryginalnego pliku</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.file.write.success">
|
||||
<source>The changes are saved successfully.</source>
|
||||
<target>Zmiany zostały pomyślnie zapisane.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.incomplete">
|
||||
<source>incomplete</source>
|
||||
<target>niekompletne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.merged">
|
||||
<source>merged</source>
|
||||
<target>scalone</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.origin">
|
||||
<source>Origin</source>
|
||||
<target>Źródło</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.shortcut">
|
||||
<source>Shortcut</source>
|
||||
<target>Skrót</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.splitted">
|
||||
<source>splitted</source>
|
||||
<target>podzielone</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lang.state">
|
||||
<source>State</source>
|
||||
<target>Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constant">
|
||||
<source>Select constant</source>
|
||||
<target>Wybierz stałą</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.constantType">
|
||||
<source>Select constant type</source>
|
||||
<target>Wybierz typ stałej</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.extension">
|
||||
<source>Extension mode</source>
|
||||
<target>Tryb rozszerzenia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.l10n">
|
||||
<source>l10n mode</source>
|
||||
<target>tryb l10n</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.editingMode.override">
|
||||
<source>Override mode</source>
|
||||
<target>Tryb zastępowania</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.explodeToken">
|
||||
<source>Select explode token</source>
|
||||
<target>Wybierz token rozdzielania</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extension">
|
||||
<source>Select extension</source>
|
||||
<target>Wybierz rozszerzenie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.extensionAndWorkspace">
|
||||
<source>Select extension and workspace</source>
|
||||
<target>Wybierz rozszerzenie i przestrzeń roboczą</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.normal">
|
||||
<source>normal insert mode</source>
|
||||
<target>normalny tryb wstawiania</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.insertMode.pmktextarea">
|
||||
<source>enhanced insert mode</source>
|
||||
<target>ulepszony tryb wstawiania</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.langfile">
|
||||
<source>Select language file</source>
|
||||
<target>Wybierz plik językowy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.languageAndPattern">
|
||||
<source>Select up to two languages</source>
|
||||
<target>Wybierz do dwóch języków</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.nothing">
|
||||
<source>Nothing selected</source>
|
||||
<target>Nic nie wybrano</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.numConstants">
|
||||
<source>Select # of constants to show</source>
|
||||
<target>Wybierz # stałych, które chcesz wyświetlić</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="select.referenceLanguage">
|
||||
<source>Select reference language</source>
|
||||
<target>Wybierz język odniesienia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.backups">
|
||||
<source>This table lists all backup files of the selected extension.</source>
|
||||
<target>Ta tabela zawiera listę wszystkich plików kopii zapasowych wybranego rozszerzenia.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="table.fileInfo">
|
||||
<source>This table lists all languages of the selected language file with additional information.</source>
|
||||
<target>Ta tabela zawiera listę wszystkich języków wybranego pliku językowego z dodatkowymi informacjami.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="title">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.base">
|
||||
<source>global</source>
|
||||
<target>globalna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="workspace.xll">
|
||||
<source>local (only BE modules)</source>
|
||||
<target>lokalna (tylko moduły BE)</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" target-language="pl" datatype="plaintext" original="messages" date="2015-01-29T15:09:06Z">
|
||||
<header>
|
||||
<description>FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml
|
||||
|
||||
Special Thanks:
|
||||
Peter Klein --> danish translation
|
||||
Tapio Markula --> finnish translation</description>
|
||||
<type>module</type>
|
||||
<generator>LFEditor</generator>
|
||||
<authorName>Stefan Galinski</authorName>
|
||||
<authorEmail>stefan@sgalinski.de</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="mlang_labels_tabdescr" xml:space="preserve">
|
||||
<source>This module serves several functions for editing of language files. Translators, extension authors and simple users are supported with special functions for each of them.
|
||||
|
||||
Following functions are implemented in this module:
|
||||
|
||||
* Formats: PHP and XML
|
||||
* enhanced insert types
|
||||
* conversion from PHP to XML and vice versa
|
||||
* splitting and merging of language files
|
||||
* workspaces (local (only in backend modules) and global)
|
||||
* simple editing of constants and languages
|
||||
* flexible search and view of constants and values
|
||||
* meta information handling
|
||||
* backups, recovering and diff view</source>
|
||||
<target>Ten moduł obsługuje kilka funkcji do edycji plików językowych. Tłumacze, autorzy rozszerzeń i zwykli użytkownicy są wspierani specjalnymi funkcjami dla każdego z nich.
|
||||
|
||||
Następujące funkcje są zaimplementowane w tym module:
|
||||
|
||||
* Formaty: PHP and XML
|
||||
* ulepszone typy wstawiania
|
||||
* konwersja z PHP na XML i odwrotnie
|
||||
* dzielenie i łączenie plików językowych
|
||||
* przestrzenie robocze (lokalne (tylko w modułach backendowych) i globalne)
|
||||
* prosta edycja stałych i języków
|
||||
* elastyczne wyszukiwanie i wyświetlanie stałych i wartości
|
||||
* obsługa meta-informacji
|
||||
* kopie zapasowe, odzyskiwanie i wyświetlanie różnic</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_labels_tablabel">
|
||||
<source>Editing of Language Files</source>
|
||||
<target>Edycja Plików Językowych</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mlang_tabs_tab">
|
||||
<source>LFEditor</source>
|
||||
<target>LFEditor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="settings_canChangeEditingMode">
|
||||
<source>The user can save localization changes directly to extensions?</source>
|
||||
<target>Użytkownik może zapisywać lokalizację bezpośrednio do rozszerzenia?</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,112 +0,0 @@
|
||||
{namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
|
||||
<lfe:addJavaScriptFile javaScriptFile="{f:uri.resource(path: 'JavaScript/textareaResize.js')}" />
|
||||
|
||||
<lfe:addCssFile cssFile="{f:uri.resource(path: 'StyleSheets/Lfeditor.css')}" />
|
||||
|
||||
<f:be.container includeRequireJsModules="{
|
||||
0: 'TYPO3/CMS/Lfeditor/Lfeditor'
|
||||
}" addJsInlineLabels="{
|
||||
0: 'function.langfile.confirmCancel',
|
||||
1: 'function.langfile.confirmChange',
|
||||
2: 'function.langfile.confirmCancel.title',
|
||||
3: 'function.langfile.confirmChange.title'
|
||||
}">
|
||||
<div class="module {f:if(condition: '{V11}', then: 'v11')}">
|
||||
<div class="module-loading-indicator"></div>
|
||||
<div class="module-docheader t3js-module-docheader">
|
||||
<div class="module-docheader-bar module-docheader-bar-navigation t3js-module-docheader-bar t3js-module-docheader-bar-navigation row">
|
||||
<div class="module-docheader-bar-column-left col-xs-12 col-12 col-sm-4 col-md-3">
|
||||
<div class="form-inline row">
|
||||
<div class="form-group form-group-sm col-xs-6 col-6">
|
||||
<f:form.select additionalAttributes="{class: 'form-control t3-js-jumpMenuBox', onchange: 'TYPO3.lfEditor.jump(this)'}">
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.general.general')}"
|
||||
controller="General"
|
||||
action="general" />
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.langfile.edit')}"
|
||||
controller="EditFile"
|
||||
action="editFile"
|
||||
arguments="{buttonType: 0}" />
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.edit.edit')}"
|
||||
controller="EditConstant"
|
||||
action="editConstant" />
|
||||
<f:if condition="{defaultLanguagePermission}">
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.add.add')}"
|
||||
controller="AddConstant"
|
||||
action="addConstant" />
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.delete.delete')}"
|
||||
controller="DeleteConstant"
|
||||
action="deleteConstant" />
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.rename.rename')}"
|
||||
controller="RenameConstant"
|
||||
action="renameConstant" />
|
||||
</f:if>
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.search.search')}"
|
||||
controller="SearchConstant"
|
||||
action="searchConstant" />
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.const.treeview.treeview')}"
|
||||
controller="ViewTree"
|
||||
action="viewTree" />
|
||||
<f:if condition="{editingMode} == 'extension'">
|
||||
<f:be.menus.actionMenuItem label="{f:translate(key:'function.backupMgr.backupMgr')}"
|
||||
controller="ManageBackups"
|
||||
action="manageBackups" />
|
||||
</f:if>
|
||||
</f:form.select>
|
||||
</div>
|
||||
<f:if condition="{canChangeEditingModes}">
|
||||
<div class="form-group form-group-sm col-xs-6 col-6">
|
||||
<f:form.select additionalAttributes="{class: 'form-control t3-js-jumpMenuBox', onchange: 'TYPO3.lfEditor.jump(this)'}">
|
||||
<f:for each="{editingModeOptions}" key="editingModeOption" as="editingModeLabel">
|
||||
<f:if condition="{editingMode} == {editingModeOption}">
|
||||
<f:then>
|
||||
<f:be.menus.actionMenuItem label="{editingModeLabel}"
|
||||
controller="General"
|
||||
action="switchEditingMode"
|
||||
arguments="{editingMode: editingModeOption}"
|
||||
additionalAttributes="{selected: 'selected'}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.menus.actionMenuItem label="{editingModeLabel}"
|
||||
controller="General"
|
||||
action="switchEditingMode"
|
||||
arguments="{editingMode: editingModeOption}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</f:form.select>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="module-docheader-bar module-docheader-bar-buttons t3js-module-docheader-bar t3js-module-docheader-bar-buttons">
|
||||
<div class="module-docheader-bar-column-left">
|
||||
<div class="btn-toolbar">
|
||||
<f:render section="ButtonBarLeft" arguments="{displayBackButton: displayBackButton, displayNextButton: displayNextButton}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<f:if condition="{V11}">
|
||||
<f:then>
|
||||
<div class="module-body t3js-module-body">
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div id="typo3-docbody">
|
||||
</f:else>
|
||||
</f:if>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<f:translate key="select.langfile" />
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<f:render section="selectItems" />
|
||||
</div>
|
||||
</div>
|
||||
<f:flashMessages />
|
||||
<f:render section="main" />
|
||||
</div>
|
||||
</div>
|
||||
</f:be.container>
|
||||
@@ -1,14 +0,0 @@
|
||||
{namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
|
||||
<f:if condition="{extensionSelection} && {languageFileSelection}">
|
||||
<div class="col-md-6 col-sm-6">
|
||||
<label>
|
||||
<f:translate key="select.constant" />
|
||||
</label>
|
||||
<f:form.select name="constantSelection"
|
||||
class="form-control"
|
||||
value="{constantSelection}"
|
||||
options="{constantOptions}"
|
||||
additionalAttributes="{onchange: 'TYPO3.lfEditor.changeForm(\'mainMenuForm\')'}" />
|
||||
</div>
|
||||
</f:if>
|
||||
@@ -1,43 +0,0 @@
|
||||
{namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
{namespace core=TYPO3\CMS\Core\ViewHelpers}
|
||||
|
||||
<div class="row">
|
||||
<div class="col col-md-6">
|
||||
<div class="form-group">
|
||||
<label>{extensionLabel}</label>
|
||||
<div class="input-group">
|
||||
<f:form.select additionalAttributes="{class: 'form-control', onChange: 'TYPO3.lfEditor.jump(this)'}">
|
||||
<f:for each="{extensions}" as="extension" key="extAddress">
|
||||
<optgroup label="{extension.extLabel}">
|
||||
<f:for each="{extension.languageFileOptions}" as="langFileLabel" key="langFileOption">
|
||||
<f:if condition="{extAddress} == {extensionSelection} && {langFileOption} == {languageFileSelection}">
|
||||
<f:then>
|
||||
<f:be.menus.actionMenuItem label="{langFileLabel}"
|
||||
controller="{controllerName}"
|
||||
action="changeSelection"
|
||||
arguments="{extensionSelection: extAddress, extKey: extension.extKey, languageFileSelection: langFileOption}"
|
||||
additionalAttributes="{selected: 'selected'}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.menus.actionMenuItem label="{langFileLabel}"
|
||||
controller="{controllerName}"
|
||||
action="changeSelection"
|
||||
arguments="{extensionSelection: extAddress, extKey: extension.extKey, languageFileSelection: langFileOption}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</optgroup>
|
||||
</f:for>
|
||||
</f:form.select>
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default"
|
||||
onclick="document.getElementById('refreshLanguageFileListForm').submit();"
|
||||
title="{f:translate(key:'button.refreshLanguageFileList.title')}">
|
||||
<core:icon identifier="actions-system-refresh" size="small" />
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<f:form id="refreshLanguageFileListForm" action="refreshLanguageFileList"></f:form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,27 +0,0 @@
|
||||
{namespace lfe=SGalinski\Lfeditor\ViewHelpers}
|
||||
|
||||
<f:if condition="{extensionSelection} && {languageFileSelection} && {referenceLanguageOptions}">
|
||||
<div class="col col-md-3 col-sm-6">
|
||||
<label><f:translate key="select.languageAndPattern" /></label>
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-6">
|
||||
<div class="form-group">
|
||||
<f:form.select name="languageSelection"
|
||||
class="form-control"
|
||||
value="{languageSelection}"
|
||||
options="{languageOptions}"
|
||||
additionalAttributes="{onchange: 'TYPO3.lfEditor.changeForm(\'mainMenuForm\')'}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-6">
|
||||
<div class="form-group">
|
||||
<f:form.select name="referenceLanguageSelection"
|
||||
value="{referenceLanguageSelection}"
|
||||
class="form-control"
|
||||
options="{referenceLanguageOptions}"
|
||||
additionalAttributes="{onchange: 'TYPO3.lfEditor.changeForm(\'mainMenuForm\')'}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||