diff --git a/.gitignore b/.gitignore index 0be8d6e..8ae93d6 100644 --- a/.gitignore +++ b/.gitignore @@ -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_/ \ No newline at end of file +/_temp_/ + +/typo3conf/ext/ +/typo3conf/PackageStates.php +/typo3conf/autoload/ +/typo3conf/l10n/ \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..481b708 --- /dev/null +++ b/composer.json @@ -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": "." + } + } +} diff --git a/typo3conf/ext/ods_osm/composer.lock b/composer.lock similarity index 75% rename from typo3conf/ext/ods_osm/composer.lock rename to composer.lock index bce2282..e153d9a 100644 --- a/typo3conf/ext/ods_osm/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f6889dbce9c710b986c31bb71e4f5a29", + "content-hash": "34f4c0fd1d696e1a452d7cff7d80a09a", "packages": [ { "name": "bacon/bacon-qr-code", @@ -60,6 +60,127 @@ }, "time": "2022-12-07T17:46:57+00:00" }, + { + "name": "bobosch/ods-osm", + "version": "v4.2.2", + "source": { + "type": "git", + "url": "https://github.com/bobosch/ods_osm.git", + "reference": "a9ab59a224b296f2c4c3134a9c4914d0877ad0e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobosch/ods_osm/zipball/a9ab59a224b296f2c4c3134a9c4914d0877ad0e2", + "reference": "a9ab59a224b296f2c4c3134a9c4914d0877ad0e2", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^11.5 || ^12.4", + "wgirhad/geophp": "^3.0" + }, + "require-dev": { + "friendsoftypo3/tt-address": "^8.0", + "helhum/typo3-console": "^7.0 || ^8.0", + "typo3/cms-backend": "^11.5.6 || ^12.4", + "typo3/cms-extbase": "^11.5.6 || ^12.4", + "typo3/cms-extensionmanager": "^11.5.6 || ^12.4", + "typo3/cms-filelist": "^11.5.6 || ^12.4", + "typo3/cms-fluid": "^11.5.6 || ^12.4", + "typo3/cms-fluid-styled-content": "^11.5.6 || ^12.4", + "typo3/cms-frontend": "^11.5.6 || ^12.4", + "typo3/cms-install": "^11.5.6 || ^12.4", + "typo3/cms-lowlevel": "^11.5.6 || ^12.4", + "typo3/cms-setup": "^11.5.6 || ^12.4", + "typo3/cms-tstemplate": "^11.5.6 || ^12.4" + }, + "suggest": { + "friendsoftypo3/tt-address": "^8.0", + "lochmueller/calendarize": "^12.4" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "web-dir": ".Build/public", + "extension-key": "ods_osm" + } + }, + "autoload": { + "psr-4": { + "Bobosch\\OdsOsm\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Robert Heel", + "email": "typo3@bobosch.de", + "role": "Developer" + }, + { + "name": "Alexander Bigga", + "email": "alexander@bigga.de", + "role": "Developer" + } + ], + "description": "Add an interactive OpenStreetMap map to your website. Can also show other OpenLayers compatible maps.", + "homepage": "https://github.com/bobosch/ods_osm", + "keywords": [ + "OpenStreetMap", + "osm", + "typo3" + ], + "support": { + "issues": "https://github.com/bobosch/ods_osm/issues", + "source": "https://github.com/bobosch/ods_osm/tree/v4.2.2" + }, + "time": "2024-05-02T21:57:08+00:00" + }, + { + "name": "catbird/cartedalegare", + "version": "dev-porting_v11_to_v14", + "dist": { + "type": "path", + "url": "../t3ext/cartedalegare", + "reference": "df7c7b87cd0fb29cabee2523e045d0a9b58cdefa" + }, + "require": { + "typo3/cms-core": "^11.5" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "cartedalegare" + } + }, + "autoload": { + "psr-4": { + "Cartedalegare\\": "Classes/" + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Matteo Gallo", + "email": "matteogal@gmail.com", + "role": "Developer" + } + ], + "description": "Carte da legare Extension. Statistical graphs and data searches.", + "homepage": "https://www.catbird.it/", + "keywords": [ + "Carte da legare", + "TYPO3 CMS" + ], + "transport-options": { + "symlink": true, + "relative": true + } + }, { "name": "christian-riesen/base32", "version": "1.6.0", @@ -121,23 +242,23 @@ }, { "name": "dasprid/enum", - "version": "1.0.5", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { "php": ">=7.1 <9.0" }, "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", "squizlabs/php_codesniffer": "*" }, "type": "library", @@ -165,22 +286,92 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2023-08-25T16:18:39+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { - "name": "doctrine/annotations", - "version": "1.14.3", + "name": "dirkpersky/typo3-dp_cookieconsent", + "version": "11.6.3", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + "url": "https://github.com/DirkPersky/typo3-dp_cookieconsent.git", + "reference": "a1dcc34d3d6c5ec9ee0adb7a8c79fade001636d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "url": "https://api.github.com/repos/DirkPersky/typo3-dp_cookieconsent/zipball/a1dcc34d3d6c5ec9ee0adb7a8c79fade001636d1", + "reference": "a1dcc34d3d6c5ec9ee0adb7a8c79fade001636d1", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^10.4.0||^11.5.0||dev-master" + }, + "replace": { + "typo3-ter/dp_cookieconsent": "self.version" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "web-dir": ".Build/Web", + "extension-key": "dp_cookieconsent", + "cms-package-dir": "{$vendor-dir}/typo3/cms" + } + }, + "autoload": { + "psr-4": { + "DirkPersky\\DpCookieconsent\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Dirk Persky", + "homepage": "http://dp-wired.de", + "role": "Developer" + } + ], + "description": "Enable a cookie consent box. Let you visitors control the usage of cookies and load script or content after a consent. (ePrivacy, TTDSG)", + "homepage": "https://github.com/DirkPersky/typo3-dp_cookieconsent", + "keywords": [ + "consent", + "cookie", + "cookieconsent", + "dsgvo", + "ePrivacy", + "typo3" + ], + "support": { + "issues": "https://github.com/DirkPersky/typo3-dp_cookieconsent/issues", + "source": "https://github.com/DirkPersky/typo3-dp_cookieconsent/tree/11.6.3" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/dirkpersky", + "type": "custom" + }, + { + "url": "https://github.com/DirkPersky", + "type": "github" + } + ], + "time": "2022-06-20T16:05:21+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.14.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "shasum": "" }, "require": { @@ -191,11 +382,11 @@ }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" }, "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" @@ -241,9 +432,10 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" + "source": "https://github.com/doctrine/annotations/tree/1.14.4" }, - "time": "2023-02-01T09:20:38+00:00" + "abandoned": true, + "time": "2024-09-05T10:15:52+00:00" }, { "name": "doctrine/cache", @@ -336,6 +528,7 @@ "type": "tidelift" } ], + "abandoned": true, "time": "2022-05-20T20:07:39+00:00" }, { @@ -449,29 +642,30 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" + }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -479,7 +673,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -490,9 +684,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/event-manager", @@ -801,25 +995,25 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.15.4", + "version": "0.18.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4" + "reference": "6a2c069dab3843ca4d887ff09c972fc7033888d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/6a2c069dab3843ca4d887ff09c972fc7033888d0", + "reference": "6a2c069dab3843ca4d887ff09c972fc7033888d0", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^7.0 || ^8.0" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^8.5" + "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" }, "type": "library", "autoload": { @@ -840,31 +1034,250 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.18.0" }, - "time": "2022-02-21T09:13:59+00:00" + "time": "2024-02-22T17:51:05+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "name": "friendsoftypo3/tt-address", + "version": "8.1.1", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "url": "https://github.com/FriendsOfTYPO3/tt_address.git", + "reference": "bd62c49fb38985f0e4ab95faf43084a17ac01395" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/FriendsOfTYPO3/tt_address/zipball/bd62c49fb38985f0e4ab95faf43084a17ac01395", + "reference": "bd62c49fb38985f0e4ab95faf43084a17ac01395", + "shasum": "" + }, + "require": { + "php": ">=7.4", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "typo3/cms-core": "^11.5 || ^12.4" + }, + "replace": { + "typo3-ter/tt-address": "self.version" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.6.15", + "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": "^0.0.1", + "typo3/cms-extensionmanager": "^11.5 || ^12", + "typo3/cms-install": "^11.5 || ^12" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "app-dir": ".Build", + "web-dir": ".Build/public", + "extension-key": "tt_address" + } + }, + "autoload": { + "psr-4": { + "FriendsOfTYPO3\\TtAddress\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "tt_address Development Team", + "role": "Developer" + } + ], + "description": "Displays a list of addresses from an address table on the page.", + "homepage": "https://extensions.typo3.org/extension/tt_address", + "keywords": [ + "addresses", + "extension", + "typo3" + ], + "support": { + "docs": "https://docs.typo3.org/p/friendsoftypo3/tt-address/main/en-us/", + "issues": "https://github.com/FriendsOfTYPO3/tt_address/issues", + "source": "https://github.com/FriendsOfTYPO3/tt_address" + }, + "time": "2024-07-10T08:41:43+00:00" + }, + { + "name": "georgringer/news", + "version": "9.4.0", + "source": { + "type": "git", + "url": "https://github.com/georgringer/news.git", + "reference": "dbecd7289de6554c06b733de7c8337c52cb3a130" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/georgringer/news/zipball/dbecd7289de6554c06b733de7c8337c52cb3a130", + "reference": "dbecd7289de6554c06b733de7c8337c52cb3a130", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^10.4 || ^11" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7" + }, + "replace": { + "typo3-ter/news": "self.version" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "typo3/cms-install": "^10.4 || ^11" + }, + "suggest": { + "georgringer/numbered-pagination": "Improved pagination API", + "reelworx/rx-shariff": "GDPR compliant social sharing" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "app-dir": ".Build", + "web-dir": ".Build/public", + "extension-key": "news" + } + }, + "autoload": { + "psr-4": { + "GeorgRinger\\News\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Georg Ringer", + "role": "Developer" + } + ], + "description": "Versatile news system based on Extbase & Fluid and using the latest technologies provided by TYPO3 CMS.", + "homepage": "https://extensions.typo3.org/extension/news", + "keywords": [ + "article", + "extension", + "news", + "typo3" + ], + "support": { + "docs": "https://docs.typo3.org/p/georgringer/news/main/en-us/", + "issues": "https://github.com/georgringer/news/issues", + "source": "https://github.com/georgringer/news" + }, + "funding": [ + { + "url": "https://www.paypal.me/GeorgRinger/10", + "type": "custom" + }, + { + "url": "https://www.patreon.com/georgringer", + "type": "patreon" + } + ], + "time": "2022-04-26T17:07:12+00:00" + }, + { + "name": "georgringer/numbered-pagination", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/georgringer/numbered_pagination.git", + "reference": "ac7277a088dbfd0a35b8c4477bb0943e2fae0099" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/georgringer/numbered_pagination/zipball/ac7277a088dbfd0a35b8c4477bb0943e2fae0099", + "reference": "ac7277a088dbfd0a35b8c4477bb0943e2fae0099", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "typo3/cms-core": "^9 || ^10 || ^11 || ^12" + }, + "replace": { + "typo3-ter/numbered-pagination": "self.version" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "numbered_pagination" + } + }, + "autoload": { + "psr-4": { + "GeorgRinger\\NumberedPagination\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Georg Ringer", + "role": "Developer" + } + ], + "description": "Improved pagination for TYPO3", + "homepage": "https://github.com/georgringer/numbered_pagination", + "keywords": [ + "pagination", + "typo3" + ], + "support": { + "issues": "https://github.com/georgringer/numbered_pagination/issues", + "source": "https://github.com/georgringer/numbered_pagination/tree/2.0.0" + }, + "funding": [ + { + "url": "https://paypal.me/GeorgRinger/10", + "type": "custom" + }, + { + "url": "https://www.amazon.de/hz/wishlist/ls/8F573K08TSDG", + "type": "custom" + }, + { + "url": "https://github.com/georgringer", + "type": "github" + }, + { + "url": "https://www.patreon.com/georgringer", + "type": "patreon" + } + ], + "time": "2023-10-05T09:11:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.13.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/55901a76dfd2006a0cc012b9e3c5b487f796478d", + "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^2.5", + "guzzlehttp/psr7": "^2.12.3", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-client-implementation": "1.0" @@ -872,9 +1285,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", + "guzzlehttp/test-server": "^0.6", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -952,7 +1366,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.13.1" }, "funding": [ { @@ -968,28 +1382,29 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2026-06-29T20:14:18+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "type": "library", "extra": { @@ -1035,7 +1450,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.5.0" }, "funding": [ { @@ -1051,27 +1466,29 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2026-06-02T12:23:43+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.12.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d", + "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-factory-implementation": "1.0", @@ -1079,8 +1496,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1151,7 +1569,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.12.3" }, "funding": [ { @@ -1167,33 +1585,33 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2026-06-23T15:21:08+00:00" }, { "name": "lolli42/finediff", - "version": "1.0.3", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/lolli42/FineDiff.git", - "reference": "8d535de757062fed8412833f5eede7064595ca5b" + "reference": "38a03ca581ee72d7b20bbb1d89d47c5ecf8b11ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lolli42/FineDiff/zipball/8d535de757062fed8412833f5eede7064595ca5b", - "reference": "8d535de757062fed8412833f5eede7064595ca5b", + "url": "https://api.github.com/repos/lolli42/FineDiff/zipball/38a03ca581ee72d7b20bbb1d89d47c5ecf8b11ba", + "reference": "38a03ca581ee72d7b20bbb1d89d47c5ecf8b11ba", "shasum": "" }, "require": { - "php": ">=7.2.0", - "symfony/polyfill-mbstring": "^1.23" + "ext-mbstring": "*", + "php": ">=8.2" }, "replace": { "cogpowered/finediff": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.4", - "phpstan/phpstan": "^1.9.14", - "phpunit/phpunit": "^8.5.33 || ^9.6.11 || ^10.3.2" + "friendsofphp/php-cs-fixer": "^3.89.1", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^11.5.43 || ^12.4.2" }, "type": "library", "autoload": { @@ -1230,22 +1648,22 @@ ], "support": { "issues": "https://github.com/lolli42/FineDiff/issues", - "source": "https://github.com/lolli42/FineDiff/tree/1.0.3" + "source": "https://github.com/lolli42/FineDiff/tree/1.1.2" }, - "time": "2024-02-06T13:56:20+00:00" + "time": "2025-10-31T12:28:27+00:00" }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.1", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fd5018f6815fff903946d0564977b44ce8010e29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fd5018f6815fff903946d0564977b44ce8010e29", + "reference": "fd5018f6815fff903946d0564977b44ce8010e29", "shasum": "" }, "require": { @@ -1253,7 +1671,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9 || ^10" }, "type": "library", "extra": { @@ -1297,22 +1715,207 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.1" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2026-06-23T18:43:15+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.19.1", + "name": "matthiasmullie/minify", + "version": "1.3.75", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "url": "https://github.com/matthiasmullie/minify.git", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/76ba4a5f555fd7bf4aa408af608e991569076671", + "reference": "76ba4a5f555fd7bf4aa408af608e991569076671", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "matthiasmullie/path-converter": "~1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": ">=2.0", + "matthiasmullie/scrapbook": ">=1.3", + "phpunit/phpunit": ">=4.8" + }, + "suggest": { + "psr/cache-implementation": "Cache implementation to use with Minify::cache" + }, + "bin": [ + "bin/minifycss", + "bin/minifyjs" + ], + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\Minify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "minify@mullie.eu", + "homepage": "https://www.mullie.eu", + "role": "Developer" + } + ], + "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", + "homepage": "https://github.com/matthiasmullie/minify", + "keywords": [ + "JS", + "css", + "javascript", + "minifier", + "minify" + ], + "support": { + "issues": "https://github.com/matthiasmullie/minify/issues", + "source": "https://github.com/matthiasmullie/minify/tree/1.3.75" + }, + "funding": [ + { + "url": "https://github.com/matthiasmullie", + "type": "github" + } + ], + "time": "2025-06-25T09:56:19+00:00" + }, + { + "name": "matthiasmullie/path-converter", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/path-converter.git", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\PathConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "pathconverter@mullie.eu", + "homepage": "http://www.mullie.eu", + "role": "Developer" + } + ], + "description": "Relative path converter", + "homepage": "http://github.com/matthiasmullie/path-converter", + "keywords": [ + "converter", + "path", + "paths", + "relative" + ], + "support": { + "issues": "https://github.com/matthiasmullie/path-converter/issues", + "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3" + }, + "time": "2019-02-05T23:41:09+00:00" + }, + { + "name": "minifranske/fs-media-gallery", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/chrcan/fs_media_gallery.git", + "reference": "e13f324aa177419126e0a9cb55f244275a10d862" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chrcan/fs_media_gallery/zipball/e13f324aa177419126e0a9cb55f244275a10d862", + "reference": "e13f324aa177419126e0a9cb55f244275a10d862", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^11.4" + }, + "replace": { + "typo3-ter/fs-media-gallery": "self.version" + }, + "suggest": { + "georgringer/numbered-pagination": "^1.0.1" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "fs_media_gallery" + }, + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "MiniFranske\\FsMediaGallery\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Frans Saris", + "homepage": "http://minifranske.nl", + "role": "Developer" + } + ], + "description": "A FAL based media gallery for TYPO3. Show your assets from your local or remote storage as a gallery of albums.", + "keywords": [ + "extension", + "gallery", + "images", + "media", + "typo3" + ], + "support": { + "issues": "https://github.com/chrcan/fs_media_gallery/issues", + "source": "https://github.com/chrcan/fs_media_gallery/tree/3.0.2" + }, + "time": "2022-03-11T19:27:37+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.19.5", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", "shasum": "" }, "require": { @@ -1321,17 +1924,12 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -1353,66 +1951,248 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2025-12-06T11:45:25+00:00" }, { - "name": "phayes/geophp", - "version": "1.2", + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/phayes/geoPHP.git", - "reference": "015404e85b602e0df1f91441f8db0f9e98f7e567" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phayes/geoPHP/zipball/015404e85b602e0df1f91441f8db0f9e98f7e567", - "reference": "015404e85b602e0df1f91441f8db0f9e98f7e567", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "4.1.*" - }, - "type": "library", - "autoload": { - "classmap": [ - "geoPHP.inc" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2 or New-BSD" - ], - "authors": [ - { - "name": "Patrick Hayes" - } - ], - "description": "GeoPHP is a open-source native PHP library for doing geometry operations. It is written entirely in PHP and can therefore run on shared hosts. It can read and write a wide variety of formats: WKT (including EWKT), WKB (including EWKB), GeoJSON, KML, GPX, GeoRSS). It works with all Simple-Feature geometries (Point, LineString, Polygon, GeometryCollection etc.) and can be used to get centroids, bounding-boxes, area, and a wide variety of other useful information.", - "homepage": "https://github.com/phayes/geoPHP", - "support": { - "issues": "https://github.com/phayes/geoPHP/issues", - "source": "https://github.com/phayes/geoPHP/tree/master" - }, - "time": "2014-12-02T06:11:22+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.7", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "31a105931bc8ffa3a123383829772e832fd8d903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", + "reference": "31a105931bc8ffa3a123383829772e832fd8d903", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1 || ^2" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7" + }, + "time": "2026-03-18T20:47:46+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" + }, + "time": "2025-11-21T15:09:14+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" + }, + "time": "2026-01-25T14:56:51+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -1432,7 +2212,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -1442,9 +2222,9 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", @@ -1598,20 +2378,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -1635,7 +2415,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -1647,9 +2427,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -1911,60 +2691,259 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "sgalinski/lfeditor", + "version": "7.1.10", + "source": { + "type": "git", + "url": "https://gitlab.sgalinski.de/typo3/lfeditor.git", + "reference": "506e7a54aa0c77e166e9677d296693ad82f6a812" + }, + "require": { + "typo3/cms-core": "^10.4 || ^11.5" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "lfeditor" + } + }, + "autoload": { + "psr-4": { + "SGalinski\\Lfeditor\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "Language File Editor", + "homepage": "https://www.sgalinski.de", + "support": { + "issues": "https://gitlab.sgalinski.de/typo3/lfeditor/issues", + "source": "https://gitlab.sgalinski.de/typo3/lfeditor/" + }, + "time": "2023-01-04T18:20:47+00:00" + }, + { + "name": "sjbr/sr-feuser-register", + "version": "v11.5.4", + "source": { + "type": "git", + "url": "https://codeberg.org/sjbr/sr-feuser-register", + "reference": "a30a05d5eb5469c0554a6cddf69738a38900ee77" + }, + "require": { + "sjbr/static-info-tables": "^6.9 || ^11.5", + "typo3/cms-core": "^10.4.21 || ^11.5", + "typo3/cms-felogin": "^10.4.21 || ^11.5" + }, + "replace": { + "typo3-ter/sr-feuser-register": "self.version" + }, + "suggest": { + "directmailteam/direct-mail": "Allows to send newsletters to registered users.", + "sjbr/sr-freecap": "Allows to add a captcha to the registration form." + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "sr_feuser_register" + } + }, + "autoload": { + "psr-4": { + "SJBR\\SrFeuserRegister\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Stanislas Rolland", + "homepage": "https://www.sjbr.ca", + "role": "Developer" + } + ], + "description": "A self-registration variant of Kasper Skårhøj's Front End User Admin extension for TYPO3 CMS.", + "homepage": "https://codeberg.org/sjbr/sr-feuser-register", + "keywords": [ + "fe_users", + "frontend", + "registration", + "typo3", + "user" + ], + "support": { + "issues": "https://codeberg.org/sjbr/sr-feuser-register/issues" + }, + "time": "2022-10-23T15:09:53+00:00" + }, + { + "name": "sjbr/sr-freecap", + "version": "v11.5.2", + "source": { + "type": "git", + "url": "https://codeberg.org/sjbr/sr-freecap", + "reference": "d24fe574e3da54486d3509d12d1cab514978b461" + }, + "require": { + "typo3/cms-core": "^11.5" + }, + "replace": { + "typo3-ter/sr-freecap": "self.version" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "sr_freecap" + } + }, + "autoload": { + "psr-4": { + "SJBR\\SrFreecap\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Stanislas Rolland", + "homepage": "https://www.sjbr.ca", + "role": "Developer" + } + ], + "description": "A TYPO3 integration of freeCap CAPTCHA.", + "homepage": "https://codeberg.org/sjbr/sr-freecap", + "keywords": [ + "captcha", + "typo3" + ], + "support": { + "issues": "https://codeberg.org/sjbr/sr-freecap/issues" + }, + "time": "2022-11-19T21:58:04+00:00" + }, + { + "name": "sjbr/static-info-tables", + "version": "v11.5.3", + "source": { + "type": "git", + "url": "https://codeberg.org/sjbr/static-info-tables", + "reference": "5c07b63ae7aad9fa668be61bec797b11a898b484" + }, + "require": { + "typo3/cms-backend": ">=11.5, <12.0", + "typo3/cms-core": ">=11.5, <12.0", + "typo3/cms-extbase": ">=11.5, <12.0", + "typo3/cms-extensionmanager": ">=11.5, <12.0", + "typo3/cms-fluid": ">=11.5, <12.0", + "typo3/cms-frontend": ">=11.5, <12.0" + }, + "replace": { + "typo3-ter/static-info-tables": "self.version" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "static_info_tables" + } + }, + "autoload": { + "psr-4": { + "SJBR\\StaticInfoTables\\": "Classes/" + }, + "exclude-from-classmap": [ + "Classes/Domain/Model/Country", + "Classes/Domain/Model/CountryZone", + "Classes/Domain/Model/Currency", + "Classes/Domain/Model/Language", + "Classes/Domain/Model/Territory" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Stanislas Rolland", + "homepage": "https://www.sjbr.ca", + "role": "Developer" + }, + { + "name": "René Fritz", + "role": "Developer" + } + ], + "description": "Data and API for countries, languages and currencies for use in TYPO3 CMS.", + "homepage": "https://codeberg.org/sjbr/static-info-tables", + "keywords": [ + "Static Info Tables", + "typo3" + ], + "support": { + "issues": "https://codeberg.org/sjbr/static-info-tables/issues" + }, + "time": "2022-10-11T15:40:28+00:00" + }, { "name": "symfony/cache", - "version": "v5.4.38", + "version": "v6.4.42", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "223c3afac82e003a76931b71d77db408636a0de8" + "reference": "704edf29f1c97ff6e36e248def6ff4a51f765ce1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/223c3afac82e003a76931b71d77db408636a0de8", - "reference": "223c3afac82e003a76931b71d77db408636a0de8", + "url": "https://api.github.com/repos/symfony/cache/zipball/704edf29f1c97ff6e36e248def6ff4a51f765ce1", + "reference": "704edf29f1c97ff6e36e248def6ff4a51f765ce1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.3.6|^7.0" }, "conflict": { "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" }, "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ "/Tests/" ] @@ -1990,7 +2969,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.38" + "source": "https://github.com/symfony/cache/tree/v6.4.42" }, "funding": [ { @@ -2001,42 +2980,43 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-19T09:55:32+00:00" + "time": "2026-06-17T14:17:34+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.3", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463" + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463", - "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9789738bc19af1106dc54d6afba9a0b467516cf2", + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" - }, - "suggest": { - "symfony/cache-implementation": "" + "php": ">=8.1", + "psr/cache": "^3.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { @@ -2069,7 +3049,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/cache-contracts/tree/v3.7.1" }, "funding": [ { @@ -2080,25 +3060,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/config", - "version": "v5.4.38", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14" + "reference": "977c88a02d7d3f16904a81907531b19666a08e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14", - "reference": "3dcd47d4bbd9fea4d1210e7a7a0a5ca02d99df14", + "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78", + "reference": "977c88a02d7d3f16904a81907531b19666a08e78", "shasum": "" }, "require": { @@ -2148,7 +3132,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.38" + "source": "https://github.com/symfony/config/tree/v5.4.46" }, "funding": [ { @@ -2164,20 +3148,20 @@ "type": "tidelift" } ], - "time": "2024-03-22T10:04:40+00:00" + "time": "2024-10-30T07:58:02+00:00" }, { "name": "symfony/console", - "version": "v5.4.36", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", - "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -2247,7 +3231,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.36" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -2263,20 +3247,20 @@ "type": "tidelift" } ], - "time": "2024-02-20T16:33:57+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.38", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17" + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0ba1fa459d284a9398c71afa1cb5d13de025de17", - "reference": "0ba1fa459d284a9398c71afa1cb5d13de025de17", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", "shasum": "" }, "require": { @@ -2336,7 +3320,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.38" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.48" }, "funding": [ { @@ -2352,33 +3336,33 @@ "type": "tidelift" } ], - "time": "2024-03-18T16:56:51+00:00" + "time": "2024-11-20T10:51:57+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.3", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d", - "reference": "80d075412b557d41002320b96a096ca65aa2c98d", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { @@ -2403,7 +3387,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" }, "funding": [ { @@ -2414,53 +3398,52 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2023-01-24T14:02:46+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.35", + "version": "v6.4.37", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38" + "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7a69a85c7ea5bdd1e875806a99c51a87d3a74b38", - "reference": "7a69a85c7ea5bdd1e875806a99c51a87d3a74b38", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2e3bf817ba9347341ab15926700fb6320367c0e1", + "reference": "2e3bf817ba9347341ab15926700fb6320367c0e1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2488,7 +3471,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.35" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.37" }, "funding": [ { @@ -2499,25 +3482,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2026-04-13T14:11:12+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73" + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/540f4c73e87fd0c71ca44a6aa305d024ac68cb73", - "reference": "540f4c73e87fd0c71ca44a6aa305d024ac68cb73", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", + "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f", "shasum": "" }, "require": { @@ -2529,12 +3516,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2567,7 +3554,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.4" }, "funding": [ { @@ -2583,20 +3570,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/expression-language", - "version": "v5.4.35", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "d59441c10a5a73cd9d4d778b8253595a16f6716d" + "reference": "a784b66edc4c151eb05076d04707906ee2c209a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/d59441c10a5a73cd9d4d778b8253595a16f6716d", - "reference": "d59441c10a5a73cd9d4d778b8253595a16f6716d", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/a784b66edc4c151eb05076d04707906ee2c209a9", + "reference": "a784b66edc4c151eb05076d04707906ee2c209a9", "shasum": "" }, "require": { @@ -2630,7 +3617,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v5.4.35" + "source": "https://github.com/symfony/expression-language/tree/v5.4.45" }, "funding": [ { @@ -2646,20 +3633,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-10-04T14:55:40+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.38", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "899330a01056077271e2f614c7b28b0379a671eb" + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/899330a01056077271e2f614c7b28b0379a671eb", - "reference": "899330a01056077271e2f614c7b28b0379a671eb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "shasum": "" }, "require": { @@ -2668,6 +3655,9 @@ "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, + "require-dev": { + "symfony/process": "^5.4|^6.4" + }, "type": "library", "autoload": { "psr-4": { @@ -2694,7 +3684,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.38" + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" }, "funding": [ { @@ -2710,20 +3700,20 @@ "type": "tidelift" } ], - "time": "2024-03-21T08:05:07+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/finder", - "version": "v5.4.35", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/abe6d6f77d9465fed3cd2d029b29d03b56b56435", - "reference": "abe6d6f77d9465fed3cd2d029b29d03b56b56435", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -2757,7 +3747,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.35" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -2773,20 +3763,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.38", + "version": "v5.4.50", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d8c13d35f68c69e15595fe37fa2c225d11c10f7e" + "reference": "1a0706e8b8041046052ea2695eb8aeee04f97609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d8c13d35f68c69e15595fe37fa2c225d11c10f7e", - "reference": "d8c13d35f68c69e15595fe37fa2c225d11c10f7e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1a0706e8b8041046052ea2695eb8aeee04f97609", + "reference": "1a0706e8b8041046052ea2695eb8aeee04f97609", "shasum": "" }, "require": { @@ -2796,7 +3786,7 @@ "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "predis/predis": "~1.0", + "predis/predis": "^1.0|^2.0", "symfony/cache": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", @@ -2833,7 +3823,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.38" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.50" }, "funding": [ { @@ -2844,39 +3834,43 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-19T10:19:25+00:00" + "time": "2025-11-03T12:58:48+00:00" }, { "name": "symfony/lock", - "version": "v5.4.38", + "version": "v6.4.42", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "d1a912eaac5a39e2fac19e00055d07890a1b9187" + "reference": "b9e0464c0085b12fb50924f87883421e67917b33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/d1a912eaac5a39e2fac19e00055d07890a1b9187", - "reference": "d1a912eaac5a39e2fac19e00055d07890a1b9187", + "url": "https://api.github.com/repos/symfony/lock/zipball/b9e0464c0085b12fb50924f87883421e67917b33", + "reference": "b9e0464c0085b12fb50924f87883421e67917b33", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/dbal": "<2.13" + "doctrine/dbal": "<2.13.1", + "symfony/cache": "<6.2" }, "require-dev": { - "doctrine/dbal": "^2.13|^3|^4", - "predis/predis": "~1.0" + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0" }, "type": "library", "autoload": { @@ -2912,7 +3906,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v5.4.38" + "source": "https://github.com/symfony/lock/tree/v6.4.42" }, "funding": [ { @@ -2923,25 +3917,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-16T08:39:04+00:00" + "time": "2026-06-16T10:12:24+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.38", + "version": "v5.4.52", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "1d0ef27f1b19b9a0175a0e130d1df3113e5a130e" + "reference": "5b5385bc21c3549a80abc1353ccf8eb0b6861c61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/1d0ef27f1b19b9a0175a0e130d1df3113e5a130e", - "reference": "1d0ef27f1b19b9a0175a0e130d1df3113e5a130e", + "url": "https://api.github.com/repos/symfony/mailer/zipball/5b5385bc21c3549a80abc1353ccf8eb0b6861c61", + "reference": "5b5385bc21c3549a80abc1353ccf8eb0b6861c61", "shasum": "" }, "require": { @@ -2988,7 +3986,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.4.38" + "source": "https://github.com/symfony/mailer/tree/v5.4.52" }, "funding": [ { @@ -2999,25 +3997,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-19T10:19:25+00:00" + "time": "2026-05-11T06:39:31+00:00" }, { "name": "symfony/mime", - "version": "v5.4.38", + "version": "v5.4.52", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "82fa6be8a0295a3932df871e88fc8c8d77aa71d4" + "reference": "8f89d3a319b92486b0bcc43c0479d19fdb0e2f64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/82fa6be8a0295a3932df871e88fc8c8d77aa71d4", - "reference": "82fa6be8a0295a3932df871e88fc8c8d77aa71d4", + "url": "https://api.github.com/repos/symfony/mime/zipball/8f89d3a319b92486b0bcc43c0479d19fdb0e2f64", + "reference": "8f89d3a319b92486b0bcc43c0479d19fdb0e2f64", "shasum": "" }, "require": { @@ -3073,7 +4075,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.38" + "source": "https://github.com/symfony/mime/tree/v5.4.52" }, "funding": [ { @@ -3084,25 +4086,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-21T07:25:32+00:00" + "time": "2026-05-05T14:35:32+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.21", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9" + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", - "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "shasum": "" }, "require": { @@ -3142,7 +4148,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.21" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" }, "funding": [ { @@ -3158,24 +4164,24 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:03:56+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3186,8 +4192,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3221,7 +4227,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -3232,29 +4238,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.38.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3262,8 +4272,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3299,7 +4309,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" }, "funding": [ { @@ -3310,29 +4320,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-05-26T05:58:03+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.29.0", + "version": "v1.38.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1" + "reference": "445c90e341fccda10311019cf82ff73bb7343945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/07094a28851a49107f3ab4f9120ca2975a64b6e1", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/445c90e341fccda10311019cf82ff73bb7343945", + "reference": "445c90e341fccda10311019cf82ff73bb7343945", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance and support of other locales than \"en\"" @@ -3340,8 +4354,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3383,7 +4397,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.38.0" }, "funding": [ { @@ -3394,31 +4408,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:12:16+00:00" + "time": "2026-05-25T11:52:53+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.38.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "dc21118016c039a66235cf93d96b435ffb282412" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", + "reference": "dc21118016c039a66235cf93d96b435ffb282412", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -3426,8 +4443,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3467,7 +4484,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1" }, "funding": [ { @@ -3478,29 +4495,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-05-25T15:22:23+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.38.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3508,8 +4529,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3548,7 +4569,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" }, "funding": [ { @@ -3559,29 +4580,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-05-25T13:48:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.38.2", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3592,8 +4618,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3628,7 +4654,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" }, "funding": [ { @@ -3640,76 +4666,7 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/nicolas-grekas", "type": "github" }, { @@ -3717,30 +4674,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-05-27T06:59:30+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3777,7 +4734,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" }, "funding": [ { @@ -3788,35 +4745,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3857,7 +4818,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -3868,35 +4829,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.38.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", + "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3933,7 +4898,172 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:45:58+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.38.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T06:51:48+00:00" + }, + { + "name": "symfony/property-access", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "111e7ed617509f1a9139686055d234aad6e388e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/111e7ed617509f1a9139686055d234aad6e388e0", + "reference": "111e7ed617509f1a9139686055d234aad6e388e0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/property-info": "^5.2|^6.0" + }, + "require-dev": { + "symfony/cache": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v5.4.45" }, "funding": [ { @@ -3949,20 +5079,111 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "symfony/rate-limiter", - "version": "v5.4.35", + "name": "symfony/property-info", + "version": "v5.4.48", "source": { "type": "git", - "url": "https://github.com/symfony/rate-limiter.git", - "reference": "9bd24ef2e0948fff4d6741798ba4c7468b75bc8d" + "url": "https://github.com/symfony/property-info.git", + "reference": "a0396295ad585f95fccd690bc6a281e5bd303902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/9bd24ef2e0948fff4d6741798ba4c7468b75bc8d", - "reference": "9bd24ef2e0948fff4d6741798ba4c7468b75bc8d", + "url": "https://api.github.com/repos/symfony/property-info/zipball/a0396295ad585f95fccd690bc6a281e5bd303902", + "reference": "a0396295ad585f95fccd690bc6a281e5bd303902", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-25T16:14:41+00:00" + }, + { + "name": "symfony/rate-limiter", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/rate-limiter.git", + "reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/c902bf796ca6c9656c3cc8185b53afb9acbb7c72", + "reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72", "shasum": "" }, "require": { @@ -4003,7 +5224,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v5.4.35" + "source": "https://github.com/symfony/rate-limiter/tree/v5.4.47" }, "funding": [ { @@ -4019,20 +5240,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2024-11-07T11:51:21+00:00" }, { "name": "symfony/routing", - "version": "v5.4.38", + "version": "v5.4.53", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "f455f06d4ee7d354d9dcaf7d436532c1f388ee01" + "reference": "f4ca0c533854c26e3b27e981da760807f89e1a42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/f455f06d4ee7d354d9dcaf7d436532c1f388ee01", - "reference": "f455f06d4ee7d354d9dcaf7d436532c1f388ee01", + "url": "https://api.github.com/repos/symfony/routing/zipball/f4ca0c533854c26e3b27e981da760807f89e1a42", + "reference": "f4ca0c533854c26e3b27e981da760807f89e1a42", "shasum": "" }, "require": { @@ -4093,7 +5314,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.38" + "source": "https://github.com/symfony/routing/tree/v5.4.53" }, "funding": [ { @@ -4104,25 +5325,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-03-18T16:56:51+00:00" + "time": "2026-05-22T19:02:28+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.3", + "version": "v2.5.4", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3" + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3", - "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "shasum": "" }, "require": { @@ -4138,12 +5363,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4176,7 +5401,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.3" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" }, "funding": [ { @@ -4192,38 +5417,37 @@ "type": "tidelift" } ], - "time": "2023-04-21T15:04:16+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/string", - "version": "v5.4.36", + "version": "v6.4.39", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b" + "reference": "62e3c927de664edadb5bef260987eb047a17a113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e232c83622bd8cd32b794216aa29d0d266d353b", - "reference": "4e232c83622bd8cd32b794216aa29d0d266d353b", + "url": "https://api.github.com/repos/symfony/string/zipball/62e3c927de664edadb5bef260987eb047a17a113", + "reference": "62e3c927de664edadb5bef260987eb047a17a113", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4262,7 +5486,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.36" + "source": "https://github.com/symfony/string/tree/v6.4.39" }, "funding": [ { @@ -4273,33 +5497,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-02-01T08:49:30+00:00" + "time": "2026-05-12T11:44:19+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.35", + "version": "v7.4.14", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "abb0a151b62d6b07e816487e20040464af96cae7" + "reference": "0118811b1d59f323bf131250b3fb919febfece28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7", - "reference": "abb0a151b62d6b07e816487e20040464af96cae7", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0118811b1d59f323bf131250b3fb919febfece28", + "reference": "0118811b1d59f323bf131250b3fb919febfece28", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4332,10 +5562,12 @@ "export", "hydrate", "instantiate", + "lazy-loading", + "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.35" + "source": "https://github.com/symfony/var-exporter/tree/v7.4.14" }, "funding": [ { @@ -4346,25 +5578,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2026-06-27T08:41:53+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.35", + "version": "v5.4.53", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4" + "reference": "ae0bbb46f77ff56591d0a0259c7f458f4b3e1f77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e78db7f5c70a21f0417a31f414c4a95fe76c07e4", - "reference": "e78db7f5c70a21f0417a31f414c4a95fe76c07e4", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ae0bbb46f77ff56591d0a0259c7f458f4b3e1f77", + "reference": "ae0bbb46f77ff56591d0a0259c7f458f4b3e1f77", "shasum": "" }, "require": { @@ -4410,7 +5646,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.35" + "source": "https://github.com/symfony/yaml/tree/v5.4.53" }, "funding": [ { @@ -4421,38 +5657,213 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-01-23T13:51:25+00:00" + "time": "2026-05-20T17:13:41+00:00" }, { - "name": "typo3/class-alias-loader", - "version": "v1.1.4", + "name": "t3brightside/embedassets", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/TYPO3/class-alias-loader.git", - "reference": "f6fc1f5fb04c42195e8e663b43aced4919ef318f" + "url": "https://github.com/t3brightside/embedassets.git", + "reference": "480ec7ff9c22ae3ffc87fdd114c7ffe8cc1e99f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/f6fc1f5fb04c42195e8e663b43aced4919ef318f", - "reference": "f6fc1f5fb04c42195e8e663b43aced4919ef318f", + "url": "https://api.github.com/repos/t3brightside/embedassets/zipball/480ec7ff9c22ae3ffc87fdd114c7ffe8cc1e99f1", + "reference": "480ec7ff9c22ae3ffc87fdd114c7ffe8cc1e99f1", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3.7" + "matthiasmullie/minify": "^1.3", + "typo3/cms-fluid": "^11.5 || ^12.4 || ^13.0" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "embedassets" + } + }, + "autoload": { + "psr-4": { + "Brightside\\Embedassets\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Tanel Põld", + "homepage": "https://t3brightside.com", + "role": "Developer" + } + ], + "description": "Fluid viewhelpers for embed and minified CSS/JS", + "homepage": "https://t3brightside.com/", + "keywords": [ + "optimize", + "typo3" + ], + "support": { + "issues": "https://github.com/t3brightside/embedassets/issues", + "source": "https://github.com/t3brightside/embedassets/tree/1.3.0" + }, + "time": "2024-02-07T20:19:51+00:00" + }, + { + "name": "t3brightside/paginatedprocessors", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/t3brightside/paginatedprocessors.git", + "reference": "3ea11e6001af3a6bebe797b83a56d7d122d940c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/t3brightside/paginatedprocessors/zipball/3ea11e6001af3a6bebe797b83a56d7d122d940c9", + "reference": "3ea11e6001af3a6bebe797b83a56d7d122d940c9", + "shasum": "" + }, + "require": { + "t3brightside/embedassets": "^1.2", + "typo3/cms-core": "^11.5 || ^12.4" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "paginatedprocessors" + } + }, + "autoload": { + "psr-4": { + "Brightside\\Paginatedprocessors\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Tanel Põld", + "homepage": "https://t3brightside.com", + "role": "Developer" + } + ], + "description": "Paginated dataprocessors for TYPO3", + "homepage": "https://t3brightside.com", + "keywords": [ + "dataprocessing", + "pagination", + "typo3" + ], + "support": { + "issues": "https://github.com/t3brightside/paginatedprocessors/issues", + "source": "https://github.com/t3brightside/paginatedprocessors/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/t3brightside", + "type": "github" + } + ], + "time": "2023-04-26T12:01:05+00:00" + }, + { + "name": "t3brightside/youtubevideo", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/t3brightside/youtubevideo.git", + "reference": "aa828bbf07894e958ee00e5a6279e3078f9b7cd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/t3brightside/youtubevideo/zipball/aa828bbf07894e958ee00e5a6279e3078f9b7cd7", + "reference": "aa828bbf07894e958ee00e5a6279e3078f9b7cd7", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^10.4 ||^11.5", + "typo3/cms-fluid-styled-content": "^10.4 || ^11.5" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "youtubevideo" + } + }, + "autoload": { + "psr-4": { + "Brightside\\Youtubevideo\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Tanel Põld", + "homepage": "https://t3brightside.com", + "role": "Developer" + } + ], + "description": "TYPO3 CMS extension for YouTube video content with custom cover images, gallery layout and backend previews.", + "homepage": "https://github.com/t3brightside/youtubevideo/", + "keywords": [ + "responsive", + "typo3", + "video", + "youtube" + ], + "support": { + "issues": "https://github.com/t3brightside/youtubevideo/issues", + "source": "https://github.com/t3brightside/youtubevideo/tree/2.1.1" + }, + "funding": [ + { + "url": "https://github.com/t3brightside", + "type": "github" + } + ], + "time": "2022-01-22T21:18:10+00:00" + }, + { + "name": "typo3/class-alias-loader", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/class-alias-loader.git", + "reference": "9e385e64ddf8a1ad354a4d62d4d0f90bce4dcbc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/9e385e64ddf8a1ad354a4d62d4d0f90bce4dcbc2", + "reference": "9e385e64ddf8a1ad354a4d62d4d0f90bce4dcbc2", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": ">=7.1" }, "replace": { "helhum/class-alias-loader": "*" }, "require-dev": { - "composer/composer": "^1.1@dev || ^2.0@dev", + "composer/composer": "^2.0@dev", "mikey179/vfsstream": "~1.4.0@dev", - "phpunit/phpunit": ">4.8 <9" + "phpunit/phpunit": "^8 || ^9" }, "type": "composer-plugin", "extra": { @@ -4486,22 +5897,96 @@ ], "support": { "issues": "https://github.com/TYPO3/class-alias-loader/issues", - "source": "https://github.com/TYPO3/class-alias-loader/tree/v1.1.4" + "source": "https://github.com/TYPO3/class-alias-loader/tree/v1.2.2" }, - "time": "2022-08-07T14:48:42+00:00" + "time": "2026-04-17T09:41:06+00:00" }, { - "name": "typo3/cms-cli", - "version": "3.1.1", + "name": "typo3/cms-backend", + "version": "v11.5.41", "source": { "type": "git", - "url": "https://github.com/TYPO3/cms-cli.git", - "reference": "d8947732ff5a6dc52829e88cb1c761124475c0e8" + "url": "https://github.com/TYPO3-CMS/backend.git", + "reference": "3731452fa07b013cf96b67b3a826a3403a8f2968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/cms-cli/zipball/d8947732ff5a6dc52829e88cb1c761124475c0e8", - "reference": "d8947732ff5a6dc52829e88cb1c761124475c0e8", + "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/3731452fa07b013cf96b67b3a826a3403a8f2968", + "reference": "3731452fa07b013cf96b67b3a826a3403a8f2968", + "shasum": "" + }, + "require": { + "psr/event-dispatcher": "^1.0", + "typo3/cms-core": "11.5.41", + "typo3/cms-recordlist": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "typo3/cms-about": "self.version", + "typo3/cms-context-help": "self.version", + "typo3/cms-cshmanual": "self.version", + "typo3/cms-func-wizards": "self.version", + "typo3/cms-wizard-crpages": "self.version", + "typo3/cms-wizard-sortpages": "self.version" + }, + "suggest": { + "typo3/cms-install": "To generate url to install tool in environment toolbar" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "serviceProvider": "TYPO3\\CMS\\Backend\\ServiceProvider", + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "backend" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Backend\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "Classes for the TYPO3 backend.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-cli", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/cms-cli.git", + "reference": "7e26bf51bd8dbd74f86f7c68cb14965c678930f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/cms-cli/zipball/7e26bf51bd8dbd74f86f7c68cb14965c678930f8", + "reference": "7e26bf51bd8dbd74f86f7c68cb14965c678930f8", "shasum": "" }, "require": { @@ -4519,22 +6004,22 @@ "homepage": "https://typo3.org", "support": { "issues": "https://github.com/TYPO3/cms-cli/issues", - "source": "https://github.com/TYPO3/cms-cli/tree/3.1.1" + "source": "https://github.com/TYPO3/cms-cli/tree/v3.1.3" }, - "time": "2023-08-15T10:14:53+00:00" + "time": "2025-12-31T13:41:20+00:00" }, { "name": "typo3/cms-composer-installers", - "version": "v3.1.3", + "version": "v3.1.4", "source": { "type": "git", "url": "https://github.com/TYPO3/CmsComposerInstallers.git", - "reference": "613d82075650ba846d287e20941e8a0e04ad0444" + "reference": "29fb214976fe05f39c7d0619ce1d648d59c50a08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/613d82075650ba846d287e20941e8a0e04ad0444", - "reference": "613d82075650ba846d287e20941e8a0e04ad0444", + "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/29fb214976fe05f39c7d0619ce1d648d59c50a08", + "reference": "29fb214976fe05f39c7d0619ce1d648d59c50a08", "shasum": "" }, "require": { @@ -4594,22 +6079,22 @@ "support": { "general": "https://typo3.org/support/", "issues": "https://github.com/TYPO3/CmsComposerInstallers/issues", - "source": "https://github.com/TYPO3/CmsComposerInstallers/tree/v3.1.3" + "source": "https://github.com/TYPO3/CmsComposerInstallers/tree/v3.1.4" }, - "time": "2022-08-05T19:06:26+00:00" + "time": "2024-08-13T14:56:37+00:00" }, { "name": "typo3/cms-core", - "version": "v11.5.36", + "version": "v11.5.41", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/core.git", - "reference": "ac1d0454654d1b754618001b79f06a952124f8ea" + "reference": "1249ec68101f20fd3d5b2e51366da0c005930a12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/ac1d0454654d1b754618001b79f06a952124f8ea", - "reference": "ac1d0454654d1b754618001b79f06a952124f8ea", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1249ec68101f20fd3d5b2e51366da0c005930a12", + "reference": "1249ec68101f20fd3d5b2e51366da0c005930a12", "shasum": "" }, "require": { @@ -4622,7 +6107,7 @@ "doctrine/instantiator": "^1.4", "doctrine/lexer": "^1.2.3", "egulias/email-validator": "^3.2.1", - "enshrined/svg-sanitize": "^0.15.4", + "enshrined/svg-sanitize": "^0.18.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -4661,6 +6146,7 @@ "symfony/polyfill-mbstring": "^1.23.1", "symfony/polyfill-php80": "^1.23.1", "symfony/polyfill-php81": "^1.23", + "symfony/polyfill-php83": "^1.31", "symfony/rate-limiter": "^5.4.8", "symfony/routing": "^5.4", "symfony/yaml": "^5.4", @@ -4696,17 +6182,17 @@ }, "type": "typo3-cms-framework", "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, "typo3/cms": { "Package": { - "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", "protected": true, + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", "partOfFactoryDefault": true, "partOfMinimalUsableSystem": true }, "extension-key": "core" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" } }, "autoload": { @@ -4739,20 +6225,645 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2024-02-20T08:27:39+00:00" + "time": "2024-10-15T08:52:52+00:00" }, { - "name": "typo3/html-sanitizer", - "version": "v2.1.4", + "name": "typo3/cms-extbase", + "version": "v11.5.41", "source": { "type": "git", - "url": "https://github.com/TYPO3/html-sanitizer.git", - "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff" + "url": "https://github.com/TYPO3-CMS/extbase.git", + "reference": "373a6115683261da595f9191bff88c90e962e523" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/html-sanitizer/zipball/b8f90717251d968c49dc77f8c1e5912e2fbe0dff", - "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff", + "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/373a6115683261da595f9191bff88c90e962e523", + "reference": "373a6115683261da595f9191bff88c90e962e523", + "shasum": "" + }, + "require": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpdocumentor/type-resolver": "^1.4", + "symfony/dependency-injection": "^5.4", + "symfony/property-access": "^5.4", + "symfony/property-info": "^5.4", + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "suggest": { + "typo3/cms-scheduler": "Additional scheduler tasks" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "serviceProvider": "TYPO3\\CMS\\Extbase\\ServiceProvider", + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "extbase" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Extbase\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "A framework to build extensions for TYPO3 CMS.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-extensionmanager", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/extensionmanager.git", + "reference": "52045f9740341b39d6b21c408b81e2dbf0c3a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/extensionmanager/zipball/52045f9740341b39d6b21c408b81e2dbf0c3a163", + "reference": "52045f9740341b39d6b21c408b81e2dbf0c3a163", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "extensionmanager" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Extensionmanager\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 Extension Manager", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-felogin", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/felogin.git", + "reference": "c2d3896f00b2b8927ece41d54046298967f8e83f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/felogin/zipball/c2d3896f00b2b8927ece41d54046298967f8e83f", + "reference": "c2d3896f00b2b8927ece41d54046298967f8e83f", + "shasum": "" + }, + "require": { + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "partOfFactoryDefault": true + }, + "extension-key": "felogin" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\FrontendLogin\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "A template-based plugin to log in Website Users in the Frontend", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org/c/typo3/cms-felogin/11.5/en-us", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-fluid", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/fluid.git", + "reference": "94e30bbf5a2476fdf5881b11b795849c41393292" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/94e30bbf5a2476fdf5881b11b795849c41393292", + "reference": "94e30bbf5a2476fdf5881b11b795849c41393292", + "shasum": "" + }, + "require": { + "symfony/dependency-injection": "^5.4", + "typo3/cms-core": "11.5.41", + "typo3/cms-extbase": "11.5.41", + "typo3fluid/fluid": "^2.7.2" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "serviceProvider": "TYPO3\\CMS\\Fluid\\ServiceProvider", + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "fluid" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Fluid\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "Fluid is a next-generation templating engine which makes the life of extension authors a lot easier!", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org/other/typo3/view-helper-reference/main/en-us/", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-fluid-styled-content", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/fluid_styled_content.git", + "reference": "1e12ebe6739032dd7705b8a109a246023714b31f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid_styled_content/zipball/1e12ebe6739032dd7705b8a109a246023714b31f", + "reference": "1e12ebe6739032dd7705b8a109a246023714b31f", + "shasum": "" + }, + "require": { + "typo3/cms-core": "11.5.41", + "typo3/cms-fluid": "11.5.41", + "typo3/cms-frontend": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "partOfFactoryDefault": true + }, + "extension-key": "fluid_styled_content" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\FluidStyledContent\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "A set of common content elements based on Fluid for Frontend output.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org/c/typo3/cms-fluid-styled-content/main/en-us", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-frontend", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/frontend.git", + "reference": "6a812823d392fcab40144121db357b61929b2e31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/6a812823d392fcab40144121db357b61929b2e31", + "reference": "6a812823d392fcab40144121db357b61929b2e31", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "symfony/polyfill-mbstring": "^1.23.1", + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "suggest": { + "typo3/cms-adminpanel": "Provides additional information and functionality for backend users in the frontend." + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "serviceProvider": "TYPO3\\CMS\\Frontend\\ServiceProvider", + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "frontend" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Frontend\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "Classes for the frontend of TYPO3.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-install", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/install.git", + "reference": "7364ae581b33e535b508155dc753ea3bba5a3a7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/7364ae581b33e535b508155dc753ea3bba5a3a7d", + "reference": "7364ae581b33e535b508155dc753ea3bba5a3a7d", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.13.8", + "guzzlehttp/promises": "^1.5.2 || ^2.0", + "nikic/php-parser": "^4.13.2", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "typo3/cms-core": "11.5.41", + "typo3/cms-extbase": "11.5.41", + "typo3/cms-fluid": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "serviceProvider": "TYPO3\\CMS\\Install\\ServiceProvider", + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "install" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Install\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "The Install Tool mounted as the module Tools>Install in TYPO3.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-recordlist", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/recordlist.git", + "reference": "71bd2e22e196e96a93f6c0213de755e0af6d3cb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/recordlist/zipball/71bd2e22e196e96a93f6c0213de755e0af6d3cb8", + "reference": "71bd2e22e196e96a93f6c0213de755e0af6d3cb8", + "shasum": "" + }, + "require": { + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "recordlist" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Recordlist\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "List of database-records", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-rte-ckeditor", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/rte_ckeditor.git", + "reference": "d9a7cf09be268dccc7d92fd7ff856c851d4d7cba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/rte_ckeditor/zipball/d9a7cf09be268dccc7d92fd7ff856c851d4d7cba", + "reference": "d9a7cf09be268dccc7d92fd7ff856c851d4d7cba", + "shasum": "" + }, + "require": { + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "suggest": { + "typo3/cms-setup": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "partOfFactoryDefault": true + }, + "extension-key": "rte_ckeditor" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\RteCKEditor\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "Integration of CKEditor as Rich Text Editor.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org/c/typo3/cms-rte-ckeditor/11.5/en-us", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/cms-setup", + "version": "v11.5.41", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/setup.git", + "reference": "e6eb22e70b5fa3ad3dc57956df65b0d51b2ba6c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/setup/zipball/e6eb22e70b5fa3ad3dc57956df65b0d51b2ba6c3", + "reference": "e6eb22e70b5fa3ad3dc57956df65b0d51b2ba6c3", + "shasum": "" + }, + "require": { + "typo3/cms-core": "11.5.41" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "typo3/cms": { + "Package": { + "partOfFactoryDefault": true + }, + "extension-key": "setup" + }, + "branch-alias": { + "dev-master": "11.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Setup\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "Allows users to edit a limited set of options for their user profile, eg. preferred language and their name and email address.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-10-15T08:52:52+00:00" + }, + { + "name": "typo3/html-sanitizer", + "version": "v2.3.2", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/html-sanitizer.git", + "reference": "8b5d0be44ded457ca993ec9ca93d859941c63764" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/html-sanitizer/zipball/8b5d0be44ded457ca993ec9ca93d859941c63764", + "reference": "8b5d0be44ded457ca993ec9ca93d859941c63764", "shasum": "" }, "require": { @@ -4788,27 +6899,27 @@ "description": "HTML sanitizer aiming to provide XSS-safe markup based on explicitly allowed tags, attributes and values.", "support": { "issues": "https://github.com/TYPO3/html-sanitizer/issues", - "source": "https://github.com/TYPO3/html-sanitizer/tree/v2.1.4" + "source": "https://github.com/TYPO3/html-sanitizer/tree/v2.3.2" }, - "time": "2023-11-14T07:41:08+00:00" + "time": "2026-06-08T15:19:36+00:00" }, { "name": "typo3/phar-stream-wrapper", - "version": "v3.1.7", + "version": "v3.1.8", "source": { "type": "git", "url": "https://github.com/TYPO3/phar-stream-wrapper.git", - "reference": "5cc2f04a4e2f5c7e9cc02a3bdf80fae0f3e11a8c" + "reference": "a931b28f422a60052db85c0a84a05a366453b2c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/5cc2f04a4e2f5c7e9cc02a3bdf80fae0f3e11a8c", - "reference": "5cc2f04a4e2f5c7e9cc02a3bdf80fae0f3e11a8c", + "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/a931b28f422a60052db85c0a84a05a366453b2c0", + "reference": "a931b28f422a60052db85c0a84a05a366453b2c0", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.0 || ^8.0" + "php": "^7.0 || ~8.0 || ~8.1 || ~8.2 || ~8.3" }, "require-dev": { "ext-xdebug": "*", @@ -4843,9 +6954,9 @@ ], "support": { "issues": "https://github.com/TYPO3/phar-stream-wrapper/issues", - "source": "https://github.com/TYPO3/phar-stream-wrapper/tree/v3.1.7" + "source": "https://github.com/TYPO3/phar-stream-wrapper/tree/v3.1.8" }, - "time": "2021-09-20T19:19:13+00:00" + "time": "2024-12-09T23:06:33+00:00" }, { "name": "typo3/symfony-psr-event-dispatcher-adapter", @@ -4892,31 +7003,33 @@ }, { "name": "typo3fluid/fluid", - "version": "2.7.4", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/TYPO3/Fluid.git", - "reference": "24f4494083c8d304680e4c9c38667dff33720dd4" + "reference": "0a8ebdb9bab1510380f18bef6395fbb4754c01b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/24f4494083c8d304680e4c9c38667dff33720dd4", - "reference": "24f4494083c8d304680e4c9c38667dff33720dd4", + "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/0a8ebdb9bab1510380f18bef6395fbb4754c01b7", + "reference": "0a8ebdb9bab1510380f18bef6395fbb4754c01b7", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-mbstring": "*", + "php": "^8.1" }, "require-dev": { "ext-json": "*", - "ext-mbstring": "*", - "friendsofphp/php-cs-fixer": "^3.4", - "phpstan/phpstan": "^1.7", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5.33 || ^9.5.28 || ^10.0.16" + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^3.59.3", + "phpstan/phpstan": "^1.10.14", + "phpstan/phpstan-phpunit": "^1.3.11", + "phpunit/phpunit": "^10.2.6" }, "suggest": { - "ext-json": "PHP JSON is needed when using JSONVariableProvider: A relatively rare use case" + "ext-json": "PHP JSON is needed when using JSONVariableProvider: A relatively rare use case", + "ext-simplexml": "SimpleXML is required for the XSD schema generator" }, "bin": [ "bin/fluid" @@ -4938,1531 +7051,41 @@ "issues": "https://github.com/TYPO3/Fluid/issues", "source": "https://github.com/TYPO3/Fluid" }, - "time": "2023-03-23T12:04:09+00:00" - } - ], - "packages-dev": [ - { - "name": "friendsoftypo3/tt-address", - "version": "6.1.0", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfTYPO3/tt_address.git", - "reference": "d3453dc5861804b4418c2c7567ab5ff949006406" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfTYPO3/tt_address/zipball/d3453dc5861804b4418c2c7567ab5ff949006406", - "reference": "d3453dc5861804b4418c2c7567ab5ff949006406", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "typo3/cms-core": "^10.4.6 || ^11.5" - }, - "replace": { - "typo3-ter/tt-address": "self.version" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpspec/prophecy-phpunit": "^2.0", - "typo3/cms-extensionmanager": "^10.4.6 || ^11.1", - "typo3/cms-install": "^10.4.6 || ^11.1" - }, - "type": "typo3-cms-extension", - "extra": { - "typo3/cms": { - "extension-key": "tt_address", - "app-dir": ".Build", - "web-dir": ".Build/public" - } - }, - "autoload": { - "psr-4": { - "FriendsOfTYPO3\\TtAddress\\": "Classes" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "tt_address Development Team", - "role": "Developer" - } - ], - "description": "Displays a list of addresses from an address table on the page.", - "homepage": "https://github.com/FriendsOfTYPO3/tt_address", - "keywords": [ - "addresses", - "extension", - "typo3" - ], - "support": { - "issues": "https://github.com/FriendsOfTYPO3/tt_address/issues", - "source": "https://github.com/FriendsOfTYPO3/tt_address/tree/6.1.0" - }, - "time": "2022-03-18T07:20:42+00:00" - }, - { - "name": "helhum/config-loader", - "version": "v0.12.5", - "source": { - "type": "git", - "url": "https://github.com/helhum/config-loader.git", - "reference": "f761ab3fcf888b9d17d679d94b14aca24fe6bfab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/helhum/config-loader/zipball/f761ab3fcf888b9d17d679d94b14aca24fe6bfab", - "reference": "f761ab3fcf888b9d17d679d94b14aca24fe6bfab", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^8.5", - "symfony/yaml": "^2.8 || ^3.3 || ^4.0 || ^5.0" - }, - "suggest": { - "ext-yaml": "For improved performance when parsing yaml files you should use the PECL YAML Parser php extension", - "symfony/yaml": "To be able to parse yaml files, you will need symfony/yaml" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Helhum\\ConfigLoader\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Generic config loader with context and environment support.", - "support": { - "issues": "https://github.com/helhum/config-loader/issues", - "source": "https://github.com/helhum/config-loader/tree/v0.12.5" - }, - "funding": [ - { - "url": "https://www.paypal.me/helhum/19.99", - "type": "custom" - }, - { - "url": "https://github.com/helhum", - "type": "github" - } - ], - "time": "2022-02-21T15:32:39+00:00" - }, - { - "name": "helhum/php-error-reporting", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/helhum/php-error-reporting.git", - "reference": "c9f1a0b6fedf7e641bce23b65eeeea946a6f7eb9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/helhum/php-error-reporting/zipball/c9f1a0b6fedf7e641bce23b65eeeea946a6f7eb9", - "reference": "c9f1a0b6fedf7e641bce23b65eeeea946a6f7eb9", - "shasum": "" - }, - "require": { - "php": ">=7.4.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-doctrine": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ErrorReporting\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Helmut Hummel", - "email": "typo3@helhum.io" - } - ], - "description": "Create ErrorException with clean trace from PHP error handler errors, inspired by Sentry PHP SDK", - "homepage": "https://helhum.io", - "keywords": [ - "error reporting", - "sentry" - ], - "support": { - "issues": "https://github.com/helhum/php-error-reporting", - "source": "https://github.com/helhum/php-error-reporting/tree/v1.0.1" - }, - "time": "2023-01-12T14:49:10+00:00" - }, - { - "name": "helhum/typo3-console", - "version": "v7.1.6", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-Console/TYPO3-Console.git", - "reference": "c7575554b9d2162814093e14ec0820838207307d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-Console/TYPO3-Console/zipball/c7575554b9d2162814093e14ec0820838207307d", - "reference": "c7575554b9d2162814093e14ec0820838207307d", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1", - "helhum/config-loader": ">=0.9 <0.13", - "helhum/php-error-reporting": "^1.0", - "php": ">=7.4.1", - "symfony/console": "^5.0 || ^6.0", - "symfony/process": "^5.0 || ^6.0", - "typo3/cms-backend": "^11.5.3 || dev-main", - "typo3/cms-core": "^11.5.3 || dev-main", - "typo3/cms-extbase": "^11.5.3 || dev-main", - "typo3/cms-extensionmanager": "^11.5.3 || dev-main", - "typo3/cms-fluid": "^11.5.3 || dev-main", - "typo3/cms-frontend": "^11.5.3 || dev-main", - "typo3/cms-install": "^11.5.3 || dev-main" - }, - "replace": { - "typo3-ter/typo3-console": "self.version" - }, - "require-dev": { - "nimut/testing-framework": "^6.0.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpspec/prophecy": "^1.15", - "phpunit/phpunit": "^8.5.18", - "symfony/expression-language": "^5.0 || ^6.0", - "symfony/filesystem": "^5.0 || ^6.0", - "typo3-console/create-reference-command": "@dev", - "typo3-console/sql-command": "@dev", - "typo3/cms-filemetadata": "^11.5.3 || dev-main", - "typo3/cms-recordlist": "^11.5.3 || dev-main", - "typo3/cms-reports": "^11.5.3 || dev-main" - }, - "bin": [ - "typo3cms" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.1.x-dev" - }, - "typo3/cms": { - "ignore-as-root": false, - "app-dir": ".Build", - "web-dir": ".Build/public" - } - }, - "autoload": { - "psr-4": { - "Helhum\\Typo3Console\\": [ - "Classes/Console/", - "Classes/Compatibility/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Helmut Hummel", - "email": "info@helhum.io", - "homepage": "https://helhum.io", - "role": "Developer" - } - ], - "description": "A reliable and powerful command line interface for TYPO3 CMS", - "homepage": "https://insight.helhum.io/post/104528981610/about-the-beauty-and-power-of-typo3-console", - "keywords": [ - "cli", - "command", - "commandline", - "console", - "typo3" - ], - "support": { - "docs": "https://docs.typo3.org/p/helhum/typo3-console/main/en-us/", - "issues": "https://github.com/TYPO3-Console/TYPO3-Console/issues", - "source": "https://github.com/TYPO3-Console/TYPO3-Console" - }, - "funding": [ - { - "url": "https://www.paypal.me/helhum/19.99", - "type": "custom" - }, - { - "url": "https://github.com/helhum", - "type": "github" - } - ], - "time": "2023-01-12T14:26:00+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a", - "reference": "298d2febfe79d03fe714eb871d5538da55205b1a", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0" - }, - "time": "2024-04-09T21:13:58+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.28.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" - }, - "time": "2024-04-03T18:51:33+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.36", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4fdf34004f149cc20b2f51d7d119aa500caad975", - "reference": "4fdf34004f149cc20b2f51d7d119aa500caad975", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.36" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-02-12T15:49:53+00:00" - }, - { - "name": "symfony/property-access", - "version": "v5.4.38", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "b58ea319e56b440b4daaa38201ee63ba9efa44d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/b58ea319e56b440b4daaa38201ee63ba9efa44d5", - "reference": "b58ea319e56b440b4daaa38201ee63ba9efa44d5", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/property-info": "^5.2|^6.0" - }, - "require-dev": { - "symfony/cache": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property-path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.38" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-03-18T16:56:51+00:00" - }, - { - "name": "symfony/property-info", - "version": "v5.4.38", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "f3e4b84e5a33e655222167894398b671e93322d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/f3e4b84e5a33e655222167894398b671e93322d0", - "reference": "f3e4b84e5a33e655222167894398b671e93322d0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4|^2", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "suggest": { - "phpdocumentor/reflection-docblock": "To use the PHPDoc", - "psr/cache-implementation": "To cache results", - "symfony/doctrine-bridge": "To use Doctrine metadata", - "symfony/serializer": "To use Serializer metadata" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v5.4.38" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-03-21T07:26:31+00:00" - }, - { - "name": "typo3/cms-backend", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/backend.git", - "reference": "10bdd68cc1b35e71779511192219ba35a287b42b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/10bdd68cc1b35e71779511192219ba35a287b42b", - "reference": "10bdd68cc1b35e71779511192219ba35a287b42b", - "shasum": "" - }, - "require": { - "psr/event-dispatcher": "^1.0", - "typo3/cms-core": "11.5.36", - "typo3/cms-recordlist": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "replace": { - "typo3/cms-about": "self.version", - "typo3/cms-context-help": "self.version", - "typo3/cms-cshmanual": "self.version", - "typo3/cms-func-wizards": "self.version", - "typo3/cms-wizard-crpages": "self.version", - "typo3/cms-wizard-sortpages": "self.version" - }, - "suggest": { - "typo3/cms-install": "To generate url to install tool in environment toolbar" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Backend\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "backend" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Backend\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Classes for the TYPO3 backend.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-extbase", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/extbase.git", - "reference": "e3df04fe8f53fec0dd54b40c40dce1d5859be2dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/e3df04fe8f53fec0dd54b40c40dce1d5859be2dc", - "reference": "e3df04fe8f53fec0dd54b40c40dce1d5859be2dc", - "shasum": "" - }, - "require": { - "phpdocumentor/reflection-docblock": "^5.2", - "phpdocumentor/type-resolver": "^1.4", - "symfony/dependency-injection": "^5.4", - "symfony/property-access": "^5.4", - "symfony/property-info": "^5.4", - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "suggest": { - "typo3/cms-scheduler": "Additional scheduler tasks" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Extbase\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "extbase" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Extbase\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "A framework to build extensions for TYPO3 CMS.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-extensionmanager", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/extensionmanager.git", - "reference": "6ef157aa185682fafdf473a3588a440867649933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/extensionmanager/zipball/6ef157aa185682fafdf473a3588a440867649933", - "reference": "6ef157aa185682fafdf473a3588a440867649933", - "shasum": "" - }, - "require": { - "ext-libxml": "*", - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "extensionmanager" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Extensionmanager\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "TYPO3 Extension Manager", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-filelist", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/filelist.git", - "reference": "9e39aa241dc48127ef5e098ea34c3e88af4935c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/filelist/zipball/9e39aa241dc48127ef5e098ea34c3e88af4935c0", - "reference": "9e39aa241dc48127ef5e098ea34c3e88af4935c0", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "filelist" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Filelist\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Listing of files in the directory", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-fluid", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/fluid.git", - "reference": "5d8d327999adc545aabd219c7c23d5ff4a028017" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/5d8d327999adc545aabd219c7c23d5ff4a028017", - "reference": "5d8d327999adc545aabd219c7c23d5ff4a028017", - "shasum": "" - }, - "require": { - "symfony/dependency-injection": "^5.4", - "typo3/cms-core": "11.5.36", - "typo3/cms-extbase": "11.5.36", - "typo3fluid/fluid": "^2.7.2" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Fluid\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "fluid" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Fluid\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Fluid is a next-generation templating engine which makes the life of extension authors a lot easier!", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org/other/typo3/view-helper-reference/main/en-us/", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-fluid-styled-content", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/fluid_styled_content.git", - "reference": "4af5bed600429ce73f86ff91489b7bedfee39516" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/fluid_styled_content/zipball/4af5bed600429ce73f86ff91489b7bedfee39516", - "reference": "4af5bed600429ce73f86ff91489b7bedfee39516", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36", - "typo3/cms-fluid": "11.5.36", - "typo3/cms-frontend": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "partOfFactoryDefault": true - }, - "extension-key": "fluid_styled_content" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\FluidStyledContent\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "A set of common content elements based on Fluid for Frontend output.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org/c/typo3/cms-fluid-styled-content/main/en-us", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-frontend", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/frontend.git", - "reference": "476d805ff672edc765069719aef6c4353150af02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/476d805ff672edc765069719aef6c4353150af02", - "reference": "476d805ff672edc765069719aef6c4353150af02", - "shasum": "" - }, - "require": { - "ext-libxml": "*", - "symfony/polyfill-mbstring": "^1.23.1", - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "suggest": { - "typo3/cms-adminpanel": "Provides additional information and functionality for backend users in the frontend." - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Frontend\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "frontend" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Frontend\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Classes for the frontend of TYPO3.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-install", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/install.git", - "reference": "b1e1c393ed8183675ddc3a6b1c78a2320e1a5485" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/b1e1c393ed8183675ddc3a6b1c78a2320e1a5485", - "reference": "b1e1c393ed8183675ddc3a6b1c78a2320e1a5485", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.13.8", - "guzzlehttp/promises": "^1.5.2 || ^2.0", - "nikic/php-parser": "^4.13.2", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "typo3/cms-core": "11.5.36", - "typo3/cms-extbase": "11.5.36", - "typo3/cms-fluid": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Install\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "install" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Install\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "The Install Tool mounted as the module Tools>Install in TYPO3.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-lowlevel", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/lowlevel.git", - "reference": "2ee8dda372e9a4c754193375d8e1b9ca53c61888" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/lowlevel/zipball/2ee8dda372e9a4c754193375d8e1b9ca53c61888", - "reference": "2ee8dda372e9a4c754193375d8e1b9ca53c61888", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Lowlevel\\ServiceProvider", - "partOfFactoryDefault": true - }, - "extension-key": "lowlevel" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Lowlevel\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Enables the 'Config' and 'DB Check' modules for technical analysis of the system. This includes raw database search, checking relations, counting pages and records etc.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-recordlist", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/recordlist.git", - "reference": "d8dc4cb65db49f3111c125bf2a35215110e28d3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/recordlist/zipball/d8dc4cb65db49f3111c125bf2a35215110e28d3a", - "reference": "d8dc4cb65db49f3111c125bf2a35215110e28d3a", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "recordlist" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Recordlist\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "List of database-records", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-setup", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/setup.git", - "reference": "a3edfb5b9df8b5232f4cd14f0b2f632f71627036" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/setup/zipball/a3edfb5b9df8b5232f4cd14f0b2f632f71627036", - "reference": "a3edfb5b9df8b5232f4cd14f0b2f632f71627036", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "partOfFactoryDefault": true - }, - "extension-key": "setup" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Setup\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Allows users to edit a limited set of options for their user profile, eg. preferred language and their name and email address.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" - }, - { - "name": "typo3/cms-tstemplate", - "version": "v11.5.36", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/tstemplate.git", - "reference": "b11a5acce80555a19d595b1ecc33b10163ca5863" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/tstemplate/zipball/b11a5acce80555a19d595b1ecc33b10163ca5863", - "reference": "b11a5acce80555a19d595b1ecc33b10163ca5863", - "shasum": "" - }, - "require": { - "typo3/cms-core": "11.5.36" - }, - "conflict": { - "typo3/cms": "*" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-master": "11.5.x-dev" - }, - "typo3/cms": { - "Package": { - "partOfFactoryDefault": true - }, - "extension-key": "tstemplate" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Tstemplate\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "Framework for management of TypoScript template records for the CMS frontend.", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2024-02-20T08:27:39+00:00" + "time": "2024-08-30T21:24:26+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", "shasum": "" }, "require": { "ext-ctype": "*", - "php": "^7.2 || ^8.0" + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, "branch-alias": { - "dev-master": "1.10-dev" + "dev-master": "2.0-dev", + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -6478,6 +7101,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -6488,17 +7115,96 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/2.4.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-06-15T15:31:57+00:00" + }, + { + "name": "wgirhad/geophp", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/wgirhad/geoPHP.git", + "reference": "74f5b8bdc851cb92b8c07df99a437245f3878fcd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wgirhad/geoPHP/zipball/74f5b8bdc851cb92b8c07df99a437245f3878fcd", + "reference": "74f5b8bdc851cb92b8c07df99a437245f3878fcd", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "provide": { + "geophp/geophp": "3.0.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "2.*", + "phpbench/phpbench": "^1.0", + "phpstan/phpstan": "^1.4.0", + "phpunit/phpunit": "^8.0|^9.0", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-geos": "GEOS allows more advanced operations" + }, + "type": "library", + "autoload": { + "psr-4": { + "geoPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later", + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Patrick Hayes", + "role": "Original creator" + }, + { + "name": "Péter Báthory", + "role": "Developer" + }, + { + "name": "Willian Girhad", + "role": "Developer" + } + ], + "description": "Open-source native PHP library for doing geometry operations. Can read and write a wide variety of formats: (E)WKT, (E)WKB, TWKB, GeoJSON, KML, GPX, GeoRSS. Works with all Simple-Feature geometries (Point, LineString, Polygon...) and can be used to get centroids, bounding-boxes, area, etc.", + "homepage": "https://github.com/wgirhad/geoPHP", + "keywords": [ + "Polygon", + "converter", + "geoPHP", + "geojson", + "geometry", + "gis", + "gpx", + "kml", + "linestring", + "twkb", + "wkb", + "wkt" + ], + "support": { + "source": "https://github.com/wgirhad/geoPHP/tree/v3.0.0" + }, + "time": "2023-02-24T12:14:17+00:00" } ], + "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "catbird/cartedalegare": 20 + }, "prefer-stable": false, "prefer-lowest": false, - "platform": [], - "platform-dev": [], + "platform": {}, + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/typo3_src b/typo3_src deleted file mode 120000 index 41b14c5..0000000 --- a/typo3_src +++ /dev/null @@ -1 +0,0 @@ -c:/wamp64/apps/typo3_src-11.5.41 \ No newline at end of file diff --git a/typo3conf/LocalConfiguration.2022-11-23.php b/typo3conf/LocalConfiguration.2022-11-23.php deleted file mode 100644 index 5113780..0000000 --- a/typo3conf/LocalConfiguration.2022-11-23.php +++ /dev/null @@ -1,202 +0,0 @@ - [ - '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', - ], -]; diff --git a/typo3conf/PackageStates.php b/typo3conf/PackageStates.php deleted file mode 100644 index 2d008cf..0000000 --- a/typo3conf/PackageStates.php +++ /dev/null @@ -1,133 +0,0 @@ - [ - '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, -]; diff --git a/typo3conf/autoload/autoload_classaliasmap.php b/typo3conf/autoload/autoload_classaliasmap.php deleted file mode 100644 index 13b6277..0000000 --- a/typo3conf/autoload/autoload_classaliasmap.php +++ /dev/null @@ -1,9 +0,0 @@ - - array ( - ), - 'classNameToAliasMapping' => - array ( - ), -); diff --git a/typo3conf/autoload/autoload_classmap.php b/typo3conf/autoload/autoload_classmap.php deleted file mode 100644 index 611447c..0000000 --- a/typo3conf/autoload/autoload_classmap.php +++ /dev/null @@ -1,365 +0,0 @@ - $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', -); diff --git a/typo3conf/autoload/autoload_psr4.php b/typo3conf/autoload/autoload_psr4.php deleted file mode 100644 index 1bcce8e..0000000 --- a/typo3conf/autoload/autoload_psr4.php +++ /dev/null @@ -1,22 +0,0 @@ - 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'), -); diff --git a/typo3conf/deprecation_d1277fb0d4.log b/typo3conf/deprecation_d1277fb0d4.log deleted file mode 100644 index e8f8036..0000000 --- a/typo3conf/deprecation_d1277fb0d4.log +++ /dev/null @@ -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" diff --git a/typo3conf/ext/dp_cookieconsent/.github/FUNDING.yml b/typo3conf/ext/dp_cookieconsent/.github/FUNDING.yml new file mode 100644 index 0000000..33b0320 --- /dev/null +++ b/typo3conf/ext/dp_cookieconsent/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: DirkPersky +custom: ['https://www.paypal.com/paypalme/dirkpersky'] diff --git a/typo3conf/ext/dp_cookieconsent/.github/workflows/Deploy.yml b/typo3conf/ext/dp_cookieconsent/.github/workflows/Deploy.yml new file mode 100644 index 0000000..fe2f464 --- /dev/null +++ b/typo3conf/ext/dp_cookieconsent/.github/workflows/Deploy.yml @@ -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; \ No newline at end of file diff --git a/typo3conf/ext/dp_cookieconsent/.gitignore b/typo3conf/ext/dp_cookieconsent/.gitignore new file mode 100644 index 0000000..0be999c --- /dev/null +++ b/typo3conf/ext/dp_cookieconsent/.gitignore @@ -0,0 +1,5 @@ +# Created by .ignore support plugin (hsz.mobi) + +# IntelliJ project files +.idea + diff --git a/typo3conf/ext/dp_cookieconsent/ext_emconf.php b/typo3conf/ext/dp_cookieconsent/ext_emconf.php index 998fce5..17cbf7a 100644 --- a/typo3conf/ext/dp_cookieconsent/ext_emconf.php +++ b/typo3conf/ext/dp_cookieconsent/ext_emconf.php @@ -1,39 +1,30 @@ + * @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' +]; diff --git a/typo3conf/ext/static_info_tables/.editorconfig b/typo3conf/ext/embedassets/.editorconfig similarity index 66% rename from typo3conf/ext/static_info_tables/.editorconfig rename to typo3conf/ext/embedassets/.editorconfig index 0c5bdfe..410d80b 100644 --- a/typo3conf/ext/static_info_tables/.editorconfig +++ b/typo3conf/ext/embedassets/.editorconfig @@ -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 diff --git a/typo3conf/ext/embedassets/.gitignore b/typo3conf/ext/embedassets/.gitignore new file mode 100644 index 0000000..6509c91 --- /dev/null +++ b/typo3conf/ext/embedassets/.gitignore @@ -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 diff --git a/typo3conf/ext/embedassets/ext_emconf.php b/typo3conf/ext/embedassets/ext_emconf.php index 31ee4cf..b68f744 100644 --- a/typo3conf/ext/embedassets/ext_emconf.php +++ b/typo3conf/ext/embedassets/ext_emconf.php @@ -1,38 +1,17 @@ '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', + ], + ], + ]; diff --git a/typo3conf/ext/fs_media_gallery/Resources/Private/Language/locallang.xlf b/typo3conf/ext/fs_media_gallery/Resources/Private/Language/locallang.xlf index 57db749..29a0e2f 100644 --- a/typo3conf/ext/fs_media_gallery/Resources/Private/Language/locallang.xlf +++ b/typo3conf/ext/fs_media_gallery/Resources/Private/Language/locallang.xlf @@ -1,58 +1,56 @@ - -
- LFEditor -
+ +
- - - - - - - - - - - - - - - - - - - - - - + Y-m-d - + Media Album - + Media Albums - - + + asset + + + assets - + No albums found + + + Album not found - + No assets found + + + Back to album + + + Back to %s + + + Back to albums list + + + image {current} of {total} + + + Show album '%s' - - - - + - + « + + + » - \ No newline at end of file + diff --git a/typo3conf/ext/fs_media_gallery/ext_emconf.php b/typo3conf/ext/fs_media_gallery/ext_emconf.php index aef9378..088b369 100644 --- a/typo3conf/ext/fs_media_gallery/ext_emconf.php +++ b/typo3conf/ext/fs_media_gallery/ext_emconf.php @@ -1,39 +1,31 @@ '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' => [], + ], +]; diff --git a/typo3conf/ext/lfeditor b/typo3conf/ext/lfeditor new file mode 160000 index 0000000..506e7a5 --- /dev/null +++ b/typo3conf/ext/lfeditor @@ -0,0 +1 @@ +Subproject commit 506e7a54aa0c77e166e9677d296693ad82f6a812 diff --git a/typo3conf/ext/lfeditor/Classes/Controller/AbstractBackendController.php b/typo3conf/ext/lfeditor/Classes/Controller/AbstractBackendController.php deleted file mode 100644 index cef7c6f..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/AbstractBackendController.php +++ /dev/null @@ -1,236 +0,0 @@ -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()); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/AbstractController.php b/typo3conf/ext/lfeditor/Classes/Controller/AbstractController.php deleted file mode 100644 index ae3ff03..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/AbstractController.php +++ /dev/null @@ -1,317 +0,0 @@ -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 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(); - } - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/AddConstantController.php b/typo3conf/ext/lfeditor/Classes/Controller/AddConstantController.php deleted file mode 100644 index 083048e..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/AddConstantController.php +++ /dev/null @@ -1,176 +0,0 @@ -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']); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/DeleteConstantController.php b/typo3conf/ext/lfeditor/Classes/Controller/DeleteConstantController.php deleted file mode 100644 index b1d3e9f..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/DeleteConstantController.php +++ /dev/null @@ -1,189 +0,0 @@ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/EditConstantController.php b/typo3conf/ext/lfeditor/Classes/Controller/EditConstantController.php deleted file mode 100644 index 819c860..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/EditConstantController.php +++ /dev/null @@ -1,204 +0,0 @@ -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'); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/EditFileController.php b/typo3conf/ext/lfeditor/Classes/Controller/EditFileController.php deleted file mode 100644 index f072504..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/EditFileController.php +++ /dev/null @@ -1,365 +0,0 @@ -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]); - } - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/GeneralController.php b/typo3conf/ext/lfeditor/Classes/Controller/GeneralController.php deleted file mode 100644 index dbc4876..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/GeneralController.php +++ /dev/null @@ -1,302 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/ManageBackupsController.php b/typo3conf/ext/lfeditor/Classes/Controller/ManageBackupsController.php deleted file mode 100644 index 27342f3..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/ManageBackupsController.php +++ /dev/null @@ -1,500 +0,0 @@ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/RenameConstantController.php b/typo3conf/ext/lfeditor/Classes/Controller/RenameConstantController.php deleted file mode 100644 index 67181c2..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/RenameConstantController.php +++ /dev/null @@ -1,198 +0,0 @@ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/SearchConstantController.php b/typo3conf/ext/lfeditor/Classes/Controller/SearchConstantController.php deleted file mode 100644 index 5ec4a27..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/SearchConstantController.php +++ /dev/null @@ -1,182 +0,0 @@ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Controller/ViewTreeController.php b/typo3conf/ext/lfeditor/Classes/Controller/ViewTreeController.php deleted file mode 100644 index 5ed42e8..0000000 --- a/typo3conf/ext/lfeditor/Classes/Controller/ViewTreeController.php +++ /dev/null @@ -1,283 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Exceptions/DirectoryAccessRightsException.php b/typo3conf/ext/lfeditor/Classes/Exceptions/DirectoryAccessRightsException.php deleted file mode 100644 index 5307ed9..0000000 --- a/typo3conf/ext/lfeditor/Classes/Exceptions/DirectoryAccessRightsException.php +++ /dev/null @@ -1,58 +0,0 @@ - - */ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Exceptions/LFException.php b/typo3conf/ext/lfeditor/Classes/Exceptions/LFException.php deleted file mode 100644 index 56f8178..0000000 --- a/typo3conf/ext/lfeditor/Classes/Exceptions/LFException.php +++ /dev/null @@ -1,54 +0,0 @@ -session = GeneralUtility::makeInstance(PhpSession::class); - $this->session->setSessionKey('tx_lfeditor_sessionVariables'); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/BackupService.php b/typo3conf/ext/lfeditor/Classes/Service/BackupService.php deleted file mode 100644 index 28998ae..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/BackupService.php +++ /dev/null @@ -1,316 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/ConfigurationService.php b/typo3conf/ext/lfeditor/Classes/Service/ConfigurationService.php deleted file mode 100644 index b0a7f24..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/ConfigurationService.php +++ /dev/null @@ -1,843 +0,0 @@ -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: - * FileService - * - * - * @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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileBackupService.php b/typo3conf/ext/lfeditor/Classes/Service/FileBackupService.php deleted file mode 100644 index b9612d8..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileBackupService.php +++ /dev/null @@ -1,478 +0,0 @@ -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 '' . "\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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileBasePHPService.php b/typo3conf/ext/lfeditor/Classes/Service/FileBasePHPService.php deleted file mode 100644 index 3376ed1..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileBasePHPService.php +++ /dev/null @@ -1,256 +0,0 @@ -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 = '' . "\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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileBaseService.php b/typo3conf/ext/lfeditor/Classes/Service/FileBaseService.php deleted file mode 100644 index 1bb8361..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileBaseService.php +++ /dev/null @@ -1,186 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileBaseXLFService.php b/typo3conf/ext/lfeditor/Classes/Service/FileBaseXLFService.php deleted file mode 100644 index 5c8bcdc..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileBaseXLFService.php +++ /dev/null @@ -1,429 +0,0 @@ -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 '' . "\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() . ' - - ###HEADER### - ###BODY### - -'; - - $header = '
'; - if (\is_array($phpArray['header']) && \count($phpArray['header'])) { - $header = '
' . "\n"; - foreach ($phpArray['header'] as $tagName => $tagValue) { - $tagName = \htmlspecialchars($tagName); - $header .= "\t\t\t" . '<' . $tagName . '>' . \htmlspecialchars(implode(' ', $tagValue)) . - '' . "\n"; - } - $header .= "\t\t" . '
'; - } - $xmlString = \str_replace('###HEADER###', $header, $xmlString); - - $body = ''; - if (\is_array($phpArray['data']) && \count($phpArray['data'])) { - $body = '' . "\n"; - $startCDATA = ""; - $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" . 'addPreserveSpaceAttribute( - $value, - $enValue, - $targetLanguage - ) . '>' . "\n"; - - if ($targetLanguage !== 'default') { - $body .= "\t\t\t\t" . '' . $enValue . '' . "\n"; - $body .= "\t\t\t\t" . '' . $value . '' . "\n"; - } else { - $body .= "\t\t\t\t" . '' . $value . '' . "\n"; - } - $body .= "\t\t\t" . '' . "\n"; - } - $body .= "\t\t" . ''; - } - $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"' : ''); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileBaseXMLService.php b/typo3conf/ext/lfeditor/Classes/Service/FileBaseXMLService.php deleted file mode 100644 index 70bcea9..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileBaseXMLService.php +++ /dev/null @@ -1,358 +0,0 @@ -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 '' . "\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 . '>' - ); - $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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileOverrideService.php b/typo3conf/ext/lfeditor/Classes/Service/FileOverrideService.php deleted file mode 100644 index 3312bf3..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileOverrideService.php +++ /dev/null @@ -1,360 +0,0 @@ -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'; - } - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/FileService.php b/typo3conf/ext/lfeditor/Classes/Service/FileService.php deleted file mode 100644 index b3cfd9f..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/FileService.php +++ /dev/null @@ -1,487 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/LicensingService.php b/typo3conf/ext/lfeditor/Classes/Service/LicensingService.php deleted file mode 100644 index e524190..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/LicensingService.php +++ /dev/null @@ -1,125 +0,0 @@ - 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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Service/SysLanguageService.php b/typo3conf/ext/lfeditor/Classes/Service/SysLanguageService.php deleted file mode 100644 index b4a79e9..0000000 --- a/typo3conf/ext/lfeditor/Classes/Service/SysLanguageService.php +++ /dev/null @@ -1,144 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Session/PhpSession.php b/typo3conf/ext/lfeditor/Classes/Session/PhpSession.php deleted file mode 100644 index 9ed52b4..0000000 --- a/typo3conf/ext/lfeditor/Classes/Session/PhpSession.php +++ /dev/null @@ -1,124 +0,0 @@ -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]); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Utility/CdataSupportingSimpleXMLElement.php b/typo3conf/ext/lfeditor/Classes/Utility/CdataSupportingSimpleXMLElement.php deleted file mode 100644 index 3767c8d..0000000 --- a/typo3conf/ext/lfeditor/Classes/Utility/CdataSupportingSimpleXMLElement.php +++ /dev/null @@ -1,60 +0,0 @@ -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; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Utility/ExtensionUtility.php b/typo3conf/ext/lfeditor/Classes/Utility/ExtensionUtility.php deleted file mode 100644 index 4a0e585..0000000 --- a/typo3conf/ext/lfeditor/Classes/Utility/ExtensionUtility.php +++ /dev/null @@ -1,46 +0,0 @@ - - */ -class ExtensionUtility { - /** - * Get the extension configuration - * - * @return array - */ - public static function getExtensionConfiguration(): array { - return $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['lfeditor'] ?? []; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Utility/Functions.php b/typo3conf/ext/lfeditor/Classes/Utility/Functions.php deleted file mode 100644 index 72c60eb..0000000 --- a/typo3conf/ext/lfeditor/Classes/Utility/Functions.php +++ /dev/null @@ -1,400 +0,0 @@ - $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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Utility/SgLib.php b/typo3conf/ext/lfeditor/Classes/Utility/SgLib.php deleted file mode 100644 index 452866c..0000000 --- a/typo3conf/ext/lfeditor/Classes/Utility/SgLib.php +++ /dev/null @@ -1,349 +0,0 @@ -= 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, ''); - 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, ''); - 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 = ''; - 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']); - } - } -} diff --git a/typo3conf/ext/lfeditor/Classes/Utility/Typo3Lib.php b/typo3conf/ext/lfeditor/Classes/Utility/Typo3Lib.php deleted file mode 100644 index 46f3f15..0000000 --- a/typo3conf/ext/lfeditor/Classes/Utility/Typo3Lib.php +++ /dev/null @@ -1,186 +0,0 @@ -absRefPrefix !== '') { - $baseUrl = $GLOBALS['TSFE']->absRefPrefix; - } else { - $baseUrl = $GLOBALS['TSFE']->baseUrl; - } - - return $baseUrl; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddCssFileViewHelper.php b/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddCssFileViewHelper.php deleted file mode 100644 index 820991e..0000000 --- a/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddCssFileViewHelper.php +++ /dev/null @@ -1,54 +0,0 @@ - - */ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddJavaScriptFileViewHelper.php b/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddJavaScriptFileViewHelper.php deleted file mode 100644 index ca17424..0000000 --- a/typo3conf/ext/lfeditor/Classes/ViewHelpers/AddJavaScriptFileViewHelper.php +++ /dev/null @@ -1,54 +0,0 @@ - - */ -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); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuOptionGroupViewHelper.php b/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuOptionGroupViewHelper.php deleted file mode 100644 index 9d7e55d..0000000 --- a/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuOptionGroupViewHelper.php +++ /dev/null @@ -1,55 +0,0 @@ -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(); - } -} diff --git a/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php b/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php deleted file mode 100644 index 71e83cf..0000000 --- a/typo3conf/ext/lfeditor/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php +++ /dev/null @@ -1,121 +0,0 @@ - - * - * - * - * - * - * - * - * Selectbox with the options "Overview", "Create new Blog" and "List Posts" - * - * - * - * - * - * - * - * - * - * localized selectbox - * - */ -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 ''; - } -} diff --git a/typo3conf/ext/lfeditor/Classes/ViewHelpers/InlineLanguageLabelsViewHelper.php b/typo3conf/ext/lfeditor/Classes/ViewHelpers/InlineLanguageLabelsViewHelper.php deleted file mode 100644 index 582abcb..0000000 --- a/typo3conf/ext/lfeditor/Classes/ViewHelpers/InlineLanguageLabelsViewHelper.php +++ /dev/null @@ -1,90 +0,0 @@ - - */ -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 ''; - } -} diff --git a/typo3conf/ext/lfeditor/Configuration/Backend/AjaxRoutes.php b/typo3conf/ext/lfeditor/Configuration/Backend/AjaxRoutes.php deleted file mode 100644 index e2efc76..0000000 --- a/typo3conf/ext/lfeditor/Configuration/Backend/AjaxRoutes.php +++ /dev/null @@ -1,8 +0,0 @@ - [ - 'path' => '/lfeditor/ajaxPing', - 'target' => SGalinski\Lfeditor\Service\LicensingService::class . '::ajaxPing', - ] -]; diff --git a/typo3conf/ext/lfeditor/Configuration/TCA/Overrides/be_users.php b/typo3conf/ext/lfeditor/Configuration/TCA/Overrides/be_users.php deleted file mode 100644 index 41794f9..0000000 --- a/typo3conf/ext/lfeditor/Configuration/TCA/Overrides/be_users.php +++ /dev/null @@ -1,58 +0,0 @@ - [ - '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' -); diff --git a/typo3conf/ext/lfeditor/Documentation/Configuration/Index.rst b/typo3conf/ext/lfeditor/Documentation/Configuration/Index.rst deleted file mode 100644 index b59e4df..0000000 --- a/typo3conf/ext/lfeditor/Documentation/Configuration/Index.rst +++ /dev/null @@ -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. diff --git a/typo3conf/ext/lfeditor/Documentation/EditingModes/Index.rst b/typo3conf/ext/lfeditor/Documentation/EditingModes/Index.rst deleted file mode 100644 index 184dec1..0000000 --- a/typo3conf/ext/lfeditor/Documentation/EditingModes/Index.rst +++ /dev/null @@ -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. \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/Images/InsertionModes/TinyMCE.png b/typo3conf/ext/lfeditor/Documentation/Images/InsertionModes/TinyMCE.png deleted file mode 100644 index 70830a4..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/InsertionModes/TinyMCE.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/AddConstant/AddConstant.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/AddConstant/AddConstant.png deleted file mode 100644 index bce5e89..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/AddConstant/AddConstant.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/DeleteConstant/DeleteConstant.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/DeleteConstant/DeleteConstant.png deleted file mode 100644 index bb135b8..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/DeleteConstant/DeleteConstant.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditConstant/EditConstant.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditConstant/EditConstant.png deleted file mode 100644 index 6c06c07..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditConstant/EditConstant.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditFile/EditFile.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditFile/EditFile.png deleted file mode 100644 index 2dc9d62..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/EditFile/EditFile.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/General/General.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/General/General.png deleted file mode 100644 index 266e012..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/General/General.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/MainMenu.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/MainMenu.png deleted file mode 100644 index daaa634..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/MainMenu.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ManageBackups/ManageBackups.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ManageBackups/ManageBackups.png deleted file mode 100644 index b389da5..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ManageBackups/ManageBackups.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/RenameConstant/RenameConstant.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/RenameConstant/RenameConstant.png deleted file mode 100644 index 2cbe34d..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/RenameConstant/RenameConstant.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/SearchConstant/SearchConstant.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/SearchConstant/SearchConstant.png deleted file mode 100644 index 22826b6..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/SearchConstant/SearchConstant.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ViewTree/ViewTree.png b/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ViewTree/ViewTree.png deleted file mode 100644 index a873374..0000000 Binary files a/typo3conf/ext/lfeditor/Documentation/Images/MainMenuOptions/ViewTree/ViewTree.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Documentation/Index.rst b/typo3conf/ext/lfeditor/Documentation/Index.rst deleted file mode 100644 index a277df2..0000000 --- a/typo3conf/ext/lfeditor/Documentation/Index.rst +++ /dev/null @@ -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 `_. - -**Table of Contents** - -.. toctree:: - :maxdepth: 2 - :titlesonly: - :glob: - - Introduction/Index - MainMenuOptions/Index - EditingModes/Index - Configuration/Index - KnownProblemsAndHints/Index diff --git a/typo3conf/ext/lfeditor/Documentation/Introduction/Index.rst b/typo3conf/ext/lfeditor/Documentation/Introduction/Index.rst deleted file mode 100644 index 45c200c..0000000 --- a/typo3conf/ext/lfeditor/Documentation/Introduction/Index.rst +++ /dev/null @@ -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 diff --git a/typo3conf/ext/lfeditor/Documentation/KnownProblemsAndHints/Index.rst b/typo3conf/ext/lfeditor/Documentation/KnownProblemsAndHints/Index.rst deleted file mode 100644 index 77b37c0..0000000 --- a/typo3conf/ext/lfeditor/Documentation/KnownProblemsAndHints/Index.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. ================================================== -.. FOR YOUR INFORMATION -.. -------------------------------------------------- -.. -*- coding: utf-8 -*- with BOM. - -Known Problems And Hints ------------------------- - -Problems can be viewed and reported on `forge `_. You -can find the code on our `gitlab `_. \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/AddConstant/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/AddConstant/Index.rst deleted file mode 100644 index a7aa093..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/AddConstant/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/DeleteConstant/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/DeleteConstant/Index.rst deleted file mode 100644 index 53abe83..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/DeleteConstant/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditConstant/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditConstant/Index.rst deleted file mode 100644 index 9a292ed..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditConstant/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditFile/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditFile/Index.rst deleted file mode 100644 index 98d7f49..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/EditFile/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/General/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/General/Index.rst deleted file mode 100644 index 3b42aaa..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/General/Index.rst +++ /dev/null @@ -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 ` 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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/Index.rst deleted file mode 100644 index 42d772e..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/Index.rst +++ /dev/null @@ -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 diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ManageBackups/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ManageBackups/Index.rst deleted file mode 100644 index 4f40dc7..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ManageBackups/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/RenameConstant/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/RenameConstant/Index.rst deleted file mode 100644 index b1e86a2..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/RenameConstant/Index.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/SearchConstant/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/SearchConstant/Index.rst deleted file mode 100644 index 458b2a0..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/SearchConstant/Index.rst +++ /dev/null @@ -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 ` 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. \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ViewTree/Index.rst b/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ViewTree/Index.rst deleted file mode 100644 index 476647e..0000000 --- a/typo3conf/ext/lfeditor/Documentation/MainMenuOptions/ViewTree/Index.rst +++ /dev/null @@ -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 ` 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 ` page. - -.. figure:: ../../Images/MainMenuOptions/ViewTree/ViewTree.png - :alt: ViewTree \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/README.md b/typo3conf/ext/lfeditor/README.md deleted file mode 100644 index c854b5f..0000000 --- a/typo3conf/ext/lfeditor/README.md +++ /dev/null @@ -1,200 +0,0 @@ -# Ext: lfeditor - - - -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 ** 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 ** 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 ** 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. diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang.xlf deleted file mode 100644 index 0c73d7d..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang.xlf +++ /dev/null @@ -1,518 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - Cancel - Afbryd - - - Delete - Slet - - - Rename - Omdøb - - - Save - Gem - - - Search - Søg - - - Back - Forrige - - - Next - Næste - - - Constant - Konstant - - - Constants - Konstanter - - - all - alle - - - translated - oversat - - - unknown - ukendt - - - untranslated - ikke oversat - - - Global - Global - - - loaded - indlæst - - - Local - Lokal - - - not loaded - ikke indlæst - - - System - System - - - unknown - ukendt - - - It seems that you are not allowed to use this module. - Det ser ud til at du ikke har adgang til at bruge dette modul! - - - Can't read from meta file. - Kan ikke indlæse metadata filen! - - - Can't write to meta file. - Kan ikke gemme metadata filen! - - - No backup files were found. - Backupfilen kunne ikke findes. - - - Can't delete backup file. - Backupfilen kunne ikke slettes. - - - Can't read from backup file. - Backupfilen kunne ikke læses. - - - Error! - Fejl! - - - Some language files have insufficient permissions (i.e. write permission). - Nogle sprogfiler har ikke de nødvendige rettigheder! (f.eks. skrive rettigheder) - - - Can't write to file. - Filen kunne ikke gemmes. - - - The constant already exists. - Konstanten eksisterer allerede! - - - The constant wasn't changed. - Den konstante blev ikke ændret. - - - Can't delete language file. - Sprogfilen kunne ikke slettes. - - - Can't split or merge files. - Filen kunne ikke deles/samles. - - - The file type isn't supported (i.e. localization files). - Denne extension understøtter ikke filer af denne type (f.eks. localization filer). - - - Unknown file type. - Filtypen er ukendt! - - - No constants were found. - Kunne ikke finde nogle konstanter! - - - No extensions were found. - Ingen extensions fundet! - - - No value was found in the given file. - Der er ingen værdier i denne fil! - - - No language files were found. - Der findes ingen sprogfiler! - - - No constants were found. - Programmet har modtaget en tom konstant array! - - - Please select a language with constants. - Vælg venligst et sprog! - - - Please select a constant. - Du har ikke valgt en konstant! - - - Please define a valid constant. - Du skal definere en konstant! - - - Please select a language file. - Vælg venligst en sprogfil! - - - Manage Backups - Backupstyring - - - Date of Backup - Backupdato - - - delete - slet - - - delete all - slet alt - - - only in backup - kun i backup - - - Differences between backup and original - forskelle mellem backup og original - - - only in original - kun i original - - - Meta - Meta - - - Missing backup file. - mangler backup fil - - - ok - ok - - - recover - gendan - - - State - Status - - - Add Constant - Tilføj konstant - - - constant name - konstantnavn - - - Delete Constant - Slet konstant - - - Are you sure that you wish to delete this constant? - Er du sikker på at du vil slette dette emne? - - - Edit Constant - Rediger konstant - - - Please enter new constant name in this field. The old constant will be replaced by the new one. - Indtast venligst et nyt konstantnavn i dette felt. Det gamle konstantnavn vil blive erstattet af det nye. - - - new constant name - nyt konstantnavn - - - Rename Constant - Omdøb konstant - - - Please enter a search word (can contain pcre syntax). - Indtast venligst et søgeord (kan være i PCRE format). - - - Search Result - søgeresultat - - - Search constants - Søg i konstanter - - - untranslated constant - ikke oversat konstant - - - normal constant - normal konstant - - - hide/unhide all - skjul/synligør alle - - - Root - Rod - - - Unknown constant (i.e. name changed, deleted in reference) - ukendt konstant (f.eks. ændret navn, slettet i referencen) - - - View Tree - Trævisning - - - General - Generelt - - - Email information - E-mail informationer - - - from Address - Fra adresse - - - Subject - Emne - - - The mail was sent successfully! - E-mail'en blev sendt korrekt! - - - to Address - Til adresse - - - Extension Author - Extensionejer - - - Email - E-mail - - - Name - Navn - - - csh_table - csh_table - - - Description - Beskrivelse - - - Information - Informationer - - - Options - Indstillinger - - - Merge - saml - - - Split - del - - - l10n splitting - l10n deling - - - normal splitting - normal deling - - - PHP - PHP - - - transformation - konvertering - - - XML - XML - - - All unsaved changes will be lost. Are you sure that you wish to cancel? - Alle ikke-gemte ændringer vil gå tabt. Er du sikker på, at du ønsker at annullere? - - - Warning - Advarsel - - - All unsaved changes will be lost. Are you sure that you wish to change? - Alle ikke-gemte ændringer vil gå tabt. Er du sikker på, at du ønsker at ændre? - - - Warning - Advarsel - - - Edit file - Rediger fil - - - case sensitive - case sensitive - - - complete - komplet - - - language file - sprog fil - - - l10n - l10n - - - missing original file - mangler original fil - - - The changes are saved successfully. - Filen blev gemt korrekt! - - - incomplete - ukomplet - - - merged - samlet - - - Origin - Kilde - - - Shortcut - Forkortelse - - - splitted - splittet - - - State - Status - - - Select constant - vælg konstant - - - Select constant type - vælg konstanttype - - - Select explode token - Vælg delingstegn - - - Select extension - vælg extension - - - Select extension and workspace - vælg extension og arbejdsrum - - - normal insert mode - Normalt tekstfelt - - - enhanced insert mode - Udvidet tekstfelt - - - Select language file - vælg sprogfil - - - Select up to two languages - vælg sprog og mønster - - - Nothing selected - intet valgt - - - Select reference language - vælg reference sprog - - - This table lists all backup files of the selected extension. - Denne tabel viser alle backupfiler fra den valgte extension. - - - This table lists all languages of the selected language file with additional information. - Denne tabel viser alle sprog fra den valgte sprogfil med ekstra informationer. - - - LFEditor - LFEditor - - - global - global - - - local (only BE modules) - lokal - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang_mod.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang_mod.xlf deleted file mode 100644 index 530572f..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/da.locallang_mod.xlf +++ /dev/null @@ -1,42 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - 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 - 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 - - - Editing of Language Files - Rediger sprogfiler - - - LFEditor - LFEditor - - -
-
\ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang.xlf deleted file mode 100644 index e3eb7c3..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang.xlf +++ /dev/null @@ -1,554 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - Cancel - Abbrechen - - - Delete - Löschen - - - Refresh list of language file options, only if you have added or deleted a language file - Aktualisiert die Liste der verfügbaren Sprachdateien; nur notwendig, falls Sprachdateien gelöscht oder hinzugefügt worden sind - - - Rename - Umbenennen - - - Save - Speichern - - - Search - Suchen - - - Back - Zurück - - - Next - Weiter - - - Constant - Konstante - - - Constants - Konstanten - - - all - alle - - - translated - übersetzt - - - unknown - unbekannt - - - untranslated - nicht übersetzt - - - Global - Global - - - loaded - geladen - - - Local - Lokal - - - not loaded - nicht geladen - - - System - System - - - unknown - unbekannt - - - It seems that you are not allowed to use this module. - Sie sind nicht berechtigt dieses Modul zu nutzen! - - - Can't read from meta file. - Die Metadatei konnte nicht gelesen werden! - - - Can't write to meta file. - Die Metadatei konnte nicht geschrieben werden! - - - No backup files were found. - Es konnten keine Backup-Dateien gefunden werden! - - - Can't delete backup file. - Die Backup-Datei konnte nicht gelöscht werden! - - - Can't read from backup file. - Die Backup-Datei konnte nicht gelesen werden! - - - The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /> - 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 /> - - - Error! - Fehler! - - - Some language files have insufficient permissions (i.e. write permission). - Einige Sprachdateien haben ungenügende Rechte (z.B. Schreibberechtigung)! - - - Can't write to file. - Die Datei konnte nicht geschrieben werden! - - - The constant already exists. - Die Konstante existiert bereits. - - - The constant wasn't changed. - Die Konstante wurde nicht verändert. - - - Can't delete language file. - Die Sprachdatei konnte nicht gelöscht werden! - - - Can't split or merge files. - Die Dateien konnten nicht aufgeteilt oder zusammengefügt werden! - - - The file type isn't supported (i.e. localization files). - Dieser Dateityp wird nicht unterstützt (z.B. Lokalisierungsdateien)! - - - Unknown file type. - Dieser Dateityp ist dem System vollkommen unbekannt! - - - No constants were found. - Es konnten keine Konstanten gefunden werden! - - - No extensions were found. - Es konnten keine Erweiterungen gefunden werden! - - - No value was found in the given file. - Es konnte kein Wert in dieser Datei gefunden werden! - - - No language files were found. - Es konnte keine Sprachdatei gefunden werden! - - - No constants were found. - Es wurden keine Konstanten übergeben! - - - Please select a language with constants. - Bitte wählen Sie eine Sprache mit Inhalt aus. - - - Please select a constant. - Sie haben keine Konstante ausgewählt. - - - Please define a valid constant. - Sie müssen eine Konstante definieren. - - - Please select a language file. - Bitte wählen Sie eine Sprachdatei aus. - - - Manage Backups - Backups verwalten - - - Date of Backup - Datum des Backups - - - delete - löschen - - - delete all - alles löschen - - - only in backup - nur im Backup - - - Differences between backup and original - Unterschiede zwischen Backup und Original - - - only in original - nur im Original - - - Meta - Meta - - - Missing backup file. - Backupdatei fehlt - - - ok - ok - - - recover - wiederherstellen - - - State - Status - - - The backup was successfully deleted. - Das Backup wurde erfolgreich gelöscht. - - - All backups were successfully deleted. - Alle Backups wurden erfolgreich gelöscht. - - - Restored successfully. - Erfolgreich wiederhergestellt. - - - Add Constant - Konstante hinzufügen - - - constant name - Konstantenname - - - Delete Constant - Konstante löschen - - - Are you sure that you wish to delete this constant? - Wollen Sie diese Konstante wirklich löschen? - - - Edit Constant - Konstante editieren - - - Please enter new constant name in this field. The old constant will be replaced by the new one. - Bitte geben Sie einen neuen Konstantennamen in dieses Feld ein. Die alte Konstante wird nach dem absenden der Daten durch diese ersetzt werden. - - - new constant name - neuer Konstantenname - - - Rename Constant - Konstante umbenennen - - - Please enter a search word (can contain pcre syntax). - Bitte geben Sie ein Suchwort an (kann PCRE-Syntax enthalten). - - - Search Result - Suchergebnisse - - - Search constants - Konstanten suchen - - - untranslated constant - nicht übersetzte Konstante - - - normal constant - normale Konstante - - - hide/unhide all - alle Einträge sichtbar/versteckt - - - Root - Wurzel - - - Unknown constant (i.e. name changed, deleted in reference) - unbekannte Konstante (z.B. Name geändert, gelöscht in Referenz) - - - View Tree - Baumansicht - - - General - Allgemeines - - - Hide/show untranslated languages - Verstecke/Zeige nicht übersetzte Sprachen - - - Email information - Email Informationen - - - from Address - von Adresse - - - Subject - Betreff - - - The mail was sent successfully! - Die Mail wurde erfolgreich versandt! - - - to Address - zu Adresse - - - Extension Author - Autor - - - Email - Email - - - Name - Name - - - csh_table - csh_table - - - Description - Beschreibung - - - Information - Informationen - - - Options - Optionen - - - Merge - zusammenfügen - - - Split - aufteilen - - - l10n splitting - l10n Aufteilung - - - normal splitting - normale Aufteilung - - - PHP - PHP - - - transformation - konvertieren - - - XML - XML - - - All unsaved changes will be lost. Are you sure that you wish to cancel? - Alle nicht gespeicherten Änderungen gehen verloren. Bist du dir sicher, dass du abbrechen möchtest? - - - Warning - Warnung - - - All unsaved changes will be lost. Are you sure that you wish to change? - Alle nicht gespeicherten Änderungen gehen verloren. Bist du dir sicher, dass du wechseln möchtest? - - - Warning - Warnung - - - Edit file - Sprachdatei editieren - - - case sensitive - case sensitive - - - complete - vollständig - - - language file - Sprachdatei - - - l10n - l10n - - - missing original file - originale Sprachdatei fehlt - - - The changes are saved successfully. - Die Datei konnte erfolgreich geschrieben werden! - - - incomplete - unvollständig - - - merged - zusammengefügt - - - Origin - Pfad - - - Shortcut - Sprachkürzel - - - splitted - aufgeteilt - - - State - Status - - - Select constant - wähle Konstante - - - Select constant type - wähle Art der Konstanten - - - Extension mode - Extension-Modus - - - l10n mode - l10n-Modus - - - Override mode - Override-Modus - - - Select explode token - Explode-Character - - - Select extension - wähle Extension - - - Select extension and workspace - wähle Extension und Workspace - - - normal insert mode - normaler Eingabemodus - - - enhanced insert mode - verbesserter Eingabemodus - - - Select language file - wähle Sprachdatei - - - Select up to two languages - Wähle bis zu zwei Sprachen - - - Nothing selected - nichts ausgewählt - - - Select reference language - wähle Referenzsprache - - - This table lists all backup files of the selected extension. - Diese Tabelle listet alle Backupdateien der selektierten Extension. - - - This table lists all languages of the selected language file with additional information. - Diese Tabelle listet alle Sprachen der selektierten Sprachdatei mit zusäauml;tzlichen Informationen. - - - LFEditor - LFEditor - - - global - global - - - local (only BE modules) - lokal (nur BE-Module) - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang_mod.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang_mod.xlf deleted file mode 100644 index eb9628b..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/de.locallang_mod.xlf +++ /dev/null @@ -1,58 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - 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 - 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 - - - Editing of Language Files - Bearbeitung von Sprachdateien - - - LFEditor - LFEditor - - - The user can save localization changes directly to extensions? - Der Benutzer kann Lokalisierungsänderungen direkt in Erweiterungen speichern? - - -
-
\ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang.xlf deleted file mode 100644 index 4e99dc6..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang.xlf +++ /dev/null @@ -1,518 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - Cancel - Peruuta - - - Delete - Poista - - - Rename - Uudelleennimeä - - - Save - Tallenna - - - Search - Etsi - - - Back - Takaisin - - - Next - Seuraava - - - Constant - Vakio - - - Constants - Vakiot - - - all - kaikki - - - translated - käännetty - - - unknown - tuntematon - - - untranslated - kääntämätön - - - Global - Globaali - - - loaded - ladattu - - - Local - Paikallinen (local) - - - not loaded - lataamaton - - - System - Systeemi - - - unknown - tuntematon - - - It seems that you are not allowed to use this module. - Näyttää siltä, että et voi käyttää tätä modulia! - - - Can't read from meta file. - Metatiedostoa ei voitu lukea. - - - Can't write to meta file. - Metatiedostoon ei voitu kirjoittaa! - - - No backup files were found. - Yhtään varmuustallennustiedostoa ei löytynyt! - - - Can't delete backup file. - Varmuustallennustiedostoa ei voinut poistaa! - - - Can't read from backup file. - Varmuustallennustiedostoa ei voinut lukea! - - - Error! - Virhe! - - - Some language files have insufficient permissions (i.e. write permission). - Joillakin kielitiedostoilla on riittämättömät käyttöoikeudet (esim. kirjoitusoikeus puuttuu)! - - - Can't write to file. - Tiedostoon ei voinut kirjoittaa! - - - The constant already exists. - Tämä vakio on jo olemassa. - - - The constant wasn't changed. - Vakiona ei muutettu. - - - Can't delete language file. - Kielitiedostoa ei voinut poistaa! - - - Can't split or merge files. - Tiedostoa ei voinut yhdistää tai jakaa! - - - The file type isn't supported (i.e. localization files). - Tiedostotyyppiä ei tueta (esim. lokalisaatiotiedostot)! - - - Unknown file type. - Tämä tiedostotyyppi on tuntematon! - - - No constants were found. - Yhtään vakiota ei löytynyt! - - - No extensions were found. - Yhtään lisäosaa ei löytynyt! - - - No value was found in the given file. - Tiedostosta ei löynyt yhtään etsittyä arvoa! - - - No language files were found. - Yhtään kielitiedostoa ei löytynyt! - - - No constants were found. - Yhtään vakoita ei löytynyt! - - - Please select a language with constants. - Ole hyvä ja valitse kieli, jossa on kielivakioita. - - - Please select a constant. - Ole hyvä ja valitse vakio. - - - Please define a valid constant. - Ole hyvä ja määrittele kelvollinen vakio. - - - Please select a language file. - Ole hyvä ja valitse kielitiedosto. - - - Manage Backups - Hallitse varmuustallennuksia - - - Date of Backup - Varmuustallenteen päivämäärä - - - delete - poista - - - delete all - poista kaikki - - - only in backup - vain varmuustallenteessa - - - Differences between backup and original - Varmuustallenteen ja alkuperäisen eroavaisuudet - - - only in original - vain alkuperäisessä - - - Meta - Meta - - - Missing backup file. - varmuustallennustiedosto puuttuu - - - ok - ok - - - recover - palauta - - - State - Tila - - - Add Constant - Lisää vakio - - - constant name - vakion nimi - - - Delete Constant - Poista vakio - - - Are you sure that you wish to delete this constant? - Haluatko todella poistaa tämän vakion? - - - Edit Constant - Muokkaa vakiota - - - Please enter new constant name in this field. The old constant will be replaced by the new one. - Ole hyvä ja määrittele tähän kenttään uusi vakion nimi. Vanha vakio korvataan uudella. - - - new constant name - uusi vakion nimi - - - Rename Constant - Nimeä vakio uudelleen - - - Please enter a search word (can contain pcre syntax). - Ole hyvä ja anna etsittävä sana (voi sisältää pcre-syntaksia) - - - Search Result - Hakutulokset - - - Search constants - Etsi vakioita - - - untranslated constant - kääntämätön vakio - - - normal constant - normaali vakio - - - hide/unhide all - piilota/näytä kaikki - - - Root - Juuri - - - Unknown constant (i.e. name changed, deleted in reference) - tuntematon vakio (esim. nimi muutettu, referenssi poistettu) - - - View Tree - Näytä sanastopuu - - - General - Yleistoimenpiteet - - - Email information - S-posti informaatiot - - - from Address - osoitteesta - - - Subject - Aihe - - - The mail was sent successfully! - Sähköposti lähettiin onnistuneesti! - - - to Address - osoitteeseen - - - Extension Author - Lisäosan tekijä - - - Email - S-posti - - - Name - Nimi - - - csh_table - csh_table - - - Description - Kuvaus - - - Information - Informaatiot - - - Options - Vaihtoehdot - - - Merge - yhdistä - - - Split - jaa - - - l10n splitting - paikallistamisjako (l10n) - - - normal splitting - normaali jakaminen - - - PHP - PHP - - - transformation - muunto - - - XML - XML - - - All unsaved changes will be lost. Are you sure that you wish to cancel? - Kaikki tallentamattomat muutokset menetetään. Oletko varma, että haluat peruuttaa? - - - Warning - Varoitus - - - All unsaved changes will be lost. Are you sure that you wish to change? - Kaikki tallentamattomat muutokset menetetään. Oletko varma, että haluat muuttaa? - - - Warning - Varoitus - - - Edit file - Muokkaa tiedostoa - - - case sensitive - iso-pieni-eroava (case sensitive) - - - complete - täydellinen - - - language file - kielitiedosto - - - l10n - paikallistaminen (l10n) - - - missing original file - alkuperäinen tiedosto puuttuu - - - The changes are saved successfully. - Tiedoston kirjoittaminen onnistui! - - - incomplete - epätäydellinen - - - merged - yhdistetty - - - Origin - Alkuperä - - - Shortcut - Pikavalinta - - - splitted - jaettu - - - State - Tila - - - Select constant - valitse vakio - - - Select constant type - valitse vakion tyyppi - - - Select explode token - Valitse jakomerkintä (explode token) - - - Select extension - valitse lisäosa - - - Select extension and workspace - valitse lisäosa ja työtila - - - normal insert mode - normaali syöttömoodi - - - enhanced insert mode - kehittynyt syöttömoodi - - - Select language file - valitse kielitiedosto - - - Select up to two languages - valitse kieli ja sen mallikieli - - - Nothing selected - mitään ei ole valittu - - - Select reference language - valitse referenssikieli - - - This table lists all backup files of the selected extension. - Tämä taulukko luettelee valitun lisäosan varmuustallennetiedostot. - - - This table lists all languages of the selected language file with additional information. - Tämä taulukko luettelee kaikki valitun kielitiedoston kaikki kieliversiot lisäinformaatioineen. - - - LFEditor - LFEditor - - - global - globaali - - - local (only BE modules) - lokaali (vain tausakäyttömoduleille) - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang_mod.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang_mod.xlf deleted file mode 100644 index 669c53c..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/fi.locallang_mod.xlf +++ /dev/null @@ -1,42 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - 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 - 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 - - - Editing of Language Files - Kielitiedostojen muokkaus - - - LFEditor - LFEditor - - -
-
\ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/locallang.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/locallang.xlf deleted file mode 100644 index c1b27a6..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/locallang.xlf +++ /dev/null @@ -1,423 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - Cancel - - - Delete - - - Refresh list of language file options, only if you have added or deleted a language file - - - Rename - - - Save - - - Search - - - Back - - - Next - - - Constant - - - Constants - - - all - - - translated - - - unknown - - - untranslated - - - Global - - - loaded - - - Local - - - not loaded - - - System - - - unknown - - - It seems that you are not allowed to use this module. - - - Can't read from meta file. - - - Can't write to meta file. - - - No backup files were found. - - - Can't delete backup file. - - - Can't read from backup file. - - - The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /> - - - Error! - - - Some language files have insufficient permissions (i.e. write permission). - - - Can't write to file. - - - The constant already exists. - - - The constant wasn't changed. - - - Can't delete language file. - - - Can't split or merge files. - - - The file type isn't supported (i.e. localization files). - - - Unknown file type. - - - No constants were found. - - - No extensions were found. - - - No value was found in the given file. - - - No language files were found. - - - No constants were found. - - - Please select a language with constants. - - - Please select a constant. - - - Please define a valid constant. - - - Please select a language file. - - - Manage Backups - - - Date of Backup - - - delete - - - delete all - - - only in backup - - - Differences between backup and original - - - only in original - - - Meta - - - Missing backup file. - - - ok - - - recover - - - State - - - The backup was successfully deleted. - - - All backups were successfully deleted. - - - Restored successfully. - - - Add Constant - - - constant name - - - Delete Constant - - - Are you sure that you wish to delete this constant? - - - Edit Constant - - - Please enter new constant name in this field. The old constant will be replaced by the new one. - - - new constant name - - - Rename Constant - - - Please enter a search word (can contain pcre syntax). - - - Search Result - - - Search constants - - - untranslated constant - - - normal constant - - - hide/unhide all - - - Root - - - Unknown constant (i.e. name changed, deleted in reference) - - - View Tree - - - General - - - Hide/show untranslated languages - - - Email information - - - from Address - - - Subject - - - The mail was sent successfully! - - - to Address - - - Extension Author - - - Email - - - Name - - - csh_table - - - Description - - - Information - - - Options - - - Merge - - - Split - - - l10n splitting - - - normal splitting - - - PHP - - - transformation - - - XML - - - All unsaved changes will be lost. Are you sure that you wish to cancel? - - - Warning - - - All unsaved changes will be lost. Are you sure that you wish to change? - - - Warning - - - Edit file - - - case sensitive - - - complete - - - language file - - - l10n - - - missing original file - - - The changes are saved successfully. - - - incomplete - - - merged - - - Origin - - - Shortcut - - - splitted - - - State - - - Select constant - - - Select constant type - - - Extension mode - - - l10n mode - - - Override mode - - - Select explode token - - - Select extension - - - Select extension and workspace - - - normal insert mode - - - enhanced insert mode - - - Select language file - - - Select up to two languages - - - Nothing selected - - - Select # of constants to show - - - Select reference language - - - This table lists all backup files of the selected extension. - - - This table lists all languages of the selected language file with additional information. - - - LFEditor - - - global - - - local (only BE modules) - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/locallang_mod.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/locallang_mod.xlf deleted file mode 100644 index 7218a92..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/locallang_mod.xlf +++ /dev/null @@ -1,42 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - 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 - - - Editing of Language Files - - - LFEditor - - - The user can save localization changes directly to extensions? - - -
-
\ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang.xlf deleted file mode 100644 index 55be113..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang.xlf +++ /dev/null @@ -1,558 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang.xml - -Special Thanks: -Peter Klein --> danish translation -Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - Cancel - Anuluj - - - Delete - Usuń - - - Refresh list of language file options, only if you have added or deleted a language file - Odśwież listę opcji pliku językowego, tylko jeśli dodałeś lub usunąłeś plik językowy - - - Rename - Zmień nazwę - - - Save - Zapisz - - - Search - Szukaj - - - Back - Wróć - - - Next - Następna - - - Constant - Stała - - - Constants - Stałe - - - all - wszystkie - - - translated - przetłumaczone - - - unknown - nieznane - - - untranslated - nieprzetłumaczone - - - Global - Globalne - - - loaded - załadowana - - - Local - Lokalne - - - not loaded - niezaładowana - - - System - Systemowe - - - unknown - nieznane - - - It seems that you are not allowed to use this module. - Wygląda na to, że nie możesz korzystać z tego modułu. - - - Can't read from meta file. - Nie można czytać z pliku meta. - - - Can't write to meta file. - Nie można pisać do pliku meta. - - - No backup files were found. - Nie znaleziono plików kopii zapasowych. - - - Can't delete backup file. - Nie można usunąć pliku kopii zapasowej. - - - Can't read from backup file. - Nie można czytać z pliku kopii zapasowej. - - - The following languages are not supported by TYPO3 and should be added. <br />(http://wiki.typo3.org/TYPO3_4.6#User-Defined_Languages) <br /> - 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 /> - - - Error! - Błąd! - - - Some language files have insufficient permissions (i.e. write permission). - Niektóre pliki językowe mają niewystarczające uprawnienia (tj. uprawnienia do zapisu). - - - Can't write to file. - Nie można pisać do pliku. - - - The constant already exists. - Stała już istnieje. - - - The constant wasn't changed. - Stała nie została zmieniona. - - - Can't delete language file. - Nie można usunąć pliku językowego. - - - Can't split or merge files. - Nie można dzielić ani scalać plików. - - - The file type isn't supported (i.e. localization files). - Typ pliku nie jest obsługiwany (tzn. pliki lokalizacyjne). - - - Unknown file type. - Nieznany typ pliku. - - - No constants were found. - Nie znaleziono stałych. - - - No extensions were found. - Nie znaleziono żadnych rozszerzeń. - - - No value was found in the given file. - W podanym pliku nie znaleziono żadnej wartości. - - - No language files were found. - Nie znaleziono plików językowych. - - - No constants were found. - Nie znaleziono stałych. - - - Please select a language with constants. - Wybierz język ze stałymi. - - - Please select a constant. - Proszę wybrać stałą. - - - Please define a valid constant. - Zdefiniuj poprawną stałą. - - - Please select a language file. - Wybierz plik językowy. - - - Manage Backups - Zarządzaj kopiami zapasowymi - - - Date of Backup - Data utworzenia kopii zapasowej - - - delete - usuń - - - delete all - usuń wszystkie - - - only in backup - tylko w kopii zapasowej - - - Differences between backup and original - Różnice między kopią zapasową a oryginałem - - - only in original - tylko w oryginale - - - Meta - Meta - - - Missing backup file. - Brak pliku kopii zapasowej. - - - ok - ok - - - recover - odzyskaj - - - State - Status - - - The backup was successfully deleted. - Kopia zapasowa została pomyślnie usunięta. - - - All backups were successfully deleted. - Wszystkie kopie zapasowe zostały pomyślnie usunięte. - - - Restored successfully. - Przywrócono pomyślnie. - - - Add Constant - Dodaj stałą - - - constant name - nazwa stałej - - - Delete Constant - Usuń stałą - - - Are you sure that you wish to delete this constant? - Czy na pewno chcesz usunąć tę stałą? - - - Edit Constant - Edytuj stałą - - - Please enter new constant name in this field. The old constant will be replaced by the new one. - Podaj nową nazwę stałej w tym polu. Stara stała zostanie zastąpiona nową. - - - new constant name - nazwa nowej stałej - - - Rename Constant - Zmień nazwę stałej - - - Please enter a search word (can contain pcre syntax). - Wprowadź szukane słowo (może zawierać składnię pcre). - - - Search Result - Wyniki wyszukiwania - - - Search constants - Wyszukaj stałe - - - untranslated constant - stała nieprzetłumaczona - - - normal constant - normalna stała - - - hide/unhide all - ukryj/odkryj wszystkie - - - Root - Korzeń - - - Unknown constant (i.e. name changed, deleted in reference) - nieznana stała (tzn. zmieniła się nazwa, usunięta w odniesieniu) - - - View Tree - Widok drzewa - - - General - Ogólne - - - Hide/show untranslated languages - Ukryj/pokaż nieprzetłumaczone języki - - - Email information - Informacja e-mail - - - from Address - z adresu - - - Subject - Temat - - - The mail was sent successfully! - Wiadomość została wysłana pomyślnie! - - - to Address - na adres - - - Extension Author - Autor rozszerzenia - - - Email - Email - - - Name - Nazwa - - - csh_table - csh_table - - - Description - Opis - - - Information - Informacja - - - Options - Opcje - - - Merge - Połącz - - - Split - Podziel - - - l10n splitting - dzielenie l10n - - - normal splitting - dzielenie normalne - - - PHP - PHP - - - transformation - przekształcenie - - - XML - XML - - - All unsaved changes will be lost. Are you sure that you wish to cancel? - Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno chcesz anulować? - - - Warning - Ostrzeżenie - - - All unsaved changes will be lost. Are you sure that you wish to change? - Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno chcesz anulować? - - - Warning - Ostrzeżenie - - - Edit file - Edytuj plik - - - case sensitive - wrażliwe na wielkość liter - - - complete - kompletne - - - language file - plik językowy - - - l10n - l10n - - - missing original file - brakuje oryginalnego pliku - - - The changes are saved successfully. - Zmiany zostały pomyślnie zapisane. - - - incomplete - niekompletne - - - merged - scalone - - - Origin - Źródło - - - Shortcut - Skrót - - - splitted - podzielone - - - State - Status - - - Select constant - Wybierz stałą - - - Select constant type - Wybierz typ stałej - - - Extension mode - Tryb rozszerzenia - - - l10n mode - tryb l10n - - - Override mode - Tryb zastępowania - - - Select explode token - Wybierz token rozdzielania - - - Select extension - Wybierz rozszerzenie - - - Select extension and workspace - Wybierz rozszerzenie i przestrzeń roboczą - - - normal insert mode - normalny tryb wstawiania - - - enhanced insert mode - ulepszony tryb wstawiania - - - Select language file - Wybierz plik językowy - - - Select up to two languages - Wybierz do dwóch języków - - - Nothing selected - Nic nie wybrano - - - Select # of constants to show - Wybierz # stałych, które chcesz wyświetlić - - - Select reference language - Wybierz język odniesienia - - - This table lists all backup files of the selected extension. - Ta tabela zawiera listę wszystkich plików kopii zapasowych wybranego rozszerzenia. - - - This table lists all languages of the selected language file with additional information. - Ta tabela zawiera listę wszystkich języków wybranego pliku językowego z dodatkowymi informacjami. - - - LFEditor - LFEditor - - - global - globalna - - - local (only BE modules) - lokalna (tylko moduły BE) - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang_mod.xlf b/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang_mod.xlf deleted file mode 100644 index 66bbb42..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Language/pl.locallang_mod.xlf +++ /dev/null @@ -1,58 +0,0 @@ - - - -
- FileRef: EXT:lfeditor/Resources/Private/Language/locallang_mod.xml - - Special Thanks: - Peter Klein --> danish translation - Tapio Markula --> finnish translation - module - LFEditor - Stefan Galinski - stefan@sgalinski.de -
- - - 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 - 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 - - - Editing of Language Files - Edycja Plików Językowych - - - LFEditor - LFEditor - - - The user can save localization changes directly to extensions? - Użytkownik może zapisywać lokalizację bezpośrednio do rozszerzenia? - - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Layouts/Default.html b/typo3conf/ext/lfeditor/Resources/Private/Layouts/Default.html deleted file mode 100644 index c002cf6..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Layouts/Default.html +++ /dev/null @@ -1,112 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - - - - - -
-
-
-
-
-
-
- - - - - - - - - - - - - - - -
- -
- - - - - - - - - - - - -
-
-
-
-
-
-
-
- -
-
-
-
- - - -
- - -
- - -
-
- -
-
- -
-
- - -
-
- diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectConstant.html deleted file mode 100644 index 25fbc50..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectConstant.html +++ /dev/null @@ -1,14 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - -
- - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectExtensionAndLanguageFile.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectExtensionAndLanguageFile.html deleted file mode 100644 index d18d7e5..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectExtensionAndLanguageFile.html +++ /dev/null @@ -1,43 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - -
-
-
- -
- - - - - - - - - - - - - - - - - - - -
-
- -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectLanguageAndReference.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectLanguageAndReference.html deleted file mode 100644 index e23a209..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectLanguageAndReference.html +++ /dev/null @@ -1,27 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - -
- -
-
-
- -
-
-
-
- -
-
-
-
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectNumConstants.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectNumConstants.html deleted file mode 100644 index 8149dc1..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectNumConstants.html +++ /dev/null @@ -1,14 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - -
- -
- -
-
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectReferenceLanguage.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectReferenceLanguage.html deleted file mode 100644 index b2ca924..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/SelectReferenceLanguage.html +++ /dev/null @@ -1,12 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - -
- - -
-
diff --git a/typo3conf/ext/lfeditor/Resources/Private/Partials/TreeElement.html b/typo3conf/ext/lfeditor/Resources/Private/Partials/TreeElement.html deleted file mode 100644 index 7e710b9..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Partials/TreeElement.html +++ /dev/null @@ -1,46 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - -
  • - - - - - {icon.name} - - - - {icon.name} - - - - - - - - {treeNode.label} - -
      - -
    -
    - - - - {treeNode.label} - - - -
    -
  • -
    diff --git a/typo3conf/ext/lfeditor/Resources/Private/Sources/ExtensionIcons.ai b/typo3conf/ext/lfeditor/Resources/Private/Sources/ExtensionIcons.ai deleted file mode 100644 index 676d850..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Sources/ExtensionIcons.ai +++ /dev/null @@ -1,268 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R 21 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - Adobe Illustrator CC 2017 (Macintosh) - 2016-11-04T18:57:35+01:00 - 2016-11-04T19:31:19+01:00 - 2016-11-04T19:31:19+01:00 - - - - 256 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9Map/eJ8v44qgsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVcCQajYjocVR9rqHRJj8n/AK4qj8VdirsVdirsVdir sVdirsVdirsVdiqXap/eJ8v44qgsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVRF revD8LfFH4eHyxVNI5UkUMhqMVXYq7FXYq7FXYq7FXYq7FXYq7FUu1T+8T5fxxVBYqqW8DTuUUgE Cu+Koj9Fzfzr+OKu/Rc386/jirv0XN/Ov44q79Fzfzr+OKu/Rc386/jirv0XN/Ov44q79Fzfzr+O Ku/Rc386/jirv0XN/Ov44q79Fzfzr+OKu/Rc386/jirv0XN/Ov44q79Fzfzr+OKrJrCSKMyFgQKb Cvc0xVDYq7FXYq7FV8M0kTckNPEdjiqaW13HMKD4X7qf4Yqr4q7FXYq7FXYq7FXYq7FXYql2qf3i fL+OKoLFUXpn+9Df6h/WMVTPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVC/8A95H+j9YxVKMVdirs VdirsVcCQQQaEdCMVTG11ANRJtm7P2PzxVG4q7FXYq7FWGeZPzCis5XtNLVZ5k2kuG3jU+CgU5H3 6fPNjp9AZC5bB1Wq7SETww3PexGbzn5mlcsb51r2QKoH0AZnjSYh0dbLXZj/ABI7TPzD121cC6Zb yH9pXAV6ezKB+IOV5NBjly2Lbi7SyR5+oPRNF1uw1e0FzaNWm0kbbOjeDDNRmwyxmi7zBnjljcVu qf3ifL+OVNyCxVF6Z/vQ3+of1jFUzxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQv/APeR/o/WMVSj FXYq7FXYq7FXYq7FUVa3zxUV/ij/ABHyxVM0kSRQyGqnvireKvI/zs/M0aZbyeWdIlpqVwtL+4Q7 wRMP7sEftuOvgvudszTYb9R5ODq89DhHN5N5c83vbcbTUGL2/SObqyex8VzawyVsXTZMN7hnEckc iK8bB0YVVlNQR7EZkOIuxVOvKOsyaXrUL8qW87CK4XsVY0r/ALE75jarDxwPeHL0ec48g7jzeoap /eJ8v45z706CxVF6Z/vQ3+of1jFUzxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQv/APeR/o/WMVSj FXYq7FXYq7FXYq7FXYqqQXEkLVQ7d17HFWN/mZ+Z1r5Y0b07Qh9cvFItYDv6a9DM/sP2fE/I5fgw 8Z8nH1GfgHm+Y7i4nuZ5Li4kaWeZjJLK5qzMxqzEnqSc2gFOoJtVtLb1G5sPgH4nMnBi4jZ5OLqM 3CKHNkOka1cafJx+3bMfji/ivgczJQtwIzpmVneW93AJoG5IeviD4EdjlJFNwKuoJYBftE7U8cCv atU/vE+X8c5Z7JBYqi9M/wB6G/1D+sYqmeKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqF//vI/0frG KpRirsVdirsVdirsVdirsVSTzf5qsPLOjSahdfG/2La3Bo0spGyj27k9hlmPGZmg15cogLL5o1vW dQ1rU59Sv5PUuZ2qx7KOyqOyqNhm2hERFB0s5mRsoa3gMr06KPtHLsWPiPk0ZsogPNM1UKAoFAOg zZAUKDqiSTZWTSrEhY/QPE5HJMRFs8eMzNBS03W7/T7o3EL1Df3kR+ww8CP45rvEN27Pwo1T2T8s Vg8z6hHcxArBZMsl2jfssN0T35EfdXIarUCMNuZZaPSmWQXyG71nVP7xPl/HNG9EgsVRemf70N/q H9YxVf5iOqDy/qZ0kV1UWk508bb3Hpt6XXb7dOuIUvii61DzyLmUXdzqYueR9YSvcB+dd+XI1rXx y/Zp3Uv0j5w/5atQ/wCDn/rjsh36R84f8tWof8HP/XHZXfpHzh/y1ah/wc/9cdld+kfOH/LVqH/B z/1x2V36R84f8tWof8HP/XHZXfpHzh/y1ah/wc/9cdld+kfOH/LVqH/Bz/1x2V36R84f8tWof8HP /XHZXfpHzh/y1ah/wc/9cdlZ9+SN75+k/MLTkhmvpbIlv0ksrStD6HBqmTmePX7P+V0yMqplG7fV 2VNqhf8A+8j/AEfrGKpRirsVdirsVdirsVdiqE1XVbHStPn1C+lENrbqXkc/gAO5J2A7nJRiSaDG UhEWXzT508333mjWHvbisdulUs7atRHHX/iTftHNrixiAp02bKZm0jijaRwq9T+GXwgZGg485iIs pnFGsaBV6Dv45s4QERQdVOZkbLbuqKWY0A64ZSAFlEYkmglk8zSvyPT9keAzWZMhkbdrixiApM/K vljU/MutQaTpyVllNZJTXhFGPtSOfAfj065TOYiLLfjxmZoPrDyp5W0vyzo0OlaclIo/illP25ZC Pikc+Jp9HTNTkmZGy7nHjEBQVtU/vE+X8cg2ILFUXpn+9Df6h/WMVTPFXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FVK6jaSBkX7RpT6CDiqX/o658B9+Ku/R1z4D78Vd+jrnwH34q79HXPgPvxV36OufAff irv0dc+A+/FVstnLFE8srIkUalpHZgFVVFSST2AxV84fmd5/k8yakbSzcjRbRiIBuPWcbGVh/wAR B7e5zaYMPALPN1Gpz8ZocmEKpYhQKk9BmQBezikgCymdvAIkp1Y/aObLFi4R5urzZeM+SoTQVPTL WpLrq4MrUX7A6e/vmuzZeI7cnZYMPCLPNuwsLzUL2GysomnurhxHDEgqWZugygkAWXJAJNB9Uflt 5As/J+iiH4ZdUuQH1C6A6t2jTvwTt49c1WbKZnydxgwiA82XZS3pdqn94ny/jiqCxVF6Z/vQ3+of 1jFUzxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvBfzu/M765LJ5X0ab/AESI 8dUuUP8AeOD/AHKkfsr+14nbtvn6bDXqLrdXqL9IeN5muCmFpbemObD4z+AzPwYuHc83XajNxGhy ROZDioG8uakxIdv2j/DMLUZr9Ic/TYa9RQoBJAAqTsAOtcxHMfSH5N/lkPL1kNa1WL/c3dp+7jb/ AI9om/Z/12/a8OnjXXajNxGhydrpcHCLPN6bmK5bsVS7VP7xPl/HFUFiqL0z/ehv9Q/rGKr/ADDq cmlaBqeqRxevJYWk90kP85hjZwu383GmIUvlC4/5yC/NeWZ5E1hIEY1WGO1tSijwHOJ2p82OXcAa uIqf/K/fza/6vv8A06Wf/VHHgC8Rd/yv382v+r7/ANOln/1Rx4AvEXf8r9/Nr/q+/wDTpZ/9UceA LxF3/K/fza/6vv8A06Wf/VHHgC8Rd/yv382v+r7/ANOln/1Rx4AvEXf8r9/Nr/q+/wDTpZ/9UceA LxF3/K/fza/6vv8A06Wf/VHHgC8Rd/yv382v+r7/ANOln/1Rx4AvEXf8r9/Nr/q+/wDTpZ/9UceA LxF3/K/fza/6vv8A06Wf/VHHgC8Rd/yv382v+r7/ANOln/1Rx4AvEXf8r9/Nr/q+/wDTpZ/9UceA LxF3/K/fza/6vv8A06Wf/VHHgC8RZv8Ak/8AnV591nzvY6JrVympWl/6iEmGKJ4ikbSB1MKR1+xv yGRlEUmMjb6MytsdirsVeV/nP+Z36DtH0DSJaaxcr/pMydbeFh2PaRx08Bv4ZlabDxbnk4eqz8I4 RzfOubJ1aMs7atJXG37I/jmXp8P8RcLU5v4QjczHBQt3c8BwQ/Gep8BmNny1sOblafDxbnkgMwXY va/yQ/LH1Gi816zD+7X4tJtnH2j2uGB7D9j/AILwzB1Ob+EOfpNP/Efg9zzBdi7FXYql2qf3ifL+ OKoLFUXpn+9Df6h/WMVTMgEEEVB2IOKsSm/KT8tZpXlk8vWfOQlm4oVFT7KQBh4ijhCn/wAqf/LL /qXbT/gW/rjxFeEO/wCVP/ll/wBS7af8C39ceIrwh3/Kn/yy/wCpdtP+Bb+uPEV4Q7/lT/5Zf9S7 af8AAt/XHiK8Id/yp/8ALL/qXbT/AIFv648RXhDv+VP/AJZf9S7af8C39ceIrwh3/Kn/AMsv+pdt P+Bb+uPEV4Q7/lT/AOWX/Uu2n/At/XHiK8Id/wAqf/LL/qXbT/gW/rjxFeEO/wCVP/ll/wBS7af8 C39ceIrwh3/Kn/yy/wCpdtP+Bb+uPEV4Q7/lT/5Zf9S7af8AAt/XHiK8Id/yp/8ALL/qXbT/AIFv 648RXhCaaD5E8naBctdaNpFtZXLrwaeNPj4nqAxqQD7YklQE9wJdirDPzO/MO18oaOTGVl1i7BWx tzvTsZXH8i/idvEi7Dh4z5NGfMIDzfLV3d3V5dS3d1K01zO5kmlc1ZmY1JJzagU6cmzZXWtv6jcm +wPxzIwYuI2eTjZ83CKHNMc2DrVG5nESbbufsjKs2XhHm3YcXGfJLSSSSTUnqc1pNuzAp6L+UP5Z v5n1EanqUZGg2b/GDt9YkG/pD/JH7Z+j5Y2ozcIoc3L02DjNnk+l0RERURQqKAFUCgAHQAZrHbN4 q7FXYql2qf3ifL+OKoLFUXpn+9Df6h/WMVTPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FUl84ebNM8raJNql+1QvwwQD7cspHwov8T2G+Tx4zI0GvLkEBZfJ/mXzFqfmLWbjVtRk53E52UfY jQfZjQdlUf1O+baEBEUHTZJmRsoCCFpXoNlH2jl+LGZFx8uUQFpmqqqhVFAOgzZAACg6uUiTZWyy rEhZvoHicjOYiLLLHjMjQSuSRpHLN1Oa2cjI2XawgIigyHyN5MvfNOri1jrHZw0e9uabIhPQf5TU +Ef0yjLlEBbkYcJma6PqzQtOstN0e1sLKIQ2tugSKNegH8STuT3OamUiTZdzGIAoI/Al2KuxV2Kp dqn94ny/jiqCxVF6Z/vQ3+of1jFUTqupW2l6ZealdEi1sYJLmcqKkRwoXag7mi4q8Dn/AOcrbn1n 9Dy4no1Pp+pdHlx7FqRUrlnA18an/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd /wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBD W6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/ 1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX /SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjd/wBDW6h/1LkX/SU3/VLHgXjXJ/zlVqUjhE8txFm2 A+tN/wBUsIxWaQctCyw7z1581fzjqaXl8ogghXha2cbFo4gd2IJpVmPVqeHhmyxYhAU6rNmMzbHI 42kcKvU5fGJkaDjzmIiymkUSxIFX6T4nNlCAiKDqsmQyNlczKqlmNAOpyRIAssYxJNBLJ52levRR 9kZrcuQyLtMWIQCM0DQtQ13VYNNsE5zzHdj9lFH2nc9lUf51yicxEWXIhAyNB9L+VfLOn+XNHi02 zFQvxTzEfFLIftO38B2GanJkMjZdzixiAoMxs/8AeaP5ZBsVcVdirsVdiqXap/eJ8v44qgsVRemf 70N/qH9YxVG3tla31nPZXcYmtbqN4biJujxyKVdTTsVNMVePz/8AOLfkt5neLU9QijZiUj5QtxB7 VMdTT3yfGWHAFn/QrHk//q7ah98H/VPHjK8Dv+hWPJ//AFdtQ++D/qnjxleB3/QrHk//AKu2offB /wBU8eMrwO/6FY8n/wDV21D74P8AqnjxleB3/QrHk/8A6u2offB/1Tx4yvA7/oVjyf8A9XbUPvg/ 6p48ZXgd/wBCseT/APq7ah98H/VPHjK8Dv8AoVjyf/1dtQ++D/qnjxleB3/QrHk//q7ah98H/VPH jK8Dv+hWPJ//AFdtQ++D/qnjxleB3/QrHk//AKu2offB/wBU8eMrwO/6FY8n/wDV21D74P8Aqnjx leB3/QrHk/8A6u2offB/1Tx4yvAtf/nFvyaiM76xfqiglmJgAAHUk+njxleAPGNc0ny1p+tXEPl+ ee7sIj6cd3c8eUhH2mUIqUU9q7/qzZYcfCLPN1eozcRockIASQBuT0GXgW4pNJlbW4iTf7Z+0f4Z scOLhHm6zNl4z5K2XNKXXVx6jcV+wPxOa/Pl4jQ5Oy0+HhFnmttLS6vLqK0tYmmuZ3EcMSCrMzGg AGY5NOSBZoPo38u/Itv5W0v94Fk1W5AN5ONwO4jQ/wAq/id/DNVmzcZ8ncafDwDzZblLenNn/vNH 8sVVcVdirsVdiqXap/eJ8v44qgsVRemf70N/qH9YxVM8VdirsVdirsVdirsVdirsVdirsVdirsVd irsVeG/nd+Z/NpvKmjS/AtU1a5Q9T3t1I7D/AHZ/wPjmdpsP8Rdfq9R/CPi8TzOdej7O24D1HHxn oPAZnYMNbnm6/UZuLYckVmS4iCvLnrEh/wBY/wAMw9Rm/hDnabD/ABFB5iOa+ivyY/LD9CWqeYNX iprFyn+iwON7eJh1I7SOOvgNvHNdqc3FsOTtNLp+EcR5s2zEcx2KpzZ/7zR/LFVXFXYq7FXYql2q f3ifL+OKoLFUXpn+9Df6h/WMVTCaaGCGSeZ1jhiUvJI5CqqqKliT0AGKvNZ/+cjPywimeNbu5lCE gSx278Wp3XlxNPoyXAWPGFP/AKGQ/LL/AH/d/wDSO39ceArxh3/QyH5Zf7/u/wDpHb+uPAV4w7/o ZD8sv9/3f/SO39ceArxh3/QyH5Zf7/u/+kdv648BXjDv+hkPyy/3/d/9I7f1x4CvGHf9DIfll/v+ 7/6R2/rjwFeMO/6GQ/LL/f8Ad/8ASO39ceArxh3/AEMh+WX+/wC7/wCkdv648BXjDv8AoZD8sv8A f93/ANI7f1x4CvGHf9DIfll/v+7/AOkdv648BXjDv+hkPyy/3/d/9I7f1x4CvGHf9DIfll/v+7/6 R2/rjwFeMJL5y/5yC0e80GS38qGf69cVjN3LH6YiQj4mSpqX7Dw65kYMFmzycXU6jhFDm8NJJJJN SdyTmxdWirO25UkcbD7I8ffMvT4b9RcPU5q9IR2ZrgIa7ufTHBT8Z/AZj58vDsOblafDxGzyS/MB 2L2P8kvywF7JH5o1mKtnE1dMtnH946n++YH9lT9nxO/bfC1OavSHO0unv1F73mA7JIcVdiqc2f8A vNH8sVVcVdirsVdiqXap/eJ8v44qgsVRemf70N/qH9YxVW1zS4tX0XUNKmcpDqFtNayOv2lWaMxk ivcBsQr5tn/5xa88rM4g1PTJIQT6byPcIxXsWUQuAfbkct4w18BWf9CufmB/1cNJ/wCR1z/2T48Y RwF3/Qrn5gf9XDSf+R1z/wBk+PGF4C7/AKFc/MD/AKuGk/8AI65/7J8eMLwF3/Qrn5gf9XDSf+R1 z/2T48YXgLv+hXPzA/6uGk/8jrn/ALJ8eMLwF3/Qrn5gf9XDSf8Akdc/9k+PGF4C7/oVz8wP+rhp P/I65/7J8eMLwF3/AEK5+YH/AFcNJ/5HXP8A2T48YXgLv+hXPzA/6uGk/wDI65/7J8eMLwF3/Qrn 5gf9XDSf+R1z/wBk+PGF4C7/AKFc/MD/AKuGk/8AI65/7J8eMLwFjvnH8mtd8oW9vPrGpac5uH4x W1tJM8zAbswV4YxxHck5bhjxlpzz4B5pIiKihVFFGwGbECnVkkmyiLW3MrVP2B19/bL8OLiO/Jxs +bgFDmmIAAoOgzYutU7icRJXqx+yMqy5OEebbhxGZ8ksZizFiak9TmtJs2XaAACgz/8AKb8tpfNe qfXL5GTQrJgbhunrONxCp/4mR0HuRmPnzcAoc3K02DjNnk+nIoooYkhiQRxRqEjjUAKqqKAADoAM 1btwF2KpDirsVTmz/wB5o/liqrirsVdirsVS7VP7xPl/HFUFiqL0z/ehv9Q/rGKpnirsVdirsVdi rsVdirsVdirsVdirsVSnzT5n0vy1os+q6i9IohSOMfblkP2Y0Hi34dTtk4QMjQYZMggLL5O81eZ9 T8za1PquovWWU0jjX7EUY+zGg8F/tzbQgIig6XJkMzZSyCFpX4jp+0fAZdjxmRpoy5BAWmaIqKFU UAzZxiAKDqpSJNlqWRY0LN0H44JzERZTCBkaCWSyNI5Zup7eGayczI2XawgIigyHyH5J1Dzdriaf bVjtko99d0qsUVevuzdFH8K5RlyCAtyMOIzNPq3RtG07RtMt9M06EQWlsvCNB+LMe7Mdye5zVSkZ Gy7mMREUEbkWTsVSHFXYqnNn/vNH8sVVcVdirsVdiqXap/eJ8v44qgsVRemf70N/qH9YxVM8VSqb zb5VgleGbWbGKaMlZI3uYVZWHUEFqg4aRaz/ABn5P/6vun/9JUH/ADXjRWw7/Gfk/wD6vun/APSV B/zXjRWw7/Gfk/8A6vun/wDSVB/zXjRWw7/Gfk//AKvun/8ASVB/zXjRWw7/ABn5P/6vun/9JUH/ ADXjRWw7/Gfk/wD6vun/APSVB/zXjRWw7/Gfk/8A6vun/wDSVB/zXjRWw7/Gfk//AKvun/8ASVB/ zXjRWw7/ABn5P/6vun/9JUH/ADXjRWwsm88eTIYXlfXbDhGpZuNzCxoBXZVYkn2GERJNIMgBZfNX 5k+f7zzhrZmHKLSrYlNPtT2XvI4G3N+/h0zaYcQgPN1GfMZnyYmiM7BVFScvjEk0HGlIRFlM4YVi TiOvc+JzZ48YiKdVkyGZtezBQSTQDqckTW7AAk0EsuJzK9eij7IzW5cnEfJ2mHEIDzVNOsZL++gs 43jiadwglmdY41r1Z3YgKBlMpCIsuRCBkaD6f8ir5A8r6NBpNhrWnyzuQ1zOLmDnPM21aBvoVew9 81WWZmbLucWMQFBm2VNrsVdiqQ4q7FU5s/8AeaP5Yqq4q7FXYq7FUu1T+8T5fxxVBYqi9M/3ob/U P6xiq/zDZ317oGp2dhL6F9c2k8NpPUrwlkjZY3qNxxYg4hS+OLj8p/zJhneJ/Lt8zoSGaOIyKT7O nJW+g5dxBp4Sp/8AKrfzG/6lvUP+keT+mHiC0Xf8qt/Mb/qW9Q/6R5P6Y8QWi7/lVv5jf9S3qH/S PJ/THiC0Xf8AKrfzG/6lvUP+keT+mPEFou/5Vb+Y3/Ut6h/0jyf0x4gtF3/KrfzG/wCpb1D/AKR5 P6Y8QWi7/lVv5jf9S3qH/SPJ/THiC0Xf8qt/Mb/qW9Q/6R5P6Y8QWi0fyu/MVQSfLmoADck270p9 2PEFooGwsDb1eUfvjtTrxH0ZnYcVbnm67Pm4jQ5IwAk0G5PTLwHGJTK2txEtT9s9T/DNjhxcI83V 583GfJXy5pS+7ufUPBT8A/E5gZ8vEaHJ2Onw8Is81GCCa4mjggjaWaVgkUSAszMxoFVRuSTmMS5Q Fom+/Ln8x7iSi+W9RES/ZH1eTf36ZgZcwkfJ2WHBwjzQ8f5VfmQ7qi+W78FjQFoGUb+JagH05VxB v4S+vfImlappHk7R9M1WT1dQtLZIrhuXOhA2Xl34Ci19spPNtCe4EuxVIcVdiqc2f+80fyxVVxV2 KuxV2Kpdqn94ny/jiqCxVF6Z/vQ3+of1jFUzxV2KuxV2KuxV2KuxV2KuxV2KvFPzv/M701m8qaNL +8b4dWuUP2R3t1I7n9v/AIHxzN02H+IuBq9R/CPi8MzPdcjrO24j1HHxH7I8MzdPhrcuBqc1+kck XmU4aDvLnrEh3/aP8MxNRm/hDm6bD/EUFmG5z6C/JT8sTpcCeZdYhpqU61sLdxvBGw+2wPR3B+ge 5212pzX6RydnpdPXqPN65mI5rsVdirsVdiqQ4q7FU5s/95o/liqrirsVdirsVS7VP7xPl/HFUFiq L0z/AHob/UP6xiqZ4q7FXYq7FXYq7FXYq7FXYq85/N78zE8saedM02QHXrxDwI3+rxnb1T/lH9gf T88nT4eI2eTi6nPwChzfNDu7uzuxZ2JLMTUknqSc2TqUTZ23I+o4+EfZHicysGG9zycTUZq9I5o/ M516Hurj014r9s/hlGfLwihzcnBh4jZ5Jdmvdk9b/JX8sP0rPH5l1iGumQNWxt3G08in7bA9Y0P3 n2G+Hqc9ekc3N0unv1Hk+g817s3Yq7FXYq7FXYqkOKuxVObP/eaP5Yqq4q7FXYq7FUu1T+8T5fxx VBYqi9M/3ob/AFD+sYqv8xXGpW3l/U7jS4/V1KG0nksYqcuU6xsYl496uBthCl8X3H5jfmI88jS+ ZNVSQsS6rdzxgGu4CKyqvyAy6g02Vn/KxPzA/wCpm1b/AKTrn/mvGgtl3/KxPzA/6mbVv+k65/5r xoLZd/ysT8wP+pm1b/pOuf8AmvGgtl3/ACsT8wP+pm1b/pOuf+a8aC2Xf8rE/MD/AKmbVv8ApOuf +a8aC2Xf8rE/MD/qZtW/6Trn/mvGgtlXtPPX5hXEvEeZtWCjd2+vXOw/4PJ48XEWrLm4AqXd5eXl w9zeXEt1cyU9S4ndpJGoABydyWOw75sIgAUHVykSbLra3MrVP2B1P8MyMOLiPk4+fNwDzTIAAUGw HQZsQHWE2pzzLElTux+yMry5BENmLEZlLGZmYsxqT1Oa0kk2XaxiAKCEvrwW8dF3lb7I8PfKMuTh Hm34cXGfJuDz755t4Y4IPMWpwwRKEiijvLhUVVFAqqHAAA6AZgEW7MbKn/KxPzA/6mbVv+k65/5r xoJsu/5WJ+YH/Uzat/0nXP8AzXjQWy7/AJWJ+YH/AFM2rf8ASdc/8140Fsu/5WJ+YH/Uzat/0nXP /NeNBbL0f8hPO3n7UfP9vp9zqV7qmmTRTNfrdSyXCxIkbFJA0hfh+84rt1rTIyAplEm305lTYkOK uxVObP8A3mj+WKquKuxV2KuxVLtU/vE+X8cVQWKovTP96G/1D+sYqmeKoOfRNGuJWlnsLeWVt2ke JGY/MkVxtVP/AA75f/6tlp/yIj/5pxtad/h3y/8A9Wy0/wCREf8AzTja07/Dvl//AKtlp/yIj/5p xtad/h3y/wD9Wy0/5ER/8042tO/w75f/AOrZaf8AIiP/AJpxtad/h3y//wBWy0/5ER/8042tPK/P /lzQtbvbiCO3jtRAfTt5oEVCrLsxooAYFq7HMEa+ePKSPp7m2ekjkhR597xnVfLmpaXe/VrpKBqm OZd0dR3U/wAOudLo80dQLj8fJ53V4zg+r4ea+NFRAq9Bm6jERFB0cpGRsukkWNCzdBjOQiLKYQMj QSuWVpXLN9A8BmsnMyNl2uPGIignnknydqXmzXYtMs/gj+3d3JFViiB+Jj4nso7nKcmQQFlvxYjM 0H1JpPknytpenQWFvptu0UChQ8sSPIx7s7EVLE7nNTKZkbLuYQERQRf+HfL/AP1bLT/kRH/zTkbZ 07/Dvl//AKtlp/yIj/5pxtad/h3y/wD9Wy0/5ER/8042tO/w75f/AOrZaf8AIiP/AJpxtad/h3y/ /wBWy0/5ER/8042tIm0sLGzVltLeK3VjVliRUBPieIGKq+KpDirsVTmz/wB5o/liqrirsVdirsVS 7VP7xPl/HFUFiqL0z/ehv9Q/rGKpnirsVdirsVdirsVdiqE1a9FjptxdHrGh4f6x2X8TleWfDEll CNmnlZJJJJqTuSc0bsENf2Frf2zW90geNvvB7FT2OXafUTwz4oGi059PDLHhmLDzrzD5butIcyV9 WyJ+Cfw9n8D+vO47P7Vx6iNH0zHMfqeM1/Zk8B29UDyP62KXNwZX22QfZH8cnmy8R8k4cXAPNX0f R9Q1jU7fTNOiM95cuEiQfiSeyqNyewyiUgBZciMTI0H1b5C8kad5R0NLC2pJdSUe+u6UaWSn4KvR R2+dc1OXKZm3c4cQgKZJlba7FXYq7FXYq7FXYq7FUhxV2KpzZ/7zR/LFVXFXYq7FXYql2qf3ifL+ OKoLFUXpn+9Df6h/WMVVde1VNI0PUdWeMypp9rNdNEuxYQRmQqPc8aYhS+ZZf+cnPzDaV2jg0+OM klE9GRqDsKmTfLeANXGVv/QzX5jf760//kRJ/wBVceALxl3/AEM1+Y3++tP/AOREn/VXHgC8Zd/0 M1+Y3++tP/5ESf8AVXHgC8Zd/wBDNfmN/vrT/wDkRJ/1Vx4AvGXf9DNfmN/vrT/+REn/AFVx4AvG WW+TPzM84+c7G7bWBbJZQSIsQt42QtIAS3Isz7KCPvzW9oSAqIcvSi7KfZrHMdiqyWKKaNopUEkb ji6MAVIPYg4YyINjmgxBFF5x5p/L+4tXN1o6PPbsfitVq0iVP7Pdl/Ee+dHoe0xP0z2l397otX2e Y+qG8fue0/lL+WsXlXSxe3yBtevUH1htj6KHcQqfH+cjqfYZZnzcZocmemwcAs83oGY7kuxV2Kux V2KuxV2KuxV2KpDirsVTmz/3mj+WKquKuxV2KuxVLtU/vE+X8cVQWKovTP8Aehv9Q/rGKpjJHHLG 0cih43BV0YAqykUIIPUHFWBy/kN+U8kjSNoKhnJYhbm7RanwVZgoHsBkuIseELP+VBflL/1Yv+nu 8/6rY8ZXhDv+VBflL/1Yv+nu8/6rY8ZXhDv+VBflL/1Yv+nu8/6rY8ZXhDv+VBflL/1Yv+nu8/6r Y8ZXhDv+VBflL/1Yv+nu8/6rY8ZXhDHY9G0LR5JrHQ7YWmmpIxiiDvJ7FuUjOx5Uruc0eoyccyXY YocMaVMpbHYqm2keWdR1Kjqvo2x6zuNiP8kdWy/Fp5T8g1zyiLNtJ8vadpqhok9SfvO+7fR/L9Gb LFp4w5c3FnkMkzy9rdirsVdirsVdirsVdirsVdiqQ4q7FU5s/wDeaP5Yqq4q7FXYq7FUu1T+8T5f xxVBYqi9M/3ob/UP6xiqZ4q7FXYq7FXYq7FUu8w6ithpE8xYLIw9OHeh5vsKfLrlWefDAlnjFyDz HNI56L0/Sr7UJfTtYi9PtP0Vfm2Tx4pTOzGUwObM9H8nWNpxlu6XVwN6Efu1Psvf6c2WLSRjudy4 s8xPJkIAAoOmZbS7FXYq7FXYq7FXYq7FXYq7FXYq7FUhxV2KpzZ/7zR/LFVXFXYq7FXYql2qf3if L+OKoLFVS3naBy6gEkU3xVEfpSb+RfxxV36Um/kX8cVd+lJv5F/HFXfpSb+RfxxV36Um/kX8cVd+ lJv5F/HFXl/5+eVvOHnHQtLtvLxX1bK7+sywep6JY8CqSKzELVKn78IrqgovyB5T8yW+jQDzhNDc 6gmxS3J3QAcfVfar9a8fvzDOjhxX07m8Z5VT0GC8FvEsUEMcca/ZRRQZlRiAKDUTap+lJv5F/HCh 36Um/kX8cVd+lJv5F/HFXfpSb+RfxxV36Um/kX8cVd+lJv5F/HFXfpSb+RfxxV36Um/kX8cVd+lJ v5F/HFXfpSb+RfxxV36Um/kX8cVd+lJv5F/HFXfpSb+RfxxVB4q7FU5s/wDeaP5Yqq4q7FXYq7FU u1T+8T5fxxVBYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F U5s/95o/liqrirsVdirsVS7VP7xPl/HFUFirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVTmz/3mj+WKquKuxV2KuxV//9k= - - - - 1 - False - False - - 321.945007 - 321.945007 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Standard-Farbfeldgruppe - 0 - - - - application/pdf - proof:pdf - xmp.did:3b30c183-002d-4eb9-8cf3-048a17611350 - uuid:dcf3ca03-e76e-244d-91cb-c8540000c814 - xmp.did:3b30c183-002d-4eb9-8cf3-048a17611350 - - proof:pdf - - - - - saved - xmp.iid:3b30c183-002d-4eb9-8cf3-048a17611350 - 2016-11-04T18:57:35+01:00 - Adobe Illustrator CC 2017 (Macintosh) - / - - - - Document - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 26 0 R/TrimBox[0.0 0.0 321.945 321.945]/Type/Page>> endobj 23 0 obj <>stream -HVK1 )r' BY%oWBO\}>ݽdrNۜ>~_2TɵeyfԻt) 3fؔ ?/˛S'5OXz[wco&Drٌ4'1ƊO] -x\񎤂Nd?XWa*a`XA$0jzXvxC Hغ(kuU5(yމMRV[ 47}?+ցJ(}['\H b~C? 47s_ }t'0~;U=vUѴ '迫qKČe^팿WᇺS+vin}/pW}?+~e߯w].F]Gk| uj;ِ;yݕ? }ZS7sOO)g~^wxK ƿ ;ZSQJKAR;.ƒI[T|(ͷB3] R!CE.dRdV] d,-^jx/.Jt*ޥ": *uβD2FQoSzqP1|D9@Pq5!wH%kg*DAl#+m$Z!` -5|oNo3+[?]3D|#ኳ"S Rp!GK& -Vpcx7F٨ endstream endobj 26 0 obj <>stream -8;Wk$4`\La%"p"!48U)/Oua):c8Tg"n+'(V-N\j]prap:'RhSTleOKHU5-b3N+XmF -,OE^D_rdleW%Ph -BF'u#1$,K0h9WI!GtBn%-H`bfM_ZcpFs\(LHh3'HM/elKaBi'4S^sLI9Vh&LK9F`/ -#]2s%?3>Zsgl[c;RXFSL3MCG5jhm^%YB*cL-,XNR -eQ.MBrcG3!I!)K4FSWVPb(&BIA`u,D>q-&?t&sq*eW"Z/'?i'3T!7h>Ko'\52GP2*MJno#gk;MpLkWqtqh0#_*$Y -gC)#@~> endstream endobj 27 0 obj [/Indexed/DeviceRGB 255 28 0 R] endobj 28 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 21 0 obj <> endobj 29 0 obj [/View/Design] endobj 30 0 obj <>>> endobj 25 0 obj <> endobj 24 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.0.0 %%For: (Josef Glatz) () %%Title: (ExtensionIcons.ai) %%CreationDate: 04.11.16 19:31 %%Canvassize: 16383 %%BoundingBox: 0 0 322 322 %%HiResBoundingBox: 0 0 321.945007280856 321.945007324219 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 223 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Passermarken]) %AI3_Cropmarks: 0 0 321.945007324219 321.945007324219 %AI3_TemplateBox: 161.5 160.445007324219 161.5 160.445007324219 %AI3_TileBox: -118.527496337891 -219.027496337891 440.472503662109 563.972503662109 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: -51.1749582243028 391.524407184041 1.41425260068127 1428 847 18 0 0 6 43 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: -51.1749582243028 391.524407184041 1.41425260068127 1428 847 18 0 0 6 43 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:-318 -320.054992675781 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 33 0 obj <>stream -%%BoundingBox: 0 0 322 322 %%HiResBoundingBox: 0 0 321.945007280856 321.945007324219 %AI7_Thumbnail: 128 128 8 %%BeginData: 19800 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD36FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FD36FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD34FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD36FFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFA8FD32FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD30FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD2EFFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD2EFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFA8FD2CFFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD2CFFA8FFA8FFA8FFA8FD39FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD2AFFA8FFA8FFA8FFA8FFA8FD39FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD2AFFA8FFFFFF %A8FD3BFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD1BFFAFFF %AFFD0AFFA8FFA8FFA8FFA8FFA8FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FD15FFA9855A6136615A6184FD08FFA8FFA8FF %A8FFA8FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FD13FFA96136615A615A615A615AAFFD05FFA8FFA8FFA8FFA8FFA8 %FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FD11FF8461366036615A6036615A603685FD05FFA8FFFFFFA8FFA8FD39FF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD %0FFF7E3660615A615A615A615A615A615AAFFFFFFFA8FFA8FFA8FFA8FD3B %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FD0DFFA82F06355A615A615A615A615A615A615AFD04FFA8FFA8FFA8FFA8 %FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FD0BFFA8532E2F2E355A615A615A615A615A615A6185FFFFA8FF %A8FFA8FFA8FFA8FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FD08FF53062F2E2F062F36615A615A6036 %615A603685FD05FFA8FFFFFFA8FD3BFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD06FF5A062F2F2F2E2F2F %36368560615A615A615A6160FFFFA8FFA8FFA8FFA8FFA8FD39FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD04FF84062F2E2F2E2F2E360D302F615A615A615A615A61FFFFFFA8FF %A8FFA8FFA8FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFA8062F2E2F2E2F2E360D363036 %2F6160615A615A615AFFFFA8FFA8FFA8FFA8FFA8FD39FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %A82E2F282F2E2F282F0D360D360D300D5A5A6036615A61FFFFFFA8FFFFFF %A8FFA8FD39FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FD05FF2F2F2E2F2F2F2E3536362F36303630362F5A %60615A6184FFFFA8FFA8FFA8FFA8FD3BFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF2F2F2E2F2E2F2E %2F0D360D360D360D362E2F2E5A5A6136AFFFFFFFA8FFA8FFA8FFA8FD39FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FF592F2E2F2E2F2E2F30360D3630360D362F2F2E2F2E593685 %FFFFFFA8FFA8FFA8FFA8FFA8FD39FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF592F2E2F062F2E2F0D360D %360D360D360D2F2E2F062F062FA9FD06FFA8FFFFFFA8FD06FF7D527D5259 %527D5259527D5259527D5259527D5259527D5259527D5259527D5259527D %5259527D525952A8FD0AFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFF7E2F2E2F2E2F2E2F2F3630362F363036FD %042F2E2F2E2F84FD04FFA8FFA8FFA8FFA8FFA8FD04FF7E00270527052705 %270527052705270527052705270527052705270527052705270527052705 %270527052705A8FD08FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA82F062F2E2F2E2F2F360D360D360D360D2F %2E2F2E2F2E2F7EFD06FFA8FFA8FFA8FFA8FD05FF7D272728272827282728 %272827282728272827282728272827282728272827282728272827282728 %27282727A8FD07FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8592E2F2E2F2E2F2F3630360D3630360D2F2E2F %2E2F2E2F59FD06FFA8FFA8FFA8FFA8FFA8FD05FF52522852285228522852 %285228522852285228522852285228522852285228522852285228522852 %275253FD09FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA859062F2E2F062F2E360D360D360D360D2F282F2E2F282F %53FD08FFA8FFFFFFA8FFA8FD39FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFF7E0C2F2F2F2E2F2F36303630362F36 %36352E2F2F2F2E2F2FFD08FFA8FFA8FFA8FFA8FD3BFFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA884062F2E2F2E2F2E36 %0D360D360D360D2F2E2F2E2F2E2F2EFD0AFFA8FFA8FFA8FFA8FD3BFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFA80C2F2E2F %2E2F2E360D3630360D3630362E2F2E2F2E2F2EA9FD09FFA8FFA8FFA8FFA8 %FFA8FD54FFAF2E2F282F2E2F282F0D360D360D360D362E2F062F2E2F0684 %FD0DFFA8FFFFFFA8FD55FF2F2F2E2F2F2F2E3536362F36303630362F2F2E %2F2F2F0684FD0BFFA8FFA8FFA8FFA8FFA8FD53FF532F2E2F2E2F2E2F0D36 %0D360D360D362E2F2E2F2E2F0659FD0DFFA8FFA8FFA8FFA8FD53FF592F2E %2F2E2F2E2F2F360D3630360D362F2F2E2F2E2F0C59FD0DFFA8FFA8FFA8FF %A8FFA8FD51FF7D2F2E2F062F2E2F0D360D360D360D360D2F2E2F062F062F %A8FD0EFFA8FFFFFFA8FFA8FD51FFA82F2E2F2EFD042F3630362F3630362F %2F2E2F2E2F2E2FA8FD0EFFA8FFA8FFA8FFA8FD07FF522E2728272E272827 %2E2728272E2728272E2728272E2728272E2728272E2728272E2728272E27 %28272E2728272E2728272E2728272E2728272E7DFD0FFFA82F062F2E2F2E %2F2F360D360D360D360D2F2E2F2E2F2E2F7EFD10FFA8FFA8FFA8FFA8FD05 %FF7D27272827282728272827282728272827282728272827282728272827 %282728272827282728272827282728272827282728272827282728272827 %28A8FD0EFF592E2F2E2F2E2F2F3630360D3630360D2F2E2F2E2F2E2F59FD %10FFA8FFA8FFA8FFA8FFA8FD04FF7E002705270527052705270527052705 %270527052705270527052705270527052705270527052705270527052705 %2705270527052705270527052727FD0EFF59062F2E2F062F2E360D360D36 %0D360D2F282F2E2F282F2FFD14FFA8FFFFFFA8FD06FF7D527D5259527D52 %59527D5259527D5259527D5259527D5259527D5259527D5259527D525952 %7D5259527D5259527D5259527D5259527D525952A8FD0DFF840C2F2F2F2E %2F2F36303630362F3636352E2F2F2F2E2F2FFD12FFA8FFA8FFA8FFA8FFA8 %FD4CFFA8062F2E2F2E2F2E360D360D360D360D352E2F2E2F2E2F2EAFFD13 %FFA8FFA8FFA8FFA8FD4CFFA92E2F2E2F2E2F2E360D3630360D3630362E2F %2E2F2E2F2EA8FD13FFA8FFA8FFA8FFA8FFA8FD4BFF2E2E282F2E2F282F0D %360D360D360D362E2F062F2E2F0684FD15FFA8FFFFFFA8FFA8FD4BFF532F %2E2F2F2F2E3530362F36303630362F2F2E2F2F2F0C7EFD15FFA8FFA8FFA8 %FFA8FD4BFF532F2E2F2E2F2E2F0D360D360D360D360D2F2E2F2E2F0653A8 %FD16FFA8FFA8FFA8FFA8FD49FF7E2F2E2F2E2F2E2F2F360D3630360D362F %2F2E2F2E2F2E59A8FD16FFA8FFA8FFA8FFA8FFA8FD47FF7E2F2E2F062F2E %2F0D360D360D360D360D2F2E2F062F0C2F7EFFA8FD18FFA8FFFFFFA8FD47 %FFA82F2E2F2EFD042F3630362F3630362F2F2E2F2E2F2E2F7EFFA8FD16FF %A8FFA8FFA8FFA8FFA8FD06FFA8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8 %A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA82F062F2E2F2E2F2F360D360D360D %360D2F2E2F2E2F2E2F59FFA8FFA8FD16FFA8FFA8FFA8FFA8FD05FFA85227 %2E272E272E272E272E272E272E272E272E272E272E272E272E272E272E27 %2E272E272E272E272E272E272E272E272E272E272E272E272E272E272E27 %28272F2E2F2E2F2E2F2F3630360D3630360D2F2E2F2E2F2E2F53FFFFFFA8 %FD16FFA8FFA8FFA8FFA8FFA8FD04FF7DF827272705272727052727270527 %272705272727052727270527272705272727052727270527272705272727 %052727270527272705272727052727270527272E062F2E2F062F2E360D36 %0D360D360D2F282F2E2F282F2FFFA8FFA8FFA8FD16FFA8FFFFFFA8FFA8FD %05FF7DFD0427282727272827272728272727282727272827272728272727 %282727272827272728272727282727272827272728272727282727272827 %272728272EFD042F2E2F2F36303630362F3636352E2F2F2F2E2F2FAFFD04 %FFA8FD16FFA8FFA8FFA8FFA8FD07FF7D7D537D527D537D527D537D527D53 %7D527D537D527D537D527D537D527D537D527D537D527D537D527D537D52 %7D537D527D537D527D537D527D537D53532E2F2E2F2E2F2E360D360D360D %360D352E2F2E2F2E2F06A8CFFFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD43 %FF2F2F2E2F2E2F2E350D3630360D3630362E2F2E2F2E2F2E84CFFFA8FFA8 %FFA8FD16FFA8FFA8FFA8FFA8FFA8FD41FF2E2E282F2E2F282F0D360D360D %360D362E2F062F2E2F067ECAFFA8FFA8FFA8FFA8FD18FFA8FFFFFFA8FD41 %FF592F2E2F2F2F2E3530362F36303630362F2F2E2F2F2F0C5AFFFFA8FFFF %FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD3FFF592F2E2F2E2F2E2F0D360D %360D360D360D2F2E2F2E2F0653A8FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8 %FFA8FFA8FD3FFF7E2F2E2F2E2F2E2F2F360D3630360D362F2F2E2F2E2F2E %2FA9FFFFFFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD3DFF842F2E %2F062F2E2F0D360D360D360D360D2F2E2F062F0C2E84FFFFFFA8FFA8FFA8 %FFA8FFA8FD16FFA8FFFFFFA8FFA8FD3DFFA82F2E2F2EFD042F3630362F36 %30362F2F2E2F2E2F2F2F7EFD05FFA8FFA8FFFFFFA8FD16FFA8FFA8FFA8FF %A8FD3DFFAF2F062F2E2F2E2F2F360D360D360D360D2F2E2F2E2F2E2F59FD %05FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD07FFFD35A8592E2F %2E2F2E2F2F3630360D3630360D2F2E2F2E2F2E2F53FD07FFA8FFA8FFA8FF %A8FD16FFA8FFA8FFA8FFA8FFA8FD04FFA827270527272705272727052727 %270527272705272727052727270527272705272727052727270527272705 %272727052727270527272E062F2E2F062F2E360D360D360D360D2F282F2E %2F282F2EFD07FFA8FFA8FFA8FFA8FFA8FD18FFA8FFFFFFA8FD05FF7D2727 %2E272E272E272E272E272E272E272E272E272E272E272E272E272E272E27 %2E272E272E272E272E272E272E272E272E272E272E2E2F2F2F2E2F2F3630 %3630362F3636362E2F2F2F2E2F2FFD09FFA8FFFFFFA8FFA8FD16FFA8FFA8 %FFA8FFA8FFA8FD04FFA80527002705270027052700270527002705270027 %052700270527002705270027052700270527002705270027052700270527 %052E2E2F2E2F2E2F2E350D360D360D360D362E2F2E2F2E2F06A8FD08FFA8 %FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD06FFA87D7D7D7E7D7D7D7E %7D7D7D7E7D7D7D7E7D7D7D7E7D7D7D7E7D7D7D7E7D7D7D7E7D7D7D7E7D7D %7D7E7D7D7D7E7D7D7D7E7D7D2E2F2E2F2E2F2E350D3630360D3630362E2F %2E2F2E2F2E84FD0AFFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD37 %FF532F062F2E2F282F0D360D360D360D362E2F062F2E2F067EFD0AFFA8FF %A8FFA8FFA8FFA8FD16FFA8FFFFFFA8FFA8FD37FF592F2E2F2F2F2E353036 %2F36303630362F2F2E2F2F2F0C5AFD0CFFA8FFA8FFFFFFA8FD16FFA8FFA8 %FFA8FFA8FD37FF592F2E2F2E2F2E2F0D360D360D360D360D2F2E2F2E2F06 %2FA8FD0BFFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD35FF842F2E %2F2E2F2E2F2F360D3630360D362F2F2E2F2E2F2E2FA8FD0DFFA8FFA8FFA8 %FFA8FD16FFA8FFA8FFA8FFA8FFA8FD33FF842F062F062F2E2F0D360D360D %360D360D2F2E2F062F2E2E7EFD0DFFA8FFA8FFA8FFA8FFA8FD18FFA8FFFF %FFA8FD33FFA9592E2F2EFD042F3630362F3630362F2F2E2F2E2F2F2F7EFD %0FFFA8FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD32FF53062F2E2F2E %2F2F360D360D360D360D2F2E2F2E2F2E2F59FD0FFFA8FFA8FFA8FFA8FFA8 %FD16FFA8FFA8FFA8FFA8FD32FF7E0C2F2E2F2E2F2F3630360D3630360D35 %2E2F2E2F2E2F59FD11FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD %05FFA8847D847DA87D847DA87D847DA87D847DA87D847DA87D847DA87D84 %7DA87D847DA87D847DA87D847DA87D59062F2E2F062F2E300D360D360D36 %0D2F282F2E2F062F2E7D7DA87DA8FD0CFFA8FFA8FFA8FFA8FFA8FD16FFA8 %FFFFFFA8FFA8FD05FFA82E27282728272827282728272827282728272827 %282728272827282728272827282728272827282728272E2E2F2F2F2E2F2E %36303630362F3636362E2F2F2F2E2F2F2E27282727057EFD0CFFA8FFA8FF %FFFFA8FD16FFA8FFA8FFA8FFA8FD06FF7DF8282727272827272728272727 %282727272827272728272727282727272827272728272727282727272E2E %2F2E2F2E2F2E350D360D360D360D362E2F2E2F2E2F2E2E27272728272728 %FD0BFFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD05FFA828052827 %272728272727282727272827272728272727282727272827272728272727 %2827272728272E2E2F2E2F2E2F2E2F0D3630360D3630362E2F2E2F2E2F2E %2E272827272728277EFD0CFFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FF %A8FD05FFA87E7DA87D847DA87D847DA87D847DA87D847DA87D847DA87D84 %7DA87D847DA87D847DA87D847D842E2F062F2E2F282F0D360D360D360D36 %2E2F062F2E2F06597D847DA87D847DA8FD0CFFA8FFA8FFA8FFA8FFA8FD18 %FFA8FFFFFFA8FD2DFF7E2F2E2F2F2F2E3530362F3630362F362F2F2E2F2F %2F2E59FD16FFA8FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD2BFF7D2F %2E2F2E2F2E2F0D360D360D360D360D2F2E2F2E2F0C2FA8FD15FFA8FFA8FF %A8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD2BFF842F2E2F2E2F2E2F2F360D36 %30360D362F2F2E2F2E2F2E2FA8FD17FFA8FFA8FFA8FFA8FD16FFA8FFA8FF %A8FFA8FFA8FD29FFA82F062F062F2E2F0D360D360D360D360D2F2E2F062F %2E2E7DFD17FFA8FFA8FFA8FFA8FFA8FD16FFA8FFFFFFA8FFA8FD2AFF592E %2F2EFD042F3630362F3630362F2F2E2F2E2F2F2F59FD19FFA8FFA8FFFFFF %A8FD16FFA8FFA8FFA8FFA8FD2AFF59062F2E2F2E2F2F360D360D360D360D %2F2E2F2E2F2E2F53FD19FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8 %FD28FF7E0C2F2E2F2E2F2E3630360D3630360D352E2F2E2F2E2F2FFD1BFF %A8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD26FF84062F2E2F062F2E %2F0D360D360D360D2F282F2E2F062F2FFD1BFFA8FFA8FFA8FFA8FFA8FD18 %FFA8FFFFFFA8FD06FFA87D847D7E7D847D7E7D847D7E7D847D7E7D847D7E %7D847D7E7D847D7E7D847D7E2E2F2F2F2E2F2E36303630362F3636362E2F %2F2F2E2F2E597D847D7E7D847D7E7D847D7E7D847D7E7D847D7E7DFD07FF %A8FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD04FFA805270027052700 %27052700270527002705270027052700270527002705270027062F2E2F2E %2F282F0D360D360D360D362E2F2E2F2E2F2E2E2727002705270027052700 %270527002705270027052728FD05FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8 %FFA8FFA8FD05FF7D272728272E2728272E2728272E2728272E2728272E27 %28272E2728272E272E2E2F2E2F2E2F2E2F0D3630360D3630362E2F2E2F2E %2F2F2E272E2728272E2728272E2728272E2728272E2728272E2728A8FD05 %FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD04FFA8FD0427052727 %2705272727052727270527272705272727052727270528062F062F2E2F28 %2F0D360D360D360D362E2F062F2E2F062E27270527272705272727052727 %270527272705272727052752FD05FFA8FFA8FFA8FFA8FFA8FD16FFA8FFFF %FFA8FFA8FD07FFFD1BA8AF7D592E2F2F2F2E2F30362F3630362F362F2F2E %2F2F2F2E59FD19A8FD07FFA8FFA8FFFFFFA8FD16FFA8FFA8FFA8FFA8FD24 %FFC9A059062F2E2F0D360D360D360D360D2F2E2F2E2F2E2FA8FD1FFFA8FF %A8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD23FFA0C9A77D0C2F2F360D36 %30360D362F2F2E2F2E2F2E2FA8FD21FFA8FFA8FFA8FFA8FD16FFA8FFA8FF %A8FFA8FFA8FD21FFA7A0A0A7A07D0D360D360D360D360D2F2E2F062F2E2E %7DFD21FFA8FFA8FFA8FFA8FFA8FD18FFA8FFFFFFA8FD22FFA7A0A7A7A7A6 %A736362F3630362F352E2F2E2F2F2F59FD23FFA8FFFFFFA8FFA8FD16FFA8 %FFA8FFA8FFA8FFA8FD21FFA0A7A0A7A0A7A0A72F0E0D360D2F282F2E2F2E %2F2FFD23FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD21FFA7A7A1 %A7A0A7A1A7A0A759360D352E2F2E2F2E2F2FFD25FFA8FFA8FFA8FFA8FD16 %FFA8FFA8FFA8FFA8FFA8FD20FFA77CA7A0A7A0A7A0A7A0A7592F062F2E2F %282F2EA8FD24FFA8FFA8FFA8FFA8FFA8FD16FFA8FFFFFFA8FFA8FD21FFA0 %A7A7A7A0A7A7A7A0A7A7C97C2F2F2F2E2F2EA8FD26FFA8FFA8FFFFFFA8FD %16FFA8FFA8FFA8FFA8FD07FF7D7D537D527D537D527D537D527D537D527D %537D527D537D527D7CA7A0A7A0A7A0A7A0A7A0A7A0A77C2F0C2F0684FD26 %FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD05FF7D270527272705 %27272705272727052727270527272705FD0427A7A7A7A0A7A1A7A0A7A1A7 %A0A7A1C9A059065AFD28FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8 %FD04FF7DF827052727270527272705272727052727270527272705270552 %A0A7A0A7A0A7A0A7A0A7A0A7A0A7A0A77C7DA9FD27FFA8FFA8FFA8FFA8FF %A8FD18FFA8FFFFFFA8FD05FFA85227522852275228522752285227522852 %275228522752282E7CC9A7A7A0A7A7A7A0A7A7A7A0A7A1A7A1CFFD2AFFA8 %FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD07FFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFA8A7A0A7A0A7A0A7A0A7A0A7A0A7A0A7A7 %FD2BFFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD1EFFCFA0A7A0A7 %A1A7A0A7A1A7A0A7A0C9CAFD2DFFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FF %A8FFA8FD1DFFA1A7A0A7A0A7A0A7A0A7A0A0A0CFFD2EFFA8FFA8FFA8FFA8 %FFA8FD16FFA8FFFFFFA8FFA8FD1DFFCFA7A1A7A0A7A7A7A0A7A0A7A8FD31 %FFA8FFA8FFFFFFA8FD16FFA8FFA8FFA8FFA8FD1EFFCAA0A7A0A7A0A7A0A7 %A0CACFFD31FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FD1DFFA7A7 %A0A7A1A7A0A7A7FD35FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FD %1BFFA8A7A0A7A0A7A0A7A8FD35FFA8FFA8FFA8FFA8FFA8FD18FFA8FFFFFF %A8FD1CFF7D27FD04A7CFFD38FFA8FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8 %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF27 %00F87CA7FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFF7D2752A8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD16 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD16FFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FD16FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD16FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FD18FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFA8FD16FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FD16FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD16 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD12FFFF %%EndData endstream endobj 34 0 obj <>stream -%AI12_CompressedDataxܽz(|^w&C79 1`lp6`r7LXi3n/s>3xVWIR%UIvKOccf^$aK&Ws}:Rlx̏Fz|4$n -|ysu5:evaE'Sl7pho~Q3HpxcDQx4 -f -ۿP0j6AlQwus!33z.WB&\V -HߝKngI&s)dKaF9fJيXL  -dWh<tsmj|11#57w4緶 ubj -F`  (Wf-0[+I} -t╴&V,'#3\Pt8p~D/U1?@3eฎLa ~[L1"=4G"0ev^mcNb|r4͓ ZM@MP6As)s{GOjLjR`vLȶS -6`͘PoC¬%1C;Eipc\G4 [_i/J ]_+BkCRM 7nvd&y)ˎ} ?XZL}@<'UƵ -cLk@KwdNcT.1 ݪ g=I=#;}?@=-]XD#qa?S&/ <#rjTsL#ڄZAznJVDIPaPu4^FF#PD9#l9ȡtF,坘4$CkY2 $1ʣ #AQTMW_503$dkCs %ۉ҂ڭF?%3 3t_6 `vL<>ĭ|[0vM6 ԭ֖Z1AgƅdtBDe81sfy:Fy\P[Y`"©Z.57Gp m/bBa7qi皣8v6 -)'R2_W+ef_A7P SH)Z)Wl7ScT$upf,sXlBr+A;6ز w0sEjI^;_fɾ U+$҂?PykHu|ϵTndN-9%zxK916T݆XA"] - G[ীz8,k -(5@(p:jGl9R5m+eddCq|#P^]<,hEn7WJd~ ծr1'Q_/i z Ȗ4ZPh+K 9k-!8#I^K1"]\vv3%ՐpP0A"%7HB^ˀ -L9vR՟[APV(nqL j1pVΘ٢Vn5!o6Q%\Uh(P#9$3X͂ !:_;v7j4XBfUl!9BDC"fBjN `2kFAR-J2\Cn7ߒbJVnJ]$LMfFa6B6h UŠgqю |GU>g#Re# n[73=r= t+zm,(.F~}dygC_cUn)yl}[}.up@k >KiRmϺ6Mį3)O"<fvʥ!=}c{Hb돻E,~ByrR=$A [A^C4(F`~;KV֚AiikٛP`^Qk&V~yҽ{28~" (u[ᔼG_HLaMi}(Fۊ3 !(|&&;6gOf>_ y[:`7̓ɔRvvyK_h&xO4*s;;ڰFE,XCpt以_O'ؗG#<'ZS*t393 ~wHsC+O밸R?kRq X=jkڠi}0ٓ2(nth -NiaAuy*L`jVȅ ӕS&s%pbى9';J`,B:7=8&٥+Ο?;"&GNUG˲ -@ %L<j} fug2KM^ *Vm}qBnJKQ4݇HLThrE-X4 N9ЪZT=dF5KX!{!k=/BZ -|܅t]Xmz|wf >+{3w>o QOsNKKWQn,jP%7{4_/ %nwowWߕ/$KݢNl#!M.kλ+i$O';9ykW}yҵ4)м-09vS1:GNl ק)}*nbퟙCyW4v_3S=E|6lwo 5 #'3;k:YQvЃhl?+ # R|GP)=[L˃BLv~\|zV]@AaZ.zvI@TFB`9ʣ?)< JawqբtBXrb*ysHsM SKJ>m"P8e8 -v&=ul -x#Ph`S/BM #OC|z)s= >T-1nJHDcB[/ZU滃=!+0r-%d*A_t2/ѴOAeO|c4f4'QkH9*BO2˦H, ;56'(CYOV,n&f̽Z_f0W,X)CKKZ3We/]\Yڢl]9q5s8=(5p@!ooJO9b $iwe?n\o7Pz>;Ƴ.&[b3GI0Vm<^2'V- ^m<߰cざQǰlK88_Kd1 :Ӊ%vWw}E@䝳NZxBƅܻl< + - .bL/c# 75ɽUzivS%_g&us ZXEg`%Jե9 c%{nƉ'~m*>iBrlˤ} -^,  @eX#,% <7 -nZ?af,Io|; cw,9]08M";Z~n*_nk9~u+-nc}ṕatط;=³^C 3lo8na͝UR.r,CVr$91ɇ,B²o4D.+ -cý/E4_Dt{"9VqaW6yڕeñr&M=P_|J[/]3tKn>`4h@tX&~V#psS\Ph"'>[fWoX&jNJ:}|4]',9oJŚok^"I`Tk -+`;H>?/;,}i9w@Fmv@DYy,6 ($ 0îknoKDi<I - -Wy>ag8m 0C\:r[H͟vfvSګP6Uhr(ߛnhlQ# ǻNeh~ -[wq3I:s} %ڦwG\톅\v8p`gYi"]fa4ӯ(\8IWJ[nhvOs7a4Q{$pRėksYjQn8<߉T>FCȺR@w< z&~IG~~;rKX}6~;: (s 1Hb/wD3ՠbR5^'˼$Q%]:z$&|%f -B,ˍf pQk.Hi3֞LZ>7MP&Oe -Fwz?ݣv&z,S_.O7zSnfa tpg ss%5c3=K/*yǕre^ L_o[ -R.lZ7K:]W,i:~_a@k\pRɆNg FwhbUlo ,YKՌ&F"Jv'ŁMU+t.?x+/*=Rr;]z6Q^vKgvVZd i( y _ - -\5AtM)O"wˑu*`6s"!@F - 'l|EJUc{]\L;E` +OdlctQ -G"sw?}wcլ|V hYG(/IOF* A<\Xa}Kx҆Ÿ<@7;p˷C/myrNaT^@mBx9F{/x,[cϡR*r.سw?R~:go""!X ;9&wY$z?`g2J2aOhb#(ƩhzrJI,:m}xdONn28r -+ޭ 6`^>G7y+ߟ9Lp ȷv'ӍFh6{(N ~H -R7D`{x:@=O_ݗX>^bm_E!KHWvҏ;ALHwKE`|[q~OByvr $Ԩ]YR"( P{j-ʿKl7U"חi}yze$L:I)<\ئĢ C6(Y! f%7F;;s8(8+}.Vh_)zsJ Byn+WWǂ֊Q[X ez[QyM b*(L|<7YK Q`1_SMX -c"Vc=6F #lB4iԕI =O;.UdjΖx)W|w>9 W)N+SEjl ;o4$Ca*HVe2$gO-01/:@yJ%P }2",(2%m1hJ)E7J f˟` <@f a -uF'P[eJN(,&B)L({Vl~'yq x|s2=x>P{(Yw#OfA];:B;/hOf w1ٱxJw}'B]a*Hk(RZOߙP!`*SS6$&;Ify>HPx-l^`A߭&80[7 ` $on}qgQoew8X\:ph.6wfzX~-wl4Y [ļؤ@7J2&mI~P3~d[c{ ~m$OWvT=@jg &5IXR]6ZJHEiqm|A9`+4Z8a/呦on)mCJ6@Hy*X64jS? yV吚Me?-rcŪmS~P" 1 C0rpBא=rpۓYM2 Җ!p7V]!`q?+)ұF桨tU=yU, )#ȃ՛e9%&?Ak|8D>AZ#hazI|F򥄴=? O~Ƕ,NRD :!L ]ۖkF<\NY=f3f/baV^cG _*<"ްzs@z_vOkQG)??e~>- V~ıOjG[?%!YúdűǢ{YGߍ%+=B -/ؐA:$5hiБq#mbd"hd]Bj{{ =d=ZwH }.^zX R?BxTc-$H=MF>ܻ ?~#![#A?o ZL:V2OlYHo7Y`&l.ވ0*."ۯm.y=sh{2ҭ`n=E;IF7Kn7o&XP|O/TB5Lnz6٠OJ)Xt3ގnk~'$_)mۑVscN:S3ei骬usfݶ,k=rO§5xEm{w΄YeQq͂|}<.ㇿU,RQAkqi  $o]!2\k`5p#ߎP&w`IsdM;>"gQez}-TE@HcG)^œȍ" -;6c#@:H)h ~HB޶~gVW""R@޻RG7֐wR@TM -xwPD -}<Ҵ/bmӡH`d("HW4DE>1`VoI:7WI(aZF 1"Rv +G @Np#.x jfJ# ~Q2{ Qb}2"{v"eHsdŞz⚗ pY/-:sG7Kꞑ|+ }nG Kjuiudg:5<:>x,V#6@%"zXhD'9t=cJEU{܊テAO\ J8TX (h]݅ߊ0=̞qzbΪ~nOy` \9, gK,z\a>WYpP,a]{o%iQ@@, a0E[;'!?_˪):vv8@݈O:]"KAVHVɖ W35gt˟TU<'g<>Ոuec%qX%%.qY'M]R4pχd= qt;{!edh俇Y Zx#j9$֕epV=#} Yd&ab}QyyR':Q 4MܑӀMoJ+K>{ëA6nCٗC#4 ^REx\C3uJƉlyN5Y*O1֧*/q ʂf3ϲem8ElYYfoQ\uWx:-k[!ӥgT&EcB©tv^GPx78 -B[*p.ة߰S&T.tTrSloQavEuƽ(uո+!") 7(Sa[UQK׉D+ar{yѶ^.h<v5K-%+T>+H44عp%I?^ odWx$4Gl - &ыBIl&ހ=; -nB2ָZI]2=V=ۯޫNw/-8os"2EcpTS $P2US$^U\ -L-%? ~SU&LGFJA }6: E=E).OPWTRMzR1IwKRWNJ{l™tNi*Rnݍ`h\) _Nđ+%kw) 9L"WjR,cAh!fز4pyރdTŠ4ҫ#l\6 -"S+Y/.vɄIOҪT)]g4:zUR.MQɁqKsRr+]M9UqS=$T- 1^}Jd% ëWzAiA1IL:gڲlm\:^Z;BF/[ۂ՜YMؕ;sAh 3"irҚbz=K))*ۓ4׹(ʟDg -%5V7SGBw5N(?R/Ia6꠨ cu8+ߺdc3#1OaX:,;\mNt)Ka -4C -Y)qDY+FdxL!"sfDF,a:-FB`<%02#2p:_0*9'5j.HOtYR0ЪCU3'Q/̰kȅtę*:dtr! t^<4d - -ǔKLuukiJdQӕ= sIKjA5뤉z->*W͇3ጟwN=^U KQtY\XY*ήQ3Xzf=|ᴥ58R p!Nf^~ 'Co0ulWCws߭V -YB`D򒿷ՕU鎕PxolQH`Cߒ#4pČ{Âg"Z^L_.&3|ZEf([FzFEf,00Vzԏ5*R!kTzkTB8WB(ҊTc^OkQiFeYoq-ٶi)UKs8Sڥp: KL;uI)IFępꆡbD$AB3bN-ؘ:l 0]'u)Ni. -O -)&:bXy/I{s9_W*1_9ЧiO6*;9$ 23O7c*L J7K2עb?) c}%21'q5JY|s[9GnӃ0,@iVMŽL")v+#%ߪvU_BTzYCqHniVCa}S +"Sk -պ?+jugk -m+I̧JvZ-2{UI lۄRC%'+}b<)3-S ? ޱEdTg3*c r\IթYj9Ac=4V=gäF!=V{N8w͜+7YMrr -G8t]/S$Ôt8"20U};99P5E6̹|yaNG()Ժ$%ɔ*]D/X/UB">UXqj:Jw.;3j:{jtϔas"p#vK -rC*G3R(Ms87V UtKij?*HhH/{kJ)Ҷ)wo\~gzOL })v2Tt@ľɼvb̫I0~XmȨ΢$8Lg$ j% *MqٝziIDKSTkܢ2K.oÜtVVIA3RN4Ui:RVih'pK#WNgYt$OxPPZgJ&$qU3uueO}F* a^*v1C)ز*ȲD*6w:5 ̹^'t:zFvW9rEyT1 VÂ;;P `T9=yHS ON]XIKur}FPn]LiU]o%SW 9@MdTָS: -Q@ѥJ=Esv)W4(-3j5_ -l| O+/Ucb;(sih"NʅYC7 UzkEpikEָ*@g}d]Uzk5o`WaF=l(Uzk[rR@>J@7*ݛQI/sE|QR>(s)-a|KG|Fp_'=KퟹOKd-%tΨ7gCP'Q}6^?EgyyuΆuPWOV?B$u' -IrSe<[Qؽ~]|%seqKW!,WO=___~z+/ON*fd9{=9EfO}&ҮT#ί^?um7 Z^?]\xYVy]y(Vݱ2pƽ~)t{ԓ -7awBJѭ~"ةѺOV?!ZUi)dto3S7d;^?(^7~:t~BV?$Ǯp~&e|UY o+Ǵ{.OV?c|{? ^?uk}{o^ë'{ t~rD~fwy1{.{J (rkx_bONTD)a$.J 21TNoy`'"MmR$V-Gx[&b{sc Lw9>/nor6{[B1-:o~EIoIKY ˗}wȾ$~lyW{m7Ler~Yf?dn}>f~I43,~W{tȑ*FLjM 'I_z_1R.{7@R[x\*+.M D~b'y|y/G,D0-IlՑΝ#Ѳ݌mCóu5La-=[j9zwGA5|۵c6b -~kmN|ZE>ēi])59Jd4o罵V&CTl[~x-n|;vNoς/te 3rDʯM*x}zʽZaѮv3><',pp\;Q$_cnT N}yWIg_*Ca~8k:u̇&;цK(qq<Mτ{>܃8`=/xt {qƏ^Yx= -A`kJGh9%H4:$QW`ѣ!`cyfQGMP"<Ƃ[>EvBAb&_GsGXBx("\?yTXŭq]DO:3l0Q^}K/<+`UAmF736wf60?nz> ?T21]GB"Yu`Tqtx܁y'id+1YZ/Y,.A8},o :4lxߓR3nEfZȋ!䶼TO$ -߇Y --OYҟ`][~T7ξ7 gȕg'~[, G|SGZ>Z\ǰp.Y<V, kZ7&;}x{_e/A=ehwKxhIuק͟(g>VZBiɉ8L:ý&x0]0?3dq[`vў4hl̪Ƹ? (sq|Ɉ̝p耻~$<je~*dL"FVFBjDRv|h#Lg13 V7 -8-Ayصl;~{vڂe XעQx3uP~>m)Yz@s?]< vڍd* [{Tu8?LJ1{r@Gf5dG2T, GZ}>/ RZå_h>2L,HTٳ+"29Z},F0/f;%~m]Q̯ߟ~ 8˶EfxkxI#~Pz%UfЛXN1TV3sv@C6lRzwKUIsy;8Z!vqiI[f& Af~6ZQ¦M 3-Gm =b&OY30t+1{gdIKW@:Q.G&f.p6򵈅4ف,ukS%L~%[TWOmbԁ9sa>X,,? -%ud0j mgc_p]>scQa+MZrRCӧju8sd9S.r ̾tvʒyLha ˡ?|tQq\)X#.-rz|Ȼk>}xXj/ŷyocyvƉ,挰 ~a.[èҦ}VJwuQpBz{~sGB:f{b]AR>uw!lB ݹ|Xf)(0!pa=dt#dOgN*{xeKB% -5u끽cƲn\^[_90,݁Cy)zJ Y}Jp+\f{+)!9*wqv KNZV;ïŻ߽B5>ߤyt Y|?_X:!wU"n/v5eu.f}^j*֭U4>qݤ62\$az?9/P"J]3Є"LfZ eׯYMRL8qnc.3_]c@Z^g..y9w..c<|' f-aBǂB1aRz"y6( *|-R`^S*(yuCn6ֿbON]θςVq~κ$Ο__詞#_Ê~ B VEyf&sb9XWtbLVr3&u\211'*r -]P> J`a>ĺsaJ7f|K5ˇ"ѧ>%bN%Y]z%:òo% Xp+ա3I/%.S|~ՇHˋW}&uW}Ǯ1gggջcupO62\]q~!e<|-bf/3>Kb[;˄[sӤql9]XE#DY=pPD3cOK#Hh1OjZΞYI ,@XA:W2MRaR tgJ_0 (u,FȖXJiS|+KP&^N!W@ r% p"çR\ K&[J!WXzqN/U(6UʺyL/x3\+!1)<6 njK\J<4Qxf@/1D[)jd^p 5y}FF.K@l[}ryQ -Jk~F9 -uE0#.{s#t_m*j|l؂%XĜ9ZIvNX -?hKLGOWby7&;ݟbRZL[cGZ9hvjo3#2 .tА-Wr={ZR154)ZrPgLq,O# 9>\ה2uL _vr\9i;z=)0{'| 0A!bB'Q]֬Qg zP&;Tiz;_a&9&;pwdaAT+wd :iwe{ aSEhgy>HPx-l^`A߭&(')[V)Z+l?a -b~YM]ٱ䪢;֖]BYw0,ovp:O2\RV1I-Ok3̀yI-ZKʒAy3#x$(E}kAX\bjg< wn ]<`PЕ˟𶷁/8}}@= -ִ{xA",<6'$q7!g\DjWr[O,o8˿ݠ@1VC+kdGB?g:0K3o>n]0hM6 -f (~fjm}QA`DزN_[Y*3_$uq]*<:R9 -xaz*7a`jk 8z(k[D %40X#xi,KF#7x/:5qHt&nEoJh0b 1^]?, ;^t4u/:qon6Sr\CX,~*SNǕmVȔ?};Jhʢ5}v6n:vwtq򅉟l;nt\^mǭ⛚[7Gi;ntwvܺ;ڎ[7G;~M-ڎ[5ۗOqV{ߋΊ|UT߽⚧'3sIw}pky5bZ?qe;عT~LA\orU7_Zsy}\r}v\2&;o/G+sPeW{8 -thr+/'"OΦ|DM%Ԑqprnm^s8ÈGOF;{拯'l<˥zuߴ1f*cH{r(zLd|g5~<#| ˏˑo҇t]T,nMy`.򷑑f]YFߌMNdb>̏ƧWv -4=]mGDJZ`fouw&gSvl*/l?||r[Nl(dͦǧlRs2[܈>s)>u>,ӫV7-cwOFGO'ӳ2DY F+d1oGr%ڔLpdC"uU)jN6W^;6-m[ZpIF҄;=ѱ 80H䩠[!Ve +woWs?~s!7YW.aۘ' [/pGH;9dY2l# FHqI<߈hCָW jK$"Q(| RuFw2j tpǀIP A։qseXN `NW|[&@0Ѱ3`CE*ZN1iagWrkk+2!)m#dOb #2)`* -rK ++s*2ao=@R}M %*vѫ$ƅRbblEXrEf`X.D*k*m'- j(Ei8r VLVL -I !1:HʯQf1 l +1zOr=C]2   ׀Rb?@ۊDRfhR7y=pE*':bƂ ۛĩNWC] eJR5ѕE"YFW6ձ -]9פ\Pb WBR$.eP-)ݷ@ۊD ,' !0 -Mrw+3GQ Z#[OUj(S2 ,-*Łm+I5BكvhCaM-`AI3%=i8+:YJ9Y1eKG''],"u+M}t0OoaHoY:aRVwȍKPe0bs7>6aO@@L䜴.045=!}oB'$;)fͤ+XF.@,*5!]@\b @drXHN\k1;LX%P罓gZJ.[Jr'HؐlbsT;FV*BP7B-B$&xloa$! c6X`tZ -l`Pi G̯* NR0|&^d8 [vl3H[8Da>kOnZmIMV l - - 89󬞯97D # bI 26^|BNP + Dsv2t t! -ږ,G!"b$P*8j>;ֱ(+ <яԞ W0IuvP9nh]ցޔQQLS"WΠ(Gxr<Kʑm$k#g(ɹ&KZHca+$b6AC b.8>Ik:T*eITM]+N/ϕq神NMvv^&?|tv5mҌg3Y4gb>i^|+y_GqZ endstream endobj 5 0 obj <> endobj 14 0 obj [/View/Design] endobj 15 0 obj <>>> endobj 22 0 obj [21 0 R] endobj 35 0 obj <> endobj xref 0 36 0000000004 65535 f -0000000016 00000 n -0000000159 00000 n -0000021576 00000 n -0000000000 00000 f -0000073250 00000 n -0000000000 00000 f -0000021627 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000073320 00000 n -0000073351 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000024018 00000 n -0000073436 00000 n -0000021968 00000 n -0000024318 00000 n -0000024205 00000 n -0000022913 00000 n -0000023457 00000 n -0000023505 00000 n -0000024089 00000 n -0000024120 00000 n -0000024392 00000 n -0000024566 00000 n -0000026006 00000 n -0000046008 00000 n -0000073461 00000 n -trailer <]>> startxref 73602 %%EOF \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/AddConstant/AddConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/AddConstant/AddConstant.html deleted file mode 100644 index ed7c8ff..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/AddConstant/AddConstant.html +++ /dev/null @@ -1,50 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - - - - - -
    -
    - -
    -
    - - -
    - - -
    - - -
    - - {f:if(condition: '{lang} == \'default\'', then: 'en', else: '{lang}')} - - -
    -
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/DeleteConstant/DeleteConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/DeleteConstant/DeleteConstant.html deleted file mode 100644 index 5f80d17..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/DeleteConstant/DeleteConstant.html +++ /dev/null @@ -1,37 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - -
    - - - -
    -
    - - - -
    -
    - -
    -
    - - -

    {constantSelection}

    - -
    -
    -
    -
    -
    - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/EditConstant/EditConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/EditConstant/EditConstant.html deleted file mode 100644 index 5186c92..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/EditConstant/EditConstant.html +++ /dev/null @@ -1,60 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - -
    - - - -
    -
    - - - -
    -
    - -
    -
    - - -
    - - {f:if(condition: '{lang} == \'default\'', then: 'en', else: '{lang}')} - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/EditFile/EditFile.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/EditFile/EditFile.html deleted file mode 100644 index f3dde64..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/EditFile/EditFile.html +++ /dev/null @@ -1,134 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - - -
    - - - -
    - - -
    -
    - -
    -
    -
    - - - -
    -
    - -
    -
    -

    - {curConsts} / - {totalConsts} -

    - - - - - -
    - - {f:if(condition: '{languageSelection} == \'default\'', then: 'en', else: '{languageSelection}')}:{constKey} - - - - - - - - - - -

    - {constValue.default} -

    -
    -
    - -
    - - {f:if(condition: '{referenceLanguageSelection} == \'default\'', then: 'en', else: '{referenceLanguageSelection}')}:{constKey} - - - - - - - - - - -

    - {constValue.default} -

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/General/General.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/General/General.html deleted file mode 100644 index f33876d..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/General/General.html +++ /dev/null @@ -1,167 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - - - - - - -
    -
    - -
    -
    -

    - - [] - -

    - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - {f:if(condition: '{langKey} == \'default\'', then: 'en', else: '{langKey}')} - - - - - - - - - - - - - - - ( - - {info.numTranslated} - - - - - {info.numUnknown} - - - - - {info.numUntranslated} - - ) - {info.origin}
    -
    -
    - - -
    -
    - -
    -
    -
    -

    - -

    -
    - - -
    -
    - - -
    -
    -
    -

    - -

    -
    - -
    -
    -
    -
    - - -
    -
    - -
    -
    - -
    -

    - -

    -
    - - -
    -
    - - -
    -
    -
    - -
    -

    - -

    -
    - - -
    -
    - - -
    -
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/ManageBackups/ManageBackups.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/ManageBackups/ManageBackups.html deleted file mode 100644 index 2dc9bfe..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/ManageBackups/ManageBackups.html +++ /dev/null @@ -1,147 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - - - - -

    - -

    - -
    -
    - - - -

    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - {f:translate(key: 'function.backupMgr.deleteAll')} - - - {recoverLabelThead} - - {differenceLabelThead} -
    - {backup.date} - - - - - - {backup.langFile} - - - {f:translate(key: 'function.backupMgr.delete')} - - - - {f:translate(key: 'function.backupMgr.recover')} - - - - {f:translate(key: 'function.backupMgr.diff.diff')} - - [-][-]
    - - -
    - - - -

    - xyz -- -

    -

    - xyz -- -

    - - -
    - - {difference.legend} - -
      - -
    • -

      - {constant.label} -

      -
        -
      • - {constant.value} -
      • -
      -
    • -
      -
    -
    -
    -
    -
    -
    -
    - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/RenameConstant/RenameConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/RenameConstant/RenameConstant.html deleted file mode 100644 index 30197d2..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/RenameConstant/RenameConstant.html +++ /dev/null @@ -1,41 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} -{namespace core=TYPO3\CMS\Core\ViewHelpers} - - - - - -
    - - - -
    -
    - - - -
    -
    - -
    -
    - -

    -
    - - -
    -
    -
    -
    -
    -
    - - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/SearchConstant/SearchConstant.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/SearchConstant/SearchConstant.html deleted file mode 100644 index 7143dd7..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/SearchConstant/SearchConstant.html +++ /dev/null @@ -1,62 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - - - - - - - - -
    -
    - -
    -
    - - - -

    - - -

    - - -
    - - - - - -
    - - {f:if(condition: '{langKey} == \'default\'', then: 'en', else: '{langKey}')} - -
    - -
    - - {constantKey} - -
    -
    {constantLabel}
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - diff --git a/typo3conf/ext/lfeditor/Resources/Private/Templates/ViewTree/ViewTree.html b/typo3conf/ext/lfeditor/Resources/Private/Templates/ViewTree/ViewTree.html deleted file mode 100644 index f81f28e..0000000 --- a/typo3conf/ext/lfeditor/Resources/Private/Templates/ViewTree/ViewTree.html +++ /dev/null @@ -1,72 +0,0 @@ -{namespace lfe=SGalinski\Lfeditor\ViewHelpers} - - - - - -
    - - - -
    -
    - - - -
    -
    - -
    -
    - -

    - - -

    -
    - - - -

    - xyz -- -

    -

    - xyz -- -

    -

    - xyz -- -

    -
    - - - - - - - -
    -
    -
    -
    -
    -
    -
    - - - diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.png deleted file mode 100644 index 934ff3c..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.svg b/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.svg deleted file mode 100644 index 02cc90f..0000000 --- a/typo3conf/ext/lfeditor/Resources/Public/Icons/Extension.svg +++ /dev/null @@ -1 +0,0 @@ -Extension \ No newline at end of file diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/diff.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/diff.png deleted file mode 100644 index e50a37b..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/diff.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/garbage.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/garbage.png deleted file mode 100644 index ecb19be..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/garbage.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/join.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/join.png deleted file mode 100644 index 2842d3b..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/join.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/joinBottom.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/joinBottom.png deleted file mode 100644 index 39ea9c0..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/joinBottom.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/line.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/line.png deleted file mode 100644 index f8cb30c..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/line.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/recover.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/recover.png deleted file mode 100644 index 14b90ab..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/recover.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinus.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinus.png deleted file mode 100644 index 82da379..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinus.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinusBottom.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinusBottom.png deleted file mode 100644 index 0cf2a21..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/treeMinusBottom.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlus.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlus.png deleted file mode 100644 index a2750cb..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlus.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlusBottom.png b/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlusBottom.png deleted file mode 100644 index 8afd068..0000000 Binary files a/typo3conf/ext/lfeditor/Resources/Public/Icons/treePlusBottom.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/GeneralTable.js b/typo3conf/ext/lfeditor/Resources/Public/JavaScript/GeneralTable.js deleted file mode 100644 index 64107d3..0000000 --- a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/GeneralTable.js +++ /dev/null @@ -1,123 +0,0 @@ -/*************************************************************** - * 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! - ***************************************************************/ - -/** - * Indicates if untranslated languages are hidden. - * @type {boolean} - */ -var untranslatedAreHidden = false; - -/** - * Index of column which contains state of languages. - * @type {number} - */ -var STATE_COLUMN_INDEX = 1; - -/** - * Index of span element which contains number of translated constants. - * @type {number} - */ -var TRANSLATED_SPAN_INDEX = 1; - -/** - * Gets list of table rows. - * @returns {NodeList|*} - */ -function getTableRowElements() { - var tableElement = document.getElementById('tx-lfeditor-table'); - var tableBodyElement = tableElement ? tableElement.getElementsByTagName('tbody')[0] : null; - var tableRowElements = tableBodyElement ? tableBodyElement.getElementsByTagName('tr') : null; - return tableRowElements; -} - -/** - * This function hides table rows which contain untranslated languages. - * @returns boolean - */ -var hideUntranslatedLanguagesInTable = function() { - var thereAreHiddenElements = false; - var tableRowElements = getTableRowElements(); - if (tableRowElements === null) { - return thereAreHiddenElements; - } - - for (var tableRowIndex = tableRowElements.length; tableRowIndex--;) { - var tableDataElements = tableRowElements[tableRowIndex].getElementsByTagName('td'); - if (tableDataElements === null) { - return thereAreHiddenElements; - } - var tableDataSpanElements = tableDataElements[STATE_COLUMN_INDEX].getElementsByTagName('span'); - if (!tableDataSpanElements || !tableDataSpanElements[TRANSLATED_SPAN_INDEX]) { - return thereAreHiddenElements; - } - var numberTranslated = tableDataSpanElements[TRANSLATED_SPAN_INDEX].innerText.trim(); - if (numberTranslated !== '0') { - continue; - } - tableRowElements[tableRowIndex].style.display = 'none'; - untranslatedAreHidden = true; - thereAreHiddenElements = true; - } - return thereAreHiddenElements; -}; - -/** - * Reveals hidden table rows. - * @returns void - */ -function showUntranslatedLanguagesInTable() { - var tableRowElements = getTableRowElements(); - if (tableRowElements === null) { - return; - } - - for (var tableRowIndex = tableRowElements.length; tableRowIndex--;) { - if (tableRowElements[tableRowIndex].style.display === 'none') { - tableRowElements[tableRowIndex].style.display = ''; - } - } - untranslatedAreHidden = false; -} - -/** - * Hides or un hides rows of table which contain untranslated languages. - * @returns void - */ -function hideShowUntranslatedLanguagesInTable() { - if (untranslatedAreHidden) { - showUntranslatedLanguagesInTable(); - } else { - hideUntranslatedLanguagesInTable(); - } -} - -var initHideShowFunctionality = function() { - var thereAreHiddenElements = hideUntranslatedLanguagesInTable(); - if (!thereAreHiddenElements) { - var hideShowLinkElement = document.getElementById('hideShowUntranslatedLanguagesInTableId'); - hideShowLinkElement.style.display = 'none'; - } -}; - -document.addEventListener('DOMContentLoaded', initHideShowFunctionality); diff --git a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/Lfeditor.js b/typo3conf/ext/lfeditor/Resources/Public/JavaScript/Lfeditor.js deleted file mode 100644 index 8a8fe52..0000000 --- a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/Lfeditor.js +++ /dev/null @@ -1,185 +0,0 @@ -/*************************************************************** - * 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! - ***************************************************************/ - -define([ - 'jquery', - 'TYPO3/CMS/Backend/Modal', - 'TYPO3/CMS/Backend/Severity' -], function($, Modal, Severity) { - 'use strict'; - - var lfEditor = { - hideAll: null, - init: function() { - document.onkeydown = this.saveOnKeyDown; - - $(document).ready(function() { - $.get(TYPO3.settings.ajaxUrls['lfeditor::ajaxPing']); - }); - }, - submitLanguageFileEdit: function(buttonType) { - var $form = $(document.forms.contentForm); - $form.find("[name$='[buttonType]']").val(buttonType); - $form.submit(); - }, - /** - * Renders confirmation dialog for cancel button. - * - * @returns {boolean} - */ - confirmCancelFileEdit: function() { - Modal.confirm( - TYPO3.lang['function.langfile.confirmCancel.title'], - TYPO3.lang['function.langfile.confirmCancel'] - ).on('confirm.button.ok', function() { - Modal.dismiss(); - TYPO3.lfEditor.submitLanguageFileEdit(-1); - }).on('confirm.button.cancel', function() { - Modal.dismiss(); - }); - return false; - }, - - /** args -- fieldID(id), picID(id), bottom(boolean) */ - openCloseTreeEntry: function(prefix, args) { - var length = arguments.length; - var pic, curTreeHide; - - for (var i = 1; i < length; i += 3) { - curTreeHide = 0; - if (!document.getElementById(arguments[i]).style.display) { - curTreeHide = 1; - } - - if (curTreeHide) { - document.getElementById(arguments[i]).style.display = 'none'; - pic = 'Plus'; - } else { - document.getElementById(arguments[i]).style.display = ''; - pic = 'Minus'; - } - - if (arguments[i + 2]) { - pic = pic + 'Bottom'; - } - - document.getElementById(arguments[i + 1]).src = prefix + '/tree' + pic + '.png'; - document.getElementById(arguments[i + 1]).alt = 'tree' + pic + '.png'; - } - }, - /** - * Folds and un folds all constants in tree, on tree view. - */ - hideUnHideAll: function() { - if (this.hideAll === null) { - this.hideAll = document.getElementById('ul-Root').style.display !== 'none'; - } - - var ulIdRegex = /^ul-/; - var treeUlElements = []; - var allUl = document.getElementsByTagName('ul'); - for (var iterator = allUl.length; iterator--;) { - if (ulIdRegex.test(allUl[iterator].id)) { - treeUlElements.push(allUl[iterator]); - } - } - - var imageIdRegex = /^icon-/; - var imageMinusSrcRegex = /treeMinus/; - var imagePlusSrcRegex = /treePlus/; - var treeImgMinusElements = []; - var treeImgPlusElements = []; - var allImg = document.getElementsByTagName('img'); - for (var iterator = allImg.length; iterator--;) { - if (imageIdRegex.test(allImg[iterator].id)) { - if (imageMinusSrcRegex.test(allImg[iterator].src)) { - treeImgMinusElements.push(allImg[iterator]); - } else if (imagePlusSrcRegex.test(allImg[iterator].src)) { - treeImgPlusElements.push(allImg[iterator]); - } - } - } - - if (this.hideAll) { - for (var iterator = treeUlElements.length; iterator--;) { - treeUlElements[iterator].style.display = 'none'; - } - for (var iterator = treeImgMinusElements.length; iterator--;) { - treeImgMinusElements[iterator].src = treeImgMinusElements[iterator].src.replace(imageMinusSrcRegex, 'treePlus'); - } - this.hideAll = false; - } else { - for (var iterator = treeUlElements.length; iterator--;) { - treeUlElements[iterator].style.display = ''; - } - for (var iterator = treeImgPlusElements.length; iterator--;) { - treeImgPlusElements[iterator].src = treeImgPlusElements[iterator].src.replace(imagePlusSrcRegex, 'treeMinus'); - } - this.hideAll = true; - } - }, - /** - * Triggers click on button with id = 'tx-lfeditor-button-submit' when user presses Ctrl + Enter. - * - * @param eventParameter - * @returns void - */ - saveOnKeyDown: function(eventParameter) { - var eventObject = window.event ? event : eventParameter; - if (eventObject.keyCode == 13 && eventObject.ctrlKey) { - document.getElementById('contentForm').submit(); - } - }, - changeForm: function(id) { - Modal.confirm( - TYPO3.lang['function.langfile.confirmChange.title'], - TYPO3.lang['function.langfile.confirmChange'] - ).on('confirm.button.ok', function() { - Modal.dismiss(); - document.getElementById(id).submit(); - }).on('confirm.button.cancel', function() { - Modal.dismiss(); - }); - return false; - }, - jump: function(select) { - Modal.confirm( - TYPO3.lang['function.langfile.confirmChange.title'], - TYPO3.lang['function.langfile.confirmChange'] - ).on('confirm.button.ok', function() { - Modal.dismiss(); - window.location.href = select.options[select.selectedIndex].value; - }).on('confirm.button.cancel', function() { - Modal.dismiss(); - }); - - } - }; - - TYPO3.lfEditor = lfEditor; - - lfEditor.init(); - - return lfEditor; -}); diff --git a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/textareaResize.js b/typo3conf/ext/lfeditor/Resources/Public/JavaScript/textareaResize.js deleted file mode 100644 index ac84a3f..0000000 --- a/typo3conf/ext/lfeditor/Resources/Public/JavaScript/textareaResize.js +++ /dev/null @@ -1,244 +0,0 @@ -/* - * TextAreaResizer script by Jason Johnston (jj@lojjic.net) - * Created August 2003. Use freely, but give me credit. - * - * This script adds a handle below textareas that the user - * can drag with the mouse to resize the textarea. - ************************************************************ - * Modified by John Ha 2005, 2006 (ink@bur.st) - * - * Modified by Peter Klein/Stefan Galinski for special needs in LFEditor - */ - -function TextAreaResizer(elt) { - this.element = elt; - this.create(); -} - -TextAreaResizer.prototype = { - // create hr element (+class, +title tooltip) - create: function() { - var elt = this.element; - if (elt.title != 'true') { - var thisRef = this; // for usage in events definition - var h = this.handle = document.createElement("hr"); - h.className = 'handle-normal'; - - // tooltip dont work in every browser correct (eg. firefox no page break) - if (typeof tooltip != 'undefined') { - h.title = '
    • Click & drag to resize
    • Double-left-click to' + - 'minimize/maximize
    • Right-click best-fit to window
    '; - } else if (checkIt('opera')) { - h.title = '- Click & drag to resize \n- Double-left-click to minimize/maximize \n'; - } else { - h.title = '- Click & drag to resize \n- Double-left-click to minimize/maximize \n' + - '- Right-click best-fit to window'; - } - - // double click resizing - addEvent(h, 'dblclick', function() { - thisRef.max(1); - }, false); - - // onclick optimal resizing - addEvent(h, 'mousedown', function(evt) { - if (!checkIt('opera')) { - if (evt.button == 2) { - thisRef.max(2); - } else { - thisRef.dragStart(evt); - } - } - }, false); - - // class changing mechanism - addEvent(h, 'mouseover', function() { - h.className = 'handle-highlight'; - }, false); - addEvent(h, 'mouseout', this.handleHigh = function() { - h.className = 'handle-normal'; - }, false); - - // deactivate context menu - addEvent(h, 'contextmenu', function() { - return false; - }, false); - - // insert now into document - elt.parentNode.insertBefore(h, elt.nextSibling); - } - }, - - dragStart: function(evt) { - var thisRef = this; - - // lock cursor shape - document.getElementsByTagName('body')[0].style.cursor = 's-resize'; - - if (typeof (this.handle.mouseoverHandler) == 'function' && - typeof (this.handle.mouseoutHandler) == 'function') { - // save mouseover handler from dom-tooltips - this.mouseoverHandler = this.handle.mouseoverHandler; - - // disable mouseover for tooltips - tooltips should be "off" while dragging - removeEvent(this.handle, 'mouseover', this.handle.mouseoverHandler, false); - - // turn off tooltip - this.handle.mouseoutHandler(); - } - - // highlight should remain on - removeEvent(this.handle, 'mouseout', this.handleHigh, false); - - this.dragStartY = evt.clientY + 8; - this.dragStartH = this.element.offsetHeight; - - addEvent(document, 'mousemove', this.dragMoveHdlr = function(evt) { - thisRef.dragMove(evt); - }, false); - addEvent(document, 'mouseup', this.dragStopHdlr = function() { - thisRef.dragStop(); - - // restore default cursor shape - document.getElementsByTagName('body')[0].style.cursor = 'default'; - - // restore mouseover for tooltips after drag stop - if (typeof (thisRef.mouseoverHandler) == 'function') { - addEvent(thisRef.handle, 'mouseover', thisRef.mouseoverHandler, false); - } - - // restore highlight handler - thisRef.handle.className = 'handle-normal'; - addEvent(thisRef.handle, 'mouseout', thisRef.handleHigh = - function() { - thisRef.handle.className = 'handle-normal'; - }, false); - }, false); - }, - - dragMove: function(evt) { - var height = this.dragStartH + evt.clientY - this.dragStartY; - this.element.style.height = (height > 0 ? height : 0) + 'px'; - }, - - dragStop: function() { - //this.element.style.borderStyle = 'solid'; - removeEvent(document, 'mousemove', this.dragMoveHdlr, false); - removeEvent(document, 'mouseup', this.dragStopHdlr, false); - }, - - destroy: function() { - var elt = this.element; - elt.parentNode.removeChild(this.handle); - elt.style.height = ''; - }, - - max: function(mode) { - if (!this.defHeight) { - this.defHeight = this.element.offsetHeight; - } - if (!this.defWidth) { - this.defWidth = this.handle.offsetWidth; - } - - if (this.element.style.height == '1px') { - this.element.style.height = this.defHeight + 'px'; - } else { - this.element.style.height = '1px'; - } - - if (mode == 2) { - var str = ''; - for (var i = 0; i < parseInt(this.element.scrollWidth / 10); i++) { - str += ' '; - } - this.element.value += str; - - // IE Bug? Need to retrieve scrollWidth first to init it! - var dummy = this.element.scrollWidth, - wrap = 0; - if (this.element.scrollWidth == this.element.clientWidth) { - wrap = 1; - } - this.element.value = this.element.value.replace(str, ''); - - // IE Bug? Need to retrieve scrollHeight first to init it! - dummy = this.element.scrollHeight; - var maxHeight = this.element.scrollHeight + - (checkIt('msie') ? wrap ? -6 : 9 : wrap ? 0 : this.element.scrollWidth > this.element.clientWidth ? 20 : 0); - - if (maxHeight > winSize()[1]) { - maxHeight = winSize()[1] - (checkIt('msie') ? 60 : 90); - } - // For some reason Netscape won't accept style.height greater than 10000px - this.element.style.height = maxHeight - (checkIt('msie') ? 8 : 0) + 'px'; - } - - return false; - } -}; - -function winSize() { - var myWidth = 0, myHeight = 0; - if (typeof (window.innerWidth) == 'number') { - //Non-IE - myWidth = window.innerWidth - 16; - myHeight = window.innerHeight - 16; - } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { - //IE 6+ in 'standards compliant mode' - myWidth = document.documentElement.clientWidth - 20; - myHeight = document.documentElement.clientHeight - 20; - } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { - //IE 4 compatible - myWidth = document.body.clientWidth - 20; - myHeight = document.body.clientHeight - 20; - } - return new Array(myWidth, myHeight); -} - -// safari, omniweb, opera, webtv, icab, msie -function checkIt(string) { - return navigator.userAgent.toLowerCase().indexOf(string) + 1; -} - -function LFEtextarea_init() { - var textareas = document.getElementsByTagName('textarea'); - // Somehow var i was being corrupted. - // Only when max(3) or max(2) called. - // Using z instead. Weird. - for (var z = 0; z < textareas.length; z++) { - new TextAreaResizer(textareas[z]); - } - // Re-init dom-tooltips (if available), so tooltips are shown for handles - typeof tooltip != 'undefined' ? tooltip.init(new Array('hr', 'a')) : 0; -} - -if (typeof schedule != 'function') { - function addEvent(obj, evType, fn, useCapture) { - if (obj.addEventListener) { - obj.addEventListener(evType, fn, useCapture); - return true; - } else if (obj.attachEvent) { - return obj.attachEvent("on" + evType, fn); - } - - return false; - } - - function removeEvent(obj, evType, fn, useCapture) { - if (obj.removeEventListener) { - obj.removeEventListener(evType, fn, useCapture); - return true; - } else if (obj.detachEvent) { - return obj.detachEvent('on' + evType, fn); - } - - return false; - } - - addEvent(window, 'load', function() { - LFEtextarea_init(); - }, false); -} else { - schedule('textarea_init()'); -} diff --git a/typo3conf/ext/lfeditor/Resources/Public/StyleSheets/Lfeditor.css b/typo3conf/ext/lfeditor/Resources/Public/StyleSheets/Lfeditor.css deleted file mode 100644 index 6fbe555..0000000 --- a/typo3conf/ext/lfeditor/Resources/Public/StyleSheets/Lfeditor.css +++ /dev/null @@ -1,320 +0,0 @@ -.docheader-funcmenu { - display: inline; -} - -.docheader-funcmenu select { - margin-top: 4px; - color: black; -} - -#typo3-inner-docbody input[type=text][type=submit] { - margin: 0 5px 5px 0; - border: 1px solid #9B9B9B; -} - -#typo3-inner-docbody input[type=text].tx-lfeditor-wideField { - width: 435px; -} - -#typo3-inner-docbody .tx-lfeditor-fieldset input[type=text] { - margin-left: 10px; - width: 230px; -} - -#typo3-inner-docbody label { - vertical-align: top; - cursor: pointer; -} - -.typo3-messages { - margin-top: 30px; -} - -/* fieldset class (box) */ -fieldset.tx-lfeditor-fieldset, fieldset.tx-lfeditor-fieldset fieldset { - padding: 10px 5px 5px; - margin-top: 5px; - margin-bottom: 10px; - border: 1px solid #AAA; -} - -fieldset.tx-lfeditor-fleft, fieldset.tx-lfeditor-fright { - width: 48%; -} - -fieldset.tx-lfeditor-fleft { - float: left; - clear: both; -} - -fieldset.tx-lfeditor-fright { - float: right; -} - -fieldset.tx-lfeditor-fieldset legend { - padding-left: 5px; - padding-right: 5px; - font-weight: bold; - border: 1px solid #AAA; - width: auto; - margin: 0; -} - -.tx-lfeditor-constantMaxWidth400 { - max-width: 100%; - overflow: hidden; - word-wrap: break-word; -} - -fieldset.tx-lfeditor-fieldset p, -fieldset.tx-lfeditor-fieldset p input { - margin: 0; -} - -fieldset.tx-lfeditor-fieldset p { - max-width: 100%; - max-height: 100px; - overflow-y: scroll; -} - -#typo3-inner-docbody fieldset.tx-lfeditor-fieldset p label { - vertical-align: middle; -} - -fieldset.tx-lfeditor-fieldset fieldset dt { - font-weight: bold; -} - -fieldset.tx-lfeditor-fieldset fieldset a { - text-decoration: none; -} - -fieldset.tx-lfeditor-fieldset fieldset dd { - margin-bottom: 5px; -} - -/* table */ -#tx-lfeditor-table { - margin-bottom: 10px; - width: 100%; - clear: both; - font-size: 12px; - line-height: 1.5em; -} - -#tx-lfeditor-table thead { - font-weight: bold; -} - -#tx-lfeditor-table tbody { - text-align: center; -} - -#tx-lfeditor-table tbody td, #tx-lfeditor-table thead th { - padding: 2px; - border: 1px solid #AAA; -} - -#tx-lfeditor-table tbody td a { - text-decoration: underline; - font-weight: bold; -} - -#tx-lfeditor-table tbody td img { - vertical-align: middle; -} - -/* markup classes */ -.tx-lfeditor-error, .tx-lfeditor-notice, -.tx-lfeditor-success, .tx-lfeditor-delConst { - margin-bottom: 10px; - margin-top: 10px; -} - -.tx-lfeditor-goodMarkup, .tx-lfeditor-success { - color: #390; - font-weight: bold; -} - -.tx-lfeditor-badMarkup, .tx-lfeditor-error, .tx-lfeditor-delConst { - color: #C20; - font-weight: bold; -} - -.tx-lfeditor-specialMarkup, .tx-lfeditor-notice { - color: #0078DE; - font-weight: bold; -} - -#tx-lfeditor-table-markup1, #tx-lfeditor-table-markup2, -#tx-lfeditor-table-markup3, #tx-lfeditor-table-markup4, -#tx-lfeditor-deleteAll { - color: #FFF; - width: 20px; -} - -#tx-lfeditor-table-markup1 { - background-color: #C20; -} - -#tx-lfeditor-table-markup2 { - background-color: #390; -} - -#tx-lfeditor-table-markup3 { - background-color: #0078DE; -} - -#tx-lfeditor-table-markup4 { - background-color: #E9FA2E; -} - -/* some special classes/ids */ -.tx-lfeditor-buttons { - clear: both; -} - -.tx-lfeditor-buttons-refresh { - background: none; - border: none; -} - -.tx-lfeditor-checkBox-bottom { - vertical-align: bottom; -} - -.tx-lfeditor-defaultTranslation { - padding-left: 5px; - padding-right: 5px; - border: 1px solid #AAA; - border-top: none; -} - -.tx-lfeditor-textarea { - margin: 0; - width: 100%; -} - -.tx-lfeditor-fieldset #metaType { - margin-right: 10px; -} - -#tx-lfeditor-numberCur, #tx-lfeditor-numberOf { - font-weight: bold; -} - -.tx-lfeditor-label { - padding-top: 1px; - font-weight: bold; - clear: both; -} - -.tx-lfeditor-input { - width: 230px; -} - -.tx-lfeditor-label, .tx-lfeditor-input { - display: inline-block; - vertical-align: top; -} - -/* tree view */ -.tx-lfeditor-fieldset ul.tx-lfeditor-treeview { - margin: 0; - padding: 0; - list-style-type: none; - clear: left; -} - -.tx-lfeditor-fieldset ul.tx-lfeditor-treeview img { - float: left; -} - -fieldset.tx-lfeditor-fieldset fieldset ul.tx-lfeditor-treeview li { - font-weight: bold; -} - -/* manage backups */ -.tx-lfeditor-fieldset ul.tx-lfeditor-backups-label { - list-style-type: none; - font-weight: bold; -} - -.tx-lfeditor-fieldset ul.tx-lfeditor-backups-value { - list-style-type: none; - font-weight: normal; -} - -/* textarea resizer */ -.handle-normal, .handle-highlight { - padding: 0; - margin: 0; - border: none; - height: 5px; - cursor: s-resize; -} - -* html body .handle-normal, * html body .handle-highlight { - margin-top: -8px; -} - -.handle-normal { - color: #390; - background: #390; -} - -.handle-highlight { - color: #0078DE; - background: #0078DE; -} - -.uppercase { - padding-bottom: 6px; - border-bottom: 1px solid #CDCDCD; -} - -.v11 select { - background-size: 16px 16px; - padding-right: 24px; - background-repeat: no-repeat; - background-position: right 4px center; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' enable-background='new 0 0 16 16' viewBox='0 0 16 16'%3e%3cg fill='%23000'%3e%3cpath d='m4.464 6.05-.707.707L8 11l4.243-4.243-.707-.707L8 9.586z'/%3e%3c/g%3e%3c/svg%3e"); -} - -.v11 .handle-normal:not([size]) { - height: 5px; -} - -.v11 .form-group { - margin-bottom: 15px; -} - -.v11 .form-group:last-child { - margin-bottom: 15px; -} - -.v11 legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 18px; - font-size: 18px; - line-height: inherit; - color: #5a5a5a; - border: 0; - border-bottom: 1px solid #e5e5e5; - float: none; -} - -.v11 label { - font-weight: bold; -} - -.v11 fieldset.tx-lfeditor-fieldset legend { - padding-left: 5px; - padding-right: 5px; - font-weight: bold; - border: 1px solid #AAA; - width: auto; - margin: 0; -} diff --git a/typo3conf/ext/lfeditor/UPGRADE.md b/typo3conf/ext/lfeditor/UPGRADE.md deleted file mode 100644 index 3de10c5..0000000 --- a/typo3conf/ext/lfeditor/UPGRADE.md +++ /dev/null @@ -1,11 +0,0 @@ -# Version 7 Breaking Changes - -- Dropped TYPO3 9 support -- Dropped php 7.3 support -- added support for v4 of typo3/cms-composer-installers - -We had to move to .xlf files for overwrites. It is necessary for you to save all overwritten files again from the backend. - -# Version 6 Breaking Changes - -- Dropped TYPO3 8 support diff --git a/typo3conf/ext/lfeditor/composer.json b/typo3conf/ext/lfeditor/composer.json deleted file mode 100644 index 46a9675..0000000 --- a/typo3conf/ext/lfeditor/composer.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "sgalinski/lfeditor", - "type": "typo3-cms-extension", - "description": "Language File Editor", - "homepage": "https://www.sgalinski.de", - "license": [ - "GPL-2.0-or-later" - ], - "version": "7.1.10", - "support": { - "issues": "https://gitlab.sgalinski.de/typo3/lfeditor/issues", - "source": "https://gitlab.sgalinski.de/typo3/lfeditor/" - }, - "require": { - "typo3/cms-core": "^10.4 || ^11.5" - }, - "autoload": { - "psr-4": { - "SGalinski\\Lfeditor\\": "Classes/" - } - }, - "extra": { - "typo3/cms": { - "extension-key": "lfeditor" - } - } -} diff --git a/typo3conf/ext/lfeditor/ext_conf_template.txt b/typo3conf/ext/lfeditor/ext_conf_template.txt deleted file mode 100644 index 75c2923..0000000 --- a/typo3conf/ext/lfeditor/ext_conf_template.txt +++ /dev/null @@ -1,31 +0,0 @@ -######################### general information #################### - -# cat=basic; type=string; label=View languages: 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. -viewLanguages = - -# cat=basic; type=string; label=Default language: If 'en' is not default language in TYPO3 BE, default language must be defined here (e.g. de). -defaultLanguage = - -# cat=basic; type=string; label=This is the search pattern, which is in charge for finding all language files. Including legacy files. -searchRegex = /^([a-z0-9_]*locallang[a-z0-9_-]*\.(php|xml)|[^\.]*\.xlf)$/i - -# cat=basic; type=string; label=Ignore extensions: Regular expression which limits the extension key list. An example for blacklist specific extensions, from the extension select box, would be the following pattern: /^(gridelements|lfeditor|CVS|.svn|.git|csh_)/ -extIgnore = /^(CVS|.svn|.git|csh_)/ - -# cat=basic; type=string; label=Only extensions: Regular expression which restricts the extension key list. An example for list only specific extensions in the extension select box, would be the following pattern: /^(felogin|lfeditor)/. extIgnore is evaluated before extWhitelist. -extWhitelist = - -# cat=basic; type=boolean; label=Change XLF date: If set to TRUE, LFEditor will change the date in XLF files on each change. -changeXlfDate = 1 - -# cat=basic; type=boolean; label=Allow edit mode "extension" -editModeExtension = 1 - -# cat=basic; type=boolean; label=Allow edit mode "l10n" -#editModeL10n = 1 - -# cat=basic; type=string; label=Path to AdditionalConfiguration.php file: It is possible to change the file where locallangXMLOverride will be declared. Relative to the document root. If modified, don't forget then to include the custom file path from the AdditionalConfiguration.php. -pathAdditionalConfiguration = typo3conf/AdditionalConfiguration.php - -# cat=basic; type=options[user,tools,system]; label=Position of LFEditor module in TYPO3 BE -beMainModuleName = user diff --git a/typo3conf/ext/lfeditor/ext_emconf.php b/typo3conf/ext/lfeditor/ext_emconf.php deleted file mode 100644 index 1ab1195..0000000 --- a/typo3conf/ext/lfeditor/ext_emconf.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Language File Editor', - 'description' => 'This module serves several functions for editing of language files. -The extension differs between editors and administrators with appropriate privileges. -Normal users are allowed to edit only languages for which they have permission. -Following functions are implemented in this module: - * Formats: PHP, XML and XLF - * Conversion of formats - * Splitting and merging of language files - * Override mode - * Editing L10n folder content - * 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', - 'category' => 'module', - 'version' => '7.1.10', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => false, - 'author' => 'Stefan Galinski, Damjan Komlenac', - 'author_email' => 'stefan@sgalinski.de', - 'author_company' => 'sgalinski Internet Services', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '10.4.0-11.5.99', - 'php' => '7.3.0-8.1.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), -); - diff --git a/typo3conf/ext/lfeditor/ext_icon.png b/typo3conf/ext/lfeditor/ext_icon.png deleted file mode 100644 index 934ff3c..0000000 Binary files a/typo3conf/ext/lfeditor/ext_icon.png and /dev/null differ diff --git a/typo3conf/ext/lfeditor/ext_localconf.php b/typo3conf/ext/lfeditor/ext_localconf.php deleted file mode 100644 index b65a304..0000000 --- a/typo3conf/ext/lfeditor/ext_localconf.php +++ /dev/null @@ -1,23 +0,0 @@ - 'index, general, changeSelection, generalSave, goToEditFile, - switchEditingMode, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\EditFileController::class => 'editFile, changeSelection, editFileSave, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\EditConstantController::class => 'editConstant, changeSelection, editConstantSave, prepareEditConstant, - refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\AddConstantController::class => 'addConstant, changeSelection, addConstantSave, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\DeleteConstantController::class => 'deleteConstant, changeSelection, deleteConstantSave, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\RenameConstantController::class => 'renameConstant, changeSelection, renameConstantSave, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\SearchConstantController::class => 'searchConstant, changeSelection, searchConstantSearch, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\ViewTreeController::class => 'viewTree, changeSelection, selectExplodeToken, refreshLanguageFileList', - \SGalinski\Lfeditor\Controller\ManageBackupsController::class => 'manageBackups, changeSelection, deleteBackup, recoverBackup, showDifferenceBackup, - deleteAllBackup, refreshLanguageFileList', - ], - [ - 'access' => 'user,group', - 'icon' => 'EXT:lfeditor/Resources/Public/Icons/Extension.svg', - 'labels' => 'LLL:EXT:lfeditor/Resources/Private/Language/locallang_mod.xml', - ] -); -unset($extConf); diff --git a/typo3conf/ext/lfeditor/ext_tables.sql b/typo3conf/ext/lfeditor/ext_tables.sql deleted file mode 100644 index dd2cf2a..0000000 --- a/typo3conf/ext/lfeditor/ext_tables.sql +++ /dev/null @@ -1,3 +0,0 @@ -CREATE TABLE be_users ( - lfeditor_change_editing_modes tinyint(4) unsigned DEFAULT '0' NOT NULL -); diff --git a/typo3conf/ext/news/.editorconfig b/typo3conf/ext/news/.editorconfig new file mode 100644 index 0000000..bb0a62f --- /dev/null +++ b/typo3conf/ext/news/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[{*.rst,*.rst.txt}] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 3 +max_line_length = 80 + +# MD-Files +[*.md] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 +max_line_length = 80 diff --git a/typo3conf/ext/news/Build/.php_cs b/typo3conf/ext/news/Build/.php_cs deleted file mode 100644 index 7819174..0000000 --- a/typo3conf/ext/news/Build/.php_cs +++ /dev/null @@ -1,76 +0,0 @@ -in(__DIR__ . '/../'); -// Return a Code Sniffing configuration using -// all sniffers needed for PSR-2 -// and additionally: -// - Remove leading slashes in use clauses. -// - PHP single-line arrays should not have trailing comma. -// - Single-line whitespace before closing semicolon are prohibited. -// - Remove unused use statements in the PHP source code -// - Ensure Concatenation to have at least one whitespace around -// - Remove trailing whitespace at the end of blank lines. -return PhpCsFixer\Config::create() - ->setRiskyAllowed(true) - ->setRules([ - '@PSR2' => true, - 'no_leading_import_slash' => true, - 'no_trailing_comma_in_singleline_array' => true, - 'no_singleline_whitespace_before_semicolons' => true, - 'no_unused_imports' => true, - 'concat_space' => ['spacing' => 'one'], - 'no_whitespace_in_blank_line' => true, - 'ordered_imports' => true, - 'single_quote' => true, - 'no_empty_statement' => true, - 'no_extra_consecutive_blank_lines' => true, - 'phpdoc_no_package' => true, - 'phpdoc_scalar' => true, - 'no_blank_lines_after_phpdoc' => true, - 'array_syntax' => ['syntax' => 'short'], - 'whitespace_after_comma_in_array' => true, - 'function_typehint_space' => true, - 'hash_to_slash_comment' => true, - 'no_alias_functions' => true, - 'lowercase_cast' => true, - 'no_leading_namespace_whitespace' => true, - 'native_function_casing' => true, - 'self_accessor' => true, - 'no_short_bool_cast' => true, - 'no_unneeded_control_parentheses' => true - ]) - ->setFinder($finder); diff --git a/typo3conf/ext/news/Build/FunctionalTests.xml b/typo3conf/ext/news/Build/FunctionalTests.xml deleted file mode 100644 index a5631f2..0000000 --- a/typo3conf/ext/news/Build/FunctionalTests.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - ../Tests/Functional/ - - - - - ../Classes/ - - - diff --git a/typo3conf/ext/news/Build/Local/FunctionalTests.xml b/typo3conf/ext/news/Build/Local/FunctionalTests.xml deleted file mode 100644 index 350cf30..0000000 --- a/typo3conf/ext/news/Build/Local/FunctionalTests.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - ../../Tests/Functional/ - - - - - ../../Classes/ - - - diff --git a/typo3conf/ext/news/Build/Local/phpunit.xml b/typo3conf/ext/news/Build/Local/phpunit.xml deleted file mode 100644 index 6c90e96..0000000 --- a/typo3conf/ext/news/Build/Local/phpunit.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - ../../Tests/Unit/ - - - - - ../../Classes/ - - - diff --git a/typo3conf/ext/news/Build/UnitTests.xml b/typo3conf/ext/news/Build/UnitTests.xml deleted file mode 100644 index 91890ea..0000000 --- a/typo3conf/ext/news/Build/UnitTests.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - ../Tests/Unit/ - - - - - ../Classes/ - - - - diff --git a/typo3conf/ext/news/Tests/Build/FunctionalTests.xml b/typo3conf/ext/news/Tests/Build/FunctionalTests.xml deleted file mode 100644 index 252703c..0000000 --- a/typo3conf/ext/news/Tests/Build/FunctionalTests.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - ../Functional/ - - - diff --git a/typo3conf/ext/news/Tests/Build/FunctionalTestsBootstrap.php b/typo3conf/ext/news/Tests/Build/FunctionalTestsBootstrap.php deleted file mode 100644 index a95bc52..0000000 --- a/typo3conf/ext/news/Tests/Build/FunctionalTestsBootstrap.php +++ /dev/null @@ -1,30 +0,0 @@ -defineOriginalRootPath(); - $testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/tests'); - $testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/transient'); -})(); diff --git a/typo3conf/ext/news/Tests/Build/UnitTests.xml b/typo3conf/ext/news/Tests/Build/UnitTests.xml deleted file mode 100644 index 84751db..0000000 --- a/typo3conf/ext/news/Tests/Build/UnitTests.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - ../Unit/ - - - - - diff --git a/typo3conf/ext/news/Tests/Build/UnitTestsBootstrap.php b/typo3conf/ext/news/Tests/Build/UnitTestsBootstrap.php deleted file mode 100644 index 0e679f4..0000000 --- a/typo3conf/ext/news/Tests/Build/UnitTestsBootstrap.php +++ /dev/null @@ -1,84 +0,0 @@ -getWebRoot(), '/')); - } - if (!getenv('TYPO3_PATH_WEB')) { - putenv('TYPO3_PATH_WEB=' . rtrim($testbase->getWebRoot(), '/')); - } - - $testbase->defineSitePath(); - - $requestType = \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE | \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_CLI; - \TYPO3\TestingFramework\Core\SystemEnvironmentBuilder::run(0, $requestType); - - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3conf/ext'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/assets'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/tests'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/transient'); - - // Retrieve an instance of class loader and inject to core bootstrap - $classLoader = require $testbase->getPackagesPath() . '/autoload.php'; - \TYPO3\CMS\Core\Core\Bootstrap::initializeClassLoader($classLoader); - - // Initialize default TYPO3_CONF_VARS - $configurationManager = new \TYPO3\CMS\Core\Configuration\ConfigurationManager(); - $GLOBALS['TYPO3_CONF_VARS'] = $configurationManager->getDefaultConfiguration(); - - $cache = new \TYPO3\CMS\Core\Cache\Frontend\PhpFrontend( - 'core', - new \TYPO3\CMS\Core\Cache\Backend\NullBackend('production', []) - ); - - // Set all packages to active - if (interface_exists(\TYPO3\CMS\Core\Package\Cache\PackageCacheInterface::class)) { - $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, \TYPO3\CMS\Core\Core\Bootstrap::createPackageCache($cache)); - } else { - // v10 compatibility layer - // @deprecated Will be removed when v10 compat is dropped from testing-framework - $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, $cache); - } - - \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance(\TYPO3\CMS\Core\Package\PackageManager::class, $packageManager); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::setPackageManager($packageManager); - - $testbase->dumpClassLoadingInformation(); - - \TYPO3\CMS\Core\Utility\GeneralUtility::purgeInstances(); -})(); diff --git a/typo3conf/ext/news/Tests/Functional/Controller/NewsControllerTest.php b/typo3conf/ext/news/Tests/Functional/Controller/NewsControllerTest.php deleted file mode 100644 index 945d972..0000000 --- a/typo3conf/ext/news/Tests/Functional/Controller/NewsControllerTest.php +++ /dev/null @@ -1,161 +0,0 @@ -importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml'); - $this->setUpFrontendRootPage( - 1, - [ - __DIR__ . '/../Fixtures/TypoScript/setup.typoscript' - ] - ); - - // This part is needed for TYPO3 10 compatibility - /** @var EnvironmentService|ObjectProphecy $environmentServiceProphecy */ - $environmentServiceProphecy = $this->prophesize(EnvironmentService::class); - $environmentServiceProphecy - ->isEnvironmentInFrontendMode() - ->willReturn(true); - $environmentServiceProphecy - ->isEnvironmentInBackendMode() - ->willReturn(false); - GeneralUtility::setSingletonInstance(EnvironmentService::class, $environmentServiceProphecy->reveal()); - - $serverRequest = new ServerRequest(); - - $applicationType = SystemEnvironmentBuilder::REQUESTTYPE_FE; - $serverRequest = $serverRequest->withAttribute('applicationType', $applicationType); - - /** @var TypoScriptFrontendController|ObjectProphecy $typoScriptFrontendControllerProphecy */ - $typoScriptFrontendControllerProphecy = $this->prophesize(TypoScriptFrontendController::class); - /** @var FrontendUserAuthentication|ObjectProphecy $frontendUserAuthenticationProphecy */ - $frontendUserAuthenticationProphecy = $this->prophesize(FrontendUserAuthentication::class); - - $GLOBALS['TYPO3_REQUEST'] = $serverRequest; - $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class); - $GLOBALS['TSFE'] = $typoScriptFrontendControllerProphecy->reveal(); - $GLOBALS['TSFE']->fe_user = $frontendUserAuthenticationProphecy->reveal(); - } - - protected function tearDown(): void - { - unset( - $this->subject - ); - - parent::tearDown(); - } - - /** - * @test - */ - public function listActionWillReturnNoNews(): void - { - $extbaseBootstrap = GeneralUtility::makeInstance(Bootstrap::class); - $content = $extbaseBootstrap->run( - '', - [ - 'extensionName' => 'News', - 'pluginName' => 'Pi1' - ] - ); - - $this->assertStringContainsString( - 'No news available.', - $content - ); - } - - /** - * @test - */ - public function listActionWillShowNewsOfStoragePage1(): void - { - $date = new \DateTime('now'); - - $connection = GeneralUtility::makeInstance(ConnectionPool::class) - ->getConnectionForTable('tx_news_domain_model_news'); - $connection->insert( - 'tx_news_domain_model_news', - [ - 'uid' => 1, - 'pid' => 1, - 'title' => 'My first news', - 'datetime' => (int)$date->format('U') - ] - ); - - $extbaseBootstrap = GeneralUtility::makeInstance(Bootstrap::class); - $content = $extbaseBootstrap->run( - '', - [ - 'extensionName' => 'News', - 'pluginName' => 'Pi1' - ] - ); - - $this->assertStringContainsString( - 'My first news', - $content - ); - - $this->assertStringContainsString( - '
    ', true - ], - 'working example 2' => [ - '
    ', false - ], - ]; - } - - /** - * Test if given tag is a self closing tag - * - * @test - * - * @dataProvider givenTagIsSelfClosingTagDataProvider - * - * @return void - */ - public function givenTagIsSelfClosingTag($tag, $expectedResult): void - { - $mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']); - $result = $mockTemplateParser->_call('isSelfClosingTag', $tag); - $this->assertEquals($expectedResult, $result); - } - - /** - * @return (bool|string)[][] - * - * @psalm-return array{'working example 1': array{0: string, 1: true}, 'working example 2': array{0: string, 1: false}} - */ - public function givenTagIsSelfClosingTagDataProvider(): array - { - return [ - 'working example 1' => [ - '
    ', true - ], - 'working example 2' => [ - '
    ', false - ], - ]; - } - - /** - * Test if given tag is an opening tag - * - * @test - * - * @dataProvider givenTagIsAnOpeningTagDataProvider - * - * @return void - */ - public function givenTagIsAnOpeningTag($tag, $expectedResult): void - { - $mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']); - $result = $mockTemplateParser->_call('isOpeningTag', $tag); - $this->assertEquals($expectedResult, $result); - } - - /** - * @return (bool|string)[][] - * - * @psalm-return array{0: array{0: string, 1: true}, 1: array{0: string, 1: false}, 2: array{0: string, 1: false}, 3: array{0: string, 1: false}} - */ - public function givenTagIsAnOpeningTagDataProvider(): array - { - return [ - ['
    ', true], - ['
    ', false], - ['
    ', false], - ['
    ', false] - ]; - } - - /** - * Test if given tag is an opening tag - * - * @test - * - * @dataProvider extractTagReturnsCorrectOneDataProvider - * - * @return void - */ - public function extractTagReturnsCorrectOne($tag, $expectedResult): void - { - $mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']); - $result = $mockTemplateParser->_call('extractTag', $tag); - $this->assertEquals($expectedResult, $result, sprintf('"%s" (%s) : "%s" (%s)', $tag, strlen($tag), $expectedResult, strlen($expectedResult))); - } - - /** - * @return string[][] - * - * @psalm-return array{0: array{0: string, 1: string}, 1: array{0: string, 1: string}, 2: array{0: string, 1: string}, 3: array{0: string, 1: string}} - */ - public function extractTagReturnsCorrectOneDataProvider(): array - { - return [ - ['this is a
    real
    test', 'this '], - ['this
    linebreak', 'this
    '], - ['this
    linebreak', 'this
    '], - ['this is a test', 'this is a test'], - ]; - } -} diff --git a/typo3conf/ext/news/Tests/Unit/ViewHelpers/SimplePrevNextViewHelperTest.php b/typo3conf/ext/news/Tests/Unit/ViewHelpers/SimplePrevNextViewHelperTest.php deleted file mode 100644 index 91f32f9..0000000 --- a/typo3conf/ext/news/Tests/Unit/ViewHelpers/SimplePrevNextViewHelperTest.php +++ /dev/null @@ -1,96 +0,0 @@ -viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getRawRecord']); - } - - /** - * @test - * - * @return void - */ - public function wrongIdWillReturnNullForObject(): void - { - $this->viewHelper->expects($this->any())->method('getRawRecord')->withAnyParameters()->will($this->returnValue(null)); - - $out = $this->viewHelper->_call('getObject', 0); - $this->assertEquals($out, null); - } - - /** - * @test - * - * @return void - */ - public function queryResultWillReturnCorrectOutputForAllLinks(): void - { - $viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']); - - $in = [ - 'prev' => ['uid' => 123], - 'next' => ['uid' => 789], - ]; - $exp = ['prev' => 123, 'next' => 789]; - $viewHelper->expects(self::exactly(2))->method('getObject')->willReturnOnConsecutiveCalls(123, 789); - $out = $viewHelper->_call('mapResultToObjects', $in); - $this->assertEquals($out, $exp); - } - - /** - * @test - * - * @return void - */ - public function queryResultWillReturnCorrectOutputFor2Links(): void - { - $viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']); - - $in = [ - 'prev' => ['uid' => 147], - ]; - $exp = ['prev' => 147]; - $viewHelper->expects(self::exactly(1))->method('getObject')->willReturnOnConsecutiveCalls(147); - $out = $viewHelper->_call('mapResultToObjects', $in); - $this->assertEquals($out, $exp); - } - - /** - * @test - * - * @return void - */ - public function queryResultWillReturnCorrectOutputFor1Link(): void - { - $viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']); - - $in = [ - 'next' => ['uid' => 369], - ]; - $exp = ['next' => 369]; - $viewHelper->expects(self::exactly(1))->method('getObject')->willReturnOnConsecutiveCalls(369); - $out = $viewHelper->_call('mapResultToObjects', $in); - $this->assertEquals($out, $exp); - } -} diff --git a/typo3conf/ext/news/Tests/Unit/ViewHelpers/TargetLinkViewHelperTest.php b/typo3conf/ext/news/Tests/Unit/ViewHelpers/TargetLinkViewHelperTest.php deleted file mode 100644 index 2c20194..0000000 --- a/typo3conf/ext/news/Tests/Unit/ViewHelpers/TargetLinkViewHelperTest.php +++ /dev/null @@ -1,88 +0,0 @@ -getMockBuilder(TargetLinkViewHelper::class)->setMethods(['dummy'])->getMock(); - return $instance; - } - - /** - * @test - * - * @return void - */ - public function canCreateViewHelperClassInstance(): void - { - $instance = $this->getPreparedInstance(); - $this->assertInstanceOf(TargetLinkViewHelper::class, $instance); - } - - /** - * Test if correct target is returned - * - * @test - * - * @dataProvider correctTargetIsReturnedDataProvider - * - * @return void - */ - public function correctTargetIsReturned($link, $expectedResult): void - { - $viewHelper = $this->getMockBuilder(TargetLinkViewHelper::class)->setMethods(['dummy'])->getMock(); - $viewHelper->setRenderingContext($this->getMockBuilder(RenderingContextInterface::class)->getMock()); - $viewHelper->setArguments([ - 'link' => $link, - ]); - - $this->assertEquals($viewHelper->render(), $expectedResult); - } - - /** - * Data provider - * - * @return array - */ - public function correctTargetIsReturnedDataProvider() - { - return [ - 'noTargetSetAndUrlDefined' => [ - 'www.typo3.org', '' - ], - 'noTargetSetAndIdDefined' => [ - '123', '' - ], - 'IdAndTargetDefined' => [ - '123 _blank', '_blank' - ], - 'UrlAndPopupDefined' => [ - 'www.typo3.org 300x400', '' - ], - 'ComplexExample' => [ - 'www.typo3.org _fo my-class', '_fo' - ], - - ]; - } -} diff --git a/typo3conf/ext/news/ext_emconf.php b/typo3conf/ext/news/ext_emconf.php index d4a2dfc..ec788e3 100644 --- a/typo3conf/ext/news/ext_emconf.php +++ b/typo3conf/ext/news/ext_emconf.php @@ -1,41 +1,22 @@ 'News system', - 'description' => 'Versatile news system based on Extbase & Fluid and using the latest technologies provided by TYPO3 CMS.', - 'category' => 'fe', - 'author' => 'Georg Ringer', - 'author_email' => 'mail@ringer.it', - 'state' => 'stable', - 'clearCacheOnLoad' => true, - 'version' => '9.4.0', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '10.4.13-11.9.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - 'rx_shariff' => '12.0.0-14.99.99', - 'numbered_pagination' => '1.0.1-1.99.99', - ), - ), - 'uploadfolder' => false, - 'clearcacheonload' => true, - 'author_company' => NULL, -); - +$EM_CONF[$_EXTKEY] = [ + 'title' => 'News system', + 'description' => 'Versatile news system based on Extbase & Fluid and using the latest technologies provided by TYPO3 CMS.', + 'category' => 'fe', + 'author' => 'Georg Ringer', + 'author_email' => 'mail@ringer.it', + 'state' => 'stable', + 'clearCacheOnLoad' => true, + 'version' => '9.4.0', + 'constraints' => [ + 'depends' => [ + 'typo3' => '10.4.13-11.9.99', + ], + 'conflicts' => [], + 'suggests' => [ + 'rx_shariff' => '12.0.0-14.99.99', + 'numbered_pagination' => '1.0.1-1.99.99' + ], + ], +]; diff --git a/typo3conf/ext/news/out.txt b/typo3conf/ext/news/out.txt deleted file mode 100644 index 7df0ca6..0000000 --- a/typo3conf/ext/news/out.txt +++ /dev/null @@ -1,20 +0,0 @@ -2022-04-26 [BUGFIX] Remove download + columnselector in be module (Commit 84bc6a02 by Georg Ringer) -2022-04-24 [BUGFIX] Fix notice in NewsController (#1775) (Commit 104a5275 by Georg Ringer) -2022-04-24 [BUGFIX] Use correct notice check (Commit cc2c7dc9 by Georg Ringer) -2022-04-24 [TASK] Change condition order (Commit d04fe5c9 by Georg Ringer) -2022-04-24 [BUGFIX] Link title in backend module again (Commit 63132676 by Georg Ringer) -2022-04-23 [TASK] Fix PHP notice (#1774) (Commit 8dd77033 by Peter Kraume) -2022-04-23 [BUGFIX]n Fix notices (#1773) (Commit 03182cdf by Georg Ringer) -2022-04-20 [DOCS] Align with new TYPO3 documentation standards (#1771) (Commit 2b0c6c51 by Alexander Nitsche) -2022-04-01 [BUGFIX] Return empty instead NULL (#1740) (#1763) (Commit a34e236a by Philipp Idler) -2022-04-01 [BUGFIX] Avoid warning undefined array key (#1764) (Commit 6873a913 by nigelmann) -2022-03-30 [BUGFIX] Fix notice for singleNews argument (Commit a046697b by Georg Ringer) -2022-03-29 Remove unnecessary part .text('Back') in JavaScript Snippet (#1762) (Commit 7e6b31a8 by Eric Bode) -2022-03-28 [FEATURE] Add 'fileIndex' argument to MediaViewHelper (Commit ee811c85 by Philipp Parzer) -2022-03-24 [BUGFIX] Fix notice in ItemsProcFunc (Commit 7e7d8179 by Georg Ringer) -2022-03-23 [BUGFIX] Fix notice in PageLayoutView (Commit 70105f0c by Georg Ringer) -2022-03-21 [BUGFIX] Show news in backend module again (Commit 11e85013 by Georg Ringer) -2022-03-19 Add func tests for news controller (#1757) (Commit b745f4c7 by Stefan Frömken) -2022-03-18 Add unit tests for static text (#1756) (Commit 271ade85 by Stefan Frömken) -2022-03-18 [TASK] Improve code of category model (Commit 7cefc9e7 by Stefan Frömken) -2022-03-18 Add allow-plugins to composer.json (#1752) (Commit 77db38cf by Stefan Frömken) diff --git a/typo3conf/ext/numbered_pagination/ext_emconf.php b/typo3conf/ext/numbered_pagination/ext_emconf.php index 33654ef..e42da2d 100644 --- a/typo3conf/ext/numbered_pagination/ext_emconf.php +++ b/typo3conf/ext/numbered_pagination/ext_emconf.php @@ -1,38 +1,22 @@ 'Numbered Pagination', - 'description' => 'Improved pagination for TYPO3 10+', - 'category' => 'fe', - 'version' => '2.0.0', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => true, - 'author' => 'Georg Ringer', - 'author_email' => 'mail@ringer.it', - 'author_company' => NULL, - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '9.5.0-12.4.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), -); - +$EM_CONF[$_EXTKEY] = [ + 'title' => 'Numbered Pagination', + 'description' => 'Improved pagination for TYPO3 10+', + 'category' => 'fe', + 'author' => 'Georg Ringer', + 'author_email' => 'mail@ringer.it', + 'state' => 'stable', + 'clearCacheOnLoad' => true, + 'version' => '2.0.0', + 'constraints' => [ + 'depends' => [ + 'typo3' => '9.5.0-12.4.99', + ], + 'conflicts' => [], + 'suggests' => [], + ], + 'autoload' => [ + 'classmap' => ['Classes'], + ], +]; diff --git a/typo3conf/ext/ods_osm/.editorconfig b/typo3conf/ext/ods_osm/.editorconfig new file mode 100644 index 0000000..bb0a62f --- /dev/null +++ b/typo3conf/ext/ods_osm/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[{*.rst,*.rst.txt}] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 3 +max_line_length = 80 + +# MD-Files +[*.md] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 +max_line_length = 80 diff --git a/typo3conf/ext/ods_osm/.gitignore b/typo3conf/ext/ods_osm/.gitignore new file mode 100644 index 0000000..1ff76ea --- /dev/null +++ b/typo3conf/ext/ods_osm/.gitignore @@ -0,0 +1,21 @@ +.vscode +Documentation-GENERATED-temp + +.Build +.idea +nbproject +.DS_Store +.DS_Store? + +composer.lock +package-lock.json + +/.php_cs +/.php_cs.cache + +.ddev/** +.project/** + +/var +/config +Resources/Private/geophp.phar diff --git a/typo3conf/ext/ods_osm/Resources/Private/geophp.phar b/typo3conf/ext/ods_osm/Resources/Private/geophp.phar deleted file mode 100644 index a1dd48c..0000000 Binary files a/typo3conf/ext/ods_osm/Resources/Private/geophp.phar and /dev/null differ diff --git a/typo3conf/ext/ods_osm/ext_emconf.php b/typo3conf/ext/ods_osm/ext_emconf.php index 9b2cfe6..63138d3 100644 --- a/typo3conf/ext/ods_osm/ext_emconf.php +++ b/typo3conf/ext/ods_osm/ext_emconf.php @@ -1,38 +1,17 @@ 'OpenStreetMap', - 'description' => 'Add an interactive OpenStreetMap map to your website. Can also show other OpenLayers compatible maps.', - 'category' => 'plugin', - 'version' => '4.2.2', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => false, - 'author' => 'Robert Heel', - 'author_email' => 'typo3@bobosch.de', - 'author_company' => NULL, - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '11.5.0-12.4.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), -); - +$EM_CONF[$_EXTKEY] = [ + 'title' => 'OpenStreetMap', + 'description' => 'Add an interactive OpenStreetMap map to your website. Can also show other OpenLayers compatible maps.', + 'author' => 'Robert Heel', + 'author_email' => 'typo3@bobosch.de', + 'category' => 'plugin', + 'constraints' => [ + 'depends' => [ + 'typo3' => '11.5.0-12.4.99', + ], + 'conflicts' => [], + 'suggests' => [], + ], + 'state' => 'stable', + 'version' => '4.2.2', +]; diff --git a/typo3conf/ext/paginatedprocessors/.editorconfig b/typo3conf/ext/paginatedprocessors/.editorconfig new file mode 100644 index 0000000..410d80b --- /dev/null +++ b/typo3conf/ext/paginatedprocessors/.editorconfig @@ -0,0 +1,56 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +# TS/JS-Files +[*.{ts,js}] +indent_size = 2 + +# 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 + +# TypoScript +[*.{typoscript,tsconfig}] +indent_size = 2 + +# XLF-Files +[*.xlf] +indent_style = tab + +# SQL-Files +[*.sql] +indent_style = tab +indent_size = 2 + +# .htaccess +[{_.htaccess,.htaccess}] +indent_style = tab diff --git a/typo3conf/ext/paginatedprocessors/.github/FUNDING.yml b/typo3conf/ext/paginatedprocessors/.github/FUNDING.yml new file mode 100644 index 0000000..9b268cc --- /dev/null +++ b/typo3conf/ext/paginatedprocessors/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# Your support is great help + +github: [t3brightside] diff --git a/typo3conf/ext/paginatedprocessors/.gitignore b/typo3conf/ext/paginatedprocessors/.gitignore new file mode 100644 index 0000000..6509c91 --- /dev/null +++ b/typo3conf/ext/paginatedprocessors/.gitignore @@ -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 diff --git a/typo3conf/ext/paginatedprocessors/ext_emconf.php b/typo3conf/ext/paginatedprocessors/ext_emconf.php index 8be4e18..9cb47aa 100644 --- a/typo3conf/ext/paginatedprocessors/ext_emconf.php +++ b/typo3conf/ext/paginatedprocessors/ext_emconf.php @@ -1,39 +1,24 @@ 'Paginated Processors', - 'description' => 'Data processors with pagination', - 'category' => 'fe', - 'version' => '1.5.1', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => true, - 'author' => 'Tanel Põld', - 'author_email' => 'tanel@brightside.ee', - 'author_company' => 'Brightside OÜ / t3brightside.com', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '11.5.0-12.4.99', - 'embedassets' => '1.2.0-1.99.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), -); - +$EM_CONF[$_EXTKEY] = [ + 'title' => 'Paginated Processors', + 'description' => 'Data processors with pagination', + 'category' => 'fe', + 'author' => 'Tanel Põld', + 'author_email' => 'tanel@brightside.ee', + 'author_company' => 'Brightside OÜ / t3brightside.com', + 'state' => 'stable', + 'clearCacheOnLoad' => true, + 'version' => '1.5.1', + 'constraints' => [ + 'depends' => [ + 'typo3' => '11.5.0-12.4.99', + 'embedassets' => '1.2.0-1.99.99', + ], + ], + 'autoload' => [ + 'psr-4' => [ + 'Brightside\\Paginatedprocessors\\' => 'Classes' + ] + ], +]; diff --git a/typo3conf/ext/pw_teaser/Classes/Controller/TeaserController.php b/typo3conf/ext/pw_teaser/Classes/Controller/TeaserController.php deleted file mode 100644 index 8070dbd..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Controller/TeaserController.php +++ /dev/null @@ -1,429 +0,0 @@ - - * Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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\Configuration\ConfigurationManagerInterface; -use TYPO3\CMS\Extbase\Persistence\QueryInterface; - -/** - * Controller for the teaser object - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class TeaserController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController -{ - /** - * @var array - */ - protected $settings = []; - - /** - * @var integer - */ - protected $currentPageUid = null; - - /** - * @var \PwTeaserTeam\PwTeaser\Domain\Repository\PageRepository - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $pageRepository; - - /** - * @var \PwTeaserTeam\PwTeaser\Domain\Repository\ContentRepository - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $contentRepository; - - /** - * @var \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $categoryRepository; - - /** - * @var \PwTeaserTeam\PwTeaser\Utility\Settings - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $settingsUtility; - - /** - * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer - */ - protected $contentObject = null; - - /** - * @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $signalSlotDispatcher; - - /** - * @var \TYPO3\CMS\Fluid\View\TemplateView - */ - protected $view; - - /** - * @var array - */ - protected $viewSettings = []; - - /** - * Initialize Action will performed before each action will be executed - * - * @return void - */ - public function initializeAction() - { - $this->settings = $this->settingsUtility->renderConfigurationArray($this->settings); - - $frameworkSettings = $this->configurationManager->getConfiguration( - ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK - ); - $viewSettings = $frameworkSettings['view']; - $presets = $viewSettings['presets']; - unset($viewSettings['presets']); - $this->viewSettings = $this->settingsUtility->renderConfigurationArray($viewSettings, 'view.'); - $this->viewSettings['presets'] = $presets; - } - - /** - * Displays teasers - * - * @return void - */ - public function indexAction() - { - $this->currentPageUid = $GLOBALS['TSFE']->id; - - $this->performTemplatePathAndFilename(); - $this->setOrderingAndLimitation(); - $this->performPluginConfigurations(); - - switch ($this->settings['source']) { - default: - case 'thisChildren': - $rootPageUids = $this->currentPageUid; - $pages = $this->pageRepository->findByPid($this->currentPageUid); - break; - - case 'thisChildrenRecursively': - $rootPageUids = $this->currentPageUid; - $pages = $this->pageRepository->findByPidRecursively( - $this->currentPageUid, - (int)$this->settings['recursionDepthFrom'], - (int)$this->settings['recursionDepth'] - ); - break; - - case 'custom': - $rootPageUids = $this->settings['customPages']; - $pages = $this->pageRepository->findByPidList( - $this->settings['customPages'], - $this->settings['orderByPlugin'] - ); - break; - - case 'customChildren': - $rootPageUids = $this->settings['customPages']; - $pages = $this->pageRepository->findChildrenByPidList($this->settings['customPages']); - break; - - case 'customChildrenRecursively': - $rootPageUids = $this->settings['customPages']; - $pages = $this->pageRepository->findChildrenRecursivelyByPidList( - $this->settings['customPages'], - (int)$this->settings['recursionDepthFrom'], - (int)$this->settings['recursionDepth'] - ); - break; - } - - if ($this->settings['pageMode'] !== 'nested') { - $pages = $this->performSpecialOrderings($pages); - } - - /** @var $page \PwTeaserTeam\PwTeaser\Domain\Model\Page */ - foreach ($pages as $page) { - if ($page->getUid() === $this->currentPageUid) { - $page->setIsCurrentPage(true); - } - - // Load contents if enabled in configuration - if ($this->settings['loadContents'] == '1') { - $page->setContents($this->contentRepository->findByPid($page->getUid())); - } - } - - if ($this->settings['pageMode'] === 'nested') { - $pages = $this->convertFlatToNestedPagesArray($pages, $rootPageUids); - } - - $this->signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__ . 'ModifyPages', [&$pages, $this]); - $this->view->assign('pages', $pages); - } - - /** - * Function to sort given pages by recursiveRootLineOrdering string - * - * @param \PwTeaserTeam\PwTeaser\Domain\Model\Page $a - * @param \PwTeaserTeam\PwTeaser\Domain\Model\Page $b - * @return integer - */ - protected function sortByRecursivelySorting( - \PwTeaserTeam\PwTeaser\Domain\Model\Page $a, - \PwTeaserTeam\PwTeaser\Domain\Model\Page $b - ) { - if ($a->getRecursiveRootLineOrdering() == $b->getRecursiveRootLineOrdering()) { - return 0; - } - return ($a->getRecursiveRootLineOrdering() < $b->getRecursiveRootLineOrdering()) ? -1 : 1; - } - - /** - * Sets ordering and limitation settings from $this->settings - * - * @return void - */ - protected function setOrderingAndLimitation() - { - if (!empty($this->settings['orderBy'])) { - if ($this->settings['orderBy'] === 'customField') { - $this->pageRepository->setOrderBy($this->settings['orderByCustomField']); - } else { - $this->pageRepository->setOrderBy($this->settings['orderBy']); - } - } - - if (!empty($this->settings['orderDirection'])) { - $this->pageRepository->setOrderDirection($this->settings['orderDirection']); - } - - if (!empty($this->settings['limit']) && $this->settings['orderBy'] !== 'random') { - $this->pageRepository->setLimit(intval($this->settings['limit'])); - } - } - - /** - * Sets the fluid template to file if file is selected in flexform - * configuration and file exists - * - * @return boolean Returns TRUE if templateType is file and exists, - * otherwise returns FALSE - */ - protected function performTemplatePathAndFilename() - { - $templateType = $this->viewSettings['templateType']; - $templateFile = $this->viewSettings['templateRootFile']; - $layoutRootPaths = $this->viewSettings['layoutRootPaths'] ?: [$this->viewSettings['layoutRootPath'] ?: null]; - $partialRootPaths = $this->viewSettings['partialRootPaths'] ?: [$this->viewSettings['partialRootPath'] ?: null]; - $templateRootPaths = $this->viewSettings['templateRootPaths'] ?: [$this->viewSettings['templateRootPath'] ?: null]; - - $preset = $this->viewSettings['templatePreset'] ?? null; - if ($templateType === 'preset' && !empty($preset)) { - $currentPreset = $this->viewSettings['presets'][$preset]; - if (array_key_exists('partialRootPaths', $currentPreset) && !empty($currentPreset['partialRootPaths'])) { - $partialRootPaths = $currentPreset['partialRootPaths']; - } - if (array_key_exists('layoutRootPaths', $currentPreset) && !empty($currentPreset['layoutRootPaths'])) { - $layoutRootPaths = $currentPreset['layoutRootPaths']; - } - $templateType = 'file'; - $templateFile = $currentPreset['templateRootFile']; - } - - if ($templateType !== 'preset' && $templateRootPaths !== [null] && !empty($templateRootPaths)) { - if (!file_exists(GeneralUtility::getFileAbsFileName(reset($templateRootPaths)))) { - throw new \Exception('Template folder "' . reset($templateRootPaths) . '" not found!'); - } - $this->view->setTemplateRootPaths($templateRootPaths); - } - - if ($layoutRootPaths !== [null] && !empty($layoutRootPaths)) { - if (!file_exists(GeneralUtility::getFileAbsFileName(reset($layoutRootPaths)))) { - throw new \Exception('Layout folder "' . reset($layoutRootPaths) . '" not found!'); - } - $this->view->setLayoutRootPaths($layoutRootPaths); - } - if ($partialRootPaths !== [null] && !empty($partialRootPaths)) { - if (!file_exists(GeneralUtility::getFileAbsFileName(reset($partialRootPaths)))) { - throw new \Exception('Partial folder "' . reset($partialRootPaths) . '" not found!'); - } - $this->view->setPartialRootPaths($partialRootPaths); - } - if ($templateType === 'file' && - !empty($templateFile) && - file_exists(GeneralUtility::getFileAbsFileName($templateFile)) - ) { - $this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templateFile)); - return true; - } - - $templatePathAndFilename = $this->viewSettings['templatePathAndFilename'] ?? ''; - if ($templateType === null && !empty($templatePathAndFilename) - && file_exists(GeneralUtility::getFileAbsFileName($templatePathAndFilename))) { - $this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($templatePathAndFilename)); - return true; - } - return false; - } - - /** - * Performs configurations from plugin settings (flexform) - * - * @return void - */ - protected function performPluginConfigurations() - { - // Set ShowNavHiddenItems to TRUE - $this->pageRepository->setShowNavHiddenItems(($this->settings['showNavHiddenItems'] == '1')); - $this->pageRepository->setFilteredDokType( - GeneralUtility::trimExplode( - ',', - $this->settings['showDoktypes'], - true - ) - ); - - if ($this->settings['hideCurrentPage'] == '1') { - $this->pageRepository->setIgnoreOfUid($this->currentPageUid); - } - - if ($this->settings['ignoreUids']) { - $ignoringUids = GeneralUtility::trimExplode(',', $this->settings['ignoreUids'], true); - array_map([$this->pageRepository, 'setIgnoreOfUid'], $ignoringUids); - } - - if ($this->settings['categoriesList'] && $this->settings['categoryMode']) { - $categories = []; - foreach (GeneralUtility::intExplode(',', $this->settings['categoriesList'], true) as $categoryUid) { - $categories[] = $this->categoryRepository->findByUid($categoryUid); - } - - switch ((int)$this->settings['categoryMode']) { - case \PwTeaserTeam\PwTeaser\Domain\Repository\PageRepository::CATEGORY_MODE_OR: - case \PwTeaserTeam\PwTeaser\Domain\Repository\PageRepository::CATEGORY_MODE_OR_NOT: - $isAnd = false; - break; - default: - $isAnd = true; - } - switch ((int)$this->settings['categoryMode']) { - case \PwTeaserTeam\PwTeaser\Domain\Repository\PageRepository::CATEGORY_MODE_AND_NOT: - case \PwTeaserTeam\PwTeaser\Domain\Repository\PageRepository::CATEGORY_MODE_OR_NOT: - $isNot = true; - break; - default: - $isNot = false; - } - $this->pageRepository->addCategoryConstraint($categories, $isAnd, $isNot); - } - - if ($this->settings['source'] === 'custom') { - $this->settings['pageMode'] = 'flat'; - } - - if ($this->settings['pageMode'] === 'nested') { - $this->settings['recursionDepthFrom'] = 0; - $this->settings['orderBy'] = 'uid'; - $this->settings['limit'] = 0; - } - } - - /** - * Performs special orderings like "random" or "sorting" - * - * @param array $pages - * @return array - */ - protected function performSpecialOrderings(array $pages) - { - // Make random if selected on queryResult, cause Extbase doesn't support it - if ($this->settings['orderBy'] === 'random') { - shuffle($pages); - if (!empty($this->settings['limit'])) { - $pages = array_slice($pages, 0, $this->settings['limit']); - } - } - - if ($this->settings['orderBy'] === 'sorting' && strpos($this->settings['source'], 'Recursively') !== false) { - usort($pages, [$this, 'sortByRecursivelySorting']); - if (strtolower($this->settings['orderDirection']) === strtolower(QueryInterface::ORDER_DESCENDING)) { - $pages = array_reverse($pages); - } - if (!empty($this->settings['limit'])) { - $pages = array_slice($pages, 0, $this->settings['limit']); - return $pages; - } - return $pages; - } - return $pages; - } - - /** - * Converts given pages array (flat) to nested one - * - * @param array $pages - * @param string $rootPageUids Comma separated list of page uids - * @return array - */ - protected function convertFlatToNestedPagesArray($pages, $rootPageUids) - { - $rootPageUidArray = GeneralUtility::intExplode(',', $rootPageUids); - $rootPages = []; - foreach ($rootPageUidArray as $rootPageUid) { - $page = $this->pageRepository->findByUid($rootPageUid); - $this->fillChildPagesRecursivley($page, $pages); - $rootPages[] = $page; - } - return $rootPages; - } - - /** - * Fills given parentPage's childPages attribute recursively with pages - * - * @param \PwTeaserTeam\PwTeaser\Domain\Model\Page $parentPage - * @param array $pages - * @return \PwTeaserTeam\PwTeaser\Domain\Model\Page - */ - protected function fillChildPagesRecursivley($parentPage, array $pages) - { - $childPages = []; - /** @var $page \PwTeaserTeam\PwTeaser\Domain\Model\Page */ - foreach ($pages as $page) { - if ($page->getPid() === $parentPage->getUid()) { - $this->fillChildPagesRecursivley($page, $pages); - $childPages[$page->getSorting()] = $page; - } - } - ksort($childPages); - $parentPage->setChildPages(array_values($childPages)); - return $parentPage; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/Domain/Model/Content.php b/typo3conf/ext/pw_teaser/Classes/Domain/Model/Content.php deleted file mode 100644 index f35a61f..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Domain/Model/Content.php +++ /dev/null @@ -1,323 +0,0 @@ - - * Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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\Domain\Model\Category; -use TYPO3\CMS\Extbase\Domain\Model\FileReference; -use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; -use TYPO3\CMS\Extbase\Persistence\ObjectStorage; -use TYPO3\CMS\Frontend\Page\PageRepository; - -/** - * Content model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class Content extends AbstractEntity -{ - - /** - * ctype - * - * @var string - */ - protected $ctype; - - /** - * colPos - * - * @var integer - */ - protected $colPos; - - /** - * header - * - * @var string - */ - protected $header; - - /** - * bodytext - * - * @var string - */ - protected $bodytext; - - /** - * It may contain multiple images, but TYPO3 called this field just "image" - * - * @var ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> - */ - protected $image; - - /** - * Categories - * - * @var ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\Category> - */ - protected $categories; - - /** - * Complete row (from database) of this content element - * - * @var array - */ - protected $contentRow; - - /** - * Constructor - */ - public function __construct() - { - $this->image = new ObjectStorage(); - } - - /** - * Setter for images - * - * @param ObjectStorage $image - * @return void - */ - public function setImage(ObjectStorage $image) - { - $this->image = $image; - } - - /** - * Getter for images - * - * @return ObjectStorage images - */ - public function getImage() - { - return $this->image; - } - - /** - * Add image - * - * @param FileReference $image - * @return void - */ - public function addImage(FileReference $image) - { - $this->image->attach($image); - } - - /** - * Remove image - * - * @param FileReference $image - * @return void - */ - public function removeImage(FileReference $image) - { - $this->image->detach($image); - } - - /** - * Returns image files as array (with all attributes) - * - * @return array - */ - public function getImageFiles() - { - $imageFiles = []; - /** @var FileReference $image */ - foreach ($this->getImage() as $image) { - $imageFiles[] = $image->getOriginalResource()->toArray(); - } - return $imageFiles; - } - - /** - * Setter for bodytext - * - * @param string $bodytext bodytext - * @return void - */ - public function setBodytext($bodytext) - { - $this->bodytext = $bodytext; - } - - /** - * Getter for bodytext - * - * @return string bodytext - */ - public function getBodytext() - { - return $this->bodytext; - } - - /** - * Setter for ctype - * - * @param string $ctype ctype - * @return void - */ - public function setCtype($ctype) - { - $this->ctype = $ctype; - } - - /** - * Getter for ctype - * - * @return string ctype - */ - public function getCtype() - { - return $this->ctype; - } - - /** - * Setter for colPos - * - * @param integer $colPos colPos - * @return void - */ - public function setColPos($colPos) - { - $this->colPos = $colPos; - } - - /** - * Getter for colPos - * - * @return integer colPos - */ - public function getColPos() - { - return $this->colPos; - } - - /** - * Setter for header - * - * @param string $header header - * @return void - */ - public function setHeader($header) - { - $this->header = $header; - } - - /** - * Getter for header - * - * @return string header - */ - public function getHeader() - { - return $this->header; - } - - /** - * Getter for categories - * - * @return ObjectStorage - */ - public function getCategories() - { - return $this->categories; - } - - /** - * Setter for categories - * - * @param ObjectStorage $categories - * @return void - */ - public function setCategories($categories) - { - $this->categories = $categories; - } - - /** - * Add category - * - * @param Category $category - * @return void - */ - public function addCategory(Category $category) - { - $this->categories->attach($category); - } - - /** - * Remove category - * - * @param Category $category - * @return void - */ - public function removeCategory(Category $category) - { - $this->categories->detach($category); - } - - /** - * Checks for attribute in _contentRow - * - * @param string $name Name of unknown method - * @param array arguments Arguments of call - * @return mixed - */ - public function __call($name, $arguments) - { - if (substr(strtolower($name), 0, 3) == 'get' && strlen($name) > 3) { - $attributeName = lcfirst(substr($name, 3)); - - if (empty($this->contentRow)) { - /** @var PageRepository $pageSelect */ - $pageSelect = $GLOBALS['TSFE']->sys_page; - $contentRow = $pageSelect->getRawRecord('tt_content', $this->getUid()); - foreach ($contentRow as $key => $value) { - $this->contentRow[GeneralUtility::underscoredToLowerCamelCase($key)] = $value; - } - } - if (isset($this->contentRow[$attributeName])) { - return $this->contentRow[$attributeName]; - } - } - } - - /** - * Get raw content row - * - * @return array - */ - public function getContentRow() - { - return $this->contentRow; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/Domain/Model/Page.php b/typo3conf/ext/pw_teaser/Classes/Domain/Model/Page.php deleted file mode 100644 index 79c3110..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Domain/Model/Page.php +++ /dev/null @@ -1,922 +0,0 @@ - - * 2016 Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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! - ***************************************************************/ - -/** - * Page model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class Page extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity -{ - /** Translation constant: Show page always */ - const L18N_SHOW_ALWAYS = 0; - /** Translation constant: Hide page on default language */ - const L18N_HIDE_DEFAULT_LANGUAGE = 1; - /** Translation constant: Hide page on foreign language if no translation exists */ - const L18N_HIDE_IF_NO_TRANSLATION_EXISTS = 2; - /** Translation constant: Hide page always, but show on foreign langauge if translation exists */ - const L18N_HIDE_ALWAYS_BUT_TRANSLATION_EXISTS = 3; - - /** - * doktype - * - * @var integer - */ - protected $doktype; - - /** - * isCurrentPage - * - * @var boolean - */ - protected $isCurrentPage = false; - - /** - * title - * - * @var string - * @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty") - */ - protected $title; - - /** - * subtitle - * - * @var string - */ - protected $subtitle; - - /** - * navTitle - * - * @var string - */ - protected $navTitle; - - /** - * meta keywords - * - * @var string - */ - protected $keywords; - - /** - * meta description - * - * @var string - */ - protected $description; - - /** - * abstract - * - * @var string - */ - protected $abstract; - - /** - * alias - * - * @var string - */ - protected $alias; - - /** - * media - * - * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> - */ - protected $media; - - /** - * sorting - * - * @var integer - */ - protected $sorting; - - /** - * creation date (crdate) - * - * @var integer - */ - protected $creationDate; - - /** - * timestamp (tstamp) - * - * @var integer - */ - protected $tstamp; - - /** - * lastUpdated - * - * @var integer - */ - protected $lastUpdated; - - /** - * start time - * - * @var integer - */ - protected $starttime; - - /** - * end time - * - * @var integer - */ - protected $endtime; - - /** - * new until - * - * @var integer - */ - protected $newUntil; - - /** - * author - * - * @var string - */ - protected $author; - - /** - * author email - * - * @var string - */ - protected $authorEmail; - - /** - * contents - * - * @var array<\PwTeaserTeam\PwTeaser\Domain\Model\Content> - */ - protected $contents; - - /** - * Categories - * - * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\Category> - */ - protected $categories; - - /** - * @var integer - */ - protected $l18nConfiguration; - - /** - * Child pages - * - * @var array - */ - protected $childPages = []; - - /** - * Custom Attributes - * which can be set by hooks - * - * @var array - */ - protected $customAttributes = []; - - /** - * Complete row (from database) of this page - * - * @var array - */ - protected $pageRow = null; - - /** - * @var \TYPO3\CMS\Core\Resource\FileRepository - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $fileRepository; - - /** - * Sets a custom attribute - * - * @param string $key The name of the attribute - * @param mixed $value Attribute's value - * - * @return void - */ - public function setCustomAttribute($key, $value) - { - $this->customAttributes[$key] = $value; - } - - /** - * Returns the value of a custom attribute - * - * @param string $key Name of attribute - * @return mixed The value of a custom attribute - */ - public function getCustomAttribute($key) - { - if (!empty($key) && $this->hasCustomAttribute($key)) { - return $this->customAttributes[$key]; - } - return null; - } - - /** - * Checks if given custom attribute has been set - * - * @param string $key - * @return bool - */ - public function hasCustomAttribute($key) - { - return isset($this->customAttributes[$key]); - } - - /** - * @return array - */ - public function getGet(): array - { - if (empty($this->pageRow)) { - /** @var \TYPO3\CMS\Frontend\Page\PageRepository $pageSelect */ - $pageSelect = $GLOBALS['TSFE']->sys_page; - $pageRow = $pageSelect->getPage($this->getUid()); - foreach ($pageRow as $key => $value) { - $this->pageRow[GeneralUtility::underscoredToLowerCamelCase($key)] = $value; - } - } - return array_merge($this->customAttributes, $this->pageRow); - } - - /** - * Checks for attribute in _customAttributes and _pageRow - * - * @param string $name Name of unknown method - * @param array arguments Arguments of call - * @return mixed - * @deprecated Use getGet() instead (in fluid template: {page.get.attributeName}) - */ - public function __call($name, $arguments) - { - if (substr(strtolower($name), 0, 3) === 'get' && strlen($name) > 3) { - $attributeName = lcfirst(substr($name, 3)); - return $this->getGet()[$attributeName]; - } - } - - /** - * Constructor - */ - public function __construct() - { - $this->categories = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); - $this->media = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); - } - - /** - * Setter for contents - * - * @param array <\PwTeaserTeam\PwTeaser\Domain\Model\Content> $contents array of contents - * @return void - */ - public function setContents($contents) - { - $this->contents = $contents; - } - - /** - * Getter for contents - * - * @return array<\PwTeaserTeam\PwTeaser\Domain\Model\Content> contents - */ - public function getContents() - { - return $this->contents; - } - - /** - * Getter for isCurrentPage - * - * @return boolean - */ - public function getIsCurrentPage() - { - return $this->isCurrentPage; - } - - /** - * Setter for isCurrentPage - * - * @param boolean $isCurrentPage - * @return void - */ - public function setIsCurrentPage($isCurrentPage) - { - $this->isCurrentPage = $isCurrentPage; - } - - /** - * Setter for authorEmail - * - * @param string $authorEmail authorEmail - * @return void - */ - public function setAuthorEmail($authorEmail) - { - $this->authorEmail = $authorEmail; - } - - /** - * Getter for authorEmail - * - * @return string authorEmail - */ - public function getAuthorEmail() - { - return $this->authorEmail; - } - - /** - * Setter for keywords - * - * @param string $keywords keywords - * @return void - */ - public function setKeywords($keywords) - { - $this->keywords = $keywords; - } - - /** - * Getter for keywords - * - * @return array array of keywords - */ - public function getKeywords() - { - return (GeneralUtility::trimExplode(',', $this->keywords, true)); - } - - /** - * Getter for keywords. Returns a string - * - * @return string keywords as string - */ - public function getKeywordsAsString() - { - return $this->keywords; - } - - /** - * Setter for description - * - * @param string $description description - * @return void - */ - public function setDescription($description) - { - $this->description = $description; - } - - /** - * Getter for description - * - * @return string description - */ - public function getDescription() - { - return $this->description; - } - - /** - * Setter for alias - * - * @param string $alias alias - * @return void - */ - public function setAlias($alias) - { - $this->alias = $alias; - } - - /** - * Getter for alias - * - * @return string alias - */ - public function getAlias() - { - return $this->alias; - } - - /** - * Setter for navTitle - * - * @param string $navTitle navTitle - * @return void - */ - public function setNavTitle($navTitle) - { - $this->navTitle = $navTitle; - } - - /** - * Getter for navTitle - * - * @return string navTitle - */ - public function getNavTitle() - { - return $this->navTitle; - } - - /** - * Setter for abstract - * - * @param string $abstract abstract - * @return void - */ - public function setAbstract($abstract) - { - $this->abstract = $abstract; - } - - /** - * Getter for abstract - * - * @return string abstract - */ - public function getAbstract() - { - return $this->abstract; - } - - /** - * Setter for subtitle - * - * @param string $subtitle subtitle - * @return void - */ - public function setSubtitle($subtitle) - { - $this->subtitle = $subtitle; - } - - /** - * Getter for subtitle - * - * @return string subtitle - */ - public function getSubtitle() - { - return $this->subtitle; - } - - /** - * Setter for title - * - * @param string $title title - * @return void - */ - public function setTitle($title) - { - $this->title = $title; - } - - /** - * Getter for title - * - * @return string title - */ - public function getTitle() - { - return $this->title; - } - - /** - * Setter for media - * - * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $media - * @return void - */ - public function setMedia(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $media) - { - $this->media = $media; - } - - /** - * Getter for media (returns FileReference objects) - * - * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> - */ - public function getMedia() - { - return $this->media; - } - - /** - * Add single medium - * - * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $medium - * @return void - */ - public function addMedium(\TYPO3\CMS\Extbase\Domain\Model\FileReference $medium) - { - $this->media->attach($medium); - } - - /** - * Removes single medium - * - * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $medium - * @return void - */ - public function removeMedium(\TYPO3\CMS\Extbase\Domain\Model\FileReference $medium) - { - $this->media->detach($medium); - } - - /** - * Returns media files as array (with all attributes) - * - * @return array - * @deprecated Use media attribute instead - */ - public function getMediaFiles() - { - GeneralUtility::deprecationLog( - 'Please don\'t use {page.mediaFiles} anymore in your pw_teaser templates. Use {page.media} instead.' - ); - return $this->getMedia()->toArray(); - } - - /** - * Setter for newUntil - * - * @param integer $newUntil newUntil - * @return void - */ - public function setNewUntil($newUntil) - { - $this->newUntil = $newUntil; - } - - /** - * Getter for newUntil - * - * @return integer newUntil - */ - public function getNewUntil() - { - return $this->newUntil; - } - - /** - * Return TRUE if the page is marked as new - * - * @return boolean TRUE if the page is marked as new, otherwise FALSE - */ - public function getIsNew() - { - if (!empty($this->newUntil) && $this->newUntil !== 0) { - return $this->newUntil < time(); - } - return false; - } - - /** - * Setter for creationDate (crdate) - * - * @param integer $creationDate creationDate - * @return void - */ - public function setCreationDate($creationDate) - { - $this->creationDate = $creationDate; - } - - /** - * Getter for creationDate (crdate) - * - * @return integer creationDate - */ - public function getCreationDate() - { - return $this->creationDate; - } - - /** - * Setter for tstamp - * - * @param integer $tstamp tstamp - * @return void - */ - public function setTstamp($tstamp) - { - $this->tstamp = $tstamp; - } - - /** - * Getter for tstamp - * - * @return integer tstamp - */ - public function getTstamp() - { - return $this->tstamp; - } - - /** - * Setter for lastUpdated - * - * @param integer $lastUpdated lastUpdated - * @return void - */ - public function setLastUpdated($lastUpdated) - { - $this->lastUpdated = $lastUpdated; - } - - /** - * Getter for lastUpdated - * - * @return integer lastUpdated - */ - public function getLastUpdated() - { - return $this->lastUpdated; - } - - /** - * Setter for starttime - * - * @param integer $starttime - * @return void - */ - public function setStarttime($starttime) - { - $this->starttime = $starttime; - } - - /** - * Getter for starttime - * - * @return integer starttime - */ - public function getStarttime() - { - return $this->starttime; - } - - /** - * Getter for endtime - * - * @return integer endtime - */ - public function getEndtime() - { - return $this->endtime; - } - - /** - * Setter for endtime - * - * @param integer $endtime endtime - * @return void - */ - public function setEndtime($endtime) - { - $this->endtime = $endtime; - } - - /** - * Getter for author - * - * @return string author - */ - public function getAuthor() - { - return $this->author; - } - - /** - * Setter for author - * - * @param string $author author - * @return void - */ - public function setAuthor($author) - { - $this->author = $author; - } - - /** - * Getter for doktype - * - * @return integer the doktype - */ - public function getDoktype() - { - return $this->doktype; - } - - /** - * Setter for doktype - * - * @param integer $doktype the doktype - * @return void - */ - public function setDoktype($doktype) - { - $this->doktype = $doktype; - } - - /** - * Getter for l18nConfiguration - * - * @return integer - */ - public function getL18nConfiguration() - { - return $this->l18nConfiguration; - } - - /** - * Setter for l18nConfiguration - * - * @param integer $l18nCfg - * @return void - */ - public function setL18nConfiguration($l18nCfg) - { - $this->l18nConfiguration = $l18nCfg; - } - - /** - * Getter for categories - * - * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage - */ - public function getCategories() - { - return $this->categories; - } - - /** - * Setter for categories - * - * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $categories - * @return void - */ - public function setCategories($categories) - { - $this->categories = $categories; - } - - /** - * Add category - * - * @param \TYPO3\CMS\Extbase\Domain\Model\Category $category - * @return void - */ - public function addCategory(\TYPO3\CMS\Extbase\Domain\Model\Category $category) - { - $this->categories->attach($category); - } - - /** - * Remove category - * - * @param \TYPO3\CMS\Extbase\Domain\Model\Category $category - * @return void - */ - public function removeCategory(\TYPO3\CMS\Extbase\Domain\Model\Category $category) - { - $this->categories->detach($category); - } - - /** - * Returns rootLine of this page - * - * @return array - */ - public function getRootLine() - { - $context = GeneralUtility::makeInstance(Context::class); - /** @var RootlineUtility $rootline */ - $rootline = GeneralUtility::makeInstance(RootlineUtility::class, $this->getUid(), '', $context); - return $rootline->get(); - } - - /** - * Returns amount of parent pages, including this page itself. - * The root page (not id=0) got depth 1. - * - * @return integer - */ - public function getRootLineDepth() - { - return count($this->getRootLine()); - } - - /** - * Returns string of sortings of all root pages including this page. - * - * @return string String with orderings of this page and all root pages - */ - public function getRecursiveRootLineOrdering() - { - $recursiveOrdering = []; - foreach ($this->getRootLine() as $pageRootPart) { - array_unshift($recursiveOrdering, str_pad($pageRootPart['sorting'], 11, '0', STR_PAD_LEFT)); - } - return implode('-', $recursiveOrdering); - } - - /** - * Returns the complete page row (from database) as array - * - * @return array - */ - public function getPageRow() - { - return $this->pageRow; - } - - /** - * Getter for sorting - * - * @return integer - */ - public function getSorting() - { - return $this->sorting; - } - - /** - * Setter for sorting - * - * @param integer $sorting - * @return void - */ - public function setSorting($sorting) - { - $this->sorting = $sorting; - } - - /** - * Getter for child pages - * - * @return array - */ - public function getChildPages() - { - return $this->childPages; - } - - /** - * Setter for child pages - * - * @param array $childPages - * @return void - */ - public function setChildPages(array $childPages) - { - $this->childPages = $childPages; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/Domain/Repository/ContentRepository.php b/typo3conf/ext/pw_teaser/Classes/Domain/Repository/ContentRepository.php deleted file mode 100644 index 4142313..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Domain/Repository/ContentRepository.php +++ /dev/null @@ -1,94 +0,0 @@ - - * 2016 Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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! - ***************************************************************/ - -/** - * Repository for Content model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class ContentRepository extends \TYPO3\CMS\Extbase\Persistence\Repository -{ - - /** - * Initializes the repository. - * - * @return void - * @see \TYPO3\CMS\Extbase\Persistence\Repository::initializeObject() - */ - public function initializeObject() - { - /** @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface $querySettings */ - $querySettings = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface'); - $querySettings->setRespectStoragePage(false); - $this->setDefaultQuerySettings($querySettings); - } - - /** - * Returns all objects of this repository which matches the given pid. This - * overwritten method exists, to perform sorting - * - * @param integer $pid Pid to search for - * @return \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult All found objects, will be - * empty if there are no objects - */ - public function findByPid($pid) - { - $query = $this->createQuery(); - $query->matching($query->equals('pid', $pid)); - $query->setOrderings( - [ - 'sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING - ] - ); - return $query->execute(); - } - - /** - * Returns all objects of this repository which are located inside the - * given pages - * - * @param array <\PwTeaserTeam\PwTeaser\Domain\Model\Page> $pages Pages to get content elements - * @return \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult All found objects, will be - * empty if there are no objects - */ - public function findByPages($pages) - { - $query = $this->createQuery(); - $constraint = []; - - foreach ($pages as $page) { - $constraint[] = $query->equals('pid', $page->getUid()); - } - - $query->matching($query->logicalOr($constraint)); - - return $query->execute(); - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/Domain/Repository/PageRepository.php b/typo3conf/ext/pw_teaser/Classes/Domain/Repository/PageRepository.php deleted file mode 100644 index cd045dc..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Domain/Repository/PageRepository.php +++ /dev/null @@ -1,456 +0,0 @@ - - * 2016 Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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 PwTeaserTeam\PwTeaser\Domain\Model\Page; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Repository for Page model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class PageRepository extends \TYPO3\CMS\Extbase\Persistence\Repository -{ - /** Category Mode: Or */ - const CATEGORY_MODE_OR = 1; - /** Category Mode: And */ - const CATEGORY_MODE_AND = 2; - /** Category Mode: Or Not */ - const CATEGORY_MODE_OR_NOT = 3; - /** Category Mode: And Not */ - const CATEGORY_MODE_AND_NOT = 4; - - /** - * page attribute to order by - * - * @var string - */ - protected $orderBy = 'uid'; - - /** - * Direction to order. Default is ascending. - * - * @var string - */ - protected $orderDirection = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING; - - /** - * @var \TYPO3\CMS\Extbase\Persistence\QueryInterface - */ - protected $query = null; - - /** - * @var array - */ - protected $queryConstraints = []; - - /** - * Initializes the repository. - * - * @return void - * @see \TYPO3\CMS\Extbase\Persistence\Repository::initializeObject() - */ - public function initializeObject() - { - /** @var \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface $querySettings */ - $querySettings = $this->objectManager->get('TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface'); - $querySettings->setRespectStoragePage(false); - $this->setDefaultQuerySettings($querySettings); - $this->query = $this->createQuery(); - } - - /** - * Returns all objects of this repository which match the pid - * - * @param integer $pid the pid to search for - * @return array All found pages, will be empty if the result is empty - */ - public function findByPid($pid) - { - $this->addQueryConstraint($this->query->equals('pid', $pid)); - return $this->executeQuery(); - } - - /** - * Returns all objects of this repository which are children of the matched - * pid (recursively) - * - * @param integer $pid the pid to search for recursively - * @param integer $recursionDepthFrom Start of recursion depth - * @param integer $recursionDepth Depth of recursion - * @return array All found pages, will be empty if the result is empty - */ - public function findByPidRecursively($pid, $recursionDepthFrom, $recursionDepth) - { - return $this->findChildrenRecursivelyByPidList($pid, $recursionDepthFrom, $recursionDepth); - } - - /** - * Returns all objects of this repository which are in the pidlist - * - * @param string $pidlist comma seperated list of pids to search for - * @param boolean $orderByPlugin setting of ordering by plugin - * @return array All found pages, will be empty if the result is empty - */ - public function findByPidList($pidlist, $orderByPlugin = false) - { - $pagePids = GeneralUtility::intExplode(',', $pidlist, true); - - // early return when list is empty to prevent sql exception - if (empty($pagePids)) { - return []; - } - - $query = $this->query; - $this->addQueryConstraint($query->in('uid', $pagePids)); - $query->matching($query->logicalAnd($this->queryConstraints)); - - if ($orderByPlugin == false) { - $this->handleOrdering($query); - $results = $query->execute(); - $this->resetQuery(); - return $this->handlePageLocalization($results); - } else { - $results = $query->execute(); - $this->resetQuery(); - return $this->orderByPlugin($pagePids, $this->handlePageLocalization($results)); - } - } - - /** - * Creates array of result items, with the order of given pagePids - * - * @param array $pagePids pagePids to order for - * @param array $results results to reorder - * @return array results ordered by plugin - */ - protected function orderByPlugin(array $pagePids, array $results) - { - $sortedResults = []; - foreach ($pagePids as $pagePid) { - foreach ($results as $result) { - if ($pagePid === $result->getUid()) { - $sortedResults[] = $result; - continue; - } - } - } - return $sortedResults; - } - - /** - * Returns all objects of this repository which are in the pidlist - * - * @param string $pidlist comma seperated list of pids to search for - * @return array All found pages, will be empty if the result is empty - */ - public function findChildrenByPidList($pidlist) - { - $pagePids = GeneralUtility::intExplode(',', $pidlist, true); - - // early return when list is empty to prevent sql exception - if (empty($pagePids)) { - return []; - } - - $this->addQueryConstraint($this->query->in('pid', $pagePids)); - return $this->executeQuery(); - } - - /** - * Returns all objects of this repository which are children of pages in the - * pidlist (recursively) - * - * @param string $pidlist comma seperated list of pids to search for - * @param integer $recursionDepthFrom Start level for recursion - * @param integer $recursionDepth Depth of recursion - * @return array All found pages, will be empty if the result is empty - */ - public function findChildrenRecursivelyByPidList($pidlist, $recursionDepthFrom, $recursionDepth) - { - $pagePids = $this->getRecursivePageList($pidlist, $recursionDepthFrom, $recursionDepth); - - $this->addQueryConstraint($this->query->in(($recursionDepthFrom === 0) ? 'pid' : 'uid', $pagePids)); - return $this->executeQuery(); - } - - /** - * Adds query constraint to array - * - * @param \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface $constraint Constraint to add - * @return void - */ - protected function addQueryConstraint(\TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface $constraint) - { - $this->queryConstraints[] = $constraint; - } - - /** - * Add category constraint - * - * @param array $categories - * @param boolean $isAnd If TRUE categories get a logicalAnd. Otherwise a logicalOr. - * @param boolean $isNot If TRUE categories get a logicalNot operator. Otherwise not. - * @return void - */ - public function addCategoryConstraint(array $categories, $isAnd = true, $isNot = false) - { - if ($isAnd === true && $isNot === false) { - $this->queryConstraints[] = $this->query->logicalAnd($this->buildCategoryConstraint($categories)); - } - if ($isAnd === true && $isNot === true) { - $this->queryConstraints[] = $this->query->logicalNot( - $this->query->logicalAnd( - $this->buildCategoryConstraint($categories) - ) - ); - } - if ($isAnd === false && $isNot === false) { - $this->queryConstraints[] = $this->query->logicalOr($this->buildCategoryConstraint($categories)); - } - if ($isAnd === false && $isNot === true) { - $this->queryConstraints[] = $this->query->logicalNot( - $this->query->logicalOr( - $this->buildCategoryConstraint($categories) - ) - ); - } - } - - /** - * Build category constraint for each category (contains) - * - * @param array $categories - * @return array - */ - protected function buildCategoryConstraint(array $categories) - { - $contraints = []; - foreach ($categories as $category) { - $contraints[] = $this->query->contains('categories', $category); - } - return $contraints; - } - - /** - * Finalize given query constraints and executes the query - * - * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface Result of query - */ - protected function executeQuery() - { - $query = $this->query; - $query->matching($query->logicalAnd($this->queryConstraints)); - $this->handleOrdering($query); - - $queryResult = $query->execute(); - $this->resetQuery(); - - $queryResult = $this->handlePageLocalization($queryResult); - return $queryResult; - } - - /** - * Handles page localization - * - * @param \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult $pages - * @return array<\PwTeaserTeam\PwTeaser\Domain\Model\Page> - */ - protected function handlePageLocalization(\TYPO3\CMS\Extbase\Persistence\Generic\QueryResult $pages) - { - /** @var Context $context */ - $context = GeneralUtility::makeInstance(Context::class); - $currentLangUid = $context->getPropertyFromAspect('language', 'id'); - $displayedPages = []; - - /** @var Page $page */ - foreach ($pages as $page) { - if ($currentLangUid === 0) { - if ($page->getL18nConfiguration() !== Page::L18N_HIDE_DEFAULT_LANGUAGE && - $page->getL18nConfiguration() !== Page::L18N_HIDE_ALWAYS_BUT_TRANSLATION_EXISTS) { - $displayedPages[] = $page; - } - } else { - /** @var \TYPO3\CMS\Frontend\Page\PageRepository $pageSelect */ - $pageSelect = $GLOBALS['TSFE']->sys_page; - $pageRowWithOverlays = $pageSelect->getPage($page->getUid()); - - if ((boolean)$GLOBALS['TYPO3_CONF_VARS']['FE']['hidePagesIfNotTranslatedByDefault'] === false) { - if (!($page->getL18nConfiguration() === Page::L18N_HIDE_IF_NO_TRANSLATION_EXISTS || - $page->getL18nConfiguration() === Page::L18N_HIDE_ALWAYS_BUT_TRANSLATION_EXISTS) || - isset($pageRowWithOverlays['_PAGES_OVERLAY'])) { - $displayedPages[] = $page; - } - } else { - if (($page->getL18nConfiguration() === Page::L18N_HIDE_IF_NO_TRANSLATION_EXISTS || - $page->getL18nConfiguration() === Page::L18N_HIDE_ALWAYS_BUT_TRANSLATION_EXISTS) && - !isset($pageRowWithOverlays['_PAGES_OVERLAY']) || - isset($pageRowWithOverlays['_PAGES_OVERLAY'])) { - $displayedPages[] = $page; - } - } - } - } - return $displayedPages; - } - - /** - * Get subpages recursivley of given pid(s). - * - * @param string $pidlist List of pageUids to get subpages of. May contain a single uid. - * @param integer $recursionDepthFrom Start of recursion depth - * @param integer $recursionDepth Depth of recursion - * @return array Found subpages, recursivley - */ - protected function getRecursivePageList($pidlist, $recursionDepthFrom, $recursionDepth) - { - /** @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer $contentObjectRenderer */ - $contentObjectRenderer = GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer'); - - $pagePids = []; - $pids = GeneralUtility::intExplode(',', $pidlist, true); - foreach ($pids as $pid) { - $pageList = GeneralUtility::intExplode( - ',', - $contentObjectRenderer->getTreeList($pid, $recursionDepth, $recursionDepthFrom), - true - ); - $pagePids = array_merge($pagePids, $pageList); - if ($recursionDepthFrom === 0) { - array_unshift($pagePids, $pid); - } - } - return array_unique($pagePids); - } - - /** - * Sets the order by which is used by all find methods - * - * @param string $orderBy property to order by - * @return void - */ - public function setOrderBy($orderBy) - { - if ($orderBy !== 'random') { - $this->orderBy = $orderBy; - } - } - - /** - * Sets the order direction which is used by all find methods - * - * @param string $orderDirection the direction to order, may be desc or asc - * @return void - */ - public function setOrderDirection($orderDirection) - { - if ($orderDirection == 'desc' || $orderDirection == 1) { - $this->orderDirection = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING; - } else { - $this->orderDirection = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING; - } - } - - /** - * Sets the query limit - * - * @param integer $limit The limit of elements to show - * @return void - */ - public function setLimit($limit) - { - $this->query->setLimit($limit); - } - - /** - * Sets the nav_hide_state flag - * - * @param boolean $showNavHiddenItems If TRUE lets show items which should not be visible in navigation. - * Default is FALSE. - * @return void - */ - public function setShowNavHiddenItems($showNavHiddenItems) - { - if ($showNavHiddenItems === true) { - $this->addQueryConstraint($this->query->in('nav_hide', [0, 1])); - } else { - $this->addQueryConstraint($this->query->in('nav_hide', [0])); - } - } - - /** - * Sets doktypes to filter for - * - * @param array $dokTypesToFilterFor doktypes as array, may be empty - * @return void - */ - public function setFilteredDokType(array $dokTypesToFilterFor) - { - if (count($dokTypesToFilterFor) > 0) { - $this->addQueryConstraint($this->query->in('doktype', $dokTypesToFilterFor)); - } - } - - /** - * Ignores given uid - * - * @param integer $currentPageUid Uid to ignore - * @return void - */ - public function setIgnoreOfUid($currentPageUid) - { - $this->addQueryConstraint($this->query->logicalNot($this->query->equals('uid', $currentPageUid))); - } - - /** - * Adds handle of ordering to query object - * - * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query - * @return void - */ - protected function handleOrdering(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query) - { - $query->setOrderings([$this->orderBy => $this->orderDirection]); - } - - /** - * Resets query and queryConstraints after execution - * - * @return void - */ - protected function resetQuery() - { - unset($this->query); - $this->query = $this->createQuery(); - unset($this->queryConstraints); - $this->queryConstraints = []; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/UserFunction/ItemsProcFunc.php b/typo3conf/ext/pw_teaser/Classes/UserFunction/ItemsProcFunc.php deleted file mode 100644 index 87e9b8a..0000000 --- a/typo3conf/ext/pw_teaser/Classes/UserFunction/ItemsProcFunc.php +++ /dev/null @@ -1,20 +0,0 @@ -get(ConfigurationManager::class); - $config = $configurationManager->getConfiguration(ConfigurationManager::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); - $presets = $config['plugin.']['tx_pwteaser.']['view.']['presets.'] ?? []; - foreach ($presets as $key => $preset) { - $parameters['items'][] = [$preset['label'], rtrim($key, '.')]; - } - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/Utility/Settings.php b/typo3conf/ext/pw_teaser/Classes/Utility/Settings.php deleted file mode 100644 index c8643a5..0000000 --- a/typo3conf/ext/pw_teaser/Classes/Utility/Settings.php +++ /dev/null @@ -1,140 +0,0 @@ - - * Benjamin Schulte - * - * 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 2 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! - ***************************************************************/ - -/** - * This class provides some methods to prepare and render given extension settings - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class Settings -{ - /** - * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer - */ - protected $contentObject; - - /** - * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $configurationManager = null; - - /** - * Initialize this settings utility - * - * @return void - */ - public function initializeObject() - { - $this->contentObject = $this->configurationManager->getContentObject(); - } - - /** - * Renders a given typoscript configuration and returns the whole array with - * calculated values. - * - * @param array $settings the typoscript configuration array - * @param string $section - * @return array the configuration array with the rendered typoscript - */ - public function renderConfigurationArray(array $settings, string $section = 'settings.') - { - $settings = $this->enhanceSettingsWithTypoScript($this->makeConfigurationArrayRenderable($settings), $section); - $result = []; - - foreach ($settings as $key => $value) { - if (substr($key, -1) === '.') { - $keyWithoutDot = substr($key, 0, -1); - if (array_key_exists($keyWithoutDot, $settings)) { - $result[$keyWithoutDot] = $this->contentObject->cObjGetSingle($settings[$keyWithoutDot], $value); - } else { - $result[$keyWithoutDot] = $this->renderConfigurationArray($value); - } - } else { - if (!array_key_exists($key . '.', $settings)) { - $result[$key] = $value; - } - } - } - return $result; - } - - /** - * Overwrite flexform values with typoscript if flexform value is empty and typoscript value exists. - * - * @param array $settings Settings from flexform - * @param string $section - * @param string $extKey - * @return array enhanced settings - */ - protected function enhanceSettingsWithTypoScript( - array $settings, - string $section = 'settings.', - string $extKey = 'tx_pwteaser' - ) { - $typoscript = $this->configurationManager->getConfiguration( - \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT - ); - $typoscript = $typoscript['plugin.'][$extKey . '.'][$section]; - foreach ($settings as $key => $setting) { - if ($setting === '' && is_array($typoscript) && array_key_exists($key, $typoscript)) { - $settings[$key] = $typoscript[$key]; - } - } - return $settings; - } - - /** - * Formats a given array with typoscript syntax, recursively. After the - * transformation it can be rendered with cObjGetSingle. - * - * Example: - * Before: $array['level1']['level2']['finalLevel'] = 'hello kitty' - * After: $array['level1.']['level2.']['finalLevel'] = 'hello kitty' - * $array['level1'] = 'TEXT' - * - * @param array $configuration settings array to make renderable - * @return array the renderable settings - */ - protected function makeConfigurationArrayRenderable(array $configuration) - { - $dottedConfiguration = []; - foreach ($configuration as $key => $value) { - if (is_array($value)) { - if (array_key_exists('_typoScriptNodeValue', $value)) { - $dottedConfiguration[$key] = $value['_typoScriptNodeValue']; - } - $dottedConfiguration[$key . '.'] = $this->makeConfigurationArrayRenderable($value); - } else { - $dottedConfiguration[$key] = $value; - } - } - return $dottedConfiguration; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/GetContentViewHelper.php b/typo3conf/ext/pw_teaser/Classes/ViewHelpers/GetContentViewHelper.php deleted file mode 100644 index 2ed1a5b..0000000 --- a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/GetContentViewHelper.php +++ /dev/null @@ -1,102 +0,0 @@ - - * 2016 Tim Klein-Hitpass - * Kai Ratzeburg - * - * 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 2 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! - ***************************************************************/ - -/** - * This class creates links to social bookmark services, recommending the - * current front-end page. - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class GetContentViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper -{ - - protected $escapeOutput = false; - - /** - * @return void - */ - public function initializeArguments() - { - parent::initializeArguments(); - $this->registerArgument('contents', 'array', 'Content elements'); - $this->registerArgument('as', 'string', 'the name of the iteration variable', true); - $this->registerArgument('colPos', 'integer', 'column position to get content elements from', false, 0); - $this->registerArgument('cType', 'string', 'the cType to filter content elements for'); - $this->registerArgument('index', 'integer', 'limits the output to n-th element'); - } - - public function render() - { - $contents = $this->arguments['contents']; - if ($contents === null) { - return ''; - } - - $output = ''; - $indexCount = 0; - $breakNow = false; - $asHasBeenSet = false; - - /** @var $content \PwTeaserTeam\PwTeaser\Domain\Model\Content */ - foreach ($contents as $content) { - $contentCtype = $content->getCtype(); - $contentColPos = $content->getColPos(); - - if ($contentColPos == $this->arguments['colPos']) { - if ($this->arguments['cType'] === null || $contentCtype == $this->arguments['cType']) { - if ($this->arguments['index'] === null) { - $this->templateVariableContainer->add($this->arguments['as'], $content); - $asHasBeenSet = true; - } else { - if ($indexCount == $this->arguments['index']) { - $this->templateVariableContainer->add($this->arguments['as'], $content); - $asHasBeenSet = true; - $breakNow = true; - } - } - } - } - - if ($asHasBeenSet) { - $output .= $this->renderChildren(); - $this->templateVariableContainer->remove($this->arguments['as']); - $asHasBeenSet = false; - } - - if ($breakNow) { - break; - } - if ($this->arguments['cType'] === null || $contentCtype == $this->arguments['cType']) { - $indexCount++; - } - } - return $output; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/RemoveWhitespacesViewHelper.php b/typo3conf/ext/pw_teaser/Classes/ViewHelpers/RemoveWhitespacesViewHelper.php deleted file mode 100644 index c46e1f6..0000000 --- a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/RemoveWhitespacesViewHelper.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * 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 2 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! - ***************************************************************/ - -/** - * This view helper removes whitespaces which are annoying the HTML output, - * cause some browsers are interpreting tabs and new lines. - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class RemoveWhitespacesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper -{ - - /** - * Returns the content without dispensable whitespaces - * - * @return string Rendered string, may be empty. - */ - public function render() - { - return str_replace(["\t", "\r", "\n"], '', $this->renderChildren()); - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/StripTagsViewHelper.php b/typo3conf/ext/pw_teaser/Classes/ViewHelpers/StripTagsViewHelper.php deleted file mode 100644 index f57a5b7..0000000 --- a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/StripTagsViewHelper.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * 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 2 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! - ***************************************************************/ - -/** - * This class strips html and php code out of a string - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class StripTagsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper -{ - - /** - * Strips html and php code out of a string - * - * @param string $string The string which will be stripped - * @return string the stripped string - */ - public function render($string = null) - { - if ($string === null) { - $string = html_entity_decode($this->renderChildren()); - if ($string === null) { - return ''; - } - } - return strip_tags($string); - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/Controller/PaginateController.php b/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/Controller/PaginateController.php deleted file mode 100644 index f6a3636..0000000 --- a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/Controller/PaginateController.php +++ /dev/null @@ -1,252 +0,0 @@ - - * - * 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 2 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! - ***************************************************************/ - -/** - * This view helper uses the technology of paginate widget but works with arrays - * and the assigned objects don't need the QueryResultInterface. - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class PaginateController extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetController -{ - /** - * @var array - */ - protected $configuration = [ - 'itemsPerPage' => 5, - 'insertAbove' => false, - 'insertBelow' => true, - 'maximumVisiblePages' => 7 - ]; - - /** - * @var array - */ - protected $objects; - - /** - * @var integer - */ - protected $currentPage = 1; - - /** - * @var integer - */ - protected $numberOfPages = 1; - - /** - * @var integer - */ - protected $itemsPerPage = 0; - - /** - * Initialize Action of the widget controller - * - * @return void - */ - public function initializeAction() - { - $this->objects = $this->widgetConfiguration['objects']; - \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule( - $this->configuration, - $this->widgetConfiguration['configuration'] - ); - } - - /** - * Returns the items per page - * - * @return integer the items per page - */ - public function getItemsPerPage() - { - return $this->itemsPerPage; - } - - /** - * Sets the items per page - * - * @param integer $itemsPerPage the items per page - * @return void - */ - public function setItemsPerPage($itemsPerPage) - { - if (empty($itemsPerPage)) { - $this->itemsPerPage = (integer)$this->configuration['itemsPerPage']; - } else { - $this->itemsPerPage = $itemsPerPage; - } - } - - /** - * Returns the number of pages - * - * @return integer - */ - public function getNumberOfPages() - { - return $this->numberOfPages; - } - - /** - * Sets the number of pages - * - * @param integer $numberOfPages the number of pages - * @return void - */ - public function setNumberOfPages($numberOfPages) - { - $this->numberOfPages = $numberOfPages; - } - - /** - * Returns the current page - * - * @return integer the current page - */ - public function getCurrentPage() - { - return $this->currentPage; - } - - /** - * Sets the current page and limits it between 1 and $this->numberOfPages. - * - * @param integer $currentPage the current page - * @return void - */ - public function setCurrentPage($currentPage) - { - $this->currentPage = $currentPage; - if ($this->currentPage < 1) { - $this->currentPage = 1; - } elseif ($this->currentPage > $this->numberOfPages) { - $this->currentPage = $this->numberOfPages; - } - } - - /** - * Returns all visible objects within a range, depending on itemsPerPage and the currentPage. - * - * @param \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult|array $objects the list of objects - * @return array the list of visible objects - */ - public function getVisibleObjects($objects) - { - $i = 0; - $modifiedObjects = []; - $indexMin = $this->itemsPerPage * ($this->currentPage - 1); - $indexMax = $this->itemsPerPage * $this->currentPage - 1; - - foreach ($objects as $object) { - if ($i >= $indexMin && $i <= $indexMax) { - $modifiedObjects[] = $object; - } - $i++; - } - return $modifiedObjects; - } - - /** - * Index action of the widget controller - * - * @param integer $currentPage - * @param integer $itemsPerPage - * @return void - */ - public function indexAction($currentPage = 1, $itemsPerPage = 0) - { - $this->setItemsPerPage($itemsPerPage); - $this->setNumberOfPages(intval(ceil(count($this->objects) / (integer)$this->itemsPerPage))); - $this->setCurrentPage((integer)$currentPage); - - $this->view->assign( - 'contentArguments', - [ - $this->widgetConfiguration['as'] => $this->getVisibleObjects($this->objects) - ] - ); - $this->view->assign('configuration', $this->configuration); - $this->view->assign('pagination', $this->buildPagination()); - $this->view->assign('itemsPerPage', $this->itemsPerPage); - } - - /** - * Returns an array with the keys "pages", "current", "numberOfPages", "nextPage" & "previousPage" - * - * @return array - */ - protected function buildPagination() - { - $sidePageCount = intval($this->configuration['maximumVisiblePages']) >> 1; - - $firstPage = max($this->currentPage - $sidePageCount, 1); - $lastPage = min($firstPage + $sidePageCount * 2, $this->numberOfPages); - $firstPage = max($lastPage - $sidePageCount * 2, 1); - - $pages = []; - foreach (range($firstPage, $lastPage) as $index) { - $pages[] = [ - 'number' => $index, - 'isCurrent' => ($index === $this->currentPage) - ]; - } - - $pagination = [ - 'pages' => $pages, - 'current' => $this->currentPage, - 'numberOfPages' => $this->numberOfPages, - 'itemsPerPage' => $this->itemsPerPage, - 'firstPage' => 1, - 'lastPage' => $this->numberOfPages, - 'isFirstPage' => ($this->currentPage == 1), - 'isLastPage' => ($this->currentPage == $this->numberOfPages) - ]; - return $this->addPreviousAndNextPage($pagination); - } - - /** - * Adds the nextPage and the previousPage to the pagination array - * - * @param array $pagination the pagination array which get previous and - * next page - * @return array the pagination array which contains some meta data and - * another array which are the pages - */ - protected function addPreviousAndNextPage($pagination) - { - if ($this->currentPage < $this->numberOfPages) { - $pagination['nextPage'] = $this->currentPage + 1; - } - if ($this->currentPage > 1) { - $pagination['previousPage'] = $this->currentPage - 1; - } - - return $pagination; - } -} diff --git a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/PaginateViewHelper.php b/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/PaginateViewHelper.php deleted file mode 100644 index 8099ed2..0000000 --- a/typo3conf/ext/pw_teaser/Classes/ViewHelpers/Widget/PaginateViewHelper.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * 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 2 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! - ***************************************************************/ - -/** - * This widget is a copy of the fluid paginate widget. Now it's possible to - * use arrays with paginate, not only query results. - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ -class PaginateViewHelper extends \TYPO3\CMS\Fluid\Core\Widget\AbstractWidgetViewHelper -{ - /** - * @var \PwTeaserTeam\PwTeaser\ViewHelpers\Widget\Controller\PaginateController - * @TYPO3\CMS\Extbase\Annotation\Inject - */ - protected $controller; - - /** - * The render method of widget - * - * @param mixed $objects - * @param string $as - * @param array $configuration - * @return string - */ - public function render( - $objects, - $as, - array $configuration = ['itemsPerPage' => 10, 'insertAbove' => false, 'insertBelow' => true] - ) { - return $this->initiateSubRequest(); - } -} diff --git a/typo3conf/ext/pw_teaser/Configuration/Extbase/Persistence/Classes.php b/typo3conf/ext/pw_teaser/Configuration/Extbase/Persistence/Classes.php deleted file mode 100644 index 0720b4b..0000000 --- a/typo3conf/ext/pw_teaser/Configuration/Extbase/Persistence/Classes.php +++ /dev/null @@ -1,33 +0,0 @@ - [ - 'tableName' => 'pages', - 'properties' => [ - 'navTitle' => ['fieldName' => 'nav_title'], - 'authorEmail' => ['fieldName' => 'author_email'], - 'tstamp' => ['fieldName' => 'tstamp'], - 'creationDate' => ['fieldName' => 'crdate'], - 'lastUpdated' => ['fieldName' => 'lastUpdated'], - 'starttime' => ['fieldName' => 'starttime'], - 'endtime' => ['fieldName' => 'endtime'], - 'newUntil' => ['fieldName' => 'newUntil'], - 'sorting' => ['fieldName' => 'sorting'], - 'l18nConfiguration' => ['fieldName' => 'l18n_cfg'], - ] - ], - \PwTeaserTeam\PwTeaser\Domain\Model\Content::class => [ - 'tableName' => 'tt_content', - 'properties' => [ - 'pid' => ['fieldName' => 'pid'], - 'colPos' => ['fieldName' => 'colPos'], - 'ctype' => ['fieldName' => 'CType'], - 'tstamp' => ['fieldName' => 'tstamp'], - 'crdate' => ['fieldName' => 'crdate'], - ] - ] -]; diff --git a/typo3conf/ext/pw_teaser/Configuration/FlexForms/flexform_teaser.xml b/typo3conf/ext/pw_teaser/Configuration/FlexForms/flexform_teaser.xml deleted file mode 100644 index 7a7ead4..0000000 --- a/typo3conf/ext/pw_teaser/Configuration/FlexForms/flexform_teaser.xml +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:general - - array - - - - - reload - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:source.thisChildren - thisChildren - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:source.thisChildrenRecursively - thisChildrenRecursively - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:source.custom - custom - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:source.customChildren - customChildren - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:source.customChildrenRecursively - customChildrenRecursively - - - 1 - 1 - - - - - - - FIELD:settings.source:IN:custom,customChildren,customChildrenRecursively - - group - db - pages - 10 - 999 - 0 - 1 - - - - - - - - - FIELD:settings.source:IN:thisChildrenRecursively,customChildrenRecursively - FIELD:settings.pageMode:!=:nested - - - - input - int - 0 - 5 - - - - - - - FIELD:settings.source:IN:thisChildrenRecursively,customChildrenRecursively - - input - int - 255 - 5 - - - - - - - FIELD:settings.source:IN:custom - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:yes - 1 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:no - 0 - - - 1 - 1 - - - - - - - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:yes - 1 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:no - 0 - - - 1 - 1 - - - - - - - reload - FIELD:settings.source:!IN:custom - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:pageMode.flat - flat - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:pageMode.nested - nested - - - 1 - 1 - - - - - - - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:ordering - - array - - - - - reload - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.title - title - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.sorting - sorting - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.crdate - crdate - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.tstamp - tstamp - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.starttime - starttime - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.endtime - endtime - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.newtime - newUntil - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.random - random - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:order.customField - customField - - - 1 - - - - - - - FIELD:settings.orderBy:IN:customField - - input - trim - - 16 - - - - - - - FIELD:settings.orderBy:IN:title,sorting,crdate,tstamp,starttime,endtime,customField - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:orderDirection.asc - asc - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:orderDirection.desc - desc - - - 1 - 1 - - - - - - - - input - trim,num - - 2 - - - - - - - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:yes - 1 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:no - 0 - - - 1 - 1 - - - - - - - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:yes - 1 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:no - 0 - - - 1 - 1 - - - - - - - - input - trim - 8 - 1,2 - - - - - - - - input - trim - 16 - - - - - - - - select - selectSingle - 10 - sys_category - AND sys_category.sys_language_uid IN (-1, 0) ORDER BY sys_category.sorting ASC - 999 - tree - 5 - - - 1 - 1 - - parent - - - - - - - - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:default - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:categoryMode.or - 1 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:categoryMode.and - 2 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:categoryMode.orNot - 3 - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:categoryMode.andNot - 4 - - - 1 - 1 - - - - - - - - - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:template - - array - - - - - reload - - select - selectSingle - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:templateType.preset - preset - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:templateType.file - file - - - LLL:EXT:pw_teaser/Resources/Private/Language/locallang_flexform.xml:templateType.directory - directory - - - preset - 1 - 1 - - - - - - FIELD:view.templateType:IN:preset, - - - select - selectSingle - PwTeaserTeam\PwTeaser\UserFunction\ItemsProcFunc->getAvailableTemplatePresets - - - - - - - 1 - 1 - - - - - - - - FIELD:view.templateType:IN:file, - - input - trim - - - - - - - - FIELD:view.templateType:IN:directory - - input - trim - - - - - - - - FIELD:view.templateType:IN:file,directory - - input - trim - - - - - - - - FIELD:view.templateType:IN:file,directory - - input - trim - - - - - - - - - diff --git a/typo3conf/ext/pw_teaser/Configuration/TCA/Overrides/sys_template.php b/typo3conf/ext/pw_teaser/Configuration/TCA/Overrides/sys_template.php deleted file mode 100644 index 5181cae..0000000 --- a/typo3conf/ext/pw_teaser/Configuration/TCA/Overrides/sys_template.php +++ /dev/null @@ -1,7 +0,0 @@ -run - - vendorName = PwTeaserTeam - extensionName = PwTeaser - pluginName = Pi1 - - settings =< plugin.tx_pwteaser.settings - persistence =< plugin.tx_pwteaser.persistence - view =< plugin.tx_pwteaser.view -} diff --git a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-general.png b/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-general.png deleted file mode 100644 index 731f1b0..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-general.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-template.png b/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-template.png deleted file mode 100644 index b7bbaa6..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-template.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-visibility.png b/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-visibility.png deleted file mode 100644 index 48d696f..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Configuration/Images/settings-visibility.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Configuration/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Configuration/Index.rst deleted file mode 100644 index 8007cd9..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Configuration/Index.rst +++ /dev/null @@ -1,474 +0,0 @@ -.. include:: ../Includes.txt - -.. _configuration: - - -Configuration -============= - -pw_teaser provides plugin settings, which can get preset by TypoScript. Settings set in plugin directly (FlexForm) will -overwrite the TypoScript defaults. - -.. _configuration_reference: - -Reference ---------- - -- :ref:`configuration-general` -- :ref:`configuration-visibility` -- :ref:`configuration-template` - - -.. _configuration-general: - -General preferences -~~~~~~~~~~~~~~~~~~~ - -.. image:: Images/settings-general.png - :alt: General settings in pw_teaser plugin - :width: 50% - -===================================== ============ -Property Type -===================================== ============ -source_ ``string`` -customPages_ ``string`` -recursionDepthFrom_ ``integer`` -recursionDepth_ ``integer`` -orderByPlugin_ ``bool`` -loadContents_ ``bool`` -pageMode_ ``string`` -===================================== ============ - - -.. _source: - -source -"""""" -.. container:: table-row - - Property - source - Data type - string - Description - Defines which pages should be listed. Allowed values: ``thisChildren``, ``thisChildrenRecursively``, ``custom``, - ``customChildren`` or ``customChildrenRecursively``. - - -.. _customPages: - -customPages -""""""""""" -.. container:: table-row - - Property - customPages - Data type - string - Description - Comma separated list of page uids, which should get listed. In plugin this field is just visible if source got - one of the values ``custom``, ``customChildren`` or ``customChildrenRecursively``. - - -.. _recursionDepthFrom: - -recursionDepthFrom -"""""""""""""""""" -.. container:: table-row - - Property - recursionDepthFrom - Data type - integer - Default - 0 - Description - Start of recursion depth. Default is zero (0). - Just takes effect if source is ``thisChildrenRecursively`` or ``customChildrenRecursively``. - - -.. _recursionDepth: - -recursionDepth -"""""""""""""" -.. container:: table-row - - Property - recursionDepth - Data type - integer - Default - 0 - Description - Depth of recursion. Just takes effect if source is ``thisChildrenRecursively`` or ``customChildrenRecursively``. - - -.. _orderByPlugin: - -orderByPlugin -"""""""""""""" -.. container:: table-row - - Property - orderByPlugin - Data type - boolean - Default - 0 - Description - Just visible if source got the value ``custom``. - If enabled the pages will be ordered like defined in field customPages. - - -.. _loadContents: - -loadContents -"""""""""""" -.. container:: table-row - - Property - loadContents - Data type - boolean - Default - 0 - Description - If checked the contents (tt_content) of current page will be loaded too. - This may need more performance, and should only be enabled if used. - - -.. _pageMode: - -pageMode -"""""""" -.. container:: table-row - - Property - pageMode - Data type - string - Default - flat - Description - Defines how found pages should be passed to fluid template. Possible values are: ``flat`` and ``nested``. - Default is ``flat``. If ``nested`` is chosen, subpages get filled in the attribute "childPages" recursively - instead of passing a flat array. - - In this case the options ``recursionDepthFrom``, ``orderBy`` and ``limit`` will be ignored. - The option ``nested`` is not available for source custom. - - -.. _configuration-visibility: - -Visibility options -~~~~~~~~~~~~~~~~~~ - -.. image:: Images/settings-visibility.png - :alt: Visibility settings in pw_teaser plugin - :width: 50% - -===================================== ============ -Property Type -===================================== ============ -orderBy_ ``string`` -orderByCustomField_ ``string`` -orderDirection_ ``string`` -limit_ ``integer`` -showNavHiddenItems_ ``bool`` -hideCurrentPage_ ``bool`` -showDoktypes_ ``string`` -ignoreUids_ ``string`` -categoriesList_ ``string`` -categoryMode_ ``integer`` -===================================== ============ - - -.. _orderBy: - -orderBy -""""""" -.. container:: table-row - - Property - orderBy - Data type - string - Description - Results may get ordered by: ``title``, ``sorting``, ``crdate``, ``tstamp``, ``starttime``, ``endtime``, - ``newUntil``, ``random`` or ``customField``. - - -.. _orderByCustomField: - -orderByCustomField -"""""""""""""""""" -.. container:: table-row - - Property - orderByCustomField - Data type - string - Description - If orderBy got value ``customField``, this field defines the name of the custom field to order by. - This is useful if you have extended the ``pages`` table with new columns. - -.. _orderDirection: - -orderDirection -"""""""""""""" -.. container:: table-row - - Property - orderDirection - Data type - string - Default - asc - Description - Controls the direction of ordering. May be: ``asc`` or ``desc``. Has no effect when orderBy is ``random``. - - -.. _limit: - -limit -""""" -.. container:: table-row - - Property - limit - Data type - integer - Default - 0 - Description - Amount of pages which should be displayed. First the ordering takes effect, then it will be limited. - When zero (0), limitation is disabled. - - -.. _showNavHiddenItems: - -showNavHiddenItems -"""""""""""""""""" -.. container:: table-row - - Property - showNavHiddenItems - Data type - boolean - Default - 0 - Description - If enabled pages which are hidden for navigation (``nav_hide``), will be displayed anyway. - - - -.. _hideCurrentPage: - -hideCurrentPage -""""""""""""""" -.. container:: table-row - - Property - hideCurrentPage - Data type - boolean - Default - 1 - Description - If enabled the current page will be removed from result. - This has no effect, if the current page is no part of results anyway. - - - -.. _showDoktypes: - -showDoktypes -"""""""""""" -.. container:: table-row - - Property - showDoktypes - Data type - string - Default - 1,2 - Description - Comma separated list of ``doktype`` to display. - - - -.. _ignoreUids: - -ignoreUids -"""""""""" -.. container:: table-row - - Property - ignoreUids - Data type - string - Description - Comma separated list of page uids which should be ignored, always. - - -.. _categoriesList: - -categoriesList -"""""""""""""" -.. container:: table-row - - Property - categoriesList - Data type - string - Description - Comma separated list of ``sys_category`` uids, which are selected. - - -.. _categoryMode: - -categoryMode -"""""""""""" -.. container:: table-row - - Property - categoryMode - Data type - integer - Description - Mode to influence showed pages by selected categories (categoriesList). Available modes are: - - * ``1`` - Show pages with selected categories (OR) - * ``2`` - Show pages with selected categories (AND) - * ``3`` - Do NOT show pages witch selected categories (OR) - * ``4`` - Do NOT show pages witch selected categories (AND) - -.. _configuration-template: - -Template view -~~~~~~~~~~~~~ - -See :ref:`templates` for further details. - -.. image:: Images/settings-template.png - :alt: Template settings in pw_teaser plugin - :width: 50% - -===================================== ============ -Property Type -===================================== ============ -templateType_ ``string`` -templatePreset_ ``string`` -templateRootFile_ ``string`` -templateRootPath_ ``string`` -partialRootPath_ ``string`` -layoutRootPath_ ``string`` -===================================== ============ - - -.. _templateType: - -templateType -"""""""""""" -.. container:: table-row - - Property - templateType - Data type - string - Default - preset - Description - Defines the type of templating. The following types are supported: - - * ``preset`` (default) - * ``file`` - * ``directory`` - -.. _templatePreset: - -templatePreset -"""""""""""""" -.. container:: table-row - - Property - templatePreset - Data type - string - Description - Only available when templateType is set to ``preset``. - Name of preset to use. The given preset name must be configured in TypoScript setup. - - -.. _templateRootFile: - -templateRootFile -"""""""""""""""" -.. container:: table-row - - Property - templateRootFile - Data type - string - Description - Only available when templateType is set to ``file``. - Full path (relative to TYPO3 root) to Fluid template file (incl. filename). - - -.. _templateRootPath: - -templateRootPath -"""""""""""""""" -.. container:: table-row - - Property - templateRootPath - Data type - string - Description - Only available when templateType is set to ``directory``. - Path to Fluid template directory, which contains the folder "Teaser", which contains the "Index.html" file. - In this template mode, the directory contents must match Controller/Actions of pw_teaser. - - - - -.. _partialRootPath: - -partialRootPath -""""""""""""""" -.. container:: table-row - - Property - partialRootPath - Data type - string - Description - Set an additional root path for partials, added after pw_teaser partial root path. - In TypoScript you can also use ``partialRootPaths`` and define several partial paths. This setting is only used, - when ``partialRootPaths`` (from TypoScript) is empty. - - -.. _layoutRootPath: - -layoutRootPath -"""""""""""""" -.. container:: table-row - - Property - layoutRootPath - Data type - string - Description - See ``partialRootPath`` for details. Same rules apply for this option. - - - - - - - - - - diff --git a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/add-plugin.png b/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/add-plugin.png deleted file mode 100644 index 71ea9b6..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/add-plugin.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/custom-pages.png b/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/custom-pages.png deleted file mode 100644 index 2e7c5e2..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/custom-pages.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/default-frontend-output.png b/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/default-frontend-output.png deleted file mode 100644 index a48a199..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/default-frontend-output.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/plugin-sheet-general.png b/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/plugin-sheet-general.png deleted file mode 100644 index 7fabe02..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Images/plugin-sheet-general.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Index.rst b/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Index.rst deleted file mode 100644 index 99faed5..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/FirstSteps/Index.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. include:: ../Includes.txt - -.. _firstSteps: - - -First steps -=========== - -Create the first teaser ------------------------ - -Go to any page you want to add a teaser list of pages, and **add a new page teaser plugin**: - -.. image:: Images/add-plugin.png - :alt: pw_teaser in new content element wizard in TYPO3 backend - -On tab "Plugin" you see all settings pw_teaser has: - -.. image:: Images/plugin-sheet-general.png - :alt: General preferences of pw_teaser plugin - - -Define data source ------------------- - -First, we define which pages we want to display. We can choose between those **teaser sources**: - -- Childpages of current page -- Childpages of current page (recursively) -- Selected pages -- Childpages of selected pages -- Childpages of selected pages (recursively) - -When you change the source to "selected pages", a new field **Custom pages** appears after reloading: - -.. image:: Images/custom-pages.png - :alt: Define custom pages when pw_teaser source is "selected pages" - -Here you select page(s) from the page tree which should be used as the source for your teaser list. - - -Make further options --------------------- - -In visibility options, you can filter or change the ordering of pages in the result. -Under tab "Template" you can choose from some template presets. - - -See the teaser in frontend --------------------------- - -**That's it!** Congratulations, you've configured your first page teaser! - -In frontend you get a list with pages: - -.. image:: Images/default-frontend-output.png - :alt: Default frontend output of pw_teaser - :width: 50% - :class: with-border - -Checkout :ref:`templates` for info about how to provide your own templates. diff --git a/typo3conf/ext/pw_teaser/Documentation/Includes.txt b/typo3conf/ext/pw_teaser/Documentation/Includes.txt deleted file mode 100644 index d3f749a..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Includes.txt +++ /dev/null @@ -1,17 +0,0 @@ -.. This is 'Includes.txt'. It is included at the very top of each and - every ReST source file in THIS documentation project (= manual). - -.. role:: aspect (emphasis) -.. role:: html(code) -.. role:: js(code) -.. role:: php(code) -.. role:: sep (strong) -.. role:: sql(code) -.. role:: typoscript(code) -.. role:: yaml(code) - -.. role:: ts(typoscript) - :class: typoscript - -.. default-role:: code -.. highlight:: php diff --git a/typo3conf/ext/pw_teaser/Documentation/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Index.rst deleted file mode 100644 index c976419..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Index.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. include:: Includes.txt - - -.. _start: - -============================================================= -Page Teaser (with Fluid) -============================================================= - -.. only:: html - - :Classification: - pw_teaser - - :Version: - |release| - - :Language: - en - - :Description: - Create powerful, dynamic page teasers with data from page properties and its content elements. Based on Extbase and Fluid Template Engine. - - :Keywords: - TYPO3 CMS, teaser, pages, sitemap - - :Copyright: - 2010-2020 - - :Author: - Armin Vieweg - - :Email: - armin@v.ieweg.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 `_. - - - **Table of Contents** - -.. toctree:: - :maxdepth: 2 - :titlesonly: - - Installation/Index - FirstSteps/Index - Configuration/Index - UsingTypoScript/Index - Templates/Index - SignalSlot/Index - Versions/Index - Support/Index diff --git a/typo3conf/ext/pw_teaser/Documentation/Installation/Images/include-static-typoscript.png b/typo3conf/ext/pw_teaser/Documentation/Installation/Images/include-static-typoscript.png deleted file mode 100644 index 5903d3a..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Installation/Images/include-static-typoscript.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Installation/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Installation/Index.rst deleted file mode 100644 index 1c85e4e..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Installation/Index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. include:: ../Includes.txt - -.. _installation: - - -Installation -============ - -Download --------- - -You can use the TER (TYPO3 Extension Repository) or Composer to fetch ``t3/pw_teaser`` package. - -- TER: https://extensions.typo3.org/extension/pw_teaser -- Packagist: https://packagist.org/packages/t3/pw_teaser - -Don't forget to enable the extension in Extension Manager! - - -TypoScript Setup ----------------- - -When pw_teaser is successfully installed, you need to **include the provided TypoScript** to your TypoScript template: - -.. image:: Images/include-static-typoscript.png - :alt: Include static TypoScript of pw_teaser - - -.. important:: - When you don't include the pw_teaser TypoScript, plugin settings like "Template preset" remain empty. - - -That's it. Now, pw_teaser is ready to get used. diff --git a/typo3conf/ext/pw_teaser/Documentation/Settings.cfg b/typo3conf/ext/pw_teaser/Documentation/Settings.cfg deleted file mode 100644 index 2e5d648..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Settings.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[general] - -project = Page Teaser (with Fluid) -release = latest diff --git a/typo3conf/ext/pw_teaser/Documentation/Settings.yml b/typo3conf/ext/pw_teaser/Documentation/Settings.yml deleted file mode 100644 index 205f5cc..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Settings.yml +++ /dev/null @@ -1,35 +0,0 @@ -# This is the project specific Settings.yml file. -# Place Sphinx specific build information here. -# Settings given here will replace the settings of 'conf.py'. - - ---- -conf.py: - copyright: 2010-2020 - project: Page Teaser (with Fluid) - version: 5.0 - release: 5.0.1 - latex_documents: - - - Index - - pw_teaser.tex - - 'Page Teaser (with Fluid)' - - Armin Vieweg - - manual - latex_elements: - papersize: a4paper - pointsize: 10pt - preamble: \usepackage{typo3} - intersphinx_mapping: - t3api: - - http://docs.typo3.org/typo3cms/CoreApiReference/ - - null - t3tsref: - - http://docs.typo3.org/typo3cms/TyposcriptReference/ - - null - t3start: - - http://docs.typo3.org/typo3cms/GettingStartedTutorial/ - - null - t3editors: - - http://docs.typo3.org/typo3cms/EditorsTutorial/ - - null -... diff --git a/typo3conf/ext/pw_teaser/Documentation/SignalSlot/Index.rst b/typo3conf/ext/pw_teaser/Documentation/SignalSlot/Index.rst deleted file mode 100644 index c4587f9..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/SignalSlot/Index.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. include:: ../Includes.txt - -.. _signal-slot: - - -Signal/Slot -=========== - -pw_teaser provides a signal, that may be used by your extensions **to modify the pages array** (or containing pages) -right **before assigning to view**. - -To connect your slot to the signal just put this to your ``ext_localconf.php``: - -:: - - $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class); - $signalSlotDispatcher->connect( - \PwTeaserTeam\PwTeaser\Controller\TeaserController::class, - 'indexActionModifyPages', - \Vendor\ExtensionName\Signals\PwTeaserSignal::class, - 'modifyPages' - ); - -The class you have referenced should look like this: - -:: - - $pages Referenced array of pages - * @param \PwTeaserTeam\PwTeaser\Controller\TeaserController $teaserController - * @return void - */ - public function modifyPages(array &$pages, PwTeaserTeam\PwTeaser\Controller\TeaserController $teaserController) { - // Do whatever you want with referenced array in $pages - } - } - -Because of the referenced array, all changes you do in the array will also take effect in pw_teaser extension. -You don't need to return anything. diff --git a/typo3conf/ext/pw_teaser/Documentation/Support/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Support/Index.rst deleted file mode 100644 index f3f0ab7..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Support/Index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. include:: ../Includes.txt - -.. _support: - - -Support -======= - -Issue tracker -------------- -See all open tasks `here`_ in the forge bug tracker. - -.. _here: https://forge.typo3.org/projects/extension-pw_teaser/issues - - -Donate ------- -If you like the pw_teaser extension, feel free to `donate`_ some funds to support further development. - -.. _donate: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2DCCULSKFRZFU - - -Contribute ----------- -If you are a developer and you want to submit improvements as code, you can fork https://bitbucket.org/ArminVieweg/pw_teaser/src -and make a pull request to pw_teaser's master branch. - -Thanks! diff --git a/typo3conf/ext/pw_teaser/Documentation/Templates/Images/directory-structure.png b/typo3conf/ext/pw_teaser/Documentation/Templates/Images/directory-structure.png deleted file mode 100644 index ad7c770..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Templates/Images/directory-structure.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Templates/Images/preset-dropdown.png b/typo3conf/ext/pw_teaser/Documentation/Templates/Images/preset-dropdown.png deleted file mode 100644 index 89d678f..0000000 Binary files a/typo3conf/ext/pw_teaser/Documentation/Templates/Images/preset-dropdown.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Documentation/Templates/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Templates/Index.rst deleted file mode 100644 index e79bcb6..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Templates/Index.rst +++ /dev/null @@ -1,189 +0,0 @@ -.. include:: ../Includes.txt - -.. _templates: - - -Templates -========= - -.. contents:: :local: - - -.. _template-types: - -Template types --------------- - -pw_teaser uses Fluid templates and offers three templateTypes to choose from. - - -Type: Preset -~~~~~~~~~~~~ - -The preset template mode is new (since 5.0) and offers the possibility to **define presets in TypoScript**. -Also, it provides a select box in plugin settings to **choose a preset**. - -pw_teaser provide three presets by default: - -- ``default`` -- ``headlineAndImage`` -- ``headlineOnly`` - - -**This is how you register a new preset in TypoScript:** - -:: - - plugin.tx_pwteaser { - view { - presets { - headlineAndImage { - label = Headline & Images - templateRootFile = EXT:pw_teaser/Resources/Private/Templates/HeadlineAndImage.html - partialRootPaths.10 = EXT:pw_teaser/Resources/Private/Partials - layoutRootPaths.10 = EXT:pw_teaser/Resources/Private/Layouts - } - } - } - } - -.. tip:: - The label supports ``LLL:`` references. - -.. note:: - Changes in TypoScript require to clear the system caches of TYPO3. - -In plugin settings, the dropdown let the editor choose, which preset to use in frontend: - -.. image:: Images/preset-dropdown.png - :alt: Preset selection in pw_teaser plugin settings - - -Type: File -~~~~~~~~~~ - -When ``view.templateType`` is set to ``file``, you also need to provide a ``view.templateRootFile`` (Fluid template file). - - -Type: Directory -~~~~~~~~~~~~~~~ - -When ``view.templateType`` is set to ``directory``, you also need to provide a ``view.templateRootPath`` (directory). -In this directory you need to provide the controller/action structure of pw_teaser: - - -.. image:: Images/directory-structure.png - :alt: Required directory structure of pw_teaser, when using templateType 'directory'. - - -.. _writing-templates: - -Writing templates ------------------ - -The only variable the Fluid template file get is ``{pages}``. -The most simple way to output the prepared (flat) list of pages is this: - -:: - -
      - -
    • - {page.title} -
    • -
      -
    - - -The provided ``Page`` model got the following properties available: - -- ``title`` -- ``subtitle`` -- ``abstract`` -- ``navTitle`` -- ``alias`` -- ``description`` -- ``author`` -- ``authorEmail`` -- ``keywords`` as array with each keyword as string -- ``keywordsAsString`` -- ``media`` -- ``newUntil`` -- ``isNew`` -- ``creationDate`` -- ``tstamp`` -- ``lastUpdated`` -- ``starttime`` -- ``endtime`` -- ``doktype`` -- ``sorting`` -- ``l18nConfiguration`` -- ``categories`` -- ``isCurrentPage`` -- ``rootLine`` Returns rootLine of this page as array -- ``rootLineDepth`` Returns amount of parent pages, including this page itself. The root page (not id=0) got depth 1. -- ``recursiveRootLineOrdering`` Returns string of sortings of all root pages including this page. -- ``pageRow`` -- ``contents`` (only available, when ``loadContents`` set to ``1``) -- ``childPages`` (only available, when ``pageMode`` set to ``nested``) -- ``get`` - -You can access any property the ``pages`` table got, using the ``get`` keyword. Example: - -:: - - {page.get.tx_myext_whatever} - - -.. note:: - In the past, the ``get`` keyword wasn't necessary, because Fluid allowed to utilize ``__call()`` method of PHP, - which is no longer the case. - - -getContent ViewHelper -~~~~~~~~~~~~~~~~~~~~~ - -The pw_teaser extension provides a view helper called ``pw:getContent``. -This view helper allows you to access special content elements from the current page in the loop. - -The page has the attribute "contents". You may access it like this: - -:: - - {page.contents} - - -But it contains just an array (query result) with all content elements located under the given page. -It does not respect the column or the CType. This is where getContent comes into play. - -**Full example:** - -:: - - {namespace pw=PwTeaserTeam\PwTeaser\ViewHelpers} - -
    -

    {page.title}

    - - - - - - - -
    -
    - -**pw:getContent arguments explained:** - -- ``contents="{page.contents}"`` - Here you pass all content elements to the view helper -- ``as="content"`` - Here you define how to call the single content item inside of the view helper -- ``colPos="0"`` - Limit the content elements to given colPos (0 is default) -- ``cType="textpic"`` - Limit the content elements to given CType (eg. image, text or textpic) -- ``index="0"`` - Limit the output to n-th elements. Zero means the first element. Keep it empty for all matching elements. - -When accessing images from content elements (or pages either) you can use a ```` loop and its option "iteration" -to limit output to one image. Therefore the example above has another -loop inside of the getContent view helper. - -.. important:: - This just works if you enable the option in Page Teaser Plugin, to load content elements. diff --git a/typo3conf/ext/pw_teaser/Documentation/UsingTypoScript/Index.rst b/typo3conf/ext/pw_teaser/Documentation/UsingTypoScript/Index.rst deleted file mode 100644 index 8ea6df3..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/UsingTypoScript/Index.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. include:: ../Includes.txt - -.. _using-typoscript: - - -Using TypoScript -================ - -.. contents:: :local: - - -Predefine settings with TS --------------------------- - -You may predefine some settings which are used in pw_teaser, unless it **will be overwritten by plugin settings**. - -To do this, just write this in TypoScript setup: - -:: - - plugin.tx_pwteaser.settings.[setting] = value - - plugin.tx_pwteaser.view.[setting] = value - - -.. hint:: - See the configuration :ref:`configuration_reference`, which settings are available. - - -Add a whole page teaser with TS -------------------------------- - -If you want to add a page teaser in areas on your page, which are not editable by users, you can simply use typoscript -to assign it to a marker or variable (i.e.) of your template. You could put it in a COA too, of course. - -**Example:** - -:: - - 10 = COA - 10 { - 10 = TEXT - 10.value = Latest News (based on pages) - - 20 < lib.tx_pwteaser - 20 { - settings { - # see configuration reference - } - view { - # see configuration reference - } - } - } - -.. important:: - The ``lib.tx_pwteaser`` is only available when you have **included the static template** to your TYPO3 template. - - -Using parsed TypoScript ------------------------ - -You may use typoscript for aby pw_teaser setting. - -**For example:** - -:: - - plugin.tx_pwteaser.settings { - source = customPages - customPages = CONTENT - customPages { - table = pages - select { - pidInList = 1 - recursive = 50 - where = whatever=1337 - } - renderObj = COA - renderObj.10 = TEXT - renderObj.10.field = uid - renderObj.10.wrap = | ,|*| ,| |*| - } - } - -This example creates a comma-separated list for the setting "customPages". Unlikely to default Extbase behavior, the -defined settings are parsed by TypoScript parser, before used in Extbase controller. diff --git a/typo3conf/ext/pw_teaser/Documentation/Versions/Index.rst b/typo3conf/ext/pw_teaser/Documentation/Versions/Index.rst deleted file mode 100644 index 2f2e9eb..0000000 --- a/typo3conf/ext/pw_teaser/Documentation/Versions/Index.rst +++ /dev/null @@ -1,115 +0,0 @@ -.. include:: ../Includes.txt - - -.. _versions: - -Versions -======== - -.. contents:: :local: - -5.0.1 ------ - -- [BUGFIX] Fix wrong extension icon path -- [DEVOPS] Update DDEV install scripts (for TYPO3 environments) -- [BUGFIX] Do not show warning in ItemsProcFunc, if pw_teaser typoscript is missing -- [BUGFIX] Fix wrong Extbase mapping (for TYPO3 10+) -- [TASK] Update README - - -5.0.0 ------ - -- [FEATURE] Documentation -- [BUGFIX] Remove default value for setting "hideCurrentPage" in teaser flexform -- [TASK] Set templateType by default to "preset" -- [TASK] Remove "ENABLECACHE" extension setting -- [BUGFIX] Fix image viewhelper usage in Fluid template -- [FEATURE] Template presets -- [BUGFIX] Merge view settings from plugin with typoscript -- [TASK] Set label for default value in dropdowns -- [BUGFIX] Streamline "templateRootPaths" setting -- [TASK] Update copyrights -- [TASK] Code style fixing -- [BUGFIX] Custom fluid templates not working because of missing templateRootPath -- [TASK] Move ext_tables.php contents to TCA/Overrides -- [FEATURE] Add TYPO3 10 compatibility -- Dropped support for TYPO3 8.7 - - -4.0.0 ------ - -- [BUGFIX] No not escape output of GetContent ViewHelper -- [CHANGE][!!!] Introduce {page.get} -- [TASK] Compatibility Fixes -- [TASK] Set version to 4.0.0-dev and update package name to "t3/pw_teaser" -- Dropped support for TYPO3 6.2 and 7.6 - -3.4.2 ------ - -- [TASK] Fix license attribute in composer.json -- [BUGFIX] Fix missing index attributes in numIndex nodes - - -3.4.1 ------ - -- [BUGFIX] Check for version 7.5 to use IconRegistry, fallback for TYPO3 6.2 - - -3.4.0 ------ - -- Add support for TYPO3 7.6 to 8.x. Also added content element wizard entry. - - -3.3.0 ------ - -Add new option "pageMode". Normally pages are passed as flat array to fluid template. -If this option is set to "nested" you get a nested page object with (new attribute) childPages. - - -3.2.0 ------ - -- Add new option "recursionDepthFrom" to define a start for recursion. - - -3.1.0 ------ - -Page and content model in pw_teaser does not have properties for all available columns in the accordant tables. -With this patch, everytime you try to access such attribute the whole row of the page/content will be loaded (and cached) -and the values will be accessible. - -Example in fluid template: - -:: - - - Page Layout: {page.layout} - - -Layout is one of these attributes, existing in pages table but not in page model. -So this example will not work with previous versions of pw_teaser. -Furthermore now also attributes added by other extensions are accessible. - - -3.0.0 ------ - -- Complete TYPO3 6.2 support -- Massive refactoring of all classes (eg. namespaces) -- Add language support (behavior of teasers like menu items in TYPO3) -- Add categories attribute to Page and Content model -- $page->getMedia() and $content->getImage() works with FAL (To work in template use $page->getMediaFiles() or $content->getImageFiles()) -- Add option to plugin to filter pages by categories -- Add option to plugin to define recursion depth -- Add getRootLine() and getRootLineDepth() to Page model -- New extension/plugin icon -- New Signal/Slot to modify found pages -- Many bugfixes diff --git a/typo3conf/ext/pw_teaser/README.rst b/typo3conf/ext/pw_teaser/README.rst deleted file mode 100644 index 171cd61..0000000 --- a/typo3conf/ext/pw_teaser/README.rst +++ /dev/null @@ -1,34 +0,0 @@ -pw_teaser for TYPO3 CMS -======================= - -Features --------- - -* Create nested or flat views of your page structures -* extreme detailed options to filter pages available -* layout the teasers of your pages like you want with Fluid Templates -* template presets -* pagination is also supported -* extendable with signals to modify or extend page models - - -Documentation -------------- - -This extension provides a ReST documentation, located in Documentation/ directory. - -You can see a rendered version on https://docs.typo3.org/p/t3/pw_teaser - - -Requirements ------------- - -Version 5.0 of pw_teaser requires TYPO3 9.5 or 10.4. - - -Links ------ - -* **Donate:** https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9LJYFQGJ7S232 -* Issue Tracker: https://forge.typo3.org/projects/extension-pw_teaser/issues -* Source code: https://bitbucket.org/ArminVieweg/pw_teaser diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang.xml b/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang.xml deleted file mode 100644 index 626cc8e..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - module - Language labels for the Extbase Teaser extension in the FRONTEND - - - - - - - - - - - - - - - - - diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang_flexform.xml b/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang_flexform.xml deleted file mode 100644 index 393194f..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Language/locallang_flexform.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - module - Language labels for the pw_teaser extension in the Flexform formular - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Layouts/Main.html b/typo3conf/ext/pw_teaser/Resources/Private/Layouts/Main.html deleted file mode 100644 index 5726e4c..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Layouts/Main.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Partials/formErrors.html b/typo3conf/ext/pw_teaser/Resources/Private/Partials/formErrors.html deleted file mode 100644 index b19c6ce..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Partials/formErrors.html +++ /dev/null @@ -1,13 +0,0 @@ - -
    - {error.message} - -

    - {error.propertyName}: - - {errorDetail.message} - -

    -
    -
    -
    \ No newline at end of file diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlineAndImage.html b/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlineAndImage.html deleted file mode 100644 index 2af5472..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlineAndImage.html +++ /dev/null @@ -1,17 +0,0 @@ -{namespace pw=PwTeaserTeam\PwTeaser\ViewHelpers} - - - -
      - -
    • - - - - - {page.title} - -
    • -
      -
    -
    diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlinesOnly.html b/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlinesOnly.html deleted file mode 100644 index e5bab2b..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Templates/HeadlinesOnly.html +++ /dev/null @@ -1,12 +0,0 @@ -{namespace pw=PwTeaserTeam\PwTeaser\ViewHelpers} - - - -
      - -
    • - {page.title} -
    • -
      -
    -
    diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Templates/Teaser/Index.html b/typo3conf/ext/pw_teaser/Resources/Private/Templates/Teaser/Index.html deleted file mode 100644 index 8278064..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Templates/Teaser/Index.html +++ /dev/null @@ -1,94 +0,0 @@ -{namespace pw=PwTeaserTeam\PwTeaser\ViewHelpers} - - - -
    How many pages found: {pages -> f:count()}
    - - - - -
      - -
    • -
      - Title: {page.title} uid={page.uid} -
        -
      • isCurrentPage: YesNo
      • -
      • subtitle: {page.subtitle}
      • -
      • navTitle: {page.navTitle}
      • -
      • keywords as String: {page.keywordsAsString}
      • -
      • keywords: - -
          - - - {keyword} - - -
        -
        -
      • -
      • description: {page.description}
      • -
      • abstract: {page.abstract}
      • -
      • slug: {page.get.slug}
      • -
      • media: - - -
          - -
        • - -
        • -
          -
        -
        -
        -
      • -
      • - categories: - - -
          - -
        • - {category.title} uid={category.uid} - -

          {category.description -> f:format.nl2br()}

          -
          -
        • -
          -
        -
        -
        -
      • -
      • crdate:
      • -
      • tstamp:
      • -
      • lastUpdated:
      • -
      • starttime:
      • -
      • endtime:
      • -
      • newUntil:
      • -
      • isNew: YesNo
      • -
      • author: {page.author}
      • -
      • authorEmail: {page.authorEmail}
      • -
      • rootLineDepth: {page.rootLineDepth}
      • - -
      • - First image (of content elements, column 0):
        - - - -
      • -
        -
      -
      -
      -
    • -
      -
    -
    -
    - - This appears if the number of found pages is zero. - -
    -
    diff --git a/typo3conf/ext/pw_teaser/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html b/typo3conf/ext/pw_teaser/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html deleted file mode 100644 index a4e1028..0000000 --- a/typo3conf/ext/pw_teaser/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - -
      - - - - -
    • - -
    • -
      - -
    • - -
    • -
      -
      -
      - - - - - - - - - - - - - - - - - -
    • - {page.number} -
    • -
      - -
    • - - - {page.number} - - - {page.number} - - -
    • -
      -
      -
      - - - - - - - - -
    • - - - - - - - - -
    • -
      -
    -
    diff --git a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension.png b/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension.png deleted file mode 100644 index a7ddb03..0000000 Binary files a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x2.png b/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x2.png deleted file mode 100644 index 022fa26..0000000 Binary files a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x2.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x4.png b/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x4.png deleted file mode 100644 index 3557bff..0000000 Binary files a/typo3conf/ext/pw_teaser/Resources/Public/Icons/Extension_x4.png and /dev/null differ diff --git a/typo3conf/ext/pw_teaser/composer.json b/typo3conf/ext/pw_teaser/composer.json deleted file mode 100644 index da53466..0000000 --- a/typo3conf/ext/pw_teaser/composer.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "t3/pw_teaser", - "type": "typo3-cms-extension", - "description": "Create powerful, dynamic page teasers with data from page properties and its content elements. Based on Extbase and Fluid Template Engine.", - "homepage": "http://typo3.org", - "license": "GPL-2.0", - "require": { - "typo3/cms-core": "^9.5.20 || ^10.4.6" - }, - "autoload": { - "psr-4": { - "PwTeaserTeam\\PwTeaser\\": "Classes" - } - } -} diff --git a/typo3conf/ext/pw_teaser/ext_emconf.php b/typo3conf/ext/pw_teaser/ext_emconf.php deleted file mode 100644 index f0aafe2..0000000 --- a/typo3conf/ext/pw_teaser/ext_emconf.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Page Teaser (with Fluid)', - 'description' => 'Create powerful, dynamic page teasers with data from page properties and its content elements. Based on Extbase and Fluid Template Engine.', - 'category' => 'plugin', - 'version' => '5.0.1', - 'state' => 'stable', - 'author' => 'Armin Vieweg', - 'author_email' => 'info@v.ieweg.de', - 'author_company' => 'v.ieweg Webentwicklung', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '9.5.0-10.4.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), - 'autoload' => - array ( - 'psr-4' => - array ( - 'PwTeaserTeam\\PwTeaser\\' => 'Classes', - ), - ), - 'uploadfolder' => false, - 'clearcacheonload' => false, -); - diff --git a/typo3conf/ext/pw_teaser/ext_localconf.php b/typo3conf/ext/pw_teaser/ext_localconf.php deleted file mode 100644 index 53a92cb..0000000 --- a/typo3conf/ext/pw_teaser/ext_localconf.php +++ /dev/null @@ -1,42 +0,0 @@ - 'index', - ] -); - -$rootLineFields = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode( - ',', - $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'], - true -); -$rootLineFields[] = 'sorting'; -$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] = implode(',', $rootLineFields); - -if (TYPO3_MODE === 'BE') { - /** @var \TYPO3\CMS\Core\Imaging\IconRegistry $iconRegistry */ - $iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Imaging\IconRegistry'); - $iconRegistry->registerIcon( - 'ext-pwteaser-wizard-icon', - 'TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider', - ['source' => 'EXT:pw_teaser/Resources/Public/Icons/Extension_x2.png'] - ); - - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(' - mod.wizards.newContentElement.wizardItems.plugins.elements.pwteaser { - iconIdentifier = ext-pwteaser-wizard-icon - title = LLL:EXT:pw_teaser/Resources/Private/Language/locallang.xml:newContentElementWizardTitle - description = LLL:EXT:pw_teaser/Resources/Private/Language/locallang.xml:newContentElementWizardDescription - tt_content_defValues { - CType = list - list_type = pwteaser_pi1 - } - } - '); -} diff --git a/typo3conf/ext/pw_teaser/ext_typoscript_setup.txt b/typo3conf/ext/pw_teaser/ext_typoscript_setup.txt deleted file mode 100644 index a082e7c..0000000 --- a/typo3conf/ext/pw_teaser/ext_typoscript_setup.txt +++ /dev/null @@ -1,38 +0,0 @@ -plugin.tx_pwteaser { - persistence { - classes { - PwTeaserTeam\PwTeaser\Domain\Model\Page { - mapping { - tableName = pages - columns { - nav_title.mapOnProperty = navTitle - author_email.mapOnProperty = authorEmail - tstamp.mapOnProperty = tstamp - crdate.mapOnProperty = creationDate - lastUpdated.mapOnProperty = lastUpdated - starttime.mapOnProperty = starttime - endtime.mapOnProperty = endtime - newUntil.mapOnProperty = newUntil - sorting.mapOnProperty = sorting - l18n_cfg.mapOnProperty = l18nConfiguration - } - } - } - PwTeaserTeam\PwTeaser\Domain\Model\Content { - mapping { - tableName = tt_content - columns { - pid.mapOnProperty = pid - colPos.mapOnProperty = colPos - CType.mapOnProperty = ctype - tstamp.mapOnProperty = tstamp - crdate.mapOnProperty = crdate - } - } - } - } - storagePid = - } -} - - diff --git a/typo3conf/ext/sr_feuser_register b/typo3conf/ext/sr_feuser_register new file mode 160000 index 0000000..a30a05d --- /dev/null +++ b/typo3conf/ext/sr_feuser_register @@ -0,0 +1 @@ +Subproject commit a30a05d5eb5469c0554a6cddf69738a38900ee77 diff --git a/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaInterface.php b/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaInterface.php deleted file mode 100644 index e01ddfe..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaInterface.php +++ /dev/null @@ -1,68 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\SingletonInterface; - -/** - * Inferface for captcha hooks - */ -interface CaptchaInterface extends SingletonInterface -{ - /** - * Determines whether the required captcha extension is loaded - * - * @return boolean true if the required captcha extension is loaded - */ - public function isLoaded(); - - /** - * Returns the eval rule for this captcha - * - * @return string the eval rule for this captcha - */ - public function getEvalRule(); - - /** - * Sets the value of captcha markers - * - * @param array $markerArray: a marker array - * @param string $cmdKey: the cmd being processed - * @param array $conf: the plugin configuration - * @return void - */ - public function addGlobalMarkers(array &$markerArray, $cmdKey, array $conf); - - /** - * Evaluates the captcha word - * - * @param string $theTable: the name of the table in use - * @param array $dataArray: current input array - * @param string $theField: the name of the captcha field - * @param string $cmdKey: the current command key - * @param array $cmdParts: parts of the 'eval' command - * @param string $extensionName: name of the extension - * @return string The name of the field in error or empty string - */ - public function evalValues($theTable, array $dataArray, $theField, $cmdKey, array $cmdParts, $extensionName); -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaManager.php b/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaManager.php deleted file mode 100644 index d3b04d9..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Captcha/CaptchaManager.php +++ /dev/null @@ -1,90 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Determines the use of captcha - */ -class CaptchaManager -{ - /** - * Determines whether the use of captcha is enabled for the specified command - * - * @param string $cmdKey: the cmdKey for which the check is requested - * @param array $conf: the plugin configuration - * @param string $extensionKey: the key of the requesting extension - * @return boolean true, if the use of captcha is enabled - */ - static public function useCaptcha($cmdKey, array $conf, $extensionKey) - { - $useCaptcha = false; - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($extensionKey); - if ( - isset($extensionConfiguration['captcha']) - && is_array($extensionConfiguration['captcha']) - && isset($conf[$cmdKey . '.']) - && is_array($conf[$cmdKey . '.']) - && isset($conf[$cmdKey . '.']['fields']) - && GeneralUtility::inList($conf[$cmdKey . '.']['fields'], 'captcha_response') - && isset($conf[$cmdKey . '.']['evalValues.']) - && is_array($conf[$cmdKey . '.']['evalValues.']) - ) { - foreach ($extensionConfiguration['captcha'] as $classRef) { - $captchaObj = GeneralUtility::makeInstance($classRef); - if ($conf[$cmdKey . '.']['evalValues.']['captcha_response'] === $captchaObj->getEvalRule()) { - $useCaptcha = true; - break; - } - } - } - return $useCaptcha; - } - - /** - * Determines whether at least one captcha extension is available - * - * @return boolean true if at least one captcha extension is available - */ - static public function isLoaded($extensionKey) - { - $isLoaded = false; - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($extensionKey); - if ( - isset($extensionConfiguration['captcha']) - && is_array($extensionConfiguration['captcha']) - ) { - foreach ($extensionConfiguration['captcha'] as $classRef) { - $captchaObj = GeneralUtility::makeInstance($classRef); - $isLoaded = $captchaObj->isLoaded(); - if ($isLoaded) { - break; - } - } - } - return $isLoaded; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Captcha/Freecap.php b/typo3conf/ext/sr_feuser_register/Classes/Captcha/Freecap.php deleted file mode 100644 index c137451..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Captcha/Freecap.php +++ /dev/null @@ -1,117 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Captcha\CaptchaInterface; -use SJBR\SrFreecap\PiBaseApi; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Hook for captcha image marker when extension 'sr_freecap' is used - */ -class Freecap implements CaptchaInterface -{ - /** - * SrFreecap object - * - * @var PiBaseApi - */ - protected $srFreecap = null; - - /** - * Determines whether the required captcha extension is loaded - * - * @return boolean true if the required captcha extension is loaded - */ - public function isLoaded() - { - return ExtensionManagementUtility::isLoaded('sr_freecap'); - } - - /** - * Returns the eval rule for this captcha - * - * @return string the eval rule for this captcha - */ - public function getEvalRule() - { - return 'freecap'; - } - - /** - * Sets the value of captcha markers - */ - public function addGlobalMarkers(array &$markerArray, $cmdKey, array $conf) - { - if ( - isset($conf[$cmdKey . '.']['evalValues.']['captcha_response']) - && $conf[$cmdKey . '.']['evalValues.']['captcha_response'] === 'freecap' - && $this->initialize() !== null - ) { - $captchaMarkerArray = $this->srFreecap->makeCaptcha(); - } else { - $captchaMarkerArray = array('###SR_FREECAP_NOTICE###' => '', '###SR_FREECAP_CANT_READ###' => '', '###SR_FREECAP_IMAGE###' => '', '###SR_FREECAP_ACCESSIBLE###' => ''); - } - $markerArray = array_merge($markerArray, $captchaMarkerArray); - } - - /** - * Evaluates the captcha word - * - * @param string $theTable: the name of the table in use - * @param array $dataArray: current input array - * @param string $theField: the name of the captcha field - * @param string $cmdKey: the current command key - * @param array $cmdParts: parts of the 'eval' command - * @param string $extensionName: name of the extension - * @return string The name of the field in error or empty string - */ - public function evalValues($theTable, array $dataArray, $theField, $cmdKey, array $cmdParts, $extensionName = '') - { - $errorField = ''; - if ( - trim($cmdParts[0]) === 'freecap' - && isset($dataArray[$theField]) - && $this->initialize() !== null - ) { - // The word hash may be checked only once. - // sr_freecap will invalidate the word_hash after calling checkWord() - if (!$this->srFreecap->checkWord($dataArray[$theField])) { - $errorField = $theField; - } - } - return $errorField; - } - - /** - * Initializes de SrFreecap object - */ - protected function initialize() - { - if ($this->srFreecap === null && $this->isLoaded()) { - $this->srFreecap = GeneralUtility::makeInstance(PiBaseApi::class); - } - return $this->srFreecap; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Configuration/ConfigurationCheck.php b/typo3conf/ext/sr_feuser_register/Classes/Configuration/ConfigurationCheck.php deleted file mode 100644 index f452e7f..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Configuration/ConfigurationCheck.php +++ /dev/null @@ -1,95 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use Psr\Log\LoggerAwareInterface; -use Psr\Log\LoggerAwareTrait; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Information\Typo3Version; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extensionmanager\Utility\EmConfUtility; - -/** - * Validate the extension configuration - */ -class ConfigurationCheck implements LoggerAwareInterface -{ - use LoggerAwareTrait; - - /** - * Checks requirements for this plugin - * - * @param string $extensionKey the extension key - * @return string Error message, if error found, empty string otherwise - */ - static public function checkRequirements($extensionKey) - { - $content = ''; - $extensionName = GeneralUtility::underscoredToUpperCamelCase($extensionKey); - $constraints = self::getConstraints($extensionName); - // Check if all required extensions are available - if ( - isset($constraints['depends']) - && is_array($constraints['depends']) - ) { - $requiredExtensions = array_diff(array_keys($constraints['depends']), ['php', 'typo3']); - foreach ($requiredExtensions as $requiredExtension) { - if (!ExtensionManagementUtility::isLoaded($requiredExtension)) { - $message = sprintf(LocalizationUtility::translate('internal_required_extension_missing', $extensionName), $requiredExtension); - $this->logger->error($extensionName . ': ' . $message); - $content .= sprintf(LocalizationUtility::translate('internal_check_requirements_frontend', $extensionName), $message); - } - } - } - return $content; - } - - /** - * Get extension constraints - * - * @return constraints - */ - static public function getConstraints($extensionName) - { - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName); - $typo3Version = GeneralUtility::makeInstance(Typo3Version::class); - $typo3Branch = $typo3Version->getBranch(); - $emConfUtility = GeneralUtility::makeInstance(EmConfUtility::class); - if (version_compare($typo3Branch, '11.5', '>=')) { - $emConf = - $emConfUtility->includeEmConf( - $extensionKey, ExtensionManagementUtility::extPath($extensionKey) - ); - } else { - $emConf = - $emConfUtility->includeEmConf( - $extensionKey, - [ - 'packagePath' => GeneralUtility::getFileAbsFileName('EXT:' . $extensionKey), - ] - ); - } - return $emConf['constraints'] ?? []; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Configuration/Reports/StatusProvider.php b/typo3conf/ext/sr_feuser_register/Classes/Configuration/Reports/StatusProvider.php deleted file mode 100644 index 8f5feef..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Configuration/Reports/StatusProvider.php +++ /dev/null @@ -1,151 +0,0 @@ - - * All rights reserved - * - * This script is part of the TYPO3 project. The TYPO3 project is - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 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 SJBR\SrFeuserRegister\Configuration\ConfigurationCheck; -use TYPO3\CMS\Core\Information\Typo3Version; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Utility\LocalizationUtility; -use TYPO3\CMS\Extensionmanager\Utility\EmConfUtility; -use TYPO3\CMS\Reports\Status; -use TYPO3\CMS\Reports\StatusProviderInterface; - -/** - * Hook into the backend module "Reports" checking the configuration required for sr_feuser_register - */ -class StatusProvider implements StatusProviderInterface -{ - /** - * @var string Extension name - */ - protected $extensionName = 'SrFeuserRegister'; - - /** - * Compiles a collection of system status checks as a status report. - * - * @return array List of statuses - */ - public function getStatus() - { - $reports = [ - 'requiredExtensionsAreInstalled' => $this->checkIfRequiredExtensionsAreInstalled(), - 'noConflictingExtensionIsInstalled' => $this->checkIfNoConflictingExtensionIsInstalled() - ]; - return $reports; - } - - /** - * Check whether any required extension is not installed - * - * @return Status - */ - protected function checkIfRequiredExtensionsAreInstalled() - { - $title = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:Required_extensions_not_installed', $this->extensionName); - $missingExtensions = []; - $constraints = ConfigurationCheck::getConstraints($this->extensionName); - if ( - isset($constraints['depends']) - && is_array($constraints['depends']) - ) { - $requiredExtensions = array_diff(array_keys($constraints['depends']), array('php', 'typo3')); - foreach ($requiredExtensions as $extensionKey) { - if (!ExtensionManagementUtility::isLoaded($extensionKey)) { - $missingExtensions[] = $extensionKey; - } - } - } - if (count($missingExtensions)) { - $value = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:keys', $this->extensionName) . ' ' . implode(', ', $missingExtensions); - $message = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:install', $this->extensionName); - $status = Status::ERROR; - } else { - $value = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:none', $this->extensionName); - $message = ''; - $status = Status::OK; - } - return GeneralUtility::makeInstance(Status::class, $title, $value, $message, $status); - } - - /** - * Check whether any conflicting extension has been installed - * - * @return Status - */ - protected function checkIfNoConflictingExtensionIsInstalled() - { - $title = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:Conflicting_extensions_installed', $this->extensionName); - $conflictingExtensions = []; - $constraints = ConfigurationCheck::getConstraints($this->extensionName); - if ( - isset($constraints['conflicts']) - && is_array($constraints['conflicts']) - ) { - foreach ($constraints['conflicts'] as $extensionKey => $version) { - if (ExtensionManagementUtility::isLoaded($extensionKey)) { - $conflictingExtensions[] = $extensionKey; - } - } - } - if (count($conflictingExtensions)) { - $value = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:keys', $this->extensionName) . ' ' . implode(', ', $conflictingExtensions); - $message = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:uninstall', $this->extensionName); - $status = Status::ERROR; - } else { - $value = LocalizationUtility::translate('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf:none', $this->extensionName); - $message = ''; - $status = Status::OK; - } - return GeneralUtility::makeInstance(Status::class, $title, $value, $message, $status); - } - - /** - * Get extension constraints - * - * @return constraints - */ - protected function getConstraints($extensionName) - { - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName); - $typo3Version = GeneralUtility::makeInstance(Typo3Version::class); - $typo3Branch = $typo3Version->getBranch(); - $emConfUtility = GeneralUtility::makeInstance(EmConfUtility::class); - if (version_compare($typo3Branch, '11.5', '>=')) { - $emConf = - $emConfUtility->includeEmConf( - $extensionKey, ExtensionManagementUtility::extPath($extensionKey) - ); - } else { - $emConf = - $emConfUtility->includeEmConf( - $extensionKey, - [ - 'packagePath' => GeneralUtility::getFileAbsFileName('EXT:' . $extensionKey), - ] - ); - } - return $emConf['constraints'] ?? []; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/AbstractActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/AbstractActionController.php deleted file mode 100644 index 0244bf3..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/AbstractActionController.php +++ /dev/null @@ -1,301 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use Psr\Log\LoggerAwareInterface; -use Psr\Log\LoggerAwareTrait; -use SJBR\SrFeuserRegister\Domain\Data; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\Utility\UrlUtility; -use SJBR\SrFeuserRegister\View\Email; -use SJBR\SrFeuserRegister\View\Marker; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\Query\QueryHelper; -use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Action functions - */ - -abstract class AbstractActionController implements LoggerAwareInterface -{ - use LoggerAwareTrait; - - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Extension name - * - * @var string Extension name - */ - protected $extensionName; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table in used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * The data object - * - * @var Data - */ - protected $data; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The marker object - * - * @var Marker - */ - protected $marker; - - /** - * The email object - * - * @var Email; - */ - protected $email; - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param Data $data: the data object - * @param Parameters $parameters: the request parameters object - * @param Marker $marker: the marker object - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array $conf, - Data $data, - Parameters $parameters, - Marker $marker - ) { - $this->extensionKey = $extensionKey; - $this->extensionName = GeneralUtility::underscoredToUpperCamelCase($extensionKey); - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf = $conf; - $this->data = $data; - $this->parameters = $parameters; - $this->marker = $marker; - - $this->marker->generateURLMarkers($this->data->getRecUid()); - $this->email = GeneralUtility::makeInstance(Email::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - } - - /** - * Get the extension key - * - * @return string the extension key - */ - public function getExtensionKey() - { - return $this->extensionKey; - } - - /** - * Get the prefix id - * - * @return string the prefix id - */ - public function getPrefixId() - { - return $this->prefixId; - } - - /** - * Get the table in use - * - * @return string the table in use - */ - public function getTable() - { - return $this->theTable; - } - - /** - * Get the request parameters - * - * @return Parameters the request parameters - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Get the use of the password field - * - * @return boolean whether password field is used - */ - protected function getUsePassword() - { - return $this->theTable === 'fe_users' && isset($this->conf['create.']['evalValues.']['password']); - } - - /** - * Get the use of the password again field - * - * @return boolean whether password again field is used - */ - protected function getUsePasswordAgain() - { - return $this->getUsePassword() && isset($this->conf['create.']['evalValues.']['password']) && GeneralUtility::inList($this->conf['create.']['evalValues.']['password'], 'twice'); - } - - /** - * Perform user login and redirect to configured url, if any - * - * @param string $username: user name - * @param string $password: password (decrypted) - * @param boolean $redirect: whether to redirect after login or not; If true, then you must immediately call exit after this call - * @return boolean true, if login was successful, false otherwise - */ - protected function login($username, $password, $redirect = true) - { - $success = true; - $message = ''; - // Log the user in - $loginData = [ - 'uname' => $username, - 'uident' => $password, - 'uident_text' => $password, - 'status' => 'login', - ]; - // Check against configured pid (defaulting to current page) - $tsfe = $this->getTypoScriptFrontendController(); - $tsfe->fe_user->checkPid = true; - $tsfe->fe_user->checkPid_value = (int)$this->parameters->getPid(); - // Get authentication info array - $authInfo = $tsfe->fe_user->getAuthInfoArray(); - // Get the appropriate authentication service - $authServiceObj = GeneralUtility::makeInstanceService('auth', 'authUserFE'); - if (is_object($authServiceObj)) { - $authServiceObj->initAuth('processLoginDataFE', $loginData, $authInfo, $tsfe->fe_user); - // Get user info - $user = $authServiceObj->getUser(); - if (is_array($user)) { - // Check authentication - $ok = $authServiceObj->authUser($user); - if ($ok) { - // Login successfull: create user session - $tsfe->fe_user->createUserSession($user); - $tsfe->initUserGroups(); - $tsfe->fe_user->user = $tsfe->fe_user->fetchUserSession(); - } else { - // Login failed... - SessionData::clearSessionData($this->extensionKey, false); - $message = LocalizationUtility::translate('internal_auto_login_failed', $this->extensionName); - $success = false; - } - } else { - // No enabled user of the given name - $message = sprintf(LocalizationUtility::translate('internal_no_enabled_user', $this->extensionName), ($loginData['uname'] ?? '')); - SessionData::clearSessionData($this->extensionKey, false); - $success = false; - } - } else { - // Required authentication service not available - $message = LocalizationUtility::translate('internal_required_authentication_service_not_available', $this->extensionName); - $this->logger->error($this->extensionName . ': ' . $message); - SessionData::clearSessionData($this->extensionKey, false); - $success = false; - } - // Delete regHash - if ($this->parameters->getValidRegHash()) { - $regHash = $this->parameters->getRegHash(); - HashUtility::deleteHash($regHash); - } - if (!$success) { - SessionData::clearSessionData($this->extensionKey, false); - if ($message !== '') { - $this->logger->error($this->extensionName . ': ' . $message); - } - } - if ($redirect) { - // Redirect to configured page, if any - $redirectUrl = SessionData::readRedirectUrl($this->extensionKey); - if (!$redirectUrl && $success) { - $redirectUrl = isset($this->conf['autoLoginRedirect_url']) ? trim($this->conf['autoLoginRedirect_url']) : ''; - } - if (!$redirectUrl) { - if (isset($this->conf['loginPID']) ? (int)$this->conf['loginPID'] : 0) { - $redirectUrl = UrlUtility::get($this->prefixId, '', (int)$this->conf['loginPID'], [], [], false); - } else { - $redirectUrl = UrlUtility::getSiteUrl(); - } - } - header('Location: ' . GeneralUtility::locationHeaderUrl($redirectUrl)); - } - return $success; - } - - /** - * @return TypoScriptFrontendController - */ - protected static function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/CreateActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/CreateActionController.php deleted file mode 100644 index 4137632..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/CreateActionController.php +++ /dev/null @@ -1,203 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Controller\AbstractActionController; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\SrFeuserRegister\View\AfterSaveView; -use SJBR\SrFeuserRegister\View\CreateView; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Create action controller - */ -class CreateActionController extends AbstractActionController -{ - /** - * Processes the create request - * - * @param array $dataArray: array of form input fields - * @param string $cmd: the command - * @param string $cmdKey: the command key - * @return string the template with substituted markers - */ - public function doProcessing(array $finalDataArray, $cmd, $cmdKey) { - $content = ''; - $origArray = $this->data->getOrigArray(); - $securedArray = $this->theTable === 'fe_users' ? SessionData::readSecuredArray($this->extensionKey) : array(); - - $mode = AbstractView::MODE_NORMAL; - if (($this->conf[$cmdKey . '.']['preview'] ?? false) && (int)$this->parameters->getFeUserData('preview')) { - $mode = AbstractView::MODE_PREVIEW; - } - $isSubmit = $this->parameters->getFeUserData('submit') && !empty($finalDataArray) && $this->parameters->isTokenValid(); - $isDoNotSave = $this->parameters->getFeUserData('doNotSave'); - $isDoNotSave = !empty($isDoNotSave); - if ($isDoNotSave) { - SessionData::clearSessionData($this->extensionKey); - } - - if (empty($finalDataArray)) { - // Displaying an empty form - $finalDataArray = $this->data->defaultValues($cmdKey); - $this->marker->setNoError($cmdKey); - $createView = GeneralUtility::makeInstance(CreateView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $createView->render($finalDataArray, $origArray, $securedArray, $cmd, $cmdKey, $mode); - } else { - $this->data->setName($finalDataArray, $cmdKey); - $this->data->parseValues($finalDataArray, $origArray, $cmdKey); - $this->data->overrideValues($finalDataArray, $cmdKey); - $evalErrors = $this->data->evalValues($finalDataArray, $origArray, $this->marker, $cmdKey, $mode); - // If there is an error on password, clear session data - if (!empty($evalErrors['password'])) { - SessionData::clearSessionData($this->extensionKey); - } - // No preview flag if a evaluation failure has occured - if ($this->data->getFailure()) { - $mode = AbstractView::MODE_NORMAL; - } - if (GeneralUtility::inList($this->data->getFailure(), 'username')) { - $isDoNotSave = true; - } - if ($this->parameters->getFeUserData('countryChange') || $this->parameters->getFeUserData('fileDelete')) { - // This is either a country change submitted through the onchange event or a file deletion already processed by the parsing function - // We are going to redisplay - $mode = AbstractView::MODE_NORMAL; - $isDoNotSave = true; - } - $this->data->setUsername($finalDataArray, $cmdKey); - $this->data->setDataArray($finalDataArray); - if (!$this->data->getFailure() && $mode === AbstractView::MODE_NORMAL && $isSubmit && !$isDoNotSave) { - $this->data->setPassword($finalDataArray, $cmdKey); - $newDataArray = array(); - $theUid = $this->data->save($finalDataArray, $origArray, SessionData::readToken($this->extensionKey), $newDataArray, $cmd, $cmdKey, $this->parameters->getPid()); - if (!empty($newDataArray)) { - $dataArray = $newDataArray; - $dataArray['auto_login_key'] = $finalDataArray['auto_login_key'] ?? ''; - } - if ($this->data->getSaved()) { - // If auto login on create - if ($this->theTable === 'fe_users' - && $cmdKey === 'create' - && !$this->parameters->getSetfixedEnabled() - && ($this->conf['enableAutoLoginOnCreate'] ?? false)) - { - // keep the session for the following auto login - } else { - SessionData::clearSessionData($this->extensionKey); - } - $isCustomerConfirmsMode = false; - if ( - ($this->conf['enableAdminReview'] ?? false) - && (($this->conf['enableEmailConfirmation'] ?? false) || ($this->conf['infomail'] ?? false)) - ) { - $isCustomerConfirmsMode = true; - } - if ($cmd === 'invite') { - $key = Marker::SETFIXED_PREFIX . 'INVITE'; - } else if ($this->parameters->getSetfixedEnabled()) { - // This is the case where the user or admin has to confirm - $key = Marker::SETFIXED_PREFIX . 'CREATE'; - if ($this->theTable === 'fe_users' - && !($this->conf['enableEmailConfirmation'] ?? false) - && ($this->conf['enableAdminReview'] ?? false)) - { - // This is the case where the user does not have to confirm, but has to wait for admin review - $key = 'CREATE' . Marker::SAVED_SUFFIX . '_REVIEW'; - } else if ($isCustomerConfirmsMode) { - // This is the case where both have to confirm - $key .= '_REVIEW'; - } - } else { - $key = 'CREATE' . Marker::SAVED_SUFFIX; - } - $afterSaveView = GeneralUtility::makeInstance(AfterSaveView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $afterSaveView->render($finalDataArray, $origArray, $securedArray, $cmd, $cmdKey, $key); - if (($this->conf['enableAdminReview'] ?? false) && !$isCustomerConfirmsMode) { - // Send admin the confirmation email - // The user will not confirm in this mode - $this->email->compile( - Marker::SETFIXED_PREFIX . 'REVIEW', - $dataArray, - $origArray, - $securedArray, - ($this->conf['email.']['admin'] ?? ''), - 'setfixed', - $cmdKey - ); - } else { - $this->emailField = $this->conf['email.']['field'] ?? ''; - $recipient = isset($finalDataArray[$this->emailField]) && $finalDataArray[$this->emailField] ? $finalDataArray[$this->emailField] : ($origArray[$this->emailField] ?? ''); - // Send email message(s) - $this->email->compile( - $key, - $dataArray, - $origArray, - $securedArray, - $recipient, - $cmd, - $cmdKey - ); - } - // Auto login on create - if ($this->theTable === 'fe_users' - && $cmd === 'create' - && !$this->parameters->getSetfixedEnabled() - && ($this->conf['enableAutoLoginOnCreate'] ?? false)) - { - $password = SessionData::readPassword($this->extensionKey); - $loginSuccess = $this->login($dataArray['username'] ?? '', $password['password'] ?? ''); - if ($loginSuccess) { - // Login was successful - exit; - } else { - // Login failed... should not happen... - // If it does, a login form will be displayed as if auto login was not configured - $content = ''; - } - } - } else if ($this->data->getError()) { - // If there was an error, we return an error message - $errorView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $errorView->render($this->data->getError(), $finalDataArray, $origArray, $securedArray, $cmd, $cmdKey); - } - } else { - // There has been no attempt to save. - // That is either preview or displaying a not correctly filled form - $createView = GeneralUtility::makeInstance(CreateView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $createView->render($finalDataArray, $origArray, $securedArray, $cmd === 'invite' ? $cmd : 'create', $cmdKey, $mode); - } - } - if ($this->parameters->getValidRegHash() && $mode === AbstractView::MODE_NORMAL) { - $regHash = $this->parameters->getRegHash(); - HashUtility::deleteHash($regHash); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/DeleteActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/DeleteActionController.php deleted file mode 100644 index 52ff4fe..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/DeleteActionController.php +++ /dev/null @@ -1,110 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Controller\AbstractActionController; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\SrFeuserRegister\View\AfterSaveView; -use SJBR\SrFeuserRegister\View\DeleteView; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Delete action controller - */ - -class DeleteActionController extends AbstractActionController -{ - /** - * Processes the delete request - * - * @param array $dataArray: array of form input fields - * @param string $cmd: the command - * @param string $cmdKey: the command key - * @return string the template with substituted markers - */ - public function doProcessing(array $dataArray, $cmd, $cmdKey) - { - // If deleting is enabled - if (empty($this->conf['delete'] ?? '')) { - $errorText = LocalizationUtility::translate('internal_delete_option', $this->extensionName); - throw new Exception($errorText, Exception::MISCONFIGURATION); - } - $content = ''; - $origArray = $this->data->getOrigArray(); - $securedArray = $this->theTable === 'fe_users' ? SessionData::readSecuredArray($this->extensionKey) : []; - - $mode = AbstractView::MODE_NORMAL; - if (($this->conf[$cmdKey . '.']['preview'] ?? false) && (int)$this->parameters->getFeUserData('preview')) { - $mode = AbstractView::MODE_PREVIEW; - } - $isSubmit = $this->parameters->getFeUserData('submit') && $this->parameters->isTokenValid(); - $isDoNotSave = $this->parameters->getFeUserData('doNotSave'); - $isDoNotSave = !empty($isDoNotSave); - if ($isDoNotSave) { - SessionData::clearSessionData($this->extensionKey); - } - // If data is submitted, we take care of it here. - if ($mode === AbstractView::MODE_NORMAL && $isSubmit && !$isDoNotSave) { - $this->data->deleteRecord($origArray, $dataArray); - if ($this->data->getSaved()) { - $key = 'DELETE' . Marker::SAVED_SUFFIX; - $afterSaveView = GeneralUtility::makeInstance(AfterSaveView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $afterSaveView->render($dataArray, $origArray, $securedArray, $cmd, $cmdKey, $key); - if ($this->conf['email.']['DELETE_SAVED'] ?? false) { - $this->emailField = $this->conf['email.']['field'] ?? ''; - $recipient = (isset($dataArray[$this->emailField]) && $dataArray[$this->emailField]) ? $dataArray[$this->emailField] : ($origArray[$this->emailField] ?? ''); - // Send email message(s) - $this->email->compile( - $key, - $dataArray, - $origArray, - $securedArray, - $recipient, - $cmd, - $cmdKey - ); - } - } else if ($this->data->getError()) { - // If there was an error, we return an error message - $errorView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $errorView->render($this->data->getError(), $finalDataArray, $this->data->getOrigArray(), $securedArray, $cmd, $cmdKey); - } - } else { - // That is either preview or initial form - $deleteView = GeneralUtility::makeInstance(DeleteView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content .= $deleteView->render('', $dataArray, $origArray, $securedArray, $cmd, $cmdKey); - } - if ($this->parameters->getValidRegHash() && $mode === AbstractView::MODE_NORMAL) { - $regHash = $this->parameters->getRegHash(); - HashUtility::deleteHash($regHash); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/EditActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/EditActionController.php deleted file mode 100644 index abe349d..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/EditActionController.php +++ /dev/null @@ -1,183 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Controller\AbstractActionController; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\Utility\UrlUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\SrFeuserRegister\View\AfterSaveView; -use SJBR\SrFeuserRegister\View\CreateView; -use SJBR\SrFeuserRegister\View\EditView; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Edit action controller - */ -class EditActionController extends AbstractActionController -{ - /** - * Processes the edit request - * - * @param array $dataArray: array of form input fields - * @param string $cmd: the command - * @param string $cmdKey: the command key - * @return string the template with substituted markers - */ - public function doProcessing(array $dataArray, $cmd, $cmdKey) { - // If editing is enabled - if (empty($this->conf['edit'] ?? '') || empty($this->conf['edit.'] ?? [])) { - $errorText = LocalizationUtility::translate('internal_edit_option', $this->extensionName); - throw new Exception($errorText, Exception::MISCONFIGURATION); - } - $content = ''; - $origArray = $this->data->getOrigArray(); - $securedArray = $this->theTable === 'fe_users' ? SessionData::readSecuredArray($this->extensionKey) : []; - - $mode = AbstractView::MODE_NORMAL; - if ( - ($this->conf[$cmdKey . '.']['preview'] ?? false) - && (int)$this->parameters->getFeUserData('preview') - ) { - $mode = AbstractView::MODE_PREVIEW; - } - $isSubmit = $this->parameters->getFeUserData('submit') && $this->parameters->isTokenValid(); - $isDoNotSave = $this->parameters->getFeUserData('doNotSave'); - $isDoNotSave = !empty($isDoNotSave); - if ($isDoNotSave) { - SessionData::clearSessionData($this->extensionKey); - } - if (($cmd === '' && empty($dataArray)) || $cmd === 'login') { - // Displaying a link to edit or a no permission to edit message - $createView = GeneralUtility::makeInstance(CreateView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $createView->render($dataArray, $origArray, $securedArray, $cmd, $cmdKey, $mode); - } else { - $this->data->setName($dataArray, $cmdKey); - $this->data->parseValues($dataArray, $origArray, $cmdKey); - $this->data->overrideValues($dataArray, $cmdKey); - $evalErrors = $this->data->evalValues($dataArray, $origArray, $this->marker, $cmdKey, $mode); - // If there is an error on password, clear session data - if (!empty($evalErrors['password'] ?? [])) { - SessionData::clearSessionData($this->extensionKey); - } - // No preview flag if an evaluation failure has occured - if ($this->data->getFailure()) { - $mode = AbstractView::MODE_NORMAL; - } - if (GeneralUtility::inList($this->data->getFailure(), 'username')) { - $isDoNotSave = true; - } - if ($this->parameters->getFeUserData('countryChange') || $this->parameters->getFeUserData('fileDelete')) { - // This is a country change submitted through the onchange event or a file deletion already processed by the parsing function - $mode = AbstractView::MODE_NORMAL; - $isDoNotSave = true; - } - $this->data->setUsername($dataArray, $cmdKey); - $this->data->setDataArray($dataArray); - if (!$this->data->getFailure() && $mode === AbstractView::MODE_NORMAL && $this->parameters->isTokenValid() && $isSubmit && !$isDoNotSave && !$this->parameters->getFeUserData('rU')) { - $this->data->setPassword($dataArray, $cmdKey); - $newDataArray = []; - $theUid = $this->data->save($dataArray, $origArray, SessionData::readToken($this->extensionKey), $newDataArray, $cmd, $cmdKey, $this->parameters->getPid()); - if (!empty($newDataArray)) { - $dataArray = $newDataArray; - } - if ($this->data->getSaved()) { - SessionData::clearSessionData($this->extensionKey); - $key = 'EDIT' . Marker::SAVED_SUFFIX; - $afterSaveView = GeneralUtility::makeInstance(AfterSaveView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $afterSaveView->render($dataArray, $origArray, $securedArray, $cmd, $cmdKey, $key); - if (($this->conf['email.']['EDIT_SAVED'] ?? false) - || ($this->conf['email.']['DELETE_SAVED'] ?? false) - || ($this->conf['notify.']['EDIT_SAVED'] ?? false) - || ($this->conf['notify.']['DELETE_SAVED'] ?? false)) - { - $this->emailField = $this->conf['email.']['field'] ?? ''; - $recipient = ((isset($dataArray[$this->emailField]) && $dataArray[$this->emailField]) ? $dataArray[$this->emailField] : ($origArray[$this->emailField] ?? '')); - $parsedOrigArray = $this->data->parseIncomingData($origArray); - // Send email message(s) - $this->email->compile($key, $dataArray, $parsedOrigArray, $securedArray, $recipient, $cmd, $cmdKey); - } - if ($this->parameters->getValidRegHash() && $mode === AbstractView::MODE_NORMAL) { - $regHash = $this->parameters->getRegHash(); - HashUtility::deleteHash($regHash); - } - // Link to on edit save - // backURL may link back to referring process - if ( - $this->theTable === 'fe_users' - && ($cmd === 'edit' || $cmd === 'password') - && ($this->parameters->getBackURL() || (($this->conf['linkToPID'] ?? false) && ($this->parameters->getFeUserData('linkToPID') || !($this->conf['linkToPIDAddButton'] ?? false)))) - ) { - $destUrl = $this->parameters->getBackURL() ?: UrlUtility::getTypoLink_URL(($this->conf['linkToPID'] ?? 0) . ',' . $GLOBALS['TSFE']->type); - header('Location: ' . GeneralUtility::locationHeaderUrl($destUrl)); - exit; - } - } else if ($this->data->getError()) { - // If there was an error, we return an error message - $errorView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $errorView->render($this->data->getError(), $dataArray, $this->data->getOrigArray(), $securedArray, $cmd, $cmdKey); - } - } else { - if ($this->theTable !== 'fe_users' && ($this->conf['setfixed.']['EDIT.']['_FIELDLIST'] ?? false)) { - $fD = GeneralUtility::_GP('fD'); - $fieldArr = []; - if (is_array($fD)) { - foreach ($fD as $field => $value) { - $origArray[$field] = rawurldecode($value); - $fieldArr[] = $field; - } - } - $theCode = Authentication::setfixedHash($origArray, $this->conf, $origArray['_FIELDLIST'] ?? ''); - } - $origArray = $this->data->parseIncomingData($origArray); - $aCAuth = Authentication::aCAuth($this->parameters->getAuthCode(), $origArray, $this->conf, $this->conf['setfixed.']['EDIT.']['_FIELDLIST'] ?? ''); - if (($this->theTable === 'fe_users' && GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'isLoggedIn')) || $aCAuth || (($theCode ?? false) && !strcmp($this->parameters->getAuthCode(), $theCode))) { - // Must be logged in OR be authenticated by the aC code in order to edit - // If the recUid selects a record.... (no check here) - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); - if ((isset($theCode) && !strcmp($this->parameters->getAuthCode(), $theCode)) || $aCAuth || $this->data->DBmayFEUserEdit($this->theTable, $origArray, ['uid' => $userAspect->get('id'), 'usergroup' => $userAspect->get('groupIds')], $this->conf['allowedGroups'] ?? '', $this->conf['fe_userEditSelf'] ?? 0)) { - // Display the form, if access granted. - $editView = GeneralUtility::makeInstance(EditView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content .= $editView->render($dataArray, $origArray, $securedArray, $cmd, $cmdKey, $mode); - } else { - // Else display error, that you could not edit that particular record... - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content.= $plainView->render('###TEMPLATE_NO_PERMISSIONS###', $dataArray, $origArray, $securedArray, $cmd, $cmdKey); - } - } else { - // This is if there is no login user. This must tell that you must login. Perhaps link to a page with create-user or login information. - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content.= $plainView->render('###TEMPLATE_AUTH###', $dataArray, $origArray, $securedArray, $cmd, $cmdKey); - } - } - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/InfomailActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/InfomailActionController.php deleted file mode 100644 index b40db17..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/InfomailActionController.php +++ /dev/null @@ -1,94 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Controller\AbstractActionController; -use SJBR\SrFeuserRegister\Utility\DataUtility; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Infomail action controller - */ -class InfomailActionController extends AbstractActionController -{ - /** - * Processes the infomail request - * - * @param array $dataArray: array of form input fields - * @param string $cmd: the command - * @param string $cmdKey: the command key - * @return string the template with substituted markers - */ - public function doProcessing(array $dataArray, $cmd, $cmdKey) { - // If editing is enabled - if (empty($this->conf['infomail'] ?? '') || empty($this->conf['email.']['field'] ?? '') || !in_array($this->conf['email.']['field'], array_keys($GLOBALS['TCA'][$this->theTable]['columns']))) { - $errorText = LocalizationUtility::translate('internal_infomail_option', $this->extensionName); - throw new Exception($errorText, Exception::MISCONFIGURATION); - } - $content = ''; - $origArray = $this->data->getOrigArray(); - $securedArray = array(); - $fetch = $this->parameters->getFeUserData('fetch'); - if (!empty($fetch)) { - $dataArray['email'] = $fetch; - } - $origArray = $this->data->parseIncomingData($origArray, false); - if (!empty($fetch) || $this->parameters->getFeUserData('submit')) { - $evalErrors = $this->data->evalValues($dataArray, $origArray, $this->marker, $cmdKey); - } - $failure = $this->data->getFailure(); - if (!empty($fetch) && empty($failure)) { - $pidLock = 'AND pid IN (\'' . implode('\',\'', GeneralUtility::trimExplode(',', $this->parameters->getPid(), true)) . '\')'; - $enable = $GLOBALS['TSFE']->sys_page->enableFields($this->theTable); - $DBrows = DataUtility::getRecordsByField($this->theTable, $this->conf['email.']['field'], $fetch, $pidLock . $enable, '', '', '100'); - if (is_array($DBrows)) { - $recipient = $DBrows[0][$this->conf['email.']['field']]; - $this->data->setDataArray($DBrows[0]); - $this->email->compile('INFOMAIL', $DBrows[0], $DBrows[0], $securedArray, trim($recipient), $cmd, $cmdKey); - } else if (GeneralUtility::validEmail($fetch)) { - $fetchArray = ['email' => $fetch]; - $this->email->compile('INFOMAIL_NORECORD', $fetchArray, $fetchArray, $securedArray, $fetch, $cmd, $cmdKey); - } - $subpartKey = '###TEMPLATE_' . Marker::INFOMAIL_PREFIX . 'SENT###'; - $this->marker->addGeneralHiddenFieldsMarkers($cmd, $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $plainView->render($subpartKey, is_array($DBrows) ? ($DBrows[0] ?? []) : (is_array($fetchArray) ? $fetchArray : []), $origArray, $securedArray, $cmd, $cmdKey); - } else { - $subpartKey = '###TEMPLATE_INFOMAIL###'; - $markerArray['###FIELD_email###'] = empty($fetch) ? '' : htmlspecialchars($fetch); - $this->marker->addGeneralHiddenFieldsMarkers($cmd, $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content.= $plainView->render($subpartKey, array(), $origArray, $securedArray, $cmd, $cmdKey); - } - if ($this->parameters->getValidRegHash()) { - $regHash = $this->parameters->getRegHash(); - HashUtility::deleteHash($regHash); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/RegisterPluginController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/RegisterPluginController.php deleted file mode 100644 index 877624c..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/RegisterPluginController.php +++ /dev/null @@ -1,432 +0,0 @@ - - * (c) 2004-2022 Stanislas Rolland - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Configuration\ConfigurationCheck; -use SJBR\SrFeuserRegister\Controller\CreateActionController; -use SJBR\SrFeuserRegister\Controller\DeleteActionController; -use SJBR\SrFeuserRegister\Controller\EditActionController; -use SJBR\SrFeuserRegister\Controller\InfomailActionController; -use SJBR\SrFeuserRegister\Controller\SetfixedActionController; -use SJBR\SrFeuserRegister\Domain\Data; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\ArrayUtility; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; -use TYPO3\CMS\Frontend\Plugin\AbstractPlugin; - -/** - * Front end user self-registration and profile maintenance - */ -class RegisterPluginController extends AbstractPlugin -{ - /** - * Content object - * - * @var ContentObjectRenderer - */ - public $cObj; - - /** - * Extension key - * - * @var string - */ - public $extKey = 'sr_feuser_register'; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - public $prefixId = 'tx_srfeuserregister_pi1'; - - /** - * The table in used - * - * @var string - */ - protected $theTable = 'fe_users'; - - /** - * The plugin configuration - * - * @var array - */ - public $conf; - - /** - * List of fields reserved as administration fields - * - * @var string - */ - protected $adminFieldList = ''; - - /** - * A list of button label names - * - * @var string - */ - protected $buttonLabelsList = ''; - - /** - * A list of other label names - * - * @var string - */ - protected $otherLabelsList = ''; - - /** - * The data object - * - * @var Data - */ - protected $data; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The marker object - * - * @var Marker - */ - protected $marker; - - /** - * The mode (normal or preview) - * - * @var int - */ - protected $mode = 0; - - /** - * Commands that may be processed when no user is logged in - * @var array - */ - protected $noLoginCommands = ['create', 'invite', 'setfixed', 'infomail']; - - /** - * Plugin entry script - * - * @param string $content: rendered content (not used) - * @param array $conf: the plugin TS configuration - * @return string the rendered content - */ - public function main($content, $conf) - { - $extensionName = GeneralUtility::underscoredToUpperCamelCase($this->extKey); - $this->pi_setPiVarDefaults(); - $this->conf =& $conf; - // Check extension requirements - $content = ConfigurationCheck::checkRequirements($this->extKey); - // The table may be configured - if (isset($this->conf['table.']) && is_array($this->conf['table.']) && ($this->conf['table.']['name'] ?? false)) { - $this->theTable = $this->conf['table.']['name']; - } - // Check presence of configured table in TCA - if (!isset($GLOBALS['TCA'][$this->theTable]) - || !is_array($GLOBALS['TCA'][$this->theTable]) - || !isset($GLOBALS['TCA'][$this->theTable]['columns']) - || !is_array($GLOBALS['TCA'][$this->theTable]['columns'])) - { - $errorText = LocalizationUtility::translate('table_not_defined_in_TCA', $extensionName); - $errorText = sprintf($errorText, $this->theTable); - throw new Exception($errorText, Exception::TABLE_NOT_DEFINED); - } - // If no error content, proceed - if (!$content) { - // Validate the token and initialize request parameters - $this->parameters = GeneralUtility::makeInstance(Parameters::class, $this->extKey, $this->prefixId, $this->theTable, $this->conf, $this->piVars, $this); - // Initialize the incoming and original data - $this->data = GeneralUtility::makeInstance(Data::class, $this->extKey, $this->prefixId, $this->theTable, $this->conf, $this->cObj, $this->parameters, $this->adminFieldList); - // Initialize the controller - $this->initialize(); - // Initialize marker class - $this->marker = GeneralUtility::makeInstance(Marker::class, $this->extKey, $this->prefixId, $this->theTable, $this->conf, $this->parameters, $this->buttonLabelsList, $this->otherLabelsList); - if ($this->parameters->isTokenValid() || ($this->parameters->getCmd() !== 'setfixed' && $this->parameters->getCmd() !== 'infomail')) { - // Process the request - $content = $this->doProcessing($this->parameters->getCmd(), $this->parameters->getCmdKey(), $this->data->getOrigArray(), $this->data->getDataArray()); - } else { - $this->marker->generateURLMarkers(); - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - if ($this->parameters->getCmd() === 'setfixed') { - $content = $plainView->render('###TEMPLATE_SETFIXED_FAILED###', [], [], [], '', ''); - } else { - $content = $plainView->render('###TEMPLATE_INVALID_TOKEN###', [], [], [], '', ''); - } - } - } - return CssUtility::wrapInBaseClass($this->prefixId, $content); - } - - /** - * Initialize the controller - */ - protected function initialize() - { - $origArray = []; - $cmd = $this->parameters->getCmd(); - $dataArray = $this->data->getDataArray(); - $feUserdata = $this->parameters->getFeUserData(); - $uid = $dataArray['uid'] ?? ($feUserdata['rU'] ?? (!in_array($cmd, $this->noLoginCommands) ? GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'id') : 0)); - if ($uid) { - $this->data->setRecUid((int) $uid); - $newOrigArray = $this->getTypoScriptFrontendController()->sys_page->getRawRecord($this->theTable, (int)$uid); - if (isset($newOrigArray) && is_array($newOrigArray)) { - $this->data->modifyRow($newOrigArray, true); - $origArray = $newOrigArray; - } - } - $this->data->setOrigArray($origArray); - // Set the command key - $cmdKey = $this->setCmdKey($cmd, $uid, !empty($origArray)); - $this->parameters->setCmdKey($cmdKey); - $this->processSettings($cmdKey); - } - - /** - * Set the command key - * - * @param string $cmd: the command - * @param int $uid: the uid of the current record - * @param bool $nonEmptyRecord: true, if the current record is not empty - * @return string the command key - */ - protected function setCmdKey($cmd, $uid, $nonEmptyRecord) - { - $cmdKey = ''; - if ($cmd === 'edit' || $cmd === 'invite' || $cmd === 'password' || $cmd === 'infomail') { - $cmdKey = $cmd; - } else { - if (($cmd === '' || $cmd === 'setfixed') && (($this->theTable !== 'fe_users' || $uid == GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'id')) && $nonEmptyRecord)) { - $cmdKey = 'edit'; - } else { - $cmdKey = 'create'; - } - } - return $cmdKey; - } - - /** - * Adjust some configuration settings - * - * @param string $cmdKey: the cmd key that will be used - * @return void - */ - protected function processSettings($cmdKey) - { - if (!ExtensionManagementUtility::isLoaded('direct_mail')) { - $this->conf[$cmdKey.'.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', 1), ['module_sys_dmail_category,module_sys_dmail_newsletter'])); - $this->conf[$cmdKey . '.']['required'] = implode(',', array_diff(GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['required'] ?? '', 1), ['module_sys_dmail_category, module_sys_dmail_newsletter'])); - } - // Make lists ready for GeneralUtility::inList which does not yet allow blanks - $fieldConfArray = ['fields', 'required']; - foreach ($fieldConfArray as $k => $v) { - $this->conf[$cmdKey . '.'][$v] = implode(',', array_unique(GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.'][$v] ?? '', true))); - } - if ($this->theTable === 'fe_users') { - // When not in edit mode, add username to lists of fields and required fields unless explicitly disabled - if (empty($this->conf[$cmdKey.'.']['doNotEnforceUsername'] ?? '')) { - if ($cmdKey != 'edit' && $cmdKey != 'password') { - $this->conf[$cmdKey . '.']['fields'] = implode(',', array_unique(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? '') . ',username', 1))); - $this->conf[$cmdKey . '.']['required'] = implode(',', array_unique(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['required'] ?? '') . ',username', 1))); - } - } - // When in edit mode, remove password from required fields - if ($cmdKey === 'edit') { - $this->conf[$cmdKey . '.']['required'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['required'] ?? ''), 1), ['password'])); - } - if (($this->conf[$cmdKey . '.']['generateUsername'] ?? false) || $cmdKey == 'password') { - $this->conf[$cmdKey . '.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? ''), 1), ['username'])); - } - if ($cmdKey === 'invite') { - $this->conf[$cmdKey . '.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? ''), 1), ['password'])); - $this->conf[$cmdKey . '.']['required'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['required'] ?? ''), 1), ['password'])); - // Do not evaluate any password when inviting - unset($this->conf[$cmdKey . '.']['evalValues.']['password']); - } - if ($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) { - $this->conf[$cmdKey . '.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? ''), 1), ['username'])); - if ($cmdKey === 'create' || $cmdKey === 'invite') { - $this->conf[$cmdKey . '.']['fields'] = implode(',', GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? '') . ',email', 1)); - $this->conf[$cmdKey . '.']['required'] = implode(',', GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['required'] ?? '') . ',email', 1)); - } - if (($cmdKey === 'edit' || $cmdKey === 'password') && (($this->conf['enableEmailConfirmation'] ?? false) || ($this->conf['enableAdminReview'] ?? false) || ($this->conf['setfixed'] ?? false))) { - $this->conf[$cmdKey . '.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($this->conf[$cmdKey . '.']['fields'] ?? ''), 1), ['email'])); - if ($this->conf[$cmdKey . '.']['evalValues' . '.']['email'] ?? false) { - unset($this->conf[$cmdKey . '.']['evalValues' . '.']['email']); - } - } - } - // Do not evaluate the username if it is generated or if email is used - if (($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) || (($this->conf[$cmdKey . '.']['generateUsername'] ?? false) && $cmdKey !== 'edit' && $cmdKey !== 'password')) { - unset($this->conf[$cmdKey . '.']['evalValues.']['username']); - } - // Invoke hooks that may modify the configuration - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['configuration']) && is_array($extensionConfiguration[$this->prefixId]['configuration'])) ? $extensionConfiguration[$this->prefixId]['configuration'] : []; - foreach ($hookClassArray as $classRef) { - $hookObject = GeneralUtility::makeInstance($classRef); - if (is_object($hookObject) && method_exists($hookObject, 'modifyConf')) { - $hookObject->modifyConf($this->conf, $cmdKey); - } - } - - if ($cmdKey === 'invite' && ($this->conf['enableAdminReview'] ?? false)) { - if ( - $this->parameters->getSetfixedEnabled() - && isset($this->conf['setfixed.']['ACCEPT.']) - && is_array($this->conf['setfixed.']['ACCEPT.']) - && isset($this->conf['setfixed.']['APPROVE.']) - && is_array($this->conf['setfixed.']['APPROVE.']) - ) { - $this->conf['setfixed.']['APPROVE.'] = $this->conf['setfixed.']['ACCEPT.']; - } - } - if ($cmdKey === 'create' && ($this->conf['enableAdminReview'] ?? false) && !($this->conf['enableEmailConfirmation'] ?? false)) { - $this->conf['create.']['defaultValues.']['disable'] = '1'; - $this->conf['create.']['overrideValues.']['disable'] = '1'; - } - // Infomail does not apply to fe_users - $this->conf['infomail'] = 0; - } - - // Adjust some evaluation settings - if (isset($this->conf[$cmdKey . '.']['evalValues.']) && is_array($this->conf[$cmdKey . '.']['evalValues.'])) { - // Do not evaluate any password when inviting - if ($cmdKey === 'invite' && isset($this->conf[$cmdKey . '.']['evalValues.']['password'])) { - unset($this->conf[$cmdKey . '.']['evalValues.']['password']); - } - // Do not evaluate the username if it is generated or if email is used - if (($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) || (($this->conf[$cmdKey . '.']['generateUsername'] ?? false) && $cmdKey !== 'edit' && $cmdKey !== 'password')) { - if (isset($this->conf[$cmdKey . '.']['evalValues.']['username'])) { - unset($this->conf[$cmdKey . '.']['evalValues.']['username']); - } - } - } - - // Forward the modified settings to the data object - $this->data->setConfiguration($this->conf); - } - - /** - * All actions are processed here - * - * @param string command to execute - * @param string command key - * @param array the current state in the table - * @param array the incoming data - * @return string text to display - */ - public function doProcessing($cmd, $cmdKey, array $origArray, array $dataArray) { - $finalDataArray = []; - $securedArray = []; - $uid = $this->data->getRecUid(); - $context = GeneralUtility::makeInstance(Context::class); - if ( - ( - // Check if the login user is the right one - $this->theTable === 'fe_users' - && (!$context->getPropertyFromAspect('frontend.user', 'isLoggedIn') || ($uid > 0 && $context->getPropertyFromAspect('frontend.user', 'id') != $uid)) - // Or no login is_a required for this command - && !in_array($cmd, $this->noLoginCommands) - // this is a unsubscribe link from Direct Mail - && !($cmd === 'delete' && Authentication::aCAuth($this->parameters->getAuthCode(), $origArray, $this->conf, $this->conf['setfixed.']['DELETE.']['_FIELDLIST'] ?? '')) - ) - ) { - $origArray = []; - $this->data->setOrigArray($origArray); - $this->data->resetDataArray(); - $finalDataArray = $dataArray; - } else if ($this->data->bNewAvailable()) { - $finalDataArray = $dataArray; - if ($this->theTable === 'fe_users') { - $securedArray = SessionData::readSecuredArray($this->extKey); - } - ArrayUtility::mergeRecursiveWithOverrule($finalDataArray, $securedArray); - } else { - $finalDataArray = $dataArray; - } - switch ($cmd ?? '') { - case 'create': - case 'invite': - $controllerClass = CreateActionController::class; - break; - case 'edit': - case 'password': - case 'login': - $controllerClass = EditActionController::class; - break; - case 'delete': - $controllerClass = DeleteActionController::class; - break; - case 'setfixed': - $controllerClass = SetfixedActionController::class; - break; - case 'infomail': - $controllerClass = InfomailActionController::class; - break; - case '': - switch ($cmdKey ?? '') { - case 'edit': - $controllerClass = EditActionController::class; - break; - case 'create': - default: - $controllerClass = CreateActionController::class; - break; - } - break; - default: - $controllerClass = CreateActionController::class; - } - $actionController = GeneralUtility::makeInstance($controllerClass, $this->extKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $actionController->doProcessing($finalDataArray, $cmd, $cmdKey); - return $content; - } - - /** - * @return TypoScriptFrontendController - */ - protected static function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Controller/SetfixedActionController.php b/typo3conf/ext/sr_feuser_register/Classes/Controller/SetfixedActionController.php deleted file mode 100644 index 1113fa7..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Controller/SetfixedActionController.php +++ /dev/null @@ -1,292 +0,0 @@ - - * (c) 2004-2022 Stanislas Rolland - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Security\StorageSecurity; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\SrFeuserRegister\View\EditView; -use SJBR\SrFeuserRegister\View\Marker; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Setfixed action funtions - */ -class SetfixedActionController extends AbstractActionController -{ - /** - * Process the front end user reply to the confirmation request - * - * @param array $dataArray: array of form input fields - * @param string $cmd: the command - * @param string $cmdKey: the command key - * @return string the template with substituted markers - */ - public function doProcessing(array $dataArray, $cmd, $cmdKey) { - // If setfixed is configured - if ( - empty($this->conf['enableEmailConfirmation'] ?? '') - && ($this->theTable !== 'fe_users' || empty($this->conf['enableAdminReview'] ?? '')) - && empty($this->conf['setfixed'] ?? '') - && ($this->theTable === 'fe_users' || empty($this->conf['infomail'] ?? '')) - ) { - $errorText = LocalizationUtility::translate('internal_setfixed_option', $this->extensionName); - throw new Exception($errorText, Exception::MISCONFIGURATION); - } - $content = ''; - $uid = $this->data->getRecUid(); - $origArray = $this->data->getOrigArray(); - $securedArray = $this->theTable === 'fe_users' ? SessionData::readSecuredArray($this->extensionKey) : []; - $origArray = $this->data->parseIncomingData($origArray, false); - $feuData = $this->parameters->getFeUserData(); - $row = $origArray; - $autoLoginIsRequested = false; - $origUsergroup = $row['usergroup'] ?? ''; - $setfixedUsergroup = ''; - $sFK = $feuData['sFK'] ?? ''; - $setfixedSuffix = $sFK; - $fD = GeneralUtility::_GP('fD'); - $fieldArr = []; - if (isset($fD) && is_array($fD)) { - foreach ($fD as $field => $value) { - $row[$field] = rawurldecode($value); - if ($field === 'usergroup') { - $setfixedUsergroup = rawurldecode($value); - } - $fieldArr[] = $field; - } - } - if ($this->theTable === 'fe_users') { - // Determine whether auto login is requested - $autoLoginIsRequested = StorageSecurity::getAutoLoginIsRequested($feuData, $row); - } - // Calculate the setfixed hash from incoming data - $fieldList = $row['_FIELDLIST'] ?? ''; - $codeLength = strlen($this->parameters->getAuthCode()); - // Let's try with a code length of 8 in case this link is coming from direct mail - if ($codeLength == 8 && in_array($sFK, array('DELETE', 'EDIT', 'UNSUBSCRIBE'))) { - $theCode = Authentication::setfixedHash($row, $this->conf, $fieldList, $codeLength); - } else { - $theCode = Authentication::setfixedHash($row, $this->conf, $fieldList); - } - - if ( - !strcmp($this->parameters->getAuthCode(), $theCode) - && !( - $sFK === 'APPROVE' - && ((isset($origArray['disable']) && $origArray['disable'] == '0') || (isset($origArray['hidden']) && $origArray['hidden'] == '0')) - ) - ) { - if ($sFK === 'EDIT') { - $this->marker->addGeneralHiddenFieldsMarkers('edit', $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - $editView = GeneralUtility::makeInstance(EditView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $editView->render( - $dataArray, - $origArray, - $securedArray, - 'setfixed', - $cmdKey, - AbstractView::MODE_NORMAL, - $this->data->inError - ); - } else if ($sFK === 'DELETE' || $sFK === 'REFUSE') { - if (!($GLOBALS['TCA'][$this->theTable]['ctrl']['delete'] ?? false) || ($this->conf['forceFileDelete'] ?? false)) { - // If the record is fully deleted... then remove the image attached. - $this->data->deleteFilesFromRecord($uid); - } - $res = $this->data->deleteRecordByUid($uid); - $this->data->deleteMMRelations($uid, $row); - } else { - if ($this->theTable === 'fe_users') { - if ($this->conf['create.']['allowUserGroupSelection'] ?? false) { - $originalGroups = is_array($origUsergroup) ? $origUsergroup : GeneralUtility::trimExplode(',', $origUsergroup, true); - $overwriteGroups = GeneralUtility::trimExplode(',', $this->conf['create.']['overrideValues.']['usergroup'] ?? '', true); - $remainingGroups = array_diff($originalGroups, $overwriteGroups); - $groupsToAdd = GeneralUtility::trimExplode(',', $setfixedUsergroup, true); - $finalGroups = array_merge( - $remainingGroups, $groupsToAdd - ); - $row['usergroup'] = implode(',', array_unique($finalGroups)); - } - } - // Hook: first we initialize the hooks - $hookObjectsArr = []; - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - if ( - isset($extensionConfiguration[$this->prefixId]['confirmRegistrationClass']) - && is_array($extensionConfiguration[$this->prefixId]['confirmRegistrationClass']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['confirmRegistrationClass'] as $classRef) { - $hookObjectsArr[] = GeneralUtility::makeInstance($classRef); - } - } - // Hook: confirmRegistrationClass_preProcess - foreach($hookObjectsArr as $hookObj) { - if (method_exists($hookObj, 'confirmRegistrationClass_preProcess')) { - $hookObj->confirmRegistrationClass_preProcess($row, $this); - } - } - $newFieldList = implode(',', array_intersect( - GeneralUtility::trimExplode(',', $this->data->getFieldList(), 1), - GeneralUtility::trimExplode(',', implode(',', $fieldArr), 1) - )); - - if ($sFK === 'UNSUBSCRIBE') { - $newFieldList = implode(',', array_intersect( - GeneralUtility::trimExplode(',', $newFieldList), - GeneralUtility::trimExplode(',', $this->conf['unsubscribeAllowedFields'] ?? '', 1) - )); - } - - if ($sFK !== 'ENTER' && $newFieldList != '') { - $res = $this->data->updateRecord($uid, $row, $newFieldList); - } - $currArr = $origArray; - if ($autoLoginIsRequested) { - StorageSecurity::decryptPasswordForAutoLogin($currArr, $row); - } - $modArray = []; - $currArr = $this->data->modifyTcaMMfields($currArr, $modArray); - $row = array_merge($row, $modArray); - - // Hook: confirmRegistrationClass_postProcess - foreach ($hookObjectsArr as $hookObj) { - if (method_exists($hookObj, 'confirmRegistrationClass_postProcess')) { - $hookObj->confirmRegistrationClass_postProcess($row, $this); - } - } - } - - // Outputting template - if ($this->theTable === 'fe_users' && in_array($sFK, ['APPROVE', 'ENTER', 'LOGIN'])) { - if (!($row['by_invitation'] ?? false)) { - $this->marker->addGeneralHiddenFieldsMarkers('login', $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - } - } else { - $this->marker->addGeneralHiddenFieldsMarkers('setfixed', $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - } - - if ($sFK === 'EDIT') { - // Nothing to do - } else { - if ( - $this->theTable === 'fe_users' - && ($sFK === 'APPROVE' || $sFK === 'ENTER') - && ($row['by_invitation'] ?? false) - ) { - // Auto login - $loginSuccess = $this->login($currArr['username'], $currArr['password'], false); - if ($loginSuccess) { - $editView = GeneralUtility::makeInstance(EditView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $editView->render( - $dataArray, - $origArray, - $securedArray, - 'password', - 'password', - AbstractView::MODE_NORMAL - ); - } else { - // Login failed - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $plainView->render('###TEMPLATE_SETFIXED_FAILED###', $row, $origArray, $securedArray, $cmd, $cmdKey); - } - } - - if (($this->conf['enableAdminReview'] ?? false) && $sFK === 'APPROVE') { - $setfixedSuffix .= '_REVIEW'; - } - if (!$content) { - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - try { - $subpartMarker = '###TEMPLATE_' . Marker::SETFIXED_PREFIX . 'OK_' . $setfixedSuffix . '###'; - $content = $plainView->render($subpartMarker, $row, $origArray, $securedArray, $cmd, $cmdKey); - } catch (\Exception $e) { - $subpartMarker = '###TEMPLATE_' . Marker::SETFIXED_PREFIX .'OK###'; - $content = $plainView->render($subpartMarker, $row, $origArray, $securedArray, $cmd, $cmdKey); - } - } - if ( - ($this->conf['email.']['SETFIXED_REFUSE'] ?? false) - || ($this->conf['enableEmailConfirmation'] ?? false) - || ($this->conf['infomail'] ?? false) - ) { - $this->email->compile( - Marker::SETFIXED_PREFIX . $setfixedSuffix, - $row, - $origArray, - $securedArray, - $origArray[$this->conf['email.']['field']] ?? '', - 'setfixed', - $cmdKey - ); - } - if ($this->theTable === 'fe_users') { - // If applicable, send admin a request to review the registration request - if ( - ($this->conf['enableAdminReview'] ?? false) - && $sFK === 'APPROVE' - && !($row['by_invitation'] ?? false) - ) { - $this->email->compile( - Marker::SETFIXED_PREFIX . 'REVIEW', - $row, - $origArray, - $securedArray, - $origArray[$this->conf['email.']['field']] ?? '', - 'setfixed', - $cmdKey - ); - } - if ( - ($this->conf['enableAutoLoginOnConfirmation'] ?? false) - && !($row['by_invitation'] ?? false) - && (($sFK === 'APPROVE' && !($this->conf['enableAdminReview'] ?? false)) || $sFK === 'ENTER') - && $autoLoginIsRequested - ) { - // Auto login on confirmation - $loginSuccess = $this->login($currArr['username'], $currArr['password']); - if ($loginSuccess) { - // Login was successful - exit; - } else { - // Login failed - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $plainView->render('###TEMPLATE_SETFIXED_FAILED###', [], $origArray, $securedArray, $cmd, $cmdKey); - } - } - } - } - } else { - $plainView = GeneralUtility::makeInstance(PlainView::class, $this->extensionKey, $this->prefixId, $this->theTable, $this->conf, $this->data, $this->parameters, $this->marker); - $content = $plainView->render('###TEMPLATE_SETFIXED_FAILED###', [], $origArray, $securedArray, $cmd, $cmdKey); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Domain/Data.php b/typo3conf/ext/sr_feuser_register/Classes/Domain/Data.php deleted file mode 100644 index 2c4cdb1..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Domain/Data.php +++ /dev/null @@ -1,2311 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Captcha\CaptchaManager; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Security\StorageSecurity; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Core\Environment; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; -use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Data store functions - */ -class Data -{ - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Extension name - * - * @var string Extension name - */ - protected $extensionName; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table being used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * Content object - * - * @var ContentObjectRenderer - */ - protected $cObj; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The Static Info object - * - * @var \SJBR\StaticInfoTables\PiBaseApi - */ - protected $staticInfoObj = null; - - /** - * The usergroup hook object - * - */ - protected $userGroupObj = null; - - /** - * List of fields allowed for editing and creation - * - * @var string - */ - protected $fieldList = ''; - - /** - * List of fields reserved as administration fields - * - * @var string - */ - protected $adminFieldList = ''; - - /** - * List of special fields like captcha - * - * @var string - */ - protected $specialFieldList = ''; - - /** - * Array of required field names per command key - * - * @var array - */ - protected $requiredFieldsArray = []; - - /** - * The array of incoming data - * - * @var array - */ - protected $dataArray = []; - - /** - * The array of incoming data - * - * @var array - */ - protected $origArray = []; - - /** - * The list of fields that ar in error - * - * @var string - */ - protected $failure = ''; - - protected $evalErrors = []; - - /** - * True when data was saved - * - * @var bool - */ - protected $saved = false; - - public $addTableArray = []; - - public $error; - public $additionalUpdateFields = ''; - - /** - * The uid of the current record - * - * @var int - */ - protected $recUid = 0; - - public $missing = []; // array of required missing fields - public $inError = []; // array of fields with eval errors other than absence - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param ContentObjectRenderer $cObj: the content object - * @param Parameters $parameters: the request parameters object - * @param string $adminFieldList: list of table fields that are considered reserved for administration purposes - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array &$conf, - ContentObjectRenderer $cObj, - Parameters $parameters, - $adminFieldList - ) { - $this->extensionKey = $extensionKey; - $this->extensionName = GeneralUtility::underscoredToUpperCamelCase($this->extensionKey); - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf =& $conf; - $this->cObj = $cObj; - $this->parameters = $parameters; - if (ExtensionManagementUtility::isLoaded('static_info_tables')) { - $this->staticInfoObj = GeneralUtility::makeInstance('SJBR\\StaticInfoTables\\PiBaseApi'); - $this->staticInfoObj->init(); - } - // Usergroup hook object - if ($this->theTable === 'fe_users') { - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId][$this->theTable]['usergroup']) && is_array($extensionConfiguration[$this->prefixId][$this->theTable]['usergroup'])) ? $extensionConfiguration[$this->prefixId][$this->theTable]['usergroup'] : []; - foreach ($hookClassArray as $classRef) { - $this->userGroupObj = GeneralUtility::makeInstance($classRef); - if (is_object($this->userGroupObj)) { - break; - } - } - } - // Set the lists of admin fields - $this->setAdminFieldList($adminFieldList); - // Get the incoming data - $this->getIncomingData(); - } - - /** - * Get the data entered in the displayed form - * - * @return void - */ - protected function getIncomingData() - { - // Get POST parameters - if ($this->parameters->isTokenValid()) { - $fe = GeneralUtility::_POST('FE'); - if ( - isset($fe) - && is_array($fe) - ) { - $feDataArray = $fe[$this->theTable]; - SecuredData::secureInput($feDataArray, false); - $this->modifyRow($feDataArray, false); - $feDataArray = array_merge($feDataArray, SessionData::readPassword($this->extensionKey)); - $this->setDataArray($feDataArray); - } - } - } - - /** - * Set the incoming data array - * - * @param array $dataArray: the incoming data array - * @return void - */ - public function setDataArray(array $dataArray) - { - $this->dataArray = $dataArray; - } - - /** - * Set configuration - * - * @param array $conf: the configuration array - * @return void - */ - public function setConfiguration(array $conf) - { - $this->conf = $conf; - } - - /** - * Get the incoming data array - * - * @return array the incoming data array - */ - public function getDataArray() - { - return $this->dataArray; - } - - /** - * Resets the incoming data array - * - * @return void - */ - public function resetDataArray() - { - $this->dataArray = []; - } - - /** - * Get the list of fields that are in error - * - * @return string the list of fields that are in error - */ - public function getFailure() - { - return $this->failure; - } - - /** - * Set the list of fields that are in error - * - * @param string the list of fields that are in error - * @return void - */ - protected function setFailure($failure) - { - $this->failure = $failure; - } - - protected function setError($error) { - $this->error = $error; - } - - public function getError () { - return $this->error; - } - - public function setSaved($value) - { - $this->saved = $value; - } - - public function getSaved() - { - return $this->saved; - } - - /** - * Get the list of fields allowed for editing and creation - * - * @return string a list of fields allowed for editing and creation - */ - public function getFieldList() - { - if (empty($this->fieldList)) { - $excludeFields = ['felogin_forgotHash', 'felogin_redirectPid', 'lastlogin', 'lockToDomain', 'starttime', 'endtime', 'token', 'TSconfig']; - $this->fieldList = implode(',', array_diff(array_keys($GLOBALS['TCA'][$this->theTable]['columns']), $excludeFields)); - } - return $this->fieldList; - } - - /** - * Get the array of required fields names - * - * @return array required fields names - */ - public function getRequiredFieldsArray($cmdKey) - { - if (!isset($this->requiredFieldsArray[$cmdKey])) { - $this->requiredFieldsArray[$cmdKey] = []; - if ( - isset($this->conf[$cmdKey . '.']['required']) - && isset($this->conf[$cmdKey . '.']['fields']) - ) { - $this->requiredFieldsArray[$cmdKey] = array_intersect(GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['required'], true), GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'], true)); - } - } - return $this->requiredFieldsArray[$cmdKey]; - } - - /** - * Set the list of reserved administration fields - * - * @param string a list of reserved fields - * @return void - */ - protected function setAdminFieldList($adminFieldList) - { - if (!$adminFieldList) { - $adminFieldList = 'username,password,name,disable,usergroup,by_invitation,tx_srfeuserregister_password'; - } - if ( - isset($this->conf['addAdminFieldList']) - && trim($this->conf['addAdminFieldList']) - ) { - $adminFieldList .= ',' . trim($this->conf['addAdminFieldList']); - } - $this->adminFieldList = implode(',', array_intersect(explode(',', $this->getFieldList()), GeneralUtility::trimExplode(',', $adminFieldList, true))); - } - - /** - * Get the list of reserved administration fields - * - * @return string a list of reserved fields - */ - public function getAdminFieldList() - { - return $this->adminFieldList; - } - - /** - * Get the list of special fields like captcha - * - * @return string a list of special fields - */ - public function getSpecialFieldList() - { - if (empty($this->specialFieldList)) { - if (CaptchaManager::isLoaded($this->extensionKey)) { - $this->specialFieldList = 'captcha_response'; - } - } - return $this->specialFieldList; - } - - public function getAdditionalUpdateFields() - { - return $this->additionalUpdateFields; - } - - - public function setAdditionalUpdateFields ($additionalUpdateFields) { - $this->additionalUpdateFields = $additionalUpdateFields; - } - - - public function setRecUid($uid) - { - $this->recUid = (int) $uid; - } - - - public function getRecUid() - { - return $this->recUid; - } - - - public function getAddTableArray () { - return $this->addTableArray; - } - - - public function addTableArray ($table) { - if (!in_array($table, $this->addTableArray)) { - $this->addTableArray[] = $table; - } - } - - - public function setOrigArray(array $origArray) - { - $this->origArray = $origArray; - } - - - public function getOrigArray() - { - return $this->origArray; - } - - - public function bNewAvailable() - { - $dataArray = $this->getDataArray(); - return ((isset($dataArray['username']) && $dataArray['username'] != '') || (isset($dataArray['email']) && $dataArray['email'] != '')); - } - - /** - * Overrides field values as specified by TS setup - * - * @param array $dataArray: the incoming data array - * @param string $cmdKey: the command being processed - * @return void all overriding done directly on array $dataArray - */ - public function overrideValues(array &$dataArray, $cmdKey) - { - if ( - isset($this->conf[$cmdKey . '.']['overrideValues.']) - && is_array($this->conf[$cmdKey . '.']['overrideValues.']) - ) { - foreach ($this->conf[$cmdKey . '.']['overrideValues.'] as $theField => $theValue) { - if ($theField === 'usergroup' && $this->theTable === 'fe_users' && $this->conf[$cmdKey . '.']['allowUserGroupSelection']) { - $overrideArray = GeneralUtility::trimExplode(',', $theValue, true); - if ( - isset($dataArray[$theField]) - && is_array($dataArray[$theField]) - ) { - $dataValue = array_merge($dataArray[$theField], $overrideArray); - } else { - $dataValue = $overrideArray; - } - $dataValue = array_unique($dataValue); - } else { - $stdWrap = $this->conf[$cmdKey . '.']['overrideValues.'][$theField . '.'] ?? false; - if ($stdWrap) { - $dataValue = $this->cObj->stdWrap($theValue, $stdWrap); - } else if (isset($this->conf[$cmdKey . '.']['overrideValues.'][$theField])) { - $dataValue = $this->conf[$cmdKey . '.']['overrideValues.'][$theField]; - } else { - $dataValue = $theValue; - } - } - $dataArray[$theField] = $dataValue; - } - } - } - - /** - * Fetches default field values as specified by TS setup - * - * @param string $cmdKey: the command being processed - * @return array a data row with default key/value pairs - */ - public function defaultValues($cmdKey) - { - $dataArray = []; - if ( - isset($this->conf[$cmdKey . '.']['defaultValues.']) - && is_array($this->conf[$cmdKey . '.']['defaultValues.']) - ) { - foreach ($this->conf[$cmdKey . '.']['defaultValues.'] as $theField => $theValue) { - $dataArray[$theField] = $theValue; - } - } - return $dataArray; - } - - /** - * Gets the error message to be displayed - * - * @param string $theField: the name of the field being validated - * @param string $theRule: the name of the validation rule being evaluated - * @param string $label: a default error message provided by the invoking function - * @param string $param: parameter for the error message - * @param string $extensionName: name of the extension - * @return string the error message to be displayed - */ - protected function getFailureText($theField, $theRule, $label, $param = '', $extensionName) - { - $failureLabel = ''; - if ($theRule) { - $failureLabel = LocalizationUtility::translate('evalErrors_' . $theRule . '_' . $theField . ($this->conf['salutation'] ?? ''), $extensionName); - $failureLabel = LocalizationUtility::translate('evalErrors_' . $theRule . '_' . $theField, $extensionName); - $failureLabel = $failureLabel ?: LocalizationUtility::translate('evalErrors_' . $theRule . ($this->conf['salutation'] ?? ''), $extensionName); - $failureLabel = $failureLabel ?: LocalizationUtility::translate('evalErrors_' . $theRule, $extensionName); - } - if (!$failureLabel) { - $failureLabel = LocalizationUtility::translate($label, $extensionName); - } - if ($param) { - $failureLabel = sprintf($failureLabel, $param); - } - return $failureLabel; - } - - /** - * Applies validation rules specified in TS setup - * - * @param array $dataArray: the incoming data array - * @param string $cmdKey: the command being processed - * @param string $mode: the current mode (normal or preview) - * @return void on return, the parameters failure will contain the list of fields which were not ok - */ - public function evalValues(array &$dataArray, array $origArray, $markerObj, $cmdKey, $mode = AbstractView::MODE_NORMAL) - { - $failureArray = []; - $failureMsg = []; - $markerArray = []; - $displayFieldArray = GeneralUtility::trimExplode(',', $this->conf[$cmdKey.'.']['fields'], true); - if (CaptchaManager::useCaptcha($cmdKey, $this->conf, $this->extensionKey)) { - $displayFieldArray = array_merge($displayFieldArray, ['captcha_response']); - } - // Check required fields, set failure if missing. - $requiredArray = $this->getRequiredFieldsArray($cmdKey); - foreach ($requiredArray as $theField) { - $value = $dataArray[$theField] ?? ''; - if ($theField === 'usergroup' && is_object($this->userGroupObj) && is_array($value)) { - $value = $this->userGroupObj->restrictToSelectableValues($value, $this->conf, $cmdKey); - } - $isMissing = empty($value); - $fieldConfig = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config']; - if ($isMissing && $fieldConfig['type'] === 'radio') { - foreach ($fieldConfig['items'] as $k => $item) { - if ($value == $item[1]) { - $isMissing = false; - break; - } - } - } - if ($isMissing) { - $failureArray[] = $theField; - $this->missing[$theField] = true; - } - } - $pid = $dataArray['pid'] ?? 0; - - // Evaluate: This evaluates for more advanced things than "required" does. - // But it returns the same error code, so you must let the required-message, if further evaluation has failed! - if ( - isset($this->conf[$cmdKey . '.']['evalValues.']) - && is_array($this->conf[$cmdKey . '.']['evalValues.']) - ) { - $cmd = $this->parameters->getCmd(); - if ($cmd === 'edit' || $cmdKey === 'edit') { - if ((int)$pid) { - // This may be tricked if the input has the pid-field set but the edit-field list does NOT allow the pid to be edited. Then the pid may be false. - $recordTestPid = (int)$pid; - } else if (isset($dataArray['uid'])) { - $tempRecArr = $this->getTypoScriptFrontendController()->sys_page->getRawRecord($this->theTable, $dataArray['uid']); - $recordTestPid = (int)$tempRecArr['pid']; - } else { - $thePid = $this->parameters->getPid(); - $recordTestPid = $thePid ? $thePid : $pid; - } - } else { - $thePid = $this->parameters->getPid(); - $recordTestPid = $thePid ? $thePid : $pid; - } - foreach ($this->conf[$cmdKey.'.']['evalValues.'] as $theField => $theValue) { - $this->evalErrors[$theField] = []; - $failureMsg[$theField] = []; - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - // Unset the incoming value is empty and unsetEmpty is specified - if (array_search('unsetEmpty', $listOfCommands) !== false) { - if ( - isset($dataArray[$theField]) - && empty($dataArray[$theField]) - && trim($dataArray[$theField]) !== '0' - ) { - unset($dataArray[$theField]); - } - if ( - isset($dataArray[$theField . '_again']) - && empty($dataArray[$theField . '_again']) - && trim($dataArray[$theField . '_again']) !== '0' - ) { - unset($dataArray[$theField . '_again']); - } - } - if ( - isset($dataArray[$theField]) - || isset($dataArray[$theField . '_again']) - || !count($origArray) - || !isset($origArray[$theField]) - ) { - foreach ($listOfCommands as $k => $cmd) { - // Enable parameters after each command enclosed in brackets [..] - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - switch ($theCmd) { - case 'uniqueGlobal': - case 'uniqueDeletedGlobal': - case 'uniqueLocal': - case 'uniqueDeletedLocal': - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && trim($dataArray[$theField]) - ) { - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable($this->theTable); - $queryBuilder - ->getRestrictions() - ->removeAll(); - if ($theCmd === 'uniqueLocal' || $theCmd === 'uniqueGlobal') { - $queryBuilder - ->getRestrictions() - ->add(GeneralUtility::makeInstance(DeletedRestriction::class)); - } - $queryBuilder - ->select('uid', $theField) - ->from($this->theTable) - ->where( - $queryBuilder->expr()->eq($theField, $queryBuilder->createNamedParameter($dataArray[$theField]), \PDO::PARAM_STR) - ) - ->setMaxResults(1); - if ( - isset($dataArray['uid']) - && $dataArray['uid'] - ) { - $queryBuilder - ->andWhere( - $queryBuilder->expr()->neq('uid', $queryBuilder->createNamedParameter((int)$dataArray['uid']), \PDO::PARAM_INT) - ); - } - if ($theCmd === 'uniqueLocal' || $theCmd === 'uniqueDeletedLocal') { - $queryBuilder - ->andWhere( - $queryBuilder->expr()->in('pid', GeneralUtility::intExplode(',', $recordTestPid, true)) - ); - } - $DBrows = $queryBuilder - ->execute() - ->fetchAll(); - if ( - isset($DBrows[0]) - && is_array($DBrows[0]) - ) { - // Only issue an error if the record is not existing (if new...) and if the record with the false value selected was not our self. - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_existed_already', '', $this->extensionName); - } - } - break; - case 'twice': - if (isset($dataArray[$theField])) { - $fieldValue = (string)$dataArray[$theField]; - $fieldAgainValue = (string)$dataArray[$theField . '_again']; - if (strcmp($fieldValue, $fieldAgainValue)) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_same_twice', '', $this->extensionName); - } - } - break; - case 'email': - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && trim($dataArray[$theField]) - && !GeneralUtility::validEmail($dataArray[$theField]) - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_valid_email', '', $this->extensionName); - } - break; - case 'required': - $value = $dataArray[$theField] ?? ''; - if ( - $theField === 'usergroup' - && is_object($this->userGroupObj) - && is_array($value) - ) { - $value = $this->userGroupObj->restrictToSelectableValues($value, $this->conf, $cmdKey); - } - if ( - empty($value) - && !(isset($dataArray[$theField]) && $dataArray[$theField] === '0') - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_required', '', $this->extensionName); - } - break; - case 'atLeast': - $chars = (int)$cmdParts[1]; - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && strlen($dataArray[$theField]) < $chars - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_atleast_characters', $chars, $this->extensionName); - } - break; - case 'atMost': - $chars = (int)$cmdParts[1]; - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && strlen($dataArray[$theField]) > $chars - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_atmost_characters', $chars, $this->extensionName); - } - break; - case 'inBranch': - if (isset($dataArray[$theField])) { - $pars = explode(';', $cmdParts[1]); - if ((int)$pars[0]) { - $pid_list = $this->cObj->getTreeList( - intval($pars[0]), - intval($pars[1]) ? intval($pars[1]) : 999, - intval($pars[2]) - ); - - if (!$pid_list || !GeneralUtility::inList($pid_list, $dataArray[$theField])) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_unvalid_list', $pid_list, $this->extensionName); - } - } - } - break; - case 'wwwURL': - if ( - isset($dataArray[$theField]) - && $dataArray[$theField] - ) { - $urlParts = parse_url($dataArray[$theField]); - if ( - $urlParts === false - || !GeneralUtility::isValidUrl($dataArray[$theField]) - || ($urlParts['scheme'] != 'http' && $urlParts['scheme'] != 'https') - || $urlParts['user'] - || $urlParts['pass'] - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_unvalid_url', '', $this->extensionName); - } - } - break; - case 'date': - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && $dataArray[$theField] - && !$this->evalDate($dataArray[$theField]) - ) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_unvalid_date', '', $this->extensionName); - } - break; - case 'preg': - if ( - isset($dataArray[$theField]) - && !is_array($dataArray[$theField]) - && !empty($dataArray[$theField]) - && $dataArray[$theField] !== '0' - ) { - $pattern = str_replace('preg[', '', $cmd); - $pattern = substr($pattern, 0, strlen($pattern) - 1); - $matches = []; - $test = preg_match($pattern, $dataArray[$theField], $matches); - if (count($matches) === 0) { - $failureArray[] = $theField; - $this->inError[$theField] = true; - $this->evalErrors[$theField][] = $theCmd; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_' . $theCmd, $cmd, $this->extensionName); - } - } - break; - case 'hook': - default: - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['model']) && is_array($extensionConfiguration[$this->prefixId]['model'])) ? $extensionConfiguration[$this->prefixId]['model'] : []; - // The captcha cannot be checked twice - if ( - isset($extensionConfiguration['captcha']) - && is_array($extensionConfiguration['captcha']) - && ($mode == AbstractView::MODE_PREVIEW || !($this->conf[$cmdKey . '.']['preview'] ?? false)) - ) { - $hookClassArray = array_merge($hookClassArray, $extensionConfiguration['captcha']); - } - foreach ($hookClassArray as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if ( - is_object($hookObj) - && method_exists($hookObj, 'evalValues') - ) { - $errorField = $hookObj->evalValues($this->theTable, $dataArray, $theField, $cmdKey, $cmdParts, $this->extensionName); - if ( - isset($errorField) - && is_array($errorField) - ) { - if (!empty($errorField)) { - $failureArray[] = $theField; - $this->evalErrors[$theField][] = $theCmd; - $this->inError[$theField] = true; - $failureMsg[$theField] = array_merge($failureMsg[$theField], $errorField); - } - } else if ($errorField !== '') { - $failureArray[] = $errorField; - $this->evalErrors[$theField][] = $theCmd; - $this->inError[$theField] = true; - $failureMsg[$theField][] = $this->getFailureText($theField, $theCmd, 'evalErrors_' . $theCmd, $cmd, $this->extensionName); - } - } - } - break; - } - } - } - - if (in_array($theField, $displayFieldArray) || in_array($theField, $failureArray)) { - if (!empty($failureMsg[$theField])) { - if ($markerArray['###EVAL_ERROR_saved###'] ?? false) { - $markerArray['###EVAL_ERROR_saved###'] .= '
    '; - } else { - $markerArray['###EVAL_ERROR_saved###'] = ''; - } - $errorMsg = implode('
    ', $failureMsg[$theField]); - $markerArray['###EVAL_ERROR_saved###'] .= $errorMsg; - } else { - $errorMsg = ''; - } - $markerArray['###EVAL_ERROR_FIELD_' . $theField . '###'] = ($errorMsg != '' ? $errorMsg : ''); - } - } - } - - if (!isset($markerArray['###EVAL_ERROR_saved###']) || empty($markerArray['###EVAL_ERROR_saved###'])) { - $markerArray['###EVAL_ERROR_saved###'] = ''; - } - - if ($this->staticInfoObj !== null && ($this->missing['zone'] ?? false)) { - // empty zone if there is no zone for the provided country - $zoneArray = $this->staticInfoObj->initCountrySubdivisions($dataArray['static_info_country']); - if (empty($zoneArray)) { - if (isset($this->missing['zone'])) { - unset($this->missing['zone']); - } - $k = array_search('zone', $failureArray); - if (isset($failureArray[$k])) { - unset($failureArray[$k]); - } - } - } - - $failure = implode(',', $failureArray); - $this->setFailure($failure); - $markerObj->addEvalValuesMarkers($markerArray); - return $this->evalErrors; - } - - /** - * Transforms fields into certain things... - * - * @param array $dataArray: the incoming data array - * @param array $origArray: the original data array - * @param string $cmdKey: the comman key being processed - * @return void all parsing done directly on input array $dataArray - */ - public function parseValues(array &$dataArray, array $origArray, $cmdKey) - { - if ( - isset($this->conf['parseValues.']) - && is_array($this->conf['parseValues.']) - ) { - $parsedOrigArray = $this->parseIncomingData($origArray); - foreach ($this->conf['parseValues.'] as $theField => $theValue) { - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - if (in_array('setEmptyIfAbsent', $listOfCommands) && !isset($parsedOrigArray[$theField])) { - $this->setEmptyIfAbsent($theField, $dataArray); - } - $fieldConfig = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($dataArray[$theField]) - || isset($origArray[$theField]) - || (isset($fieldConfig['internal_type']) && $fieldConfig['internal_type'] === 'file') - || (isset($fieldConfig['foreign_table']) && $fieldConfig['foreign_table'] === 'sys_file_reference') - ) { - foreach ($listOfCommands as $cmd) { - // Enable parameters after each command enclosed in brackets [..]. - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - $bValueAssigned = true; - if (($theField === 'password' || $theField === 'password_again') && !isset($dataArray[$theField])) { - $bValueAssigned = false; - } - $dataValue = $dataArray[$theField] ?? ($parsedOrigArray[$theField] ?? ''); - switch ($theCmd) { - case 'int': - $dataValue = (int)$dataValue; - break; - case 'lower': - case 'upper': - $dataValue = $this->cObj->caseshift($dataValue, $theCmd); - break; - case 'nospace': - $dataValue = str_replace(' ', '', $dataValue); - break; - case 'alpha': - $dataValue = preg_replace('/[^a-zA-Z]/', '', $dataValue); - break; - case 'num': - $dataValue = preg_replace('/[^0-9]/', '', $dataValue); - break; - case 'alphanum': - $dataValue = preg_replace('/[^a-zA-Z0-9]/', '', $dataValue); - break; - case 'alphanum_x': - $dataValue = preg_replace('/[^a-zA-Z0-9_-]/', '', $dataValue); - break; - case 'trim': - $dataValue = trim($dataValue); - break; - case 'random': - $dataValue = substr(md5(uniqid(microtime(), 1)), 0, intval($cmdParts[1])); - break; - case 'files': - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['model']) && is_array($extensionConfiguration[$this->prefixId]['model'])) ? $extensionConfiguration[$this->prefixId]['model'] : []; - foreach ($hookClassArray as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if ( - is_object($hookObj) - && method_exists($hookObj, 'parseValues') - ) { - $dataValue = $hookObj->parseValues($this->theTable, $dataArray, $dataValue, $theField, $cmdKey, $cmdParts, $this->extensionName); - } - } - break; - case 'multiple': - $fieldDataArray = []; - if ( - $theField === 'usergroup' - && $this->theTable === 'fe_users' - && ($this->conf[$cmdKey . '.']['allowUserGroupSelection'] ?? false) - && !isset($dataArray[$theField]) - ) { - $dataValue = $fieldDataArray; - } else if (!empty($dataValue ?? [])) { - if (is_array($dataValue)) { - $fieldDataArray = $dataValue; - } else if (is_string($dataValue)) { - $fieldDataArray = GeneralUtility::trimExplode(',', $dataValue, true); - } - $dataValue = $fieldDataArray; - } - break; - case 'checkArray': - if ( - isset($dataValue) - && is_array($dataValue) - ) { - $newDataValue = 0; - foreach ($dataValue as $kk => $vv) { - $kk = MathUtility::forceIntegerInRange($kk, 0); - if ($kk <= 30) { - if ($vv) { - $newDataValue|= pow(2, $kk); - } - } - } - $dataValue = $newDataValue; - } - break; - case 'uniqueHashInt': - $otherFields = GeneralUtility::trimExplode(';', $cmdParts[1], true); - $hashArray = []; - foreach($otherFields as $fN) { - $vv = $dataArray[$fN]; - $vv = preg_replace('/\s+/', '', $vv); - $vv = preg_replace('/[^a-zA-Z0-9]/', '', $vv); - $vv = strtolower($vv); - $hashArray[] = $vv; - } - $dataValue = hexdec(substr(md5(serialize($hashArray)), 0, 8)); - break; - case 'wwwURL': - if ($dataValue) { - $urlParts = parse_url($dataValue); - if ($urlParts !== false) { - if (!$urlParts['scheme']) { - $urlParts['scheme'] = 'http'; - $dataValue = $urlParts['scheme'] . '://' . $dataValue; - } - if (GeneralUtility::isValidUrl($dataValue)) { - $dataValue = $urlParts['scheme'] . '://' . - $urlParts['host'] . - $urlParts['path'] . - ($urlParts['query'] ? '?' . $urlParts['query'] : '') . - ($urlParts['fragment'] ? '#' . $urlParts['fragment'] : ''); - } - } - } - break; - case 'date': - if ($dataValue && $this->evalDate($dataValue)) { - $dateArray = $this->fetchDate($dataValue); - $dataValue = $dateArray['y'] . '-' . $dateArray['m'] . '-'.$dateArray['d']; - $translateArray = array( - 'd' => ($dateArray['d'] < 10 ? '0'.$dateArray['d'] : $dateArray['d']), - 'j' => $dateArray['d'], - 'm' => ($dateArray['m'] < 10 ? '0'.$dateArray['m'] : $dateArray['m']), - 'n' => $dateArray['m'], - 'y' => $dateArray['y'], - 'Y' => $dateArray['y'] - ); - $searchArray = array_keys($translateArray); - $replaceArray = array_values($translateArray); - $dataValue = str_replace($searchArray, $replaceArray, 'Y-m-d'); - } else if (!isset($dataArray[$theField])) { - $bValueAssigned = false; - } - break; - default: - break; - } - if ($bValueAssigned) { - $dataArray[$theField] = $dataValue; - } - } - } - } - } - } - - /** - * Saves the data into the database - * - * @param array $dataArray: the incoming data array - * @param array $origArray: the original data array - * @return void sets $this->saved - */ - public function save(array $dataArray, array $origArray, $token, array &$newRow, $cmd, $cmdKey, $pid) - { - $rc = 0; - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - switch ($cmdKey) { - case 'edit': - case 'password': - $theUid = (int)$origArray['uid']; - $rc = $theUid; - $aCAuth = Authentication::aCAuth($this->parameters->getAuthCode(), $origArray, $this->conf, $this->conf['setfixed.']['EDIT.']['_FIELDLIST'] ?? ''); - // Fetch the original record to check permissions - if ( - ($this->conf['edit'] ?? false) - && (GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'isLoggedIn') || $aCAuth) - ) { - // Must be logged in in order to edit (OR be validated by email) - $newFieldList = implode(',', array_intersect(explode(',', $this->getFieldList()), GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true))); - $newFieldArray = array_unique( array_merge (explode(',', $newFieldList), explode(',', $this->getAdminFieldList()))); - $fieldArray = GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true); - // Do not reset the name if we have no new value - if ( - !in_array('name', $fieldArray) - && !in_array('first_name', $fieldArray) - && !in_array('last_name', $fieldArray) - ) { - $newFieldArray = array_diff($newFieldArray, ['name']); - } - // Do not reset adminFieldlist fields if we have no new value - $adminFieldArray = explode(',', $this->getAdminFieldList()); - foreach ($adminFieldArray as $field) { - if (!in_array($field, $fieldArray) && empty($dataArray[$field] ?? '')) { - $newFieldArray = array_diff($newFieldArray, [$field]); - } - } - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); - if ($aCAuth || $this->DBmayFEUserEdit($this->theTable, $origArray, ['uid' => $userAspect->get('id'), 'usergroup' => $userAspect->get('groupIds')], $this->conf['allowedGroups'] ?? '', $this->conf['fe_userEditSelf'] ?? 0)) { - $outGoingData = $this->parseOutgoingData($cmdKey, $pid, $dataArray, $origArray); - // Do not set the outgoing password if the incoming password was unset - if ( - $this->theTable === 'fe_users' - && !empty($dataArray['password'] ?? '') - ) { - $outGoingData['password'] = SessionData::readPasswordForStorage($this->extensionKey); - } - $newFieldList = implode (',', $newFieldArray); - if (isset($GLOBALS['TCA'][$this->theTable]['ctrl']['token'])) { - // Save token in record - $outGoingData['token'] = $token; - // Could be set conditional to adminReview or user confirm - $newFieldList .= ',token'; - } - if (($GLOBALS['TCA'][$this->theTable]['columns']['sys_language_uid'] ?? false) && ($this->conf['setLanguageUidBasedOnContext'] ?? false)) { - $outGoingData['sys_language_uid'] = GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('language', 'id'); - $newFieldList .= ',sys_language_uid'; - } - $res = $this->updateRecord($theUid, $outGoingData, $newFieldList); - $this->updateMMRelations($dataArray); - $this->setSaved(true); - - $newRow = $this->getTypoScriptFrontendController()->sys_page->getRawRecord($this->theTable, $theUid); - $newRow = $this->parseIncomingData($newRow); - $this->modifyRow($newRow, true); - - // Call all afterSaveEdit hooks after the record has been edited and saved - if ( - isset($extensionConfiguration[$this->prefixId]['registrationProcess']) - && is_array($extensionConfiguration[$this->prefixId]['registrationProcess']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['registrationProcess'] as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if (method_exists($hookObj, 'registrationProcess_afterSaveEdit')) { - $hookObj->registrationProcess_afterSaveEdit( - $this->theTable, - $dataArray, - $origArray, - $token, - $newRow, - $cmd, - $cmdKey, - $pid, - $newFieldList, - $this - ); - } - } - } - } else { - $this->setError('###TEMPLATE_NO_PERMISSIONS###'); - } - } - break; - default: - if ( - isset($this->conf[$cmdKey.'.']) - && is_array($this->conf[$cmdKey.'.']) - ) { - // Allow to override values for fields that are not on the form - $newFieldArray = array_merge(GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true), array_keys($this->conf[$cmdKey . '.']['overrideValues.'] ?? [])); - $newFieldArray = array_intersect(explode(',', $this->getFieldList()), $newFieldArray); - $newFieldArray = array_unique(array_merge($newFieldArray, explode(',', $this->getAdminFieldList()))); - $newFieldList = implode(',', $newFieldArray); - $parsedArray = $this->parseOutgoingData($cmdKey, $pid, $dataArray, $origArray); - if ($this->theTable === 'fe_users') { - $parsedArray['password'] = SessionData::readPasswordForStorage($this->extensionKey); - } - if (isset($GLOBALS['TCA'][$this->theTable]['ctrl']['token'])) { - $parsedArray['token'] = $token; - $newFieldList .= ',token'; - } - if (($GLOBALS['TCA'][$this->theTable]['columns']['sys_language_uid'] ?? false) && ($this->conf['setLanguageUidBasedOnContext'] ?? false)) { - $parsedArray['sys_language_uid'] = GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('language', 'id'); - $newFieldList .= ',sys_language_uid'; - } - $newId = $this->insertRecord((int)$pid, $parsedArray, $newFieldList); - $rc = $newId; - // Enable users to own themselves. - if ( - $this->theTable === 'fe_users' - && ($this->conf['fe_userOwnSelf'] ?? false) - ) { - $extraList = ''; - $tmpDataArray = []; - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id']; - $dataArray[$field] = $newId; - $tmpDataArray[$field] = $newId; - $extraList .= ',' . $field; - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id']; - if ( - isset($dataArray['usergroup']) - && is_array($dataArray['usergroup']) - ) { - list($tmpDataArray[$field]) = $dataArray['usergroup']; - } else { - $tmpArray = explode(',', $dataArray['usergroup'] ?? ''); - list($tmpDataArray[$field]) = $tmpArray; - } - $tmpDataArray[$field] = (int)$tmpDataArray[$field]; - $extraList .= ',' . $field; - } - if (!empty($tmpDataArray)) { - $res = $this->updateRecord($newId, $tmpDataArray, $extraList); - } - } - $dataArray['uid'] = $newId; - $this->updateMMRelations($dataArray); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['model']) && is_array($extensionConfiguration[$this->prefixId]['model'])) ? $extensionConfiguration[$this->prefixId]['model'] : []; - foreach ($hookClassArray as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if ( - is_object($hookObj) - && method_exists($hookObj, 'afterSave') - ) { - $dataArray = $hookObj->afterSave($this->theTable, $cmdKey, $dataArray, $pid); - } - } - $this->setSaved(true); - - $newRow = $this->getTypoScriptFrontendController()->sys_page->getRawRecord($this->theTable, $newId); - if ( - isset($newRow) - && is_array($newRow) - ) { - $newRow = $this->parseIncomingData($newRow); - $this->modifyRow($newRow, true); - // Call all afterSaveCreate hooks after the record has been created and saved - if ( - isset($extensionConfiguration[$this->prefixId]['registrationProcess']) - && is_array($extensionConfiguration[$this->prefixId]['registrationProcess']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['registrationProcess'] as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if (method_exists($hookObj, 'registrationProcess_afterSaveCreate')) { - $hookObj->registrationProcess_afterSaveCreate( - $this->theTable, - $dataArray, - $origArray, - $token, - $newRow, - $cmd, - $cmdKey, - $pid, - $extraList, - $this - ); - } - } - } - } else { - $newRow = []; - $this->setError('###TEMPLATE_NO_PERMISSIONS###'); - $this->setSaved(false); - $rc = 0; - } - } - break; - } - return $rc; - } - - /** - * Checks if a frontend user is allowed to edit a certain record - * - * @param string $table The table name, found in $GLOBALS['TCA'] - * @param array $row The record data array for the record in question - * @param array $feUserRow The array of the fe_user which is evaluated: ['uid' => $userAspect->get('id'), 'usergroup' => $userAspect->get('groupIds')] - * @param string $allowedGroups Commalist of the only fe_groups uids which may edit the record. If not set, then the usergroup field of the fe_user is used. - * @param bool|int $feEditSelf TRUE, if the fe_user may edit his own fe_user record. - * @return bool - */ - public function DBmayFEUserEdit($table, $row, $feUserRow, $allowedGroups = '', $feEditSelf = 0) - { - if ($allowedGroups) { - $groupList = implode( - ',', - array_intersect( - $feUserRow['usergroup'], - GeneralUtility::trimExplode(',', $allowedGroups, true) - ) - ); - } else { - $groupList = implode(',', $feUserRow['usergroup']); - } - $ok = 0; - // Points to the field that allows further editing from frontend if not set. If set the record is locked. - if ( - !($GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock'] ?? false) - || !($row[$GLOBALS['TCA'][$table]['ctrl']['fe_admin_lock']] ?? false) - ) { - // Points to the field (int) that holds the fe_users-id of the creator fe_user - if ($GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id'] ?? false) { - $rowFEUser = (int)$row[$GLOBALS['TCA'][$table]['ctrl']['fe_cruser_id']]; - if ($rowFEUser && $rowFEUser === (int)$feUserRow['uid']) { - $ok = 1; - } - } - // If $feEditSelf is set, fe_users may always edit them selves... - if ( - $feEditSelf - && $table === 'fe_users' - && isset($feUserRow['uid']) - && isset($row['uid']) - && (int)$feUserRow['uid'] === (int)$row['uid'] - ) { - $ok = 1; - } - // Points to the field (int) that holds the fe_group-id of the creator fe_user's first group - if ($GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id'] ?? false) { - $rowFEUser = (int)$row[$GLOBALS['TCA'][$table]['ctrl']['fe_crgroup_id']]; - if ($rowFEUser) { - if (GeneralUtility::inList($groupList, $rowFEUser)) { - $ok = 1; - } - } - } - } - return $ok; - } - - /** - * Insert a record - * @param int $pid The PID value for the record to insert - * @param array $dataArr The data array where key/value pairs are fieldnames/values for the record to insert - * @param string $fieldList Comma list of fieldnames which are allowed to be set. Only values from the data record for fields in this list will be set!! - * @return string The uid of the inserted record - * @return void - */ - protected function insertRecord($pid, $dataArr, $fieldList) - { - $extraList = 'pid'; - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp']; - $dataArr[$field] = $GLOBALS['EXEC_TIME']; - $extraList .= ',' . $field; - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['crdate'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['crdate']; - $dataArr[$field] = $GLOBALS['EXEC_TIME']; - $extraList .= ',' . $field; - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['cruser_id'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['cruser_id']; - $dataArr[$field] = 0; - $extraList .= ',' . $field; - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_cruser_id']; - $dataArr[$field] = $userAspect->get('id'); - $extraList .= ',' . $field; - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id'] ?? false) { - $field = $GLOBALS['TCA'][$this->theTable]['ctrl']['fe_crgroup_id']; - list($dataArr[$field]) = $userAspect->get('groupIds'); - $dataArr[$field] = (int)$dataArr[$field]; - $extraList .= ',' . $field; - } - unset($dataArr['uid']); - if ($pid >= 0) { - $dataArr['pid'] = $pid; - } - $fieldList = implode(',', GeneralUtility::trimExplode(',', $fieldList . ',' . $extraList, true)); - $insertFields = []; - foreach ($dataArr as $f => $v) { - if (GeneralUtility::inList($fieldList, $f)) { - $insertFields[$f] = $v; - } - } - $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->theTable); - $queryBuilder = $connection->createQueryBuilder() - ->insert($this->theTable) - ->values($insertFields) - ->execute(); - return $connection->lastInsertId($this->theTable); - } - - /** - * Update a record - * - * @param integer $uid The UID of the record from $table which we are going to update - * @param array $dataArr The data array where key/value pairs are fieldnames/values for the record to update. - * @param string $fieldList Comma list of fieldnames which are allowed to be updated. Only values from the data record for fields in this list will be updated!! - * @return bool false - */ - public function updateRecord($uid, array $dataArr, $fieldList) - { - if ($uid) { - $fields = GeneralUtility::trimExplode(',', $fieldList, true); - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->theTable); - $queryBuilder - ->update($this->theTable) - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter((int)$uid, \PDO::PARAM_INT)) - ); - foreach ($dataArr as $field => $value) { - if (in_array($field, $fields)) { - $queryBuilder->set($field, $value); - } - } - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp'] ?? false) { - $queryBuilder->set($GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp'], (int)$GLOBALS['EXEC_TIME']); - } - $queryBuilder->execute(); - } - return false; - } - - /** - * Delete a record - * - * @param integer $uid The UID of the record from $table which we are going to delete - * @return string false. - * @return void - */ - public function deleteRecordByUid($uid) - { - $uid = (int)$uid; - if (!$uid) { - return false; - } - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['delete'] ?? false) { - $queryBuilder = $connectionPool->getQueryBuilderForTable($this->theTable); - $queryBuilder - ->update($this->theTable) - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)) - ) - ->set($GLOBALS['TCA'][$this->theTable]['ctrl']['delete'], 1); - if ($GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp'] ?? false) { - $queryBuilder->set($GLOBALS['TCA'][$this->theTable]['ctrl']['tstamp'], (int)$GLOBALS['EXEC_TIME']); - } - $queryBuilder->execute(); - } else { - $connectionPool->getConnectionForTable($this->theTable) - ->delete( - $this->theTable, - ['uid' => $uid] - ); - } - return false; - } - - /** - * Processes a record deletion request - * - * @return void (sets $this->saved) - */ - public function deleteRecord(array &$origArray, array &$dataArray) - { - if ($this->conf['delete'] ?? false) { - // If deleting is enabled - $aCAuth = Authentication::aCAuth($this->parameters->getAuthCode(), $origArray, $this->conf, $this->conf['setfixed.']['DELETE.']['_FIELDLIST'] ?? ''); - if (GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'isLoggedIn') || $aCAuth) { - // Must be logged in OR be authenticated by the aC code in order to delete - // If the recUid selects a record.... (no check here) - if ( - isset($origArray) - && is_array($origArray) - ) { - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); - if ($aCAuth || $this->DBmayFEUserEdit($this->theTable, $origArray, ['uid' => $userAspect->get('id'), 'usergroup' => $userAspect->get('groupIds')], $this->conf['allowedGroups'] ?? '', $this->conf['fe_userEditSelf'] ?? 0)) { - // Delete the record and display form, if access granted. - // Call all beforeSaveDelete hooks BEFORE the record is deleted - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - if ( - isset($extensionConfiguration[$this->prefixId]['registrationProcess']) - && is_array($extensionConfiguration[$this->prefixId]['registrationProcess']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['registrationProcess'] as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if (method_exists($hookObj, 'registrationProcess_beforeSaveDelete')) { - $hookObj->registrationProcess_beforeSaveDelete($origArray, $this); - } - } - } - if (!($GLOBALS['TCA'][$this->theTable]['ctrl']['delete'] ?? false) || ($this->conf['forceFileDelete'] ?? false)) { - // If the record is being fully deleted... then remove the images or files attached. - $this->deleteFilesFromRecord($this->getRecUid()); - } - $res = $this->deleteRecordByUid($this->getRecUid()); - $this->deleteMMRelations($this->getRecUid(), $origArray); - $dataArray = $origArray; - $this->setSaved(true); - } else { - $this->setError('###TEMPLATE_NO_PERMISSIONS###'); - } - } - } - } - } - - /** - * Delete the files associated with a deleted record - * - * @param string $uid: record id - * @return void - */ - public function deleteFilesFromRecord($uid) - { - $rec = $this->getTypoScriptFrontendController()->sys_page->getRawRecord($this->theTable, $uid); - $updateFields = []; - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $field => $fieldConf) { - if ( - isset($fieldConf['config']['type']) - && $fieldConf['config']['type'] === 'group' - && isset($fieldConf['config']['internal_type']) - && $fieldConf['config']['internal_type'] === 'file' - ) { - $updateFields[$field] = ''; - $res = $this->updateRecord($uid, $updateFields, $field); - unset($updateFields[$field]); - $delFileArr = explode(',', $rec[$field] ?? ''); - foreach ($delFileArr as $n) { - if ($n) { - $fpath = Environment::getPublicPath() . '/' . ($fieldConf['config']['uploadfolder'] ?? '') . '/' . $n; - if (@is_file($fpath)) { - @unlink($fpath); - } - } - } - } - } - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['model']) && is_array($extensionConfiguration[$this->prefixId]['model'])) ? $extensionConfiguration[$this->prefixId]['model'] : []; - foreach ($hookClassArray as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if ( - is_object($hookObj) - && method_exists($hookObj, 'deleteFileReferences') - ) { - $dataArray = $hookObj->deleteFileReferences($this->theTable, $uid); - } - } - } - - /** - * Check if the value is a correct date in format yyyy-mm-dd - */ - protected function fetchDate($value, $dateFormat = 'Y-m-d') - { - $rcArray = ['m' => '', 'd' => '', 'y' => '']; - $dateValue = trim($value); - $split = '/-/'; - $dateFormatArray = preg_split($split, $dateFormat); - $dateValueArray = preg_split($split, $dateValue); - - $max = sizeof($dateFormatArray); - $yearOffset = 0; - for ($i=0; $i < $max; $i++) { - switch($dateFormatArray[$i]) { - // day - // d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" - // j - day of the month without leading zeros; i.e. "1" to "31" - case 'd': - case 'j': - $rcArray['d'] = intval($dateValueArray[$i]); - break; - // month - // m - month; i.e. "01" to "12" - // n - month without leading zeros; i.e. "1" to "12" - case 'm': - case 'n': - $rcArray['m'] = intval($dateValueArray[$i]); - break; - // M - month, textual, 3 letters; e.g. "Jan" - // F - month, textual, long; e.g. "January" - // case 'M','F': ...to be written ;break; - // year - - // Y - year, 4 digits; e.g. "1999" - case 'Y': - $rcArray['y'] = intval($dateValueArray[$i]); - break; - // y - year, 2 digits; e.g. "99" - case 'y': - $yearVal = intval($dateValueArray[$i]); - if($yearVal <= 11) { - $rcArray['y'] = '20' . $yearVal; - } else { - $rcArray['y'] = '19' . $yearVal; - } - break; - } - } - return $rcArray; - } - - - /** evalDate($value) - * - * Check if the value is a correct date in format yyyy-mm-dd - */ - protected function evalDate($value, $dateFormat = 'Y-m-d') { - if( !$value) { - return false; - } - $dateArray = $this->fetchDate($value); - - if(is_numeric($dateArray['y']) && is_numeric($dateArray['m']) && is_numeric($dateArray['d'])) { - $rc = checkdate($dateArray['m'], $dateArray['d'], $dateArray['y']); - } else { - $rc = false; - } - return $rc; - } - - /** - * Update MM relations - * - * @param array $row - * @return void - */ - public function updateMMRelations(array $row) - { - $fieldsList = array_keys($row); - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - if ( - in_array($colName, $fieldsList) - && isset($colSettings['config']['type']) - && $colSettings['config']['type'] === 'select' - && ($colSettings['config']['MM'] ?? false) - ) { - $valuesArray = $row[$colName]; - $side = isset($colSettings['config']['MM_opposite_field']) ? 'foreign' : 'local'; - $oppositeSide = ($side === 'foreign') ? 'local' : 'foreign'; - if ( - isset($valuesArray) - && is_array($valuesArray) - ) { - $connection = $connectionPool->getConnectionForTable($colSettings['config']['MM']); - $connection->delete( - $colSettings['config']['MM'], - ['uid_' . $side => (int)$row['uid']] - ); - $tablenames = ''; - $fieldname = ''; - if ($colSettings['config']['MM_match_fields'] ?? false) { - $tablenames = $colSettings['config']['MM_match_fields']['tablenames'] ?? ''; - $fieldname = $colSettings['config']['MM_match_fields']['fieldname'] ?? ''; - } - $insertFields = [ - 'uid_' . $side => (int)$row['uid'], - 'sorting' . ($side === 'foreign' ? '_' . $side : '') => 0 - ]; - if ($tablenames ?? false) { - $insertFields['tablenames'] = $tablenames; - } - if ($fieldname ?? false) { - $insertFields['fieldname'] = $fieldname; - } - foreach ($valuesArray as $theValue) { - $insertFields['uid_' . $oppositeSide] = (int)$theValue; - $insertFields['sorting' . ($side === 'foreign' ? '_' . $side : '')]++; - $connection->insert( - $colSettings['config']['MM'], - $insertFields - ); - } - } - } - } - } - - /** - * Delete MM relations - * - * @return void - */ - public function deleteMMRelations($uid, array $row = []) - { - $fieldsList = array_keys($row); - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - if ( - in_array($colName, $fieldsList) - && isset($colSettings['config']['type']) - && $colSettings['config']['type'] === 'select' - && ($colSettings['config']['MM'] ?? false) - ) { - $side = isset($colSettings['config']['MM_opposite_field']) ? 'foreign' : 'local'; - $connectionPool - ->getConnectionForTable($colSettings['config']['MM']) - ->delete( - $colSettings['config']['MM'], - ['uid_' . $side => (int)$uid] - ); - } - } - } - - /** - * Updates the input array from preview - * - * @param array $inputArr: new values - * @return array updated array - */ - public function modifyDataArrForFormUpdate(array $inputArr, $cmdKey) - { - if ( - isset($this->conf[$cmdKey.'.']['evalValues.']) - && is_array($this->conf[$cmdKey.'.']['evalValues.']) - ) { - foreach ($this->conf[$cmdKey.'.']['evalValues.'] as $theField => $theValue) { - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - foreach ($listOfCommands as $k => $cmd) { - // Parameters after each command are enclosed in brackets [..] - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - switch ($theCmd) { - case 'twice': - if (isset($inputArr[$theField])) { - if (!isset($inputArr[$theField . '_again'])) { - $inputArr[$theField . '_again'] = $inputArr[$theField]; - } - $this->setAdditionalUpdateFields($this->getAdditionalUpdateFields() . ',' . $theField . '_again'); - } - break; - } - } - } - } - if ( - isset($this->conf['parseValues.']) - && is_array($this->conf['parseValues.']) - ) { - foreach ($this->conf['parseValues.'] as $theField => $theValue) { - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - foreach ($listOfCommands as $k => $cmd) { - // Parameters after each command are enclosed in brackets [..] - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - switch ($theCmd) { - case 'multiple': - if (isset($inputArr[$theField])) { - unset($inputArr[$theField]); - } - break; - case 'checkArray': - if ( - ($inputArr[$theField] ?? false) - && !$this->parameters->isPreview() - ) { - for ($a = 0; $a <= 50; $a++) { - if ($inputArr[$theField] & pow(2, $a)) { - $alt_theField = $theField . '][' . $a; - $inputArr[$alt_theField] = 1; - $this->setAdditionalUpdateFields($this->getAdditionalUpdateFields() . ',' . $alt_theField); - } - } - } - break; - } - } - } - } - foreach ($inputArr as $field => $value) { - if ( - !isset($GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['type']) - || $GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['type'] !== 'inline' - ) { - if (is_array($value)) { - $value = implode(',', $value); - } - $inputArr[$field] = $value; - } - } - SecuredData::secureInput($inputArr); - return $inputArr; - } - - /** - * Moves first, middle and last name into name - * - * @param array $dataArray: incoming array - * @param string $cmdKey: the command key - * @return void done directly on $dataArray passed by reference - */ - public function setName(array &$dataArray, $cmdKey) - { - if ( - in_array('name', explode(',', $this->getFieldList())) - && !in_array('name', GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true)) - && in_array('first_name', GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true)) - && in_array('last_name', GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true)) - ) { - $dataArray['name'] = trim(trim($dataArray['first_name'] ?? '') - . ((in_array('middle_name', GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true)) && trim($dataArray['middle_name'] ?? '') != '') ? ' ' . trim($dataArray['middle_name'] ?? '') : '' ) - . ' ' . trim($dataArray['last_name'] ?? '')); - } - } - - /** - * Moves email into username if useEmailAsUsername is set - * - * @param array $dataArray: the data array - * @param string $cmdKey: the command being processed - * @return void (done directly on array $dataArray) - */ - public function setUsername(array &$dataArray, $cmdKey) - { - if ( - ($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) - && $this->theTable === 'fe_users' - && GeneralUtility::inList($this->getFieldList(), 'username') - && empty($this->evalErrors['email'] ?? []) - ) { - $dataArray['username'] = trim($dataArray['email'] ?? ''); - } - } - - /** - * Sets the password - * - * @param array $dataArray: the data array - * @param string $cmdKey: the command being processed - * @return void (done directly on array $dataArray) - */ - public function setPassword(array &$dataArray, $cmdKey) - { - if ($this->theTable === 'fe_users') { - StorageSecurity::initializeAutoLoginPassword($dataArray); - // We generate an interim password in the case of an invitation - if ($cmdKey === 'invite') { - SessionData::generatePassword($this->extensionKey, $dataArray); - } - // If inviting or if auto login will be required on confirmation, we store an encrypted version of the password - if ( - $cmdKey === 'invite' - || ( - $cmdKey === 'create' - && ($this->conf['enableAutoLoginOnConfirmation'] ?? false) - && !($this->conf['enableAutoLoginOnCreate'] ?? false) - ) - ) { - StorageSecurity::encryptPasswordForAutoLogin($dataArray); - } - } - } - - /** - * Transforms incoming timestamps into dates - * - * @return array parsedArray - */ - public function parseIncomingData(array $origArray, $bUnsetZero = true) - { - $parsedArray = $origArray; - if ( - isset($this->conf['parseFromDBValues.']) - && is_array($this->conf['parseFromDBValues.']) - ) { - foreach($this->conf['parseFromDBValues.'] as $theField => $theValue) { - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - if (is_array($listOfCommands)) { - foreach ($listOfCommands as $k2 => $cmd) { - // Enable parameters after each command enclosed in brackets [..] - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - switch($theCmd) { - case 'date': - case 'adodb_date': - if ( - isset($origArray[$theField]) - && $origArray[$theField] - ) { - $parsedArray[$theField] = date('Y-m-d', $origArray[$theField]); - } - if ( - isset($parsedArray[$theField]) - && !$parsedArray[$theField] - ) { - if ($bUnsetZero) { - unset($parsedArray[$theField]); - } else { - $parsedArray[$theField] = ''; - } - } - break; - } - } - } - } - } - return $parsedArray; - } - - /** - * Processes data before entering the database - * 1. Transforms outgoing dates into timestamps - * 2. Modifies the select fields into the count if mm tables are used. - * 3. Deletes de-referenced files - * - * @return parsedArray - */ - protected function parseOutgoingData($cmdKey, $pid, array $dataArray, array $origArray) - { - $parsedArray = $dataArray; - - if ( - isset($this->conf['parseToDBValues.']) - && is_array($this->conf['parseToDBValues.']) - ) { - foreach ($this->conf['parseToDBValues.'] as $theField => $theValue) { - $listOfCommands = GeneralUtility::trimExplode(',', $theValue, true); - foreach($listOfCommands as $k2 => $cmd) { - // Enable parameters after each command enclosed in brackets [..] - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - if (($theCmd == 'date' || $theCmd == 'adodb_date') && ($dataArray[$theField] ?? false)) { - if (strlen($dataArray[$theField]) == 8) { - $parsedArray[$theField] = substr($dataArray[$theField], 0, 4) . '-' . substr($dataArray[$theField], 4, 2) . '-' . substr($dataArray[$theField], 6, 2); - } else { - $parsedArray[$theField] = $dataArray[$theField]; - } - $dateArray = $this->fetchDate($parsedArray[$theField]); - } - switch ($theCmd) { - case 'date': - case 'adodb_date': - if ($dataArray[$theField] ?? false) { - $parsedArray[$theField] = mktime(0, 0, 0, $dateArray['m'], $dateArray['d'], $dateArray['y']); - } else { - $parsedArray[$theField] = 0; - } - break; - case 'deleteUnreferencedFiles': - $fieldConfig = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config'] ?? []; - if ( - is_array($fieldConfig) - && isset($fieldConfig['type']) - && $fieldConfig['type'] === 'group' - && isset($fieldConfig['internal_type']) - && $fieldConfig['internal_type'] === 'file' - && ($fieldConfig['uploadfolder'] ?? false) - ) { - $uploadPath = $fieldConfig['uploadfolder']; - $origFiles = []; - if ( - isset($origArray[$theField]) - && is_array($origArray[$theField]) - ) { - $origFiles = $origArray[$theField]; - } else if ($origArray[$theField] ?? false) { - $origFiles = GeneralUtility::trimExplode(',', $origArray[$theField], true); - } - $updatedFiles = []; - if ( - isset($dataArray[$theField]) - && is_array($dataArray[$theField]) - ) { - $updatedFiles = $dataArray[$theField]; - } else if ($dataArray[$theField] ?? false) { - $updatedFiles = GeneralUtility::trimExplode(',', $dataArray[$theField], true); - } - $unReferencedFiles = array_diff($origFiles, $updatedFiles); - foreach ($unReferencedFiles as $file) { - if(@is_file(Environment::getPublicPath() . '/' . $uploadPath . '/' . $file)) { - @unlink(Environment::getPublicPath() . '/' . $uploadPath . '/' . $file); - } - } - } - break; - } - } - } - } - - $fieldsList = array_keys($parsedArray); - // Invoke the hooks for additional parsing - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - if ( - isset($parsedArray[$colName]) - || isset($origArray[$colName]) - ) { - $foreignTable = $GLOBALS['TCA'][$this->theTable]['columns'][$colName]['config']['foreign_table'] ?? ''; - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId][$this->theTable][$colName]) && is_array($extensionConfiguration[$this->prefixId][$this->theTable][$colName])) ? $extensionConfiguration[$this->prefixId][$this->theTable][$colName] : []; - foreach ($hookClassArray as $classRef) { - $hookObject = GeneralUtility::makeInstance($classRef); - if ( - is_object($hookObject) - && method_exists($hookObject, 'parseOutgoingData') - ) { - $hookObject->parseOutgoingData($this->theTable, $colName, $foreignTable, $cmdKey, $pid, $this->conf, $dataArray, $origArray, $parsedArray); - } - } - } - } - // Update the inline or MM relation count field and implode arrays - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - if (isset($parsedArray[$colName])) { - if (is_array($parsedArray[$colName])) { - if ( - in_array($colName, $fieldsList) - && isset($colSettings['config']['type']) - && ( - ($colSettings['config']['type'] == 'select' && ($colSettings['config']['MM'] ?? false)) - || $colSettings['config']['type'] == 'inline' - ) - ) { - // set the count instead of the comma separated list - if ($parsedArray[$colName]) { - $parsedArray[$colName] = count($parsedArray[$colName]); - } else { - $parsedArray[$colName] = ''; - } - } else { - $parsedArray[$colName] = implode (',', $parsedArray[$colName]); - } - } - } - } - return $parsedArray; - } - - public function getInError() - { - return $this->inError; - } - - /** - * Sets the index $theField of the incoming data array to empty value depending on type of $theField - * as defined in the TCA for $theTable - * - * @param string $theTable: the name of the table - * @param string $theField: the name of the field - * @param array $dataArray: the incoming data array - * @return void - */ - protected function setEmptyIfAbsent($theField, array &$dataArray) { - if (!isset($dataArray[$theField])) { - $fieldConfig = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config'] ?? ''; - if (is_array($fieldConfig)) { - $type = $fieldConfig['type'] ?? ''; - switch ($type) { - case 'check': - case 'radio': - $dataArray[$theField] = 0; - break; - case 'input': - $eval = $fieldConfig['eval'] ?? ''; - switch ($eval) { - case 'int': - case 'date': - case 'datetime': - case 'time': - case 'timesec': - $dataArray[$theField] = 0; - break; - default: - $dataArray[$theField] = ''; - break; - } - break; - default: - $dataArray[$theField] = ''; - break; - } - } else { - $dataArray[$theField] = ''; - } - } - } - - /** - * Adds the fields coming from other tables via MM tables - * - * @param array $dataArray: the record array - * @return array the modified data array - */ - public function modifyTcaMMfields(array $dataArray, &$modArray) - { - $rcArray = $dataArray; - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - $colConfig = $colSettings['config']; - switch ($colConfig['type'] ?? '') { - case 'select': - if (($colConfig['MM'] ?? false) && ($colConfig['foreign_table'] ?? false)) { - $side = isset($colConfig['MM_opposite_field']) ? 'foreign' : 'local'; - $oppositeSide = ($side === 'foreign') ? 'local' : 'foreign'; - $valueArray = []; - $queryBuilder = $connectionPool->getQueryBuilderForTable($colConfig['MM']); - $query = $queryBuilder - ->select('uid_' . $oppositeSide) - ->from($colConfig['MM']) - ->where( - $queryBuilder->expr()->eq('uid_' . $side, $queryBuilder->createNamedParameter((int)$dataArray['uid'], \PDO::PARAM_INT)) - ) - ->execute(); - while ($row = $query->fetch()) { - $valueArray[] = $row['uid_' . $oppositeSide]; - } - $rcArray[$colName] = implode(',', $valueArray); - $modArray[$colName] = $rcArray[$colName]; - } - break; - } - } - return $rcArray; - } - - /** - * Modifies the incoming data row - * Adds checkboxes which have been unset. This means that no field will be present for them. - * Fetches the former values of select boxes - * - * @param array $dataArray: the input data array will be changed - * @return void - */ - public function modifyRow(array &$dataArray, $bColumnIsCount = true) - { - $fieldsList = array_keys($dataArray); - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - $colConfig = $colSettings['config'] ?? ''; - if (!$colConfig || !is_array($colConfig)) { - continue; - } - if ( - isset($colConfig['maxitems']) - && $colConfig['maxitems'] > 1 - ) { - $bMultipleValues = true; - } else { - $bMultipleValues = false; - } - switch ($colConfig['type'] ?? '') { - case 'group': - $bMultipleValues = true; - break; - case 'inline': - if ( - isset($colConfig['foreign_table']) - && $colConfig['foreign_table'] === 'sys_file_reference' - && isset($dataArray[$colName]) - && !is_array($dataArray[$colName]) - ) { - $dataArray[$colName] = unserialize($dataArray[$colName]); - } - break; - case 'select': - $value = $dataArray[$colName] ?? ''; - // checkbox from which nothing has been selected - if ($value == 'Array') { - $dataArray[$colName] = $value = ''; - } - if ( - in_array($colName, $fieldsList) - && ($colConfig['MM'] ?? false) - ) { - if ($bColumnIsCount) { - $side = isset($colConfig['MM_opposite_field']) ? 'foreign' : 'local'; - $oppositeSide = ($side === 'foreign') ? 'local' : 'foreign'; - $valuesArray = []; - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable($colConfig['MM']); - $queryBuilder->getRestrictions()->removeAll(); - $query = $queryBuilder - ->select('uid_local','uid_foreign', 'sorting' . ($side === 'foreign' ? '_' . $side : '')) - ->from($colConfig['MM']) - ->where( - $queryBuilder->expr()->eq('uid_' . $side, $queryBuilder->createNamedParameter((int)$dataArray['uid'], \PDO::PARAM_INT)) - ) - ->orderBy('sorting' . ($side === 'foreign' ? '_' . $side : '')) - ->execute(); - while ($row = $query->fetch()) { - $valuesArray[] = $row['uid_' . $oppositeSide]; - } - $dataArray[$colName] = $valuesArray; - } else if ($value == '' || is_array($value)) { - // the values from the mm table are already available as an array - } else { - $dataArray[$colName] = GeneralUtility::trimExplode (',', $value, true); - } - } - break; - case 'check': - if ( - isset($colConfig['items']) - && is_array($colConfig['items']) - ) { - $value = $dataArray[$colName] ?? []; - if(is_array($value)) { - $dataArray[$colName] = 0; - // Combine values to one hexidecimal number - foreach ($value as $dec) { - $dataArray[$colName] |= (1 << $dec); - } - } - } else if (isset($dataArray[$colName])) { - if ($dataArray[$colName] != '0') { - $dataArray[$colName] = '1'; - } else { - $dataArray[$colName] = '0'; - } - } else { - $dataArray[$colName] = '0'; - } - break; - default: - break; - } - if ($bMultipleValues) { - $value = $dataArray[$colName] ?? ''; - if (!is_array($value)) { - $dataArray[$colName] = GeneralUtility::trimExplode (',', $value, true); - } - } - } - if ($this->staticInfoObj !== null && ($dataArray['static_info_country'] ?? false) && ($dataArray['zone'] ?? false)) { - // empty zone if it does not fit to the provided country - $zoneArray = $this->staticInfoObj->initCountrySubdivisions($dataArray['static_info_country']); - if (!isset($zoneArray[$dataArray['zone']])) { - $dataArray['zone'] = ''; - } - } - } - - /** - * Get the extension key - * - * @return string the extension key - */ - public function getExtensionKey() - { - return $this->extensionKey; - } - - /** - * Get the prefix id - * - * @return string the prefix id - */ - public function getPrefixId() - { - return $this->prefixId; - } - - /** - * Get the table in use - * - * @return string the table in use - */ - public function getTable() - { - return $this->theTable; - } - - /** - * @return TypoScriptFrontendController - */ - protected function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Exception.php b/typo3conf/ext/sr_feuser_register/Classes/Exception.php deleted file mode 100644 index 7a24c8f..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Exception.php +++ /dev/null @@ -1,37 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -/** - * An exception - */ - -class Exception extends \Exception -{ - /** - * Exception codes - */ - const MISSING_SUBPART = 1; - const MISCONFIGURATION = 2; - const TABLE_NOT_DEFINED = 3; -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Hooks/FileUploadHooks.php b/typo3conf/ext/sr_feuser_register/Classes/Hooks/FileUploadHooks.php deleted file mode 100644 index 16ad45a..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Hooks/FileUploadHooks.php +++ /dev/null @@ -1,698 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Core\Environment; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Resource\DuplicationBehavior; -use TYPO3\CMS\Core\Resource\FileReference; -use TYPO3\CMS\Core\Resource\FileRepository; -use TYPO3\CMS\Core\Resource\ResourceFactory; -use TYPO3\CMS\Core\Resource\Security\FileNameValidator; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\Resource\FilePathSanitizer; - -/** - * Hooks for file upload fields - */ -class FileUploadHooks -{ - /** - * Evaluates the incoming data - * - * @param string $theTable: the name of the table in use - * @param array $dataArray: current input array - * @param string $theField: the name of the field - * @param string $cmdKey: the current command key - * @param array $cmdParts: parts of the 'eval' command - * @param string $extensionName: name of the extension - * @return array array of error messages - */ - public function evalValues($theTable, array &$dataArray, $theField, $cmdKey, array $cmdParts, $extensionName = '') - { - $failureMsg = []; - if (trim($cmdParts[0]) === 'upload') { - if ( - isset($_FILES['FE']['name'][$theTable][$theField]) - && is_array($_FILES['FE']['name'][$theTable][$theField]) - ) { - // Some files may not have been processed due to upload restrictions - foreach ($_FILES['FE']['name'][$theTable][$theField] as $i => $fileName) { - if ($fileName) { - if (!$this->checkFilename($fileName)) { - $fI = pathinfo($fileName); - $fileExtension = strtolower($fI['extension']); - $failureMsg[] = $this->getFailureText($theField, 'allowed', 'evalErrors_file_extension', $fileExtension, $extensionName); - } - switch ($_FILES['FE']['error'][$theTable][$theField][$i] ?? '') { - case UPLOAD_ERR_OK: - case UPLOAD_ERR_NO_FILE: - break; - case UPLOAD_ERR_INI_SIZE: - $maxSize = ini_get('upload_max_filesize'); - $maxSize = $this->getBytes($maxSize); - $failureMsg[] = $this->getFailureText($theField, 'max_size', 'evalErrors_size_too_large', $maxSize, $extensionName); - break; - case UPLOAD_ERR_FORM_SIZE: - $maxSize = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config']['max_size'] ?? ''; - $maxSize = $maxSize ?: ''; - $failureMsg[] = $this->getFailureText($theField, 'max_size', 'evalErrors_size_too_large', $maxSize, $extensionName); - break; - case UPLOAD_ERR_NO_TMP_DIR: - case UPLOAD_ERR_CANT_WRITE: - $failureMsg[] = $this->getFailureText($theField, 'isfile', 'evalErrors_write_permission', $fileName, $extensionName); - break; - default: - $failureMsg[] = $this->getFailureText($theField, 'isfile', 'evalErrors_file_upload', $fileName, $extensionName); - break; - } - } - } - } - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName); - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($extensionKey); - $uploadPath = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config']['uploadfolder'] ?? ''; - $uploadPath = $uploadPath ?: ($extensionConfiguration['uploadFolder'] ?? ''); - if (isset($dataArray[$theField]) && $uploadPath) { - $maxSize = $extensionConfiguration['imageMaxSize'] ?? ''; - $allowedExtArray = GeneralUtility::trimExplode(',', $extensionConfiguration['imageTypes'] ?? '', true); - $fileArray = $dataArray[$theField] ?? []; - $fileNameArray = []; - if (is_array($fileArray)) { - foreach ($fileArray as $k => $file) { - $fI = pathinfo($file['name'] ?? ''); - $fileExtension = strtolower($fI['extension'] ?? ''); - if (empty($allowedExtArray) || in_array($fileExtension, $allowedExtArray)) { - if ($this->isFile($file, $theTable, $theField)) { - if (!$maxSize || (($file['size'] ?? 0) < ($maxSize * 1024))) { - $fileNameArray[] = $file['name']; - } else { - $failureMsg[] = $this->getFailureText($theField, 'max_size', 'evalErrors_size_too_large', $maxSize, $extensionName); - $this->deleteFile($file, $theTable, $theField, $dataArray['uid']); - unset($fileArray[$k]); - } - } - } else { - $failureMsg[] = $this->getFailureText($theField, 'allowed', 'evalErrors_file_extension', $fileExtension, $extensionName); - $this->deleteFile($file, $theTable, $theField, $dataArray['uid']); - unset($fileArray[$k]); - } - } - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - $dataArray[$theField] = (isset($dataArray['uid']) && $dataArray['uid']) ? count($fileNameArray) : $fileArray; - } - } - } - } - return $failureMsg; - } - - /** - * Parses the incoming data - * - * @param string $theTable: the name of the table in use - * @param array $dataArray: the incoming data array - * @param mixed $dataValue: current input value - * @param string $theField: the name of the field - * @param string $cmdKey: the current command key - * @param array $cmdParts: parts of the 'parse' command - * @param string $extensionName: name of the extension - * @return array parsed value for the field - */ - public function parseValues($theTable, array $dataArray, $dataValue, $theField, $cmdKey, array $cmdParts, $extensionName = '') - { - if (trim($cmdParts[0]) === 'files') { - $fieldDataArray = []; - if (isset($dataValue)) { - if (is_array($dataValue)) { - $fieldDataArray = $dataValue; - } else if (is_string($dataValue) && trim($dataValue)) { - $fieldDataArray = GeneralUtility::trimExplode(',', $dataValue, true); - } - } - return $this->processFiles($theTable, $dataArray, $theField, $fieldDataArray, $cmdKey, $extensionName); - } - } - - /** - * Processes uploaded files - * - * @param string $theTable: the name of the table in use - * @param array $dataArray: the incoming data array - * @param string $theField: the name of the field - * @param array $fieldData: field value - * @param string $cmdKey: the command key being processed - * @param string $extensionName: name of the extension - * @return array file names - */ - protected function processFiles($theTable, array $dataArray, $theField, array $fieldData, $cmdKey, $extensionName = '') - { - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName); - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($extensionKey); - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - $uploadPath = $fieldConfig['uploadfolder'] ?? ''; - $uploadPath = $uploadPath ?: ($extensionConfiguration['uploadFolder'] ?? ''); - $fileArray = []; - if ($uploadPath) { - if (count($fieldData)) { - foreach ($fieldData as $file) { - if (is_array($file)) { - if ($this->checkFilename($file['name'])) { - if ($file['submit_delete'] ?? false) { - $this->deleteFile($file, $theTable, $theField, $dataArray['uid'] ?? 0); - } else { - $fileArray[] = $file; - } - } - } else { - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'group' - && isset($fieldConfig['internal_type']) - && $fieldConfig['internal_type'] === 'file' - ) { - $fileArray[] = ['name' => $file, 'size' => filesize(Environment::getPublicPath() . '/' . $uploadPath . '/' . $file)]; - } - } - } - } - if ( - isset($_FILES['FE']['name'][$theTable][$theField]) - && is_array($_FILES['FE']['name'][$theTable][$theField]) - ) { - foreach($_FILES['FE']['name'][$theTable][$theField] as $i => $fileName) { - if ( - $fileName - && $this->checkFilename($fileName) - && !($_FILES['FE']['error'][$theTable][$theField][$i] ?? false) - && ($_FILES['FE']['tmp_name'][$theTable][$theField][$i] ?? false) - ) { - $fI = pathinfo($fileName); - if (GeneralUtility::makeInstance(FileNameValidator::class)->isValid($fI['filename'])) { - $file = $this->createFile($_FILES['FE']['tmp_name'][$theTable][$theField][$i], $fileName, $theTable, $theField, $dataArray['uid'] ?? 0, $extensionName); - if ($file !== false) { - $fileArray[] = $file; - } - } - } - } - } - } - return $fileArray; - } - - /** - * Creates a file - * - * @param string $uploadedFileName: the name of the uploaded file (from $_FILES['FE']['tmp_name']) - * @param string $fileName - * @param string $theTable: the name of the table in use - * @param string $theField: the name of the field - * @param int $uid in the table in use - * @param string $extensionName: name of the extension - * @return array|bool an associative array with keys name, uid, size or false - */ - protected function createFile($uploadedFileName, $fileName, $theTable, $theField, $uid, $extensionName = '') - { - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName); - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($extensionKey); - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - $uploadPath = $fieldConfig['uploadfolder'] ?? ''; - $uploadPath = $uploadPath ?: ($extensionConfiguration['uploadFolder'] ?? ''); - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - // Create the file - $fI = pathinfo($fileName); - $newFileName = basename($fileName, '.' . $fI['extension']) . '_' . GeneralUtility::shortmd5(uniqid($fileName)) . '.' . $fI['extension']; - $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class); - $folder = $resourceFactory->getFolderObjectFromCombinedIdentifier($uploadPath); - $fileObject = $folder->addFile( - $uploadedFileName, - $newFileName, - DuplicationBehavior::RENAME - ); - if ($uid) { - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - // Get the record from the table in use - $connectionTheTable = $connectionPool->getConnectionForTable($theTable); - $row = $connectionTheTable - ->select( - ['uid', 'pid', $theField], - $theTable, - ['uid' => (int)$uid] - ) - ->fetch(); - // Create the file reference - $connectionFileReference = $connectionPool->getConnectionForTable('sys_file_reference'); - $connectionFileReference - ->insert( - 'sys_file_reference', - [ - 'pid' => (int)$row['pid'], - 'table_local' => 'sys_file', - 'uid_local' => (int)$fileObject->getUid(), - 'tablenames' => $theTable, - 'uid_foreign' => (int)$uid, - 'fieldname' => $theField - ] - ); - $fileReferenceUid = $connectionFileReference->lastInsertId('sys_file_reference'); - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); - $fileReference = $fileRepository->findFileReferenceByUid((int)$fileReferenceUid); - // Update the inline count - $connectionTheTable - ->update( - $theTable, - [$theField => (int)$row[$theField]+1], - ['uid' => (int)$uid] - ); - return is_object($fileReference) ? ['name' => $fileReference->getName(), 'uid' => $fileReference->getUid(), 'size' => $fileReference->getSize()] : false; - } else { - return ['name' => $fileObject->getName(), 'uid' => $fileObject->getUid(), 'size' => $fileObject->getSize(), 'table' => 'sys_file']; - } - } - } - - /** - * Checks whether there is a file - * - * @param array $file: an associative array with keys name, uid, size and submit_delete - * @param string $theTable: the name of the table in use - * @param string $theField: the name of the field - * @return bool true if the file exists - */ - protected function isFile(array $file, $theTable, $theField) - { - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); - try { - $fileReference = $fileRepository->findFileReferenceByUid((int)$file['uid']); - } catch (\TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException $e) { - $fileReference = $fileRepository->findByUid((int)$file['uid']); - } - return is_object($fileReference); - } - } - - /** - * Deletes a file - * - * @param array $file: an associative array with keys name, uid, size and submit_delete - * @param string $theTable: the name of the table in use - * @param string $theField: the name of the field - * @param int $uid in the table in use - * @return void - */ - protected function deleteFile(array $file, $theTable, $theField, $uid) - { - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - if ($uid && ($file['submit_delete'] ?? false) && $file['uid']) { - // If in create mode, there is no file reference to delete - // Delete the file reference - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $connectionPool->getConnectionForTable('sys_file_reference') - ->delete( - 'sys_file_reference', - ['uid' => (int)$file['uid']] - ); - // Update the inline count - $connectionTheTable = $connectionPool->getConnectionForTable($theTable); - $row = $connectionTheTable - ->select( - ['uid', $theField], - $theTable, - ['uid' => (int)$uid] - ) - ->fetch(); - if ($row[$theField]) { - $connectionTheTable - ->update( - $theTable, - [$theField => (int)$row[$theField]-1], - ['uid' => (int)$uid] - ); - } - } - } - } - - /** - * Checks for valid filenames - * - * @param string $fileName: the name of the file - * @return bool true, if the filename is allowed - */ - protected function checkFilename($fileName) - { - $fI = pathinfo($fileName); - $fileExtension = strtolower($fI['extension']); - return (strpos($fileExtension, 'php') === false) && (strpos($fileExtension, 'htaccess') === false) && (strpos($fileName, '..') === false); - } - - /** - * Gets the error message to be displayed - * - * @param string $theField: the name of the field being validated - * @param string $theRule: the name of the validation rule being evaluated - * @param string $label: a default error message provided by the invoking function - * @param string $param: parameter for the error message - * @param string $extensionName: name of the extension - * @return string the error message to be displayed - */ - protected function getFailureText($theField, $theRule, $label, $param = '', $extensionName) - { - $failureLabel = ''; - if ($theRule) { - $failureLabel = LocalizationUtility::translate('evalErrors_' . $theRule . '_' . $theField, $extensionName); - $failureLabel = $failureLabel ?: LocalizationUtility::translate('evalErrors_' . $theRule, $extensionName); - } - if (!$failureLabel) { - $failureLabel = LocalizationUtility::translate($label, $extensionName); - } - if ($param) { - $failureLabel = sprintf($failureLabel, $param); - } - return $failureLabel; - } - - /** - * On creation, create file references and set file reference count - * - * @param string $theTable: the name of the table in use - * @param string $cmdKey: the command key - * @param array $dataArray: the saved record - * @param int $pid: pid of the saved record - * @return array the modified record - */ - public function afterSave($theTable, $cmdKey, array $dataArray, $pid) - { - if ($cmdKey === 'create') { - $columns = $GLOBALS['TCA'][$theTable]['columns']; - foreach ($columns as $theField => $config) { - $fieldConfig = $config['config'] ?? []; - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - if (isset($dataArray[$theField]) && is_array($dataArray[$theField])) { - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $connectionFileReference = $connectionPool->getConnectionForTable('sys_file_reference'); - foreach ($dataArray[$theField] as $file) { - if ((isset($file['type']) && $file['type'] === 'sys_file') || (isset($file['table']) && $file['table'] === 'sys_file')) { - // Create the file reference - $connectionFileReference - ->insert( - 'sys_file_reference', - [ - 'pid' => $pid, - 'table_local' => 'sys_file', - 'uid_local' => (int)$file['uid'], - 'tablenames' => $theTable, - 'uid_foreign' => (int)$dataArray['uid'], - 'fieldname' => $theField - ] - ); - } - } - // Update the inline count - $dataArray[$theField] = count($dataArray[$theField]); - $connectionPool->getConnectionForTable($theTable) - ->update( - $theTable, - [$theField => $dataArray[$theField]], - ['uid' => (int)$dataArray['uid']] - ); - } - } - } - } - return $dataArray; - } - - /** - * On creation, create file references and set file reference count - * - * @param string $theTable: the name of the table in use - * @param int $uid: uid of the current record - * @return void - */ - public function deleteFileReferences($theTable, $uid) - { - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); - foreach ($GLOBALS['TCA'][$theTable]['columns'] as $theField => $fieldConf) { - if ( - isset($fieldConf['config']['type']) - && $fieldConf['config']['type'] === 'inline' - && isset($fieldConf['config']['foreign_table']) - && $fieldConf['config']['foreign_table'] === 'sys_file_reference' - ) { - $fileReferences = $fileRepository->findByRelation($theTable, $theField, (int)$uid); - foreach ($fileReferences as $fileReference) { - $file = [ - 'name' => $fileReference->getName(), - 'uid' => $fileReference->getUid(), - 'type' => 'sys_file_reference', - 'submit_delete' => 1 - ]; - $this->deleteFile($file, $theTable, $theField, $uid); - } - } - } - } - - /** - * Adds uploading markers to a marker array - * - * @param string $theTable: the name of the table in use - * @param string $theField: the field name - * @param string $cmd: the command CODE - * @param string $cmdKey: the command key - * @param array $dataArray: the record array - * @param bool $viewOnly: whether the fields are presented for view only or for input/update - * @param string $activity: 'preview', 'input' or 'email': parameter of stdWrap configuration - * @param bool $bHtml: wheter HTML or plain text should be generated - * @param string $extensionName: name of the extension - * @param string $prefixId: the prefixId - * @param array $conf: the plugin configuration - * @return void - */ - public function addMarkers($theTable, $theField, $cmd, $cmdKey, $dataArray = array(), $viewOnly = false, $activity = '', $bHtml = true, $extensionName, $prefixId, array $conf) - { - $markerArray = []; - $fieldConfig = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($fieldConfig['type']) - && $fieldConfig['type'] === 'inline' - && isset($fieldConfig['foreign_table']) - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); - $fileNameArray = []; - if ($dataArray['uid'] ?? false) { - $fileReferences = $fileRepository->findByRelation($theTable, $theField, $dataArray['uid']); - foreach ($fileReferences as $fileReference) { - $fileNameArray[] = [ - 'name' => $fileReference->getName(), - 'uid' => $fileReference->getUid(), - 'url' => $fileReference->getPublicUrl(), - 'type' => 'sys_file_reference' - ]; - } - } else { - if ( - isset($dataArray[$theField]) - && is_array($dataArray[$theField]) - ) { - foreach ($dataArray[$theField] as $file) { - $fileReference = $fileRepository->findByUid($file['uid']); - $fileNameArray[] = [ - 'name' => $fileReference->getName(), - 'uid' => $fileReference->getUid(), - 'url' => $fileReference->getPublicUrl(), - 'type' => 'sys_file' - ]; - } - } - } - $fileUploader = $this->buildFileUploader($theTable, $theField, $cmd, $cmdKey, $fileNameArray, $viewOnly, $activity, $bHtml, $extensionName, $prefixId, $conf); - if ($viewOnly) { - $markerArray['###UPLOAD_PREVIEW_' . $theField . '###'] = $fileUploader; - } else { - $markerArray['###UPLOAD_' . $theField . '###'] = $fileUploader; - $max_size = $fieldConfig['max_size'] * 1024; - $markerArray['###HIDDENFIELDS###'] = $markerArray['###HIDDENFIELDS###'] ?? ''; - $markerArray['###HIDDENFIELDS###'] .= '' . LF; - $markerArray['###HIDDENFIELDS###'] .= '' . LF; - } - } - return $markerArray; - } - - /** - * Builds a file uploader - * - * @param string $theTable: the name of the table in use - * @param string $theField: the field name - * @param string $cmd: the command CODE - * @param string $cmdKey: the command key - * @param array $fileArray: array of uploaded files - * @param boolean $viewOnly: whether the fields are presented for view only or for input/update - * @param string $activity: 'preview', 'input' or 'email': parameter of stdWrap configuration - * @param bool $bHtml: wheter HTML or plain text should be generated - * @param string $extensionName: name of the extension - * @param string $prefixId: the prefixId - * @param array $conf: the plugin configuration - * @return string generated HTML uploading tags - */ - protected function buildFileUploader($theTable, $theField, $cmd, $cmdKey, array $fileArray, $viewOnly = false, $activity = '', $bHtml = true, $extensionName, $prefixId, array $conf) - { - $HTMLContent = ''; - $size = $GLOBALS['TCA'][$theTable]['columns'][$theField]['config']['maxitems'] ?? 1; - $cmdParts = preg_split('/\[|\]/', $conf[$cmdKey . '.']['evalValues.'][$theField] ?? ''); - if (!empty($cmdParts[1])) { - $size = min($size, (int)$cmdParts[1]); - } - $size = $size ?: 1; - $number = $size - count($fileArray); - if ($viewOnly) { - foreach ($fileArray as $file) { - $HTMLContent .= $file['name']; - if ($activity === 'email') { - if ($bHtml) { - $HTMLContent .= '
    '; - } else { - $HTMLContent .= CR . LF; - } - } else if ($bHtml) { - $HTMLContent .= ' ' . LocalizationUtility::translate('file_view', $extensionName) . '
    '; - } - } - } else { - $HTMLContent .= '
    '; - $formName = ($conf['formName'] ?? '') ?: CssUtility::getClassName($prefixId, $theTable . '_form'); - $filePathSanitizer = GeneralUtility::makeInstance(FilePathSanitizer::class); - foreach ($fileArray as $i => $file) { - $HTMLContent .= '
    ' - . $file['name'] - . '' - . '' - . '' - . '' - . ' ' - . ' ' . - LocalizationUtility::translate('file_view', $extensionName) . '
    '; - } - for ($i = count($fileArray); $i < $number + count($fileArray); $i++) { - $HTMLContent .= '
    '; - } - } - return $HTMLContent; - } - - /** - * @param string $size - * @return int - * @author DevsrealmGuy - */ - public function getBytes(string $size): int - { - $size = trim($size); - - # - # Separate the value from the metric(i.e MB, GB, KB) - # - preg_match('/([0-9]+)[\s]*([a-zA-Z]+)/', $size, $matches); - - $value = (isset($matches[1])) ? $matches[1] : 0; - $metric = (isset($matches[2])) ? strtolower($matches[2]) : 'b'; - - # - # Result of $value multiplied by the matched case - # Note: (1024 ** 2) is same as (1024 * 1024) or pow(1024, 2) - # match available only with PHP 8 - /*$value *= match ($metric) { - 'k', 'kb' => 1024, - 'm', 'mb' => (1024 ** 2), - 'g', 'gb' => (1024 ** 3), - 't', 'tb' => (1024 ** 4), - default => 1 - };*/ - - switch ($metric) { - case 'k': - case 'kb': - $value *= 1024; - break; - case 'm': - case 'mb': - $value *= (1024 ** 2); - break; - case 'g': - case 'gb': - $value *= (1024 ** 3); - break; - case 't': - case 'tb': - $value *= (1024 ** 4); - break; - } - return (int)$value; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Hooks/RegistrationProcessHooks.php b/typo3conf/ext/sr_feuser_register/Classes/Hooks/RegistrationProcessHooks.php deleted file mode 100644 index ab52ca4..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Hooks/RegistrationProcessHooks.php +++ /dev/null @@ -1,123 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Domain\Data; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Utility\DataUtility; -use SJBR\SrFeuserRegister\View\Marker; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Example of hooks for extension Front End User Registration (sr_feuser_register) - */ -class RegistrationProcessHooks -{ - /** - * @param string $cmdKey: the cmd being processed - * @param array $conf: the plugin configuration - */ - public function registrationProcess_beforeConfirmCreate( - $theTable, - array &$recordArray, - Parameters $parameters, - $cmdKey, - array $conf - ) { - // in the case of this hook, the record array is passed by reference - // in this example hook, we generate a username based on the first and last names of the user - if ( - $parameters->getFeUserData('preview') - && ($conf[$cmdKey . '.']['generateUsername'] ?? false) - ) { - $firstName = trim($recordArray['first_name'] ?? ''); - $lastName = trim($recordArray['last_name'] ?? ''); - $name = trim($recordArray['name'] ?? ''); - if ((!$firstName || !$lastName) && $name) { - $nameArray = GeneralUtility::trimExplode(' ', $name); - $firstName = ($firstName ? $firstName : $nameArray[0]); - $lastName = ($lastName ? $lastName : $nameArray[1]); - } - $recordArray['username'] = substr(strtolower($firstName), 0, 5) . substr(strtolower($lastName), 0, 5); - $DBrows = DataUtility::getRecordsByField($theTable, 'username', $recordArray['username'], '', '', '', '1'); - $counter = 0; - while ($DBrows) { - $counter = $counter + 1; - $DBrows = DataUtility::getRecordsByField($theTable, 'username', $recordArray['username'] . $counter, '', '', '', '1'); - } - if ($counter) { - $recordArray['username'] = $recordArray['username'] . $counter; - } - } - } - - public function registrationProcess_afterSaveEdit( - $theTable, - array $dataArray, - array $origArray, - $token, - array &$newRow, - $cmd, - $cmdKey, - $pid, - $fieldList, - Data $pObj - ) { - } - - public function registrationProcess_beforeSaveDelete($recordArray, $invokingObj) { - } - - public function registrationProcess_afterSaveCreate( - $theTable, - array $dataArray, - array $origArray, - $token, - array &$newRow, - $cmd, - $cmdKey, - $pid, - $fieldList, - Data $pObj - ) { - } - - public function confirmRegistrationClass_preProcess(array &$recordArray, $invokingObj) { - // in the case of this hook, the record array is passed by reference - // you may not see this echo if the page is redirected to auto-login - } - - public function confirmRegistrationClass_postProcess(array $recordArray, $invokingObj) { - // you may not see this echo if the page is redirected to auto-login - } - - /** - * Add some markers to the current marker array - * - * @param array $markerArray: reference to the marker array - * @param Marker invoking marker object - * @param string $cmdKey: the cmd being processed - * @param array $conf: the plugin configuration - */ - public function addGlobalMarkers(array &$markerArray, Marker $markerObj, $cmdKey, array $conf) {} -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Hooks/UsergroupHooks.php b/typo3conf/ext/sr_feuser_register/Classes/Hooks/UsergroupHooks.php deleted file mode 100644 index d4899ba..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Hooks/UsergroupHooks.php +++ /dev/null @@ -1,281 +0,0 @@ - - * (c) 2012-2022 Stanislas Rolland - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; - -/** - * Hooks for the usergroup field - */ -class UsergroupHooks -{ - /** - * Modify the form fields configuration depending on the $cmdKey - * - * @param array $conf: the configuration array - * @param string $cmdKey: the command key - * @return void - */ - public function modifyConf(array &$conf, $cmdKey) - { - // Add usergroup to the list of fields if the user is allowed to select user groups - // Except when only updating password - if ($cmdKey !== 'password') { - if ($conf[$cmdKey . '.']['allowUserGroupSelection'] ?? false) { - $conf[$cmdKey . '.']['fields'] = implode(',', array_unique(GeneralUtility::trimExplode(',', ($conf[$cmdKey . '.']['fields'] ?? '') . ',usergroup', true))); - } else { - // Remove usergroup from the list of fields and required fields if the user is not allowed to select user groups - $conf[$cmdKey . '.']['fields'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($conf[$cmdKey . '.']['fields'] ?? ''), true), ['usergroup'])); - $conf[$cmdKey . '.']['required'] = implode(',', array_diff(GeneralUtility::trimExplode(',', ($conf[$cmdKey . '.']['required'] ?? ''), true), ['usergroup'])); - } - } - } - - /** - * Get the array of user groups reserved for control of the registration process - * - * @param array $conf: the plugin configuration - * @return array the reserved user groups - */ - public function getReservedValues(array $conf) - { - $reservedValues = array_merge( - GeneralUtility::trimExplode(',', $conf['create.']['overrideValues.']['usergroup'] ?? '', true), - GeneralUtility::trimExplode(',', $conf['invite.']['overrideValues.']['usergroup'] ?? '', true), - GeneralUtility::trimExplode(',', $conf['setfixed.']['APPROVE.']['usergroup'] ?? '', true), - GeneralUtility::trimExplode(',', $conf['setfixed.']['ACCEPT.']['usergroup'] ?? '', true) - ); - return array_unique($reservedValues); - } - - /** - * Remove reserved user groups from the usergroup field of an array - * - * @param array $row: array - * @return void - */ - public function removeReservedValues(array &$row, array $conf) - { - if (isset($row['usergroup'])) { - $reservedValues = $this->getReservedValues($conf); - if (is_array($row['usergroup'])) { - $userGroupArray = $row['usergroup']; - $bUseArray = true; - } else { - $userGroupArray = explode(',', $row['usergroup']); - $bUseArray = false; - } - $userGroupArray = array_diff($userGroupArray, $reservedValues); - if ($bUseArray) { - $row['usergroup'] = $userGroupArray; - } else { - $row['usergroup'] = implode(',', $userGroupArray); - } - } - } - - public function removeInvalidValues(array $conf, $cmdKey, array &$row) - { - if ( - isset($row['usergroup']) - && ($conf[$cmdKey . '.']['allowUserGroupSelection'] ?? false) - ) { - // Todo - } else { - // The setting of the usergroups is allowed - $row['usergroup'] = ''; - } - } - - /** - * Processes data before entering the database - * - * @return void - */ - public function parseOutgoingData($theTable, $fieldname, $foreignTable, $cmdKey, $pid, array $conf, array $dataArray, array $origArray, array &$parsedArray) - { - $valuesArray = []; - if (isset($origArray[$fieldname]) && is_array($origArray[$fieldname])) { - $valuesArray = $origArray[$fieldname]; - $keepValues = []; - if ($conf[$cmdKey . '.']['keepUnselectableUserGroups'] ?? false) { - // Get usergroups that are not selectable - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable($foreignTable) - ->select('uid') - ->from($foreignTable); - $this->getAllowedWhereClause($foreignTable, $pid, $conf, $cmdKey, false, $queryBuilder); - $query = $queryBuilder - ->execute(); - $rowArray = []; - while ($row = $query->fetch()) { - $rowArray['uid'] = $row; - } - if (!empty($rowArray) && is_array($rowArray)) { - $keepValues = array_keys($rowArray); - } - } - $keepValues = array_unique(array_merge($keepValues, $this->getReservedValues($conf))); - $valuesArray = array_intersect($valuesArray, $keepValues); - } - if (isset($dataArray[$fieldname]) && is_array($dataArray[$fieldname])) { - $dataArray[$fieldname] = array_unique(array_merge($dataArray[$fieldname], $valuesArray)); - $parsedArray[$fieldname] = $dataArray[$fieldname]; - } - } - - /** - * Contruct a where clause to select the user groups that are allowed to be kept - * - * @return string the where clause - */ - public function getAllowedWhereClause($theTable, $pid, array $conf, $cmdKey, $bAllow = true, $queryBuilder = null) - { - $pidArray = GeneralUtility::trimExplode(',', $conf['userGroupsPidList'] ?? '', true); - if (empty($pidArray)) { - if (is_array($pid)) { - $pidArray = $pid; - } else { - $pidArray = GeneralUtility::trimExplode(',', $pid, true); - } - } - if (!empty($pidArray)) { - $pidArray = array_map('intval', $pidArray); - if (empty($queryBuilder->getQueryPart('where'))) { - $queryBuilder->where($queryBuilder->expr()->in('pid', $pidArray)); - } else { - $queryBuilder->andWhere($queryBuilder->expr()->in('pid', $pidArray)); - } - } - - $allowedUserGroupArray = []; - $allowedSubgroupArray = []; - $deniedUserGroupArray = []; - $this->getAllowedValues($conf, $cmdKey, $allowedUserGroupArray, $allowedSubgroupArray, $deniedUserGroupArray); - if ($allowedUserGroupArray['0'] !== 'ALL') { - if ($bAllow) { - $allowedUserGroupExpression = $queryBuilder->expr()->in('uid', $allowedUserGroupArray); - } else { - $allowedUserGroupExpression = $queryBuilder->expr()->notIn('uid', $allowedUserGroupArray); - } - } - if (count($allowedSubgroupArray)) { - if ($bAllow) { - $allowedSubgroupExpression = $queryBuilder->expr()->in('subgroup', $allowedSubgroupArray); - } else { - $allowedSubgroupExpression = $queryBuilder->expr()->notIn('subgroup', $allowedSubgroupArray); - } - } - if (($allowedUserGroupExpression ?? false) && ($allowedSubgroupExpression ?? false)) { - if ($bAllow) { - $allowedExpression = $queryBuilder->expr()->orX($allowedUserGroupExpression, $allowedSubgroupExpression); - } else { - $allowedExpression = $queryBuilder->expr()->andX($allowedUserGroupExpression, $allowedSubgroupExpression); - } - } else { - if ($allowedUserGroupExpression ?? false) { - $allowedExpression = $allowedUserGroupExpression; - } - if ($allowedSubgroupExpression ?? false) { - $allowedExpression = $allowedSubgroupExpression; - } - } - $deniedUserGroupArray = array_merge($deniedUserGroupArray, $this->getReservedValues($conf)); - if (count($deniedUserGroupArray)) { - if ($bAllow) { - $deniedExpression = $queryBuilder->expr()->notIn('uid', $deniedUserGroupArray); - } else { - $deniedExpression = $queryBuilder->expr()->in('uid', $deniedUserGroupArray); - } - } - if ($allowedExpression && $deniedExpression) { - if ($bAllow) { - $expression = $queryBuilder->expr()->andX($allowedExpression, $deniedExpression); - } else { - $expression = $queryBuilder->expr()->orX($allowedExpression, $deniedExpression); - } - } else { - if ($allowedExpression) { - $expression = $allowedExpression; - } - if ($deniedExpression) { - $expression = $deniedExpression; - } - } - if ($expression) { - if (empty($queryBuilder->getQueryPart('where'))) { - $queryBuilder->where($expression); - } else { - $queryBuilder->andWhere($expression); - } - } - return ''; - } - - /** - * Get the allowed values for user groups - * - * @param array $conf: the configuration array - * @param string $cmdKey: the command key - * @return void - */ - public function getAllowedValues(array $conf, $cmdKey, array &$allowedUserGroupArray, array &$allowedSubgroupArray, array &$deniedUserGroupArray) - { - $allowedUserGroupArray = GeneralUtility::trimExplode(',', $conf[$cmdKey . '.']['allowedUserGroups'] ?? '', true); - if ($allowedUserGroupArray['0'] !== 'ALL') { - $allowedUserGroupArray = array_map('intval', $allowedUserGroupArray); - } - $allowedSubgroupArray = array_map('intval', GeneralUtility::trimExplode(',', $conf[$cmdKey . '.']['allowedSubgroups'] ?? '', true)); - $deniedUserGroupArray = array_map('intval', GeneralUtility::trimExplode(',', $conf[$cmdKey . '.']['deniedUserGroups'] ?? '', true)); - } - - /** - * Restrict the input values array to allowed values - * - * @param array $values: input values array - * @param array $conf: the configuration array - * @param string $cmdKey: the command key - * @return void - */ - public function restrictToSelectableValues(array $values, array $conf, $cmdKey) - { - $restrictedValues = $values; - $reservedValues = $this->getReservedValues($conf); - $allowedUserGroupArray = []; - $allowedSubgroupArray = []; - $deniedUserGroupArray = []; - $this->getAllowedValues($conf, $cmdKey, $allowedUserGroupArray, $allowedSubgroupArray, $deniedUserGroupArray); - if (!empty($allowedUserGroupArray) && $allowedUserGroupArray['0'] !== 'ALL') { - $restrictedValues = array_intersect($restrictedValues, $allowedUserGroupArray); - } - if (!empty($allowedSubgroupArray)) { - $restrictedValues = array_intersect($restrictedValues, $allowedSubgroupArray); - } - $restrictedValues = array_diff($restrictedValues, $deniedUserGroupArray); - $restrictedValues = array_diff($restrictedValues, $reservedValues); - return $restrictedValues; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Mail/Message.php b/typo3conf/ext/sr_feuser_register/Classes/Mail/Message.php deleted file mode 100644 index 077fa46..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Mail/Message.php +++ /dev/null @@ -1,229 +0,0 @@ - - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Information\Typo3Version; -use TYPO3\CMS\Core\Mail\MailMessage; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Email functions - */ -class Message -{ - /** - * Dispatches the email messsage - * - * @param string $recipient: email address - * @param string $admin: email address - * @param string $content: plain content for the recipient - * @param string $HTMLcontent: HTML content for the recipient - * @param string $adminContent: plain content for admin - * @param string $adminContentHTML: HTML content for admin - * @param string $fileAttachment: file name - * @param array $conf: the plugin configuration - * @return void - */ - static public function send($recipient, $admin, $content = '', $contentHTML = '', $adminContent = '', $adminContentHTML = '', $fileAttachment = '', $conf) - { - // Send mail to admin - if ($admin && ($adminContent != '' || $adminContentHTML != '')) { - if ($conf['email.']['replyTo'] ?? false) { - if ($conf['email.']['replyTo'] === 'user') { - $replyTo = $recipient; - } else { - $replyTo = $conf['email.']['replyTo']; - } - } - self::messageSend($adminContentHTML, $adminContent, $admin, $conf['email.']['from'] ?? '', $conf['email.']['fromName'] ?? '', $replyTo ?? ''); - } - - // Send mail to user - if ($recipient && ($content != '' || $contentHTML != '')) { - $replyToAdmin = $conf['email.']['replyToAdmin'] ?? ''; - self::messageSend($contentHTML, $content, $recipient, $conf['email.']['from'], $conf['email.']['fromName'], $replyToAdmin, $fileAttachment); - } - } - - /** - * Invokes the HTML mailing class - * - * @param string $HTMLContent: HTML version of the message - * @param string $PLAINContent: plain version of the message - * @param string $recipient: email address - * @param string $fromEmail: email address - * @param string $fromName: name - * @param string $replyTo: email address - * @param string $fileAttachment: file name - * @return void - */ - static protected function messageSend($HTMLContent, $PLAINContent, $recipient, $fromEmail, $fromName, $replyTo = '', $fileAttachment = '') - { - if (trim($recipient) && (trim($HTMLContent) || trim($PLAINContent))) { - $fromName = str_replace('"', '\'', $fromName); - if (preg_match ('/^\w[\w\-.#&\S]*$/', $fromName)) { - $fromName = '"' . $fromName . '"'; - } - $defaultSubject = 'Front end user registration message'; - if ($HTMLContent) { - $parts = preg_split('/|<\\/title>/i', $HTMLContent, 3); - $subject = trim($parts[1]) ? strip_tags(trim($parts[1])) : $defaultSubject; - } else { - // First line is subject - $parts = explode(chr(10), $PLAINContent, 2); - $subject = trim($parts[0]) ? trim($parts[0]) : $defaultSubject; - $PLAINContent = trim($parts[1]); - } - $mail = GeneralUtility::makeInstance(MailMessage::class); - $mail->subject($subject) - ->from(new \Symfony\Component\Mime\Address($fromEmail, $fromName)) - ->sender(new \Symfony\Component\Mime\Address($fromEmail)) - ->replyTo($replyTo ? new \Symfony\Component\Mime\Address($replyTo) : new \Symfony\Component\Mime\Address($fromEmail, $fromName)) - ->priority(\Symfony\Component\Mime\Email::PRIORITY_NORMAL) - ->to(new \Symfony\Component\Mime\Address($recipient)) - ->text($PLAINContent); - // ATTACHMENT - if ($fileAttachment && file_exists($fileAttachment)) { - $mail->attachFromPath($fileAttachment); - } - // HTML - if (trim($HTMLContent)) { - $HTMLContent = self::embedMedia($mail, $HTMLContent); - $mail->html($HTMLContent); - } - $mail->setReturnPath($fromEmail); - // If the address is unrouteable, sending will fail - try { - $mail->send(); - } catch (\Exception $e) { - // Nothing to do - } - } - } - - /** - * Embeds media into the mail message - * - * @param MailMessage $mail: mail message - * @param string $htmlContent: the HTML content of the message - * @return string the subtituted HTML content - */ - static protected function embedMedia(MailMessage $mail, $htmlContent) - { - $typo3Version = GeneralUtility::makeInstance(Typo3Version::class); - $typo3Branch = $typo3Version->getBranch(); - $substitutedHtmlContent = $htmlContent; - $media = []; - $attribRegex = self::makeTagRegex(['img', 'embed', 'audio', 'video']); - // Split the document by the beginning of the above tags - $codepieces = preg_split($attribRegex, $htmlContent); - $len = strlen($codepieces[0]); - $pieces = count($codepieces); - $reg = []; - for ($i = 1; $i < $pieces; $i++) { - $tag = strtolower(strtok(substr($htmlContent, $len + 1, 10), ' ')); - $len += strlen($tag) + strlen($codepieces[$i]) + 2; - $dummy = preg_match('/[^>]*/', $codepieces[$i], $reg); - // Fetches the attributes for the tag - $attributes = self::getTagAttributes($reg[0]); - // Adds each unique src to media only once - $src_uid = md5($attributes['src']); - if ($attributes['src'] && !isset($media[$src_uid])) { - $media[$src_uid]['src'] = $attributes['src']; - if (version_compare($typo3Branch, '10.4', '>=')) { - $mail->embedFromPath($attributes['src'], $src_uid); - $media[$src_uid]['cid'] = 'cid:' . $src_uid; - } else { - $media[$src_uid]['cid'] = $mail->embed(\Swift_Image::fromPath($attributes['src'])); - } - } - } - foreach ($media as $embeddedMedia) { - $substitutedHtmlContent = str_replace( - '"' . $embeddedMedia['src'] . '"', - '"' . $embeddedMedia['cid'] . '"', - $substitutedHtmlContent); - } - return $substitutedHtmlContent; - } - - /** - * Creates a regular expression out of an array of tags - * - * @param array $tags: the array of tags - * @return string the regular expression - */ - static protected function makeTagRegex(array $tags) - { - $regexpArray = array(); - foreach ($tags as $tag) { - $regexpArray[] = '<' . $tag . '[[:space:]]'; - } - return '/' . implode('|', $regexpArray) . '/i'; - } - - /** - * This function analyzes a HTML tag - * If an attribute is empty (like OPTION) the value of that key is just empty. Check it with is_set(); - * - * @param string $tag: is either like this "<TAG OPTION ATTRIB=VALUE>" or this " OPTION ATTRIB=VALUE>" which means you can omit the tag-name - * @return array array with attributes as keys in lower-case - */ - static protected function getTagAttributes($tag) - { - $attributes = array(); - $tag = ltrim(preg_replace('/^<[^ ]*/', '', trim($tag))); - $tagLen = strlen($tag); - $safetyCounter = 100; - // Find attribute - while ($tag) { - $value = ''; - $reg = preg_split('/[[:space:]=>]/', $tag, 2); - $attrib = $reg[0]; - $tag = ltrim(substr($tag, strlen($attrib), $tagLen)); - if (substr($tag, 0, 1) == '=') { - $tag = ltrim(substr($tag, 1, $tagLen)); - if (substr($tag, 0, 1) == '"') { - // Quotes around the value - $reg = explode('"', substr($tag, 1, $tagLen), 2); - $tag = ltrim($reg[1]); - $value = $reg[0]; - } else { - // No quotes around value - preg_match('/^([^[:space:]>]*)(.*)/', $tag, $reg); - $value = trim($reg[1]); - $tag = ltrim($reg[2]); - if (substr($tag, 0, 1) == '>') { - $tag = ''; - } - } - } - $attributes[strtolower($attrib)] = $value; - $safetyCounter--; - if ($safetyCounter < 0) { - break; - } - } - return $attributes; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Request/Parameters.php b/typo3conf/ext/sr_feuser_register/Classes/Request/Parameters.php deleted file mode 100644 index 9e49f99..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Request/Parameters.php +++ /dev/null @@ -1,730 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Request; - -/* - * Copyright notice - * - * (c) 2007-2012 Franz Holzinger <franz@ttproducts.de> - * (c) 2012-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use Psr\Log\LoggerAwareInterface; -use Psr\Log\LoggerAwareTrait; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use TYPO3\CMS\Core\Domain\Repository\PageRepository; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; -use TYPO3\CMS\Frontend\Plugin\AbstractPlugin; - -/** - * Request parameters - */ -class Parameters implements LoggerAwareInterface -{ - use LoggerAwareTrait; - - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table being used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * The plugin object - * - * @var AbstractPlugin - */ - protected $pibaseObj; - - /** - * The authentication code - * - * @var string - */ - static protected $authCode = ''; - - /** - * The control data from get/post parameters (with no prefix or as $this->prefix[parameter]) including regHash - * - * @var array - */ - protected $feUserData = []; - - /** - * The regHash if available among GET parameters (after validation) - * - * @var string - */ - protected $regHash = ''; - - /** - * The setfixed variables (with prefix fD) - * - * @var array - */ - protected $setFixedVars = []; - - /** - * The input command - * - * @var string - */ - protected $cmd = ''; - - /** - * The title of the page of the records - * - * @var string - */ - protected $pidTitle; - - /** - * The pids of the various types - * - * @var array - */ - protected $pid = []; - - /** - * Whether the token was found valid - * - * @var bool - */ - protected $isTokenValid = false; - - /** - * The command key - * - * @var string - */ - protected $cmdKey = ''; - - public $thePid = 0; - public $piVars; - public $bSubmit = false; - public $bDoNotSave = false; - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param array $piVars: the pivars - * @param AbstractPlugin $pibaseObj - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array &$conf, - array $piVars, - AbstractPlugin $pibaseObj - ) { - $this->extensionKey = $extensionKey; - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf =& $conf; - $this->piVars = $piVars; - $this->pibaseObj = $pibaseObj; - $this->initialize(); - } - - /** - * Establishes context based on configuration settings, piVars and session data - * - * @return void - */ - protected function initialize() - { - // Determine whether a password is in use - $this->setPassword(); - - // Populate the feUserData array from Get/Post variables, including from any available regHash - $this->setFeUserData(); - - // Set the authCode - $this->setAuthCode($this->getFeUserData('aC')); - - // Set the command - $this->setCmd(); - - // Validate the token - $this->validateToken(); - if ($this->isTokenValid()) { - SessionData::writeRedirectUrl($this->extensionKey); - // Generate a new token for the next created forms - $token = Authentication::generateToken(); - SessionData::writeToken($this->extensionKey, $token); - } else { - // Erase all FE user data when the token is not valid - $this->resetFeUserData(); - // Erase any stored password - SessionData::writePassword($this->extensionKey, ''); - } - - // Initialize various data - $this->setPids(); - $this->setPidTitle(); - } - - /** - * Set the password - * - * @return void - */ - protected function setPassword() - { - if ($this->theTable === 'fe_users' && isset($this->conf['create.']['evalValues.']['password'])) { - $password = ''; - $password_again = ''; - $fe = GeneralUtility::_POST('FE'); - if (isset($fe) && is_array($fe)) { - $feDataArray = $fe[$this->theTable]; - if (isset($feDataArray['password'])) { - $password = $feDataArray['password']; - } - if (isset($feDataArray['password_again'])) { - $password_again = $feDataArray['password_again']; - } - } - if (!empty($password) || !empty($password_again)) { - SessionData::writePassword($this->extensionKey, $password, $password_again); - } - } - } - - /** - * Initialize the pids of various types - * - * @return void - */ - protected function setPids() - { - $pidTypeArray = ['login', 'register', 'edit', 'infomail', 'confirm', 'confirmInvitation']; - foreach ($pidTypeArray as $type) { - if (isset($this->conf[$type . 'PID'])) { - $this->setPid($type, $this->conf[$type . 'PID']); - } - } - } - - public function getPids() - { - return $this->pid; - } - - /** - * Set the pid of a given type - * - * @param string $type: the type of pid - * @param string $pid: the pid - * @return void - */ - protected function setPid($type, $pid) - { - if (!MathUtility::canBeInterpretedAsInteger($pid) || !$pid) { - switch ($type ?? '') { - case 'infomail': - case 'confirm': - $pid = $this->getPid('register'); - break; - case 'confirmInvitation': - $pid = $this->getPid('confirm'); - break; - default: - $pidArray = []; - $tmpArray = GeneralUtility::trimExplode(',', $this->conf['pid'] ?? '', true); - if (count($tmpArray)) { - foreach ($tmpArray as $value) { - $valueIsInt = MathUtility::canBeInterpretedAsInteger($value); - if ($valueIsInt) { - $pidArray[] = (int)$value; - } - } - } - $pid = count($pidArray) ? $pidArray[0] : $GLOBALS['TSFE']->id; - break; - } - } - $this->pid[$type] = $pid; - } - - /** - * Get the configured pid of a given type - * - * @param string $type: the type of pid requested - * @return string the configured pid of the requested type - */ - public function getPid($type = '') - { - $pid = 0; - if ($type) { - if (isset($this->pid[$type])) { - $pid = $this->pid[$type]; - } - } - if (!$pid) { - $pids = []; - if ($this->pibaseObj->cObj->data['pages']) { - $pids = explode(',', $this->pibaseObj->cObj->data['pages']); - } - if (count($pids)) { - $pid = $type ? $pids['0'] : implode(',', $pids); - } - if (empty($pid)) { - $pidArray = []; - $tmpArray = GeneralUtility::trimExplode(',', $this->conf['pid'] ?? '', true); - if (count($tmpArray)) { - foreach ($tmpArray as $value) { - $valueIsInt = MathUtility::canBeInterpretedAsInteger($value); - if ($valueIsInt) { - $pidArray[] = (int)$value; - } - } - } - if (count($pidArray)) { - $pid = $type ? $pidArray[0] : implode(',', $pidArray); - } - } - } - return !empty($pid) ? $pid : $GLOBALS['TSFE']->id; - } - - /** - * Set the title of the page of the records - * - * @return void - */ - protected function setPidTitle() - { - $pageRepository = GeneralUtility::makeInstance(PageRepository::class); - $row = $pageRepository->getPage_noCheck((int)$this->getPid()); - $this->pidTitle = (isset($this->conf['pidTitleOverride']) && $this->conf['pidTitleOverride']) ? $this->conf['pidTitleOverride'] : $row['title']; - } - - /** - * Get the title of the page of the records - * - * @return string the title of the page of the records - */ - public function getPidTitle() - { - return $this->pidTitle; - } - - /** - * Set the feUserData array including from any available regHash - * - * @return void - */ - protected function setFeUserData() - { - $feUserData = GeneralUtility::_GP($this->prefixId); - if (isset($feUserData) && is_array($feUserData)) { - $this->feUserData = $feUserData; - } - // Get if short url feature is enabled and hash variable if provided - if ( - ($this->conf['useShortUrls'] ?? false) - && ($this->feUserData['regHash'] ?? false) - ) { - HashUtility::cleanHashCache($this->conf); - // Check and process for short URL if the regHash GET parameter exists - $getHashVars = HashUtility::getParametersFromHash($this->feUserData['regHash']); - if (!empty($getHashVars) && is_array($getHashVars)) { - $this->setRegHash($this->feUserData['regHash']); - $keepFieldArray = ['sFK', 'cmd', 'submit', 'fetch', 'regHash', 'preview']; - $keepFeuserData = []; - // Copy the original values which must not be overridden by the regHash stored values - foreach ($keepFieldArray as $keepField) { - if (isset($feUserData[$keepField])) { - $keepFeuserData[$keepField] = $this->feUserData[$keepField]; - } - } - // Restore former GET values from the url - foreach ($getHashVars as $k => $v) { - $this->GETset($v, $k); - } - // Overlay the $this->feUserData with the hashed values if rU is the same in both - $hashedFeUserData = $getHashVars[$this->prefixId] ?? ''; - if (isset($hashedFeUserData) && is_array($hashedFeUserData)) { - if ( - isset($hashedFeUserData['rU']) - && $hashedFeUserData['rU'] > 0 - && isset($this->feUserData['rU']) - && $hashedFeUserData['rU'] === $this->feUserData['rU'] - ) { - $this->feUserData = array_merge($this->feUserData, $hashedFeUserData); - } else { - $this->feUserData = $hashedFeUserData; - } - } - // Overlay with the preserved values - $this->feUserData = array_merge($this->feUserData, $keepFeuserData); - // Set the fD array if provided by the hash - if (isset($getHashVars['fD']) && is_array($getHashVars['fD'])) { - $this->setFixedVars = $getHashVars['fD']; - } - } - } - // Establishing compatibility with Direct Mail - $piVarArray = ['rU', 'aC', 'sFK']; - foreach ($piVarArray as $pivar) { - $value = htmlspecialchars(GeneralUtility::_GP($pivar)); - if (!empty($value)) { - $this->feUserData[$pivar] = $value; - } - } - // Cleanup input values - SecuredData::secureInput($this->feUserData); - } - - /** - * Erase the fe user data array - * - * @return void - */ - protected function resetFeUserData() - { - $this->feUserData = []; - } - - /** - * Set a value for a key of feUserData - * - * @param string $key: the key for which the value should be set - * @param mixed $value: the value to be assigned - * @return void - */ - public function setFeUserDataValue($key, $value) - { - $this->feUserData[$key] = $value; - } - - /** - * Get the feUserData array or an index of the array - * - * @param string $key: the key for which the value should be returned - * @return mixed the value of the specified key or the full array - */ - public function getFeUserData($key = '') - { - return empty($key) ? $this->feUserData : ($this->feUserData[$key] ?? ''); - } - - /** - * Set the regHash (only when found valid) - * - * @param string $regHash - * @return void - */ - protected function setRegHash($regHash) - { - $this->regHash = $regHash; - } - - /** - * Get the regHash (only when found valid) - * - * @return string $regHash - */ - public function getRegHash() - { - return $this->regHash; - } - - /** - * Get the validity of the regHash - * - * @return bool true, if the regHash was found valid - */ - public function getValidRegHash() - { - return !empty($this->regHash); - } - - /** - * Get the authentication code - * - * @return string the code - */ - public function getAuthCode() - { - return $this->authCode; - } - - /** - * Set the authentication code - * - * @param string $code: the code - * @return void - */ - protected function setAuthCode($code) - { - $this->authCode = $code; - } - - /** - * Set the command - * - * @return void - */ - protected function setCmd() - { - $this->cmd = (isset($this->conf['defaultCODE']) && !empty($this->conf['defaultCODE'])) ? $this->conf['defaultCODE'] : ''; - // flexform overrides TS config - $this->pibaseObj->pi_initPIflexForm(); - $cmd = $this->pibaseObj->pi_getFFvalue($this->pibaseObj->cObj->data['pi_flexform'], 'display_mode', 'sDEF'); - if (!empty($cmd)) { - $this->cmd = $cmd; - } - // Query variable &cmd used by Direct Mail overrides flexform - $cmd = htmlspecialchars(GeneralUtility::_GP('cmd')); - if (!empty($cmd)) { - $this->cmd = $cmd; - } - // Query variable &prefixId[cmd] (possibly from regHash) overrides query variable &cmd, if not empty - $cmd = $this->getFeUserData('cmd'); - if (!empty($cmd)) { - $this->cmd = $cmd; - } - $this->cmd = strtolower($this->cmd); - } - - /** - * Get the cmd - * - * @return string the command - */ - public function getCmd() - { - return $this->cmd; - } - - /** - * Validate the token - * - * @return void - */ - protected function validateToken() { - $feUserData = $this->getFeUserData(); - // Get the data for the uid provided in query parameters - $theUid = MathUtility::canBeInterpretedAsInteger($feUserData['rU'] ?? 0) ? (int)($feUserData['rU'] ?? 0) : 0; - if ($theUid > 0) { - $origArray = $GLOBALS['TSFE']->sys_page->getRawRecord($this->theTable, $theUid); - } - // Get the token - $token = ''; - if ($this->getCmd() !== 'setfixed') { - // Get latest token from session data - $token = SessionData::readToken($this->extensionKey); - } else if ( - isset($origArray) - && is_array($origArray) - && isset($origArray['token']) - && !empty($origArray['token']) - ) { - // Use the token from the FE user data - $token = $origArray['token']; - } - // Validate the token - if ( - empty($feUserData) - || empty($token) - || (isset($feUserData['token']) && $feUserData['token'] === $token) - ) { - $this->setTokenValid(true); - } else if ($theUid > 0) { - // When processing a setfixed link from other extensions, - // there might no token and no short url regHash, but there might be an authCode - if ( - !empty($this->regHash) - || !($this->conf['useShortUrls'] ?? false) - || $this->getAuthCode() - ) { - if (empty($this->setFixedVars)) { - $this->setFixedVars = GeneralUtility::_GP('fD', 1); - } - if (isset($this->setFixedVars) && is_array($this->setFixedVars) && isset($origArray) && is_array($origArray)) { - // Calculate the setfixed hash from incoming data - $fieldList = rawurldecode($this->setFixedVars['_FIELDLIST'] ?? ''); - $setFixedArray = array_merge($origArray, $this->setFixedVars); - $codeLength = strlen($this->getAuthCode()); - $sFK = $this->getFeUserData('sFK'); - // Let's try with a code length of 8 in case this link is coming from direct mail - if ($codeLength === 8 && in_array($sFK, ['DELETE', 'EDIT', 'UNSUBSCRIBE'])) { - $authCode = Authentication::setfixedHash($setFixedArray, $this->conf, $fieldList, $codeLength); - } else { - $authCode = Authentication::setfixedHash($setFixedArray, $this->conf, $fieldList); - } - if (!strcmp($this->getAuthCode(), $authCode)) { - // We use the valid authCode in place of token - $this->setFeUserDataValue('token', $authCode); - $this->setTokenValid(true); - } - } else { - // aC parameter from URL does not match the hash calculated from the given user record data - if ($token === '' && (!isset($this->setFixedVars) || !is_array($this->setFixedVars))) { - $message = 'The submitted authcode does not match the one from the given user record, perhaps due to missing fD[_FIELDLIST] parameter.'; - $this->logger->error(GeneralUtility::underscoredToUpperCamelCase($this->extensionKey) . ': ' . $message); - } - } - } - } - } - - /** - * Get whether the token was found valid - * - * @return boolean whether the token was found valid - */ - public function isTokenValid() - { - return $this->isTokenValid; - } - - /** - * Set whether the token was found valid - * - * @return boolean $valid: whether the token was found valid - * @return void - */ - protected function setTokenValid($valid) - { - $this->isTokenValid = $valid; - } - - public function getCmdKey() - { - return $this->cmdKey; - } - - public function setCmdKey($cmdKey) - { - $this->cmdKey = $cmdKey; - } - - public function setSubmit($bSubmit) - { - $this->bSubmit = $bSubmit; - } - - public function getSubmit() - { - return $this->bSubmit; - } - - public function setDoNotSave($bParam) - { - $this->bDoNotSave = $bParam; - } - - public function getDoNotSave() - { - return $this->bDoNotSave; - } - - public function getBackURL() - { - $rc = rawurldecode($this->getFeUserData('backURL')); - return $rc; - } - - /** - * Checks whether preview display is on. - * - * @return bool true, if preview display is on - */ - public function isPreview() - { - $cmdKey = $this->getCmdKey(); - return ($this->conf[$cmdKey . '.']['preview'] ?? false) && $this->getFeUserData('preview'); - } - - /** - * Get whether setfixed is enabled - * - * @return bool true, if setfixed is enabled - */ - public function getSetfixedEnabled() - { - return ( - ($this->conf['enableEmailConfirmation'] ?? false) - || ($this->theTable === 'fe_users' && ($this->conf['enableAdminReview'] ?? false)) - || ($this->conf['setfixed'] ?? false) - || (($this->conf['infomail'] ?? false) && ($this->getCmd() === 'setfixed' || $this->getCmd() === 'infomail')) - ); - } - - /** - * Writes input value to $_GET. - * - * @param mixed $inputGet - * @param string $key - * @see TYPO3 v9 LTS TYPO3\CMS\Core\Utility\GeneralUtility. - */ - protected function GETset($inputGet, $key = '') - { - if ($key != '') { - if (strpos($key, '|') !== false) { - $pieces = explode('|', $key); - $newGet = []; - $pointer = &$newGet; - foreach ($pieces as $piece) { - $pointer = &$pointer[$piece]; - } - $pointer = $inputGet; - $mergedGet = $_GET; - ArrayUtility::mergeRecursiveWithOverrule($mergedGet, $newGet); - $_GET = $mergedGet; - $GLOBALS['HTTP_GET_VARS'] = $mergedGet; - } else { - $_GET[$key] = $inputGet; - $GLOBALS['HTTP_GET_VARS'][$key] = $inputGet; - } - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Security/Authentication.php b/typo3conf/ext/sr_feuser_register/Classes/Security/Authentication.php deleted file mode 100644 index 9c4b564..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Security/Authentication.php +++ /dev/null @@ -1,146 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Security; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Authentication functions - */ -class Authentication -{ - /** - * Computes the authentication code - * a variant of GeneralUtility::stdAuthCode with added extras - * - * @param arra $record Record - * @param array $conf: the plugin configuration - * @param string $fields List of fields from the record to include in the computation, if that is given. - * @param string $extra: some extra non-standard mixture - * @param boolean $rawUrlDecode: whether to rawurldecode the record values - * @param integer $codeLength: the length of the code, if different than configured - * @return string MD5 hash (default length of 8 for compatibility with Direct Mail) - */ - static public function authCode(array $record, array $conf, $fields = '', $extra = '', $rawUrlDecode = false, $codeLength = 0) - { - if (!$codeLength) { - $codeLength = 8; - if ($conf['authcodeFields.']['codeLength'] ?? false) { - $codeLength = (int)$conf['authcodeFields.']['codeLength']; - } - } - $recordCopy = []; - if ($fields) { - $fieldArray = GeneralUtility::trimExplode(',', $fields, 1); - foreach ($fieldArray as $key => $value) { - if (isset($record[$value])) { - if (is_array($record[$value])) { - $recordCopy[$key] = implode(',', $record[$value]); - } else { - $recordCopy[$key] = $record[$value]; - } - if ($rawUrlDecode) { - $recordCopy[$key] = rawurldecode($recordCopy[$key]); - } - } - } - } else { - foreach ($record as $key => $value) { - if (is_array($value)) { - $value = implode(',', $value); - } - $recordCopy[$key] = $value; - } - } - $preKey = implode('|', $recordCopy); - // Additional key may be used for additional security and/or - // to isolate multiple sr_feuser_register configurations on the same installation - // This makes the authCode incompatible with TYPO3 standard authCode - // See GeneralUtility::stdAuthCode (removed in TYPO3 12) - $extraArray = []; - if (!empty($extra)) { - $extraArray[] = $extra; - } - if (isset($conf['authcodeFields.']) && is_array($conf['authcodeFields.'])) { - // Non-standard addKey field - if (!empty($conf['authcodeFields.']['addKey'] ?? '')) { - $extraArray[] = $conf['authcodeFields.']['addKey']; - } - // Non-standard addDate field - if (!empty($conf['authcodeFields.']['addDate'] ?? '')) { - $extraArray[] = date($conf['authcodeFields.']['addDate']); - } - } - $extras = !empty($extraArray) ? implode('|', $extraArray) : ''; - // In GeneralUtility::stdAuthCode, $extras is empty - $authCode = $preKey . '|' . $extras . '|' . ($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] ?? ''); - $authCode = substr(md5($authCode), 0, $codeLength); - return $authCode; - } - - /** - * Authenticates a record - * - * @param string $authCode: the authCode to validate - * @param array $record: the record - * @param array $conf: the plugin configuration - * @param string $fields List of fields from the record to include in the computation, if that is given. - * @return boolean true, if the record is authenticated - */ - static public function aCAuth($authCode, array $record, array $conf, $fields = '') - { - $result = false; - if (!empty($authCode)) { - $recordAuthCode = self::authCode($record, $conf, $fields); - if (!strcmp($authCode, $recordAuthCode)) { - $result = true; - } - } - return $result; - } - - /** - * Computes the setfixed hash where record values need to be rawurldecoded - * - * @param array $record: Record - * @param array $conf: the plugin configuration - * @param string $fields: List of fields from the record to include in the computation, if that is given - * @param integer $codeLength: The length of the code, if different than configured - * @return string the hash value - */ - static public function setfixedHash(array $record, array $conf, $fields = '', $codeLength = 0) - { - return self::authCode($record, $conf, $fields, '', true, $codeLength); - } - - /** - * Generates a token for the form to secure agains Cross Site Request Forgery (CSRF) - * - * @param void - * @return string the token value - */ - static public function generateToken() - { - return md5(time() . getmypid() . ($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] ?? '')); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Security/SecuredData.php b/typo3conf/ext/sr_feuser_register/Classes/Security/SecuredData.php deleted file mode 100644 index 980594a..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Security/SecuredData.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Security; - -/* - * Copyright notice - * - * (c) 2015-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Secured data handling - */ -class SecuredData -{ - /** - * Names of secured fields - * - * @var array - */ - protected static $securedFields = ['password', 'password_again', 'tx_srfeuserregister_password']; - - /** - * Gets the array of names of secured fields - * - * @return array names of secured fields - */ - public static function getSecuredFields() - { - return self::$securedFields; - } - - /** - * Reduces the list of fields to the fields that are allowed to be shown - * - * @param array $fields: initial list of field names - * @return array new list of field names - */ - public static function getOpenFields($fields) - { - $securedFieldArray = self::getSecuredFields(); - $fieldArray = array_unique(GeneralUtility::trimExplode(',', $fields)); - foreach ($securedFieldArray as $securedField) { - $k = array_search($securedField, $fieldArray); - if ($k !== false && isset($fieldArray[$k])) { - unset($fieldArray[$k]); - } - } - return implode(',', $fieldArray); - } - - /** - * Changes potential malicious script code of the input to harmless HTML - * - * @param array $dataArray: array of key/value pairs - * @param bool $htmlSpecial: whether to apply htmlspecialchars to the values - * @return void - */ - public static function secureInput(array &$dataArray, $htmlSpecial = true) - { - foreach ($dataArray as $key => $value) { - if (is_array($value)) { - foreach ($value as $key2 => $value2) { - if (is_array($value2)) { - foreach ($value2 as $key3 => $value3) { - $dataArray[$key][$key2][$key3] = self::getSecuredValue($key3, $value3, $htmlSpecial); - } - } else { - $dataArray[$key][$key2] = self::getSecuredValue($key2, $value2, $htmlSpecial); - } - } - } else { - $dataArray[$key] = self::getSecuredValue($key, $value, $htmlSpecial); - } - } - } - - /** - * Changes potential malicious script code of the input to harmless HTML - * - * @param string $field: name of field to secure - * @param string $value: input value - * @param bool $htmlSpecial: whether to apply htmlspecialchars to the value - * @return string secured value - */ - public static function getSecuredValue($field, $value, $htmlSpecial = true) - { - $securedValue = $value; - if (!in_array($field, self::$securedFields)) { - $securedValue = htmlspecialchars_decode($value); - if ($htmlSpecial) { - $securedValue = htmlspecialchars($securedValue); - } - } - return $securedValue; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Security/SessionData.php b/typo3conf/ext/sr_feuser_register/Classes/Security/SessionData.php deleted file mode 100644 index c57ccfb..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Security/SessionData.php +++ /dev/null @@ -1,255 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Security; - -/* - * Copyright notice - * - * (c) 2015-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Security\StorageSecurity; -use TYPO3\CMS\Core\Utility\ArrayUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Frontend user session data handling - */ -class SessionData -{ - /** - * Retrieves session data - * - * @param string $extensionKey: the extension key - * @param boolean $readAll: whether to retrieve all session data or only data for this extension key - * @return array session data - */ - protected static function readSessionData($extensionKey, $readAll = false) - { - $sessionData = []; - $allSessionData = static::getTypoScriptFrontendController()->fe_user->getKey('ses', 'feuser'); - if (isset($allSessionData) && is_array($allSessionData)) { - if ($readAll) { - $sessionData = $allSessionData; - } else if (isset($allSessionData[$extensionKey])) { - $sessionData = $allSessionData[$extensionKey]; - } - } - return $sessionData; - } - - /** - * Writes data to FE user session data - * - * @param string $extensionKey: the extension key - * @param array $data: the data to be written to FE user session data - * @param boolean $keepToken: whether to keep any token - * @param boolean $keepRedirectUrl: whether to keep any redirectUrl - * @return array session data - */ - protected static function writeSessionData($extensionKey, array $data, $keepToken = true, $keepRedirectUrl = true) - { - $clearSession = empty($data); - if ($keepToken && !isset($data['token'])) { - $token = self::readToken($extensionKey); - if ($token != '') { - $data['token'] = $token; - } - } - if ($keepRedirectUrl && !isset($data['redirect_url'])) { - $redirect_url = self::readRedirectUrl($extensionKey); - if ($redirect_url != '') { - $data['redirect_url'] = $redirect_url; - } - } - // Read all session data - $allSessionData = self::readSessionData($extensionKey, true); - if (isset($allSessionData[$extensionKey]) && is_array($allSessionData[$extensionKey])) { - $keys = array_keys($allSessionData[$extensionKey]); - if ($clearSession) { - foreach ($keys as $key) { - unset($allSessionData[$extensionKey][$key]); - } - } - } else { - $allSessionData[$extensionKey] = []; - } - ArrayUtility::mergeRecursiveWithOverrule($allSessionData[$extensionKey], $data); - static::getTypoScriptFrontendController()->fe_user->setKey('ses', 'feuser', $allSessionData); - // The feuser session data shall not get lost when coming back from external scripts - static::getTypoScriptFrontendController()->fe_user->storeSessionData($extensionKey); - } - - /** - * Deletes all session data except the token and possibly the redirectUrl - * - * @param string $extensionKey: the extension key - * @param boolean $keepRedirectUrl: whether to keep any redirectUrl - * @return void - */ - public static function clearSessionData($extensionKey, $keepRedirectUrl = true) - { - $data = []; - $keepToken = true; - self::writeSessionData($extensionKey, $data, $keepToken, $keepRedirectUrl); - } - - /** - * Retrieves the token from FE user session data - * - * @param string $extensionKey: the extension key - * @return string token - */ - public static function readToken($extensionKey) - { - $sessionData = self::readSessionData($extensionKey); - return $sessionData['token'] ?? ''; - } - - /** - * Writes the token to FE user session data - * - * @param string $extensionKey: the extension key - * @param string token - * @return void - */ - public static function writeToken($extensionKey, $token) - { - $sessionData = self::readSessionData($extensionKey); - if ($token == '') { - $sessionData['token'] = '__UNSET'; - } else { - $sessionData['token'] = $token; - } - self::writeSessionData($extensionKey, $sessionData, false); - } - - /** - * Retrieves the redirectUrl from FE user session data - * - * @param string $extensionKey: the extension key - * @return string redirectUrl - */ - public static function readRedirectUrl($extensionKey) - { - $sessionData = self::readSessionData($extensionKey); - return $sessionData['redirect_url'] ?? ''; - } - - /** - * Writes the redirectUrl to FE user session data - * - * @param string $extensionKey: the extension key - * @return void - */ - public static function writeRedirectUrl($extensionKey) - { - $redirectUrl = GeneralUtility::_GET('redirect_url'); - if ($redirectUrl != '') { - $data = []; - $data['redirect_url'] = $redirectUrl; - self::writeSessionData($extensionKey, $data); - } - } - - /** - * Retrieves values of secured fields from FE user session data - * - * @param string $extensionKey: the extension key - * @return array secured FE user session data - */ - public static function readSecuredArray($extensionKey) - { - $securedArray = []; - $sessionData = self::readSessionData($extensionKey); - $fields = SecuredData::getSecuredFields(); - foreach ($fields as $securedField) { - if (isset($sessionData[$securedField])) { - $securedArray[$securedField] = $sessionData[$securedField]; - } - } - return $securedArray; - } - - /** - * Retrieves the password from FE user session data - * - * @param string $extensionKey: the extension key - * @return string redirectUrl - */ - public static function readPassword($extensionKey) - { - $sessionData = self::readSessionData($extensionKey); - return array( - 'password' => $sessionData['password'] ?? '', - 'password_again' => $sessionData['password_again'] ?? '' - ); - } - - /** - * Writes the password to session data - * - * @param string $extensionKey: the extension key - * @param string $password: the password - * @return void - */ - public static function writePassword($extensionKey, $password = '', $passwordAgain = '') - { - $sessionData = self::readSessionData($extensionKey); - $sessionData['password'] = empty($password) ? '__UNSET' : $password; - $sessionData['password_again'] = empty($passwordAgain) ? '__UNSET' : $passwordAgain; - self::writeSessionData($extensionKey, $sessionData); - } - - /** - * Retrieve the password from session data and encrypt it for storage - * - * @param string $extensionKey: the extension key - * @return string the encrypted password - */ - public static function readPasswordForStorage($extensionKey) - { - $password = self::readPassword($extensionKey); - $result = StorageSecurity::encryptPasswordForStorage($password['password']); - return $result; - } - - /** - * Generates a value for the password and stores it the FE user session data - * - * @param string $extensionKey: the extension key - * @param array $dataArray: incoming array - * @return void - */ - public static function generatePassword($extensionKey, array &$dataArray) - { - $generatedPassword = substr(md5(uniqid(microtime(), 1)), 0, 32); - $dataArray['password'] = $generatedPassword; - $dataArray['password_again'] = $generatedPassword; - self::writePassword($extensionKey, $generatedPassword, $generatedPassword); - } - - /** - * @return TypoScriptFrontendController - */ - protected static function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Security/StorageSecurity.php b/typo3conf/ext/sr_feuser_register/Classes/Security/StorageSecurity.php deleted file mode 100644 index 58a0617..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Security/StorageSecurity.php +++ /dev/null @@ -1,161 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Security; - -/* - * Copyright notice - * - * (c) 2012-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use Psr\Log\LoggerInterface; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Log\LogManager; -use TYPO3\CMS\Core\Crypto\PasswordHashing\PasswordHashFactory; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Storage security functions - */ -class StorageSecurity -{ - /** - * @var string Extension name - */ - static protected $extensionName = 'SrFeuserRegister'; - - /** - * Encrypts the password for secure storage - * - * @param string $password: password to encrypt - * @return string/boolean encrypted password, boolean false in case of an error - */ - static public function encryptPasswordForStorage($password) - { - $encryptedPassword = $password; - if ($password != '') { - $hashFactory = GeneralUtility::makeInstance(PasswordHashFactory::class); - $objSalt = $hashFactory->getDefaultHashInstance('FE'); - if (is_object($objSalt)) { - $encryptedPassword = $objSalt->getHashedPassword($password); - } else { - $encryptedPassword = false; - // Could not get a salting instance - // Should not happen - } - } - return $encryptedPassword; - } - - /** - * Initializes the password for auto-login on confirmation - * - * @param array $dataArray - * @return void - */ - static public function initializeAutoLoginPassword(array &$dataArray) - { - $dataArray['tx_srfeuserregister_password'] = ''; - if (isset($dataArray['auto_login_key'])) { - unset($dataArray['auto_login_key']); - } - } - - /** - * Determines if auto login should be attempted - * - * @param array $feuData: incoming fe_users parameters - * @param array $dataArray: fe_users row - * @return boolean true, if auto-login should be attempted - */ - static public function getAutoLoginIsRequested(array $feuData, array &$dataArray) - { - $autoLoginIsRequested = false; - if (isset($feuData['key']) && $feuData['key'] !== '') { - $dataArray['auto_login_key'] = $feuData['key']; - $autoLoginIsRequested = true; - } - return $autoLoginIsRequested; - } - - /** - * Encrypts the password for auto-login on confirmation - * - * @param array $dataArray: array containing the password to be encrypted - * @return void - */ - static public function encryptPasswordForAutoLogin(array &$dataArray) - { - $password = $dataArray['password']; - $privateKey = ''; - $cryptedPassword = ''; - if ($password != '') { - // Create the keypair - $keyPair = openssl_pkey_new(); - // Get private key - openssl_pkey_export($keyPair, $privateKey); - // Get public key - $keyDetails = openssl_pkey_get_details($keyPair); - $publicKey = $keyDetails['key']; - if (@openssl_public_encrypt($password, $cryptedPassword, $publicKey)) { - $dataArray['tx_srfeuserregister_password'] = base64_encode($cryptedPassword); - $dataArray['auto_login_key'] = $privateKey; - } - } - } - - /** - * Decrypts the password for auto-login on confirmation or invitation acceptation - * - * @param array $dataArray: table row containing the password to be decrypted - * @param array $row: incoming data containing the auto-login private key - * @return void - */ - static public function decryptPasswordForAutoLogin(array &$dataArray, array $row) - { - if (isset($row['auto_login_key'])) { - $privateKey = $row['auto_login_key']; - if ($privateKey !== '') { - $password = $dataArray['tx_srfeuserregister_password']; - if ($password != '') { - $password = base64_decode($dataArray['tx_srfeuserregister_password']); - if (openssl_private_decrypt($password, $decryptedPassword, $privateKey)) { - if ($decryptedPassword) { - $dataArray['password'] = $decryptedPassword; - } else { - // Failed to decrypt auto login password - $message = LocalizationUtility::translate('internal_decrypt_auto_login_failed', self::$extensionName); - static::getLogger()->error(self::$extensionName . ': ' . $message); - } - } else { - // Failed to decrypt auto login password - $message = LocalizationUtility::translate('internal_decrypt_auto_login_failed', self::$extensionName); - static::getLogger()->error(self::$extensionName . ': ' . $message); - } - } - } - } - } - - /** - * @return LoggerInterface - */ - protected static function getLogger() - { - return GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Setfixed/SetfixedUrls.php b/typo3conf/ext/sr_feuser_register/Classes/Setfixed/SetfixedUrls.php deleted file mode 100644 index 32e4d5f..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Setfixed/SetfixedUrls.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Setfixed; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Utility\HashUtility; -use SJBR\SrFeuserRegister\Utility\UrlUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; - -/** - * Compute setfixed urls - */ -class SetfixedUrls -{ - /** - * Computes the setfixed url's - * - * @param string $cmd: the current command - * @param array $record: the record row - * @return array array of key => url pairs - */ - public static function compute( - $prefixId, - $theTable, - array $conf, - array $pids, - $cmd, - array $record - ) { - $setfixedUrls = []; - if (isset($conf['setfixed.']) && is_array($conf['setfixed.'])) { - foreach ($conf['setfixed.'] as $theKey => $data) { - if (strstr($theKey, '.')) { - $theKey = substr($theKey, 0, -1); - } - $setfixedpiVars = array(); - - if ($theTable !== 'fe_users' && $theKey === 'EDIT') { - $noFeusersEdit = true; - } else { - $noFeusersEdit = false; - } - - $setfixedpiVars[$prefixId . '%5BrU%5D'] = $record['uid']; - $fieldList = $data['_FIELDLIST'] ?? ''; - $fieldListArray = GeneralUtility::trimExplode(',', $fieldList); - foreach ($fieldListArray as $fieldname) { - if (isset($data[$fieldname])) { - $record[$fieldname] = $data[$fieldname]; - } - } - - if ($noFeusersEdit) { - $theCmd = $pidCmd = 'edit'; - if ($conf['edit.']['setfixed'] ?? false) { - $addSetfixedHash = true; - } else { - $addSetfixedHash = false; - $setfixedpiVars[$prefixId . '%5BaC%5D'] = Authentication::authCode($record, $conf, $fieldList); - } - } else { - $theCmd = 'setfixed'; - $pidCmd = ($cmd === 'invite' ? 'confirmInvitation' : 'confirm'); - $setfixedpiVars[$prefixId . '%5BsFK%5D'] = $theKey; - $addSetfixedHash = true; - if (isset($record['auto_login_key'])) { - $setfixedpiVars[$prefixId . '%5Bkey%5D'] = $record['auto_login_key']; - } - } - - if ($addSetfixedHash) { - $setfixedpiVars[$prefixId . '%5BaC%5D'] = Authentication::setfixedHash($record, $conf, $fieldList); - } - $setfixedpiVars[$prefixId . '%5Bcmd%5D'] = $theCmd; - - if (is_array($data) ) { - foreach ($data as $fieldname => $fieldValue) { - if (strpos($fieldname, '.') !== false) { - continue; - } - $setfixedpiVars['fD%5B' . $fieldname . '%5D'] = rawurlencode($fieldValue); - } - } - - $linkPID = $pids[$pidCmd]; - - if (GeneralUtility::_GP('L') && !GeneralUtility::inList($GLOBALS['TSFE']->config['config']['linkVars'] ?? '', 'L')) { - $setfixedpiVars['L'] = GeneralUtility::_GP('L'); - } - - if ($conf['useShortUrls'] ?? false) { - $thisHash = HashUtility::getHashFromParameters($setfixedpiVars); - $setfixedpiVars = array($prefixId . '%5BregHash%5D' => $thisHash); - } - $urlConf = []; - $urlConf['disableGroupAccessCheck'] = true; - $confirmType = (isset($conf['confirmType']) && MathUtility::canBeInterpretedAsInteger($conf['confirmType'])) ? (int)$conf['confirmType'] : $GLOBALS['TSFE']->type; - $url = UrlUtility::getTypoLink_URL($linkPID . ',' . $confirmType, $setfixedpiVars, '', $urlConf); - $setfixedUrls[$theKey] = $url; - } - } - return $setfixedUrls; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/CssUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/CssUtility.php deleted file mode 100644 index 6f4f81a..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/CssUtility.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2015-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Css utility functions from AbstractPlugin - */ -class CssUtility -{ - /** - * Returns a class-name prefixed with $this->prefixId and with all underscores substituted to dashes (-) - * - * @param string $prefixId: the prefix - * @param string $class The class name (or the END of it since it will be prefixed by $prefixId.'-') - * @return string The combined class name (with the correct prefix) - */ - static public function getClassName($prefixId, $class) { - return str_replace('_', '-', $prefixId) . ($prefixId ? '-' : '') . $class; - } - - /** - * Returns the class-attribute with the correctly prefixed classname - * - * @param string $prefixId: the prefix - * @param string $class The class name(s) (suffix) - separate multiple classes with commas - * @param string $addClasses Additional class names which should not be prefixed - separate multiple classes with commas - * @return string A "class" attribute with value and a single space char before it. - */ - static public function classParam($prefixId, $class, $addClasses = '') { - $output = ''; - foreach (GeneralUtility::trimExplode(',', $class) as $v) { - $output .= ' ' . self::getClassName($prefixId, $v); - } - foreach (GeneralUtility::trimExplode(',', $addClasses) as $v) { - $output .= ' ' . $v; - } - return ' class="' . trim($output) . '"'; - } - - /** - * Wraps the input string in a <div> tag with the class attribute set to the prefixId. - * All content returned from your plugins should be returned through this function so all content from your plugin is encapsulated in a <div>-tag nicely identifying the content of your plugin. - * - * @param string $prefixId: the prefix - * @param string $str HTML content to wrap in the div-tags with the "main class" of the plugin - * @return string HTML content wrapped, ready to return to the parent object. - */ - static public function wrapInBaseClass($prefixId, $str) { - $content = '<div class="' . str_replace('_', '-', $prefixId) . '"> - ' . $str . ' - </div> - '; - if (!($GLOBALS['TSFE']->config['config']['disablePrefixComment'] ?? false)) { - $content = ' - - - <!-- - - BEGIN: Content of plugin "' . $prefixId . '" - - --> - ' . $content . ' - <!-- END: Content of plugin "' . $prefixId . '" --> - - '; - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/DataUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/DataUtility.php deleted file mode 100644 index 46fb881..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/DataUtility.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2018-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\Query\QueryHelper; -use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Data access utility - */ -class DataUtility -{ - /** - * Selects records based on matching a field (ei. other than UID) with a value - * - * @param string $theTable The table name to search, eg. "pages" or "tt_content - * @param string $theField The fieldname to match, eg. "uid" or "alias - * @param string $theValue The value that fieldname must match, eg. "123" or "frontpage - * @param string $whereClause Optional additional WHERE clauses put in the end of the query. DO NOT PUT IN GROUP BY, ORDER BY or LIMIT! - * @param string $groupBy Optional GROUP BY field(s). If none, supply blank string. - * @param string $orderBy Optional ORDER BY field(s). If none, supply blank string. - * @param string $limit Optional LIMIT value ([begin,]max). If none, supply blank string. - * @return mixed Returns array (the record) if found, otherwise nothing (void) - * @see since TYPO3 9 TYPO3\CMS\Frontend\Page\PageRepository - */ - public static function getRecordsByField($theTable, $theField, $theValue, $whereClause = '', $groupBy = '', $orderBy = '', $limit = '') - { - if (isset($GLOBALS['TCA'][$theTable]) && is_array($GLOBALS['TCA'][$theTable])) { - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($theTable); - $queryBuilder->getRestrictions() - ->removeAll() - ->add(GeneralUtility::makeInstance(DeletedRestriction::class)); - - $queryBuilder->select('*') - ->from($theTable) - ->where($queryBuilder->expr()->eq($theField, $queryBuilder->createNamedParameter($theValue))); - - if ($whereClause !== '') { - $queryBuilder->andWhere(QueryHelper::stripLogicalOperatorPrefix($whereClause)); - } - - if ($groupBy !== '') { - $queryBuilder->groupBy(QueryHelper::parseGroupBy($groupBy)); - } - - if ($orderBy !== '') { - foreach (QueryHelper::parseOrderBy($orderBy) as $orderPair) { - list($fieldName, $order) = $orderPair; - $queryBuilder->addOrderBy($fieldName, $order); - } - } - - if ($limit !== '') { - if (strpos($limit, ',')) { - $limitOffsetAndMax = GeneralUtility::intExplode(',', $limit); - $queryBuilder->setFirstResult((int)$limitOffsetAndMax[0]); - $queryBuilder->setMaxResults((int)$limitOffsetAndMax[1]); - } else { - $queryBuilder->setMaxResults((int)$limit); - } - } - - $rows = $queryBuilder->execute()->fetchAll(); - - if (!empty($rows)) { - return $rows; - } - } - return null; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/HashUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/HashUtility.php deleted file mode 100644 index 4d09a9d..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/HashUtility.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2015-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\Page\CacheHashCalculator; - -/** - * Hash handling for the short url feature - */ -class HashUtility -{ - /** - * Store the parameters and return a replacement hash - * - * @param array $parameterArray: the array of parameters - * @return string the value of the calculated hash - */ - public static function getHashFromParameters(array $parameterArray) - { - // Create a unique hash value - $cacheHash = GeneralUtility::makeInstance(CacheHashCalculator::class); - $hash = $cacheHash->calculateCacheHash($parameterArray); - $hash = substr($hash, 0, 20); - // and store it with a serialized version of the array in the DB - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $queryBuilder = $connectionPool->getQueryBuilderForTable('cache_md5params'); - $queryBuilder->getRestrictions()->removeAll(); - $count = $queryBuilder - ->count('md5hash') - ->from('cache_md5params') - ->where( - $queryBuilder->expr()->eq('md5hash', $queryBuilder->createNamedParameter($hash,\PDO::PARAM_STR)) - ) - ->execute() - ->fetchColumn(0); - if (!$count) { - $connectionPool - ->getConnectionForTable('cache_md5params') - ->insert( - 'cache_md5params', - [ - 'md5hash' => $hash, - 'tstamp' => time(), - 'type' => 99, - 'params' => serialize($parameterArray) - ] - ); - } - return $hash; - } - - /** - * Get the stored parameters using the hash value to access the database - * - * @param string $hash: the value of the input hash - * @return array the array of parameters - */ - public static function getParametersFromHash($hash) - { - // Get the serialised array from the DB based on the passed hash value - $variables = []; - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('cache_md5params'); - $queryBuilder->getRestrictions()->removeAll(); - $query = $queryBuilder - ->select('params') - ->from('cache_md5params') - ->where( - $queryBuilder->expr()->eq('md5hash', $queryBuilder->createNamedParameter($hash, \PDO::PARAM_STR)), - $queryBuilder->expr()->eq('type', $queryBuilder->createNamedParameter(99, \PDO::PARAM_INT)) - ) - ->execute(); - while ($row = $query->fetch()) { - $variables = unserialize($row['params']); - } - // Convert the array to one that will be properly incorporated into the GET global array - $parameterArray = []; - foreach ($variables as $key => $value) { - $value = str_replace('%2C', ',', $value); - $search = ['[%5D]', '[%5B]']; - $replace = ['\']', '\'][\'']; - $newkey = "['" . preg_replace($search, $replace, $key); - if (!preg_match('/' . preg_quote(']') . '$/', $newkey)){ - $newkey .= "']"; - } - eval("\$parameterArray" . $newkey . " = '$value';"); - } - return $parameterArray; - } - - /** - * Delete the stored hash - * - * @param string $regHash: the value of the regHash - * @return void - */ - public static function deleteHash($hash) - { - if (!empty($hash)) { - GeneralUtility::makeInstance(ConnectionPool::class) - ->getConnectionForTable('cache_md5params') - ->delete( - 'cache_md5params', - [ - 'md5hash' => $hash, - 'type' => 99 - ] - ); - } - } - - /** - * Clears obsolete hashes used for short url's - * - * @param array $conf: the plugin configuration - * @return void - */ - public static function cleanHashCache($conf) - { - $shortUrlLife = (int)($conf['shortUrlLife'] ?? 0); - $shortUrlLife = $shortUrlLife ?: 30; - $max_life = time() - (86400 * $shortUrlLife); - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('cache_md5params'); - $queryBuilder - ->delete('cache_md5params') - ->where( - $queryBuilder->expr()->eq('type', $queryBuilder->createNamedParameter(99, \PDO::PARAM_INT)), - $queryBuilder->expr()->lt('tstamp', $queryBuilder->createNamedParameter($max_life, \PDO::PARAM_INT)) - ) - ->execute(); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/HtmlUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/HtmlUtility.php deleted file mode 100644 index a393b5e..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/HtmlUtility.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2015-2017 Stanislas Rolland <typo3(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -/** - * HTML utility functions - */ - -class HtmlUtility -{ - /** - * Removes HTML comments contained in input content string - * - * @param string $content: the input content - * @param boolean $preserveSpecialComments: if set, special comments are preserved - * @return string the input content with HTML comment removed - */ - public static function removeHTMLComments($content, $preserveSpecialComments = false) - { - if ($preserveSpecialComments) { - // Preserve Outlook conditional comments: <!--[if mso]> ... <![endif]--> - $result = preg_replace('/<!(?:--[^\[][\s\S]*?--\s*)?>[\t\v\n\r\f]*/', '', $content); - } else { - $result = preg_replace('/<!(?:--[\s\S]*?--\s*)?>[\t\v\n\r\f]*/', '', $content); - } - return $result; - } - - /** - * Replaces HTML br tags with line feeds in input content string - * - * @param string $content: the input content - * @return string the input content with HTML br tags replaced - */ - public static function replaceHTMLBr($content) - { - $result = preg_replace('/<br\s?\/?>/', LF, $content); - return $result; - } - - /** - * Removes all HTML tags from input content string - * - * @param string $content: the input content - * @return string the input content with HTML tags removed - */ - public static function removeHtmlTags($content) - { - // Preserve <http://...> constructs - $result = str_replace('<http', '###http', $content); - $result = strip_tags($result); - $result = str_replace('###http', '<http', $result); - return $result; - } - - /** - * Removes superfluous line feeds from input content string - * - * @param string $content: the input content - * @return string the input content with superfluous fine feeds removed - */ - public static function removeSuperfluousLineFeeds($content) - { - $result = preg_replace('/' . preg_quote(CR . LF) . '/', LF, $content); - $result = preg_replace('/[' . preg_quote(LF) . ']{3,}/', LF . LF, $result); - return $result; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/LocalizationUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/LocalizationUtility.php deleted file mode 100644 index 40f5f84..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/LocalizationUtility.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2015-2021 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * 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\Configuration\ConfigurationManager; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; - -/** - * Translate a key from locallang. The files are loaded from the folder "Resources/Private/Language/". - */ -class LocalizationUtility -{ - /** - * @var array List of allowed suffixes - */ - static protected $allowedSuffixes = ['formal', 'informal']; - - /** - * @var string Configured suffix - */ - static protected $suffix = null; - - /** - * @var ConfigurationManager - */ - static protected $configurationManager = null; - - /** - * Returns the localized label of the LOCAL_LANG key, $key. - * - * @param string $key The key from the LOCAL_LANG array for which to return the value. - * @param string $extensionName The name of the extension - * @param array $arguments the arguments of the extension, being passed over to vsprintf - * @return string|NULL The value from LOCAL_LANG or NULL if no translation was found. - */ - static public function translate($key, $extensionName, $arguments = null) - { - $value = null; - self::initializeLocalization($extensionName); - // If the suffix is set and we have a localized string for the desired salutation, we'll take that. - if (self::$suffix) { - $expandedKey = $key . '_' . self::$suffix; - $value = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate($expandedKey, $extensionName, $arguments); - } - if ($value === null) { - $value = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate($key, $extensionName, $arguments); - } - return $value; - } - - /** - * Initializes the suffix - * - * @param string $extensionName - * @return void - */ - static protected function initializeLocalization($extensionName) - { - if (isset(self::$suffix)) { - return; - } - $configurationManager = static::getConfigurationManager(); - $settings = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, $extensionName); - if (isset($settings['salutation']) && in_array($settings['salutation'], self::$allowedSuffixes, true)) { - self::$suffix = ($settings['salutation'] === 'formal' ? '' : $settings['salutation']); - } else { - self::$suffix = ''; - } - } - - /** - * Returns instance of the configuration manager - * - * @return ConfigurationManager - */ - static protected function getConfigurationManager() - { - if (!is_null(static::$configurationManager)) { - return static::$configurationManager; - } - $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class); - static::$configurationManager = $configurationManager; - return $configurationManager; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/Utility/UrlUtility.php b/typo3conf/ext/sr_feuser_register/Classes/Utility/UrlUtility.php deleted file mode 100644 index a8078ed..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/Utility/UrlUtility.php +++ /dev/null @@ -1,153 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\Utility; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * 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\Frontend\ContentObject\ContentObjectRenderer; - -/** - * Generates a typolinks and URL's - */ -class UrlUtility -{ - /** - * Content object - * - * @var ContentObjectRenderer - */ - static protected $cObj = null; - - /** - * Generates a pibase-compliant typolink - * - * @param string $prefixId: prefix id of variables - * @param string $tag: string to include within <a>-tags; if empty, only the url is returned - * @param string $id: page id (could of the form id,type ) - * @param array $vars: extension variables to add to the url ($key, $value) - * @param array $unsetVars: extension variables (piVars to unset) - * @param boolean $usePiVars: if set, input vars and incoming piVars arrays are merge - * @return string generated link or url - */ - static public function get($prefixId, $tag = '', $id, array $vars = [], $unsetVars = [], $usePiVars = true) - { - self::initializeUrlUtility(); - $vars = (array)$vars; - $unsetVars = (array)$unsetVars; - if ($usePiVars) { - // vars override pivars - $piVars = GeneralUtility::_GPmerged($prefixId); - if (isset($piVars) && is_array($piVars)) { - $vars = array_merge($piVars, $vars); - foreach ($unsetVars as $key) { - if (isset($vars[$key])) { - // unsetVars override anything - unset($vars[$key]); - } - } - } - } - $piVars = []; - foreach ($vars as $key => $val) { - $piVars[$prefixId . '[' . $key . ']'] = $val; - } - $url = $tag ? self::$cObj->getTypoLink($tag, $id, $piVars) : self::$cObj->getTypoLink_URL($id, $piVars); - return $url; - } - - /** - * Returns the URL of a "typolink" create from the input parameter string, url-parameters and target - * - * @param string Link parameter; eg. "123" for page id, "kasperYYYY@typo3.com" for email address, "http://...." for URL, "fileadmin/blabla.txt" for file. - * @param array An array with key/value pairs representing URL parameters to set. Values NOT URL-encoded yet. - * @param string Specific target set, if any. (Default is using the current) - * @param array Configuration - * @return string The URL - */ - static public function getTypoLink_URL($params, array $urlParameters = [], $target = '', $conf = []) - { - self::initializeUrlUtility(); - $conf['returnLast'] = 'url'; - return self::getTypoLink('', $params, $urlParameters, $target, $conf); - } - - /** - * Returns a linked string made from typoLink parameters. - * - * This function takes $label as a string, wraps it in a link-tag based on the $params string, which should contain data like that you would normally pass to the popular <LINK>-tag in the TSFE. - * Optionally you can supply $urlParameters which is an array with key/value pairs that are rawurlencoded and appended to the resulting url. - * - * @param string Text string being wrapped by the link. - * @param string Link parameter; eg. "123" for page id, "kasperYYYY@typo3.com" for email address, "http://...." for URL, "fileadmin/blabla.txt" for file. - * @param array An array with key/value pairs representing URL parameters to set. Values NOT URL-encoded yet. - * @param string Specific target set, if any. (Default is using the current) - * @param array Configuration - * @return string The wrapped $label-text string - */ - static public function getTypoLink($label, $params, array $urlParameters = [], $target = '', $conf = []) - { - $conf['parameter'] = $params; - if ($target) { - if (!isset($conf['target'])) { - $conf['target'] = $target; - } - if (!isset($conf['extTarget'])) { - $conf['extTarget'] = $target; - } - } - if (!empty($urlParameters)) { - $conf['additionalParams'] = ($conf['additionalParams'] ?? '') . GeneralUtility::implodeArrayForUrl('', $urlParameters); - } - return self::$cObj->typolink($label, $conf); - } - - /** - * Initializes variables - * - * @return void - */ - static protected function initializeUrlUtility() - { - if (self::$cObj === null) { - self::$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); - } - } - - /** - * Get the site URL - * - * @return string the site URL - */ - static public function getSiteUrl() - { - $normalizedParams = $GLOBALS['TYPO3_REQUEST']->getAttribute('normalizedParams'); - $siteUrl = $normalizedParams->getSiteUrl(); - if ($GLOBALS['TSFE']->absRefPrefix) { - if(strpos($GLOBALS['TSFE']->absRefPrefix, 'http://') === 0 || strpos($GLOBALS['TSFE']->absRefPrefix, 'https://') === 0) { - $siteUrl = $GLOBALS['TSFE']->absRefPrefix; - } else { - $siteUrl .= ltrim($GLOBALS['TSFE']->absRefPrefix, '/'); - } - } - return $siteUrl; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/AbstractView.php b/typo3conf/ext/sr_feuser_register/Classes/View/AbstractView.php deleted file mode 100644 index fa5e9a3..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/AbstractView.php +++ /dev/null @@ -1,189 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Domain\Data; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\View\Marker; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\PathUtility; - -/** - * Display functions - */ - -abstract class AbstractView -{ - /** - * Display mode constants - */ - const MODE_NORMAL = 0; - const MODE_PREVIEW = 1; - - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Extension name - * - * @var string Extension name - */ - protected $extensionName; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table in used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * The data object - * - * @var Data - */ - protected $data; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The marker object - * - * @var Marker - */ - protected $marker; - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param Data $data: the data object - * @param Parameters $parameters: the request parameters object - * @param Marker $marker: the marker object - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array $conf, - Data $data, - Parameters $parameters, - Marker $marker - ) { - $this->extensionKey = $extensionKey; - $this->extensionName = GeneralUtility::underscoredToUpperCamelCase($extensionKey); - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf = $conf; - $this->data = $data; - $this->parameters = $parameters; - $this->marker = $marker; - } - - /** - * Returns a JavaScript <script> section with some function calls to JavaScript functions from "typo3/js/jsfunc.updateform.js" (which is also included by setting a reference in $GLOBALS['TSFE']->additionalHeaderData['JSincludeFormupdate']) - * The JavaScript codes simply transfers content into form fields of a form which is probably used for editing information by frontend users. Used by fe_adminLib.inc. - * - * @param array $dataArray Data array which values to load into the form fields from $formName (only field names found in $fieldList) - * @param string $formName The form name - * @param string $arrPrefix A prefix for the data array - * @param string $fieldList The list of fields which are loaded - * @return string - */ - protected function getUpdateJS($dataArray, $formName, $arrPrefix, $fieldList) { - $JSPart = ''; - $updateValues = GeneralUtility::trimExplode(',', $fieldList); - foreach ($updateValues as $fKey) { - if ( - !isset($GLOBALS['TCA'][$this->theTable]['columns'][$fKey]['config']['type']) - || $GLOBALS['TCA'][$this->theTable]['columns'][$fKey]['config']['type'] !== 'inline' - ) { - $value = $dataArray[$fKey] ?? ''; - if (is_array($value)) { - foreach ($value as $Nvalue) { - $JSPart .= ' - updateForm(\'' . $formName . '\',\'' . $arrPrefix . '[' . $fKey . '][]\',' . GeneralUtility::quoteJSvalue($Nvalue, true) . ');'; - } - } else { - $JSPart .= ' - updateForm(\'' . $formName . '\',\'' . $arrPrefix . '[' . $fKey . ']\',' . GeneralUtility::quoteJSvalue($value, true) . ');'; - } - } - } - $JSPart = '<script type="text/javascript"> - /*<![CDATA[*/ ' . $JSPart . ' - /*]]>*/ -</script> -'; - $GLOBALS['TSFE']->additionalHeaderData['JSincludeFormupdate'] = '<script type="text/javascript" src="' . GeneralUtility::createVersionNumberedFilename(PathUtility::stripPathSitePrefix(ExtensionManagementUtility::extPath('sr_feuser_register')) . 'Resources/Public/JavaScript/jsfunc.updateform.js') . '"></script>'; - return $JSPart; - } - - /** - * Get the use of the password field - * - * @return boolean whether password field is used - */ - protected function getUsePassword() - { - return $this->theTable === 'fe_users' && isset($this->conf['create.']['evalValues.']['password']); - } - - /** - * Get the use of the password again field - * - * @return boolean whether password again field is used - */ - protected function getUsePasswordAgain() - { - return $this->getUsePassword() && GeneralUtility::inList($this->conf['create.']['evalValues.']['password'] ?? '', 'twice'); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/AfterSaveView.php b/typo3conf/ext/sr_feuser_register/Classes/View/AfterSaveView.php deleted file mode 100644 index 42cb8dc..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/AfterSaveView.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2020 Stanislas Rolland <typo32020(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * After saving view - */ - -class AfterSaveView extends AbstractView -{ - /** - * Displaying the page here that says, the record has been saved. - * You're able to include the saved values by markers. - * - * @param string $subpartMarker: the template subpart marker - * @param array $row: the data array, if any - * @param string $failure: list of field with errors - * @return string the template with substituted parts and markers - */ - public function render(array $dataArray, array $origArray, array $securedArray, $cmd, $cmdKey, $key) { - $errorContent = ''; - // Display confirmation message - $subpartMarker = '###TEMPLATE_' . $key . '###'; - $templateCode = $this->marker->getSubpart($this->marker->getTemplateCode(), '###TEMPLATE_' . $key . '###'); - if (empty($templateCode)) { - $errorText = LocalizationUtility::translate('internal_no_subtemplate', $this->extensionName); - $errorText = sprintf($errorText, $subpartMarker); - throw new Exception($errorText, Exception::MISSING_SUBPART); - } else { - $viewOnly = true; - // Remove non-included fields - $requiredFields = $this->data->getRequiredFieldsArray($cmdKey); - $templateCode = $this->marker->removeRequired($templateCode, $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $this->marker->fillInMarkerArray($dataArray, $securedArray, '', true, 'FIELD_', true); - $this->marker->addStaticInfoMarkers($dataArray, $viewOnly); - $this->marker->addTcaMarkers($dataArray, $origArray, $cmd, $cmdKey, $viewOnly, $requiredFields); - $this->marker->addLabelMarkers($dataArray, $origArray, $securedArray, array(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList()); - $templateCode = $this->marker->removeStaticInfoSubparts($templateCode, $viewOnly); - $uppercase = false; - $deleteUnusedMarkers = true; - $content = $this->marker->substituteMarkerArray($templateCode, $this->marker->getMarkerArray(), '', $uppercase, $deleteUnusedMarkers); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/CreateView.php b/typo3conf/ext/sr_feuser_register/Classes/View/CreateView.php deleted file mode 100644 index 194b881..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/CreateView.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\SrFeuserRegister\View\Marker; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Create View - */ -class CreateView extends AbstractView -{ - /** - * Generate a record creation form or a first link display to create or edit someone's data - * - * @return string the template with substituted markers - */ - public function render(array $dataArray, array $origArray, array $securedArray, $cmd, $cmdKey, $mode) { - $content = ''; - - $currentArray = $origArray; - if (isset($dataArray) && is_array($dataArray)) { - foreach ($dataArray as $key => $value) { - if (!is_array($value) || $mode === self::MODE_PREVIEW || $this->parameters->getFeUserData('doNotSave')) { - $currentArray[$key] = $value; - } - } - } - - if ($this->theTable === 'fe_users') { - if ($this->getUsePassword() && !isset($currentArray['password'])) { - $currentArray['password'] = ''; - } - if ($this->getUsePasswordAgain()) { - $currentArray['password_again'] = $currentArray['password']; - } - } - - if ($this->conf['create'] ?? false) { - // Call all beforeConfirmCreate hooks before the record has been shown and confirmed - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - if ( - isset($extensionConfiguration[$this->prefixId]['registrationProcess']) - && is_array($extensionConfiguration[$this->prefixId]['registrationProcess']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['registrationProcess'] as $classRef) { - $hookObj= GeneralUtility::makeInstance($classRef); - if (method_exists($hookObj,'registrationProcess_beforeConfirmCreate')) { - $hookObj->registrationProcess_beforeConfirmCreate($this->theTable, $dataArray, $this->parameters, $cmdKey, $this->conf); - } - } - } - $currentArray = array_merge($currentArray, $dataArray); - $key = ($cmd === 'invite') ? 'INVITE': 'CREATE'; - $bNeedUpdateJS = true; - if ($cmd === 'create' || $cmd === 'invite') { - $subpartMarker = '###TEMPLATE_' . $key . ($mode ? Marker::PREVIEW_SUFFIX : '') . '###'; - } else { - $bNeedUpdateJS = false; - if (GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('frontend.user', 'isLoggedIn')) { - $subpartMarker = '###TEMPLATE_CREATE_LOGIN###'; - } else { - $subpartMarker = '###TEMPLATE_AUTH###'; - } - } - $templateCode = $this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker); - if (empty($templateCode)) { - $errorText = LocalizationUtility::translate('internal_no_subtemplate', $this->extensionName); - $errorText = sprintf($errorText, $subpartMarker); - throw new \Exception($errorText, Exception::MISSING_SUBPART); - } - $isPreview = ($mode === self::MODE_PREVIEW); - $requiredFileds = $this->data->getRequiredFieldsArray($cmdKey); - $infoFields = $this->data->getFieldList(); - $templateCode = $this->marker->removeRequired($templateCode, $this->data->getFailure(), $requiredFileds, $infoFields, $this->data->getSpecialFieldList(), $cmdKey, $isPreview); - $this->marker->fillInMarkerArray($currentArray, $securedArray, '', true, 'FIELD_', true, $isPreview); - $this->marker->addStaticInfoMarkers($dataArray, $isPreview); - $this->marker->addTcaMarkers($dataArray, $origArray, $cmd, $cmdKey, $isPreview, $requiredFileds); - $this->marker->addAdditionalMarkers($infoFields, $cmd, $cmdKey, $currentArray, $isPreview); - $this->marker->addLabelMarkers($dataArray, $origArray, $securedArray, array(), $requiredFileds, $infoFields, $this->data->getSpecialFieldList()); - $templateCode = $this->marker->removeStaticInfoSubparts($templateCode, $isPreview); - $this->marker->addGeneralHiddenFieldsMarkers($cmd, $this->parameters->getAuthCode(), $this->parameters->getBackURL()); - $this->marker->addHiddenFieldsMarkers($cmdKey, $mode, $this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? '', $this->conf[$cmdKey . '.']['fields'] ?? '', $dataArray); - $this->marker->removePasswordMarkers(); - $deleteUnusedMarkers = true; - $content .= $this->marker->substituteMarkerArray($templateCode, $this->marker->getMarkerArray(), '', false, $deleteUnusedMarkers); - if (!$isPreview && $bNeedUpdateJS) { - $fields = $infoFields . ',' . $this->data->getAdditionalUpdateFields(); - $fields = implode(',', array_intersect(explode(',', $fields), GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', 1))); - $fields = SecuredData::getOpenFields($fields); - $modData = $this->data->modifyDataArrForFormUpdate($dataArray, $cmdKey); - $form = (isset($this->conf['formName']) && $this->conf['formName']) ? $this->conf['formName'] : CssUtility::getClassName($this->prefixId, $this->theTable . '_form'); - $updateJS = $this->getUpdateJS($modData, $form, 'FE[' . $this->theTable . ']', $fields); - $content .= $updateJS; - } - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/DeleteView.php b/typo3conf/ext/sr_feuser_register/Classes/View/DeleteView.php deleted file mode 100644 index eac9567..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/DeleteView.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Utility\UrlUtility; -use SJBR\SrFeuserRegister\View\PlainView; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Delete view rendering - */ - -class DeleteView extends PlainView -{ - /** - * This is the display of delete - * - * @return string the template with substituted markers - */ - public function render($subpartMarker, array $dataArray, array $origArray, array $securedArray, $cmd, $cmdKey) - { - $aCAuth = Authentication::aCAuth($this->parameters->getAuthCode(), $origArray, $this->conf, $this->conf['setfixed.']['DELETE.']['_FIELDLIST'] ?? ''); - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); - if (($this->theTable === 'fe_users' && $userAspect->get('isLoggedIn')) || $aCAuth) { - // Must be logged in OR be authenticated by the aC code in order to delete - $bMayEdit = $this->data->DBmayFEUserEdit($this->theTable, $origArray, ['uid' => $userAspect->get('id'), 'usergroup' => $userAspect->get('groupIds')], $this->conf['allowedGroups'] ?? '', $this->conf['fe_userEditSelf'] ?? ''); - if ($aCAuth || $bMayEdit) { - // Display the form, if access granted. - $backUrl = $this->parameters->getBackURL() ?: UrlUtility::getTypoLink_URL($this->parameters->getPid('login') . ',' . $GLOBALS['TSFE']->type); - $this->marker->addBackUrlMarker($backUrl); - $this->marker->addEditFormHiddenFieldsMarkers($origArray['uid'], $this->parameters->getAuthCode(), 'delete', $origArray['pid']); - $this->marker->addHiddenFieldsMarkers('edit', self::MODE_PREVIEW, $this->conf['edit.']['useEmailAsUsername'] ?? '', $this->conf['edit.']['fields'] ?? '', $origArray); - $content = parent::render('###TEMPLATE_DELETE_PREVIEW###', $origArray, $origArray, $securedArray, $cmd, $cmdKey); - } else { - // Else display error, that you could not edit that particular record... - $content = parent::render('###TEMPLATE_NO_PERMISSIONS###', [], $origArray, $securedArray, $cmd, $cmdKey); - } - } else { - // Finally this is if there is no login user. This must tell that you must login. Perhaps link to a page with create-user or login information. - if ($this->theTable === 'fe_users' ) { - $content = parent::render('###TEMPLATE_AUTH###', [], $origArray, $securedArray, $cmd, $cmdKey); - } else { - $content = parent::render('###TEMPLATE_NO_PERMISSIONS###', [], $origArray, $securedArray, $cmd, $cmdKey); - } - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/EditView.php b/typo3conf/ext/sr_feuser_register/Classes/View/EditView.php deleted file mode 100644 index 2c7db27..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/EditView.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Edit view - */ - -class EditView extends AbstractView -{ - /** - * Displays the record update form - * - * @param array $origArray: the array coming from the database - * @return string the template with substituted markers - */ - public function render(array $dataArray, array $origArray, array $securedArray, $cmd, $cmdKey, $mode) { - $content = ''; - $currentArray = $origArray; - if (isset($dataArray) && is_array($dataArray)) { - foreach ($dataArray as $key => $value) { - if (!is_array($value) || $mode === self::MODE_PREVIEW || $this->parameters->getFeUserData('doNotSave')) { - $currentArray[$key] = $value; - } - } - } - if ($cmdKey === 'password') { - $subpartMarker = '###TEMPLATE_SETFIXED_OK_APPROVE_INVITE###'; - } else { - $subpartMarker = '###TEMPLATE_EDIT' . ($mode ? Marker::PREVIEW_SUFFIX : '') . '###'; - } - $templateCode = $this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker); - if (empty($templateCode)) { - $errorText = LocalizationUtility::translate('internal_no_subtemplate', $this->extensionName); - $errorText = sprintf($errorText, $subpartMarker); - throw new Exception($errorText, Exception::MISSING_SUBPART); - } - $isPreview = ($mode === self::MODE_PREVIEW); - if ( - !($this->conf['linkToPID'] ?? false) - || !($this->conf['linkToPIDAddButton'] ?? false) - || !$isPreview - ) { - $templateCode = $this->marker->substituteSubpart($templateCode, '###SUB_LINKTOPID_ADD_BUTTON###', ''); - } - if (!($this->conf['delete'] ?? false)) { - $templateCode = $this->marker->substituteSubpart($templateCode, '###SUB_LINK_TO_DELETE###', ''); - } - $infoFields = $this->data->getFieldList(); - $requiredFields = $this->data->getRequiredFieldsArray($cmdKey); - $templateCode = $this->marker->removeRequired($templateCode, $this->data->getFailure(), $requiredFields, $infoFields, $this->data->getSpecialFieldList(), $cmdKey, $isPreview); - $this->marker->fillInMarkerArray($currentArray, $securedArray, '', true, 'FIELD_', true, $isPreview); - if ($cmdKey !== 'password') { - $this->marker->addStaticInfoMarkers($currentArray, $isPreview); - } - $this->marker->addTcaMarkers($currentArray, $origArray, $cmd, $cmdKey, $isPreview, $requiredFields); - $this->marker->addLabelMarkers($currentArray, $origArray, $securedArray, array(), $requiredFields, $infoFields, $this->data->getSpecialFieldList()); - if ($cmdKey !== 'password') { - $this->marker->addAdditionalMarkers($infoFields, $cmd, $cmdKey, $currentArray, $isPreview); - } - $templateCode = $this->marker->removeStaticInfoSubparts($templateCode, $isPreview); - $this->marker->addEditFormHiddenFieldsMarkers($currentArray['uid'], Authentication::authCode($origArray, $this->conf, $this->conf['setfixed.']['EDIT.']['_FIELDLIST'] ?? ''), $cmd); - $this->marker->addHiddenFieldsMarkers($cmdKey, $mode, $this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? '', $this->conf[$cmdKey . '.']['fields'] ?? '', $currentArray); - $this->marker->removePasswordMarkers(); - $deleteUnusedMarkers = true; - $content .= $this->marker->substituteMarkerArray($templateCode, $this->marker->getMarkerArray(), '', false, $deleteUnusedMarkers); - if (!$isPreview) { - $form = (isset($this->conf['formName']) && $this->conf['formName']) ? $this->conf['formName'] : CssUtility::getClassName($this->prefixId, $this->theTable . '_form'); - $modData = $this->data->modifyDataArrForFormUpdate($currentArray, $cmdKey); - $fields = $infoFields . ',' . $this->data->getAdditionalUpdateFields(); - $fields = implode(',', array_intersect(explode(',', $fields), GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true))); - $fields = SecuredData::getOpenFields($fields); - $content .= !empty($fields) ? $this->getUpdateJS($modData, $form, 'FE[' . $this->theTable . ']', $fields) : ''; - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/Email.php b/typo3conf/ext/sr_feuser_register/Classes/View/Email.php deleted file mode 100644 index f481f6c..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/Email.php +++ /dev/null @@ -1,381 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Domain\Data; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Mail\Message; -use SJBR\SrFeuserRegister\Setfixed\SetfixedUrls; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\HtmlUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\Marker; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; -use TYPO3\CMS\Frontend\Resource\FilePathSanitizer; - -/** - * Email functions - */ -class Email -{ - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Extension name - * - * @var string Extension name - */ - protected $extensionName; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table being used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * The data object - * - * @var Data - */ - protected $data; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The marker object - * - * @var Marker - */ - protected $marker; - - public $infomailPrefix = 'INFOMAIL_'; - public $emailMarkPrefix = 'EMAIL_TEMPLATE_'; - public $emailMarkAdminSuffix = '_ADMIN'; - public $emailMarkHTMLSuffix = '_HTML'; - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param Data $data: the data object - * @param Parameters $parameters: the request parameters object - * @param Marker $marker: the marker object - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array $conf, - Data $data, - Parameters $parameters, - Marker $marker - ) { - $this->extensionKey = $extensionKey; - $this->extensionName = GeneralUtility::underscoredToUpperCamelCase($extensionKey); - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf = $conf; - $this->data = $data; - $this->parameters = $parameters; - $this->marker = $marker; - } - - public function isHTMLMailEnabled() - { - return $this->conf['email.']['HTMLMail'] ?? true; - } - - /** - * Prepares an email message - * - * @param string $key: template key - * @param array $dataArray: a row of fe_users: entered data - * @param array $originalArray: a row of fe_users: original data in the database - * @param string $recipient: an email or the id of a front user - * @return void - */ - public function compile( - $key, - array $dataArray, - array $originalArray, - array $securedArray, - $recipient, - $cmd, - $cmdKey - ) { - $missingSubpartArray = []; - $userSubpartsFound = 0; - $adminSubpartsFound = 0; - - $setFixedConfig = $this->conf['setfixed.'] ?? []; - $viewOnly = true; - $requiredFields = $this->data->getRequiredFieldsArray($cmdKey); - - $originalArray = $originalArray ?? []; - $dataArray = $dataArray ?? $originalArray; - $currentRow = array_merge($originalArray, $dataArray); - - // Whether html will be used - $htmlAllowed = $this->isHTMLMailEnabled() && ($currentRow['module_sys_dmail_html'] ?? false); - // Setting CSS style markers if required - if ($htmlAllowed) { - $this->marker->addCSSStyleMarkers(); - } - - // Build row of modified fields - $mrow = $currentRow; - $changesOnly = (((isset($this->conf['email.']['EDIT_SAVED']) && $this->conf['email.']['EDIT_SAVED'] == '2') || (isset($this->conf['notify.']['EDIT_SAVED']) && $this->conf['notify.']['EDIT_SAVED'] == '2')) && $cmd == 'edit'); - $keepFields = $changesOnly ? ['uid', 'pid', 'tstamp', 'first_name', 'last_name', 'username'] : []; - if ($changesOnly) { - $mrow = []; - foreach ($currentRow as $theField => $value) { - if (in_array($theField, $keepFields)) { - $mrow[$theField] = $value; - } else { - // Determine whether the value of the field was changed - $valueChanged = !isset($dataArray[$theField]) && isset($originalArray[$theField]); - if (isset($dataArray[$theField])) { - if (isset($originalArray[$theField])) { - if (is_array($dataArray[$theField]) && is_array($originalArray[$theField])) { - $valueChanged = count(array_diff($dataArray[$theField], $originalArray[$theField])) || count(array_diff($originalArray[$theField], $dataArray[$theField])); - } else { - $valueChanged = ($dataArray[$theField] != $originalArray[$theField]); - } - } else { - $valueChanged = true; - } - } - if ($valueChanged) { - $mrow[$theField] = $value; - } - } - } - } - - $content = ['user' => [], 'userhtml' => [], 'admin' => [], 'adminhtml' => [], 'mail' => []]; - $content['mail'] = ''; - $content['user']['all'] = ''; - $content['userhtml']['all'] = ''; - $content['admin']['all'] = ''; - $content['adminhtml']['all'] = ''; - $setfixedArray = ['SETFIXED_CREATE', 'SETFIXED_CREATE_REVIEW', 'SETFIXED_INVITE', 'SETFIXED_REVIEW']; - $infomailArray = ['INFOMAIL', 'INFOMAIL_NORECORD']; - if ( - (isset($this->conf['email.'][$key]) && $this->conf['email.'][$key] != '0') - || (($this->conf['enableEmailConfirmation'] ?? false) && in_array($key, $setfixedArray)) - || ( - // Silently refuse to send infomail to non-subscriber, if so requested - ($this->conf['infomail'] ?? false) - && in_array($key, $infomailArray) - && !($key === 'INFOMAIL_NORECORD' && isset($this->conf['email.'][$key]) && $this->conf['email.'][$key] == '0') - ) - ) { - $subpartMarker = '###' . $this->emailMarkPrefix . $key . '###'; - $content['user']['all'] = trim($this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker)); - if ($content['user']['all'] == '') { - $missingSubpartArray[] = $subpartMarker; - } else { - $content['user']['all'] = $this->marker->removeRequired($content['user']['all'], $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $userSubpartsFound++; - } - if ($htmlAllowed) { - $subpartMarker = '###' . $this->emailMarkPrefix . $key . $this->emailMarkHTMLSuffix . '###'; - $content['userhtml']['all'] = trim($this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker)); - if ($content['userhtml']['all'] == '') { - $missingSubpartArray[] = $subpartMarker; - } else { - $content['userhtml']['all'] = $this->marker->removeRequired($content['userhtml']['all'], $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $userSubpartsFound++; - } - } - } - - if ($this->conf['notify.'][$key] ?? true) { - $subpartMarker = '###' . $this->emailMarkPrefix . $key . $this->emailMarkAdminSuffix . '###'; - $content['admin']['all'] = trim($this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker)); - if ($content['admin']['all'] == '') { - $missingSubpartArray[] = $subpartMarker; - } else { - $content['admin']['all'] = $this->marker->removeRequired($content['admin']['all'], $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $adminSubpartsFound++; - } - - if ($this->isHTMLMailEnabled()) { - $subpartMarker = '###' . $this->emailMarkPrefix . $key . $this->emailMarkAdminSuffix . $this->emailMarkHTMLSuffix . '###'; - $content['adminhtml']['all'] = trim($this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker)); - if ($content['adminhtml']['all'] == '') { - $missingSubpartArray[] = $subpartMarker; - } else { - $content['adminhtml']['all'] = $this->marker->removeRequired($content['adminhtml']['all'], $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $adminSubpartsFound++; - } - } - } - - $contentIndexArray = []; - $contentIndexArray['text'] = []; - $contentIndexArray['html'] = []; - - if ($content['user']['all']) { - $content['user']['rec'] = $this->marker->getSubpart($content['user']['all'], '###SUB_RECORD###'); - $contentIndexArray['text'][] = 'user'; - } - if ($content['userhtml']['all']) { - $content['userhtml']['rec'] = $this->marker->getSubpart($content['userhtml']['all'], '###SUB_RECORD###'); - $contentIndexArray['html'][] = 'userhtml'; - } - if ($content['admin']['all']) { - $content['admin']['rec'] = $this->marker->getSubpart($content['admin']['all'], '###SUB_RECORD###'); - $contentIndexArray['text'][] = 'admin'; - } - if ($content['adminhtml']['all']) { - $content['adminhtml']['rec'] = $this->marker->getSubpart($content['adminhtml']['all'], '###SUB_RECORD###'); - $contentIndexArray['html'][] = 'adminhtml'; - } - - $this->marker->fillInMarkerArray($dataArray, $securedArray, '', false); - $this->marker->addLabelMarkers($dataArray, $originalArray, $securedArray, $keepFields, $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $changesOnly); - $content['user']['all'] = $this->marker->substituteMarkerArray($content['user']['all'], $this->marker->getMarkerArray()); - $content['userhtml']['all'] = $this->marker->substituteMarkerArray($content['userhtml']['all'], $this->marker->getMarkerArray()); - $content['admin']['all'] = $this->marker->substituteMarkerArray($content['admin']['all'], $this->marker->getMarkerArray()); - $content['adminhtml']['all'] = $this->marker->substituteMarkerArray($content['adminhtml']['all'], $this->marker->getMarkerArray()); - - $this->marker->addAuthCodeMarker($dataArray); - // If setfixed is enabled - if ( - ($this->conf['enableEmailConfirmation'] ?? false) - || ($this->theTable === 'fe_users' && ($this->conf['enableAdminReview'] ?? false)) - || ($this->conf['setfixed'] ?? false) - || ($this->theTable !== 'fe_users' && ($this->conf['infomail'] ?? false) && ($cmd === 'setfixed' || $cmd === 'infomail')) - ) { - $setfixedUrls = SetfixedUrls::compute($this->prefixId, $this->theTable, $this->conf, $this->parameters->getPids(), $cmd, $currentRow); - $this->marker->addSetfixedUrlMarkers($setfixedUrls); - } - $this->marker->addStaticInfoMarkers($dataArray, $viewOnly); - $this->marker->addLabelMarkers($dataArray, $originalArray ?? [], $securedArray, $keepFields, $this->data->getRequiredFieldsArray($cmdKey), $this->data->getFieldList(), $this->data->getSpecialFieldList()); - $infoFields = implode(',', array_keys($dataArray)); - foreach ($contentIndexArray as $emailType => $indexArray) { - $this->marker->fillInMarkerArray($mrow, $securedArray, '', false, 'FIELD_', ($emailType === 'html')); - $this->marker->addTcaMarkers($dataArray, $originalArray ?? [], $cmd, $cmdKey, $viewOnly, $this->data->getRequiredFieldsArray($cmdKey), 'email', $changesOnly, ($emailType === 'html')); - $this->marker->addAdditionalMarkers($infoFields, $cmd, $cmdKey, $dataArray, $viewOnly, 'email', ($emailType === 'html')); - foreach ($indexArray as $index) { - $content[$index]['rec'] = $this->marker->removeNonIncluded($content[$index]['rec'], array_keys($mrow), $cmdKey); - $content[$index]['rec'] = $this->marker->removeStaticInfoSubparts($content[$index]['rec'], $viewOnly); - $content[$index]['accum'] = ($content[$index]['accum'] ?? '') . $this->marker->substituteMarkerArray($content[$index]['rec'], $this->marker->getMarkerArray()); - if ($emailType === 'text') { - $content[$index]['accum'] = htmlSpecialChars_decode($content[$index]['accum'], ENT_QUOTES); - } - } - } - - // Substitute the markers and eliminate HTML markup from plain text versions - if ($content['user']['all']) { - $content['user']['final'] = $this->marker->substituteSubpart($content['user']['all'], '###SUB_RECORD###', $content['user']['accum']); - $content['user']['final'] = HtmlUtility::removeHTMLComments($content['user']['final']); - $content['user']['final'] = HtmlUtility::replaceHTMLBr($content['user']['final']); - $content['user']['final'] = HtmlUtility::removeHtmlTags($content['user']['final']); - $content['user']['final'] = HtmlUtility::removeSuperfluousLineFeeds($content['user']['final']); - // Remove erroneous \n from locallang file - $content['user']['final'] = str_replace('\n', '', $content['user']['final']); - } - if ($content['userhtml']['all']) { - $content['userhtml']['final'] = $this->marker->substituteSubpart($content['userhtml']['all'], '###SUB_RECORD###', CssUtility::wrapInBaseClass($this->prefixId, $content['userhtml']['accum'])); - // Remove HTML comments - $content['userhtml']['final'] = HtmlUtility::removeHTMLComments($content['userhtml']['final'], true); - // Remove erroneous \n from locallang file - $content['userhtml']['final'] = str_replace('\n', '', $content['userhtml']['final']); - } - if ($content['admin']['all']) { - $content['admin']['final'] = $this->marker->substituteSubpart($content['admin']['all'], '###SUB_RECORD###', $content['admin']['accum']); - $content['admin']['final'] = HtmlUtility::removeHTMLComments($content['admin']['final']); - $content['admin']['final'] = HtmlUtility::replaceHTMLBr($content['admin']['final']); - $content['admin']['final'] = HtmlUtility::removeHtmlTags($content['admin']['final']); - $content['admin']['final'] = HtmlUtility::removeSuperfluousLineFeeds($content['admin']['final']); - // Remove erroneous \n from locallang file - $content['admin']['final'] = str_replace('\n', '', $content['admin']['final']); - } - - if ($content['adminhtml']['all']) { - $content['adminhtml']['final'] = $this->marker->substituteSubpart($content['adminhtml']['all'], '###SUB_RECORD###', CssUtility::wrapInBaseClass($this->prefixId, $content['adminhtml']['accum'])); - // Remove HTML comments - $content['adminhtml']['final'] = HtmlUtility::removeHTMLComments($content['adminhtml']['final'], true); - // Remove erroneous \n from locallang file - $content['adminhtml']['final'] = str_replace('\n', '', $content['adminhtml']['final']); - } - - $bRecipientIsInt = MathUtility::canBeInterpretedAsInteger($recipient); - if ($bRecipientIsInt) { - $fe_userRec = $GLOBALS['TSFE']->sys_page->getRawRecord('fe_users', $recipient); - $recipient = $fe_userRec['email']; - } - // Check if we need to add an attachment - if ( - isset($this->conf['addAttachment.']['cmd'], $this->conf['addAttachment.']['sFK']) - && $this->conf['addAttachment.']['cmd'] === $cmd - && $this->conf['addAttachment.']['sFK'] === $this->parameters->getFeUserData('sFK') - ) { - $filePathSanitizer = GeneralUtility::makeInstance(FilePathSanitizer::class); - $file = (isset($this->conf['addAttachment.']['file']) && $this->conf['addAttachment.']['file']) ? $filePathSanitizer->sanitize($this->conf['addAttachment.']['file']) : ''; - } - // SETFIXED_REVIEW will be sent to user only if the admin part is present - if (($userSubpartsFound + $adminSubpartsFound >= 1) && ($adminSubpartsFound >= 1 || $key !== 'SETFIXED_REVIEW')) { - Message::send($recipient, $this->conf['email.']['admin'] ?? '', $content['user']['final'] ?? '', $content['userhtml']['final'] ?? '', $content['admin']['final'] ?? '', $content['adminhtml']['final'] ?? '', $file ?? '', $this->conf); - } else if ($this->conf['notify.'][$key] ?? false) { - $errorText = LocalizationUtility::translate('internal_no_subtemplate', $this->extensionName); - $errorText = sprintf($errorText, implode(', ' , $missingSubpartArray)); - throw new Exception($errorText, Exception::MISSING_SUBPART); - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/Marker.php b/typo3conf/ext/sr_feuser_register/Classes/View/Marker.php deleted file mode 100644 index 2060848..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/Marker.php +++ /dev/null @@ -1,1891 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Captcha\CaptchaManager; -use SJBR\SrFeuserRegister\Request\Parameters; -use SJBR\SrFeuserRegister\Security\Authentication; -use SJBR\SrFeuserRegister\Security\SecuredData; -use SJBR\SrFeuserRegister\Security\SessionData; -use SJBR\SrFeuserRegister\Utility\CssUtility; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\Utility\UrlUtility; -use SJBR\SrFeuserRegister\View\AbstractView; -use SJBR\StaticInfoTables\PiBaseApi; -use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\Query\QueryHelper; -use TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer; -use TYPO3\CMS\Core\Service\MarkerBasedTemplateService; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\MathUtility; -use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; -use TYPO3\CMS\Frontend\Resource\FilePathSanitizer; - -/** - * Marker functions - */ -class Marker -{ - - /** - * Subpart prefix and suffix constants - */ - const INFOMAIL_PREFIX = 'INFOMAIL_'; - const PREVIEW_SUFFIX = '_PREVIEW'; - const SAVED_SUFFIX = '_SAVED'; - const SETFIXED_PREFIX = 'SETFIXED_'; - - /** - * Extension key - * - * @var string - */ - protected $extensionKey; - - /** - * Extension name - * - * @var string Extension name - */ - protected $extensionName; - - /** - * Prefix used for CSS classes and variables - * - * @var string - */ - protected $prefixId; - - /** - * The table being used - * - * @var string - */ - protected $theTable; - - /** - * The plugin configuration - * - * @var array - */ - protected $conf; - - /** - * Content object - * - * @var ContentObjectRenderer - */ - protected $cObj; - - /** - * The request parameters object - * - * @var Parameters - */ - protected $parameters; - - /** - * The token to use for next inteaction - * - * @var string - */ - protected $token; - - /** - * The Static Info object - * - * @var \SJBR\StaticInfoTables\PiBaseApi - */ - protected $staticInfoObj = null; - - /** - * The usergroup hook object - * - */ - protected $userGroupObj = null; - - /** - * List of button label names - * - * @var string - */ - protected $buttonLabelsList = ''; - - /** - * List of other label names - * - * @var string - */ - protected $otherLabelsList = ''; - - /** - * The template html code - * - * @var string - */ - protected $templateCode; - - /** - * Marker array - * - * @var array - */ - protected $markerArray = []; - - /** - * Url marker array - * - * @var array - */ - protected $urlMarkerArray = []; - - /** - * Marker-based template service - * - * @var MarkerBasedTemplateService - */ - protected $markerBasedTemplateService = null; - - public $previewLabel; - - /** - * Temporary array of data - */ - public $dataArray; - - /** - * Constructor - * - * @param string $extensionKey: the extension key - * @param string $prefixId: the prefixId - * @param string $theTable: the name of the table in use - * @param array $conf: the plugin configuration - * @param Parameters $parameters: the request parameters object - * @param string $buttonLabelsList: a list of button label names - * @param string $otherLabelsList: a list of other label names - * @return void - */ - public function __construct( - $extensionKey, - $prefixId, - $theTable, - array $conf, - Parameters $parameters, - $buttonLabelsList, - $otherLabelsList - ){ - $this->extensionKey = $extensionKey; - $this->extensionName = GeneralUtility::underscoredToUpperCamelCase($this->extensionKey); - $this->prefixId = $prefixId; - $this->theTable = $theTable; - $this->conf = $conf; - $this->cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); - $this->parameters = $parameters; - $this->token = SessionData::readToken($this->extensionKey); - // Static Info object - if (ExtensionManagementUtility::isLoaded('static_info_tables')) { - $this->staticInfoObj = GeneralUtility::makeInstance(PiBaseApi::class); - $this->staticInfoObj->init(); - } - // Marker-based service - $this->markerBasedTemplateService = GeneralUtility::makeInstance(MarkerBasedTemplateService::class); - // Usergroup hook object - if ($this->theTable === 'fe_users') { - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId][$this->theTable]['usergroup']) && is_array($extensionConfiguration[$this->prefixId][$this->theTable]['usergroup'])) ? $extensionConfiguration[$this->prefixId][$this->theTable]['usergroup'] : []; - foreach ($hookClassArray as $classRef) { - $this->userGroupObj = GeneralUtility::makeInstance($classRef); - if (is_object($this->userGroupObj)) { - break; - } - } - } - $this->setButtonLabelsList($buttonLabelsList); - $this->setOtherLabelsList($otherLabelsList); - } - - /** - * Set the list of button labels - * - * @param string list of button labels - * @return void - */ - protected function setButtonLabelsList($buttonLabelsList) - { - if ($buttonLabelsList) { - $this->buttonLabelsList = $buttonLabelsList; - } else { - $this->buttonLabelsList = 'register,confirm_register,send_invitation,send_invitation_now,back_to_form,update,confirm_update,enter,confirm_delete,cancel_delete,update_and_more,password_forgotten'; - } - } - - /** - * Get the list of button labels - * - * @return string list of button labels - */ - public function getButtonLabelsList() - { - return $this->buttonLabelsList; - } - - /** - * Set the list of other labels - * - * @param string list of other labels - * @return void - */ - protected function setOtherLabelsList($otherLabelsList) - { - $this->otherLabelsList = 'yes,no,new_password,password_again,tooltip_password_again,tooltip_invitation_password_again,click_here_to_register,tooltip_click_here_to_register,click_here_to_edit,tooltip_click_here_to_edit,click_here_to_delete,tooltip_click_here_to_delete,click_here_to_see_terms,tooltip_click_here_to_see_terms' - . ',copy_paste_link,enter_account_info,enter_invitation_account_info,required_info_notice,excuse_us' - . ',tooltip_login_username,tooltip_login_password' - . ',invalidToken' - . ',registration_problem,registration_sorry,registration_clicked_twice,registration_help,kind_regards,kind_regards_cre,kind_regards_del,kind_regards_ini,kind_regards_inv,kind_regards_upd' - . ',v_dear,v_verify_before_create,v_verify_invitation_before_create,v_verify_before_update,v_really_wish_to_delete,v_edit_your_account'. - ',v_now_enter_your_username,v_now_choose_password,v_notification'. - ',v_registration_created,v_registration_created_subject,v_registration_created_message1,v_registration_created_message2,v_registration_created_message3'. - ',v_to_the_administrator'. - ',v_registration_review_subject,v_registration_review_message1,v_registration_review_message2,v_registration_review_message3'. - ',v_please_confirm,v_your_account_was_created,v_your_account_was_created_nomail,v_follow_instructions1,v_follow_instructions2,v_follow_instructions_review1,v_follow_instructions_review2'. - ',v_invitation_confirm,v_invitation_account_was_created,v_invitation_instructions1'. - ',v_registration_initiated,v_registration_initiated_subject,v_registration_initiated_message1,v_registration_initiated_message2,v_registration_initiated_message3,v_registration_initiated_review1,v_registration_initiated_review2'. - ',v_registration_invited,v_registration_invited_subject,v_registration_invited_message1,v_registration_invited_message1a,v_registration_invited_message2'. - ',v_registration_infomail_message1a'. - ',v_registration_confirmed,v_registration_confirmed_subject,v_registration_confirmed_message1,v_registration_confirmed_message2,v_registration_confirmed_review1,v_registration_confirmed_review2'. - ',v_registration_cancelled,v_registration_cancelled_subject,v_registration_cancelled_message1,v_registration_cancelled_message2'. - ',v_registration_accepted,v_registration_accepted_subject,v_registration_accepted_message1,v_registration_accepted_message2'. - ',v_registration_refused,v_registration_refused_subject,v_registration_refused_message1,v_registration_refused_message2'. - ',v_registration_accepted_subject2,v_registration_accepted_message3,v_registration_accepted_message4'. - ',v_registration_refused_subject2,v_registration_refused_message3,v_registration_refused_message4'. - ',v_registration_entered,v_registration_entered_subject,v_registration_entered_message1,v_registration_entered_message2'. - ',v_registration_updated,v_registration_updated_subject,v_registration_updated_message1'. - ',v_registration_deleted,v_registration_deleted_subject,v_registration_deleted_message1,v_registration_deleted_message2'. - ',v_registration_unsubscribed,v_registration_unsubscribed_subject,v_registration_unsubscribed_message1,v_registration_unsubscribed_message2'; - if ($otherLabelsList ?? false) { - $this->otherLabelsList .= ',' . $otherLabelsList; - $this->otherLabelsList = GeneralUtility::uniqueList($this->otherLabelsList); - } - } - - /** - * Get the list of other labels - * - * @return string list of other labels - */ - public function getOtherLabelsList() - { - return $this->otherLabelsList; - } - - /** - * Set the marker array - * - * @param array $markerArray - * @return void - */ - protected function setMarkerArray(array $markerArray) - { - $this->markerArray = $markerArray; - } - - /** - * Gets the template html code - * - * @return string the html code - */ - public function getTemplateCode() - { - if (empty($this->templateCode)) { - $filePathSanitizer = GeneralUtility::makeInstance(FilePathSanitizer::class); - $templateFile = $filePathSanitizer->sanitize($this->conf['templateFile'] ?? ''); - $this->templateCode = ''; - if ($templateFile && file_exists($templateFile)) { - $this->templateCode = file_get_contents($templateFile); - } - } - return $this->templateCode; - } - - /** - * Get the marker - * - * @return array the marker array - */ - public function getMarkerArray() - { - return $this->markerArray; - } - - public function getPreviewLabel() - { - return $this->previewLabel; - } - - public function setPreviewLabel($mode) - { - $this->previewLabel = $mode === AbstractView::MODE_PREVIEW ? '_PREVIEW' : ''; - } - - - // enables the usage of {data:<field>}, {tca:<field>} and {meta:<stuff>} in the label markers - public function replaceVariables($matches) { - $rc = ''; - switch ($matches[1]) { - case 'data': - $dataArray = $this->getReplaceData(); - $row = $dataArray['row']; - $rc = $row[$matches[2]]; - break; - case 'tca': - if (!is_array($this->tmpTcaMarkers)) { - $this->tmpTcaMarkers = array(); - $dataArray = $this->getReplaceData(); - $row = $dataArray['row']; - $cmd = $this->parameters->getCmd(); - $cmdKey = $this->parameters->getCmdKey(); - $this->addTcaMarkers( - $this->tmpTcaMarkers, - $row, - $this->origArray, - $cmd, - $cmdKey, - true, - '', - false - ); - } - $rc = $this->tmpTcaMarkers['###TCA_INPUT_' . $matches[2] . '###']; - break; - case 'meta': - if ($matches[2] == 'title') { - $rc = $this->parameters->getPidTitle(); - } - break; - } - if (is_array($rc)) { - $rc = implode(',', $rc); - } - return $rc; - } - - - public function setReplaceData($data) - { - $this->dataArray['row'] = $data['row']; - } - - - public function getReplaceData() - { - return $this->dataArray; - } - - - /** - * Sets the error markers to 'no error' - * - * @param string command key - * @return void all initialization done directly on array $this->dataArray - */ - public function setNoError($cmdKey) - { - $markerArray = $this->getMarkerArray(); - if (isset($this->conf[$cmdKey . '.']['evalValues.']) && is_array($this->conf[$cmdKey . '.']['evalValues.'])) { - foreach ($this->conf[$cmdKey . '.']['evalValues.'] as $theField => $theValue) { - $this->markerArray['###EVAL_ERROR_FIELD_' . $theField . '###'] = '<!--no error-->'; - } - } - $this->setMarkerArray($markerArray); - } - - /** - * Gets the field name needed for the name attribute of the input HTML tag. - * - * @param string name of the field - * @return string FE[tablename][fieldname] ... POST var to transmit the entries with the form - */ - public function getFieldName($theField) - { - return 'FE[' . $this->theTable . '][' . $theField . ']'; - } - - /** - * Adds language-dependant label markers - * - * @param array $row: the record array - * @param array $origArray: the original record array as stored in the database - * @param array $requiredArray: the required fields array - * @param string list of info fields - * @param string list of special fields - * @param bool $changesOnly - * @return void - */ - public function addLabelMarkers(array $row, array $origArray, array $securedArray, array $keepFields, array $requiredArray, $infoFields, $specialFieldList, $changesOnly = false) { - $markerArray = $this->getMarkerArray(); - $tcaColumns = $GLOBALS['TCA'][$this->theTable]['columns']; - $formUrlMarkerArray = $this->getUrlMarkerArray(); - $row = array_merge($row, $securedArray); - - // Data field labels - $infoFieldArray = GeneralUtility::trimExplode(',', $infoFields, true); - $charset = $GLOBALS['TSFE']->metaCharset; - $specialFieldArray = GeneralUtility::trimExplode(',', $specialFieldList, true); - $infoFieldArray = array_merge($infoFieldArray, $specialFieldArray); - $requiredArray = array_merge($requiredArray, $specialFieldArray); - - foreach ($infoFieldArray as $theField) { - $markerkey = mb_strtoupper($theField, 'utf-8'); - // Determine whether the value of the field was changed - $valueChanged = !isset($row[$theField]) && isset($origArray[$theField]); - if (isset($row[$theField])) { - if (isset($origArray[$theField])) { - if (is_array($row[$theField]) && is_array($origArray[$theField])) { - $valueChanged = count(array_diff($row[$theField], $origArray[$theField])) || count(array_diff($origArray[$theField], $row[$theField])); - } else { - $valueChanged = ($row[$theField] != $origArray[$theField]); - } - } else { - $valueChanged = true; - } - } - if (!$changesOnly || $valueChanged || in_array($theField, $keepFields)) { - $label = LocalizationUtility::translate($this->theTable . '.' . $theField, $this->extensionName); - if (empty($label)) { - $label = LocalizationUtility::translate($theField, $this->extensionName); - } - $label = ((empty($label) && isset($tcaColumns[$theField]['label']) && $tcaColumns[$theField]['label']) ? LocalizationUtility::translate($tcaColumns[$theField]['label'], $this->extensionName) : $label); - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - } else { - $label = ''; - } - $markerArray['###LABEL_' . $markerkey . '###'] = $label; - $markerArray['###TOOLTIP_' . $markerkey . '###'] = LocalizationUtility::translate('tooltip_' . $theField, $this->extensionName); - $label = LocalizationUtility::translate('tooltip_invitation_' . $theField, $this->extensionName); - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $markerArray['###TOOLTIP_INVITATION_' . $markerkey . '###'] = $label; - $colConfig = $tcaColumns[$theField]['config'] ?? []; - - if ( - isset($colConfig['type'], $colConfig['items']) - && $colConfig['type'] === 'select' - && $colConfig['items'] - ) { - $colContent = ''; - $markerArray['###FIELD_' . $markerkey . '_CHECKED###'] = ''; - $markerArray['###LABEL_' . $markerkey . '_CHECKED###'] = ''; - $markerArray['###POSTVARS_' . $markerkey . '###'] = ''; - if (isset($row[$theField])) { - if (is_array($row[$theField])) { - $fieldArray = $row[$theField]; - } else { - $fieldArray = GeneralUtility::trimExplode(',', $row[$theField]); - } - foreach ($fieldArray as $key => $value) { - $label = LocalizationUtility::translate($colConfig['items'][(int)$value][0] ?? '', $this->extensionName); - $markerArray['###FIELD_' . $markerkey . '_CHECKED###'] .= '- ' . $label . '<br />'; - $markerArray['###LABEL_' . $markerkey . '_CHECKED###'] .= '- ' . $label . '<br />'; - $markerArray['###POSTVARS_' . $markerkey.'###'] .= chr(10) . ' <input type="hidden" name="FE[fe_users][' . $theField . '][' . $key . ']" value ="' . $value . '" />'; - } - } - } else if ( - isset($colConfig['type']) - && $colConfig['type'] == 'check' - ) { - $markerArray['###FIELD_' . $markerkey . '_CHECKED###'] = (isset($row[$theField]) && $row[$theField]) ? 'checked' : ''; - $markerArray['###LABEL_' . $markerkey . '_CHECKED###'] = (isset($row[$theField]) && $row[$theField]) ? LocalizationUtility::translate('yes', $this->extensionName) : LocalizationUtility::translate('no', $this->extensionName); - } - - if (in_array(trim($theField), $requiredArray)) { - $markerArray['###REQUIRED_' . $markerkey . '###'] = $this->cObj->cObjGetSingle($this->conf['displayRequired'] ?? '', $this->conf['displayRequired.'] ?? [], $this->extensionKey); - $key = 'missing_' . $theField; - $label = LocalizationUtility::translate($key, $this->extensionName); - if ($label == '') { - $label = LocalizationUtility::translate('internal_no_text_found', $this->extensionName); - $label = sprintf($label, $key); - } - $markerArray['###MISSING_' . $markerkey . '###'] = $label; - $markerArray['###MISSING_INVITATION_' . $markerkey . '###'] = LocalizationUtility::translate('missing_invitation_' . $theField, $this->extensionName); - } else { - $markerArray['###REQUIRED_' . $markerkey . '###'] = ''; - $markerArray['###MISSING_' . $markerkey . '###'] = ''; - $markerArray['###MISSING_INVITATION_' . $markerkey . '###'] = ''; - } - $markerArray['###NAME_' . $markerkey . '###'] = $this->getFieldName($theField); - } - $markerArray['###NAME_PASSWORD_AGAIN###'] = $this->getFieldName('password_again'); - $buttonLabels = GeneralUtility::trimExplode(',', $this->getButtonLabelsList(), true); - - foreach ($buttonLabels as $labelName) { - if ($labelName) { - $buttonKey = strtoupper($labelName); - $markerArray['###LABEL_BUTTON_' . $buttonKey . '###'] = LocalizationUtility::translate('button_' . $labelName, $this->extensionName); - $attributes = ''; - - if (isset($this->conf['button.'][$buttonKey . '.']['attribute.']) && is_array($this->conf['button.'][$buttonKey . '.']['attribute.'])) { - $attributesArray = []; - foreach ($this->conf['button.'][$buttonKey . '.']['attribute.'] as $key => $value) { - $attributesArray[] = $key . '="' . $value . '"'; - } - $attributes = implode(' ', $attributesArray); - $attributes = $this->substituteMarkerArray($attributes, $formUrlMarkerArray); - } - $markerArray['###ATTRIBUTE_BUTTON_' . $buttonKey . '###'] = $attributes; - } - } - // Assemble the name to be substituted in the labels - if ( - isset($this->conf['salutation'], $row['first_name']) - && $this->conf['salutation'] === 'informal' - && !empty($row['first_name']) - ) { - $name = $row['first_name']; - } else { - $name = ((isset($row['first_name']) && trim($row['first_name'])) ? trim($row['first_name']) : '') . - ((isset($row['middle_name']) && trim($row['middle_name'])) ? ' ' . trim($row['middle_name']) : '') . - ((isset($row['last_name']) && trim($row['last_name'])) ? ' ' . trim($row['last_name']) : ''); - $name = trim($name); - if (empty($name)) { - $name = 'id(' . ($row['uid'] ?? 0) . ')'; - } - } - // Reset function replaceVariables - $this->tmpTcaMarkers = null; - $otherLabelsList = $this->getOtherLabelsList(); - - if (isset($this->conf['extraLabels']) && $this->conf['extraLabels'] != '') { - $otherLabelsList .= ',' . $this->conf['extraLabels']; - } - $otherLabels = GeneralUtility::trimExplode(',', $otherLabelsList, true); - $dataArray = []; - $dataArray['row'] = $row; - $this->setReplaceData($dataArray); - $username = ((isset($row['username']) && $row['username'] != '') ? $row['username'] : ($row['email'] ?? '')); - - $genderLabelArray = []; - $vDear = 'v_dear'; - if (isset($row['gender'])) { - if ($row['gender'] == '0' || $row['gender'] == 'm') { - $vDear = 'v_dear_male'; - } else if ($row['gender'] == '1' || $row['gender'] == 'f') { - $vDear = 'v_dear_female'; - } - } - $genderLabelArray['v_dear'] = $vDear; - foreach ($otherLabels as $value) { - if (isset($genderLabelArray[$value])) { - $labelName = $genderLabelArray[$value]; - } else { - $labelName = $value; - } - $langText = LocalizationUtility::translate($labelName, $this->extensionName); - $label = sprintf($langText, $this->parameters->getPidTitle(), htmlspecialchars($username), htmlspecialchars($name), htmlspecialchars($row['email'] ?? ''), ''); - // $this->origArray is used by replaceVariables - $this->origArray = $origArray; - $label = preg_replace_callback('/{([a-z_]+):([a-zA-Z0-9_]+)}/', [$this, 'replaceVariables'], $label); - $markerkey = mb_strtoupper($value, 'utf-8'); - $markerArray['###LABEL_' . $markerkey . '###'] = $label; - } - $this->setMarkerArray($markerArray); - } - - /** - * Initializes the marker array - * Generates the URL markers - * - * @param string $uid of the current record - * @return void - */ - public function generateURLMarkers($uid = 0) - { - $vars = []; - $unsetVarsList = 'mode,pointer,sort,sword,backURL,submit,rU,aC,sFK,doNotSave,preview,countryChange,fileDelete,key'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $unsetVars['cmd'] = 'cmd'; - $unsetVarsAll = $unsetVars; - $unsetVarsAll[] = 'token'; - $formUrl = UrlUtility::get($this->prefixId, '', $GLOBALS['TSFE']->id . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVarsAll); - $backUrl = $this->parameters->getBackURL(); - - $markerArray['###CHARSET###'] = $GLOBALS['TSFE']->metaCharset ?: 'utf-8'; - $markerArray['###PREFIXID###'] = $this->prefixId; - - unset($unsetVars['cmd']); - $markerArray['###FORM_URL###'] = $formUrl; - $form = CssUtility::getClassName($this->prefixId, $this->theTable . '_form'); - $markerArray['###FORM_NAME###'] = (isset($this->conf['formName']) && $this->conf['formName']) ? $this->conf['formName'] : $form; - - $unsetVarsList = 'mode,pointer,sort,sword,submit,doNotSave,countryChange,fileDelete,key'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $ac = $this->parameters->getFeUserData('aC'); - if ($ac) { - $vars['aC'] = $ac; - } - $vars['token'] = $this->token; - $vars['cmd'] = 'delete'; - $vars['rU'] = $uid; - $vars['preview'] = '1'; - $markerArray['###DELETE_URL###'] = UrlUtility::get($this->prefixId, '', $this->parameters->getPid('edit') . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - - $unsetVarsList = 'mode,pointer,sort,sword,backURL,submit,rU,aC,sFK,doNotSave,preview,countryChange,fileDelete,key,regHash'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $vars['cmd'] = 'create'; - $url = UrlUtility::get($this->prefixId, '', $this->parameters->getPid('register') . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - $markerArray['###REGISTER_URL###'] = $url; - - $unsetVarsList = 'mode,pointer,sort,sword,backURL,submit,aC,sFK,doNotSave,preview,countryChange,fileDelete,key'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $vars['cmd'] = 'login'; - $markerArray['###LOGIN_FORM###'] = UrlUtility::get($this->prefixId, '', $this->parameters->getPid('login') . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - - $unsetVarsList = 'mode,pointer,sort,sword,backURL,submit,doNotSave,preview,countryChange,fileDelete,key'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $vars['cmd'] = 'infomail'; - $markerArray['###INFOMAIL_URL###'] = UrlUtility::get($this->prefixId, '', $this->parameters->getPid('infomail') . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - - $vars['cmd'] = 'edit'; - $markerArray['###EDIT_URL###'] = UrlUtility::get($this->prefixId, '', $this->parameters->getPid('edit') . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - $markerArray['###THE_PID###'] = (int) $this->parameters->getPid(); - $markerArray['###THE_PID_TITLE###'] = $this->parameters->getPidTitle(); - $markerArray['###BACK_URL###'] = $backUrl; - $markerArray['###SITE_NAME###'] = $this->conf['email.']['fromName'] ?? ''; - $markerArray['###SITE_URL###'] = UrlUtility::getSiteUrl(); - $normalizedParams = $GLOBALS['TYPO3_REQUEST']->getAttribute('normalizedParams'); - $markerArray['###SITE_WWW###'] = $normalizedParams->getRequestHostOnly(); - $markerArray['###SITE_EMAIL###'] = $this->conf['email.']['from'] ?? ''; - // Set the url to the terms and conditions - if (isset($this->conf['terms.']['url']) && $this->conf['terms.']['url']) { - $termsUrlParam = $this->conf['terms.']['url']; - } else { - $filePathSanitizer = GeneralUtility::makeInstance(FilePathSanitizer::class); - $termsUrlParam = ((isset($this->conf['terms.']['file']) && $this->conf['terms.']['file']) ? $filePathSanitizer->sanitize($this->conf['terms.']['file']) : ''); - } - $markerArray['###TERMS_URL###'] = UrlUtility::get($this->prefixId, '', $termsUrlParam, [], [], false); - - $formUrlMarkerArray = $this->generateFormURLMarkers(); - $markerArray = array_merge($markerArray, $formUrlMarkerArray); - $this->setUrlMarkerArray($markerArray); - $this->setMarkerArray(array_merge($this->getMarkerArray(), $markerArray)); - } - - /** - * Generates the form URL markers - * - * @return void - */ - protected function generateFormURLMarkers() - { - $commandArray = array('register', 'edit', 'delete', 'confirm', 'login'); - $markerArray = array(); - $vars = array(); - $unsetVarsList = 'mode,pointer,sort,sword,backURL,submit,rU,aC,sFK,doNotSave,preview,cmd,token,countryChange,fileDelete,key'; - $unsetVars = GeneralUtility::trimExplode(',', $unsetVarsList); - $commandPidArray = array(); - foreach ($commandArray as $command) { - $upperCommand = strtoupper($command); - $pid = $this->conf[$command . 'PID'] ?? ''; - if (!$pid) { - $pid = $GLOBALS['TSFE']->id; - } - $formUrl = UrlUtility::get($this->prefixId, '', $pid . ',' . $GLOBALS['TSFE']->type, $vars, $unsetVars); - $markerArray['###FORM_' . $upperCommand . '_URL###'] = $formUrl; - } - return $markerArray; - } - - /** - * Add setfixed URLs marker - * - * @param array $setfixedUrls: pairs of key => url - * @return void - */ - public function addSetfixedUrlMarkers(array $setfixedUrls) - { - foreach ($setfixedUrls as $key => $url) { - $marker = '###SETFIXED_' . mb_strtoupper($key, 'utf-8') . '_URL###'; - $isAbsoluteURL = ((strncmp($url, 'http://', 7) == 0) || (strncmp($url, 'https://', 8) == 0)); - $url = ($isAbsoluteURL ? '' : UrlUtility::getSiteUrl()) . ltrim($url, '/'); - $this->markerArray[$marker] = str_replace(['[',']'], ['%5B', '%5D'], $url); - } - } - - /** - * Add back URL marker - * - * @param string $url: the back url - * @return void - */ - public function addBackUrlMarker($url) - { - $this->markerArray['###BACK_URL###'] = $url; - } - - /** - * Set the Url marker array - * - * @param array $markerArray: a marker array - * @return void - */ - protected function setUrlMarkerArray(array $markerArray) - { - $this->urlMarkerArray = $markerArray; - } - - /** - * Get the Url marker array - * - * @return array the Url marker array - */ - public function getUrlMarkerArray() - { - return $this->urlMarkerArray; - } - - /** - * Remove password markers - * - * @return void - */ - public function removePasswordMarkers() - { - // Avoid cleartext password in HTML source - $this->markerArray['###FIELD_password###'] = ''; - $this->markerArray['###FIELD_password_again###'] = ''; - } - - /** - * Add authCode marker - * - * @param string $row: a record - * @return void - */ - public function addAuthCodeMarker(array $row) { - $this->markerArray['###SYS_AUTHCODE###'] = Authentication::authCode($row, $this->conf); - } - - /** - * Add evaluation errors marker - * - * @param array $markerArray: evaluation errors markers - * @return void - */ - public function addEvalValuesMarkers(array $markerArray) - { - $this->markerArray = array_merge($this->markerArray, $markerArray); - } - - /** - * Adds Static Info markers to a marker array - * - * @param array $row: the table record - * @return void - */ - public function addStaticInfoMarkers($row = [], $viewOnly = false) - { - $markerArray = $this->getMarkerArray(); - if ($this->staticInfoObj !== null) { - $cmd = $this->parameters->getCmd(); - $markerArray['###HIDDENFIELDS###'] = $markerArray['###HIDDENFIELDS###'] ?? ''; - if ($viewOnly) { - $markerArray['###FIELD_static_info_country###'] = isset($row['static_info_country']) ? $this->staticInfoObj->getStaticInfoName('COUNTRIES', $row['static_info_country']) : ''; - $markerArray['###FIELD_zone###'] = isset($row['zone']) ? $this->staticInfoObj->getStaticInfoName('SUBDIVISIONS', $row['zone'], $row['static_info_country']) : ''; - if (!$markerArray['###FIELD_zone###']) { - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="FE[' . $this->theTable . '][zone]" value="" />' . LF; - } - $markerArray['###FIELD_language###'] = isset($row['language']) ? $this->staticInfoObj->getStaticInfoName('LANGUAGES', $row['language']) : ''; - } else { - $idCountry = CssUtility::getClassName($this->prefixId, 'static_info_country'); - $titleCountry = LocalizationUtility::translate('tooltip_' . (($cmd == 'invite') ? 'invitation_' : '') . 'static_info_country', $this->extensionName); - $idZone = CssUtility::getClassName($this->prefixId, 'zone'); - $titleZone = LocalizationUtility::translate('tooltip_' . (($cmd == 'invite') ? 'invitation_' : '') . 'zone', $this->extensionName); - $idLanguage = CssUtility::getClassName($this->prefixId, 'language'); - $titleLanguage = LocalizationUtility::translate('tooltip_' . (($cmd == 'invite') ? 'invitation_' : '') . 'language', $this->extensionName); - $selected = $row['static_info_country'] ?? []; - $markerArray['###SELECTOR_STATIC_INFO_COUNTRY###'] = $this->staticInfoObj->buildStaticInfoSelector( - 'COUNTRIES', - 'FE[' . $this->theTable . ']' . '[static_info_country]', - '', - $selected, - '', - $this->conf['onChangeCountryAttribute'] ?? '', - $idCountry, - $titleCountry, - $this->conf['where.']['static_countries'] ?? '', - '', - $this->conf['useLocalCountry'] ?? '' - ); - $markerArray['###SELECTOR_ZONE###'] = - $this->staticInfoObj->buildStaticInfoSelector( - 'SUBDIVISIONS', - 'FE[' . $this->theTable . ']' . '[zone]', - '', - $row['zone'] ?? '', - $row['static_info_country'] ?? '', - '', - $idZone, - $titleZone, - $this->conf['where.']['static_country_zones'] ?? '' - ); - if (!$markerArray['###SELECTOR_ZONE###'] ) { - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="FE[' . $this->theTable . '][zone]" value="" />' . LF; - } - - $where = ''; - if (isset($this->conf['where.']) && is_array($this->conf['where.'])) { - $where = $this->conf['where.']['static_languages']; - } - - $markerArray['###SELECTOR_LANGUAGE###'] = - $this->staticInfoObj->buildStaticInfoSelector( - 'LANGUAGES', - 'FE[' . $this->theTable . ']' . '[language]', - '', - is_array($row) ? ($row['language'] ?? '') : '', - '', - '', - $idLanguage, - $titleLanguage, - $where - ); - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="' . $this->prefixId . '[countryChange]" value="0" />' . LF; - } - } - $this->setMarkerArray($markerArray); - } - - /** - * Removes irrelevant Static Info subparts (zone selection when the country has no zone) - * - * @param string $templateCode: the input template - * @param boolean $viewOnly: whether the fields are presented for view only or for input/update - * @return string the output template - */ - public function removeStaticInfoSubparts($templateCode, $viewOnly = false) { - $markerArray = $this->getMarkerArray(); - if ($viewOnly) { - if (!isset($markerArray['###FIELD_zone###']) || !$markerArray['###FIELD_zone###']) { - return $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_zone###', ''); - } - } else { - if (!isset($markerArray['###SELECTOR_ZONE###']) || !$markerArray['###SELECTOR_ZONE###']) { - return $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_zone###', ''); - } - } - return $templateCode; - } - - /** - * Adds additional markers to a marker array by invoking hooks - * - * @param string $infoFields: the list of field names - * @param string $cmd: the command CODE - * @param string $cmdKey: the command key - * @param array $dataArray: the record array - * @param bool $viewOnly: whether the fields are presented for view only or for input/update - * @return void - */ - public function addAdditionalMarkers($infoFields, $cmd, $cmdKey, $dataArray = array(), $viewOnly = false, $activity = '', $bHtml = true) - { - $markerArray = $this->getMarkerArray(); - $fieldArray = GeneralUtility::trimExplode(',', $infoFields, true); - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - $hookClassArray = (isset($extensionConfiguration[$this->prefixId]['model']) && is_array($extensionConfiguration[$this->prefixId]['model'])) ? $extensionConfiguration[$this->prefixId]['model'] : []; - foreach ($hookClassArray as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - if (is_object($hookObj) && method_exists($hookObj, 'addMarkers')) { - foreach ($fieldArray as $theField) { - $additionalMarkerArray = $hookObj->addMarkers($this->theTable, $theField, $cmd, $cmdKey, $dataArray, $viewOnly, $activity, $bHtml, $this->extensionName, $this->prefixId, $this->conf); - $hiddenFieldsMarker = $markerArray['###HIDDENFIELDS###'] ?? ''; - $markerArray = array_merge($markerArray, $additionalMarkerArray); - $markerArray['###HIDDENFIELDS###'] = $hiddenFieldsMarker . ($additionalMarkerArray['###HIDDENFIELDS###'] ?? ''); - } - } - } - $this->setMarkerArray($markerArray); - } - - /** - * Add hidden fields to the marker array - * - * @param string $cmd: the command to be processed - * @param string $authCode: the authCode - * @param string $backUrl: the back URL - * @return void - */ - public function addGeneralHiddenFieldsMarkers($cmd, $authCode = '', $backUrl = '') - { - $markerArray = $this->getMarkerArray(); - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . ($cmd ? '<input type="hidden" name="' . $this->prefixId . '[cmd]" value="' . $cmd . '" />' . LF : ''); - $markerArray['###HIDDENFIELDS###'] .= ($authCode ? '<input type="hidden" name="' . $this->prefixId . '[aC]" value="' . $authCode . '" />' . LF : ''); - $markerArray['###HIDDENFIELDS###'] .= ($backUrl ? '<input type="hidden" name="' . $this->prefixId . '[backURL]" value="' . htmlspecialchars($backUrl) . '" />' . LF : ''); - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="' . $this->prefixId . '[submit]" value="1" />' . LF; - $this->addFormToken($markerArray, $this->prefixId); - $this->setMarkerArray($markerArray); - } - - /** - * Inserts a token for the form and stores it - * - * @param array $markerArray: the token is added to the '###HIDDENFIELDS###' marker - */ - protected function addFormToken(array &$markerArray) - { - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . '<input type="hidden" name="' . $this->prefixId . '[token]" value="' . $this->token . '" />' . LF; - } - - /** - * Add hidden fields markers specific to the edit form - * - * @param int $uid: uid of the current record - * @param string $authCode: the authcode - * @return void - */ - public function addEditFormHiddenFieldsMarkers($uid, $authCode, $cmd = 'edit', $pid = 0) - { - $markerArray = $this->getMarkerArray(); - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . '<input type="hidden" name="FE[' . $this->theTable . '][uid]" value="' . $uid . '" />' . LF; - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="' . $this->prefixId . '[cmd]" value="' . $cmd . '" />' . LF; - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="' . $this->prefixId . '[submit]" value="1" />' . LF; - if ($pid) { - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="FE[' . $this->theTable . '][pid]" value="' . $pid . '" />' . LF; - } - $this->addFormToken($markerArray); - // Deletion of user is allowed when authentified by authCode - if ($this->theTable !== 'fe_users' || ($authCode && $cmd === 'delete')) { - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="' . $this->prefixId . '[aC]" value="' . $authCode . '" />' . LF; - } - $this->setMarkerArray($markerArray); - } - - public function addHiddenFieldsMarkers( - $cmdKey, - $mode, - $bUseEmailAsUsername, - $cmdKeyFields, - $dataArray = [] - ) { - $markerArray = $this->getMarkerArray(); - if (($this->conf[$cmdKey.'.']['preview'] ?? false) && $mode !== AbstractView::MODE_PREVIEW) { - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . '<input type="hidden" name="' . $this->prefixId . '[preview]" value="1" />' . LF; - if ($this->theTable === 'fe_users' && $cmdKey === 'edit' && $bUseEmailAsUsername - ) { - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="FE[' . $this->theTable . '][username]" value="' . htmlspecialchars($dataArray['username'] ?? '') . '" />' . LF; - $markerArray['###HIDDENFIELDS###'] .= '<input type="hidden" name="FE[' . $this->theTable . '][email]" value="' . htmlspecialchars($dataArray['email'] ?? '') . '" />' . LF; - } - } - $fieldArray = GeneralUtility::trimExplode(',', $cmdKeyFields, true); - - if ($mode === AbstractView::MODE_PREVIEW) { - $fieldArray = array_diff($fieldArray, ['hidden', 'disable']); - - if ($this->theTable === 'fe_users') { - if ( - ($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) - || ($this->conf[$cmdKey . '.']['generateUsername'] ?? false) - ) { - $fieldArray = array_merge($fieldArray, ['username']); - } - if ($this->conf[$cmdKey . '.']['useEmailAsUsername'] ?? false) { - $fieldArray = array_merge($fieldArray, ['email']); - } - if ($cmdKey === 'edit' && !in_array('email', $fieldArray) && !in_array('username', $fieldArray)) { - $fieldArray = array_merge($fieldArray, ['username']); - } - } - $fields = implode(',', $fieldArray); - $fields = SecuredData::getOpenFields($fields); - $fieldArray = explode(',', $fields); - - foreach ($fieldArray as $theField) { - if (isset($dataArray[$theField])) { - $value = $dataArray[$theField]; - if (is_array($value)) { - $fieldConfig = $GLOBALS['TCA'][$this->theTable]['columns'][$theField]['config'] ?? []; - if ( - isset($fieldConfig['type'], $fieldConfig['foreign_table']) - && $fieldConfig['type'] === 'inline' - && $fieldConfig['foreign_table'] === 'sys_file_reference' - ) { - $value = htmlspecialchars(serialize($value)); - } else { - $value = implode(',', $value); - } - } else { - $value = htmlspecialchars($dataArray[$theField]); - } - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . '<input type="hidden" name="FE[' . $this->theTable . '][' . $theField . ']" value="' . $value . '" />' . LF; - } - } - } else if ( - ($this->theTable === 'fe_users') - && ($cmdKey === 'edit' || $cmdKey === 'password') - && !in_array('email', $fieldArray) - && !in_array('username', $fieldArray) - ) { - // Password change form probably contains neither email nor username - $theField = 'username'; - $value = htmlspecialchars($dataArray[$theField] ?? ''); - $markerArray['###HIDDENFIELDS###'] = ($markerArray['###HIDDENFIELDS###'] ?? '') . '<input type="hidden" name="FE[' . $this->theTable . '][' . $theField . ']" value="' . $value . '" />' . LF; - } - $this->setMarkerArray($markerArray); - } - - /** - * Adds elements to the input $markContentArray based on the values from the fields from $fieldList found in $row - * - * @param array An array with keys found in the $fieldList (typically a record) which values should be moved to the $markContentArray - * @param string A list of fields from the $row array to add to the $markContentArray array. If empty all fields from $row will be added (unless they are integers) - * @param bool If set, all values added to $markContentArray will be nl2br()'ed - * @param string Prefix string to the fieldname before it is added as a key in the $markContentArray. Notice that the keys added to the $markContentArray always start and end with "###" - * @param bool If set, all values are passed through htmlspecialchars() - RECOMMENDED to avoid most obvious XSS and maintain XHTML compliance. - * @param bool $viewOnly: whether this is rendering for view only or for form input fields - * @return array The modified $markContentArray - */ - public function fillInMarkerArray(array $row, array $securedArray, $fieldList = '', $nl2br = true, $prefix = 'FIELD_', $hsc = true, $viewOnly = true) { - $markerArray = $this->getMarkerArray(); - if (is_array($securedArray)) { - foreach ($securedArray as $field => $value) { - $row[$field] = $securedArray[$field]; - } - } - if (!empty($fieldList)) { - $fieldArray = GeneralUtility::trimExplode(',', $fieldList, true); - foreach ($fieldArray as $field) { - if ( - $viewOnly - && isset($GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['eval']) - && $GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['eval'] === 'date' - ) { - $row[$field] = $this->formatDateForViewOnly($row[$field]); - } - $markerArray['###' . $prefix . $field . '###'] = $nl2br ? nl2br($row[$field]) : $row[$field]; - } - } else { - foreach ($row as $field => $value) { - if ( - !isset($GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['type']) - || $GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['type'] !== 'inline' - ) { - if (is_array($value)) { - $value = implode(',', $value); - } - if ($hsc) { - $value = htmlspecialchars($value); - } - if ( - $viewOnly - && isset($GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['eval']) - && $GLOBALS['TCA'][$this->theTable]['columns'][$field]['config']['eval'] === 'date' - ) { - $value = $this->formatDateForViewOnly($value); - } - $markerArray['###' . $prefix . $field . '###'] = $nl2br ? nl2br($value) : $value; - } - } - } - // Add global markers - $extensionConfiguration = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get($this->extensionKey); - if ( - isset($extensionConfiguration[$this->prefixId]['registrationProcess']) - && is_array($extensionConfiguration[$this->prefixId]['registrationProcess']) - ) { - foreach ($extensionConfiguration[$this->prefixId]['registrationProcess'] as $classRef) { - $hookObj= GeneralUtility::makeInstance($classRef); - if (method_exists($hookObj, 'addGlobalMarkers')) { - $hookObj->addGlobalMarkers($markerArray, $this, $this->parameters->getCmdKey(), $this->conf); - } - } - } - // Add captcha markers - if (CaptchaManager::useCaptcha($this->parameters->getCmdKey(), $this->conf, $this->extensionKey)) { - if ( - isset($extensionConfiguration['captcha']) - && is_array($extensionConfiguration['captcha']) - ) { - foreach ($extensionConfiguration['captcha'] as $classRef) { - $hookObj = GeneralUtility::makeInstance($classRef); - $hookObj->addGlobalMarkers($markerArray, $this->parameters->getCmdKey(), $this->conf); - } - } - } - $this->setMarkerArray($markerArray); - } - - /** - * Format date for display - * - * @param string $date: date in format yyyy-mm-dd - * @return string date formated according to localized date format - */ - public function formatDateForViewOnly($date) - { - $dateFormat = LocalizationUtility::translate('dateFormat', $this->extensionName); - $timestamp = mktime(0, 0, 0, (int)substr($date, 5, 2), (int)substr($date, 8, 2), (int)substr($date, 0, 4)); - return strftime($dateFormat, $timestamp); - } - - /** - * Removes required and error sub-parts when there are no errors - * - * Works like this: - * - Insert subparts like this ###SUB_REQUIRED_FIELD_".$theField."### that tells that the field is required, if it's not correctly filled in. - * - These subparts are all removed, except if the field is listed in $failure string! - * - Subparts like ###SUB_ERROR_FIELD_".$theField."### are also removed if there is no error on the field - * - Remove also the parts of non-included fields, using a similar scheme! - * - * @param string $templateCode: the content of the HTML template - * @param string $failure: list of field with errors - * @return string the template with susbstituted parts - */ - public function removeRequired( - $templateCode, - $failure, - array $requiredArray, - $fieldList, - $specialFieldList, - $cmdKey, - $isPreview - ) { - $includedFields = GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true); - if ($isPreview && !in_array('username', $includedFields)) { - $includedFields[] = 'username'; - } - $infoFields = GeneralUtility::trimExplode(',', $fieldList, true); - $specialFields = explode(',', $specialFieldList); - if (is_array($specialFields) && count($specialFields)) { - $infoFields = array_merge($infoFields, $specialFields); - } - if (!ExtensionManagementUtility::isLoaded('direct_mail')) { - $infoFields = array_merge($infoFields, array('module_sys_dmail_category', 'module_sys_dmail_newsletter', 'module_sys_dmail_html')); - $includedFields = array_diff($includedFields, array('module_sys_dmail_category', 'module_sys_dmail_newsletter')); - } - if (!CaptchaManager::useCaptcha($cmdKey, $this->conf, $this->extensionKey)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_captcha_response###', ''); - } - // Honour Address List (tt_address) configuration setting - if ($this->theTable === 'tt_address' && ExtensionManagementUtility::isLoaded('tt_address')) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_name###', ''); - } - foreach ($infoFields as $k => $theField) { - // Remove field required subpart, if field is not missing - if (in_array(trim($theField), $requiredArray)) { - if (!GeneralUtility::inList($failure, $theField)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELD_' . $theField . '###', ''); - $templateCode = $this->substituteSubpart($templateCode, '###SUB_ERROR_FIELD_' . $theField . '###', ''); - } - } else { - // Remove field included subpart, if field is not included and is not in failure list - if (!in_array(trim($theField), $includedFields) && !GeneralUtility::inList($failure, $theField)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_' . $theField . '###', ''); - } else { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELD_' . $theField . '###', ''); - if (!GeneralUtility::inList($failure, $theField)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_ERROR_FIELD_' . $theField . '###', ''); - } - if (strstr($this->conf['parseValues.'][$theField] ?? '', 'checkArray')) { - $listOfCommands = GeneralUtility::trimExplode(',', $this->conf['parseValues.'][$theField] ?? '', true); - foreach ($listOfCommands as $cmd) { - // Enable parameters after each command enclosed in brackets [..]. - $cmdParts = preg_split('/\[|\]/', $cmd); - $theCmd = trim($cmdParts[0]); - switch ($theCmd) { - case 'checkArray': - $positions = GeneralUtility::trimExplode(';', $cmdParts[1]); - for ($i = 0; $i < 10; $i++) { - if (!in_array($i, $positions)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_' . $theField . '_' . $i . '###', ''); - } - } - break; - } - } - } - } - } - } - return $templateCode; - } - - public function removeNonIncluded($templateCode, array $keepFields, $cmdKey) { - $includedFields = GeneralUtility::trimExplode(',', $this->conf[$cmdKey . '.']['fields'] ?? '', true); - foreach ($includedFields as $field) { - if (!in_array($field, $keepFields)) { - $templateCode = $this->substituteSubpart($templateCode, '###SUB_INCLUDED_FIELD_' . $field . '###', ''); - } - } - return $templateCode; - } - - /** - * Adds CSS styles marker to a marker array for substitution in an HTML email message - * - * @return void - */ - public function addCSSStyleMarkers() - { - $markerArray = $this->getMarkerArray(); - $markerArray['###CSS_STYLES###'] = ' /*<![CDATA[*/ -'; - $filePathSanitizer = GeneralUtility::makeInstance(FilePathSanitizer::class); - $file = $filePathSanitizer->sanitize($this->conf['email.']['HTMLMailCSS'] ?? ''); - $fileContent = ''; - if ($file && file_exists($file)) { - $fileContent = file_get_contents($file); - } - $markerArray['###CSS_STYLES###'] .= $fileContent; - $markerArray['###CSS_STYLES###'] .= ' -/*]]>*/'; - $this->setMarkerArray($markerArray); - } - - /** - * Add form element markers from the Table Configuration Array to a marker array - * - * @param array $row: the updated record - * @param array $origRow: the original record as before the updates - * @param string $cmd: the command CODE - * @param string $cmdKey: the command key - * @param boolean $viewOnly: whether the fields are presented for view only or for input/update - * @param array $requiredFields: required fields names - * @param string $activity: 'preview', 'input' or 'email': parameter of stdWrap configuration - * @param boolean $bChangesOnly: whether only updated fields should be presented - * @param boolean $HSC: whether content should be htmlspecialchar'ed or not - * @return void - */ - public function addTcaMarkers( - $row, - $origRow, - $cmd, - $cmdKey, - $viewOnly = false, - array $requiredFields, - $activity = '', - $bChangesOnly = false, - $HSC = true - ) { - $markerArray = $this->getMarkerArray(); - $charset = $GLOBALS['TSFE']->metaCharset; - $languageUid = GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('language', 'id'); - if ($bChangesOnly && is_array($origRow)) { - $mrow = []; - foreach ($origRow as $k => $v) { - if ($v != $row[$k]) { - $mrow[$k] = $row[$k]; - } - } - $mrow['uid'] = $row['uid']; - $mrow['pid'] = $row['pid']; - $mrow['tstamp'] = $row['tstamp']; - $mrow['username'] = $row['username']; - } else { - $mrow = $row; - } - - $fields = $this->conf[$cmdKey . '.']['fields'] ?? ''; - - if ($activity !== 'email') { - $activity = $viewOnly ? 'preview' : 'input'; - } - - foreach ($GLOBALS['TCA'][$this->theTable]['columns'] as $colName => $colSettings) { - if (GeneralUtility::inList($fields, $colName)) { - $colConfig = $colSettings['config']; - $colContent = ''; - if (!$bChangesOnly || isset($mrow[$colName])) { - $type = $colConfig['type'] ?? ''; - - // check for a setup of wraps: - $stdWrap = []; - $bNotLast = false; - $bStdWrap = false; - // any item wraps set? - if ( - isset($this->conf[$type . '.'][$activity . '.'][$colName . '.']['item.']) - && is_array($this->conf[$type . '.'][$activity . '.'][$colName . '.']['item.']) - ) { - $stdWrap = $this->conf[$type. '.'][$activity . '.'][$colName . '.']['item.']; - $bStdWrap = true; - if ($this->conf[$type . '.'][$activity . '.'][$colName . '.']['item.']['notLast'] ?? false) { - $bNotLast = true; - } - } - $listWrap = []; - $bListWrap = false; - - // any list wraps set? - if ( - isset($this->conf[$type . '.'][$activity . '.'][$colName . '.']['list.']) - && is_array($this->conf[$type . '.'][$activity . '.'][$colName . '.']['list.']) - ) { - $listWrap = $this->conf[$type . '.'][$activity . '.'][$colName . '.']['list.']; - $bListWrap = true; - } else { - $listWrap['wrap'] = '<ul class="tx-srfeuserregister-multiple-checked-values">|</ul>'; - } - if ($viewOnly) { - // Configure preview or email based on input type - switch ($type) { - //case 'input': - case 'text': - if (isset($mrow[$colName])) { - $colContent = ($HSC ? nl2br(htmlspecialchars($mrow[$colName], ENT_QUOTES, $charset)) : $mrow[$colName]); - } - break; - case 'check': - if (isset($colConfig['items']) && is_array($colConfig['items'])) { - - if (!$bStdWrap) { - $stdWrap['wrap'] = '<li>|</li>'; - } - - if (!$bListWrap) { - $listWrap['wrap'] = '<ul class="tx-srfeuserregister-multiple-checked-values">|</ul>'; - } - $bCheckedArray = []; - foreach ($colConfig['items'] as $key => $value) { - $checked = (($mrow[$colName] ?? 0) & (1 << $key)); - if ($checked) { - $bCheckedArray[$key] = true; - } - } - - $count = 0; - $checkedCount = 0; - foreach ($colConfig['items'] as $key => $value) { - $count++; - $label = LocalizationUtility::translate($colConfig['items'][$key][0], $this->extensionName); - if ($HSC) { - $label = - htmlspecialchars( - $label, - ENT_QUOTES, - $charset - ); - } - $checked = ($bCheckedArray[$key] ?? false); - - if ($checked) { - $checkedCount++; - $label = ($checked ? $label : ''); - $colContent .= ((!$bNotLast || $checkedCount < count($bCheckedArray)) ? $this->cObj->stdWrap($label,$stdWrap) : $label); - } - } - $savedData = $this->cObj->data; - $this->cObj->data = $colConfig['items']; - $colContent = $this->cObj->stdWrap($colContent, $listWrap); - $this->cObj->data = $savedData; - } else { - if ($mrow[$colName] ?? false) { - $label = LocalizationUtility::translate('yes', $this->extensionName); - } else { - $label = LocalizationUtility::translate('no', $this->extensionName); - } - if ($HSC && !($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent = $label; - } - break; - case 'radio': - if (isset($mrow[$colName]) && $mrow[$colName] !== '') { - $valuesArray = is_array($mrow[$colName]) ? $mrow[$colName] : explode(',', $mrow[$colName]); - if (isset($colConfig['itemsProcFunc']) && $colConfig['itemsProcFunc']) { - $itemArray = GeneralUtility::callUserFunction($colConfig['itemsProcFunc'], $colConfig, $this); - } - $itemArray = $colConfig['items'] ?? []; - if (is_array($itemArray) && !empty($itemArray)) { - $itemKeyArray = $this->getItemKeyArray($itemArray); - if (!$bStdWrap) { - $stdWrap['wrap'] = '| '; - } - for ($i = 0; $i < count($valuesArray); $i++) { - $item = $itemKeyArray[$valuesArray[$i]][0] ?: $itemKeyArray[(int)$valuesArray[$i]][0]; - $label = LocalizationUtility::translate(substr(strrchr($item, ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($item, $this->extensionName); - $label = $label ?: $item; - if ($HSC && !($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent .= ((!$bNotLast || $i < count($valuesArray) - 1 ) ? $this->cObj->stdWrap($label, $stdWrap) : $label); - } - } - } - break; - case 'select': - if (isset($mrow[$colName]) && $mrow[$colName] !== '') { - $valuesArray = is_array($mrow[$colName]) ? $mrow[$colName] : explode(',', $mrow[$colName]); - if (isset($colConfig['itemsProcFunc']) && $colConfig['itemsProcFunc']) { - $itemArray = GeneralUtility::callUserFunction($colConfig['itemsProcFunc'], $colConfig, $this); - } - if (!$bStdWrap) { - $stdWrap['wrap'] = '|<br />'; - } - $itemArray = $colConfig['items'] ?? []; - if (is_array($itemArray) && !empty($itemArray)) { - $itemKeyArray = $this->getItemKeyArray($itemArray); - $i = 0; - foreach ($valuesArray as $key => $value){ - $label = LocalizationUtility::translate(substr(strrchr($itemKeyArray[$value][0], ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($itemKeyArray[$value][0], $this->extensionName); - $label = $label ?: $itemKeyArray[$value][0]; - if ($HSC && !($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent .= ((!$bNotLast || $i < count($valuesArray) - 1 ) ? $this->cObj->stdWrap($label,$stdWrap) : $label); - $i++; - } - } - if (isset($colConfig['foreign_table']) && $colConfig['foreign_table']) { - if ($colName === 'usergroup' && is_object($this->userGroupObj)) { - $valuesArray = $this->userGroupObj->restrictToSelectableValues($valuesArray, $this->conf, $cmdKey); - } - reset($valuesArray); - $firstValue = current($valuesArray); - if ( - isset($colConfig['foreign_table']) - && $colConfig['foreign_table'] - && (!empty($firstValue) || count($valuesArray) > 1) - ) { - $titleField = $GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['label'] ?? ''; - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable($colConfig['foreign_table']); - $queryBuilder - ->getRestrictions() - ->removeAll(); - $foreignRows = $queryBuilder - ->select('*') - ->from($colConfig['foreign_table']) - ->where( - $queryBuilder->expr()->in('uid', array_map('intval', $valuesArray)) - ) - ->execute() - ->fetchAll(); - if (is_array($foreignRows) && count($foreignRows) > 0) { - for ($i = 0; $i < count($foreignRows); $i++) { - if ($localizedRow = $GLOBALS['TSFE']->sys_page->getRecordOverlay($colConfig['foreign_table'], $foreignRows[$i], $languageUid)) { - $foreignRows[$i] = $localizedRow; - } - $text = $foreignRows[$i][$titleField] ?? ''; - if ($HSC && !($this->conf['allowHtmlInLabels'] ?? false)) { - $text = htmlspecialchars($text, ENT_QUOTES, $charset); - } - $colContent .= (($bNotLast || $i < count($foreignRows) - 1) ? $this->cObj->stdWrap($text, $stdWrap) : $text); - } - } - } - } - if (empty($valuesArray)) { - $colContent .= LocalizationUtility::translate('noneSelected', $this->extensionName); - } - } - break; - default: - // unsupported input type - $label = LocalizationUtility::translate('unsupported', $this->extensionName); - if ($HSC && !($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent .= $colConfig['type'] . ':' . $label; - break; - } - } else { - $itemArray = ''; - // Configure inputs based on TCA type - if (in_array($type, ['check', 'radio', 'select'])) { - if (isset($mrow[$colName])) { - $valuesArray = is_array($mrow[$colName]) ? $mrow[$colName] : explode(',', $mrow[$colName]); - } else { - $valuesArray = []; - } - if ((!isset($valuesArray[0]) || !$valuesArray[0]) && isset($colConfig['default']) && $colConfig['default']) { - $valuesArray[] = $colConfig['default']; - } - if (in_array($type, ['radio', 'select']) && isset($colConfig['itemsProcFunc']) && $colConfig['itemsProcFunc']) { - $itemArray = GeneralUtility::callUserFunction($colConfig['itemsProcFunc'], $colConfig, $this); - } - $itemArray = $colConfig['items'] ?? ''; - } - switch ($type) { - case 'input': - $colContent = '<input type="input" name="FE[' . $this->theTable . '][' . $colName . ']"' . - ' title="###TOOLTIP_' . (($cmd == 'invite') ? 'INVITATION_' : '') . mb_strtoupper($colName, 'utf-8') . '###"' . - ' size="' . ((isset($colConfig['size']) && $colConfig['size']) ? $colConfig['size'] : 30) . '"'; - if (($colConfig['max'] ?? false) && $colConfig['max']) { - $colContent .= ' maxlength="' . $colConfig['max'] . '"'; - } - if (($colConfig['default'] ?? false) && $colConfig['default']) { - $label = LocalizationUtility::translate($colConfig['default'], $this->extensionName); - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent .= ' value="' . $label . '"'; - } - $colContent .= ' />'; - $markerArray['###MAXLENGTH_' . $colName . '###'] = (isset($colConfig['max']) && $colConfig['max']) ? $colConfig['max'] : ((isset($colConfig['size']) && $colConfig['size']) ? $colConfig['size'] : 20); - break; - case 'text': - $label = (isset($colConfig['default']) && $colConfig['default']) ? LocalizationUtility::translate($colConfig['default'], $this->extensionName) : ''; - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent = '<textarea id="' . CssUtility::getClassName($this->prefixId, $colName) . '" name="FE[' . $this->theTable . '][' . $colName . ']"' . - ' title="###TOOLTIP_' . (($cmd == 'invite') ? 'INVITATION_':'') . mb_strtoupper($colName, 'utf-8') . '###"' . - ' cols="' . ((isset($colConfig['cols']) && $colConfig['cols']) ? $colConfig['cols'] : 30) . '"' . - ' rows="' . ((isset($colConfig['rows']) && $colConfig['rows']) ? $colConfig['rows'] : 5) . '"' . - '>' . $label . '</textarea>'; - $markerArray['###MAXLENGTH_' . $colName . '###'] = (isset($colConfig['max']) && $colConfig['max']) ? $colConfig['max'] : ((isset($colConfig['cols']) && $colConfig['cols']) ? $colConfig['cols'] : 30)*((isset($colConfig['rows']) && $colConfig['rows']) ? $colConfig['rows'] : 5); - break; - case 'check': - $label = LocalizationUtility::translate('tooltip_' . $colName, $this->extensionName); - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - if (isset($itemArray) && is_array($itemArray)) { - $uidText = CssUtility::getClassName($this->prefixId, $colName); - if (isset($mrow['uid']) && $mrow['uid']) { - $uidText .= '-' . $mrow['uid']; - } - $colContent = '<ul id="' . $uidText . '" class="tx-srfeuserregister-multiple-checkboxes">'; - if ($this->parameters->getFeUserData('submit') || $this->parameters->getFeUserData('doNotSave') || $cmd === 'edit') { - $startVal = (int)($mrow[$colName] ?? 0); - } else { - $startVal = (int)($colConfig['default'] ?? 0); - } - foreach ($itemArray as $key => $value) { - $checked = ($startVal & (1 << $key)) ? ' checked="checked"' : ''; - $label = LocalizationUtility::translate(substr(strrchr($value[0], ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($value[0], $this->extensionName); - $label = $label ?: $value[0]; - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $colContent .= '<li><input type="checkbox"' . - CssUtility::classParam($this->prefixId, 'checkbox') . - ' id="' . $uidText . '-' . $key . '" name="FE[' . $this->theTable . '][' . $colName . '][]" value="' . $key . '"' . $checked . ' /><label for="' . $uidText . '-' . $key . '">' . $label . '</label></li>'; - } - $colContent .= '</ul>'; - } else { - $colContent = '<input type="checkbox"' . - CssUtility::classParam($this->prefixId, 'checkbox') . - ' id="' . CssUtility::getClassName($this->prefixId, $colName) . - '" name="FE[' . $this->theTable . '][' . $colName . ']" title="' . $label . '"' . ((isset($mrow[$colName]) && $mrow[$colName]) ? ' checked="checked"' : '') . ' />'; - } - break; - case 'radio': - if ($this->parameters->getFeUserData('submit') || $this->parameters->getFeUserData('doNotSave') || $cmd === 'edit') { - $startVal = $mrow[$colName] ?? ''; - } else { - $startVal = $colConfig['default'] ?? ''; - } - if (!$startVal && isset($colConfig['items']) && is_array($colConfig['items']) &&!empty($colConfig['items'])) { - reset($colConfig['items']); - list($startConf) = $colConfig['items']; - $startVal = $startConf[1]; - } - if (!$bStdWrap) { - $stdWrap['wrap'] = '| '; - } - - if (isset($itemArray) && is_array($itemArray)) { - $i = 0; - foreach ($itemArray as $key => $confArray) { - $value = $confArray[1]; - $label = LocalizationUtility::translate(substr(strrchr($confArray[0], ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($confArray[0], $this->extensionName); - $label = $label ?: $confArray[0]; - if (!($this->conf['allowHtmlInLabels'] ?? false)) { - $label = htmlspecialchars($label, ENT_QUOTES, $charset); - } - $itemOut = '<input type="radio"' - . CssUtility::classParam($this->prefixId, 'radio') - . ' id="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $i . '"' - . ' name="FE[' . $this->theTable . '][' . $colName . ']"' - . ' value="' . $value . '" ' . ($value == $startVal ? ' checked="checked"' : '') . ' />' . - '<label for="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $i . '">' . $label . '</label>'; - $i++; - $colContent .= ((!$bNotLast || $i < count($itemArray) - 1 ) ? $this->cObj->stdWrap($itemOut, $stdWrap) : $itemOut); - } - } - break; - case 'select': - $colContent =''; - if (isset($colConfig['maxitems']) && $colConfig['maxitems'] > 1) { - $multiple = '[]" multiple="multiple'; - } else { - $multiple = ''; - } - - if ($this->theTable === 'fe_users' && $colName == 'usergroup' && !($this->conf['allowMultipleUserGroupSelection'] ?? false)) { - $multiple = ''; - } - - if (isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') { - $colContent .= ' - <input id="' . CssUtility::getClassName($this->prefixId, $colName) . - '" name="FE[' . $this->theTable . '][' . $colName . ']" value="" type="hidden" />'; - $colContent .= ' - <ul class="' . - CssUtility::getClassName($this->prefixId, 'multiple-checkboxes') . - '" title="###TOOLTIP_' . (($cmd == 'invite') ? 'INVITATION_' : '') . mb_strtoupper($colName, 'utf-8') . '###">'; - } else { - $colContent .= '<select class="'. - CssUtility::getClassName($this->prefixId, 'multiple-checkboxes') . - '" id="' . CssUtility::getClassName($this->prefixId, $colName) . - '" name="FE[' . $this->theTable . '][' . $colName . ']' . $multiple . '" title="###TOOLTIP_' . (($cmd == 'invite') ? 'INVITATION_' : '') . mb_strtoupper($colName, 'utf-8') . '###">'; - } - - if (isset($itemArray) && is_array($itemArray)) { - $itemArray = $this->getItemKeyArray($itemArray); - $i = 0; - foreach ($itemArray as $k => $item) { - $label = LocalizationUtility::translate(substr(strrchr($item[0], ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($item[0], $this->extensionName); - $label = $label ?: $item[0]; - $label = $label ? htmlspecialchars($label, ENT_QUOTES, $charset) : ''; - if (isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') { - $colContent .= '<li><label for="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $i . '">' . $label . ' <input class="' . - CssUtility::getClassName($this->prefixId, 'checkbox-checkboxes') . - '" id="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $i . '" name="FE[' . $this->theTable . '][' . $colName . '][' . $k . ']" value="' . $k . '" type="checkbox" ' . (in_array($k, $valuesArray) ? ' checked="checked"' : '') . ' /> - </label></li>'; - } else { - $colContent .= '<option value="' . (($k || !($colConfig['foreign_table'] ?? false)) ? $k : '') . '" ' . (in_array($k, $valuesArray) ? 'selected="selected"' : '') . '>' . $label . '</option>'; - } - $i++; - } - } - - if (isset($colConfig['foreign_table'], $GLOBALS['TCA'][$colConfig['foreign_table']])) { - $titleField = $GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['label'] ?? ''; - $reservedValues = []; - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable($colConfig['foreign_table']) - ->select('*') - ->from($colConfig['foreign_table']); - $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class)); - if ($colName === 'usergroup' && is_object($this->userGroupObj)) { - $reservedValues = $this->userGroupObj->getReservedValues($this->conf); - $this->userGroupObj->getAllowedWhereClause($colConfig['foreign_table'], $this->parameters->getPid(), $this->conf, $cmdKey, true, $queryBuilder); - } - if ( - ($this->conf['useLocalization'] ?? false) - && isset($GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['transOrigPointerField']) - ) { - if (empty($queryBuilder->getQueryPart('where'))) { - $queryBuilder->where($queryBuilder->expr()->eq($GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['transOrigPointerField'], $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT))); - } else { - $queryBuilder->andWhere($queryBuilder->expr()->eq($GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['transOrigPointerField'], $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT))); - } - } - if ( - $colName === 'module_sys_dmail_category' - && $colConfig['foreign_table'] === 'sys_dmail_category' - && ($this->conf['module_sys_dmail_category_PIDLIST'] ?? false) - ) { - $pidArray = array_map('intval', GeneralUtility::trimExplode(',', $this->conf['module_sys_dmail_category_PIDLIST'] ?? '')); - if (empty($queryBuilder->getQueryPart('where'))) { - $queryBuilder->where($queryBuilder->expr()->in('sys_dmail_category.pid', $pidArray)); - } else { - $queryBuilder->andWhere($queryBuilder->expr()->in('sys_dmail_category.pid', $pidArray)); - } - if ($this->conf['useLocalization'] ?? false) { - $queryBuilder->andWhere($queryBuilder->expr()->eq('sys_dmail_category.sys_language_uid', $queryBuilder->createNamedParameter((int)$languageUid, \PDO::PARAM_INT))); - } else { - $queryBuilder->andWhere($queryBuilder->expr()->eq('sys_dmail_category.sys_language_uid', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT))); - } - } - if ($GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['sortby'] ?? false) { - $queryBuilder->orderBy($GLOBALS['TCA'][$colConfig['foreign_table']]['ctrl']['sortby']); - } - $foreignWhereClause = trim($this->replaceForeignWhereMarker('', $colName, $colConfig)); - if ($foreignWhereClause) { - $foreignWhereClause = QueryHelper::stripLogicalOperatorPrefix($foreignWhereClause); - if (empty($queryBuilder->getQueryPart('where'))) { - $queryBuilder->where($foreignWhereClause); - } else { - $queryBuilder->andWhere($foreignWhereClause); - } - } - $rows = $queryBuilder - ->execute() - ->fetchAll(); - - if (!in_array($colName, $requiredFields)) { - if ((isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') || $colContent) { - // nothing - } else { - if (!empty($itemArray)) { - $label = LocalizationUtility::translate(substr(strrchr($itemArray[0][0], ':'), 1), $this->extensionName); - $label = $label ?: LocalizationUtility::translate($itemArray[0][0], $this->extensionName); - $label = $label ?: $itemArray[0][0]; - } - $label = $label ? htmlspecialchars($label, ENT_QUOTES, $charset) : ''; - $colContent .= '<option value="" ' . ($valuesArray[0] ? '' : 'selected="selected"') . '>' . $label . '</option>'; - } - } - - $selectedValue = false; - foreach ($rows as $row2) { - // Handle usergroup case - if ($colName === 'usergroup') { - if (!in_array($row2['uid'], $reservedValues)) { - if ($localizedRow = $GLOBALS['TSFE']->sys_page->getRecordOverlay($colConfig['foreign_table'], $row2, $languageUid)) { - $row2 = $localizedRow; - } - $titleText = htmlspecialchars($row2[$titleField], ENT_QUOTES, $charset); - $selected = (in_array($row2['uid'], $valuesArray) ? ' selected="selected"' : ''); - if (!($this->conf['allowMultipleUserGroupSelection'] ?? false) && $selectedValue) { - $selected = ''; - } - $selectedValue = ($selected ? true: $selectedValue); - if (isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') { - $colContent .= '<li><label for="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $row2['uid'] . '">' . $titleText . ' <input class="' . - CssUtility::getClassName($this->prefixId, 'checkbox') . - '" id="'. CssUtility::getClassName($this->prefixId, $colName) . '-' . $row2['uid'] . '" name="FE[' . $this->theTable . '][' . $colName . '][' . $row2['uid'] . ']" value="'.$row2['uid'] . '" type="checkbox"' . ($selected ? ' checked="checked"':'') . ' /> - </label></li>'; - } else { - $colContent .= '<option value="' . $row2['uid'] . '"' . $selected . '>' . $titleText . '</option>'; - } - } - } else { - if ($localizedRow = $GLOBALS['TSFE']->sys_page->getRecordOverlay($colConfig['foreign_table'], $row2, $languageUid)) { - $row2 = $localizedRow; - } - $titleText = htmlspecialchars($row2[$titleField], ENT_QUOTES, $charset); - - if (isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') { - $colContent .= '<li><label for="' . CssUtility::getClassName($this->prefixId, $colName) . '-' . $row2['uid'] . '">' . $titleText . ' <input class="' . - CssUtility::getClassName($this->prefixId, 'checkbox') . - '" id="'. CssUtility::getClassName($this->prefixId, $colName) . '-' . $row2['uid'] . '" name="FE[' . $this->theTable . '][' . $colName . '][' . $row2['uid'] . ']" value="' . $row2['uid'] . '" type="checkbox"' . (in_array($row2['uid'], $valuesArray) ? ' checked="checked"' : '') . ' /> - </label></li>'; - - } else { - $colContent .= '<option value="' . $row2['uid'] . '"' . (in_array($row2['uid'], $valuesArray) ? 'selected="selected"' : '') . '>' . $titleText . '</option>'; - } - } - } - } - - if (isset($colConfig['renderType']) && $colConfig['renderType'] === 'selectCheckBox') { - $colContent .= '</ul>'; - } else { - $colContent .= '</select>'; - } - break; - - default: - $colContent .= $colConfig['type'] . ':' . LocalizationUtility::translate('unsupported', $this->extensionName); - break; - } - } - } else { - $colContent = ''; - } - - if ($viewOnly) { - $markerArray['###TCA_INPUT_VALUE_' . $colName . '###'] = $colContent; - } - $markerArray['###TCA_INPUT_' . $colName . '###'] = $colContent; - } else { - // field not in form fields list - } - } - $this->setMarkerArray($markerArray); - } - - /** - * Transfers the item array to one where the key corresponds to the value - * @param array array of selectable items like found in TCA - * @return array array of selectable items with correct key - */ - public function getItemKeyArray(array $itemArray) - { - $rc = []; - if (is_array($itemArray)) { - foreach ($itemArray as $k => $row) { - $key = $row[1]; - $rc[$key] = $row; - } - } - return $rc; - } - - /** - * Replaces the markers in the foreign table where clause - * - * @param string $whereClause: foreign table where clause - * @param string $colName: column name - * @param array $colConfig: $TCA column configuration - * @return string foreign table where clause with replaced markers - */ - protected function replaceForeignWhereMarker($whereClause, $colName, array $colConfig) - { - $foreignWhere = $colConfig['foreign_table_where'] ?? ''; - if ($foreignWhere) { - $pageTSConfig = $GLOBALS['TSFE']->getPagesTSconfig(); - $TSconfig = $pageTSConfig['TCEFORM.'][$this->theTable . '.'][$colName . '.'] ?? []; - if (isset($TSconfig['PAGE_TSCONFIG_ID'], $TSconfig['PAGE_TSCONFIG_IDLIST'])) { - // substitute whereClause - $foreignWhere = str_replace('###PAGE_TSCONFIG_ID###', intval($TSconfig['PAGE_TSCONFIG_ID']), $foreignWhere); - $foreignWhere = - str_replace( - '###PAGE_TSCONFIG_IDLIST###', - implode(',', GeneralUtility::intExplode(',', $TSconfig['PAGE_TSCONFIG_IDLIST'])), - $foreignWhere - ); - } - - // have all markers in the foreign where been replaced? - if (strpos($foreignWhere, '###') === false) { - $orderbyPos = stripos($foreignWhere, 'ORDER BY'); - if ($orderbyPos !== false) { - $whereClause .= ' ' . substr($foreignWhere, 0, $orderbyPos); - } else { - $whereClause .= ' ' . $foreignWhere; - } - } - } - return $whereClause; - } - - public function getSubpart($content, $marker) - { - return $this->markerBasedTemplateService->getSubpart($content, $marker); - } - - public function substituteSubpart($content, $marker, $subpartContent, $recursive = true, $keepMarker = false) - { - return $this->markerBasedTemplateService->substituteSubpart($content, $marker, $subpartContent, $recursive, $keepMarker); - } - - public function substituteMarkerArray($content, $markContentArray, $wrap = '', $uppercase = false, $deleteUnused = false) - { - return $this->markerBasedTemplateService->substituteMarkerArray($content, $markContentArray, $wrap, $uppercase, $deleteUnused); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Classes/View/PlainView.php b/typo3conf/ext/sr_feuser_register/Classes/View/PlainView.php deleted file mode 100644 index 7c8e1fc..0000000 --- a/typo3conf/ext/sr_feuser_register/Classes/View/PlainView.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -namespace SJBR\SrFeuserRegister\View; - -/* - * Copyright notice - * - * (c) 2007-2022 Stanislas Rolland <typo3AAAA(arobas)sjbr.ca> - * 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 2 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 - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - */ - -use SJBR\SrFeuserRegister\Exception; -use SJBR\SrFeuserRegister\Utility\LocalizationUtility; -use SJBR\SrFeuserRegister\View\AbstractView; - -/** - * Display functions - */ - -class PlainView extends AbstractView -{ - /** - * Initializes a template, filling values for data and labels - * - * @param string $subpartMarker: the template subpart marker - * @param array $dataArray: the incoming data array, if any - * @return string the template with substituted parts and markers - */ - public function render($subpartMarker, array $dataArray, array $origArray, array $securedArray, $cmd, $cmdKey) - { - $content = ''; - $templateCode = $this->marker->getSubpart($this->marker->getTemplateCode(), $subpartMarker); - if (empty($templateCode)) { - $errorText = LocalizationUtility::translate('internal_no_subtemplate', $this->extensionName); - $errorText = sprintf($errorText, $subpartMarker); - throw new Exception($errorText, Exception::MISSING_SUBPART); - } - $viewOnly = true; - $requiredFields = $this->data->getRequiredFieldsArray($cmdKey); - $templateCode = $this->marker->removeRequired($templateCode, $this->data->getFailure(), $requiredFields, $this->data->getFieldList(), $this->data->getSpecialFieldList(), $cmdKey, $viewOnly); - $this->marker->fillInMarkerArray($dataArray, $securedArray, ''); - $this->marker->addStaticInfoMarkers($dataArray, $viewOnly); - $this->marker->addTcaMarkers($dataArray, $origArray, $cmd, $cmdKey, $viewOnly, $requiredFields); - $this->marker->addLabelMarkers($dataArray, $origArray, $securedArray, [], $this->data->getRequiredFieldsArray($cmdKey), $this->data->getFieldList(), $this->data->getSpecialFieldList()); - $templateCode = $this->marker->removeStaticInfoSubparts($templateCode, $viewOnly); - $this->marker->removePasswordMarkers(); - $uppercase = false; - $deleteUnusedMarkers = true; - $content .= $this->marker->substituteMarkerArray($templateCode, $this->marker->getMarkerArray(), '', $uppercase, $deleteUnusedMarkers); - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/FlexForms/flexform_ds_pi1.xml b/typo3conf/ext/sr_feuser_register/Configuration/FlexForms/flexform_ds_pi1.xml deleted file mode 100644 index 1b64d0b..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/FlexForms/flexform_ds_pi1.xml +++ /dev/null @@ -1,55 +0,0 @@ -<T3DataStructure> - <meta> - <langDisable>1</langDisable> - </meta> - <sheets> - <sDEF> - <ROOT> - <TCEforms> - <sheetTitle>LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.generalTab</sheetTitle> - </TCEforms> - <type>array</type> - <el> - <display_mode> - <TCEforms> - <label>LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode</label> - <config> - <type>select</type> - <renderType>selectSingle</renderType> - <items> - <numindex index="1"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.1</numindex> - <numindex index="1"></numindex> - </numindex> - <numindex index="2"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.3</numindex> - <numindex index="1">create</numindex> - </numindex> - <numindex index="3"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.4</numindex> - <numindex index="1">delete</numindex> - </numindex> - <numindex index="4"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.5</numindex> - <numindex index="1">invite</numindex> - </numindex> - <numindex index="5"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.7</numindex> - <numindex index="1">edit</numindex> - </numindex> - <numindex index="6"> - <numindex index="0">LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.pi1_flexform.display_mode.8</numindex> - <numindex index="1">setfixed</numindex> - </numindex> - </items> - <size>6</size> - <minitems>0</minitems> - <maxitems>1</maxitems> - </config> - </TCEforms> - </display_mode> - </el> - </ROOT> - </sDEF> - </sheets> -</T3DataStructure> \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_groups.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_groups.php deleted file mode 100644 index 4376470..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_groups.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -defined('TYPO3') or die(); - -call_user_func( - function($extKey) - { - /** - * Enabling localization of frontend groups - */ - $GLOBALS['TCA']['fe_groups']['ctrl']['origUid'] = 't3_origuid'; - $GLOBALS['TCA']['fe_groups']['ctrl']['languageField'] = 'sys_language_uid'; - $GLOBALS['TCA']['fe_groups']['ctrl']['transOrigPointerField'] = 'l10n_parent'; - $GLOBALS['TCA']['fe_groups']['ctrl']['transOrigDiffSourceField'] = 'l10n_diffsource'; - - $GLOBALS['TCA']['fe_groups']['columns']['subgroup']['l10n_mode'] = 'exclude'; - $GLOBALS['TCA']['fe_groups']['columns']['TSconfig']['l10n_mode'] = 'exclude'; - $GLOBALS['TCA']['fe_groups']['columns']['lockToDomain']['l10n_mode'] = 'exclude'; - $GLOBALS['TCA']['fe_groups']['columns']['lockToDomain']['config']['type'] = 'none'; - - $GLOBALS['TCA']['fe_groups']['columns']['subgroup']['config']['foreign_table_where'] = ' AND fe_groups.sys_language_uid IN (-1,0) AND NOT(fe_groups.uid = ###THIS_UID###) AND fe_groups.hidden=0 ORDER BY fe_groups.title'; - - $addColumnArray = [ - 'sys_language_uid' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', - 'config' => [ - 'type' => 'language', - 'renderType' => 'selectSingle', - 'foreign_table' => 'sys_language', - 'foreign_table_where' => 'ORDER BY sys_language.title', - 'items' => [ - ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1], - ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', 0] - ], - 'default' => 0, - 'fieldWizard' => [ - 'selectIcons' => [ - 'disabled' => false, - ], - ], - ] - ], - 'l10n_parent' => [ - 'displayCond' => 'FIELD:sys_language_uid:>:0', - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent', - 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', - 'items' => [ - ['', 0] - ], - 'foreign_table' => 'sys_category', - 'foreign_table_where' => 'AND sys_category.uid=###REC_FIELD_l10n_parent### AND sys_category.sys_language_uid IN (-1,0)', - 'default' => 0 - ] - ], - 'l10n_diffsource' => [ - 'config' => [ - 'type' => 'passthrough', - 'default' => '' - ] - ] - ]; - $typo3Version = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class); - $typo3Branch = $typo3Version->getBranch(); - if (version_compare($typo3Branch, '11.2', '<')) { - $addColumnArray['sys_language_uid']['config']['type'] = 'select'; - } - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_groups', $addColumnArray); - }, - 'sr_feuser_register' -); \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_users.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_users.php deleted file mode 100644 index 826d4cf..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/fe_users.php +++ /dev/null @@ -1,197 +0,0 @@ -<?php -defined('TYPO3') or die(); - -call_user_func( - function($extKey) - { - /** - * Setting up country, country subdivision, preferred language, first_name and last_name in fe_users table - * Adjusting some maximum lengths to conform to specifications of payment gateways (ref.: Authorize.net) - */ - $GLOBALS['TCA']['fe_users']['columns']['username']['config']['eval'] = 'nospace,uniqueInPid,required'; - $GLOBALS['TCA']['fe_users']['columns']['name']['config']['max'] = '100'; - $GLOBALS['TCA']['fe_users']['columns']['company']['config']['max'] = '50'; - $GLOBALS['TCA']['fe_users']['columns']['city']['config']['max'] = '40'; - $GLOBALS['TCA']['fe_users']['columns']['country']['config']['max'] = '60'; - $GLOBALS['TCA']['fe_users']['columns']['zip']['config']['size'] = '15'; - $GLOBALS['TCA']['fe_users']['columns']['zip']['config']['max'] = '20'; - $GLOBALS['TCA']['fe_users']['columns']['email']['config']['max'] = '255'; - $GLOBALS['TCA']['fe_users']['columns']['telephone']['config']['max'] = '25'; - $GLOBALS['TCA']['fe_users']['columns']['fax']['config']['max'] = '25'; - $extensionConfiguration = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class); - $GLOBALS['TCA']['fe_users']['columns']['image']['config']['max_size'] = $extensionConfiguration->get($extKey, 'imageMaxSize'); - $GLOBALS['TCA']['fe_users']['columns']['image']['config']['filter'][0]['parameters']['allowedFileExtensions'] = $extensionConfiguration->get($extKey, 'imageTypes'); - - $GLOBALS['TCA']['fe_users']['columns']['usergroup']['config']['foreign_table_where'] = ' AND fe_groups.sys_language_uid IN (-1,0) ORDER BY fe_groups.title'; - - $addColumnArray = array( - 'cnum' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.cnum', - 'config' => array( - 'type' => 'input', - 'size' => '20', - 'max' => '50', - 'eval' => 'trim', - 'default' => '' - ) - ), - 'static_info_country' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.static_info_country', - 'config' => array( - 'type' => 'input', - 'size' => '5', - 'max' => '3', - 'eval' => '', - 'default' => '' - ) - ), - 'zone' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.zone', - 'config' => array( - 'type' => 'input', - 'size' => '20', - 'max' => '40', - 'eval' => 'trim', - 'default' => '' - ) - ), - 'language' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.language', - 'config' => array( - 'type' => 'input', - 'size' => '4', - 'max' => '2', - 'eval' => '', - 'default' => '' - ) - ), - 'date_of_birth' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.date_of_birth', - 'config' => array( - 'type' => 'input', - 'renderType' => 'inputDateTime', - 'size' => '10', - 'eval' => 'date', - 'default' => 0 - ) - ), - 'gender' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.gender', - 'config' => array( - 'type' => 'radio', - 'items' => array( - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.gender.I.99', '99'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.gender.I.0', '0'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.gender.I.1', '1') - ) - ) - ), - 'status' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status', - 'config' => array( - 'type' => 'select', - 'renderType' => 'selectSingle', - 'items' => array( - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status.I.0', '0'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status.I.1', '1'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status.I.2', '2'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status.I.3', '3'), - array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.status.I.4', '4') - ), - 'size' => 1, - 'maxitems' => 1 - ) - ), - 'comments' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.comments', - 'config' => array( - 'type' => 'text', - 'rows' => '5', - 'cols' => '48' - ) - ), - 'by_invitation' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.by_invitation', - 'config' => array( - 'type' => 'check', - 'default' => '0' - ) - ), - 'terms_acknowledged' => array( - 'exclude' => 0, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.terms_acknowledged', - 'config' => array( - 'type' => 'check', - 'default' => '0', - 'readOnly' => '1' - ) - ), - 'token' => array( - 'exclude' => 1, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.token', - 'config' => array( - 'type' => 'text', - 'rows' => '1', - 'cols' => '32' - ) - ), - 'tx_srfeuserregister_password' => array( - 'exclude' => 1, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.tx_srfeuserregister_password', - 'config' => array( - 'type' => 'passthrough' - ) - ), - 'house_no' => array( - 'exclude' => 1, - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.house_no', - 'config' => array( - 'type' => 'input', - 'eval' => 'trim', - 'size' => '20', - 'max' => '20' - ) - ) - ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $addColumnArray); - - $GLOBALS['TCA']['fe_users']['types']['0']['showitem'] = preg_replace('/(^|,)\s*country\s*(,|$)/', '$1 zone, static_info_country, country, language$2', $GLOBALS['TCA']['fe_users']['types']['0']['showitem']); - $GLOBALS['TCA']['fe_users']['types']['0']['showitem'] = preg_replace('/(^|,)\s*address\s*(,|$)/', '$1 cnum, status, date_of_birth, house_no, address$2', $GLOBALS['TCA']['fe_users']['types']['0']['showitem']); - $GLOBALS['TCA']['fe_users']['types']['0']['showitem'] = preg_replace('/(^|,)\s*www\s*(,|$)/', '$1 www, comments, by_invitation, terms_acknowledged$2', $GLOBALS['TCA']['fe_users']['types']['0']['showitem']); - - if (isset($GLOBALS['TCA']['fe_users']['palettes']['2']['showitem'])) { - $GLOBALS['TCA']['fe_users']['palettes']['2']['showitem'] = 'gender,--linebreak--,' . $GLOBALS['TCA']['fe_users']['palettes']['2']['showitem']; - } else { - $GLOBALS['TCA']['fe_users']['palettes']['2']['showitem'] = 'gender,--linebreak--,'; - } - - $GLOBALS['TCA']['fe_users']['ctrl']['thumbnail'] = 'image'; - - // fe_users further modified when extension direct_mail is not loaded - if ( - !\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('direct_mail') - ) { - $addColumnArray = array( - 'module_sys_dmail_html' => array( - 'label' => 'LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:fe_users.module_sys_dmail_html', - 'exclude' => '1', - 'config'=>Array( - 'type'=>'check' - ) - ) - ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $addColumnArray); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCATypes('fe_users','--div--;HTML mail,module_sys_dmail_html'); - } - }, - 'sr_feuser_register' -); diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/pages.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/pages.php deleted file mode 100644 index 86f4a47..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/pages.php +++ /dev/null @@ -1,4 +0,0 @@ -<?php -defined('TYPO3') or die(); - -$GLOBALS['TCA']['pages']['columns']['fe_group']['config']['foreign_table_where'] = ' AND fe_groups.sys_language_uid IN (-1,0) ORDER BY fe_groups.title'; \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_file_metadata.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_file_metadata.php deleted file mode 100644 index e590133..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_file_metadata.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -defined('TYPO3') or die(); -if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('filemetadata')) { - $GLOBALS['TCA']['sys_file_metadata']['columns']['fe_groups']['config']['foreign_table_where'] = ' AND fe_groups.sys_language_uid IN (-1,0) ORDER BY fe_groups.title'; -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_template.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_template.php deleted file mode 100644 index 2dabbf6..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/sys_template.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -defined('TYPO3') or die(); - -// Configure extension static templates -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('sr_feuser_register', 'Configuration/TypoScript/PluginSetup', 'FE User Registration Setup'); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('sr_feuser_register', 'Configuration/TypoScript/DefaultStyles', 'FE User Registration CSS Styles'); \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/tt_content.php b/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/tt_content.php deleted file mode 100644 index 9090429..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TCA/Overrides/tt_content.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php -defined('TYPO3') or die(); - -$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_excludelist']['sr_feuser_register_pi1'] = 'layout,select_key'; -$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['sr_feuser_register_pi1'] = 'pi_flexform'; -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue('sr_feuser_register_pi1', 'FILE:EXT:sr_feuser_register/Configuration/FlexForms/flexform_ds_pi1.xml'); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin(array('LLL:EXT:sr_feuser_register/Resources/Private/Language/locallang_db.xlf:tt_content.list_type', 'sr_feuser_register_pi1'), 'list_type', 'sr_feuser_register'); - -$GLOBALS['TCA']['tt_content']['columns']['fe_group']['config']['foreign_table_where'] = ' AND fe_groups.sys_language_uid IN (-1,0) ORDER BY fe_groups.title'; \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/DefaultStyles/setup.typoscript b/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/DefaultStyles/setup.typoscript deleted file mode 100644 index 325f966..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/DefaultStyles/setup.typoscript +++ /dev/null @@ -1,3 +0,0 @@ -# Include default styles for SrFeuserRegister - -page.includeCSS.tx_srfeuserregister = EXT:sr_feuser_register/Resources/Public/StyleSheets/default.css \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/constants.typoscript b/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/constants.typoscript deleted file mode 100644 index df1a3fa..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/constants.typoscript +++ /dev/null @@ -1,239 +0,0 @@ -plugin.tx_srfeuserregister_pi1 { - - # cat=plugin.tx_srfeuserregister_pi1/file; type=file[html,htm,tmpl,txt]; label= Template File: HTML-template file - file.templateFile = EXT:sr_feuser_register/Resources/Private/Templates/RegisterHtmlTemplate.html - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Force file deletion: On record deletion, related images and files will be deleted even if the record is only marked 'deleted' - forceFileDelete = 1 - - # cat=plugin.tx_srfeuserregister_pi1/file; type=file[pdf,doc,sxw,txt]; label= Attachment file: File to be attached to the confirmation email. - file.attachmentFile = EXT:sr_feuser_register/Resources/Public/TextFiles/attachment.txt - - # cat=plugin.tx_srfeuserregister_pi1/file; type=file[pdf,doc,sxw,txt]; label= Terms file: File to be shown as the terms of usage. - file.termsFile = EXT:sr_feuser_register/Resources/Public/TextFiles/terms.txt - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Terms url: Page (id or id,type) or url where the terms of usage are shown. If set, overrides terms file. - termsUrl = - - # cat=plugin.tx_srfeuserregister_pi1/file; type=file[png]; label= Icon used for deletion of uploaded files. - file.icon_delete = EXT:sr_feuser_register/Resources/Public/Images/icon_delete.png - - # cat=plugin.tx_srfeuserregister_pi1/file; type=file[css]; label= HTML emails stylesheet: If HTML emails are enabled, this file contains the CSS stylesheet to be incorporated in these mails. - HTMLMailCSS = EXT:sr_feuser_register/Resources/Public/StyleSheets/htmlmail.css - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable HTML in labels (HTML will not be converted anymore). - allowHtmlInLabels = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Administration email: Enter the administration email address here. This email address will be the sender email and also receive administration notifications. - email = MyTYPO3Site@mydomain.org - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Site name: Enter the name of the registering site here. If set, this will be used as the email address name in the mails sent as well as signature on the mails. - siteName = My TYPO3 Site - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Registration form fields: List of fields to be included on the front end user registration form. - formFields = username, password, gender, first_name, last_name, status, date_of_birth, email, address, city, zone, static_info_country, zip, telephone, fax, language, title, company, www, module_sys_dmail_html, module_sys_dmail_newsletter, module_sys_dmail_category, image, comments, terms_acknowledged, disable - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Required fields: List of fields that must be filled in on the front end user registration form. - requiredFields = username, password, first_name, last_name,email - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Unsubscribe allowed fields: List of fields that are allowed to be updated by an UNSUBSCRIBE link without any login. - unsubscribeAllowedFields = module_sys_dmail_newsletter - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Use email as username: If set, the user email will be used as the username. - useEmailAsUsername = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Generate the username: If set, the username is assumed to be generated. Appropriate hook must be configured. - generateUsername = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Do not enforce username: If set, field username is not forced to be part of formFields and requiredFields. - doNotEnforceUsername = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Authentication code length: Length of the authentication codes. Direct Mail uses 8. - codeLength = 12 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Name of the table: The name is used for the records in the frontend. - tableName = fe_users - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Country onchange attribute: Javascript to execute when the selected country is changed in the country selector box. - onChangeCountryAttribute = this.form['tx_srfeuserregister_pi1[countryChange]'].value = 1; this.form.submit(); - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= List of pid's for Front end user records: If the records edited/created are located on page(s) other than the current, enter the list of pages here. The first page in the list is used for creation. - pid = - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= PID title override: If set, this will be used as the name of the System Folder containing the Front end user records when this name is used in online or email messages. - pidTitleOverride = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Registration page PID: PID of the page on which the plugin is inserted with the intent of serving as the front end user registration page. - registerPID = - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= User groups records PID list: List of page id's on which user groups records may be located. - userGroupsPidList = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Profile editing page PID: PID of the page on which the plugin is inserted with the intent of serving as the front user profile editing page. - editPID = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Confirmation page PID: PID of the page on which the plugin is inserted with the intent of serving as the front end user confirmation page (or setfixed page!). - confirmPID = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Confirmation of invitation page PID: PID of the page on which the plugin is inserted with the intent of serving as the front end user confirmation page (or setfixed page!) when replying to an invitation. - confirmInvitationPID = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Confirmation page Type: Type (or pageNum) of the confirmation page. - confirmType = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Login page PID: PID of the page on which the New login box plugin is inserted with the intent of serving as the front user login page. - loginPID = - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Link to after edit PID: PID of the page to be linked to after the user has completed the edition of his/her profile. - linkToPID = - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Add a button to link to after edit PID: If set, an additional button is displayed on the profile editing page to save the changes and link to the page specified by linkToPID. - linkToPIDAddButton = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Default CODE: Default CODE, when not specified on the inserted plugin record. May be CREATE or EDIT or empty. - defaultCODE = - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable preview on registration: If set, the registration dialogue will include a preview of the front end user data before it is saved. - enablePreviewRegister = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable preview on profile update: If set, the profile update dialogue will include a preview of the front end user data before it is saved. - enablePreviewEdit = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable administrative review: If set, the site administrator will be asked to accept the registration before it becomes enabled. - enableAdminReview = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email confirmation request: If set, an email will be sent to the prospective front end user requesting a confirmation of registration. - enableEmailConfirmation = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on approval: If set, an email will be sent to the front end user when he(she) confirms his(her) registration. - enableEmailOnApprove = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on refusal: If set, an email will be sent to the prospective front end user when he refuses to confirm his(her) registration. - enableEmailOnRefuse = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on denial: If set, an email will be sent to the prospective front end user when the site administrator refuses to confirm his(her) registration. - enableEmailOnAdminRefuse = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on registration: If set, an email will be sent to the front end user confirming his(her) registration. This is ignored if email confirmation request is enabled. - enableEmailOnRegister = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on profile update: If set to 1, an email will be sent to the front end user to confirm the update of his profile. - enableEmailOnUpdate = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on delete: If set, an email will be sent to the front end user to confirm the deletion of his(her) account. - enableEmailOnDelete = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable email on unsubscribe: If set, an email will be sent to the front end user end its subscription to newsletters through a link from a mailing application. - enableEmailOnUnsubscribe = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on confirmation request: If set, an email will be sent to the site administration when a request for confirmation of registration is sent to a user. - enableAdminNotifyConfirmation = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on approval: If set, an email will be sent to the site administration when a user confirms his(her) registration. - enableAdminNotifyOnApprove = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on refusal: If set, an email will be sent to the site administration when a user refuses to confirm his(her) registration. - enableAdminNotifyOnRefuse = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on registration: If set, an email will be sent to the site administration when a user registers. This is ignored if email confirmation request is enabled. - enableAdminNotifyOnRegister = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=int[0-2]; label= Enable admin notification on update: If set, an email will be sent to the site administration when a user updates his(her) profile. If set to 2, only the changed fields will be sent. - enableAdminNotifyOnUpdate = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on deletion: If set, an email will be sent to the site administration when a user deletes his(her) account. - enableAdminNotifyOnDelete = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on entering: If set, an email will be sent to the site administration when a user clicks on the link to log in. - enableAdminNotifyOnEnter = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on approval by admin: If set, an email will be sent to the site administration when a registration is accepted by the administration. - enableAdminNotifyOnAdminAccept = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable admin notification on refusal by admin: If set, an email will be sent to the site administration when a registration is refused by the administration. - enableAdminNotifyOnAdminRefuse = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable HTML emails: If set, emails sent to the front end user will be sent in HTML format. - enableHTMLMail = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable HTML email attachment: If set, the specified attachment file will be attached to the confirmation HTML email. - enableEmailAttachment = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable auto-login on confirmation: If set, the user will be automatically logged in upon confirmation of his(her) registration. - enableAutoLoginOnConfirmation = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable auto-login on account creation: If set and if email confirmation is not set, the user will be automatically logged in upon creation of his(her) account. - enableAutoLoginOnCreate = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= Redirect_url on login: Url to which the user may be redirected to upon login, when auto login is enabled. - autoLoginRedirect_url = - - # cat=plugin.tx_srfeuserregister_pi1//; type=boolean; label= Direct Mail checked upon registration: The checkboxes for Direct Mail categories will be checked by default if you set this. - dmailCheckedUponRegistration = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= User group(s) upon registration: The value of the user group field. Must be a list of integers WITHOUT spaces between the comma separated values! Furthermore these integers MUST belong to actual fe_groups records! - userGroupUponRegistration = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= User group(s) after confirmation: The value of the user group(s) assigned to the front end user after receipt of his(her) confirmation. - userGroupAfterConfirmation = 1 - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= User group(s) after acceptation: The value of the user group(s) assigned to the front end user after acceptation of his(her) registration when the administrative review is enabled. - userGroupAfterAcceptation = 1 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Allow selection of usergroup on registration: If set, the user may select to adhere to user group(s) when registrating. - allowUserGroupSelection = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Allow selection of usergroup on edition: If set, the user may edit the list of user groups to which he(she) belongs. - allowUserGroupUpdate = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Allow selection of multiple usergroups: If set, the user may select to adhere to multiple user groups. - allowMultipleUserGroupSelection = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=string; label= Allowed user groups: Comma separated list of user groups to be selectable. If 'ALL', then all groups are allowed. - allowedUserGroups = ALL - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=string; label= Allowed user subgroups: Comma separated list of subgroups from which all user groups shall be selectable. The user groups from allowedUserGroups shall be added also. - allowedSubgroups = - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=string; label= Denied user groups: Comma separated list of user groups to be never selectable. These user groups supersede the user groups resulting from allowedUserGroups and allowedSubgroups. - deniedUserGroups = - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Keep unselectable user groups: If set then the user groups that the TYPO3 admin has assigned are not removed after editing. Also applies to any allowed user groups when the field is not editable. - keepUnselectableUserGroups = 0 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Minimum password length: The minimum number of characters that the password must contain. - passwordAtLeast = 5 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Maximum password length: The maximum number of characters that the password may contain. - passwordAtMost = 40 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Minimum username length: The minimum number of characters that the username must contain. - usernameAtLeast = 6 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Maximum username length: The maximum number of characters that the username may contain. - usernameAtMost = 50 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Maximum name length: The maximum number of characters that the name of the front end user may contain. - nameAtMost = 80 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label= Number of images: Number of images that may be uploaded (should be smaller than 7). - maxImages = 6 - - # cat=plugin.tx_srfeuserregister_pi1//; type=options[formal,informal]; label= Salutation mode to use: Possible value are 'formal' or 'informal'. - salutation = formal - - # cat=plugin.tx_srfeuserregister_pi1//; type=string; label= PID list for Direct Mail categories: The Direct mail categories used by the plugin will be restricted to those found in these PID's. - module_sys_dmail_category_PIDLIST = - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label=Use short URL's: If set, the use of short URL's in email messages sent to users is enabled. - useShortUrls = 1 - - # cat=plugin.tx_srfeuserregister_pi1//; type=int+; label=Short URL cache lifespan: Number of days that short URL's will be kept in the DB. After this delay, the short URL's will be removed. Confirmation URL's included in email messages older than this number of days will not work. - shortUrlLife = 30 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Enable localization: If set, only localized records are shown. - useLocalization = 0 - - # cat=plugin.tx_srfeuserregister_pi1/enable; type=boolean; label= Local country: If set, the country names are shown in their local languages - useLocalCountry = 0 -} \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/setup.typoscript b/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/setup.typoscript deleted file mode 100644 index db82c97..0000000 --- a/typo3conf/ext/sr_feuser_register/Configuration/TypoScript/PluginSetup/setup.typoscript +++ /dev/null @@ -1,271 +0,0 @@ -plugin.tx_srfeuserregister_pi1 = USER_INT -plugin.tx_srfeuserregister_pi1 { - userFunc = SJBR\SrFeuserRegister\Controller\RegisterPluginController->main - table.name = {$plugin.tx_srfeuserregister_pi1.tableName} - - templateFile = {$plugin.tx_srfeuserregister_pi1.file.templateFile} - ## The icon is in a fixed dimension and will not grow if the text gets larger - icon_delete = {$plugin.tx_srfeuserregister_pi1.file.icon_delete} - - fe_userOwnSelf = 1 - fe_userEditSelf = 1 - delete = 1 - allowHtmlInLabels = {$plugin.tx_srfeuserregister_pi1.allowHtmlInLabels} - pid = {$plugin.tx_srfeuserregister_pi1.pid} - pidTitleOverride = {$plugin.tx_srfeuserregister_pi1.pidTitleOverride} - userGroupsPidList = {$plugin.tx_srfeuserregister_pi1.userGroupsPidList} - registerPID = {$plugin.tx_srfeuserregister_pi1.registerPID} - editPID = {$plugin.tx_srfeuserregister_pi1.editPID} - confirmPID = {$plugin.tx_srfeuserregister_pi1.confirmPID} - confirmInvitationPID = {$plugin.tx_srfeuserregister_pi1.confirmInvitationPID} - confirmType = {$plugin.tx_srfeuserregister_pi1.confirmType} - loginPID = {$plugin.tx_srfeuserregister_pi1.loginPID} - linkToPID = {$plugin.tx_srfeuserregister_pi1.linkToPID} - linkToPIDAddButton = {$plugin.tx_srfeuserregister_pi1.linkToPIDAddButton} - module_sys_dmail_category_PIDLIST = {$plugin.tx_srfeuserregister_pi1.module_sys_dmail_category_PIDLIST} - defaultCODE = {$plugin.tx_srfeuserregister_pi1.defaultCODE} - useShortUrls = {$plugin.tx_srfeuserregister_pi1.useShortUrls} - shortUrlLife = {$plugin.tx_srfeuserregister_pi1.shortUrlLife} - useLocalization = {$plugin.tx_srfeuserregister_pi1.useLocalization} - useLocalCountry = {$plugin.tx_srfeuserregister_pi1.useLocalCountry} - - onChangeCountryAttribute = {$plugin.tx_srfeuserregister_pi1.onChangeCountryAttribute} - - allowMultipleUserGroupSelection = {$plugin.tx_srfeuserregister_pi1.allowMultipleUserGroupSelection} - - salutation = {$plugin.tx_srfeuserregister_pi1.salutation} - - # you may modify here the conditions under which an attachment file will be added to the email - addAttachment = {$plugin.tx_srfeuserregister_pi1.enableEmailAttachment} - addAttachment.cmd = setfixed - addAttachment.sFK = APPROVE - addAttachment.file = {$plugin.tx_srfeuserregister_pi1.file.attachmentFile} - - terms.file = {$plugin.tx_srfeuserregister_pi1.file.termsFile} - terms.url = {$plugin.tx_srfeuserregister_pi1.termsUrl} - - displayRequired = TEXT - displayRequired { - value = * - wrap = <span>|</span> - } - - create = 1 - create { - preview = {$plugin.tx_srfeuserregister_pi1.enablePreviewRegister} - fields = {$plugin.tx_srfeuserregister_pi1.formFields} - required = {$plugin.tx_srfeuserregister_pi1.requiredFields} - useEmailAsUsername = {$plugin.tx_srfeuserregister_pi1.useEmailAsUsername} - generateUsername = {$plugin.tx_srfeuserregister_pi1.generateUsername} - doNotEnforceUsername = {$plugin.tx_srfeuserregister_pi1.doNotEnforceUsername} - allowUserGroupSelection = {$plugin.tx_srfeuserregister_pi1.allowUserGroupSelection} - allowedUserGroups = {$plugin.tx_srfeuserregister_pi1.allowedUserGroups} - allowedSubgroups = {$plugin.tx_srfeuserregister_pi1.allowedSubgroups} - deniedUserGroups = {$plugin.tx_srfeuserregister_pi1.deniedUserGroups} - - defaultValues { - module_sys_dmail_html = {$plugin.tx_srfeuserregister_pi1.dmailCheckedUponRegistration} - usergroup = {$plugin.tx_srfeuserregister_pi1.userGroupUponRegistration} - disable = {$plugin.tx_srfeuserregister_pi1.enableEmailConfirmation} - by_invitation = 0 - } - - overrideValues { - usergroup = {$plugin.tx_srfeuserregister_pi1.userGroupUponRegistration} - disable = {$plugin.tx_srfeuserregister_pi1.enableEmailConfirmation} - by_invitation = 0 - } - - evalValues { - password = twice, atLeast[{$plugin.tx_srfeuserregister_pi1.passwordAtLeast}], atMost[{$plugin.tx_srfeuserregister_pi1.passwordAtMost}] - username = uniqueLocal, atLeast[{$plugin.tx_srfeuserregister_pi1.usernameAtLeast}], atMost[{$plugin.tx_srfeuserregister_pi1.usernameAtMost}] - email = email,atMost[255],uniqueLocal - gender = - name = atMost[{$plugin.tx_srfeuserregister_pi1.nameAtMost}] - first_name = atMost[50] - middle_name = atMost[50] - last_name = atMost[50] - date_of_birth = date - company = atMost[50] - city = atMost[40] - zip = atMost[20] - telephone = atMost[25] - fax = atMost[25] - image = upload[{$plugin.tx_srfeuserregister_pi1.maxImages}] - title = - address = - www = wwwURL - comments = - status = - module_sys_dmail_category = - module_sys_dmail_html = - module_sys_dmail_newsletter = - usergroup = - by_invitation = - captcha_response = - } - } - - select { - email { - module_sys_dmail_category.wrap = | <br/> - } - } - - setfixed = 0 - setfixed.APPROVE { - _FIELDLIST = uid,pid,usergroup - usergroup = {$plugin.tx_srfeuserregister_pi1.userGroupAfterConfirmation} - disable = {$plugin.tx_srfeuserregister_pi1.enableAdminReview} - } - setfixed.DELETE { - _FIELDLIST = uid,pid - } - setfixed.ACCEPT { - _FIELDLIST = uid,pid,usergroup - usergroup = {$plugin.tx_srfeuserregister_pi1.userGroupAfterAcceptation} - disable = 0 - } - setfixed.REFUSE < .setfixed.DELETE - setfixed.ENTER < .setfixed.ACCEPT - - enableEmailConfirmation = {$plugin.tx_srfeuserregister_pi1.enableEmailConfirmation} - enableAutoLoginOnConfirmation = {$plugin.tx_srfeuserregister_pi1.enableAutoLoginOnConfirmation} - enableAutoLoginOnCreate = {$plugin.tx_srfeuserregister_pi1.enableAutoLoginOnCreate} - enableAdminReview = {$plugin.tx_srfeuserregister_pi1.enableAdminReview} - autoLoginRedirect_url = {$plugin.tx_srfeuserregister_pi1.autoLoginRedirect_url} - - unsubscribeAllowedFields = {$plugin.tx_srfeuserregister_pi1.unsubscribeAllowedFields} - authcodeFields.codeLength = {$plugin.tx_srfeuserregister_pi1.codeLength} - - invite < .create - invite { - defaultValues { - by_invitation = 1 - } - overrideValues { - by_invitation = 1 - } - } - - edit < .create - edit { - preview = {$plugin.tx_srfeuserregister_pi1.enablePreviewEdit} - allowUserGroupSelection = {$plugin.tx_srfeuserregister_pi1.allowUserGroupUpdate} - keepUnselectableUserGroups = {$plugin.tx_srfeuserregister_pi1.keepUnselectableUserGroups} - fields := removeFromList(username) - required := removeFromList(username,password) - defaultValues { - disable = 0 - usergroup > - module_sys_dmail_html > - module_sys_dmail_category > - module_sys_dmail_newsletter > - by_invitation > - } - - overrideValues { - username = - usergroup > - disable = 0 - by_invitation > - } - - evalValues { - username = unsetEmpty - password := addToList(unsetEmpty) - } - } - - password < .edit - password { - preview = 0 - fields = password - required = password - defaultValues > - overrideValues > - evalValues > - evalValues { - password < plugin.tx_srfeuserregister_pi1.edit.evalValues.password - } - } - - forceFileDelete = {$plugin.tx_srfeuserregister_pi1.forceFileDelete} - - parseValues { - username = nospace,trim - email = trim - password = trim - gender = int - name = trim - first_name = trim - middle_name = trim - last_name = trim - date_of_birth = date - address = trim - title = trim - company = trim - house_no = trim - city = trim - country = trim - static_info_country = trim - zip = trim - telephone = trim - fax = trim - image = files - module_sys_dmail_category = multiple - status = int - terms_acknowledged = int - usergroup = multiple - www = wwwURL - comments = trim - } - - parseFromDBValues { - date_of_birth = date - } - parseToDBValues { - date_of_birth = date - image = deleteUnreferencedFiles - } - - email.from = {$plugin.tx_srfeuserregister_pi1.email} - email.fromName = {$plugin.tx_srfeuserregister_pi1.siteName} - email.admin = {$plugin.tx_srfeuserregister_pi1.email} - ## replyTo email for messages sent to user - email.replyToAdmin = {$plugin.tx_srfeuserregister_pi1.email} - email.field = email - ## replyTo email for messages sent to admin - email.replyTo = user - email.HTMLMail = {$plugin.tx_srfeuserregister_pi1.enableHTMLMail} - email.HTMLMailCSS = {$plugin.tx_srfeuserregister_pi1.HTMLMailCSS} - email.CREATE_SAVED = {$plugin.tx_srfeuserregister_pi1.enableEmailOnRegister} - email.EDIT_SAVED = {$plugin.tx_srfeuserregister_pi1.enableEmailOnUpdate} - email.DELETE_SAVED = {$plugin.tx_srfeuserregister_pi1.enableEmailOnDelete} - email.SETFIXED_APPROVE = {$plugin.tx_srfeuserregister_pi1.enableEmailOnApprove} - email.SETFIXED_APPROVE_REVIEW = {$plugin.tx_srfeuserregister_pi1.enableEmailOnApprove} - email.SETFIXED_DELETE = {$plugin.tx_srfeuserregister_pi1.enableEmailOnRefuse} - email.SETFIXED_ACCEPT = 1 - email.SETFIXED_REFUSE = {$plugin.tx_srfeuserregister_pi1.enableEmailOnAdminRefuse} - email.SETFIXED_UNSUBSCRIBE = {$plugin.tx_srfeuserregister_pi1.enableEmailOnUnsubscribe} - - notify.CREATE_SAVED = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnRegister} - notify.EDIT_SAVED = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnUpdate} - notify.DELETE_SAVED = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnDelete} - notify.SETFIXED_CREATE = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyConfirmation} - notify.SETFIXED_CREATE_REVIEW = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyConfirmation} - notify.SETFIXED_INVITE = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyConfirmation} - notify.SETFIXED_APPROVE = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnApprove} - notify.SETFIXED_APPROVE_REVIEW = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnApprove} - notify.SETFIXED_DELETE = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnRefuse} - notify.SETFIXED_ENTER = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnEnter} - notify.SETFIXED_ACCEPT = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnAdminAccept} - notify.SETFIXED_REFUSE = {$plugin.tx_srfeuserregister_pi1.enableAdminNotifyOnAdminRefuse} - - _DEFAULT_PI_VARS { - } -} -plugin.tx_srfeuserregister.settings { - salutation = {$plugin.tx_srfeuserregister_pi1.salutation} -} -tt_content.list.20.sr_feuser_register_pi1 = < plugin.tx_srfeuserregister_pi1 \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/.htaccess b/typo3conf/ext/sr_feuser_register/Resources/Private/.htaccess deleted file mode 100644 index 3418e55..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang.xlf b/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang.xlf deleted file mode 100644 index 577299a..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang.xlf +++ /dev/null @@ -1,1589 +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-10-13T20:54:21Z" product-name="sr_feuser_register"> - <header/> - <body> - <trans-unit id="invalidToken" xml:space="preserve"> - <source>This access is not authorized.</source> - </trans-unit> - <trans-unit id="unsupported" xml:space="preserve"> - <source>unsupported</source> - </trans-unit> - <trans-unit id="username" xml:space="preserve"> - <source>Preferred username</source> - </trans-unit> - <trans-unit id="tooltip_username" xml:space="preserve"> - <source>Enter the username you want to use to login.</source> - </trans-unit> - <trans-unit id="tooltip_username_informal" xml:space="preserve"> - <source>Enter the username you want to use to login.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_username" xml:space="preserve"> - <source>Enter a username for the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_username_informal" xml:space="preserve"> - <source>Enter a username for the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_login_username" xml:space="preserve"> - <source>Enter your username.</source> - </trans-unit> - <trans-unit id="tooltip_login_username_informal" xml:space="preserve"> - <source>Enter your username.</source> - </trans-unit> - <trans-unit id="missing_username" xml:space="preserve"> - <source>Enter a username!</source> - </trans-unit> - <trans-unit id="missing_username_informal" xml:space="preserve"> - <source>Enter a username!</source> - </trans-unit> - <trans-unit id="password" xml:space="preserve"> - <source>Password</source> - </trans-unit> - <trans-unit id="new_password" xml:space="preserve"> - <source>New password, if desired</source> - </trans-unit> - <trans-unit id="tooltip_password" xml:space="preserve"> - <source>Enter the password you want to use to login.</source> - </trans-unit> - <trans-unit id="tooltip_password_informal" xml:space="preserve"> - <source>Enter the password you want to use to login.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_password" xml:space="preserve"> - <source>Enter a password for the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_password_informal" xml:space="preserve"> - <source>Enter a password for the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_login_password" xml:space="preserve"> - <source>Enter your password.</source> - </trans-unit> - <trans-unit id="tooltip_login_password_informal" xml:space="preserve"> - <source>Enter your password.</source> - </trans-unit> - <trans-unit id="password_again" xml:space="preserve"> - <source>Repeat Password</source> - </trans-unit> - <trans-unit id="tooltip_password_again" xml:space="preserve"> - <source>Enter the same password a second time.</source> - </trans-unit> - <trans-unit id="tooltip_password_again_informal" xml:space="preserve"> - <source>Enter the same password a second time.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_password_again" xml:space="preserve"> - <source>Enter the same password a second time.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_password_again_informal" xml:space="preserve"> - <source>Enter the same password a second time.</source> - </trans-unit> - <trans-unit id="missing_password" xml:space="preserve"> - <source>Please enter a password!</source> - </trans-unit> - <trans-unit id="missing_password_informal" xml:space="preserve"> - <source>Please enter a password!</source> - </trans-unit> - <trans-unit id="usergroup" xml:space="preserve"> - <source>User group</source> - </trans-unit> - <trans-unit id="tooltip_usergroup" xml:space="preserve"> - <source>Select the group(s) to which you wish to belong.</source> - </trans-unit> - <trans-unit id="tooltip_usergroup_informal" xml:space="preserve"> - <source>Select the group(s) to which you wish to belong.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_usergroup" xml:space="preserve"> - <source>Select the group(s) to which the invited person will initially belong.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_usergroup_informal" xml:space="preserve"> - <source>Select the group(s) to which the invited person will initially belong.</source> - </trans-unit> - <trans-unit id="missing_usergroup" xml:space="preserve"> - <source>Please select a user group!</source> - </trans-unit> - <trans-unit id="missing_usergroup_informal" xml:space="preserve"> - <source>Please select a user group!</source> - </trans-unit> - <trans-unit id="missing_invitation_usergroup" xml:space="preserve"> - <source>Please select a user group!</source> - </trans-unit> - <trans-unit id="missing_invitation_usergroup_informal" xml:space="preserve"> - <source>Please select a user group!</source> - </trans-unit> - <trans-unit id="name" xml:space="preserve"> - <source>Name</source> - </trans-unit> - <trans-unit id="tooltip_name" xml:space="preserve"> - <source>Enter your full name.</source> - </trans-unit> - <trans-unit id="tooltip_name_informal" xml:space="preserve"> - <source>Enter your full name.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_name" xml:space="preserve"> - <source>Enter the full name of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_name_informal" xml:space="preserve"> - <source>Enter the full name of the invited person.</source> - </trans-unit> - <trans-unit id="missing_name" xml:space="preserve"> - <source>Please enter your name!</source> - </trans-unit> - <trans-unit id="missing_name_informal" xml:space="preserve"> - <source>Please enter your name!</source> - </trans-unit> - <trans-unit id="missing_invitation_name" xml:space="preserve"> - <source>Please enter a name!</source> - </trans-unit> - <trans-unit id="missing_invitation_name_informal" xml:space="preserve"> - <source>Please enter a name!</source> - </trans-unit> - <trans-unit id="first_name" xml:space="preserve"> - <source>First name</source> - </trans-unit> - <trans-unit id="tooltip_first_name" xml:space="preserve"> - <source>Enter your first name.</source> - </trans-unit> - <trans-unit id="tooltip_first_name_informal" xml:space="preserve"> - <source>Enter your first name.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_first_name" xml:space="preserve"> - <source>Enter the first name of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_first_name_informal" xml:space="preserve"> - <source>Enter the first name of the invited person.</source> - </trans-unit> - <trans-unit id="missing_first_name" xml:space="preserve"> - <source>Please enter your first name!</source> - </trans-unit> - <trans-unit id="missing_first_name_informal" xml:space="preserve"> - <source>Please enter your first name!</source> - </trans-unit> - <trans-unit id="missing_invitation_first_name" xml:space="preserve"> - <source>Please enter a first name!</source> - </trans-unit> - <trans-unit id="missing_invitation_first_name_informal" xml:space="preserve"> - <source>Please enter a first name!</source> - </trans-unit> - <trans-unit id="middle_name" xml:space="preserve"> - <source>Middle name</source> - </trans-unit> - <trans-unit id="tooltip_middle_name" xml:space="preserve"> - <source>Enter your middle name.</source> - </trans-unit> - <trans-unit id="tooltip_middle_name_informal" xml:space="preserve"> - <source>Enter your middle name.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_middle_name" xml:space="preserve"> - <source>Enter the middle name of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_middle_name_informal" xml:space="preserve"> - <source>Enter the middle name of the invited person.</source> - </trans-unit> - <trans-unit id="missing_middle_name" xml:space="preserve"> - <source>Please enter your middle name!</source> - </trans-unit> - <trans-unit id="missing_middle_name_informal" xml:space="preserve"> - <source>Please enter your middle name!</source> - </trans-unit> - <trans-unit id="missing_invitation_middle_name" xml:space="preserve"> - <source>Please enter a middle name!</source> - </trans-unit> - <trans-unit id="missing_invitation_middle_name_informal" xml:space="preserve"> - <source>Please enter a middle name!</source> - </trans-unit> - <trans-unit id="last_name" xml:space="preserve"> - <source>Last name</source> - </trans-unit> - <trans-unit id="tooltip_last_name" xml:space="preserve"> - <source>Enter your surname.</source> - </trans-unit> - <trans-unit id="tooltip_last_name_informal" xml:space="preserve"> - <source>Enter your surname.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_last_name" xml:space="preserve"> - <source>Enter the surname of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_last_name_informal" xml:space="preserve"> - <source>Enter the surname of the invited person.</source> - </trans-unit> - <trans-unit id="missing_last_name" xml:space="preserve"> - <source>Please enter your surname!</source> - </trans-unit> - <trans-unit id="missing_last_name_informal" xml:space="preserve"> - <source>Please enter your surname!</source> - </trans-unit> - <trans-unit id="missing_invitation_last_name" xml:space="preserve"> - <source>Please enter a surname!</source> - </trans-unit> - <trans-unit id="missing_invitation_last_name_informal" xml:space="preserve"> - <source>Please enter a surname!</source> - </trans-unit> - <trans-unit id="tooltip_status" xml:space="preserve"> - <source>Select in the list the status that corresponds to yours.</source> - </trans-unit> - <trans-unit id="tooltip_status_informal" xml:space="preserve"> - <source>Select in the list the status that corresponds to yours.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_status" xml:space="preserve"> - <source>Select in the list the status that corresponds to the status of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_status_informal" xml:space="preserve"> - <source>Select in the list the status that corresponds to the status of the invited person.</source> - </trans-unit> - <trans-unit id="date_of_birth" xml:space="preserve"> - <source>Date of birth</source> - </trans-unit> - <trans-unit id="tooltip_date_of_birth" xml:space="preserve"> - <source>Enter your date of birth.</source> - </trans-unit> - <trans-unit id="tooltip_date_of_birth_informal" xml:space="preserve"> - <source>Enter your date of birth.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_date_of_birth" xml:space="preserve"> - <source>Enter the date of birth of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_date_of_birth_informal" xml:space="preserve"> - <source>Enter the date of birth of the invited person.</source> - </trans-unit> - <trans-unit id="missing_date_of_birth" xml:space="preserve"> - <source>Please enter your date of birth!</source> - </trans-unit> - <trans-unit id="missing_date_of_birth_informal" xml:space="preserve"> - <source>Please enter your date of birth!</source> - </trans-unit> - <trans-unit id="missing_invitation_date_of_birth" xml:space="preserve"> - <source>Please enter a date of birth!</source> - </trans-unit> - <trans-unit id="missing_invitation_date_of_birth_informal" xml:space="preserve"> - <source>Please enter a date of birth!</source> - </trans-unit> - <trans-unit id="missing_captcha_response" xml:space="preserve"> - <source>Please enter the captcha phrase!</source> - </trans-unit> - <trans-unit id="missing_captcha_response_informal" xml:space="preserve"> - <source>Please enter the captcha phrase!</source> - </trans-unit> - <trans-unit id="address" xml:space="preserve"> - <source>Address</source> - </trans-unit> - <trans-unit id="tooltip_address" xml:space="preserve"> - <source>Enter your address (number, street, apt.).</source> - </trans-unit> - <trans-unit id="tooltip_address_informal" xml:space="preserve"> - <source>Enter your address (number, street, apt.).</source> - </trans-unit> - <trans-unit id="tooltip_invitation_address" xml:space="preserve"> - <source>Enter the address (number, street, apt.).</source> - </trans-unit> - <trans-unit id="tooltip_invitation_address_informal" xml:space="preserve"> - <source>Enter the address (number, street, apt.).</source> - </trans-unit> - <trans-unit id="missing_address" xml:space="preserve"> - <source>Please enter your address!</source> - </trans-unit> - <trans-unit id="missing_address_informal" xml:space="preserve"> - <source>Please enter your address!</source> - </trans-unit> - <trans-unit id="missing_invitation_address" xml:space="preserve"> - <source>Please enter an address!</source> - </trans-unit> - <trans-unit id="missing_invitation_address_informal" xml:space="preserve"> - <source>Please enter an address!</source> - </trans-unit> - <trans-unit id="house_no" xml:space="preserve"> - <source>House number</source> - </trans-unit> - <trans-unit id="tooltip_house_no" xml:space="preserve"> - <source>Enter your house number.</source> - </trans-unit> - <trans-unit id="tooltip_house_no_informal" xml:space="preserve"> - <source>Enter your house number.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_house_no" xml:space="preserve"> - <source>Enter your house number.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_house_no_informal" xml:space="preserve"> - <source>Enter your house number.</source> - </trans-unit> - <trans-unit id="missing_house_no" xml:space="preserve"> - <source>Please enter your house number!</source> - </trans-unit> - <trans-unit id="missing_house_no_informal" xml:space="preserve"> - <source>Please enter your house number!</source> - </trans-unit> - <trans-unit id="missing_invitation_house_no" xml:space="preserve"> - <source>Please enter a house number!</source> - </trans-unit> - <trans-unit id="missing_invitation_house_no_informal" xml:space="preserve"> - <source>Please enter a house number!</source> - </trans-unit> - <trans-unit id="city" xml:space="preserve"> - <source>City</source> - </trans-unit> - <trans-unit id="tooltip_city" xml:space="preserve"> - <source>Enter the name of the city or village.</source> - </trans-unit> - <trans-unit id="tooltip_city_informal" xml:space="preserve"> - <source>Enter the name of your city or village.</source> - </trans-unit> - <trans-unit id="missing_city" xml:space="preserve"> - <source>Please enter the name of your city!</source> - </trans-unit> - <trans-unit id="missing_city_informal" xml:space="preserve"> - <source>Please enter the name of your city!</source> - </trans-unit> - <trans-unit id="missing_invitation_city" xml:space="preserve"> - <source>Please enter the name of a city!</source> - </trans-unit> - <trans-unit id="missing_invitation_city_informal" xml:space="preserve"> - <source>Please enter the name of a city!</source> - </trans-unit> - <trans-unit id="zone" xml:space="preserve"> - <source>County/province</source> - </trans-unit> - <trans-unit id="tooltip_zone" xml:space="preserve"> - <source>Select your County or Province in this list.</source> - </trans-unit> - <trans-unit id="tooltip_zone_informal" xml:space="preserve"> - <source>Select your County or Province in this list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_zone" xml:space="preserve"> - <source>Select the County or Province in this list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_zone_informal" xml:space="preserve"> - <source>Select the County or Province in this list.</source> - </trans-unit> - <trans-unit id="missing_zone" xml:space="preserve"> - <source>Please select your County or Province!</source> - </trans-unit> - <trans-unit id="missing_zone_informal" xml:space="preserve"> - <source>Please select your County or Province!</source> - </trans-unit> - <trans-unit id="missing_invitation_zone" xml:space="preserve"> - <source>Please select a County or Province!</source> - </trans-unit> - <trans-unit id="missing_invitation_zone_informal" xml:space="preserve"> - <source>Please select a County or Province!</source> - </trans-unit> - <trans-unit id="country" xml:space="preserve"> - <source>Country</source> - </trans-unit> - <trans-unit id="tooltip_country" xml:space="preserve"> - <source>Enter the name of your country.</source> - </trans-unit> - <trans-unit id="tooltip_country_informal" xml:space="preserve"> - <source>Enter the name of your country.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_country" xml:space="preserve"> - <source>Enter the name of the country.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_country_informal" xml:space="preserve"> - <source>Enter the name of the country.</source> - </trans-unit> - <trans-unit id="missing_country" xml:space="preserve"> - <source>Please enter the name of your country!</source> - </trans-unit> - <trans-unit id="missing_country_informal" xml:space="preserve"> - <source>Please enter the name of your country!</source> - </trans-unit> - <trans-unit id="missing_invitation_country" xml:space="preserve"> - <source>Please enter the name of the country!</source> - </trans-unit> - <trans-unit id="missing_invitation_country_informal" xml:space="preserve"> - <source>Please enter the name of the country!</source> - </trans-unit> - <trans-unit id="zip" xml:space="preserve"> - <source>Postal code</source> - </trans-unit> - <trans-unit id="tooltip_zip" xml:space="preserve"> - <source>Enter your Postcode.</source> - </trans-unit> - <trans-unit id="tooltip_zip_informal" xml:space="preserve"> - <source>Enter your Postcode.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_zip" xml:space="preserve"> - <source>Enter the Postcode.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_zip_informal" xml:space="preserve"> - <source>Enter the Postcode.</source> - </trans-unit> - <trans-unit id="missing_zip" xml:space="preserve"> - <source>Please enter your Postcode!</source> - </trans-unit> - <trans-unit id="missing_zip_informal" xml:space="preserve"> - <source>Please enter your Postcode!</source> - </trans-unit> - <trans-unit id="missing_invitation_zip" xml:space="preserve"> - <source>Please enter a Postcode!</source> - </trans-unit> - <trans-unit id="static_info_country" xml:space="preserve"> - <source>Country</source> - </trans-unit> - <trans-unit id="tooltip_static_info_country" xml:space="preserve"> - <source>Select your country in the list.</source> - </trans-unit> - <trans-unit id="tooltip_static_info_country_informal" xml:space="preserve"> - <source>Select your country in the list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_static_info_country" xml:space="preserve"> - <source>Select the country in the list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_static_info_country_informal" xml:space="preserve"> - <source>Select the country in the list.</source> - </trans-unit> - <trans-unit id="missing_static_info_country" xml:space="preserve"> - <source>Please select your country!</source> - </trans-unit> - <trans-unit id="missing_static_info_country_informal" xml:space="preserve"> - <source>Please select your country!</source> - </trans-unit> - <trans-unit id="missing_invitation_static_info_country" xml:space="preserve"> - <source>Please select a country!</source> - </trans-unit> - <trans-unit id="missing_invitation_static_info_country_informal" xml:space="preserve"> - <source>Please select a country!</source> - </trans-unit> - <trans-unit id="telephone" xml:space="preserve"> - <source>Telephone</source> - </trans-unit> - <trans-unit id="tooltip_telephone" xml:space="preserve"> - <source>Enter your phone number.</source> - </trans-unit> - <trans-unit id="tooltip_telephone_informal" xml:space="preserve"> - <source>Enter your phone number.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_telephone" xml:space="preserve"> - <source>Enter the phone number of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_telephone_informal" xml:space="preserve"> - <source>Enter the phone number of the invited person.</source> - </trans-unit> - <trans-unit id="missing_telephone" xml:space="preserve"> - <source>Please enter your phone number!</source> - </trans-unit> - <trans-unit id="missing_telephone_informal" xml:space="preserve"> - <source>Please enter your phone number!</source> - </trans-unit> - <trans-unit id="missing_invitation_telephone" xml:space="preserve"> - <source>Please enter a phone number!</source> - </trans-unit> - <trans-unit id="missing_invitation_telephone_informal" xml:space="preserve"> - <source>Please enter a phone number!</source> - </trans-unit> - <trans-unit id="fax" xml:space="preserve"> - <source>Fax</source> - </trans-unit> - <trans-unit id="tooltip_fax" xml:space="preserve"> - <source>Enter your fax number.</source> - </trans-unit> - <trans-unit id="tooltip_fax_informal" xml:space="preserve"> - <source>Enter your fax number.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_fax" xml:space="preserve"> - <source>Enter the fax number of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_fax_informal" xml:space="preserve"> - <source>Enter the fax number of the invited person.</source> - </trans-unit> - <trans-unit id="missing_fax" xml:space="preserve"> - <source>Please enter your fax number!</source> - </trans-unit> - <trans-unit id="missing_fax_informal" xml:space="preserve"> - <source>Please enter your fax number!</source> - </trans-unit> - <trans-unit id="missing_invitation_fax" xml:space="preserve"> - <source>Please enter a fax number!</source> - </trans-unit> - <trans-unit id="missing_invitation_fax_informal" xml:space="preserve"> - <source>Please enter a fax number!</source> - </trans-unit> - <trans-unit id="email" xml:space="preserve"> - <source>E-mail</source> - </trans-unit> - <trans-unit id="tooltip_email" xml:space="preserve"> - <source>Enter your email address.</source> - </trans-unit> - <trans-unit id="tooltip_email_informal" xml:space="preserve"> - <source>Enter your email address.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_email" xml:space="preserve"> - <source>Enter the email address of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_email_informal" xml:space="preserve"> - <source>Enter the email address of the invited person.</source> - </trans-unit> - <trans-unit id="missing_email" xml:space="preserve"> - <source>A valid e-mail is required.</source> - </trans-unit> - <trans-unit id="missing_email_informal" xml:space="preserve"> - <source>A valid e-mail is required.</source> - </trans-unit> - <trans-unit id="module_sys_dmail_html" xml:space="preserve"> - <source>Receive HTML e-mails?</source> - </trans-unit> - <trans-unit id="module_sys_dmail_html_informal" xml:space="preserve"> - <source>Receive HTML e-mails?</source> - </trans-unit> - <trans-unit id="yes" xml:space="preserve"> - <source>Yes</source> - </trans-unit> - <trans-unit id="no" xml:space="preserve"> - <source>No</source> - </trans-unit> - <trans-unit id="module_sys_dmail_newsletter" xml:space="preserve"> - <source>Receive newsletter?</source> - </trans-unit> - <trans-unit id="module_sys_dmail_newletter_informal" xml:space="preserve"> - <source>Receive newsletter?</source> - </trans-unit> - <trans-unit id="module_sys_dmail_category" xml:space="preserve"> - <source>Receive news on any of these subjects?</source> - </trans-unit> - <trans-unit id="module_sys_dmail_category_informal" xml:space="preserve"> - <source>Receive news on any of these subjects?</source> - </trans-unit> - <trans-unit id="missing_module_sys_dmail_category" xml:space="preserve"> - <source>Please select at least one subject!</source> - </trans-unit> - <trans-unit id="missing_module_sys_dmail_category_informal" xml:space="preserve"> - <source>Please select at least one subject!</source> - </trans-unit> - <trans-unit id="missing_invitation_module_sys_dmail_category" xml:space="preserve"> - <source>Please select at least one subject!</source> - </trans-unit> - <trans-unit id="missing_invitation_module_sys_dmail_category_informal" xml:space="preserve"> - <source>Please select at least one subject!</source> - </trans-unit> - <trans-unit id="language" xml:space="preserve"> - <source>Language</source> - </trans-unit> - <trans-unit id="tooltip_language" xml:space="preserve"> - <source>Select your preferred language in this list.</source> - </trans-unit> - <trans-unit id="tooltip_language_informal" xml:space="preserve"> - <source>Select your preferred language in this list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_language" xml:space="preserve"> - <source>Select the language of the invited person in this list.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_language_informal" xml:space="preserve"> - <source>Select the language of the invited person in this list.</source> - </trans-unit> - <trans-unit id="missing_language" xml:space="preserve"> - <source>Please select your preferred language!</source> - </trans-unit> - <trans-unit id="missing_language_informal" xml:space="preserve"> - <source>Please select your preferred language!</source> - </trans-unit> - <trans-unit id="missing_invitation_language" xml:space="preserve"> - <source>Please select a preferred language!</source> - </trans-unit> - <trans-unit id="missing_invitation_language_informal" xml:space="preserve"> - <source>Please select a preferred language!</source> - </trans-unit> - <trans-unit id="title" xml:space="preserve"> - <source>Title</source> - </trans-unit> - <trans-unit id="tooltip_title" xml:space="preserve"> - <source>Enter the title of your position or profession.</source> - </trans-unit> - <trans-unit id="tooltip_title_informal" xml:space="preserve"> - <source>Enter the title of your position or profession.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_title" xml:space="preserve"> - <source>Enter the title of the invited person.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_title_informal" xml:space="preserve"> - <source>Enter the title of the invited person.</source> - </trans-unit> - <trans-unit id="missing_title" xml:space="preserve"> - <source>Please enter your title!</source> - </trans-unit> - <trans-unit id="missing_title_informal" xml:space="preserve"> - <source>Please enter your title!</source> - </trans-unit> - <trans-unit id="missing_invitation_title" xml:space="preserve"> - <source>Please enter a title!</source> - </trans-unit> - <trans-unit id="missing_invitation_title_informal" xml:space="preserve"> - <source>Please enter a title!</source> - </trans-unit> - <trans-unit id="terms_acknowledged" xml:space="preserve"> - <source>I acknowledge and agree to terms</source> - </trans-unit> - <trans-unit id="terms_acknowledged_informal" xml:space="preserve"> - <source>I acknowledge and agree to terms:</source> - </trans-unit> - <trans-unit id="company" xml:space="preserve"> - <source>Company</source> - </trans-unit> - <trans-unit id="tooltip_company" xml:space="preserve"> - <source>Enter the name of your company or organization.</source> - </trans-unit> - <trans-unit id="tooltip_company_informal" xml:space="preserve"> - <source>Enter the name of your company or organization.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_company" xml:space="preserve"> - <source>Enter the name of the company or organization of the invited person.</source> - </trans-unit> - <trans-unit id="missing_company" xml:space="preserve"> - <source>Please enter the name of your company!</source> - </trans-unit> - <trans-unit id="missing_company_informal" xml:space="preserve"> - <source>Please enter the name of your company!</source> - </trans-unit> - <trans-unit id="missing_invitation_company" xml:space="preserve"> - <source>Please enter the name of a company!</source> - </trans-unit> - <trans-unit id="www" xml:space="preserve"> - <source>Web site</source> - </trans-unit> - <trans-unit id="tooltip_www" xml:space="preserve"> - <source>Enter the address of your website.</source> - </trans-unit> - <trans-unit id="tooltip_www_informal" xml:space="preserve"> - <source>Enter the address of your website.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_www" xml:space="preserve"> - <source>Enter the address of the website of the invited person.</source> - </trans-unit> - <trans-unit id="missing_www" xml:space="preserve"> - <source>Please enter the address of your website!</source> - </trans-unit> - <trans-unit id="missing_www_informal" xml:space="preserve"> - <source>Please enter the address of your website!</source> - </trans-unit> - <trans-unit id="missing_invitation_www" xml:space="preserve"> - <source>Please enter a website address!</source> - </trans-unit> - <trans-unit id="image" xml:space="preserve"> - <source>Photographs</source> - </trans-unit> - <trans-unit id="tooltip_image" xml:space="preserve"> - <source>Enter the path and name of a file or click on the button to browse the files on your computer.</source> - </trans-unit> - <trans-unit id="tooltip_image_informal" xml:space="preserve"> - <source>Enter the path and name of a file or click on the button to browse the files on your computer.</source> - </trans-unit> - <trans-unit id="tooltip_invitation_image" xml:space="preserve"> - <source>Enter the path and name of a file or click on the button to browse the files on your computer.</source> - </trans-unit> - <trans-unit id="missing_image" xml:space="preserve"> - <source>Please enter your photograph!</source> - </trans-unit> - <trans-unit id="missing_image_informal" xml:space="preserve"> - <source>Please enter your photograph!</source> - </trans-unit> - <trans-unit id="missing_invitation_image" xml:space="preserve"> - <source>Please enter a photograph!</source> - </trans-unit> - <trans-unit id="missing_invitation_image_informal" xml:space="preserve"> - <source>Please enter a photograph!</source> - </trans-unit> - <trans-unit id="icon_delete" xml:space="preserve"> - <source>Delete!</source> - </trans-unit> - <trans-unit id="file_view" xml:space="preserve"> - <source>View</source> - </trans-unit> - <trans-unit id="confirm_file_delete" xml:space="preserve"> - <source>Are sure that you want to delete this file?</source> - </trans-unit> - <trans-unit id="confirm_file_delete_informal" xml:space="preserve"> - <source>Are sure that you want to delete this file?</source> - </trans-unit> - <trans-unit id="tooltip_comments" xml:space="preserve"> - <source>Enter your comments.</source> - </trans-unit> - <trans-unit id="tooltip_comments_informal" xml:space="preserve"> - <source>Enter your comments.</source> - </trans-unit> - <trans-unit id="missing_terms_acknowledged" xml:space="preserve"> - <source>Please acknowledge the terms!</source> - </trans-unit> - <trans-unit id="missing_terms_acknowledged_informal" xml:space="preserve"> - <source>Please acknowledge the terms!</source> - </trans-unit> - <trans-unit id="button_register" xml:space="preserve"> - <source>Create account</source> - </trans-unit> - <trans-unit id="button_confirm_register" xml:space="preserve"> - <source>Create account now!</source> - </trans-unit> - <trans-unit id="button_send_invitation" xml:space="preserve"> - <source>Send invitation</source> - </trans-unit> - <trans-unit id="button_send_invitation_now" xml:space="preserve"> - <source>Send invitation now!</source> - </trans-unit> - <trans-unit id="button_back_to_form" xml:space="preserve"> - <source>Back to form</source> - </trans-unit> - <trans-unit id="button_update" xml:space="preserve"> - <source>Update profile</source> - </trans-unit> - <trans-unit id="button_confirm_update" xml:space="preserve"> - <source>Update profile now!</source> - </trans-unit> - <trans-unit id="button_update_and_more" xml:space="preserve"> - <source>Update and continue...</source> - </trans-unit> - <trans-unit id="button_enter" xml:space="preserve"> - <source>Enter</source> - </trans-unit> - <trans-unit id="button_confirm_delete" xml:space="preserve"> - <source>Yes, delete account</source> - </trans-unit> - <trans-unit id="button_cancel_delete" xml:space="preserve"> - <source>No, cancel</source> - </trans-unit> - <trans-unit id="button_password_forgotten" xml:space="preserve"> - <source>Send me the forgotten password.</source> - </trans-unit> - <trans-unit id="button_password_forgotten_informal" xml:space="preserve"> - <source>Send me the forgotten password.</source> - </trans-unit> - <trans-unit id="click_here_to_register" xml:space="preserve"> - <source>Not a member yet? click here to register.</source> - </trans-unit> - <trans-unit id="click_here_to_register_informal" xml:space="preserve"> - <source>Not a member yet? click here to register.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_register" xml:space="preserve"> - <source>Presents a registration form.</source> - </trans-unit> - <trans-unit id="click_here_to_edit" xml:space="preserve"> - <source>Click here to edit your profile or delete your account.</source> - </trans-unit> - <trans-unit id="click_here_to_edit_informal" xml:space="preserve"> - <source>Click here to edit your profile or delete your account.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_edit" xml:space="preserve"> - <source>Presents an account editing form.</source> - </trans-unit> - <trans-unit id="click_here_to_delete" xml:space="preserve"> - <source>Click here to delete your membership.</source> - </trans-unit> - <trans-unit id="click_here_to_delete_informal" xml:space="preserve"> - <source>Click here to delete your membership.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_delete" xml:space="preserve"> - <source>Opens a dialog to delete your membership.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_delete_informal" xml:space="preserve"> - <source>Opens a dialog to delete your membership.</source> - </trans-unit> - <trans-unit id="click_here_to_see_terms" xml:space="preserve"> - <source>Click here to see the terms.</source> - </trans-unit> - <trans-unit id="click_here_to_see_terms_informal" xml:space="preserve"> - <source>Click here to see the terms.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_see_terms" xml:space="preserve"> - <source>Opens a page or file which shows the terms.</source> - </trans-unit> - <trans-unit id="tooltip_click_here_to_see_terms_informal" xml:space="preserve"> - <source>Opens a page or file which shows the terms.</source> - </trans-unit> - <trans-unit id="enter_account_info" xml:space="preserve"> - <source>Please complete the information for your membership.</source> - </trans-unit> - <trans-unit id="enter_account_info_informal" xml:space="preserve"> - <source>Please complete the information for your membership.</source> - </trans-unit> - <trans-unit id="enter_invitation_account_info" xml:space="preserve"> - <source>Please complete the information of the account for the invited person.</source> - </trans-unit> - <trans-unit id="enter_invitation_account_info_informal" xml:space="preserve"> - <source>Please complete the information of the account for the invited person.</source> - </trans-unit> - <trans-unit id="required_info_notice" xml:space="preserve"> - <source>Please complete all required fields *</source> - </trans-unit> - <trans-unit id="copy_paste_link" xml:space="preserve"> - <source>Or copy and paste it into your browser.<br /></source> - </trans-unit> - <trans-unit id="copy_paste_link_informal" xml:space="preserve"> - <source>Or copy and paste it into your browser.<br /></source> - </trans-unit> - <trans-unit id="excuse_us" xml:space="preserve"> - <source>Please forgive us for any inconvenience we may have caused you.<br /><br /></source> - </trans-unit> - <trans-unit id="excuse_us_informal" xml:space="preserve"> - <source>Please forgive us for any inconvenience we may have caused you.<br /><br /></source> - </trans-unit> - <trans-unit id="registration_problem" xml:space="preserve"> - <source>There seems to be a problem.</source> - </trans-unit> - <trans-unit id="registration_sorry" xml:space="preserve"> - <source>We are sorry that it was not possible to complete this process.</source> - </trans-unit> - <trans-unit id="registration_sorry_informal" xml:space="preserve"> - <source>We are sorry that it was not possible to complete this process.</source> - </trans-unit> - <trans-unit id="registration_clicked_twice" xml:space="preserve"> - <source>Perhaps you clicked twice on the link?</source> - </trans-unit> - <trans-unit id="registration_clicked_twice_informal" xml:space="preserve"> - <source>Perhaps you clicked twice on the link?</source> - </trans-unit> - <trans-unit id="registration_help" xml:space="preserve"> - <source>If the problem persists, please contact us at the following e-mail address and we will be pleased to help you.</source> - </trans-unit> - <trans-unit id="registration_help_informal" xml:space="preserve"> - <source>If the problem persists, please contact us at the following e-mail address and we will be pleased to help you.</source> - </trans-unit> - <trans-unit id="kind_regards" xml:space="preserve"> - <source>Kind regards,</source> - </trans-unit> - <trans-unit id="kind_regards_informal" xml:space="preserve"> - <source>Kind regards,</source> - </trans-unit> - <trans-unit id="kind_regards_cre" xml:space="preserve"> - <source>Welcome from us all at</source> - </trans-unit> - <trans-unit id="kind_regards_cre_informal" xml:space="preserve"> - <source>Welcome from us all at</source> - </trans-unit> - <trans-unit id="kind_regards_del" xml:space="preserve"> - <source>Wishing you well</source> - </trans-unit> - <trans-unit id="kind_regards_del_informal" xml:space="preserve"> - <source>Wishing you well</source> - </trans-unit> - <trans-unit id="kind_regards_ini" xml:space="preserve"> - <source>We would like to welcome you at</source> - </trans-unit> - <trans-unit id="kind_regards_ini_informal" xml:space="preserve"> - <source>We would like to welcome you at</source> - </trans-unit> - <trans-unit id="kind_regards_inv" xml:space="preserve"> - <source>We would like to welcome you at</source> - </trans-unit> - <trans-unit id="kind_regards_inv_informal" xml:space="preserve"> - <source>We would like to welcome you at</source> - </trans-unit> - <trans-unit id="kind_regards_upd" xml:space="preserve"> - <source>Warmest wishes</source> - </trans-unit> - <trans-unit id="kind_regards_upd_informal" xml:space="preserve"> - <source>Warmest wishes</source> - </trans-unit> - <trans-unit id="v_really_wish_to_delete" xml:space="preserve"> - <source>Do you really wish to delete your membership <b>%2$s</b>?</source> - </trans-unit> - <trans-unit id="v_really_wish_to_delete_informal" xml:space="preserve"> - <source>Do you really wish to delete your membership <b>%2$s</b>?</source> - </trans-unit> - <trans-unit id="v_verify_before_create" xml:space="preserve"> - <source>Please verify that all the information is correct before your membership with the name <b>%2$s</b> will be created<br /></source> - </trans-unit> - <trans-unit id="v_verify_before_create_informal" xml:space="preserve"> - <source>Please verify that all the information is correct before your membership with the name <b>%2$s</b> will be created<br /></source> - </trans-unit> - <trans-unit id="v_verify_invitation_before_create" xml:space="preserve"> - <source>Please verify that all the data of <b>%3$s</b> is correct before the membership with the name <b>%2$s</b> will be created</source> - </trans-unit> - <trans-unit id="v_verify_invitation_before_create_informal" xml:space="preserve"> - <source>Please verify that all the data of <b>%3$s</b> is correct before the membership with the name <b>%2$s</b> will be created</source> - </trans-unit> - <trans-unit id="v_edit_your_account" xml:space="preserve"> - <source>Edit the information of your membership <b>%2$s</b></source> - </trans-unit> - <trans-unit id="v_edit_your_account_informal" xml:space="preserve"> - <source>Edit the information of your membership <b>%2$s</b></source> - </trans-unit> - <trans-unit id="v_verify_before_update" xml:space="preserve"> - <source>Please verify that all the information is correct before your membership <b>%2$s</b> will be updated</source> - </trans-unit> - <trans-unit id="v_verify_before_update_informal" xml:space="preserve"> - <source>Please verify that all the information is correct before your membership <b>%2$s</b> will be updated</source> - </trans-unit> - <trans-unit id="v_dear" xml:space="preserve"> - <source>Dear %3$s,</source> - </trans-unit> - <trans-unit id="v_dear_informal" xml:space="preserve"> - <source>Hi %3$s,</source> - </trans-unit> - <trans-unit id="v_dear_male" xml:space="preserve"> - <source>Dear Mr. %3$s,</source> - </trans-unit> - <trans-unit id="v_dear_female" xml:space="preserve"> - <source>Dear Ms. %3$s,</source> - </trans-unit> - <trans-unit id="v_infomail_dear" xml:space="preserve"> - <source>Dear Ms./Sir,</source> - </trans-unit> - <trans-unit id="v_infomail_dear_informal" xml:space="preserve"> - <source>Dear Ms./Sir,</source> - </trans-unit> - <trans-unit id="v_infomail_lost_password" xml:space="preserve"> - <source>Enter the email address under which you are registered.</source> - </trans-unit> - <trans-unit id="v_infomail_lost_password_confirm" xml:space="preserve"> - <source>The email with the lost password has been sent to <b>%4$s</b>.</source> - </trans-unit> - <trans-unit id="v_infomail_lost_password_subject" xml:space="preserve"> - <source>Information about your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_infomail_lost_password_subject_informal" xml:space="preserve"> - <source>Information about your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_to_the_administrator" xml:space="preserve"> - <source>To the administrator of memberships with %1$s</source> - </trans-unit> - <trans-unit id="v_now_enter_your_username" xml:space="preserve"> - <source>You may now enter with your username <b>%2$s</b> and your password</source> - </trans-unit> - <trans-unit id="v_now_enter_your_username_informal" xml:space="preserve"> - <source>You may now enter with your username <b>%2$s</b> and your password</source> - </trans-unit> - <trans-unit id="v_notification" xml:space="preserve"> - <source>Notification</source> - </trans-unit> - <trans-unit id="v_registration_created_subject" xml:space="preserve"> - <source>Thank you for joining us at <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_created_subject_informal" xml:space="preserve"> - <source>Thank you for joining us at <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_created_message1" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_created_message1_informal" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_created_message2" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list of members.</source> - </trans-unit> - <trans-unit id="v_registration_created_message2_informal" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list of members.</source> - </trans-unit> - <trans-unit id="v_registration_created" xml:space="preserve"> - <source>%3$s created a new membership with %1$s.</source> - </trans-unit> - <trans-unit id="v_registration_updated_subject" xml:space="preserve"> - <source>Your membership details with <b>%1$s</b> have been updated.</source> - </trans-unit> - <trans-unit id="v_registration_updated_subject_informal" xml:space="preserve"> - <source>Your membership details with <b>%1$s</b> have been updated.</source> - </trans-unit> - <trans-unit id="v_registration_updated_message1" xml:space="preserve"> - <source>Thank you for keeping your profile up-to-date.</source> - </trans-unit> - <trans-unit id="v_registration_updated_message1_informal" xml:space="preserve"> - <source>Thanks for keeping your profile up-to-date.</source> - </trans-unit> - <trans-unit id="v_registration_updated" xml:space="preserve"> - <source>%3$s updated his(her) profile with %1$s.</source> - </trans-unit> - <trans-unit id="v_invitation_confirm" xml:space="preserve"> - <source>The invitation has been sent.</source> - </trans-unit> - <trans-unit id="v_invitation_account_was_created" xml:space="preserve"> - <source>The membership <b>%2$s</b> has been created. An invitation to confirm your registration with <b>%1$s</b> was sent to <b>%3$s</b> at the e-mail address <b>%4$s</b>.</source> - </trans-unit> - <trans-unit id="v_invitation_account_was_created_informal" xml:space="preserve"> - <source>The membership <b>%2$s</b> has been created. An invitation to confirm your registration with <b>%1$s</b> was sent to <b>%3$s</b> at the e-mail address <b>%4$s</b>.</source> - </trans-unit> - <trans-unit id="v_invitation_instructions1" xml:space="preserve"> - <source>You will have access to the section <b>%1$s</b> of our website only after you will have confirmed your registration.<br />Please follow the instructions given in the confirmation message in order to complete the registration procedure.</source> - </trans-unit> - <trans-unit id="v_please_confirm" xml:space="preserve"> - <source>Please confirm your registration.</source> - </trans-unit> - <trans-unit id="v_please_confirm_informal" xml:space="preserve"> - <source>Please confirm your registration.</source> - </trans-unit> - <trans-unit id="v_your_account_was_created" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been created. We are sending a message to your e-mail address <b>%4$s</b> so that you can confirm your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_your_account_was_created_informal" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been created. We are sending a message to your e-mail address <b>%4$s</b> so that you can confirm your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_your_account_was_created_nomail" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been created. Your e-mail address <b>%4$s</b> is being used. Now you are registered at <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_your_account_was_created_nomail_informal" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been created. Your e-mail address <b>%4$s</b> is being used. Now you are registered at <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_follow_instructions1" xml:space="preserve"> - <source>In order to confirm your registration with <b>%1$s</b>, you will have to follow the instructions given in the invitation message.</source> - </trans-unit> - <trans-unit id="v_follow_instructions1_informal" xml:space="preserve"> - <source>In order to confirm your registration with <b>%1$s</b>, you will have to follow the instructions given in the invitation message.</source> - </trans-unit> - <trans-unit id="v_follow_instructions_review1" xml:space="preserve"> - <source>In order to confirm your registration with <b>%1$s</b>, you will have to follow the instructions given in the invitation message.</source> - </trans-unit> - <trans-unit id="v_follow_instructions_review1_informal" xml:space="preserve"> - <source>In order to confirm your registration with <b>%1$s</b>, you will have to follow the instructions given in the invitation message.</source> - </trans-unit> - <trans-unit id="v_follow_instructions_review2" xml:space="preserve"> - <source>Please be aware that after you confirm your registration, it will need to be reviewed by the administrator before you gain access to the section <b>%1$s</b> of our website.</source> - </trans-unit> - <trans-unit id="v_follow_instructions_review2_informal" xml:space="preserve"> - <source>Please be aware that after you confirm your registration, it will need to be reviewed by the administrator before you gain access to the section <b>%1$s</b> of our website.</source> - </trans-unit> - <trans-unit id="v_registration_initiated_subject" xml:space="preserve"> - <source>Please confirm your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_initiated_subject_informal" xml:space="preserve"> - <source>Please confirm your registration with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message1" xml:space="preserve"> - <source>Thank you for your application to become a member of <b>%1$s</b>. <br />Everyone is welcome to browse around our website but you will need to confirm your membership to have unrestricted access to all areas.<br /><br />To confirm your membership please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message1_informal" xml:space="preserve"> - <source>Thank you for your application to become a member of <b>%1$s</b>. <br />Everyone is welcome to browse around our website but you will need to confirm your membership to have unrestricted access to all areas.<br /><br />To confirm your membership please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message2" xml:space="preserve"> - <source>If, for any reason, you do not wish to continue the registration process, or you have received this message in error, please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message2_informal" xml:space="preserve"> - <source>If, for any reason, you do not wish to continue the registration process, or you have received this message in error, please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message3" xml:space="preserve"> - <source>Please feel free to ask us any questions, or tell us anything about the registration process, or make any other constructive comments by sending an e-mail to</source> - </trans-unit> - <trans-unit id="v_registration_initiated_message3_informal" xml:space="preserve"> - <source>Please feel free to ask us any questions, or tell us anything about the registration process, or make any other constructive comments by sending an e-mail to</source> - </trans-unit> - <trans-unit id="v_registration_initiated_review1" xml:space="preserve"> - <source>Thank you for your application to become a member of <b>%1$s</b>. <br />Everyone is welcome to browse around our website but you will need to confirm your membership to have unrestricted access to all areas.<br /><br />To confirm your membership please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_review1_informal" xml:space="preserve"> - <source>Thank you for your application to become a member of <b>%1$s</b>. <br />Everyone is welcome to browse around our website but you will need to confirm your membership to have unrestricted access to all areas.<br /><br />To confirm your membership please click on this link</source> - </trans-unit> - <trans-unit id="v_registration_initiated_review2" xml:space="preserve"> - <source>Please be aware that after you confirm your registration, it will need to be reviewed by the administrator before you gain access to the section <b>%1$s</b> of our website.</source> - </trans-unit> - <trans-unit id="v_registration_initiated_review2_informal" xml:space="preserve"> - <source>Please be aware that after you confirm your registration, it will need to be reviewed by the administrator before you gain access to the section <b>%1$s</b> of our website.</source> - </trans-unit> - <trans-unit id="v_registration_initiated" xml:space="preserve"> - <source>%3$s initiated his(her) registration in %1$s.</source> - </trans-unit> - <trans-unit id="v_registration_review_subject" xml:space="preserve"> - <source>Please review the application of <b>%3$s</b> for membership with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_review_subject_informal" xml:space="preserve"> - <source>Please review the application of <b>%3$s</b> for membership with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_review_message1" xml:space="preserve"> - <source>If you think that the application for membership with <b>%3$s</b> should be accepted, please click on this link to accept</source> - </trans-unit> - <trans-unit id="v_registration_review_message1_informal" xml:space="preserve"> - <source>If you think that the application for membership with <b>%3$s</b> should be accepted, please click on this link to accept</source> - </trans-unit> - <trans-unit id="v_registration_review_message2" xml:space="preserve"> - <source>If you think that the application for membership with <b>%3$s</b> should be refused, please click on this link to refuse</source> - </trans-unit> - <trans-unit id="v_registration_review_message2_informal" xml:space="preserve"> - <source>If you think that the application for membership with <b>%3$s</b> should be refused, please click on this link to refuse</source> - </trans-unit> - <trans-unit id="v_registration_review_message3" xml:space="preserve"> - <source>Please review the application of <b>%3$s</b> for membership with <b>%1$s</b>. The following data was entered on the registration form</source> - </trans-unit> - <trans-unit id="v_registration_invited_subject" xml:space="preserve"> - <source>Invitation to register with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_invited_subject_informal" xml:space="preserve"> - <source>Invitation to register with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_invited_message1" xml:space="preserve"> - <source>We thought you might be interested in registering with <b>%1$s</b><br /><br /> - -We have created an account for you with username <b>%2$s</b> and password <b>%5$s</b>.<br /><br /> - -We are sending you this message so that you may confirm that you wish to register with <b>%1$s</b>. You will be able to access the section reserved to <b>%1$s</b> only after confirming your registration. You will also be able to change your password and account profile.<br /><br /> - -If you wish to accept our invitation and confirm your registration in <b>%1$s</b>, please follow this link</source> - </trans-unit> - <trans-unit id="v_registration_invited_message1_informal" xml:space="preserve"> - <source>We thought you might be interested in registering with <b>%1$s</b><br /><br /> - -We have created an account for you with username <b>%2$s</b> and password <b>%5$s</b>.<br /><br /> - -We are sending you this message so that you may confirm that you wish to register with <b>%1$s</b>. You will be able to access the section reserved to <b>%1$s</b> only after confirming your registration. You will also be able to change your password and account profile.<br /><br /> - -If you wish to accept our invitation and confirm your registration in <b>%1$s</b>, please follow this link</source> - </trans-unit> - <trans-unit id="v_registration_invited_message1a" xml:space="preserve"> - <source>We thought you might be interested in registering with <b>%1$s</b><br /><br /> - -We have created an account for you with username <b>%2$s</b>.<br /><br /> - -We are sending you this message so that you may confirm that you wish to register with <b>%1$s</b>. You will be able to access the section reserved to <b>%1$s</b> only after confirming your registration. You will also be able to change your password and account profile.<br /><br /> - -If you wish to accept our invitation and confirm your registration in <b>%1$s</b>, please follow this link</source> - </trans-unit> - <trans-unit id="v_registration_invited_message1a_informal" xml:space="preserve"> - <source>We thought you might be interested in registering with <b>%1$s</b><br /><br /> - -We have created an account for you with username <b>%2$s</b>.<br /><br /> - -We are sending you this message so that you may confirm that you wish to register with <b>%1$s</b>. You will be able to access the section reserved to <b>%1$s</b> only after confirming your registration. You will also be able to change your password and account profile.<br /><br /> - -If you wish to accept our invitation and confirm your registration in <b>%1$s</b>, please follow this link</source> - </trans-unit> - <trans-unit id="v_registration_invited_message2" xml:space="preserve"> - <source>You will not receive this message twice. If you wish to decline our invitation and do not wish to register in <b>%1$s</b>, please follow this link or just ignore this message</source> - </trans-unit> - <trans-unit id="v_registration_invited_message2_informal" xml:space="preserve"> - <source>You will not receive this message twice. If you wish to decline our invitation and do not wish to register in <b>%1$s</b>, please follow this link or just ignore this message</source> - </trans-unit> - <trans-unit id="v_now_choose_password" xml:space="preserve"> - <source>Please choose a password now and enter it twice.</source> - </trans-unit> - <trans-unit id="v_now_choose_password_informal" xml:space="preserve"> - <source>Please choose a password now and enter it twice.</source> - </trans-unit> - <trans-unit id="v_registration_invited" xml:space="preserve"> - <source>An invitation to register in %1$s was sent to %3$s.</source> - </trans-unit> - <trans-unit id="v_registration_infomail_message1" xml:space="preserve"> - <source>Your account data are username <b>%2$s</b> and password <b>%5$s</b>.<br /><br /></source> - </trans-unit> - <trans-unit id="v_registration_infomail_message1_informal" xml:space="preserve"> - <source>Your account data are username <b>%2$s</b> and password <b>%5$s</b>.<br /><br /></source> - </trans-unit> - <trans-unit id="v_registration_infomail_message1a" xml:space="preserve"> - <source>Your account username is <b>%2$s</b>.<br /></source> - </trans-unit> - <trans-unit id="v_registration_infomail_message1a_informal" xml:space="preserve"> - <source>Your account username is <b>%2$s</b>.<br /></source> - </trans-unit> - <trans-unit id="v_registration_confirmed_subject" xml:space="preserve"> - <source>Thank you for registering with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_subject_informal" xml:space="preserve"> - <source>Thank you for registering with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_message1" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_message1_informal" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_message2" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_message2_informal" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_review1" xml:space="preserve"> - <source>Your application for membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_review1_informal" xml:space="preserve"> - <source>Your application for membership <b>%2$s</b> has been confirmed.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_review2" xml:space="preserve"> - <source>Your application for membership will now be reviewed by the website administrator. You will be informed by email of the administrator's decision.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed_review2_informal" xml:space="preserve"> - <source>Your application for membership will now be reviewed by the website administrator. You will be informed by email of the administrator's decision.</source> - </trans-unit> - <trans-unit id="v_registration_confirmed" xml:space="preserve"> - <source>%3$s confirmed his(her) registration with %1$s.</source> - </trans-unit> - <trans-unit id="v_registration_cancelled_subject" xml:space="preserve"> - <source>Your registration has been cancelled.</source> - </trans-unit> - <trans-unit id="v_registration_cancelled_subject_informal" xml:space="preserve"> - <source>Your registration has been cancelled.</source> - </trans-unit> - <trans-unit id="v_registration_cancelled_message1" xml:space="preserve"> - <source>As requested, we have cancelled your membership <b>%2$s</b> and your e-mail address <b>%4$s</b> has been deleted from our list.<br /></source> - </trans-unit> - <trans-unit id="v_registration_cancelled_message1_informal" xml:space="preserve"> - <source>As requested, we have cancelled your membership <b>%2$s</b> and your e-mail address <b>%4$s</b> has been deleted from our list.<br /></source> - </trans-unit> - <trans-unit id="v_registration_cancelled_message2" xml:space="preserve"> - <source>You will still be able to browse the pages of <b>%1$s</b> for which membership is not necessary, if you wish.<br /><br />If you ever change your mind, you may re-join us and we will be pleased to welcome you again.<br /></source> - </trans-unit> - <trans-unit id="v_registration_cancelled_message2_informal" xml:space="preserve"> - <source>You will still be able to browse the pages of <b>%1$s</b> for which membership is not necessary, if you wish.<br /><br />If you ever change your mind, you may re-join us and we will be pleased to welcome you again.<br /></source> - </trans-unit> - <trans-unit id="v_registration_cancelled" xml:space="preserve"> - <source>%3$s cancelled his(her) registration with %1$s.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_subject" xml:space="preserve"> - <source>The application of <b>%3$s</b> for membership with <b>%1$s</b> is now accepted.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message1" xml:space="preserve"> - <source>A message is being sent to <b>%3$s</b> to inform him(her) that his(her) membership with <b>%1$s</b> was accepted.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message2" xml:space="preserve"> - <source><b>%3$s</b> is now able to login.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_subject2" xml:space="preserve"> - <source>Your application for membership with <b>%1$s</b> has been accepted.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_subject2_informal" xml:space="preserve"> - <source>Your application for membership with <b>%1$s</b> has been accepted.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message3" xml:space="preserve"> - <source>We are pleased to inform you that your membership <b>%2$s</b> has been accepted and that your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message3_informal" xml:space="preserve"> - <source>We are pleased to inform you that your membership <b>%2$s</b> has been accepted and that your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message4" xml:space="preserve"> - <source>You may now login at</source> - </trans-unit> - <trans-unit id="v_registration_accepted_message4_informal" xml:space="preserve"> - <source>You may now login at</source> - </trans-unit> - <trans-unit id="v_registration_accepted" xml:space="preserve"> - <source>The application of %3$s for membership with %1$s was accepted.</source> - </trans-unit> - <trans-unit id="v_registration_refused_subject" xml:space="preserve"> - <source>The application of <b>%3$s</b> for membership with <b>%1$s</b> is now refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_message1" xml:space="preserve"> - <source>A message is being sent to <b>%3$s</b> to inform him(her) that his(her) membership with <b>%1$s</b> was refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_message2" xml:space="preserve"> - <source>The account of <b>%3$s</b> will now be deleted.</source> - </trans-unit> - <trans-unit id="v_registration_refused" xml:space="preserve"> - <source>The application of %3$s for membership with %1$s was refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_subject2" xml:space="preserve"> - <source>Your application for membership with <b>%1$s</b> has been refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_subject2_informal" xml:space="preserve"> - <source>Your application for membership with <b>%1$s</b> has been refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_message3" xml:space="preserve"> - <source>We are sorry to inform you that your membership <b>%2$s</b> has been refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_message3_informal" xml:space="preserve"> - <source>We are sorry to inform you that your membership <b>%2$s</b> has been refused.</source> - </trans-unit> - <trans-unit id="v_registration_refused_message4" xml:space="preserve"> - <source>Please feel free to ask us any questions, or tell us anything about the registration process, or make any other comments by sending an e-mail to</source> - </trans-unit> - <trans-unit id="v_registration_refused_message4_informal" xml:space="preserve"> - <source>Please feel free to ask us any questions, or tell us anything about the registration process, or make any other comments by sending an e-mail to</source> - </trans-unit> - <trans-unit id="v_registration_entered_subject" xml:space="preserve"> - <source>Thank you for registering with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_entered_subject_informal" xml:space="preserve"> - <source>Thank you for registering with <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="v_registration_entered_message1" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been accepted.</source> - </trans-unit> - <trans-unit id="v_registration_entered_message1_informal" xml:space="preserve"> - <source>Your membership <b>%2$s</b> has been accepted.</source> - </trans-unit> - <trans-unit id="v_registration_entered_message2" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_entered_message2_informal" xml:space="preserve"> - <source>Your e-mail address <b>%4$s</b> has been added to our list.</source> - </trans-unit> - <trans-unit id="v_registration_entered" xml:space="preserve"> - <source>%3$s accessed the login form of %1$s after acceptation of his(her) membership application.</source> - </trans-unit> - <trans-unit id="v_registration_deleted_subject" xml:space="preserve"> - <source>Your membership with <b>%1$s</b> has been ended.</source> - </trans-unit> - <trans-unit id="v_registration_deleted_subject_informal" xml:space="preserve"> - <source>Your membership with <b>%1$s</b> has been ended.</source> - </trans-unit> - <trans-unit id="v_registration_deleted_message1" xml:space="preserve"> - <source>As requested, we have ended your membership <b>%2$s</b> and your e-mail address <b>%4$s</b> has been deleted from our list.<br /></source> - </trans-unit> - <trans-unit id="v_registration_deleted_message1_informal" xml:space="preserve"> - <source>As requested, we have ended your membership <b>%2$s</b> and your e-mail address <b>%4$s</b> has been deleted from our list.<br /></source> - </trans-unit> - <trans-unit id="v_registration_deleted_message2" xml:space="preserve"> - <source>You will still be able to browse the pages of <b>%1$s</b> for which membership is not necessary, if you wish.<br /><br />If you ever change your mind, you may re-join us and we will be pleased to welcome you again.<br /></source> - </trans-unit> - <trans-unit id="v_registration_deleted_message2_informal" xml:space="preserve"> - <source>You will still be able to browse the pages of <b>%1$s</b> for which membership is not necessary, if you wish.<br /><br />If you ever change your mind, you may re-join us and we will be pleased to welcome you again.<br /></source> - </trans-unit> - <trans-unit id="v_registration_deleted" xml:space="preserve"> - <source>%3$s deleted his(her) account from %1$s.</source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_subject" xml:space="preserve"> - <source>Your subscription to the newsletter of <b>%1$s</b> has been ended.</source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_subject_informal" xml:space="preserve"> - <source>Your subscription to the newsletter of <b>%1$s</b> has been ended.</source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_message1" xml:space="preserve"> - <source>As requested, we have ended the subscription of user <b>%2$s</b> to the newsletter of <b>%1$s</b>.<br /></source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_message1_informal" xml:space="preserve"> - <source>As requested, we have ended the subscription of user <b>%2$s</b> to the newsletter of <b>%1$s</b>.<br /></source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_message2" xml:space="preserve"> - <source>However, your account remains active and you may login into the site. You may also resume your subscription at your convenience.<br /></source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed_message2_informal" xml:space="preserve"> - <source>However, your account remains active and you may login into the site. You may also resume your subscription at your convenience.<br /></source> - </trans-unit> - <trans-unit id="v_registration_unsubscribed" xml:space="preserve"> - <source>%3$s has ended his(her) subscription to the newsletter of %1$s.</source> - </trans-unit> - <trans-unit id="evalErrors_allowed_image" xml:space="preserve"> - <source>The file extension %s is not allowed.</source> - </trans-unit> - <trans-unit id="evalErrors_atLeast" xml:space="preserve"> - <source>You must enter at least %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atLeast_username" xml:space="preserve"> - <source>The username must contain at least %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_atLeast_informal" xml:space="preserve"> - <source>You must enter at least %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atleast_characters" xml:space="preserve"> - <source>You must enter at least %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atleast_characters_informal" xml:space="preserve"> - <source>You must enter at least %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atLeast_password" xml:space="preserve"> - <source>The password must contain at least %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_atLeast_password_informal" xml:space="preserve"> - <source>The password must contain at least %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_atmost_characters" xml:space="preserve"> - <source>You must enter at most %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atmost_characters_informal" xml:space="preserve"> - <source>You must enter at most %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atMost" xml:space="preserve"> - <source>You must enter at most %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atMost_informal" xml:space="preserve"> - <source>You must enter at most %s characters!</source> - </trans-unit> - <trans-unit id="evalErrors_atMost_password" xml:space="preserve"> - <source>The password must contain at most %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_atMost_password_informal" xml:space="preserve"> - <source>The password must contain at most %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_atMost_username" xml:space="preserve"> - <source>The username must contain at most %s characters.</source> - </trans-unit> - <trans-unit id="evalErrors_captcha" xml:space="preserve"> - <source>Invalid!</source> - </trans-unit> - <trans-unit id="evalErrors_freecap" xml:space="preserve"> - <source>The entered letters did not correspond to the letters in the image.</source> - </trans-unit> - <trans-unit id="evalErrors_date" xml:space="preserve"> - <source>Please enter a valid date!</source> - </trans-unit> - <trans-unit id="evalErrors_date_informal" xml:space="preserve"> - <source>Please enter a valid date!</source> - </trans-unit> - <trans-unit id="evalErrors_email" xml:space="preserve"> - <source>Please enter a valid e-mail address.</source> - </trans-unit> - <trans-unit id="evalErrors_email_informal" xml:space="preserve"> - <source>Please enter a valid e-mail address.</source> - </trans-unit> - <trans-unit id="evalErrors_email_email" xml:space="preserve"> - <source>According to our verifications, the e-mail you have entered is not valid. Perhaps it was not entered correctly?</source> - </trans-unit> - <trans-unit id="evalErrors_email_email_informal" xml:space="preserve"> - <source>According to our verifications, the e-mail you entered is not valid. Perhaps you did not enter it correctly?</source> - </trans-unit> - <trans-unit id="evalErrors_existed_already" xml:space="preserve"> - <source>The value existed already. Enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_existed_already_informal" xml:space="preserve"> - <source>The value existed already. Enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_file_extension" xml:space="preserve"> - <source>The file extension %s is not allowed.</source> - </trans-unit> - <trans-unit id="evalErrors_file_upload" xml:space="preserve"> - <source>Internal server error in upload of file "%s".</source> - </trans-unit> - <trans-unit id="evalErrors_write_permission" xml:space="preserve"> - <source>Write permission error for file "%s".</source> - </trans-unit> - <trans-unit id="evalErrors_max_size_image" xml:space="preserve"> - <source>The file size should not exceed %s KB.</source> - </trans-unit> - <trans-unit id="evalErrors_preg" xml:space="preserve"> - <source>This value does not fit to the required expression!</source> - </trans-unit> - <trans-unit id="evalErrors_preg_internal" xml:space="preserve"> - <source>Internal error in the regular expression "%s"!</source> - </trans-unit> - <trans-unit id="evalErrors_required" xml:space="preserve"> - <source>You must enter a value!</source> - </trans-unit> - <trans-unit id="evalErrors_required_informal" xml:space="preserve"> - <source>You must enter a value!</source> - </trans-unit> - <trans-unit id="evalErrors_required_terms_acknowledged" xml:space="preserve"> - <source>Please acknowledge the terms!</source> - </trans-unit> - <trans-unit id="evalErrors_required_terms_acknowledged_informal" xml:space="preserve"> - <source>Please acknowledge the terms!</source> - </trans-unit> - <trans-unit id="evalErrors_same_twice" xml:space="preserve"> - <source>You must enter the same value twice.</source> - </trans-unit> - <trans-unit id="evalErrors_same_twice_informal" xml:space="preserve"> - <source>You must enter the same value twice.</source> - </trans-unit> - <trans-unit id="evalErrors_size_too_large" xml:space="preserve"> - <source>The file is larger than %s KB.</source> - </trans-unit> - <trans-unit id="evalErrors_twice" xml:space="preserve"> - <source>Please enter the same value twice.</source> - </trans-unit> - <trans-unit id="evalErrors_twice_informal" xml:space="preserve"> - <source>Please enter the same value twice.</source> - </trans-unit> - <trans-unit id="evalErrors_twice_password" xml:space="preserve"> - <source>You must enter the same password twice.</source> - </trans-unit> - <trans-unit id="evalErrors_twice_password_informal" xml:space="preserve"> - <source>You must enter the same password twice.</source> - </trans-unit> - <trans-unit id="evalErrors_unvalid_list" xml:space="preserve"> - <source>The value was not a valid value from this list: %s</source> - </trans-unit> - <trans-unit id="evalErrors_unvalid_url" xml:space="preserve"> - <source>Please enter a valid Internet site address.</source> - </trans-unit> - <trans-unit id="evalErrors_unvalid_url_informal" xml:space="preserve"> - <source>Please enter a valid Internet site address.</source> - </trans-unit> - <trans-unit id="evalErrors_unvalid_date" xml:space="preserve"> - <source>Please enter a valid date.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal" xml:space="preserve"> - <source>This value already exist. Please enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal_informal" xml:space="preserve"> - <source>This value already exist. Please enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal_username" xml:space="preserve"> - <source>This username already exists. Please enter a different username.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal_username_informal" xml:space="preserve"> - <source>This username already exists. Please enter a different username.</source> - </trans-unit> - <trans-unit id="evalErrors_valid_email" xml:space="preserve"> - <source>You must enter a valid email address.</source> - </trans-unit> - <trans-unit id="evalErrors_valid_email_informal" xml:space="preserve"> - <source>You must enter a valid email address.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueGlobal_username" xml:space="preserve"> - <source>This username already exists. Please enter a different username.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueGlobal_username_informal" xml:space="preserve"> - <source>This username already exists. Please enter a different username.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueGlobal" xml:space="preserve"> - <source>This value already exists. Please enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueGlobal_informal" xml:space="preserve"> - <source>This value already exists. Please enter a new value.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal_email" xml:space="preserve"> - <source>This e-mail address already exist.</source> - </trans-unit> - <trans-unit id="evalErrors_uniqueLocal_email_informal" xml:space="preserve"> - <source>This e-mail address already exist.</source> - </trans-unit> - <trans-unit id="evalErrors_wwwURL_www" xml:space="preserve"> - <source>According to our verifications, the website address you entered is not valid. Perhaps it was not entered correctly?</source> - </trans-unit> - <trans-unit id="evalErrors_wwwURL_www_informal" xml:space="preserve"> - <source>According to our verifications, the website address you entered is not valid. Perhaps it was not entered correctly?</source> - </trans-unit> - <trans-unit id="internal_no_subtemplate" xml:space="preserve"> - <source>The subpart %s was not found in the template file.</source> - </trans-unit> - <trans-unit id="internal_edit_option" xml:space="preserve"> - <source>Edit-option is not set in TypoScript.</source> - </trans-unit> - <trans-unit id="internal_infomail_configuration" xml:space="preserve"> - <source>Configuration error: infomail option is not available or emailField is not set in TypoScript</source> - </trans-unit> - <trans-unit id="internal_token_empty" xml:space="preserve"> - <source>The form's token is empty!</source> - </trans-unit> - <trans-unit id="internal_token_short" xml:space="preserve"> - <source>The form's token is too short!</source> - </trans-unit> - <trans-unit id="internal_no_text_found" xml:space="preserve"> - <source>Internal error in the FE user registration. No text replacement has been found for <b>%1$s</b>.</source> - </trans-unit> - <trans-unit id="internal_login_security_level" xml:space="preserve"> - <source>Frontend login security level must be set to "normal" or to "rsa"</source> - </trans-unit> - <trans-unit id="internal_rsaauth_backend_not_available" xml:space="preserve"> - <source>Required RSA auth backend not available</source> - </trans-unit> - <trans-unit id="internal_decrypt_auto_login_failed" xml:space="preserve"> - <source>Failed to decrypt auto login password</source> - </trans-unit> - <trans-unit id="internal_rsaauth_retrieve_private_key_failed" xml:space="preserve"> - <source>RSA auth service failed to retrieve private key</source> - </trans-unit> - <trans-unit id="internal_rsaauth_process_incoming_password_failed" xml:space="preserve"> - <source>RSA auth service failed to process incoming password</source> - </trans-unit> - <trans-unit id="internal_salted_passwords_disabled" xml:space="preserve"> - <source>Salted passwords must be enabled in frontend</source> - </trans-unit> - <trans-unit id="internal_salted_passwords_no_instance" xml:space="preserve"> - <source>Could not get a salting instance from saltedpasswords</source> - </trans-unit> - <trans-unit id="internal_required_extension_missing" xml:space="preserve"> - <source>Required extension "%1$s" is not available and must be installed</source> - </trans-unit> - <trans-unit id="internal_required_authentication_service_not_available" xml:space="preserve"> - <source>Required authentication service not available</source> - </trans-unit> - <trans-unit id="internal_check_requirements_frontend" xml:space="preserve"> - <source><p><big><b>Front End User Registration (sr_feuser_register): %1$s.</b></big></p></source> - </trans-unit> - <trans-unit id="internal_replace_deprecated_marker" xml:space="preserve"> - <source>Deprecated marker %1$s must be replaced by marker %2$s in HTML template file %3$s</source> - </trans-unit> - <trans-unit id="internal_remove_deprecated_marker" xml:space="preserve"> - <source>Deprecated marker %1$s must be removed from HTML template file %2$s</source> - </trans-unit> - <trans-unit id="internal_auto_login_failed" xml:space="preserve"> - <source>The auto login has failed.</source> - </trans-unit> - <trans-unit id="internal_no_enabled_user" xml:space="preserve"> - <source>The user "%s" is not existent or enabled.</source> - </trans-unit> - <trans-unit id="table_not_defined_in_TCA" xml:space="preserve"> - <source>The table "%s" is not defined in TCA.</source> - </trans-unit> - <trans-unit id="missing_gender" xml:space="preserve"> - <source>Please enter your salutation!</source> - </trans-unit> - <trans-unit id="missing_gender_informal" xml:space="preserve"> - <source>Please enter your salutation!</source> - </trans-unit> - <trans-unit id="dateFormat" xml:space="preserve"> - <source>%B %e, %Y</source> - </trans-unit> - <trans-unit id="noneSelected" xml:space="preserve"> - <source>None</source> - </trans-unit> - </body> - </file> -</xliff> \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db.xlf b/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db.xlf deleted file mode 100644 index 9e5e3b2..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db.xlf +++ /dev/null @@ -1,122 +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-10-13T20:52:44Z" product-name="sr_feuser_register"> - <header/> - <body> - <trans-unit id="tt_content.list_type" xml:space="preserve"> - <source>Front End User Registration</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode" xml:space="preserve"> - <source>Display mode</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.1" xml:space="preserve"> - <source>Default</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.3" xml:space="preserve"> - <source>Create</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.4" xml:space="preserve"> - <source>Delete</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.5" xml:space="preserve"> - <source>Invite</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.7" xml:space="preserve"> - <source>Edit</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.8" xml:space="preserve"> - <source>Setfixed</source> - </trans-unit> - <trans-unit id="tt_content.pi1_flexform.display_mode.9" xml:space="preserve"> - <source>Infomail</source> - </trans-unit> - <trans-unit id="fe_users.cnum" xml:space="preserve"> - <source>Customer Number:</source> - </trans-unit> - <trans-unit id="fe_users.house_no" xml:space="preserve"> - <source>House Number:</source> - </trans-unit> - <trans-unit id="fe_users.static_info_country" xml:space="preserve"> - <source>Country Code:</source> - </trans-unit> - <trans-unit id="fe_users.zone" xml:space="preserve"> - <source>State/province:</source> - </trans-unit> - <trans-unit id="fe_users.language" xml:space="preserve"> - <source>Language:</source> - </trans-unit> - <trans-unit id="fe_users.first_name" xml:space="preserve"> - <source>First Name:</source> - </trans-unit> - <trans-unit id="fe_users.last_name" xml:space="preserve"> - <source>Last Name:</source> - </trans-unit> - <trans-unit id="fe_users.module_sys_dmail_newsletter" xml:space="preserve"> - <source>Activate Newsletter</source> - </trans-unit> - <trans-unit id="fe_users.module_sys_dmail_category" xml:space="preserve"> - <source>Subscribe to categories</source> - </trans-unit> - <trans-unit id="fe_users.module_sys_dmail_html" xml:space="preserve"> - <source>Receive emails in HTML format?</source> - </trans-unit> - <trans-unit id="fe_users.date_of_birth" xml:space="preserve"> - <source>Date of birth:</source> - </trans-unit> - <trans-unit id="fe_users.gender" xml:space="preserve"> - <source>Salutation</source> - </trans-unit> - <trans-unit id="fe_users.gender.I.0" xml:space="preserve"> - <source>Mr.</source> - </trans-unit> - <trans-unit id="fe_users.gender.I.1" xml:space="preserve"> - <source>Ms.</source> - </trans-unit> - <trans-unit id="fe_users.gender.I.99" xml:space="preserve"> - <source>None</source> - </trans-unit> - <trans-unit id="fe_users.status" xml:space="preserve"> - <source>Status:</source> - </trans-unit> - <trans-unit id="fe_users.status.I.0" xml:space="preserve"> - <source> </source> - </trans-unit> - <trans-unit id="fe_users.status.I.1" xml:space="preserve"> - <source>Student</source> - </trans-unit> - <trans-unit id="fe_users.status.I.2" xml:space="preserve"> - <source>Job seeking full time</source> - </trans-unit> - <trans-unit id="fe_users.status.I.3" xml:space="preserve"> - <source>Working</source> - </trans-unit> - <trans-unit id="fe_users.status.I.4" xml:space="preserve"> - <source>Retired</source> - </trans-unit> - <trans-unit id="fe_users.status.I.5" xml:space="preserve"> - <source>Job seeking half time</source> - </trans-unit> - <trans-unit id="fe_users.comments" xml:space="preserve"> - <source>Comments:</source> - </trans-unit> - <trans-unit id="fe_users.by_invitation" xml:space="preserve"> - <source>Was invited:</source> - </trans-unit> - <trans-unit id="fe_users.terms_acknowledged" xml:space="preserve"> - <source>The terms have been acknowledged:</source> - </trans-unit> - <trans-unit id="fe_users.token" xml:space="preserve"> - <source>Security Token</source> - </trans-unit> - <trans-unit id="fe_users.tx_srfeuserregister_password" xml:space="preserve"> - <source>Encrypted auto-login password</source> - </trans-unit> - <trans-unit id="fe_groups_language_overlay" xml:space="preserve"> - <source>User Group Alternative Language</source> - </trans-unit> - <trans-unit id="fe_groups_language_overlay.title" xml:space="preserve"> - <source>Translated user group name</source> - </trans-unit> - </body> - </file> -</xliff> \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db_layout.xlf b/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db_layout.xlf deleted file mode 100644 index 4df951e..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_db_layout.xlf +++ /dev/null @@ -1,23 +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-10-13T20:54:21Z" product-name="sr_feuser_register"> - <header/> - <body> - <trans-unit id="fe_user_register" xml:space="preserve"> - <source>Front End User Registration</source> - </trans-unit> - <trans-unit id="m_default" xml:space="preserve"> - <source>default</source> - </trans-unit> - <trans-unit id="m_ext" xml:space="preserve"> - <source>extended</source> - </trans-unit> - <trans-unit id="m_country" xml:space="preserve"> - <source>country</source> - </trans-unit> - <trans-unit id="m_other" xml:space="preserve"> - <source>other</source> - </trans-unit> - </body> - </file> -</xliff> \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf b/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf deleted file mode 100644 index 508b01b..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Language/locallang_statusreport.xlf +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xliff version="1.0"> - <file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:35Z" product-name="sr_feuser_register"> - <header/> - <body> - <trans-unit id="Conflicting_extensions_installed" xml:space="preserve"> - <source>Conflicting extensions installed</source> - </trans-unit> - <trans-unit id="none" xml:space="preserve"> - <source>None</source> - </trans-unit> - <trans-unit id="keys" xml:space="preserve"> - <source>Extension keys:</source> - </trans-unit> - <trans-unit id="uninstall" xml:space="preserve"> - <source>Conflicting extensions should be uninstalled for Front End User Registration to function correctly.</source> - </trans-unit> - <trans-unit id="Required_extensions_not_installed" xml:space="preserve"> - <source>Required extensions not installed</source> - </trans-unit> - <trans-unit id="install" xml:space="preserve"> - <source>Required extensions should be installed for Front End User Registration to function correctly.</source> - </trans-unit> - <trans-unit id="Front_end_login_security_level" xml:space="preserve"> - <source>Front end login security level</source> - </trans-unit> - <trans-unit id="must_be_normal_or_rsa" xml:space="preserve"> - <source>Use the Install tool to set Front end login security level ($TYPO3_CONF_VARS['FE']['loginSecurityLevel']) to "normal" or to "rsa".</source> - </trans-unit> - <trans-unit id="Salted_passwords_in_front_end" xml:space="preserve"> - <source>Salted passwords in front end</source> - </trans-unit> - <trans-unit id="enabled" xml:space="preserve"> - <source>Enabled</source> - </trans-unit> - <trans-unit id="disabled" xml:space="preserve"> - <source>Disabled</source> - </trans-unit> - <trans-unit id="salted_passwords_must_be_enabled" xml:space="preserve"> - <source>For Front End User Registration to function correctly, extension "saltedpasswords" must be installed and must be configured so that salted passwords are enabled in front end. Note that if FE login security level ($TYPO3_CONF_VARS['FE']['loginSecurityLevel']) is not set to "normal" or to "rsa", salted passwords cannot be enabled in front end.</source> - </trans-unit> - </body> - </file> -</xliff> diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterFoundationTemplate.html b/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterFoundationTemplate.html deleted file mode 100644 index 2ff65ca..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterFoundationTemplate.html +++ /dev/null @@ -1,3171 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> -<head> - <title>Frond End User Registration Template - - - -

    FRONTEND USER REGISTRATION

    -

    EXAMPLE

    -

    Attention: Please don't forget to add ' ' after the data values in the preview mode. If you don't, you will get problems with your IE-browser users

    - -

    'CREATE' TEMPLATES:

    - - -

    Form for the registration of a frontend user:

    - -
    -
    -###LABEL_ENTER_ACCOUNT_INFO### -

    ###LABEL_REQUIRED_INFO_NOTICE###

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ###HIDDENFIELDS### - -
    -
    - - - - -

    Here the user information is preview before final submission:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_VERIFY_BEFORE_CREATE###
    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - -
    -
    -
    -
    - - - - -

    Template, displayed if the user is already logged in.

    - -

    ###LABEL_CLICK_HERE_TO_EDIT###

    - - - - -

    This is shown when the user is created(without auto-login).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    - - - - - - - - ###HIDDENFIELDS### - -
    -
    - - - -

    This is shown when the user is created and the option setfixed is not configured, but an administrative review is required.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - -

    This is shown when the user is created and the option setfixed is configured. -The user is informed that a message has been sent to his email address.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_YOUR_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This is shown when the user is created, the option setfixed is configured and administrative review is required. -The user is informed that a message has been sent to his email address and that he needs to confirm his registration.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_PLEASE_CONFIRM###

    -

    ###LABEL_V_YOUR_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_V_FOLLOW_INSTRUCTIONS_REVIEW1###

    -

    ###LABEL_V_FOLLOW_INSTRUCTIONS_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'INVITE' TEMPLATES:

    - - - -

    Form for the registration of an invited frontend user:

    - -
    -
    -###LABEL_ENTER_INVITATION_ACCOUNT_INFO### -

    ###LABEL_REQUIRED_INFO_NOTICE###

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ###HIDDENFIELDS### - -
    -
    - - - - -

    Here the invited user information is previewed before final submission:

    - -
    -
    -###LABEL_V_VERIFY_INVITATION_BEFORE_CREATE### -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - -
    - -
    -
    -
    - - - - -

    This is shown when the invited user is created and the option setfixed is configured, which should be the case if invitations are to be sent! -The user is informed that a message has been sent to the email address and that the invited user will need to accept/confirm his registration.

    - -

    ###LABEL_V_INVITATION_CONFIRM###

    -

    ###LABEL_V_INVITATION_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_V_INVITATION_INSTRUCTIONS1###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'EDIT' TEMPLATES:

    - - - -

    Form for editing of a fe_users record:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_EDIT_YOUR_ACCOUNT###
    -

    ###LABEL_REQUIRED_INFO_NOTICE###

    - -

    ###LABEL_CLICK_HERE_TO_DELETE###

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ###HIDDENFIELDS### - - - - -
    -
    - - - - -

    Here the user information is preview before final submission:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_VERIFY_BEFORE_UPDATE###
    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - - - - -
    -
    -
    -
    - - - - -

    This is shown when the user profile has been updated

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UPDATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UPDATED_MESSAGE1###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'DELETE' TEMPLATES:

    - - - -

    This template is the response page when a user has deleted himself.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_DELETED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the verification page before the user finally deletes himself.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REALLY_WISH_TO_DELETE###

    -
    -

    - ###HIDDENFIELDS### - - -

    -
    - - - - -

    'SETFIXED' TEMPLATES

    - - - -

    This template is the response page when the user confirms his subscription(without auto-login and without adminstrative review).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    - - - - - - - - - ###HIDDENFIELDS### -
    -
    - - - - -

    This template is the response page when the user confirms his/her subscription, but it must be accepted by admin.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when the administrator accepts the account registration.

    - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when the user clicks on the link in the acceptation email (without auto-login).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ENTERED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    - - - - - - - - - - - ###HIDDENFIELDS### -
    -
    - - -

    This template is the response page when the invited person clicks on the link in the acceptation email.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ENTERED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE2###

    -

    ###LABEL_V_NOW_CHOOSE_PASSWORD###

    -
    -
    - - - - - - - ###HIDDENFIELDS### - -
    -
    - - - -

    This template is the response page when the administrator refuses the account registration.

    - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_REFUSED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when a user deleted his account.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    - - -

    This template is the response page when a user was unsubscribed by following a link of a mailing application.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    - - -

    This template is the response page when a user has clicked a setfixed link, but the link failed.

    - -

    ###LABEL_REGISTRATION_PROBLEM###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_CLICKED_TWICE###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'Authentication' templates:

    - -

    Authentication failed message.

    - -

    ###LABEL_CLICK_HERE_TO_REGISTER###

    - - -

    No permission template

    - -

    ###LABEL_REGISTRATION_PROBLEM###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - -

    Invalid token template

    - -

    ###LABEL_INVALIDTOKEN###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - -

    EMAIL TEMPLATES:

    - - - -

    In these plain text email templates the first line with content is used as subject in the mails.

    -

    This template is used to confirm to a person by email that he has created his account and no confirmation is requested.

    - - - - - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has created his account and no confirmation is requested.

    - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### -###LABEL_V_REGISTRATION_CREATED_MESSAGE1### -###LABEL_V_REGISTRATION_CREATED_MESSAGE2### - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon creation of a user account and no confirmation is required.

    - -###LABEL_V_REGISTRATION_CREATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CREATED### - -###LABEL_USERNAME###: ###FIELD_username### - -###LABEL_GENDER### ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO### ###FIELD_house_no### - - -###LABEL_CITY### ###FIELD_city### - - -###LABEL_ZONE### ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - -###LABEL_EMAIL###: ###FIELD_email### - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER### ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML### ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### -###TCA_INPUT_comments### - - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to confirm to a person by email that he has updated his account.

    - - - - - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UPDATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UPDATED_MESSAGE1###

    -

    ###LABEL_KIND_REGARDS_UPD###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has updated his account.

    - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### -###LABEL_V_REGISTRATION_UPDATED_MESSAGE1### - -###LABEL_KIND_REGARDS_UPD### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon update of a user profile.>

    - -###LABEL_V_REGISTRATION_UPDATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_UPDATED### - -###LABEL_USERNAME###: ###FIELD_username### - -###LABEL_GENDER### ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO### ###FIELD_house_no### - - -###LABEL_CITY### ###FIELD_city### - - -###LABEL_ZONE### ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - - -###LABEL_EMAIL###: ###FIELD_email### - - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER### ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML### ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### -###TCA_INPUT_comments### - - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify a person by email that he has created his account, but confirmation is required.

    - - - - - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE1###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_INI###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify a person by email that he has created his account, but confirmation is required.

    - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE1### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### -###LABEL_EXCUSE_US### - -###LABEL_KIND_REGARDS_INI### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - - -

    This is the template used for the administrator notification email upon a new user registration, but confirmation is required.

    - -###LABEL_V_REGISTRATION_INITIATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INITIATED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify a person by email that he has created his account, he needs to confirm and administrative review is required.

    - - - - - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INITIATED_REVIEW1###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INITIATED_REVIEW2###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_INI###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify a person by email that he has created his account, he needs to confirm and administrative review is required.

    - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INITIATED_REVIEW1### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INITIATED_REVIEW2### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_EXCUSE_US### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL### - -###LABEL_KIND_REGARDS_INI### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - - -

    This is the template used for the administrator notification email upon a new user registration.

    - -###LABEL_V_REGISTRATION_INITIATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INITIATED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify admin by email that a person has approved his/her registration and requires accept/refuse decision.

    - - - - - -###LABEL_V_REGISTRATION_REVIEW_SUBJECT### - - - - - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE3###

    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username###
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender###
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name###
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name###
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name###
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name###
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status###
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth###
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title###
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company###
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address###
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no###
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city###
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone###
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country###
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country###
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip###
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone###
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax###
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email###
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup###
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category###
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED###
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###LABEL_TERMS_ACKNOWLEDGED_CHECKED###
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language###
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www###
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image###
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments###
    - -
    -
    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE1###
    -###SETFIXED_ACCEPT_URL###

    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE2###
    -###SETFIXED_REFUSE_URL###

    -

    ###LABEL_KIND_REGARDS###
    -

    ###SITE_NAME###

    - - - - - - -

    This template is used to notify admin by email that a person has approved his/her registration and requires accept/refuse decision.

    - -###LABEL_V_REGISTRATION_REVIEW_SUBJECT### - -###LABEL_V_TO_THE_ADMINISTRATOR### - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE3### - -###LABEL_USERNAME###: ###FIELD_username### - - -###LABEL_GENDER###: ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO###: ###FIELD_house_no### - - -###LABEL_CITY###: ###FIELD_city### - - -###LABEL_ZONE###: ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - - -###LABEL_EMAIL###: ###FIELD_email### - - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###: ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML###: ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### ###TCA_INPUT_comments### - - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE1### -<###SETFIXED_ACCEPT_URL###> - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE2### -<###SETFIXED_REFUSE_URL###> - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify an invited person by email that an account has been created for him/her.

    - - - - - -###LABEL_V_REGISTRATION_INVITED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INVITED_MESSAGE1A###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INVITED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_KIND_REGARDS_INV###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify an invited person by email that an account has been created for him/her.

    - -###LABEL_V_REGISTRATION_INVITED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INVITED_MESSAGE1A### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INVITED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### -###LABEL_EXCUSE_US### - -###LABEL_KIND_REGARDS_INV### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon a new user registration.

    - -###LABEL_V_REGISTRATION_INVITED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INVITED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - - - - - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_CRE###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1### - -###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2### - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon user confirmation of his registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CONFIRMED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - - - - - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1### - -###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2### - -###LABEL_KIND_REGARDS### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon user confirmation of his registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CONFIRMED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when the registration of a person was confirmed.

    - - - - - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE3###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE4### ###SETFIXED_ENTER_URL###

    -

    ###LABEL_KIND_REGARDS_CRE###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when the registration of a person was confirmed.

    - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - -###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE3### - -###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE4### <###SETFIXED_ENTER_URL###> - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon acceptation of the user registration.

    - -###LABEL_V_REGISTRATION_ACCEPTED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_ACCEPTED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a sorry email when the registration of a person was refused.

    - - - - - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_REFUSED_SUBJECT2###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE3###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE4### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a sorry email when the registration of a person was refused.

    - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - -###LABEL_V_REGISTRATION_REFUSED_MESSAGE3### - -###LABEL_V_REGISTRATION_REFUSED_MESSAGE4### ###SITE_EMAIL### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon refusal of the user registration.

    - -###LABEL_V_REGISTRATION_REFUSED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_REFUSED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This is the template used for the administrator notification email upon user access to login form after user acceptation.

    - -###LABEL_V_REGISTRATION_ENTERED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_ENTERED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to confirm to a person by email that he has cancelles his registration.

    - - - - - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - -###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1### - -###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - -

    This is the template used for the administrator notification email upon user refusal to confirm his registration.

    - -###LABEL_V_REGISTRATION_CANCELLED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CANCELLED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - -

    This template is used to confirm to a person by email that he was unsubscribed, but that his account is still active.

    - - - - - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he was unsubscribed, but that his account is still active.

    - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - - - - - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_DELETED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - -###LABEL_V_REGISTRATION_DELETED_MESSAGE1### - -###LABEL_V_REGISTRATION_DELETED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon deletion of a user account.

    - -###LABEL_V_REGISTRATION_DELETED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_DELETED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - diff --git a/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterHtmlTemplate.html b/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterHtmlTemplate.html deleted file mode 100644 index f984241..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Private/Templates/RegisterHtmlTemplate.html +++ /dev/null @@ -1,3517 +0,0 @@ - - - - Frond End User Registration Template - - - -

    FRONTEND USER REGISTRATION

    -

    EXAMPLE

    -

    Attention: Please don't forget to add ' ' after the data values in the preview mode. If you don't, you will get problems with your IE-browser users

    - -

    'CREATE' TEMPLATES:

    - - -

    Form for the registration of a frontend user:

    - -
    -
    -###LABEL_ENTER_ACCOUNT_INFO### -

    ###LABEL_REQUIRED_INFO_NOTICE###

    -
    - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_username###

    - - -

    ###MISSING_USERNAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_password###

    - - -

    ###MISSING_PASSWORD###

    - - -
    - -
    - -
    -
    - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_gender###

    - - -

    ###MISSING_GENDER###

    - - ###TCA_INPUT_gender### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_name###

    - - -

    ###MISSING_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_first_name###

    - - -

    ###MISSING_FIRST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_middle_name###

    - - -

    ###MISSING_MIDDLE_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_last_name###

    - - -

    ###MISSING_LAST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_cnum###

    - - -

    ###MISSING_CNUM###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_status###

    - - -

    ###MISSING_STATUS###

    - - ###TCA_INPUT_status### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_date_of_birth###

    - - -

    ###MISSING_DATE_OF_BIRTH###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_title###

    - - -

    ###MISSING_TITLE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_company###

    - - -

    ###MISSING_COMPANY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_address###

    - - -

    ###MISSING_ADDRESS###

    - - -
    - - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_house_no###

    - - -

    ###MISSING_HOUSE_NO###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_city###

    - - -

    ###MISSING_CITY###

    - - -
    - - - -
    - -
    -
    - -

    ###MISSING_ZONE###

    - - ###SELECTOR_ZONE### -
    - - - -
    - -
    -
    - -

    ###MISSING_STATIC_INFO_COUNTRY###

    - - ###SELECTOR_STATIC_INFO_COUNTRY### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_country###

    - - -

    ###MISSING_COUNTRY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_zip###

    - - -

    ###MISSING_ZIP###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_telephone###

    - - -

    ###MISSING_TELEPHONE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_fax###

    - - -

    ###MISSING_FAX###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_email###

    - - -

    ###MISSING_EMAIL###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_usergroup###

    - - -

    ###MISSING_USERGROUP###

    - - ###TCA_INPUT_usergroup### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_NEWSLETTER###

    - - ###TCA_INPUT_module_sys_dmail_newsletter### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_module_sys_dmail_category###

    - - -

    ###MISSING_MODULE_SYS_DMAIL_CATEGORY###

    - - ###TCA_INPUT_module_sys_dmail_category### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_HTML###

    - - ###TCA_INPUT_module_sys_dmail_html### -
    - - - -
    - -
    -
    -

    ###LABEL_CLICK_HERE_TO_SEE_TERMS###

    - -

    ###EVAL_ERROR_FIELD_terms_acknowledged###

    - - -

    ###MISSING_TERMS_ACKNOWLEDGED###

    - - ###TCA_INPUT_terms_acknowledged### -
    - - - -
    - -
    -
    - -

    ###MISSING_LANGUAGE###

    - - ###SELECTOR_LANGUAGE### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_www###

    - - -

    ###MISSING_WWW###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_image###

    - - -

    ###MISSING_IMAGE###

    - - ###UPLOAD_image### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_comments###

    - - -

    ###MISSING_COMMENTS###

    - - ###TCA_INPUT_comments### -
    - - - -
    - - ###SR_FREECAP_CANT_READ### -
    -
    - -

    ###EVAL_ERROR_FIELD_captcha_response###

    - - - ###SR_FREECAP_IMAGE######CAPTCHA_IMAGE### - ###SR_FREECAP_ACCESSIBLE### -
    - - -
     
    -
    - ###HIDDENFIELDS### - -
    -
    -
    -
    - - - - -

    Here the user information is preview before final submission:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_VERIFY_BEFORE_CREATE###
    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - -
    -
    -
    -
    - - - - -

    Template, displayed if the user is already logged in.

    - -

    ###LABEL_CLICK_HERE_TO_EDIT###

    - - - - -

    This is shown when the user is created(without auto-login).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    -
    -
    ###LABEL_USERNAME###
    -
    - -
    ###LABEL_PASSWORD###
    -
    - -
     
    -
    - - - - ###HIDDENFIELDS### - -
    -
    -
    -
    - - - -

    This is shown when the user is created and the option setfixed is not configured, but an administrative review is required.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - -

    This is shown when the user is created and the option setfixed is configured. -The user is informed that a message has been sent to his email address.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_YOUR_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This is shown when the user is created, the option setfixed is configured and administrative review is required. -The user is informed that a message has been sent to his email address and that he needs to confirm his registration.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_PLEASE_CONFIRM###

    -

    ###LABEL_V_YOUR_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_V_FOLLOW_INSTRUCTIONS_REVIEW1###

    -

    ###LABEL_V_FOLLOW_INSTRUCTIONS_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'INVITE' TEMPLATES:

    - - - -

    Form for the registration of an invited frontend user:

    - -
    -
    -###LABEL_ENTER_INVITATION_ACCOUNT_INFO### -

    ###LABEL_REQUIRED_INFO_NOTICE###

    -
    - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_username###

    - - -

    ###MISSING_USERNAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_gender###

    - - -

    ###MISSING_GENDER###

    - - ###TCA_INPUT_gender### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_name###

    - - -

    ###MISSING_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_first_name###

    - - -

    ###MISSING_FIRST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_middle_name###

    - - -

    ###MISSING_MIDDLE_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_last_name###

    - - -

    ###MISSING_LAST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_status###

    - - -

    ###MISSING_STATUS###

    - - ###TCA_INPUT_status### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_date_of_birth###

    - - -

    ###MISSING_DATE_OF_BIRTH###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_title###

    - - -

    ###MISSING_TITLE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_company###

    - - -

    ###MISSING_COMPANY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_address###

    - - -

    ###MISSING_ADDRESS###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_house_no###

    - - -

    ###MISSING_HOUSE_NO###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_city###

    - - -

    ###MISSING_CITY###

    - - -
    - - - -
    - -
    -
    - -

    ###MISSING_ZONE###

    - - ###SELECTOR_ZONE### -
    - - - -
    - -
    -
    - -

    ###MISSING_STATIC_INFO_COUNTRY###

    - - ###SELECTOR_STATIC_INFO_COUNTRY### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_country###

    - - -

    ###MISSING_COUNTRY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_zip###

    - - -

    ###MISSING_ZIP###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_telephone###

    - - -

    ###MISSING_TELEPHONE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_fax###

    - - -

    ###MISSING_FAX###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_email###

    - - -

    ###MISSING_EMAIL###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_usergroup###

    - - -

    ###MISSING_USERGROUP###

    - - ###TCA_INPUT_usergroup### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_NEWSLETTER###

    - - ###TCA_INPUT_module_sys_dmail_newsletter### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_module_sys_dmail_category###

    - - -

    ###MISSING_MODULE_SYS_DMAIL_CATEGORY###

    - - ###TCA_INPUT_module_sys_dmail_category### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_HTML###

    - - ###TCA_INPUT_module_sys_dmail_html### -
    - - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_terms_acknowledged###

    - - -

    ###MISSING_TERMS_ACKNOWLEDGED###

    - - ###TCA_INPUT_terms_acknowledged### -
    - - - - -
    - -
    -
    - -

    ###MISSING_LANGUAGE###

    - - ###SELECTOR_LANGUAGE### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_www###

    - - -

    ###MISSING_WWW###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_image###

    - - -

    ###MISSING_IMAGE###

    - - ###UPLOAD_image### -
    - - -
     
    -
    - ###HIDDENFIELDS### - -
    -
    -
    -
    - - - - -

    Here the invited user information is previewed before final submission:

    - -
    -
    -###LABEL_V_VERIFY_INVITATION_BEFORE_CREATE### -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - -
    - -
    -
    -
    - - - - -

    This is shown when the invited user is created and the option setfixed is configured, which should be the case if invitations are to be sent! -The user is informed that a message has been sent to the email address and that the invited user will need to accept/confirm his registration.

    - -

    ###LABEL_V_INVITATION_CONFIRM###

    -

    ###LABEL_V_INVITATION_ACCOUNT_WAS_CREATED###

    -

    ###LABEL_V_INVITATION_INSTRUCTIONS1###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'EDIT' TEMPLATES:

    - - - -

    Form for editing of a fe_users record:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_EDIT_YOUR_ACCOUNT###
    -

    ###LABEL_REQUIRED_INFO_NOTICE###

    - -

    ###LABEL_CLICK_HERE_TO_DELETE###

    - -
    - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_password###

    - - -

    ###MISSING_PASSWORD###

    - - -
    -
    - -
    -
    - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_gender###

    - - -

    ###MISSING_GENDER###

    - - ###TCA_INPUT_gender### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_name###

    - - -

    ###MISSING_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_first_name###

    - - -

    ###MISSING_FIRST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_middle_name###

    - - -

    ###MISSING_MIDDLE_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_last_name###

    - - -

    ###MISSING_LAST_NAME###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_status###

    - - -

    ###MISSING_STATUS###

    - - ###TCA_INPUT_status### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_date_of_birth###

    - - -

    ###MISSING_DATE_OF_BIRTH###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_title###

    - - -

    ###MISSING_TITLE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_company###

    - - -

    ###MISSING_COMPANY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_address###

    - - -

    ###MISSING_ADDRESS###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_house_no###

    - - -

    ###MISSING_HOUSE_NO###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_city###

    - - -

    ###MISSING_CITY###

    - - -
    - - - -
    - -
    -
    - -

    ###MISSING_ZONE###

    - - ###SELECTOR_ZONE### -
    - - - -
    - -
    -
    - -

    ###MISSING_STATIC_INFO_COUNTRY###

    - - ###SELECTOR_STATIC_INFO_COUNTRY### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_country###

    - - -

    ###MISSING_COUNTRY###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_zip###

    - - -

    ###MISSING_ZIP###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_telephone###

    - - -

    ###MISSING_TELEPHONE###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_fax###

    - - -

    ###MISSING_FAX###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_email###

    - - -

    ###MISSING_EMAIL###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_usergroup###

    - - -

    ###MISSING_USERGROUP###

    - - ###TCA_INPUT_usergroup### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_NEWSLETTER###

    - - ###TCA_INPUT_module_sys_dmail_newsletter### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_module_sys_dmail_category###

    - - -

    ###MISSING_MODULE_SYS_DMAIL_CATEGORY###

    - - ###TCA_INPUT_module_sys_dmail_category### -
    - - - -
    - -
    -
    - -

    ###MISSING_MODULE_SYS_DMAIL_HTML###

    - - ###TCA_INPUT_module_sys_dmail_html### -
    - - - -
    - -
    -
    -

    ###LABEL_CLICK_HERE_TO_SEE_TERMS###

    - -

    ###EVAL_ERROR_FIELD_terms_acknowledged###

    - - -

    ###MISSING_TERMS_ACKNOWLEDGED###

    - - ###TCA_INPUT_terms_acknowledged### -
    - - - -
    - -
    -
    - -

    ###MISSING_LANGUAGE###

    - - ###SELECTOR_LANGUAGE### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_www###

    - - -

    ###MISSING_WWW###

    - - -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_image###

    - - -

    ###MISSING_IMAGE###

    - - ###UPLOAD_image### -
    - - - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_comments###

    - - -

    ###MISSING_COMMENTS###

    - - ###TCA_INPUT_comments### -
    - - - -
    - - ###SR_FREECAP_CANT_READ### -
    -
    - -

    ###EVAL_ERROR_FIELD_captcha_response###

    - - - ###SR_FREECAP_IMAGE######CAPTCHA_IMAGE### -
    - - -
     
    -
    - ###HIDDENFIELDS### - - - - -
    -
    -
    -
    - - - - -

    Here the user information is preview before final submission:

    - -
    -
    -###LABEL_V_DEAR###
    ###LABEL_V_VERIFY_BEFORE_UPDATE###
    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username### 
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender### 
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name### 
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name### 
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name### 
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name### 
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status### 
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth### 
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title### 
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company### 
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address### 
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no### 
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city### 
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone### 
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country### 
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country### 
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip### 
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone### 
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax### 
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email### 
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###TCA_INPUT_module_sys_dmail_html### 
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###TCA_INPUT_terms_acknowledged### 
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language### 
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www### 
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image### 
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments### 
    - - -
     
    -
    - ###HIDDENFIELDS### - - - - - -
    -
    -
    -
    - - - - -

    This is shown when the user profile has been updated

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UPDATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UPDATED_MESSAGE1###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'DELETE' TEMPLATES:

    - - - -

    This template is the response page when a user has deleted himself.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_DELETED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the verification page before the user finally deletes himself.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REALLY_WISH_TO_DELETE###

    -
    -

    - ###HIDDENFIELDS### - - -

    -
    - - - - -

    'SETFIXED' TEMPLATES

    - - - -

    This template is the response page when the user confirms his subscription(without auto-login and without adminstrative review).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    -
    -
    -
    - -
    -
    - -
     
    -
    - - - - - ###HIDDENFIELDS### -
    -
    -
    -
    - - - - -

    This template is the response page when the user confirms his/her subscription, but it must be accepted by admin.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when the administrator accepts the account registration.

    - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when the user clicks on the link in the acceptation email (without auto-login).

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ENTERED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE2###

    -

    ###LABEL_V_NOW_ENTER_YOUR_USERNAME###

    -
    -
    -
    -
    - -
    -
    - -
     
    -
    - - - - - ###HIDDENFIELDS### -
    -
    -
    - - -

    This template is the response page when the invited person clicks on the link in the acceptation email.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ENTERED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_ENTERED_MESSAGE2###

    -

    ###LABEL_V_NOW_CHOOSE_PASSWORD###

    -
    -
    -
    - -
    - -
    -
    - -

    ###EVAL_ERROR_FIELD_password###

    - - -

    ###MISSING_PASSWORD###

    - - -
    -
    - -
    -
    - -
    - - -
     
    -
    - ###HIDDENFIELDS### - -
    -
    -
    -
    - - - -

    This template is the response page when the administrator refuses the account registration.

    - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_REFUSED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    This template is the response page when a user deleted his account.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    - - -

    This template is the response page when a user was unsubscribed by following a link of a mailing application.

    - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    - - -

    This template is the response page when a user has clicked a setfixed link, but the link failed.

    - -

    ###LABEL_REGISTRATION_PROBLEM###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_CLICKED_TWICE###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - - -

    'Authentication' templates:

    - -

    Authentication failed message.

    - -

    ###LABEL_CLICK_HERE_TO_REGISTER###

    - - -

    No permission template

    - -

    ###LABEL_REGISTRATION_PROBLEM###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - -

    Invalid token template

    - -

    ###LABEL_INVALIDTOKEN###

    -

    ###LABEL_REGISTRATION_SORRY###

    -

    ###LABEL_REGISTRATION_HELP### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    - - - -

    EMAIL TEMPLATES:

    - - - -

    In these plain text email templates the first line with content is used as subject in the mails.

    -

    This template is used to confirm to a person by email that he has created his account and no confirmation is requested.

    - - - - - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CREATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CREATED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has created his account and no confirmation is requested.

    - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CREATED_SUBJECT### -###LABEL_V_REGISTRATION_CREATED_MESSAGE1### -###LABEL_V_REGISTRATION_CREATED_MESSAGE2### - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon creation of a user account and no confirmation is required.

    - -###LABEL_V_REGISTRATION_CREATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CREATED### - -###LABEL_USERNAME###: ###FIELD_username### - -###LABEL_GENDER### ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO### ###FIELD_house_no### - - -###LABEL_CITY### ###FIELD_city### - - -###LABEL_ZONE### ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - -###LABEL_EMAIL###: ###FIELD_email### - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER### ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML### ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### -###TCA_INPUT_comments### - - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to confirm to a person by email that he has updated his account.

    - - - - - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UPDATED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UPDATED_MESSAGE1###

    -

    ###LABEL_KIND_REGARDS_UPD###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has updated his account.

    - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_UPDATED_SUBJECT### -###LABEL_V_REGISTRATION_UPDATED_MESSAGE1### - -###LABEL_KIND_REGARDS_UPD### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon update of a user profile.>

    - -###LABEL_V_REGISTRATION_UPDATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_UPDATED### - -###LABEL_USERNAME###: ###FIELD_username### - -###LABEL_GENDER### ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO### ###FIELD_house_no### - - -###LABEL_CITY### ###FIELD_city### - - -###LABEL_ZONE### ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - - -###LABEL_EMAIL###: ###FIELD_email### - - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER### ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML### ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### -###TCA_INPUT_comments### - - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify a person by email that he has created his account, but confirmation is required.

    - - - - - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE1###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_INI###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify a person by email that he has created his account, but confirmation is required.

    - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE1### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### -###LABEL_EXCUSE_US### - -###LABEL_KIND_REGARDS_INI### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - - -

    This is the template used for the administrator notification email upon a new user registration, but confirmation is required.

    - -###LABEL_V_REGISTRATION_INITIATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INITIATED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify a person by email that he has created his account, he needs to confirm and administrative review is required.

    - - - - - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INITIATED_REVIEW1###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INITIATED_REVIEW2###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_INI###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify a person by email that he has created his account, he needs to confirm and administrative review is required.

    - -###LABEL_V_REGISTRATION_INITIATED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INITIATED_REVIEW1### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INITIATED_REVIEW2### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_EXCUSE_US### - -###LABEL_V_REGISTRATION_INITIATED_MESSAGE3### ###SITE_EMAIL### - -###LABEL_KIND_REGARDS_INI### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - - -

    This is the template used for the administrator notification email upon a new user registration.

    - -###LABEL_V_REGISTRATION_INITIATED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INITIATED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify admin by email that a person has approved his/her registration and requires accept/refuse decision.

    - - - - - -###LABEL_V_REGISTRATION_REVIEW_SUBJECT### - - - - - -

    ###LABEL_V_TO_THE_ADMINISTRATOR###

    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE3###

    -
    - -
    ###LABEL_USERNAME###
    -
    ###FIELD_username###
    - - - -
    ###LABEL_GENDER###
    -
    ###TCA_INPUT_gender###
    - - - -
    ###LABEL_NAME###
    -
    ###FIELD_name###
    - - - -
    ###LABEL_FIRST_NAME###
    -
    ###FIELD_first_name###
    - - - -
    ###LABEL_MIDDLE_NAME###
    -
    ###FIELD_middle_name###
    - - - -
    ###LABEL_LAST_NAME###
    -
    ###FIELD_last_name###
    - - - -
    ###LABEL_STATUS###
    -
    ###TCA_INPUT_status###
    - - - -
    ###LABEL_DATE_OF_BIRTH###
    -
    ###FIELD_date_of_birth###
    - - - -
    ###LABEL_TITLE###
    -
    ###FIELD_title###
    - - - -
    ###LABEL_COMPANY###
    -
    ###FIELD_company###
    - - - -
    ###LABEL_ADDRESS###
    -
    ###FIELD_address###
    - - - -
    ###LABEL_HOUSE_NO###
    -
    ###FIELD_house_no###
    - - - -
    ###LABEL_CITY###
    -
    ###FIELD_city###
    - - - -
    ###LABEL_ZONE###
    -
    ###FIELD_zone###
    - - - -
    ###LABEL_COUNTRY###
    -
    ###FIELD_country###
    - - - -
    ###LABEL_STATIC_INFO_COUNTRY###
    -
    ###FIELD_static_info_country###
    - - - -
    ###LABEL_ZIP###
    -
    ###FIELD_zip###
    - - - -
    ###LABEL_TELEPHONE###
    -
    ###FIELD_telephone###
    - - - -
    ###LABEL_FAX###
    -
    ###FIELD_fax###
    - - - -
    ###LABEL_EMAIL###
    -
    ###FIELD_email###
    - - - -
    ###LABEL_USERGROUP###
    -
    ###TCA_INPUT_usergroup###
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###
    -
    ###TCA_INPUT_module_sys_dmail_newsletter### 
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_CATEGORY###
    -
    ###TCA_INPUT_module_sys_dmail_category###
    - - - -
    ###LABEL_MODULE_SYS_DMAIL_HTML###
    -
    ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED###
    - - - -
    ###LABEL_TERMS_ACKNOWLEDGED###
    -
    ###LABEL_TERMS_ACKNOWLEDGED_CHECKED###
    - - - -
    ###LABEL_LANGUAGE###
    -
    ###FIELD_language###
    - - - -
    ###LABEL_WWW###
    -
    ###FIELD_www###
    - - - -
    ###LABEL_IMAGE###
    -
    ###UPLOAD_PREVIEW_image###
    - - - -
    ###LABEL_COMMENTS###
    -
    ###TCA_INPUT_comments###
    - -
    -
    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE1###
    -###SETFIXED_ACCEPT_URL###

    -

    ###LABEL_V_REGISTRATION_REVIEW_MESSAGE2###
    -###SETFIXED_REFUSE_URL###

    -

    ###LABEL_KIND_REGARDS###
    -

    ###SITE_NAME###

    - - - - - - -

    This template is used to notify admin by email that a person has approved his/her registration and requires accept/refuse decision.

    - -###LABEL_V_REGISTRATION_REVIEW_SUBJECT### - -###LABEL_V_TO_THE_ADMINISTRATOR### - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE3### - -###LABEL_USERNAME###: ###FIELD_username### - - -###LABEL_GENDER###: ###TCA_INPUT_gender### - - -###LABEL_NAME### ###FIELD_name### - - -###LABEL_FIRST_NAME###: ###FIELD_first_name### - - -###LABEL_MIDDLE_NAME###: ###FIELD_middle_name### - - -###LABEL_LAST_NAME###: ###FIELD_last_name### - - -###LABEL_STATUS### ###TCA_INPUT_status### - - -###LABEL_DATE_OF_BIRTH###: ###FIELD_date_of_birth### - - -###LABEL_TITLE###: ###FIELD_title### - - -###LABEL_COMPANY###: ###FIELD_company### - - -###LABEL_ADDRESS###: ###FIELD_address### - - -###LABEL_HOUSE_NO###: ###FIELD_house_no### - - -###LABEL_CITY###: ###FIELD_city### - - -###LABEL_ZONE###: ###FIELD_zone### - - -###LABEL_COUNTRY###: ###FIELD_country### - - -###LABEL_STATIC_INFO_COUNTRY###: ###FIELD_static_info_country### - - -###LABEL_ZIP###: ###FIELD_zip### - - -###LABEL_TELEPHONE###: ###FIELD_telephone### - - -###LABEL_FAX###: ###FIELD_fax### - - -###LABEL_EMAIL###: ###FIELD_email### - - -###LABEL_USERGROUP###: -###TCA_INPUT_usergroup### - - -###LABEL_MODULE_SYS_DMAIL_NEWSLETTER###: ###LABEL_MODULE_SYS_DMAIL_NEWSLETTER_CHECKED### - - -###LABEL_MODULE_SYS_DMAIL_CATEGORY###: -###TCA_INPUT_module_sys_dmail_category### - - -###LABEL_MODULE_SYS_DMAIL_HTML###: ###LABEL_MODULE_SYS_DMAIL_HTML_CHECKED### - - -###LABEL_TERMS_ACKNOWLEDGED###: ###LABEL_TERMS_ACKNOWLEDGED_CHECKED### - - -###LABEL_LANGUAGE###: ###FIELD_language### - - -###LABEL_WWW###: ###FIELD_www### - - -###LABEL_IMAGE###: ###UPLOAD_PREVIEW_image### - - -###LABEL_COMMENTS### ###TCA_INPUT_comments### - - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE1### -<###SETFIXED_ACCEPT_URL###> - -###LABEL_V_REGISTRATION_REVIEW_MESSAGE2### -<###SETFIXED_REFUSE_URL###> - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to notify an invited person by email that an account has been created for him/her.

    - - - - - -###LABEL_V_REGISTRATION_INVITED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_INVITED_MESSAGE1A###
    -###SETFIXED_APPROVE_URL###
    -###LABEL_COPY_PASTE_LINK###

    -

    ###LABEL_V_REGISTRATION_INVITED_MESSAGE2###
    -###SETFIXED_DELETE_URL###
    -###LABEL_COPY_PASTE_LINK###
    -###LABEL_EXCUSE_US###

    -

    ###LABEL_KIND_REGARDS_INV###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to notify an invited person by email that an account has been created for him/her.

    - -###LABEL_V_REGISTRATION_INVITED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_INVITED_MESSAGE1A### -<###SETFIXED_APPROVE_URL###> -###LABEL_COPY_PASTE_LINK### - -###LABEL_V_REGISTRATION_INVITED_MESSAGE2### -<###SETFIXED_DELETE_URL###> -###LABEL_COPY_PASTE_LINK### -###LABEL_EXCUSE_US### - -###LABEL_KIND_REGARDS_INV### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon a new user registration.

    - -###LABEL_V_REGISTRATION_INVITED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_INVITED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - - - - - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_CRE###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE1### - -###LABEL_V_REGISTRATION_CONFIRMED_MESSAGE2### - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon user confirmation of his registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CONFIRMED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - - - - - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1###

    -

    ###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2###

    -

    ###LABEL_KIND_REGARDS###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when a person has confirmed his(her) registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CONFIRMED_SUBJECT### - -###LABEL_V_REGISTRATION_CONFIRMED_REVIEW1### - -###LABEL_V_REGISTRATION_CONFIRMED_REVIEW2### - -###LABEL_KIND_REGARDS### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon user confirmation of his registration.

    - -###LABEL_V_REGISTRATION_CONFIRMED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CONFIRMED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a welcome email when the registration of a person was confirmed.

    - - - - - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE3###

    -

    ###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE4### ###SETFIXED_ENTER_URL###

    -

    ###LABEL_KIND_REGARDS_CRE###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a welcome email when the registration of a person was confirmed.

    - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_ACCEPTED_SUBJECT2### - -###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE3### - -###LABEL_V_REGISTRATION_ACCEPTED_MESSAGE4### <###SETFIXED_ENTER_URL###> - -###LABEL_KIND_REGARDS_CRE### -###SITE_NAME### -<###SITE_URL###> -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon acceptation of the user registration.

    - -###LABEL_V_REGISTRATION_ACCEPTED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_ACCEPTED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to send a sorry email when the registration of a person was refused.

    - - - - - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_REFUSED_SUBJECT2###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE3###

    -

    ###LABEL_V_REGISTRATION_REFUSED_MESSAGE4### ###SITE_EMAIL###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to send a sorry email when the registration of a person was refused.

    - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_REFUSED_SUBJECT2### - -###LABEL_V_REGISTRATION_REFUSED_MESSAGE3### - -###LABEL_V_REGISTRATION_REFUSED_MESSAGE4### ###SITE_EMAIL### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon refusal of the user registration.

    - -###LABEL_V_REGISTRATION_REFUSED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_REFUSED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This is the template used for the administrator notification email upon user access to login form after user acceptation.

    - -###LABEL_V_REGISTRATION_ENTERED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_ENTERED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - -

    This template is used to confirm to a person by email that he has cancelles his registration.

    - - - - - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_CANCELLED_SUBJECT### - -###LABEL_V_REGISTRATION_CANCELLED_MESSAGE1### - -###LABEL_V_REGISTRATION_CANCELLED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - -

    This is the template used for the administrator notification email upon user refusal to confirm his registration.

    - -###LABEL_V_REGISTRATION_CANCELLED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_CANCELLED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - -

    This template is used to confirm to a person by email that he was unsubscribed, but that his account is still active.

    - - - - - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he was unsubscribed, but that his account is still active.

    - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_SUBJECT### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE1### - -###LABEL_V_REGISTRATION_UNSUBSCRIBED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - - - - - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - - - - - -

    ###LABEL_V_DEAR###

    -

    ###LABEL_V_REGISTRATION_DELETED_SUBJECT###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE1###

    -

    ###LABEL_V_REGISTRATION_DELETED_MESSAGE2###

    -

    ###LABEL_KIND_REGARDS_DEL###

    -

    ###SITE_NAME###

    -

    ###SITE_WWW###
    -###SITE_EMAIL###

    - - - - - - - -

    This template is used to confirm to a person by email that he has deleted his account.

    - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - -###LABEL_V_DEAR### - -###LABEL_V_REGISTRATION_DELETED_SUBJECT### - -###LABEL_V_REGISTRATION_DELETED_MESSAGE1### - -###LABEL_V_REGISTRATION_DELETED_MESSAGE2### - -###LABEL_KIND_REGARDS_DEL### -###SITE_NAME### -###SITE_URL### -###SITE_EMAIL### - - - - - -

    This is the template used for the administrator notification email upon deletion of a user account.

    - -###LABEL_V_REGISTRATION_DELETED### -###LABEL_V_NOTIFICATION###: - -###LABEL_V_REGISTRATION_DELETED### - -###LABEL_NAME### ###FIELD_name### -###LABEL_EMAIL### ###FIELD_email### -###LABEL_USERNAME### ###FIELD_username### - -###LABEL_KIND_REGARDS### -###SITE_NAME### - - - - - diff --git a/typo3conf/ext/sr_feuser_register/Resources/Public/Icons/Extension.svg b/typo3conf/ext/sr_feuser_register/Resources/Public/Icons/Extension.svg deleted file mode 100644 index a9d7f25..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Public/Icons/Extension.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/icon_delete.png b/typo3conf/ext/sr_feuser_register/Resources/Public/Images/icon_delete.png deleted file mode 100644 index 3debf9c..0000000 Binary files a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/icon_delete.png and /dev/null differ diff --git a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link.png b/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link.png deleted file mode 100644 index 83b6699..0000000 Binary files a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link.png and /dev/null differ diff --git a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link_new_window.png b/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link_new_window.png deleted file mode 100644 index b1eee27..0000000 Binary files a/typo3conf/ext/sr_feuser_register/Resources/Public/Images/internal_link_new_window.png and /dev/null differ diff --git a/typo3conf/ext/sr_feuser_register/Resources/Public/JavaScript/jsfunc.updateform.js b/typo3conf/ext/sr_feuser_register/Resources/Public/JavaScript/jsfunc.updateform.js deleted file mode 100644 index 141ae03..0000000 --- a/typo3conf/ext/sr_feuser_register/Resources/Public/JavaScript/jsfunc.updateform.js +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************** -* -* Universal formupdate-function -* -* Copyright notice -* -* (c) 1998-2003 Kasper Skaarhoj -* (c) 2005-2007 Stanislas Rolland -* All rights reserved -* -* This script is part of the TYPO3 t3lib/ library provided by -* Kasper Skaarhoj together with TYPO3 -* -* This modified script is part of the TYPO3 sr_feuser_register extension provided by -* Stanislas Rolland to use form id rather than formname -* -* Released under GNU/GPL (see license file in tslib/) -* -* 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. -* -* This copyright notice MUST APPEAR in all copies of this script -***************************************************************/ - - -function updateForm(formId,fieldname,value) { - function htmlSpecialChars_decode (str) { - return str.replace(/</g, '<') - .replace(/>/g, '>') - .replace(/&/g, '&') - .replace(/"/g, '"'); - } - - var formObj = document.getElementById(formId); - if (formObj && formObj[fieldname]) { - var fObj = formObj[fieldname]; - var type=fObj.type; - if (!fObj.type) { - type="text"; - } - switch(type) { - case "password": - fObj.value = value; - break; - case "checkbox": - fObj.checked = ((value && value!=0) ? "on":""); - break; - case "select-one": - var l=fObj.length; - for (a=0;a 'Front End User Registration', - 'description' => 'A self-registration variant of Kasper Skårhøj\'s Front End User Admin extension for TYPO3 CMS.', - 'category' => 'plugin', - 'version' => '11.5.4', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => true, - 'author' => 'Stanislas Rolland', - 'author_email' => 'typo3AAAA@sjbr.ca', - 'author_company' => 'SJBR', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '10.4.21-11.5.99', - 'felogin' => '10.4.21-11.5.99', - 'static_info_tables' => '6.9.0-11.5.99', - ), - 'suggests' => - array ( - 'sr_freecap' => '2.5.3-11.5.99', - ), - 'conflicts' => - array ( - ), - ), -); - diff --git a/typo3conf/ext/sr_feuser_register/ext_localconf.php b/typo3conf/ext/sr_feuser_register/ext_localconf.php deleted file mode 100644 index 552c5a6..0000000 --- a/typo3conf/ext/sr_feuser_register/ext_localconf.php +++ /dev/null @@ -1,70 +0,0 @@ -get($extKey); - // Example of configuration of hooks - // $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['confirmRegistrationClass'][] = 'SJBR\\SrFeuserRegister\\Hooks\\Handler'; - if ( - !isset($extensionConfiguration['tx_srfeuserregister_pi1']['registrationProcess']) - || !is_array($extensionConfiguration['tx_srfeuserregister_pi1']['registrationProcess']) - ) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['registrationProcess'] = []; - } - if (!in_array(RegistrationProcessHooks::class, $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['registrationProcess'])) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['registrationProcess'][] = RegistrationProcessHooks::class; - } - // Configure captcha hooks - if ( - !isset($extensionConfiguration['captcha']) - || !is_array($extensionConfiguration['captcha']) - ) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['captcha'] = []; - } - if (!in_array(Freecap::class, $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['captcha'])) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['captcha'][] = Freecap::class; - } - // Configure usergroup hooks - if ( - !isset($extensionConfiguration['tx_srfeuserregister_pi1']['configuration']) - || !is_array($extensionConfiguration['tx_srfeuserregister_pi1']['configuration']) - ) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['configuration'] = []; - } - if (!in_array(UsergroupHooks::class, $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['configuration'])) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['configuration'][] = UsergroupHooks::class; - } - if ( - !isset($extensionConfiguration['tx_srfeuserregister_pi1']['fe_users']['usergroup']) - || !is_array($extensionConfiguration['tx_srfeuserregister_pi1']['fe_users']['usergroup']) - ) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['fe_users']['usergroup'] = []; - } - if (!in_array(UsergroupHooks::class, $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['fe_users']['usergroup'])) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['fe_users']['usergroup'][] = UsergroupHooks::class; - } - // Configure file upload hooks - if ( - !isset($extensionConfiguration['tx_srfeuserregister_pi1']['model']) - || !is_array($extensionConfiguration['tx_srfeuserregister_pi1']['model']) - ) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['model'] = []; - } - if (!in_array(FileUploadHooks::class, $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['model'])) { - $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey]['tx_srfeuserregister_pi1']['model'][] = FileUploadHooks::class; - } - // Register Status Report Hook - $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status']['providers']['Front End User Registration'][] = StatusProvider::class; - }, - 'sr_feuser_register' -); \ No newline at end of file diff --git a/typo3conf/ext/sr_feuser_register/ext_tables.sql b/typo3conf/ext/sr_feuser_register/ext_tables.sql deleted file mode 100644 index cd9b6e6..0000000 --- a/typo3conf/ext/sr_feuser_register/ext_tables.sql +++ /dev/null @@ -1,32 +0,0 @@ - -# THESE create statements will be detected by the Typo3 Install Tool and through that -# you should upgrade the tables to content these fields. - -CREATE TABLE fe_users ( - static_info_country varchar(3) DEFAULT '' NOT NULL, - zone varchar(45) DEFAULT '' NOT NULL, - language varchar(5) DEFAULT '' NOT NULL, - gender int(11) DEFAULT '99' NOT NULL, - cnum varchar(50) DEFAULT '' NOT NULL, - status int(11) DEFAULT '0' NOT NULL, - house_no varchar(20) DEFAULT '' NOT NULL, - date_of_birth int(11) DEFAULT '0' NOT NULL, - comments varchar(1024) DEFAULT '' NOT NULL, - by_invitation smallint(6) DEFAULT '0' NOT NULL, - module_sys_dmail_html smallint(6) DEFAULT '0' NOT NULL, - terms_acknowledged smallint(6) DEFAULT '0' NOT NULL, - token varchar(32) DEFAULT '' NOT NULL, - tx_srfeuserregister_password blob -); - -# -# Table structure for table 'cache_md5params' -# -CREATE TABLE cache_md5params ( - md5hash varchar(20) DEFAULT '' NOT NULL, - tstamp int(11) DEFAULT '0' NOT NULL, - type tinyint(3) DEFAULT '0' NOT NULL, - params text, - - PRIMARY KEY (md5hash) -); \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap b/typo3conf/ext/sr_freecap new file mode 160000 index 0000000..d24fe57 --- /dev/null +++ b/typo3conf/ext/sr_freecap @@ -0,0 +1 @@ +Subproject commit d24fe574e3da54486d3509d12d1cab514978b461 diff --git a/typo3conf/ext/sr_freecap/ChangeLog b/typo3conf/ext/sr_freecap/ChangeLog deleted file mode 100644 index 6a96adb..0000000 --- a/typo3conf/ext/sr_freecap/ChangeLog +++ /dev/null @@ -1,479 +0,0 @@ -2021-03-24 Stanislas Rolland - * Resolves #93424: Audio Captcha without image is not accessible with tab - * Add extra array to composer.json - -2020-12-26 Stanislas Rolland - * Resolves #93107: Audio content is output twice - * Update version to 2.6.2 - -2020-11-22 Stanislas Rolland - * Update version to 2.6.1 - -2020-10-23 Stanislas Rolland - * Resolves #92608: PHP 7.4 issues deprecation notices - -2020-06-15 Stanislas Rolland - * Resolves #90636: ConfigurationHelper Select EncryptionAlgorythm does not work - * Resolves #89735: RequestMiddlewares.php missing - * Update version to 2.5.4 - * Resolves #91650: Adapt to TYPO3 10 LTS - * Update version to 2.6.0 - -2019-07-19 Stanislas Rolland - * Resolves Security Ticket#201907155760000027 - * Update version to 2.5.3 - -2018-11-02 Stanislas Rolland - * Resolves #86843: Syntax error in class EncryptionUtility - * Update version to 2.5.2 - -2018-10-24 Stanislas Rolland - * Resolves #86737: Fix syntax error in class PiBaseApi - * Update version to 2.5.1 - -2018-10-18 Stanislas Rolland - * Resolves #86688: Migrate to TYPO3 9 LTS - * Update version to 2.5.0 - -2018-10-18 Stanislas Rolland - * Resolves #86691: Incorrect keywords for composer - * Update version to 2.4.4 - -2018-07-24 Stanislas Rolland - * Resolves #85628: Error in Spanish localization file - * Resolves #85629: Remove dependency on TYPO3 ClientUtility - * Resolves #85499: Follow-up to migration from mcrypt to OpenSSL (Thanks to Marcus Bitzl) - * Update version to 2.4.3 - -2018-04-02 Stanislas Rolland - * Resolves #84576: Adapt font maker backend module to TYPO3 CMS 7 & 8 - * Update version to 2.4.2 - -2018-04-01 Stanislas Rolland - * Resolves #83808: Allow translation of invalid input error (Thanks to Christian Toffolo) - -2017-12-20 Stanislas Rolland - * Update manual - -2017-12-19 Stanislas Rolland - * Resolves #80906: Unknown Exception thrown when domain model with validator is used in backend context - * Resolves #82716: Migrate from mcrypt to openssl (follow-up) - * Update version to 2.4.1 - -2017-10-16 Stanislas Rolland - * Resolves #82716: Migrate from mcrypt to openssl - * Resolves #81736: Add P3P header for IE 11 of Windows 7 when page opens in popup - -2017-05-28 Stanislas Rolland - * Resolves #81354: Error code not localized - -2017-01-07 Stanislas Rolland - - * Change composer name to sjbr/sr-freecap - * Require TYPO3 CMS 7.6 LTS - * Resolves #79195: Require zend.multibyte for backend module - * Resolves #76062: add freeCap.js via includeJSlibs for compression - * Update version to 2.4.0 - * Update manual - -2016-02-13 Stanislas Rolland - - * Resolves #73422: Cleanup in German word list - * Resolves #73423: Incorrect audio rendering when using word lists with non-ASCII characters - * Resolves #73220: Follow-up to PHP 5.5 warning when decrypting word with blowfish algorithm - * Update version to 2.3.1 - -2016-02-11 Stanislas Rolland - - * Resolves #73394: Replace the English word list - -2016-02-10 Stanislas Rolland - - * Resolves #73220: PHP 5.5 warning when decrypting word with blowfish algorithm - -2016-02-01 Stanislas Rolland - - * Cleanup in ImageViewHelper - * Correction to composer.json - * Resolves #73075: Word list used when renewing captcha image is in wrong language - -2015-11-02 Stanislas Rolland - - * Resolves #70917: An end brace is in excess in TS setup. - * Resolves #66194: 500 error in access log - -2015-10-11 Stanislas Rolland - - * Cleanup - * Add composer.json - * Move static template registration to TCA overrides - * Compatibility with TYPO3 CMS 7 - * Improve template handling - * Cleanup references to versions of TYPO3 CMS lower than 6.2 - * Delete directory mod1 - * Update version to 2.3.0 - -2015-03-31 Stanislas Rolland - - * Resolves #64524: SJBR\SrFreecap\Domain\Model\Font raises warning on PHP 5.4+ - -2015-03-18 Stanislas Rolland - - * Resolves #65649: $this->freeCap->checkWord accepts empty postvar - * Resolves #64524: SJBR\SrFreecap\Domain\Model\Font raises warning on PHP 5.4+ - -2015-02-10 Stanislas Rolland - - * Resolves #64517: Revert CaptchaValidator::isValid should be protected - * Resolves #64972: New view configuration in TYPO3 CMS 6.2 - * Require TYPO3 CMS 6.2 - * Update version to 2.2.0 - -2015-02-04 Stanislas Rolland - - * Resolves #64847: Fatal error on CaptchaValidator::isValid() from context PiBaseApi - * Update version to 2.1.1 - -2015-01-28 Stanislas Rolland - - * Cleanup - -2015-01-27 Stanislas Rolland - - * Resolves #64543: Extension does not handle vendorName - * Resolves #64525 (Follow-up): Extbase does not find the templates of backend Font Maker in TYPO3 7.0 - * Resolves #64548: Font file not found in Font Maker on PHP 5.5 - * Enable in TYPO3 CMS 7 - * Update version to 2.1.0 - -2015-01-26 Stanislas Rolland - - * Resolves #64517: CaptchaValidator::isValid should be protected - * Resolves #64519: Validate annotation: class name TtfFileValidator should not start with backslash - * Resolves #64520: Extract module configuration from static template - * Resolves #64524: SJBR\SrFreecap\Domain\Model\Font raises warning on PHP 5.4+ - * Resolves #64525: Extbase does not find the templates of backend Font Maker in TYPO3 7.0 - -2014-09-22 Stanislas Rolland - - * Resolves #61756: Storing session data prevents correct handling of session data in other extensions (Thanks to Daniel Minder) - * Update version to 2.0.10 - -2014-08-01 Stanislas Rolland - - * Update version to 2.0.9 - -2014-07-29 Stanislas Rolland - - * Correction to Spanish localization file - * Resolves #60536: Mallformed Last-Modified header (Thanks to Christian Ludwig) - -2014-04-14 Stanislas Rolland - - * Correction to default css styles - -2014-04-08 Stanislas Rolland - - * Localization of audio captcha may fail for lack of available TCA of pages_language_overlay - -2014-04-02 Stanislas Rolland - - * Resolves #57543: French text in Italian language file - -2014-02-22 Stanislas Rolland - - * Cleanup calls to deprecated methods - -2014-02-21 Stanislas Rolland - - * Resolves #56045: Add random variable in captcha image src - * Update version to 2.0.8 - -2014-02-13 Stanislas Rolland - - * Enable in TYPO3 6.2 - * Update version to 2.0.7 - -2014-02-07 Stanislas Rolland - - * Fixed bug #55777: Object manager exceptions raised in TYPO3 6.2 - -2013-11-26 Stanislas Rolland - - * Fixed bug #51900: Danish locallang file wrongly named - * Brazilian locallang file wrongly named - * Update version to 2.0.6 - -2013-08-08 Stanislas Rolland - - * Fixed bug #50931: Error in autoload.php - * Update version to 2.0.5 - -2013-07-10 Stanislas Rolland - - * Follow-up to bug #47810: Audio Captcha not working under IE 8 - * Update version to 2.0.4 - -2013-07-04 Stanislas Rolland - - * Fixed bug #47810: Audio Captcha not working under IE 8 - * Update version to 2.0.3 - -2013-06-19 Stanislas Rolland - - * Added feature #49272: Add support for mp3 audio captcha rendering - * Fixed bug #49274: Voice file for digit 3 in Portuguese is broken - -2013-05-24 Stanislas Rolland - - * Fixed issue #48516: Replace some default fonts for better readability - * Fixed issue #48519: Correct/remove some words from French words list - * Updated manual - * Fixed textual errors in TS static template - * Require 6.0.5-6.1.99 - * Update version to 2.0.1 - -2013-05-23 Stanislas Rolland - - * Fixed issue #48500: Remove superfluous class loader cache entries - * Fixed bug #48501: Audio captcha rendering and wordslist selection should apply language fallback rules - -2013-05-07 Stanislas Rolland - - * Fixed bug #46265: Problem with freecap 2.0.0 and postgreSQL (Thanks to Tilo Baller) - -2013-04-22 Stanislas Rolland - - * Fixed bug #46648: Filenames for *.wav causes potential problems - -2013-04-20 Stanislas Rolland - - * Fixed bug #47406: Cleanup in ext_autoload.php - * Fixed bug #47407: Keep domain object font ISO-8859-2-encoded - * Fixed bug #47408: Incorrect object manager creation - -2013-02-14 Stanislas Rolland - - * Remove "site tag" feature - * Updated version to 2.0.0 - -2013-02-13 Stanislas Rolland - - * Add option to configure the encryption algorithm in Extension Manager - * Disable the audio feature on iOS devices - * Use object manager to create object instances - * Follow-up to use object manager to create object instances - -2013-02-12 Stanislas Rolland - - * Cleanup audio file rendering - * Fix audio player in IE7, IE9 and Opera - * Fix audio player in IE8 (but may still be blocked depending on security settings) - -2013-02-11 Stanislas Rolland - - * Update the manual - * Namespace the JavaScript functions - -2013-02-07 Stanislas Rolland - - * Fix max attempts message - * Delete unused directories - * Fix model html template insert for pi_base plugin - -2013-02-06 Stanislas Rolland - - * Add translation view helper with formal/informal salutation option - * Cleanup configuration files - * Add suggested HTML template insert (for pi_base) - * Add captcha image and audio icon view helpers - * Remove alias on SessionStorage class - * Cleanup translation view helper - * Require extension vhs 1.5.0 - * Remove requirement for vhs extension - * Fix validation error translation - * Cleanup image generator - -2012-12-15 Stanislas Rolland - - * Add captcha validator class - -2012-12-13 Stanislas Rolland - - * Migrate backend GD font maker to extbase - -2012-11-15 Stanislas Rolland - - * Move language labels to private resources directory - * Migrate captcha image and audio generation to extbase - -2012-11-10 Stanislas Rolland - - * Move captcha media to private resources directory - * Move javascript to public resources directory - * Require TYPO3 6.0 - -2012-11-09 Stanislas Rolland - - * Move original freecap to Contrib directory - -2012-11-06 Stanislas Rolland - - * Fix font maker script character encoding - -2012-11-05 Stanislas Rolland - - * Migrate localization files to xliff - * Migrate font maker module to the use of typo3/mod.php - * Add ext_autoload - -2012-03-18 Stanislas Rolland - - * Fixed bug #32848: Captcha image expiry headers - * Fixed bug #34729: Problems with encrypt function (Thanks to Carlos Meyer) - * Updated version to 1.5.3 - -2011-12-15 Stanislas Rolland - - * Follow-up to bug #7066: IE embeded media player display - * Updated version to 1.5.0 - * Fixed bug #32604: BE module broken with TYPO3 4.6 - * Added feature #32610: Russian documentation (Thanks to Андрей Аксенов) - * Updated version to 1.5.1 - * Follow-up to bug #32604: BE module broken with TYPO3 4.6 - * Updated version to 1.5.2 - -2011-12-14 Stanislas Rolland - - * Fixed bug #7066: IE embeded media player display - * Added feature #32567: Use HTML5 audio tag when available - * Follow-up to feature #32567: Use HTML5 audio tag when available - * Fixed bug #32579: Incorrect length in header of merged wave file - -2011-12-13 Stanislas Rolland - - * Follow-up to bug #13428: pi1/captcha.php: PHP Fatal Error when called directly - * Added feature #32488: Require TYPO3 4.5 and PHP 5.3 - * Added feature #32524: Remove random number generator seeding - * Added feature #32525: Use TYPO3 encryption key - * Follow-up to bug #26113: On enter, always the same image is loaded - -2011-12-12 Stanislas Rolland - - * Fixed bug #32477: Reference to tslib_pibase constructor in tx_srfreecap_pi2 - * Fixed bug #13428: pi1/captcha.php: PHP Fatal Error when called directly - * Fixed bug #13669: ereg/ereg_replace deprecated since PHP 5.3 - * Fixed bug #27000: error_reporting in pi1/class.tx_srfreecap_pi1.php - * Fixed bug #29276: function.mt-rand: max(1) is smaller than min(5) - * Fixed bug #26113: On enter, always the same image is loaded - * Fixed bug #32487: Remove reference to mediunDoc - -2011-02-15 Stanislas Rolland - - * Fixed bug #13072: Captcha not showing up when using MP from other domain (Thanks to Ernesto Baschny) - * Updated version to 1.4.1 - -2011-02-10 Stanislas Rolland - - * Fixed bug #12921: Audio captcha should be accessible by TAB key (Thanks to Elliot Sawyer) - * Require PHP 5.1 - * Updated manual - * Fixed bug #12938: "www.mydomain.org" is not RFC 2606 compilant - * Partially fixed bug #5628: Political (In-)Correctness of the german word list - * Updated version to 1.4.0 - -2011-02-01 Stanislas Rolland - - * Added feature #12714: Add TS constants to control darkness of the captcha text. Thanks to Julia Pardanaud. - * Added feature #12716: New default values of TS constants to increase CAPTCHA readability. Thanks to Julia Pardanaud. - -2010-12-21 Stanislas Rolland - - * Fixed bug #10223: BE module not shown anymore with TYPO3 4.4 - * Fixed bug #8528: Typo in Dutch localization of label in pi2/locallang.xml - * Fixed bug #7987: maxWordLength problem - -2010-04-16 Stanislas Rolland - - * Require TYPO3 4.3 - * Manual updated. - * Updated ext_emconf from TER version 1.2.3 - -2010-04-14 Stanislas Rolland - - * Fixed bug #7259: Use of deprecated function t3lib_div::makeInstanceClassName() - -2009-10-20 Stanislas Rolland - - * Fixed bug: Mishandling of session data. Thanks to Wolo Wolski. - * Updated ext_emconf from TER version 1.2.2 - * Updated manual. - -2009-08-31 Stanislas Rolland - - * Added feature: new TS constant accessibleOutputImage and textual version. - * Manual updated. - * Updated ext_emconf from TER version 1.2.0 - -2009-08-29 Stanislas Rolland - - * Follow-up to #3056: Audio Captcha is not rendered in IE8 - * Added feature: Two new TS constants: textHorizontalPosition and textVerticalPosition. Thanks to Julia Pardanaud. - * Added Turkish word list. Thanks to Zeynep Nurten Cinarcik. - -2009-06-03 Stanislas Rolland - - * Fixed bug #3056: Audio Captcha is not rendered in IE8 - -2009-06-01 Stanislas Rolland - - * Added feature #3526: Use eID API for graphical and audio captcha generation. - * Follow-up to #3526 for TYPO3 < 4.3: Use eID API for graphical and audio captcha generation. - * Fixed bug #3530: Morphed image blocks background type not working. - * Follow-up to feature #3526: Cleanup parameters of new captcha image - -2009-05-29 Stanislas Rolland - - * Fixed bug #3472: No image rendering in T3 V4.3 alpha3. - -2009-05-07 Stanislas Rolland - - * Added feature #3244: User can set the width of the generated captcha-image. Thanks to Simon Schick. - -2009-04-15 Stanislas Rolland - - * Added Russian translation. Thanks to Андрей Аксенов. - -2009-04-07 Stanislas Rolland - - * Fixed bug #3052: "onclick" should be used instead of "onClick". Thanks to Gerald Schwarz. - * Fixed bug: Random number generator should be seeded. - -2009-04-01 Stanislas Rolland - - * Removed some words from the default word list. - * Added partial Russian translation. Thanks to Esben Fest. - * Updated manual. - * Updated ext_emconf from TER version 1.1.2 - -2009-01-24 Stanislas Rolland - - * Updated manual. - * Updated ext_emconf from TER version 1.1.1 - -2009-01-23 Stanislas Rolland - - * Initial upload to TYPO3 Forge - * Cleanup: Use UNIX line separators in all files - * Fix for current TYPO3 trunk (4.3-dev) caching - * Update version number to 1.1.1 - * Default to local installation - * Fixed bug #10132: sr_freecap seems to work only with default language. Thanks to Dan Grünzig. - * Follow-up to issue #10132: Adding comments - * Added Polish translation. Thanks to Daniel Ciunkiewicz. - * Correction to the manual. Thanks to Niklas Kanthak. - * Remove superfluous spaces in rendered html. Thanks to Niklas Kanthak. - * ###SR_FREECAP_ACCESSIBLE### marker should produce inline html. Audio object wrapper changed from div to span. Thanks to Niklas Kanthak. - * Updated manual: random background type does not exist anymore with freecap 1.4. - * Added missing images for Morphed image blocks option of backgroundType. - * Updated damaged images. diff --git a/typo3conf/ext/sr_freecap/Classes/Configuration/ConfigurationHelper.php b/typo3conf/ext/sr_freecap/Classes/Configuration/ConfigurationHelper.php deleted file mode 100644 index db94cef..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Configuration/ConfigurationHelper.php +++ /dev/null @@ -1,63 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 providing configuration help for extension SrFreecap - */ -class ConfigurationHelper -{ - /** - * Renders a select element that allows to choose the encryption algoritm to be used by the extension - * - * @param array $params: Field information to be rendered - * @param AbstractTagBasedViewHelper $pObj: The calling parent object. - * @return string The HTML select field - */ - public function buildEncryptionAlgorithmSelector(array $params, AbstractTagBasedViewHelper $pObj) - { - if (in_array('openssl', get_loaded_extensions())) { - $encryptionAlgorithms = openssl_get_cipher_methods(true); - if (!empty($encryptionAlgorithms)) { - $field = '


    ' . LF; - } else { - $field = '
    Available encryption algorithms could not be found. Algorithm AES-256-CBC will be used.
    '; - } - } else { - $field = '
    PHP openssl extension is not available.
    '; - } - return $field; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Controller/AudioPlayerController.php b/typo3conf/ext/sr_freecap/Classes/Controller/AudioPlayerController.php deleted file mode 100644 index 228e50b..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Controller/AudioPlayerController.php +++ /dev/null @@ -1,80 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Domain\Repository\WordRepository; -use SJBR\SrFreecap\View\AudioPlayer\PlayMp3; -use SJBR\SrFreecap\View\AudioPlayer\PlayWav; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; - -/** - * Renders a wav audio version of the CAPTCHA - */ -class AudioPlayerController extends ActionController -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var WordRepository - */ - protected $wordRepository; - - /** - * Dependency injection of the Word Repository - * - * @param WordRepository $wordRepository - */ - public function injectWordRepository(WordRepository $wordRepository) - { - $this->wordRepository = $wordRepository; - } - - /** - * Play the audio catcha - * - * @return string Audio content to be sent to the client - */ - public function playAction() - { - $word = $this->wordRepository->getWord(); - $format = $this->request->getFormat(); - if ($format === 'mp3') { - $this->view = GeneralUtility::makeInstance(PlayMp3::class); - } else if ($format === 'wav') { - $this->view = GeneralUtility::makeInstance(PlayWav::class); - } else { - throw new \Exception('Unknow audio format ' . $format); - } - $this->view->assign('word', $word); - $this->view->render(); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Controller/FontMakerController.php b/typo3conf/ext/sr_freecap/Classes/Controller/FontMakerController.php deleted file mode 100644 index 3dd5e13..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Controller/FontMakerController.php +++ /dev/null @@ -1,74 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Domain\Model\Font; -use SJBR\SrFreecap\Domain\Repository\FontRepository; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; - -/** - * Font Maker controller - */ -class FontMakerController extends ActionController -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * Display the font maker form - * - * @param Font $font - * @return string An HTML form for creating a new font - */ - public function newAction(Font $font = null) - { - if (!is_object($font)) { - $font = new Font(); - } - $this->view->assign('font', $font); - } - - /** - * Create the font file and display the result - * - * @param Font $font - * @return string HTML presenting the new font that was created - */ - public function createAction(Font $font) - { - // Create the font data - $font->createGdFontFile(); - // Store the GD font file - $fontRepository = GeneralUtility::makeInstance(FontRepository::class); - $fontRepository->writeFontFile($font); - $this->view->assign('font', $font); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Controller/ImageGeneratorController.php b/typo3conf/ext/sr_freecap/Classes/Controller/ImageGeneratorController.php deleted file mode 100644 index abf2569..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Controller/ImageGeneratorController.php +++ /dev/null @@ -1,234 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Domain\Repository\WordRepository; -use SJBR\SrFreecap\View\ImageGenerator\ShowPng; -use TYPO3\CMS\Core\Core\Environment; -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; - -/** - * Renders the CAPTCHA image - */ -class ImageGeneratorController extends ActionController -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionKey = 'sr_freecap'; - - /** - * @var WordRepository - */ - protected $wordRepository; - - /** - * Dependency injection of the Word Repository - * - * @param WordRepository $wordRepository - */ - public function injectWordRepository(WordRepository $wordRepository) - { - $this->wordRepository = $wordRepository; - } - - /** - * Show the CAPTCHA image - */ - public function showAction() - { - // Get session data - $word = $this->wordRepository->getWord(); - // Which type of hash to use - // Store in session so can validate in form processor - $word->setHashFunction('md5'); - $this->view = GeneralUtility::makeInstance(ShowPng::class); - $this->view->assign('word', $word); - // Adjust settings - $this->processSettings(); - $this->view->assign('settings', $this->settings); - // Render the captcha image - $this->view->render(); - // Store the session data - $this->wordRepository->setWord($word); - } - - /** - * Reviews and adjusts plugin settings - */ - protected function processSettings() - { - // Image type: - // possible values: "jpg", "png", "gif" - // jpg doesn't support transparency (transparent bg option ends up white) - // png isn't supported by old browsers (see http://www.libpng.org/pub/png/pngstatus.html) - // gif may not be supported by your GD Lib. - $this->settings['imageFormat'] = (isset($this->settings['imageFormat']) && $this->settings['imageFormat']) ? $this->settings['imageFormat'] : 'png'; - - // true = generate pseudo-random string, false = use dictionary - // dictionary is easier to recognise - // - both for humans and computers, so use random string if you're paranoid. - $this->settings['useWordsList'] = (isset($this->settings['useWordsList']) && $this->settings['useWordsList']) ? true : false; - - // if your server is NOT set up to deny web access to files beginning ".ht" - // then you should ensure the dictionary file is kept outside the web directory - // eg: if www.foo.com/index.html points to c:\website\www\index.html - // then the dictionary should be placed in c:\website\dict.txt - // test your server's config by trying to access the dictionary through a web browser - // you should NOT be able to view the contents. - // can leave this blank if not using dictionary - $this->settings['wordsListLocation'] = \SJBR\SrFreecap\Utility\LocalizationUtility::getWordsListLocation($this->settings['defaultWordsList'] ?? ''); - - // Used for non-dictionary word generation and to calculate image width - $this->settings['maxWordLength'] = (isset($this->settings['maxWordLength']) && $this->settings['maxWordLength']) ? $this->settings['maxWordLength'] : 6; - - // Maximum times a user can refresh the image - // on a 6500 word dictionary, I think 15-50 is enough to not annoy users and make BF unfeasble. - // further notes re: BF attacks in "avoid brute force attacks" section, below - // on the other hand, those attempting OCR will find the ability to request new images - // very useful; if they can't crack one, just grab an easier target... - // for the ultra-paranoid, setting it to <5 will still work for most users - $this->settings['maxAttempts'] = (isset($this->settings['maxAttempts']) && $this->settings['maxAttempts']) ? $this->settings['maxAttempts'] : 50; - - // List of fonts to use - // font size should be around 35 pixels wide for each character. - // you can use my GD fontmaker script at www.puremango.co.uk to create your own fonts - // There are other programs to can create GD fonts, but my script allows a greater - // degree of control over exactly how wide each character is, and is therefore - // recommended for 'special' uses. For normal use of GD fonts, - // the GDFontGenerator @ http://www.philiplb.de is excellent for convering ttf to GD - // the fonts included with freeCap *only* include lowercase alphabetic characters - // so are not suitable for most other uses - // to increase security, you really should add other fonts - if ($this->settings['generateNumbers'] ?? false) { - $this->settings['fontLocations'] = ['EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/anonymous.gdf']; - } else { - $this->settings['fontLocations'] = [ - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/freecap_font1.gdf', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/freecap_font2.gdf', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/freecap_font3.gdf', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/freecap_font4.gdf', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Fonts/freecap_font5.gdf' - ]; - } - if ($this->settings['fontFiles'] ?? false) { - $this->settings['fontLocations'] = GeneralUtility::trimExplode(',', $this->settings['fontFiles'], 1); - } - for ($i = 0; $i < sizeof($this->settings['fontLocations']); $i++) { - if (substr($this->settings['fontLocations'][$i],0,4) == 'EXT:') { - $this->settings['fontLocations'][$i] = GeneralUtility::getFileAbsFileName($this->settings['fontLocations'][$i]); - } else { - $this->settings['fontLocations'][$i] = Environment::getPublicPath() . '/uploads/' . ExtensionManagementUtility::getCN($this->extensionKey) . '/' . $this->settings['fontLocations'][$i]; - } - } - - // Text color - // 0 = one random color for all letters - // 1 = different random color for each letter - if ($this->settings['textColor'] ?? false) { - $this->settings['textColor'] = 1; - } else { - $this->settings['textColor'] = 0; - } - - // Text position - $this->settings['textPosition'] = []; - $this->settings['textPosition']['horizontal'] = isset($this->settings['textHorizontalPosition']) ? (int)$this->settings['textHorizontalPosition'] : 32; - $this->settings['textPosition']['vertical'] = isset($this->settings['textVerticalPosition']) ? (int)$this->settings['textVerticalPosition'] : 15; - // Text morphing factor - $this->settings['morphFactor'] = (isset($this->settings['morphFactor']) && $this->settings['morphFactor']) ? (int)$this->settings['morphFactor'] : 0; - // Limits for text color - $this->settings['colorMaximum'] = []; - if (isset($this->settings['colorMaximumDarkness'])) { - $this->settings['colorMaximum']['darkness'] = (int)$this->settings['colorMaximumDarkness']; - } - if (isset($this->settings['colorMaximumLightness'])) { - $this->settings['colorMaximum']['lightness'] = (int)$this->settings['colorMaximumLightness']; - } - - // Background - // Many thanks to http://ocr-research.org.ua and http://sam.zoy.org/pwntcha/ for testing - // for jpgs, 'transparent' is white - if (!isset($this->settings['backgroundType']) || !in_array($this->settings['backgroundType'], ['Transparent', 'White with grid', 'White with squiggles', 'Morphed image blocks'])) { - $this->settings['backgroundType'] = 'White with grid'; - } - // Should we blur the background? (looks nicer, makes text easier to read, takes longer) - $this->settings['backgroundBlur'] = ((isset($this->settings['backgroundBlur']) && $this->settings['backgroundBlur']) || !isset($this->settings['backgroundBlur'])) ? true : false; - // For background type 'Morphed image blocks', which images should we use? - // If you add your own, make sure they're fairly 'busy' images (ie a lot of shapes in them) - $this->settings['backgroundImages'] = [ - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Images/freecap_im1.jpg', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Images/freecap_im2.jpg', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Images/freecap_im3.jpg', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Images/freecap_im4.jpg', - 'EXT:' . $this->extensionKey . '/Resources/Private/Captcha/Images/freecap_im5.jpg' - ]; - // For non-transparent backgrounds only: - // if 0, merges CAPTCHA with background - // if 1, write CAPTCHA over background - $this->settings['mergeWithBackground'] = (isset($this->settings['mergeWithBackground']) && $this->settings['mergeWithBackground']) ? 0 : 1; - // Should we morph the background? (recommend yes, but takes a little longer to compute) - $this->settings['backgroundMorph'] = (isset($this->settings['backgroundMorph']) && $this->settings['backgroundMorph']) ? true : false; - - // Read each font and get font character widths - $this->settings['fontWidths'] = []; - for ($i=0 ; $i < sizeof($this->settings['fontLocations']); $i++) { - $handle = fopen($this->settings['fontLocations'][$i],"r"); - // Read header of GD font, up to char width - $c_wid = fread($handle,12); - $this->settings['fontWidths'][$i] = ord($c_wid[8])+ord($c_wid[9])+ord($c_wid[10])+ord($c_wid[11]); - fclose($handle); - } - // Modify image width depending on maximum possible length of word - // you shouldn't need to use words > 6 chars in length really. - $this->settings['imageWidth'] = ($this->settings['maxWordLength'] * (array_sum($this->settings['fontWidths'])/sizeof($this->settings['fontWidths']))) + (isset($this->settings['imageAdditionalWidth']) ? (int)$this->settings['imageAdditionalWidth'] : 40); - $this->settings['imageHeight'] = (isset($this->settings['imageHeight']) && $this->settings['imageHeight']) ? (int)$this->settings['imageHeight'] : 90; - - // Try to avoid the 'free p*rn' method of CAPTCHA circumvention - // see www.wikipedia.com/captcha for more info - // "To avoid spam, please do NOT enter the text if this site is not example.org"; - // or more simply: - // "for use only on example.org"; - // reword or add lines as you please - $this->settings['siteTag'] = (isset($this->settings['siteTag']) && $this->settings['siteTag']) ? explode('|', LocalizationUtility::translate('site_tag', $this->extensionName, [(isset($this->settings['siteTagDomain']) && $this->settings['siteTagDomain']) ? $this->settings['siteTagDomain'] : 'example.org'])) : []; - - // where to write the above: - // 0=top - // 1=bottom - // 2=both - $this->settings['siteTagPosition'] = isset($this->settings['siteTagPosition']) ? (int)$this->settings['siteTagPosition'] : 1; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Domain/Model/Font.php b/typo3conf/ext/sr_freecap/Classes/Domain/Model/Font.php deleted file mode 100644 index 2649adf..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Domain/Model/Font.php +++ /dev/null @@ -1,230 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Utility\FontMakingUtility; -use SJBR\SrFreecap\Validation\Validator\TtfFileValidator; -use TYPO3\CMS\Core\Core\Environment; -use TYPO3\CMS\Extbase\Annotation\Validate; -use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; - -/** - * Font object - * - * This file must be iso-8859-2-encoded! - * - */ -class Font extends AbstractEntity -{ - /** - * @var int - */ - protected $charactersIncludedInFont; - - /** - * @var int - * @Validate("NumberRange", options={"minimum": 5, "maximum": 255}) - */ - protected $characterWidth; - - /** - * @var int - * @Validate("NumberRange", options={"minimum": 5, "maximum": 255}) - */ - protected $characterHeight; - - /** - * @var int - **/ - protected $endianness; - - /** - * @var string - * @Validate("NotEmpty") - * @Validate("StringLength", options={"minimum": 1, "maximum": 255}) - * @Validate("\SJBR\SrFreecap\Validation\Validator\TtfFileValidator") - **/ - protected $ttfFontFileName = ''; - - /** - * @var string - **/ - protected $gdFontFilePrefix = 'font'; - - /** - * @var string - **/ - protected $pngImageFileName = ''; - - /** - * @var string - **/ - protected $gdFontData = ''; - - /** - * @var string - **/ - protected $gdFontFileName = ''; - - public function __construct( - $charactersIncludedInFont = 0, - $characterWidth = 34, - $characterHeight = 50, - $endianness = 0, - $ttfFontFileName = '', - $gdFontFilePrefix = '', - $pngImageFileName = '', - $gdFontData = '', - $gdFontFileName = '' - ) { - $this->setCharactersIncludedInFont($charactersIncludedInFont); - $this->setCharacterWidth($characterWidth); - $this->setCharacterHeight($characterHeight); - $this->setEndianness($endianness); - $this->setTtfFontFileName($ttfFontFileName); - $this->setGdFontFilePrefix($gdFontFilePrefix); - $this->setPngImageFileName($pngImageFileName); - $this->setGdFontData($gdFontData); - $this->setGdFontFileName($gdFontFileName); - } - - public function setCharactersIncludedInFont($charactersIncludedInFont) { - $this->charactersIncludedInFont = (int)$charactersIncludedInFont; - } - - public function getCharactersIncludedInFont() { - return $this->charactersIncludedInFont; - } - - public function setCharacterWidth($characterWidth) { - $this->characterWidth = (int)$characterWidth; - } - - public function getCharacterWidth() { - return $this->characterWidth; - } - - public function setCharacterHeight($characterHeight) { - $this->characterHeight = (int)$characterHeight; - } - - public function getCharacterHeight() { - return $this->characterHeight; - } - - public function setEndianness($endianness) { - $this->endianness = (int)$endianness; - } - - public function getEndianness() { - return $this->endianness; - } - - public function setTtfFontFileName($ttfFontFileName) { - $this->ttfFontFileName = (string)$ttfFontFileName; - } - - public function getTtfFontFileName() { - return $this->ttfFontFileName; - } - - public function setGdFontFilePrefix($gdFontFilePrefix = 'font') { - $this->gdFontFilePrefix = (string)$gdFontFilePrefix; - } - - public function getGdFontFilePrefix() { - return $this->gdFontFilePrefix; - } - - - public function setPngImageFileName($pngImageFileName) { - $this->pngImageFileName = (string)$pngImageFileName; - } - - public function getPngImageFileName() { - return $this->pngImageFileName; - } - - public function setGdFontData($gdFontData) { - $this->gdFontData = (string)$gdFontData; - } - - public function getGdFontdata() { - return $this->gdFontData; - } - - public function setGdFontFileName($gdFontFileName) { - $this->gdFontFileName = (string)$gdFontFileName; - } - - public function getGdFontFileName() { - return $this->gdFontFileName; - } - - /** - * Creates teh GD font file - */ - public function createGdFontFile() - { - switch ($this->charactersIncludedInFont) { - case 1: - $characters = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'; - $startCharacter = 'a'; - break; - case 2: - $characters = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o' - .',p,q,r,s,t,u,v,w,x,y,z,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-' - .',-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,ß' - .',à,á,â,ă,ä,Í,ć,ç,č,é,ę,ë,ě,Í,î,ď' - .',đ,ń,ň,ó,ô,ő,ö,-,ř,ů,ú,ű,ü,ý,ţ,-'; - $startCharacter = 'a'; - break; - case 0: - default: - $characters = '0,1,2,3,4,5,6,7,8,9'; - $startCharacter = '0'; - break; - } - $numberOfCharacters = count(explode(',', $characters)); - $this->setPngImageFileName(FontMakingUtility::makeFontImage($characters, $this->ttfFontFileName, $this->characterWidth, $this->characterHeight)); - if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'] ?? false) { - $image = @ImageCreateFromPNG(Environment::getPublicPath() . '/' . $this->pngImageFileName); - } else { - $image = @ImageCreateFromGIF(Environment::getPublicPath() . '/' . $this->pngImageFileName); - } - if ($image !== false) { - $this->setGdFontdata(FontMakingUtility::makeFont($image, $numberOfCharacters, $startCharacter, $this->characterWidth, $this->characterHeight, $this->endianness)); - ImageDestroy($image); - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Domain/Model/Word.php b/typo3conf/ext/sr_freecap/Classes/Domain/Model/Word.php deleted file mode 100644 index c40c2f2..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Domain/Model/Word.php +++ /dev/null @@ -1,109 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\Extbase\DomainObject\AbstractEntity; - -/** - * Word object - */ -class Word extends AbstractEntity -{ - /** - * @var string - */ - protected $wordHash; - - /** - * @var string - */ - protected $hashFunction; - - /** - * @var array - */ - protected $wordCypher; - - /** - * @var int - */ - protected $attempts; - - public function __construct( - $wordHash = '', - $hashFunction = 'md5', - $wordCypher = array(), - $attempts = 0 - ) - { - $this->setWordHash($wordHash); - $this->setHashFunction($hashFunction); - $this->setWordCypher($wordCypher); - $this->setAttempts($attempts); - } - - public function setWordHash($wordHash) - { - $this->wordHash = (string)$wordHash; - } - - public function getWordHash() - { - return $this->wordHash; - } - - public function setHashFunction($hashFunction) - { - $this->hashFunction = (string)$hashFunction; - } - - public function getHashFunction() - { - return $this->hashFunction; - } - - public function setWordCypher($wordCypher) - { - $this->wordCypher = (array)$wordCypher; - } - - public function getWordCypher() - { - return $this->wordCypher; - } - - public function setAttempts($attempts) - { - $this->attempts = (int)$attempts; - } - - public function getAttempts() - { - return $this->attempts; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Domain/Repository/FontRepository.php b/typo3conf/ext/sr_freecap/Classes/Domain/Repository/FontRepository.php deleted file mode 100644 index 91f99bc..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Domain/Repository/FontRepository.php +++ /dev/null @@ -1,62 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Domain\Model\Font; -use TYPO3\CMS\Core\Core\Environment; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Repository; - -/** - * Font repository - */ -class FontRepository extends Repository -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionKey = 'sr_freecap'; - - /** - * Writes the GD font file - * - * @param Font the object to be stored - * @return \SJBR\SrFreecap\Domain\Repository\FontRepository $this - */ - public function writeFontFile(Font $font) - { - $directory = Environment::getPublicPath() . '/' . 'uploads/' . ExtensionManagementUtility::getCN($this->extensionKey) . '/'; - GeneralUtility::mkdir_deep($directory); - $fileName = $directory . $font->getGdFontFilePrefix() . '_' . md5($font->getGdFontData()) . '.gdf'; - if (GeneralUtility::writeFile($fileName, $font->getGdFontData())) { - $font->setGdFontFileName($fileName); - } - return $this; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Domain/Repository/WordRepository.php b/typo3conf/ext/sr_freecap/Classes/Domain/Repository/WordRepository.php deleted file mode 100644 index 33e279f..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Domain/Repository/WordRepository.php +++ /dev/null @@ -1,92 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Domain\Model\Word; -use SJBR\SrFreecap\Domain\Session\SessionStorage; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Repository; - -/** - * Word repository in session storage - */ -class WordRepository extends Repository -{ - /** - * The session sorage handler - * @var SessionStorage - */ - protected $sessionStorage; - - /** - * Constructor - */ - public function __construct(SessionStorage $sessionStorage) - { - // Get an instance of the session storage handler - $this->sessionStorage = $sessionStorage; - } - - /** - * Returns the object stored in the user's session - * - * @return Word the stored object - */ - public function getWord() - { - $word = $this->sessionStorage->restoreFromSession(); - // If no Word object is found in session data, initialize a new one - if (!is_object($word)) { - $word = new Word(); - } - return $word; - } - - /** - * Writes the object into the user's session - * - * @param Word the object to be stored - * @return WordRepository - */ - public function setWord(Word $object) - { - $this->sessionStorage->writeToSession($object); - return $this; - } - - /** - * Cleans up the session: removes the stored object from the user's session - * - * @return WordRepository - */ - public function cleanUpWord() - { - $this->sessionStorage->cleanUpSession(); - return $this; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Domain/Session/SessionStorage.php b/typo3conf/ext/sr_freecap/Classes/Domain/Session/SessionStorage.php deleted file mode 100644 index 9c1fb25..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Domain/Session/SessionStorage.php +++ /dev/null @@ -1,93 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\Session\UserSession; -use TYPO3\CMS\Core\Session\UserSessionManager; -use TYPO3\CMS\Core\Session\Backend\Exception\SessionNotFoundException; -use TYPO3\CMS\Core\SingletonInterface; -use TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication; - -/** - * Session storage - */ -class SessionStorage implements SingletonInterface -{ - const SESSIONNAMESPACE = 'tx_srfreecap'; - - /** - * Returns the object stored in the user's PHP session - * - * @return Object the stored object - */ - public function restoreFromSession() - { - $sessionData = $this->getUser()->getSessionData(self::SESSIONNAMESPACE); - if ($sessionData === null) { - return null; - } - return unserialize($sessionData); - } - - /** - * Writes an object into the PHP session - * - * @param $object any serializable object to store into the session - * @return SessionStorage - */ - public function writeToSession($object) - { - $sessionData = serialize($object); - $this->getUser()->setAndSaveSessionData(self::SESSIONNAMESPACE, $sessionData); - return $this; - } - - /** - * Cleans up the session: removes the stored object from the PHP session - * - * @return SessionStorage - */ - public function cleanUpSession() - { - $this->getUser()->setAndSaveSessionData(self::SESSIONNAMESPACE, null); - return $this; - } - - /** - * Gets a frontend user session - * - * @return User The current frontend user object - */ - protected function getUser() : FrontendUserAuthentication - { - if (!isset($GLOBALS['TSFE']) || !$GLOBALS['TSFE']->fe_user) { - throw new SessionNotFoundException('No frontend user found in session!'); - } - return $GLOBALS['TSFE']->fe_user; - } -} diff --git a/typo3conf/ext/sr_freecap/Classes/Http/EidDispatcher.php b/typo3conf/ext/sr_freecap/Classes/Http/EidDispatcher.php deleted file mode 100644 index eea98b0..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Http/EidDispatcher.php +++ /dev/null @@ -1,275 +0,0 @@ -, Michael Knoll - * 2012-2022 Stanislas Rolland - * 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 2 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 TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Error\Http\BadRequestException; -use TYPO3\CMS\Core\Http\NullResponse; -use TYPO3\CMS\Core\Localization\Locales; -use TYPO3\CMS\Core\Utility\ArrayUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\RootlineUtility; -use TYPO3\CMS\Extbase\Core\Bootstrap; -use TYPO3\CMS\Extbase\Mvc\Dispatcher; -use TYPO3\CMS\Extbase\Mvc\Request; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Dispatch the eid request - */ -class EidDispatcher -{ - /** - * Array of all request Arguments - * - * @var array - */ - protected $requestArguments = []; - - /** - * @var string - */ - protected $vendorName = 'SJBR'; - - /** - * @var string - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string - */ - protected $pluginName; - - /** - * @var string - */ - protected $controllerName; - - /** - * @var string - */ - protected $actionName; - - /** - * @var string - */ - protected $formatName; - - /** - * @var array - */ - protected $arguments = []; - - /** - * Initializes and dispatches actions - * Call this function if you want to use this dispatcher "standalone" - * @param ServerRequestInterface $request - * @return Response - */ - public function initAndDispatch($request) - { - return $this->initTypoScriptConfiguration($request) - ->initLanguage($request) - ->initCallArguments() - ->dispatch(); - } - - /** - * Builds an extbase context and returns the response - * - * @return ResponseInterface - */ - protected function dispatch() - { - $bootstrap = GeneralUtility::makeInstance(Bootstrap::class); - $configuration['vendorName'] = $this->vendorName; - $configuration['extensionName'] = $this->extensionName; - $configuration['pluginName'] = $this->pluginName; - $bootstrap->initialize($configuration); - $request = $this->buildRequest(); - try { - $response = GeneralUtility::makeInstance(Dispatcher::class)->dispatch($request); - } catch (\Exception $e) { - throw new BadRequestException('An argument is missing or invalid', 1394587024); - } - return $response; - } - - /** - * Get the TypoScript configuration - * - * @param ServerRequestInterface $request - * @return EidDispatcher - */ - protected function initTypoScriptConfiguration($request) - { - $controller = $request->getAttribute('frontend.controller'); - $controller->type = 0; - $context = $controller->getContext(); - $controller->rootLine = GeneralUtility::makeInstance(RootlineUtility::class, $controller->id, $controller->MP, $context)->get(); - $controller->getConfigArray(); - return $this; - } - - /** - * Set language and locale - * - * @param ServerRequestInterface $request - * @return EidDispatcher - */ - protected function initLanguage($request) - { - $controller = $request->getAttribute('frontend.controller'); - $siteLanguage = $controller->getLanguage(); - $locales = GeneralUtility::makeInstance(Locales::class); - $locales->setSystemLocaleFromSiteLanguage($siteLanguage); - return $this; - } - - /** - * Build a request object - * - * @return Request $request - */ - protected function buildRequest() - { - $controllerClassName = $this->vendorName . '\\' . $this->extensionName . '\\' . 'Controller' . '\\' . $this->pluginName . 'Controller'; - $request = GeneralUtility::makeInstance(Request::class, $controllerClassName); - $request->setControllerObjectName($controllerClassName); - $request->setPluginName($this->pluginName); - $request->setControllerActionName($this->actionName); - $request->setFormat($this->formatName); - $request->setArguments($this->arguments); - return $request; - } - - /** - * Prepare the call arguments - * - * @return EidDispatcher - */ - public function initCallArguments() { - $request = GeneralUtility::_GP('request'); - if ($request) { - $this->setRequestArgumentsFromJSON($request); - } else { - $this->setRequestArgumentsFromGetPost(); - } - return $this->setPluginName($this->requestArguments['pluginName']) - ->setControllerName() - ->setActionName($this->requestArguments['actionName']) - ->setFormatName($this->requestArguments['formatName']) - ->setArguments($this->requestArguments['arguments'] ?? []); - } - - /** - * Set the request array from JSON - * - * @param string $request - */ - protected function setRequestArgumentsFromJSON($request) - { - $requestArray = json_decode($request, true); - if (is_array($requestArray)) { - ArrayUtility::mergeRecursiveWithOverrule($this->requestArguments, $requestArray); - } - } - - /** - * Set the request array from the getPost array - */ - protected function setRequestArgumentsFromGetPost() - { - $validArguments = ['pluginName', 'actionName', 'formatName', 'arguments']; - foreach ($validArguments as $argument) { - if (GeneralUtility::_GP($argument) ?? false) { - $this->requestArguments[$argument] = GeneralUtility::_GP($argument); - } else if (GeneralUtility::_GP('amp;' . $argument) ?? false) { - // Something went wrong... - $this->requestArguments[$argument] = GeneralUtility::_GP('amp;' . $argument); - } else if ($argument !== 'arguments') { - throw new BadRequestException('An argument is missing', 1394587023); - } - } - } - - /** - * @param string $pluginName - * @return EidDispatcher - */ - protected function setPluginName($pluginName = 'ImageGenerator') - { - $this->pluginName = htmlspecialchars((string)$pluginName); - return $this; - } - - /** - * @return EidDispatcher - */ - protected function setControllerName() - { - $this->controllerName = $this->pluginName; - return $this; - } - - /** - * @param string $actionName - * @return EidDispatcher - */ - protected function setActionName($actionName = 'show') - { - $this->actionName = htmlspecialchars((string)$actionName); - return $this; - } - - /** - * @param string $formatName - * @return EidDispatcher - */ - protected function setFormatName($formatName = 'txt') - { - $this->formatName = htmlspecialchars((string)$formatName); - return $this; - } - - /** - * @param array $arguments - * @return EidDispatcher - */ - protected function setArguments($arguments) - { - if (!is_array($arguments)) { - $this->arguments = []; - } else { - $this->arguments = $arguments; - } - return $this; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Middleware/EidHandler.php b/typo3conf/ext/sr_freecap/Classes/Middleware/EidHandler.php deleted file mode 100644 index 98d4b6d..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Middleware/EidHandler.php +++ /dev/null @@ -1,85 +0,0 @@ -dispatcher = $dispatcher; - } - - /** - * Dispatches the request to the corresponding eID class or eID script - * - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * @return ResponseInterface - */ - public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface - { - $eID = $request->getParsedBody()['eIDSR'] ?? $request->getQueryParams()['eIDSR'] ?? null; - - if ($eID === null) { - return $handler->handle($request); - } - - // Remove any output produced until now - ob_clean(); - - /** @var Response $response */ - $response = new Response(); - if (empty($eID) || !isset($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['eIDSR_include'][$eID])) { - $response = $response->withStatus(404, 'eIDSR not registered'); - } else { - $configuration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['eIDSR_include'][$eID]; - $response = new NullResponse(); - // Simple check to make sure that it's not an absolute file (to use the fallback) - if (strpos($configuration, '::') !== false || is_callable($configuration)) { - $frontendUser = $request->getAttribute('frontend.user'); - $request = $request->withAttribute('target', $configuration); - $response = $this->dispatcher->dispatch($request); - } - } - return $response; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/PiBaseApi.php b/typo3conf/ext/sr_freecap/Classes/PiBaseApi.php deleted file mode 100644 index e3697b4..0000000 --- a/typo3conf/ext/sr_freecap/Classes/PiBaseApi.php +++ /dev/null @@ -1,88 +0,0 @@ - - * 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 2 of the License, or - * (at your option) any later version. - * - * The GNU General Public License can be found at - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Validation\Validator\CaptchaValidator; -use SJBR\SrFreecap\ViewHelpers\AudioViewHelper; -use SJBR\SrFreecap\ViewHelpers\ImageViewHelper; -use SJBR\SrFreecap\ViewHelpers\TranslateViewHelper; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; - -class PiBaseApi -{ - /** - * @var string The extension key - */ - public $extKey = 'sr_freecap'; - - /** - * This function generates an array of markers used to render the captcha element - * - * @return array marker array containing the captcha markers to be sustituted in the html template - */ - public function makeCaptcha() - { - // Get the configuration manager - $configurationManager = GeneralUtility::makeInstance(ConfigurationManagerInterface::class); - - // Get translation view helper - $translator = GeneralUtility::makeInstance(TranslateViewHelper::class); - $translator->injectConfigurationManager($configurationManager); - - $markerArray = []; - $markerArray['###'. strtoupper($this->extKey) . '_NOTICE###'] = $translator->render('notice') . ' ' . $translator->render('explain'); - - // Get the captcha image view helper - $imageViewHelper = GeneralUtility::makeInstance(ImageViewHelper::class); - $imageViewHelper->injectConfigurationManager($configurationManager); - $markerArray['###'. strtoupper($this->extKey) . '_IMAGE###'] = $imageViewHelper->render('pi1'); - $markerArray['###'. strtoupper($this->extKey) . '_CANT_READ###'] = ''; - - // Get the audio icon view helper - $audioViewHelper = GeneralUtility::makeInstance(AudioViewHelper::class); - $audioViewHelper->injectConfigurationManager($configurationManager); - $markerArray['###'. strtoupper($this->extKey) . '_ACCESSIBLE###'] = $audioViewHelper->render('pi1'); - - return $markerArray; - } - - /** - * Check the word that was entered against the hashed value - * - * @param string $word: hte word that was entered - * @return bool true, if the word entered matches the hashes value - */ - public function checkWord($word) - { - // Get the validator - $validator = GeneralUtility::makeInstance(CaptchaValidator::class); - // Check word - return !$validator->validate($word)->hasErrors(); - } -} -class_alias('SJBR\\SrFreecap\\PiBaseApi', 'tx_srfreecap_pi2'); \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/AudioContentUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/AudioContentUtility.php deleted file mode 100644 index f54150c..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/AudioContentUtility.php +++ /dev/null @@ -1,128 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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! - */ -/** - * Utility dealing with audio content - */ -class AudioContentUtility -{ - /** - * Joins multiple audio files - * - * @param array $files: the array of audio files - * @param string $format: the audio format - * @return string the contents of joined audio file - */ - public static function joinAudioFiles($files, $format = 'wav') { - switch ($format) { - case 'mp3': - return self::joinMp3Files($files); - break; - case 'wav': - default: - return self::joinWavFiles($files); - break; - } - } - - /** - * Joins multiple wav files - * - * All wave files need to have the same format and need to be uncompressed. - * The headers of the last file will be used (with recalculated datasize - * of course) - * - * @link http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/ - * @link http://www.thescripts.com/forum/thread3770.html - * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Andreas Gohr - * - * @param array $wavs: the array of wav files - * @return string the contents of joined wav file - */ - protected static function joinWavFiles($wavs) - { - $fields = join('/', array( - 'H8Format', - 'H8Subchunk1ID', - 'VSubchunk1Size', - 'vAudioFormat', - 'vNumChannels', - 'VSampleRate', - 'VByteRate', - 'vBlockAlign', - 'vBitsPerSample' - )); - $data = ''; - foreach ($wavs as $wav){ - $fp = fopen($wav, 'rb'); - // Read ChunkID - $headerPart1 = fread($fp, 4); - // Read ChunkSize - $headerPart2 = fread($fp, 4); - // Read following fields - $headerPart3 = fread($fp, 28); - $info = unpack($fields, $headerPart3); - // Read optional extra stuff - // We will not use this since AudioFormat of all our sound files is PCM - if ($info['Subchunk1Size'] > 16) { - $headerPart3 .= fread($fp, ($info['Subchunk1Size']-16)); - } - // Read SubChunk2ID - $headerPart3 .= fread($fp, 4); - // Read Subchunk2Size - $size = unpack('VSubChunk2Size', fread($fp, 4)); - $size = $size['SubChunk2Size']; - // Read data - $data .= fread($fp, $size); - fclose($fp); - } - return $headerPart1 . pack('V', 36 + strlen($data)) . $headerPart3 . pack('V', strlen($data)) . $data; - } - - /** - * Joins multiple mp3 files - * - * All mp3 files need to have the same format and need to be uncompressed. - * The headers of the last file will be used (with recalculated datasize - * of course) - * - * @link http://www.theblog.ca/merge-mp3s-php - * @param array $files: the array of mp3 files - * @return string the contents of joined mp3 file - */ - protected static function joinMp3Files($files) - { - $data = ''; - foreach ($files as $file) { - $mp3 = new Mp3ContentUtility($file); - $data .= $mp3->striptags(); - } - return $data; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/EncryptionUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/EncryptionUtility.php deleted file mode 100644 index 99bd8c5..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/EncryptionUtility.php +++ /dev/null @@ -1,91 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 EncryptionUtility -{ - /** - * Salt - */ - const SALT = 'cH!swe!retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39=E@rAsp7c-Ph@pH'; - - /** - * Encrypts a string - * - * @param array $string: the string to be encrypted - * @return array an array with the string as the first element and the initialization vector as the second element - */ - public static function encrypt($string) - { - if (in_array('openssl', get_loaded_extensions())) { - $encryptionAlgorithm = strtolower($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['encryptionAlgorithm'] ?? 'aes-256-cbc'); - $availableAlgorithms = openssl_get_cipher_methods(true); - if (in_array($encryptionAlgorithm, $availableAlgorithms)) { - $key = md5($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] ?? 0, true); - $iv_size = openssl_cipher_iv_length($encryptionAlgorithm); - $salt = (isset($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['salt']) && trim($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['salt'])) ? trim($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['salt']) : self::SALT; - $hash = hash('sha256', $salt . $key . $salt); - $iv = substr($hash, strlen($hash) - $iv_size); - $key = substr($hash, 0, 32); - $string = openssl_encrypt($string, $encryptionAlgorithm, $key, OPENSSL_RAW_DATA, $iv); - $cypher = [base64_encode($string), base64_encode($iv)]; - } else { - $cypher = [base64_encode($string)]; - } - } else { - $cypher = [base64_encode($string)]; - } - return $cypher; - } - - /** - * Decrypts a string - * - * @param array $cypher: an array as returned by encrypt() - * @return string the decrypted string - */ - public static function decrypt($cypher) - { - if (in_array('openssl', get_loaded_extensions())) { - $encryptionAlgorithm = strtolower($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['encryptionAlgorithm'] ?? 'aes-256-cbc'); - $availableAlgorithms = openssl_get_cipher_methods(true); - if (in_array($encryptionAlgorithm, $availableAlgorithms)) { - $key = md5($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] ?? 0, true); - $salt = isset($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['salt']) ? trim($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['sr_freecap']['salt']) : self::SALT; - $hash = hash('sha256', $salt . $key . $salt); - $key = substr($hash, 0, 32); - $string = trim(openssl_decrypt(base64_decode($cypher[0]), $encryptionAlgorithm, $key, OPENSSL_RAW_DATA, base64_decode($cypher[1]))); - } else { - $string = base64_decode($cypher[0]); - } - } else { - $string = base64_decode($cypher[0]); - } - return $string; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/FontMakingUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/FontMakingUtility.php deleted file mode 100644 index 771b891..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/FontMakingUtility.php +++ /dev/null @@ -1,146 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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; - -/** - * Utility for making GD fonts - */ -class FontMakingUtility -{ - /** - * Returns an image displaying a list of characters with specified font file and character size - * - * @param string $characters: text to display on the image - * @param string $font: specified True Type font file name - * @param integer $width: width of each character - * @param string $height: height of the image - * @return array image file info array - */ - public static function makeFontImage($characters, $font, $width = 34, $height = 50) - { - $size = intval($height * .8); - $vertOffset = intval($height * .7); - $color = '#000000'; - $bgColor = 'white'; - $align = 'left'; - - $charactersArray = explode(',', $characters); - $charactersCount = count($charactersArray); - - $gifObjArray = array(); - $gifObjArray['backColor'] = $bgColor; - $gifObjArray['transparentBackground'] = 0; - $gifObjArray['reduceColors'] = ''; - $gifObjArray['maxWidth'] = ($charactersCount * $width) + 1; - $gifObjArray['XY'] = ($charactersCount * $width) . ',' . $height; - - for ($ic = 1; $ic < $charactersCount+1; $ic++) { - $gifObjArray[$ic . '0'] = 'TEXT'; - $gifObjArray[$ic . '0.']['text'] = $charactersArray[$ic-1]; - $bbox = imagettfbbox($size, 0, GeneralUtility::getFileAbsFileName($font), $charactersArray[$ic-1]); - $hOffset = intval(($width - ($bbox[4] - $bbox[6]))/2); - $vOffset = intval(($width - ($bbox[7] - $bbox[1]))/2); - - $gifObjArray[$ic . '0.']['niceText'] = 0; - $gifObjArray[$ic . '0.']['antiAlias'] = 1; - $gifObjArray[$ic . '0.']['align'] = $align; - $gifObjArray[$ic . '0.']['fontSize'] = $size; - $gifObjArray[$ic . '0.']['fontFile'] = '../' . $font; - $gifObjArray[$ic . '0.']['fontColor'] = $color; - $gifObjArray[$ic . '0.']['maxWidth'] = $width; - $gifObjArray[$ic . '0.']['offset'] = (($ic-1) * $width + $hOffset) . ',' . $vertOffset; - } - $gifCreator = GeneralUtility::makeInstance(GifBuilderUtility::class); - if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'] ?? false) { - $gifCreator->start($gifObjArray, []); - return $gifCreator->gifBuild(); - } else { - return false; - } - } - - /************************************************************\ - * - * GD Fontmaker Copyright 2005 Howard Yeend - * www.puremango.co.uk - * - * This file is part of GD Fontmaker. - * - * GD Fontmaker 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 2 of the License, or - * (at your option) any later version. - * - * GD Fontmaker 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. - * - * You should have received a copy of the GNU General Public License - * along with GD Fontmaker; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - \************************************************************/ - public static function makeFont($image, $numchars, $startchar, $pixelwidth, $pixelheight, $endianness = 0) - { - $startchar = ord($startchar); - // encode this at start of font - if ($endianness) { - // big-endian - $fontdata = chr(0).chr(0).chr(0).chr($numchars).chr(0).chr(0).chr(0).chr($startchar).chr(0).chr(0).chr(0).chr($pixelwidth).chr(0).chr(0).chr(0).chr($pixelheight); - } else { - // little-endian - $fontdata = chr($numchars).chr(0).chr(0).chr(0).chr($startchar).chr(0).chr(0).chr(0).chr($pixelwidth).chr(0).chr(0).chr(0).chr($pixelheight).chr(0).chr(0).chr(0); - } - // loop through each pixel of each character of the PNG - // (we know the dimensions of the characters because the user told us what they were) - $y = 0; - $x = 0; - $start_x = 0; - for ($c = 0; $c < $numchars*$pixelwidth; $c += $pixelwidth) { - for ($y = 0; $y < $pixelheight; $y++) { - for ($x = $c; $x < $c+$pixelwidth; $x++) { - // get colour of this pixel - $rgb = ImageColorAt($image, $x, $y); - if ($rgb == 0) { - // it's black; font data - $fontdata .= chr(255); - } else { - // it's not black; background - $fontdata .= chr(0); - } - $i++; - } - } - } - return $fontdata; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/GifBuilderUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/GifBuilderUtility.php deleted file mode 100644 index 66575d6..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/GifBuilderUtility.php +++ /dev/null @@ -1,66 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\PathUtility; -use TYPO3\CMS\Frontend\Imaging\GifBuilder; - -/** - * Utility extending Gif builder - */ -class GifBuilderUtility extends GifBuilder -{ - /** - * Returns the reference to a "resource" in TypoScript. - * - * @param string The resource value. - * @return string Returns the relative filepath - */ - public function checkFile($file) - { - $file = GeneralUtility::getFileAbsFileName(Environment::getPublicPath() . '/' . $file); - $file = PathUtility::stripPathSitePrefix($file); - return $file; - } - - /** - * Writes the input GDlib image pointer to file - * - * @param resource The GDlib image resource pointer - * @param string The filename to write to - * @param int $quality The image quality (for JPEGs) - * @return mixed The output of either imageGif, imagePng or imageJpeg based on the filename to write - * @see maskImageOntoImage(), scale(), output() - */ - public function ImageWrite($destImg, $theImage, $quality = 0) - { - return parent::ImageWrite($destImg, Environment::getPublicPath() . '/' . $theImage, $quality); - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/ImageContentUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/ImageContentUtility.php deleted file mode 100644 index 68b79be..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/ImageContentUtility.php +++ /dev/null @@ -1,446 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * 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! - */ -/************************************************************\ -* -* freeCap v1.4.1 Copyright 2005 Howard Yeend -* www.puremango.co.uk -* -* This file is part of freeCap. -* -* freeCap 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 2 of the License, or -* (at your option) any later version. -* -* freeCap 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. -* -* You should have received a copy of the GNU General Public License -* along with freeCap; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* -\************************************************************/ - -use SJBR\SrFreecap\Utility\RandomContentUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Utility dealing with image content - */ -class ImageContentUtility { - - const BACKGROUND_TYPE_TRANSPARENT = 'Transparent'; - const BACKGROUND_TYPE_WHITE_WITH_GRID = 'White with grid'; - const BACKGROUND_TYPE_WHITE_WITH_SQUIGGLES = 'White with squiggles'; - const BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS = 'Morphed image blocks'; - const MERGE_BACKGROUND_OVER_CAPTCHA = 0; - const MERGE_CAPTCHA_OVER_BACKGROUND = 1; - const TEXT_COLOR_UNIFORM = 0; - const TEXT_COLOR_ONE_PER_CHARACTER = 1; - const SITE_TAG_POSITION_TOP = 0; - const SITE_TAG_POSITION_BOTTOM = 1; - const SITE_TAG_POSITION_BOTH = 2; - - /** - * Write word on image - * - * @param int $width: width of the image in pixels - * @param int $height: width of the image in pixels - * @param string $word: the captcha word - * @param int $textColorType (see constants) - * @param array $textPosition: 'horizontal' => horizontal starting position of text, 'vertical' => vertical starting position of text - * @param int $colorMaximum: 'darkness' => maximum color darkness along any dimension, 'lightness' => maximum color lightness along any dimension - * @param string $backgroundType (see constants) - * @param array $fontLocations: array of font files locations - * @param array $fontWidths: array of font widths - * @param int $morphfactor: text morphing factor - * @return string GD image identifier of noisy background - */ - public static function writeWordOnImage($width, $height, $word, $textColorType, $textPosition, $colorMaximum, $backgroundType, $fontLocations, $fontWidths, $morphFactor = 1) - { - - $image = ImageCreate($width, $height); - $image2 = ImageCreate($width, $height); - // Set background colour (can change to any colour not in possible $text_col range) - // it doesn't matter as it'll be transparent or coloured over. - // if you're using background type 'Morphed image blocks', you might want to try to ensure that the color chosen - // below doesn't appear too much in any of your background images. - $background = ImageColorAllocate($image, 254, 254, 254); - $background2 = ImageColorAllocate($image2, 254, 254, 254); - // Set transparencies - ImageColorTransparent($image, $background); - // $image2 transparent to allow characters to overlap slightly while morphing - ImageColorTransparent($image2, $background2); - // Fill backgrounds - ImageFill($image, 0, 0, $background); - ImageFill($image2, 0, 0, $background2); - - // Write word in random starting X position - $word_start_x = RandomContentUtility::getRandomNumberInRange(5, $textPosition['horizontal']); - // Y positions jiggled about later - $word_start_y = $textPosition['vertical']; - // Get uniform color - if ($textColorType == self::TEXT_COLOR_UNIFORM) { - $textColor = RandomContentUtility::getRandomColor($colorMaximum['darkness'], $colorMaximum['lightness'], $backgroundType == self::BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS); - $textColor2 = ImageColorAllocate($image2, $textColor[0], $textColor[1], $textColor[2]); - } - // Write each character in different font - $textFontWidths = array(); - $x_pos = $word_start_x; - for ($i = 0; $i < strlen($word); $i++) { - // Get changing color - if ($textColorType == self::TEXT_COLOR_ONE_PER_CHARACTER) { - $textColor = RandomContentUtility::getRandomColor($colorMaximum['darkness'], $colorMaximum['lightness'], $backgroundType == self::BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS); - $textColor2 = ImageColorAllocate($image2, $textColor[0], $textColor[1], $textColor[2]); - } - $fontIndex = RandomContentUtility::getRandomNumberInRange(0, sizeof($fontLocations)-1); - $font = ImageLoadFont($fontLocations[$fontIndex]); - ImageString($image2, $font, $x_pos, $word_start_y, $word[$i], $textColor2); - $textFontWidths[$i] = $fontWidths[$fontIndex]; - $x_pos += $textFontWidths[$i]; - } - - // Morph Image - // Firstly move each character up or down a bit: - $x_pos = $word_start_x; - $y_pos = 0; - for ($i = 0; $i < strlen($word); $i++) { - // Move on Y axis - // Deviate at least 4 pixels between each letter - $prev_y = $y_pos; - do { - $y_pos = RandomContentUtility::getRandomNumberInRange(-5, 5); - } while ($y_pos < $prev_y + 2 && $y_pos > $prev_y - 2); - ImageCopy($image, $image2, $x_pos, $y_pos, $x_pos, 0, $textFontWidths[$i], $height); - $x_pos += $textFontWidths[$i]; - } - ImageFilledRectangle($image2, 0, 0, $width, $height, $background2); - - // Randomly morph each character individually on x-axis - // This is where the main distortion happens - $y_chunk = 1; - $morph_x = 0; - $orig_x = $word_start_x - $textFontWidths[0]; - for ($j = 0; $j < strlen($word); $j++) { - $orig_x += $textFontWidths[$j]; - $y_pos = 0; - for ($i = 0; $i <= $height; $i += $y_chunk) { - // morph x += so that instead of deviating from orig x each time, we deviate from where we last deviated to - // get it? instead of a zig zag, we get more of a sine wave. - // I wish we could deviate more but it looks crap if we do. - $morph_x += RandomContentUtility::getRandomNumberInRange(-$morphFactor, $morphFactor); - // had to change this to ImageCopyMerge when starting using ImageCreateTrueColor - // according to the manual; "when (pct is) 100 this function behaves identically to imagecopy()" - // but this is NOT true when dealing with transparencies... - ImageCopyMerge($image2, $image, $orig_x + $morph_x, $i + $y_pos, $orig_x, $i, $textFontWidths[$j], $y_chunk, 100); - } - } - ImageFilledRectangle($image, 0, 0, $width, $height, $background); - - // Now do the same on the y-axis - // (much easier because we can just do it across the whole image, don't have to do it char-by-char) - $y_pos = 0; - $x_chunk = 1; - for ($i = 0; $i <= $width ; $i += $x_chunk) { - // Can result in image going too far off on Y-axis; - // not much I can do about that, apart from make image bigger - // again, I wish I could do 1.5 pixels - $y_pos += RandomContentUtility::getRandomNumberInRange(-1, 1); - ImageCopy($image, $image2, $i, $y_pos, $i, 0, $x_chunk, $height); - } - - // Cleanup - ImageDestroy($image2); - - return $image; - } - - /** - * Generate noisy background - * - * @param int $width: width of the image in pixels - * @param int $height: width of the image in pixels - * @param string $word: the captcha word - * @param string $backgroundType (see constants) - * @param array $backgroundImages: array of background image file names - * @param boolean $morphBackground: if TRUE, the background will be morphed - * @param boolean $blurBackground: if TRUE, the background will be blurred - * @return string GD image identifier of noisy background - */ - public static function generateNoisyBackground($width, $height, $word, $backgroundType, $backgroundImages = array(), $morphBackground = true, $blurBackground = true) - { - $image = ImageCreateTrueColor($width, $height); - if ($backgroundType != self::BACKGROUND_TYPE_TRANSPARENT) { - - // Generate noisy background, to be merged with CAPTCHA later - // any suggestions on how best to do this much appreciated - // sample code would be even better! - // I'm not an OCR expert (hell, I'm not even an image expert; puremango.co.uk was designed in MsPaint) - // so the noise models are based around my -guesswork- as to what would make it hard for an OCR prog - // ideally, the character obfuscation would be strong enough not to need additional background noise - // in any case, I hope at least one of the options given here provide some extra security! - $tempBackground = ImageCreateTrueColor($width*1.5, $height*1.5); - $background = ImageColorAllocate($image, 255, 255, 255); - ImageFill($image, 0, 0, $background); - $tempBackgroundColor = ImageColorAllocate($tempBackground, 255, 255, 255); - ImageFill($tempBackground, 0, 0, $tempBackgroundColor); - - // We draw all noise onto tempBackground - // then if we're morphing, merge from tempBackground to image - // or if not, just copy a $width x $height portion of $tempBackground to $image - // tempBackground is much larger so that when morphing, the edges retain the noise. - switch ($backgroundType) { - case self::BACKGROUND_TYPE_WHITE_WITH_GRID: - // Draw grid on x - for ($i = RandomContentUtility::getRandomNumberInRange(6, 20); $i < $width*2; $i += RandomContentUtility::getRandomNumberInRange(10, 25)) { - ImageSetThickness($tempBackground, RandomContentUtility::getRandomNumberInRange(2, 6)); - $textColor = RandomContentUtility::getRandomColor(100, 150); - $textColor2 = ImageColorAllocate($tempBackground, $textColor[0], $textColor[1], $textColor[2]); - ImageLine($tempBackground, $i, 0, $i, $height*2, $textColor2); - } - // Draw grid on y - for ($i = RandomContentUtility::getRandomNumberInRange(6, 20); $i < $height*2 ; $i += RandomContentUtility::getRandomNumberInRange(10, 25)) { - ImageSetThickness($tempBackground, RandomContentUtility::getRandomNumberInRange(2, 6)); - $textColor = RandomContentUtility::getRandomColor(100, 150); - $textColor2 = ImageColorAllocate($tempBackground, $textColor[0], $textColor[1], $textColor[2]); - ImageLine($tempBackground, 0, $i, $width*2, $i , $textColor2); - } - break; - case self::BACKGROUND_TYPE_WHITE_WITH_SQUIGGLES: - ImageSetThickness($tempBackground, 4); - for ($i = 0; $i < strlen($word)+1; $i++) { - $textColor = RandomContentUtility::getRandomColor(100, 150); - $textColor2 = ImageColorAllocate($tempBackground, $textColor[0], $textColor[1], $textColor[2]); - $points = Array(); - // Draw random squiggle for each character - // the longer the loop, the more complex the squiggle - // keep random so OCR can't say "if found shape has 10 points, ignore it" - // each squiggle will, however, be a closed shape, so OCR could try to find - // line terminations and start from there. (I don't think they're that advanced yet..) - for ($j = 1; $j < RandomContentUtility::getRandomNumberInRange(5, 10); $j++) { - $points[] = RandomContentUtility::getRandomNumberInRange(1*(20*($i+1)), 1*(50*($i+1))); - $points[] = RandomContentUtility::getRandomNumberInRange(30, $height+30); - } - ImagePolygon($tempBackground, $points, intval(sizeof($points)/2), $textColor2); - } - break; - case self::BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS: - // Take random chunks of $backgroundImages and paste them onto the background - for ($i = 0; $i < sizeof($backgroundImages); $i++) { - // Read each image and its size - $tempImages[$i] = ImageCreateFromJPEG(GeneralUtility::getFileAbsFileName($backgroundImages[$i])); - $tempWidths[$i] = imagesx($tempImages[$i]); - $tempHeights[$i] = imagesy($tempImages[$i]); - } - $blocksize = RandomContentUtility::getRandomNumberInRange(20, 60); - for ($i = 0; $i < $width*2; $i += $blocksize) { - // Could randomise blocksize here... hardly matters - for ($j = 0; $j < $height*2; $j += $blocksize) { - $imageIndex = RandomContentUtility::getRandomNumberInRange(0, sizeof($tempImages)-1); - $cut_x = RandomContentUtility::getRandomNumberInRange(0, $tempWidths[$imageIndex]-$blocksize); - $cut_y = RandomContentUtility::getRandomNumberInRange(0, $tempHeights[$imageIndex]-$blocksize); - ImageCopy($tempBackground, $tempImages[$imageIndex], $i, $j, $cut_x, $cut_y, $blocksize, $blocksize); - } - } - // Cleanup - for ($i = 0; $i < sizeof($tempImages); $i++) { - ImageDestroy($tempImages[$i]); - } - break; - } - - if ($morphBackground) { - // Morph background - // We do this separately to the main text morph because: - // a) the main text morph is done char-by-char, this is done across whole image - // b) if an attacker could un-morph the background, it would un-morph the CAPTCHA - // hence background is morphed differently to text - // why do we morph it at all? it might make it harder for an attacker to remove the background - // morph_chunk 1 looks better but takes longer - // this is a different and less perfect morph than the one we do on the CAPTCHA - // occasonally you get some dark background showing through around the edges - // it doesn't need to be perfect as it's only the background. - $morph_chunk = RandomContentUtility::getRandomNumberInRange(1, 5); - $morph_y = 0; - for ($x = 0; $x < $width; $x += $morph_chunk) { - $morph_chunk = RandomContentUtility::getRandomNumberInRange(1, 5); - $morph_y += RandomContentUtility::getRandomNumberInRange(-1, 1); - ImageCopy($image, $tempBackground, $x, 0, $x+30, 30+$morph_y, $morph_chunk, $height*2); - } - - ImageCopy($tempBackground, $image, 0, 0, 0, 0, $width, $height); - - $morph_x = 0; - for ($y = 0; $y <= $height; $y += $morph_chunk) { - $morph_chunk = RandomContentUtility::getRandomNumberInRange(1, 5); - $morph_x += RandomContentUtility::getRandomNumberInRange(-1, 1); - ImageCopy($image, $tempBackground, $morph_x, $y, 0, $y, $width, $morph_chunk); - - } - } else { - // Just copy tempBackground onto $image - ImageCopy($image, $tempBackground, 0, 0, 30, 30, $width, $height); - } - // Cleanup - ImageDestroy($tempBackground); - - if ($blurBackground) { - $image = self::blurImage($image); - } - } - return $image; - } - - /** - * Merge captcha image with background - * - * @param int $width: width of the image in pixels - * @param int $height: width of the image in pixels - * @param string $captchaImage: a GD image identifier - * @param string $backgroundImage: a GD image identifier - * @param string $backgroundType (see constants) - * @param int $mergeType: 0 - Background over captcha, 1 - Captcha over background (see constants) - * @param int $backgroundFadePercentage: fading factor for background - * @return string GD image identifier of merged image - */ - public static function mergeCaptchaWithBackground($width, $height, $captchaImage, $backgroundImage, $backgroundType, $mergeType) - { - if ($backgroundType != self::BACKGROUND_TYPE_TRANSPARENT) { - // How faded should the background be? (100=totally gone, 0=bright as the day) - // to test how much protection the bg noise gives, take a screenshot of the freeCap image - // and take it into a photo editor. play with contrast and brightness. - // If you can remove most of the background, then it's not a good enough percentage - switch ($backgroundType) { - case self::BACKGROUND_TYPE_WHITE_WITH_GRID: - case self::BACKGROUND_TYPE_WHITE_WITH_SQUIGGLES: - $backgroundFadePercentage = 65; - break; - case self::BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS: - $backgroundFadePercentage = 50; - break; - } - // Slightly randomize the background fade - $backgroundFadePercentage += RandomContentUtility::getRandomNumberInRange(-2, 2); - // Fade background - if ($backgroundType != self::BACKGROUND_TYPE_MORPHED_IMAGE_BLOCKS) { - $tempImage = ImageCreateTrueColor($width, $height); - $white = ImageColorAllocate($tempImage, 255, 255, 255); - ImageFill($tempImage, 0, 0, $white); - ImageCopyMerge($backgroundImage, $tempImage, 0, 0, 0, 0, $width, $height, $backgroundFadePercentage); - ImageDestroy($tempImage); - $colorFadePercentage = 50; - } else { - $colorFadePercentage = $backgroundFadePercentage; - } - // Merge background image with CAPTCHA image to create smooth background - if ($mergeType == self::MERGE_CAPTCHA_OVER_BACKGROUND) { - // Might want to not blur if using this method, otherwise leaves white-ish border around each letter - ImageCopyMerge($backgroundImage, $captchaImage, 0, 0, 0, 0, $width, $height, 100); - ImageCopy($captchaImage, $backgroundImage, 0, 0, 0, 0, $width, $height); - } else { - // Background over captcha - ImageCopyMerge($captchaImage, $backgroundImage, 0, 0, 0, 0, $width, $height, $colorFadePercentage); - } - } - return $captchaImage; - } - - /** - * Blurs an image - * - * @param string $image: a GD image identifier - * @return string GD image identifier of blurred image - */ - public static function blurImage($image) - { - // w00t. my very own blur function - // in GD2, there's a gaussian blur function. bunch of bloody show-offs... :-) - - $width = imagesx($image); - $height = imagesy($image); - - $temp_im = ImageCreateTrueColor($width, $height); - $bg = ImageColorAllocate($temp_im, 150, 150, 150); - - // preserves transparency if in orig image - ImageColorTransparent($temp_im, $bg); - - // fill bg - ImageFill($temp_im, 0, 0, $bg); - - // anything higher than 3 makes it totally unreadable - // might be useful in a 'real' blur function, though (ie blurring pictures not text) - $distance = 1; - // use $distance=30 to have multiple copies of the word. not sure if this is useful. - - // blur by merging with itself at different x/y offsets: - ImageCopyMerge($temp_im, $image, 0, 0, 0, $distance, $width, $height-$distance, 70); - ImageCopyMerge($image, $temp_im, 0, 0, $distance, 0, $width-$distance, $height, 70); - ImageCopyMerge($temp_im, $image, 0, $distance, 0, 0, $width, $height, 70); - ImageCopyMerge($image, $temp_im, $distance, 0, 0, 0, $width, $height, 70); - // remove temp image - ImageDestroy($temp_im); - - return $image; - } - - /** - * Outputs the image with appropriate headers - * - * @param string $image: a GD image identifier - * @param string $imageType: type of image (jpg, gif or png) - * @return void - */ - public static function sendImage($image, $imageType) - { - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Pragma: no-cache'); - header('Cache-Control: no-cache, no-store, must-revalidate'); - // Setting privacy policy header for IE in popup window - header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); - switch ($imageType) { - case 'jpg': - header('Content-Type: image/jpeg'); - ImageJPEG($image); - break; - case 'gif': - header('Content-Type: image/gif'); - ImageGIF($image); - break; - case 'png': - default: - header('Content-Type: image/png'); - ImagePNG($image); - break; - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/LocalizationUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/LocalizationUtility.php deleted file mode 100644 index 0df09c7..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/LocalizationUtility.php +++ /dev/null @@ -1,159 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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\ServerRequestInterface; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Http\ApplicationType; -use TYPO3\CMS\Core\Localization\LanguageService; -use TYPO3\CMS\Core\Localization\Locales; -use TYPO3\CMS\Core\Site\Entity\SiteLanguage; -use TYPO3\CMS\Core\Site\SiteFinder; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Localization helper which should be used to fetch appropriate words list or voice rendering language - * - */ -class LocalizationUtility -{ - /** - * Key of the extension to which this class belongs - * - * @var string - */ - protected static $extensionKey = 'sr_freecap'; - - /** - * Gets the location of the words list based on configured language - * - * @param string $defaultWordsList: location of the default words list - * @return string the location of the words list to be used - */ - public static function getWordsListLocation($defaultWordsList = '') - { - $languageKeys = static::getLanguageKeys(); - $initialWordsList = $defaultWordsList; - if (!trim($initialWordsList)) { - $initialWordsList = 'EXT:' . self::$extensionKey . '/Resources/Private/Captcha/Words/default_freecap_words'; - } - $path = dirname(GeneralUtility::getFileAbsFileName($initialWordsList)) . '/'; - $wordsListLocation = $path . $languageKeys['languageKey'] . '_freecap_words'; - if (!is_file($wordsListLocation)) { - foreach ($languageKeys['alternativeLanguageKeys'] as $language) { - $wordsListLocation = $path . $language . '_freecap_words'; - if (is_file($wordsListLocation)) { - break; - } - } - } - if (!is_file($wordsListLocation)) { - $wordsListLocation = $path . 'default_freecap_words'; - if (!is_file($wordsListLocation)) { - $wordsListLocation = ''; - } - } - return $wordsListLocation; - } - - /** - * Gets the directory of wav files based on configured language - * - * @return string name of the directory containing the wav files to be used - */ - public static function getVoicesDirectory() - { - $languageKeys = static::getLanguageKeys(); - $path = ExtensionManagementUtility::extPath(self::$extensionKey) . 'Resources/Private/Captcha/Voices/'; - $voicesDirectory = $path . $languageKeys['languageKey'] . '/'; - if (!is_dir($voicesDirectory)) { - foreach ($languageKeys['alternativeLanguageKeys'] as $language) { - $voicesDirectory = $path . $language . '/'; - if (is_dir($voicesDirectory)) { - break; - } - } - } - if (!is_dir($voicesDirectory)) { - $voicesDirectory = $path . 'default/'; - } - return $voicesDirectory; - } - - /** - * Sets the currently active language/language_alt keys. - * Default values are "default" for language key and an empty array for language_alt key. - * - * @return array - */ - protected static function getLanguageKeys(): array - { - $languageKeys = [ - 'languageKey' => 'default', - 'alternativeLanguageKeys' => [], - ]; - if (($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface - && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend() - ) { - $tsfe = static::getTypoScriptFrontendController(); - $pageId = $tsfe->id; - $siteFinder = GeneralUtility::makeInstance(SiteFinder::class); - $currentSite = $siteFinder->getSiteByPageId($pageId); - $languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language'); - // Current language - $currentSiteLanguageId = $languageAspect->getId(); - $currentSiteLanguage = $currentSite->getLanguageById((int)$currentSiteLanguageId); - $languageKeys['languageKey'] = $currentSiteLanguage->getTypo3Language(); - // Alternative languages - $alternativeLanguageIds = $languageAspect->getFallbackChain(); - foreach ($alternativeLanguageIds as $alternativeLanguageId) { - $alternativeLanguage = $currentSite->getLanguageById((int)$alternativeLanguageId); - $languageKeys['alternativeLanguageKeys'][] = $alternativeLanguage->getTypo3Language(); - } - if (empty($languageKeys['alternativeLanguageKeys'])) { - $locales = GeneralUtility::makeInstance(Locales::class); - if (in_array($languageKeys['languageKey'], $locales->getLocales())) { - foreach ($locales->getLocaleDependencies($languageKeys['languageKey']) as $language) { - $languageKeys['alternativeLanguageKeys'][] = $language; - } - } - } - } else { - $languageKeys['languageKey'] = $GLOBALS['BE_USER']->uc['lang']; - } - return $languageKeys; - } - - /** - * @return TypoScriptFrontendController - */ - protected static function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/Mp3ContentUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/Mp3ContentUtility.php deleted file mode 100644 index 0cad2ec..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/Mp3ContentUtility.php +++ /dev/null @@ -1,94 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * 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! - */ -/** - * Utility dealing with mp3 audio content - * See http://www.theblog.ca/merge-mp3s-php - */ -class Mp3ContentUtility -{ - var $mp3Content; - - // Create a new mp3 - public function __construct($file = '') - { - if ($file != '') { - $this->mp3Content = file_get_contents($file); - } - } - - // Get the mp3 content - public function getContent() - { - return $this->mp3Content; - } - - // Calculate where's the beginning of the sound file - protected function getStart() - { - $strlen = strlen($this->mp3Content); - for ($i=0; $i < $strlen; $i++) { - $v = substr($this->mp3Content, $i, 1); - $value = ord($v); - if ($value == 255) { - return $i; - } - } - } - - // Calculate where's the end of the sound file - protected function getIdvEnd() - { - $strlen = strlen($this->mp3Content); - $str = substr($this->mp3Content, ($strlen - 128)); - $str1 = substr($str, 0, 3); - if (strtolower($str1) == strtolower('TAG')) { - return $str; - } else { - return false; - } - } - - // Remove the ID3 tags - public function striptags() - { - // Remove start stuff... - $newStr = ''; - $s = $start = $this->getStart(); - if ($s === false) { - return false; - } else { - $this->mp3Content = substr($this->mp3Content, $start); - } - //Remove end tag stuff - $end = $this->getIdvEnd(); - if ($end !== false) { - $this->mp3Content = substr($this->mp3Content, 0, (strlen($this->mp3Content)-129)); - } - return $this->mp3Content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Utility/RandomContentUtility.php b/typo3conf/ext/sr_freecap/Classes/Utility/RandomContentUtility.php deleted file mode 100644 index edcc8e3..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Utility/RandomContentUtility.php +++ /dev/null @@ -1,126 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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! - */ -/** - * Random content utility - */ -class RandomContentUtility -{ - /** - * Returns a random number within the given range - * - * @param int $min: the lower boundary of the range - * @param int $max: the upper boundary of the range - * @return int the generated number - */ - public static function getRandomNumberInRange($min, $max) - { - if ($min > $max) { - $newMin = $max; - $newMax = $min; - } else { - $newMin = $min; - $newMax = $max; - } - return mt_rand($newMin, $newMax); - } - - /** - * Returns a random color in a the form of an array of 3 numbers - * - * @param int $colorMaximumDarkness: maximum darkness along any dimension - * @param int $colorMaximumLightness: maximum lightness along any dimension - * @param boolean $darker: if true, produce a possibly darker image by default - * @return array the random color - */ - public static function getRandomColor ($colorMaximumDarkness, $colorMaximumLightness, $darker = false) - { - $color = []; - if ($darker) { - // Needs darker colour.. - $minimum = isset($colorMaximumDarkness) ? $colorMaximumDarkness : 10; - $maximum = isset($colorMaximumLightness) ? $colorMaximumLightness : 100; - } else { - $minimum = isset($colorMaximumDarkness) ? $colorMaximumDarkness : 30; - $maximum = isset($colorMaximumLightness) ? $colorMaximumLightness : 140; - } - for ($i = 0; $i < 3 ; $i++) { - $color[] = self::getRandomNumberInRange($minimum, $maximum); - } - return $color; - } - - /** - * Returns a random word - * - * @param boolean $useWordsList: if true, a word dictionary is used - * @param string $wordsList: dictionary file location - * @param boolean $numbersOnly: if true, use only numbers - * - * @return string random word - */ - public static function getRandomWord($useWordsList = false, $wordsList = '', $numbersOnly = false, $maxWordLength = 6) - { - if ($useWordsList && is_file($wordsList)) { - // Load dictionary and choose random word - // Keep dictionary in non-web accessible folder, or htaccess it - // or modify so word comes from a database; SELECT word FROM words ORDER BY rand() LIMIT 1 - $words = @file($wordsList); - $word = strtolower($words[self::getRandomNumberInRange(0, sizeof($words)-1)]); - // Cut off line breaks - $word = preg_replace('/['.preg_quote(chr(10).chr(13)).']+/', '', $word); - unset($words); - } else { - // Based on code originally by breakzero at hotmail dot com - // (http://uk.php.net/manual/en/function.rand.php) - // generate pseudo-random string - // doesn't use ijtf as are easily mistaken - - // I'm not using numbers because the custom fonts I've created don't support anything other than - // lowercase or space (but you can download new fonts or create your own using my GD fontmaker script) - if ($numbersOnly) { - $consonants = '123456789'; - $vowels = '123456789'; - } else { - $consonants = 'bcdghklmnpqrsvwxyz'; - $vowels = 'aeuo'; - } - $word = ''; - $wordlen = self::getRandomNumberInRange(5, $maxWordLength); - for ($i = 0; $i < $wordlen; $i++) { - // Don't allow to start with 'vowel' - if (self::getRandomNumberInRange(0, 20) >= 10 && $i != 0) { - $word .= $vowels[self::getRandomNumberInRange(0, strlen($vowels)-1)]; - } else { - $word .= $consonants[self::getRandomNumberInRange(0, strlen($consonants)-1)]; - } - } - } - return $word; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Validation/Validator/CaptchaValidator.php b/typo3conf/ext/sr_freecap/Classes/Validation/Validator/CaptchaValidator.php deleted file mode 100644 index 4e12b45..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Validation/Validator/CaptchaValidator.php +++ /dev/null @@ -1,97 +0,0 @@ - - * 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 2 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 SJBR\SrFreecap\Domain\Repository\WordRepository; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator; - -/** - * Captcha validator - */ -class CaptchaValidator extends AbstractValidator -{ - /** - * Specifies whether this validator accepts empty values. - * - * If this is true, the validators isValid() method is not called in case of an empty value - * Note: A value is considered empty if it is null or an empty string! - * By default all validators except for NotEmpty and the Composite Validators accept empty values - * - * @var bool - */ - protected $acceptsEmptyValues = false; - - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * Check the word that was entered against the hashed value - * Returns true, if the given property ($word) matches the session captcha value. - * - * @param string $word: the word that was entered and should be validated - * @return boolean true, if the word entered matches the hash value, false if an error occured - */ - public function isValid($word) - { - $isValid = false; - // This validator needs a frontend user session - if (is_object($GLOBALS ['TSFE']) && isset($GLOBALS ['TSFE']->fe_user)) { - // Get session data - $wordRepository = GeneralUtility::makeInstance(WordRepository::class); - $wordObject = $wordRepository->getWord(); - $wordHash = $wordObject->getWordHash(); - // Check the word hash against the stored hash value - if (!empty($wordHash) && !empty($word)) { - if ($wordObject->getHashFunction() == 'md5') { - // All freeCap words are lowercase. - // font #4 looks uppercase, but trust me, it's not... - if (md5(strtolower(utf8_decode($word))) == $wordHash) { - // Reset freeCap session vars - // Cannot stress enough how important it is to do this - // Defeats re-use of known image with spoofed session id - $wordRepository->cleanUpWord(); - $isValid = true; - } - } - } - } else { - $isValid = empty($word); - } - if (!$isValid) { - // Please enter the word or number as it appears in the image. The entered value was incorrect. - $this->addError( - $this->translateErrorMessage( - '9221561048', - 'SrFreecap' - ), - 9221561048 - ); - } - return $isValid; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/Validation/Validator/TtfFileValidator.php b/typo3conf/ext/sr_freecap/Classes/Validation/Validator/TtfFileValidator.php deleted file mode 100644 index 6e38e27..0000000 --- a/typo3conf/ext/sr_freecap/Classes/Validation/Validator/TtfFileValidator.php +++ /dev/null @@ -1,76 +0,0 @@ - - * 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 2 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\Validation\Validator\AbstractValidator; - -/** - * Validator for True Type Font file existence - * - */ -class TtfFileValidator extends AbstractValidator -{ - /** - * Returns true, if the given property ($propertyValue) is a valid number in the given range. - * - * If at least one error occurred, the result is false. - * - * @param mixed $value The value that should be validated - * @return boolean true if the value is within the range, otherwise false - */ - protected function isValid($value) - { - $isValid = true; - $absoluteFileName = GeneralUtility::getFileAbsFileName($value); - // Check file existence - if (!is_file($absoluteFileName)) { - // A file with the given name could not be found. - $this->addError( - $this->translateErrorMessage( - '9221561046', - 'SrFreecap' - ), - 9221561046 - ); - $isValid = false; - } else { - // Check file extension - $pathInfo = pathinfo($absoluteFileName); - if (strtolower($pathInfo['extension']) !== 'ttf') { - // The specified file is not a True Type Font file. - $this->addError( - $this->translateErrorMessage( - '9221561047', - 'SrFreecap' - ), - 9221561046 - ); - $isValid = false; - } - } - return $isValid; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/AbstractPlayFormat.php b/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/AbstractPlayFormat.php deleted file mode 100644 index a15d620..0000000 --- a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/AbstractPlayFormat.php +++ /dev/null @@ -1,199 +0,0 @@ - - * All rights reserved - * - * free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * (at your option) any later version. - * - * The GNU General Public License can be found at - * http://www.gnu.org/copyleft/gpl.html. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Utility\AudioContentUtility; -use SJBR\SrFreecap\Utility\EncryptionUtility; -use SJBR\SrFreecap\Utility\LocalizationUtility; -use TYPO3Fluid\Fluid\View\ViewInterface; - -/** - * Abstract class for rendering an audio version of the CAPTCHA - */ -class AbstractPlayFormat implements ViewInterface -{ - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Key of the extension this view helper belongs to - */ - protected $extensionKey = 'sr_freecap'; - - /** - * @var \TYPO3\CMS\Core\Domain\Model\Word - */ - protected $word; - - /** - * Add a variable to the view data collection. - * Can be chained, so $this->view->assign(..., ...)->assign(..., ...); is possible - * - * @param string $key Key of variable - * @param mixed $value Value of object - * @return ViewInterface an instance of $this, to enable chaining - */ - public function assign($key, $value) - { - switch ($key) { - case 'word': - $this->word = $value; - break; - } - return $this; - } - - /** - * Add multiple variables to the view data collection - * - * @param array $values array in the format array(key1 => value1, key2 => value2) - * @return ViewInterface an instance of $this, to enable chaining - */ - public function assignMultiple(array $values) - { - return $this; - } - - /** - * Renders the audio version of captcha - * - * @return string The audio output to play - */ - public function render() - { - // Get the catcha word - $word = $this->getWord(); - // Get the letter rensering files - $letterRenderingFiles = $this->getLetterRenderingFiles($word); - // Join the files - $audioContent = AudioContentUtility::joinAudioFiles($letterRenderingFiles); - // Output proper headers and echo audio content - $this->sendHeaders($audioContent); - // Send audio content - $this->sendAudioContent($audioContent); - // Return the audio content - return $audioContent; - } - - /** - * Gets the word that was stored in session data - * @return string the retrieved and decoded word - */ - protected function getWord() - { - // Get cypher from session data - $cypher = $this->word->getWordCypher(); - // Decrypt the word - $decryptedString = EncryptionUtility::decrypt($cypher); - return implode('-', preg_split('//', $decryptedString, -1, PREG_SPLIT_NO_EMPTY)); - } - - /** - * Builds an array of letter rendering files in the specified format - * - * @param string $word: the word to be spelled and played - * @param string $extension: the audio file extension being used - * @return array array of file names - */ - protected function getLetterRenderingFiles($word, $extension = 'wav') - { - $letterRenderingFiles = []; - // Split the word - $letters = preg_split('//', $word, -1, PREG_SPLIT_NO_EMPTY); - // Get the directory containing the wav files - $voicesDirectory = LocalizationUtility::getVoicesDirectory(); - // Assemble the file names - foreach ($letters as $letter){ - // Word lists are encoded in ISO-8859-1 (possibly in ISO-8859-2?) - $file = $voicesDirectory . ((isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) && $GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) ? utf8_encode($letter) : $letter) . '.' . $extension; - if (is_file($file)) { - $letterRenderingFiles[] = $file; - } - } - return $letterRenderingFiles; - } - - /** - * Sends headers appropriate for audio content - * - * @param string $audioContent: the audio content that will be sent - * @param string $mimeType: the audio mime type being used - * @return void - */ - protected function sendHeaders($audioContent, $mimeType = 'x-wav') - { - header('Content-Type: audio/' . $mimeType); - header('Content-Transfer-Encoding: binary'); - header('Content-Length: ' . strlen($audioContent)); - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Pragma: no-cache'); - header('Cache-Control: no-cache, no-store, must-revalidate'); - // Setting privacy policy header for IE in popup window - header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); - } - - /** - * Sends audio content - * - * @param string $audioContent: the audio content that will be sent - * @return void - */ - protected function sendAudioContent($audioContent) - { - echo $audioContent; - } - - /** - * Renders a given section. - * - * @param string $sectionName Name of section to render - * @param array $variables The variables to use - * @param boolean $ignoreUnknown Ignore an unknown section and just return an empty string - * @return string rendered template for the section - * @throws Exception\InvalidSectionException - */ - public function renderSection($sectionName, array $variables = [], $ignoreUnknown = false) - { - return ''; - } - - /** - * Renders a partial. - * - * @param string $partialName - * @param string $sectionName - * @param array $variables - * @param boolean $ignoreUnknown Ignore an unknown section and just return an empty string - * @return string - */ - public function renderPartial($partialName, $sectionName, array $variables, $ignoreUnknown = false) - { - return ''; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayMp3.php b/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayMp3.php deleted file mode 100644 index 0adb24e..0000000 --- a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayMp3.php +++ /dev/null @@ -1,57 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\Utility\AudioContentUtility; - -/** - * Renders a mp3 audio version of the CAPTCHA - */ -class PlayMp3 extends AbstractPlayFormat -{ - /** - * Renders the audio version of captcha - * - * @return string The audio output to play - */ - public function render() - { - // Get the catcha word - $word = $this->getWord(); - // Get the letter rensering files - $letterRenderingFiles = $this->getLetterRenderingFiles($word, 'mp3'); - // Join the files - $audioContent = AudioContentUtility::joinAudioFiles($letterRenderingFiles, 'mp3'); - // Output proper headers - $this->sendHeaders($audioContent, 'mpeg'); - // Send audio content - $this->sendAudioContent($audioContent); - // Return the audio content - return $audioContent; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayWav.php b/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayWav.php deleted file mode 100644 index dc3c75f..0000000 --- a/typo3conf/ext/sr_freecap/Classes/View/AudioPlayer/PlayWav.php +++ /dev/null @@ -1,34 +0,0 @@ - -* 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 2 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. -* A copy is found in the textfile GPL.txt and important notices to the license -* from the author is found in LICENSE.txt distributed with these scripts. -* -* -* 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! -***************************************************************/ -/** - * Renders a wav audio version of the CAPTCHA - * - * @author Stanislas Rolland - */ -class PlayWav extends AbstractPlayFormat { -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/View/ImageGenerator/ShowPng.php b/typo3conf/ext/sr_freecap/Classes/View/ImageGenerator/ShowPng.php deleted file mode 100644 index dc38a11..0000000 --- a/typo3conf/ext/sr_freecap/Classes/View/ImageGenerator/ShowPng.php +++ /dev/null @@ -1,264 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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! - */ -/* - * Integrates freeCap v1.4.1 into TYPO3 and generates the freeCap CAPTCHA image. - */ -/* - * - * freeCap v1.4.1 Copyright 2005 Howard Yeend - * www.puremango.co.uk - * - * This file is part of freeCap. - * - * freeCap 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 2 of the License, or - * (at your option) any later version. - * - * freeCap 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. - * - * You should have received a copy of the GNU General Public License - * along with freeCap; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -use SJBR\SrFreecap\Domain\Model\Word; -use SJBR\SrFreecap\Domain\Repository\WordRepository; -use SJBR\SrFreecap\Utility\EncryptionUtility; -use SJBR\SrFreecap\Utility\ImageContentUtility; -use SJBR\SrFreecap\Utility\RandomContentUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Utility\LocalizationUtility; -use TYPO3Fluid\Fluid\View\ViewInterface; - -/** - * Renders a png image of the CAPTCHA - */ -class ShowPng implements ViewInterface -{ - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Name of the plugin this view helper belongs to - */ - protected $pluginName = 'ImageGenerator'; - - /** - * @var string Key of the extension this view helper belongs to - */ - protected $extensionKey = 'sr_freecap'; - - /** - * @var Word - */ - protected $word; - - /** - * @var array Configuration of this view - */ - protected $settings; - - /** - * Add a variable to the view data collection. - * Can be chained, so $this->view->assign(..., ...)->assign(..., ...); is possible - * - * @param string $key Key of variable - * @param mixed $value Value of object - * @return SJBR\SrFreecap\View\ImageGenerator\ShowPng an instance of $this, to enable chaining - * @api - */ - public function assign($key, $value) - { - switch ($key) { - case 'word': - $this->word = $value; - break; - case 'settings': - $this->settings = $value; - break; - } - return $this; - } - - /** - * Add multiple variables to the view data collection - * - * @param array $values array in the format array(key1 => value1, key2 => value2) - * @return SJBR\SrFreecap\View\ImageGenerator\ShowPng an instance of $this, to enable chaining - * @api - */ - public function assignMultiple(array $values) - { - return $this; - } - - /** - * Renders the captcha image - * - * @return string empty string (the image is sent here) - */ - public function render() - { - // Avoid Brute Force Attacks: - if (!$this->word->getAttempts()) { - $this->word->setAttempts(1); - } else { - $this->word->setAttempts($this->word->getAttempts() + 1); - // if more than ($this->settings['maxAttempts']) refreshes, block further refreshes - // can be negated by connecting with new session id - // could get round this by storing num attempts in database against IP - // could get round that by connecting with different IP (eg, using proxy servers) - // in short, there's little point trying to avoid brute forcing - // the best way to protect against BF attacks is to ensure the dictionary is not - // accessible via the web or use random string option - if ($this->word->getAttempts() > $this->settings['maxAttempts']) { - $this->word->setWordHash(''); - $this->word->setWordCypher([]); - $this->word->setHashFunction(''); - // Get an instance of the word repository - $wordRepository = GeneralUtility::makeInstance(WordRepository::class); - // Reset the word - $wordRepository->setWord($this->word); - $string = LocalizationUtility::translate('max_attempts', $this->extensionName); - $font = 5; - $width = imagefontwidth($font) * strlen($string); - $height = imagefontheight($font); - $image = ImageCreate($width+2, $height+20); - $background = ImageColorAllocate($image, 255,255,255); - ImageColorTransparent($image, $background); - $red = ImageColorAllocate($image, 255, 0, 0); - ImageString($image, $font, 1, 10, $string, $red); - ImageContentUtility::sendImage($image, $this->settings['imageFormat']); - ImageDestroy($image); - // Return an empty string - return ''; - } - } - - // Get random word - $word = RandomContentUtility::getRandomWord($this->settings['useWordsList'], $this->settings['wordsListLocation'], $this->settings['generateNumbers'] ?? 0, $this->settings['maxWordLength']); - - // Save hash of word for comparison - // using hash so that if there's an insecurity elsewhere (eg on the form processor), - // an attacker could only get the hash - // also, shared servers usually give all users access to the session files - // echo `ls /tmp`; and echo `more /tmp/someone_elses_session_file`; usually work - // so even if your site is 100% secure, someone else's site on your server might not be - // hence, even if attackers can read the session file, they can't get the freeCap word - // (though most hashes are easy to brute force for simple strings) - $this->word->setWordHash(md5($word)); - - // We use a simple encrypt to prevent the session from being exposed - if ($this->settings['accessibleOutput'] ?? false) { - $this->word->setWordCypher(EncryptionUtility::encrypt($word)); - } - - // Build the image - $image = $this->buildImage($word, $this->settings['imageWidth'], $this->settings['imageHeight'], $this->settings['backgroundType']); - - // Send the image - ImageContentUtility::sendImage($image, $this->settings['imageFormat']); - - // Cleanup - ImageDestroy($image); - - // Return an empty string - return ''; - } - - /** - * Builds the CAPTCHA image - * - * @param string $word - * @return string GD image identifier of image - */ - protected function buildImage($word, $width, $height, $backgroundType) - { - $image = ImageCreate($width, $height); - $background = ImageColorAllocate($image, 254, 254, 254); - - // Write word on image - $image = ImageContentUtility::writeWordOnImage($width, $height, $word, $this->settings['textColor'], $this->settings['textPosition'], $this->settings['colorMaximum'], $backgroundType, $this->settings['fontLocations'], $this->settings['fontWidths'], $this->settings['morphFactor']); - - // Blur edges - // Doesn't really add any security, but looks a lot nicer, and renders text a little easier to read - // for humans (hopefully not for OCRs, but if you know better, feel free to disable this function) - // (and if you do, let me know why) - $image = ImageContentUtility::blurImage($image); - - if ($this->settings['imageFormat'] != 'jpg' && $backgroundType == ImageContentUtility::BACKGROUND_TYPE_TRANSPARENT) { - // Make background transparent - ImageColorTransparent($image, $background); - } - - if ($backgroundType != ImageContentUtility::BACKGROUND_TYPE_TRANSPARENT) { - // Get noisy background - $image3 = ImageContentUtility::generateNoisyBackground($width, $height, $word, $backgroundType, $this->settings['backgroundImages'], $this->settings['backgroundMorph'], $this->settings['backgroundBlur']); - // Merge with obfuscated background - $image = ImageContentUtility::mergeCaptchaWithBackground($width, $height, $image, $image3, $backgroundType, $this->settings['mergeWithBackground']); - ImageDestroy($image3); - } - return $image; - } - - /** - * Renders a given section. - * - * @param string $sectionName Name of section to render - * @param array $variables The variables to use - * @param boolean $ignoreUnknown Ignore an unknown section and just return an empty string - * @return string rendered template for the section - * @throws Exception\InvalidSectionException - */ - public function renderSection($sectionName, array $variables = [], $ignoreUnknown = false) - { - return ''; - } - - /** - * Renders a partial. - * - * @param string $partialName - * @param string $sectionName - * @param array $variables - * @param boolean $ignoreUnknown Ignore an unknown section and just return an empty string - * @return string - */ - public function renderPartial($partialName, $sectionName, array $variables, $ignoreUnknown = false) - { - return ''; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/AudioViewHelper.php b/typo3conf/ext/sr_freecap/Classes/ViewHelpers/AudioViewHelper.php deleted file mode 100644 index 411768e..0000000 --- a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/AudioViewHelper.php +++ /dev/null @@ -1,154 +0,0 @@ - - * All rights reserved - * - * This script is part of the TYPO3 project. The TYPO3 project is - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\ViewHelpers\TranslateViewHelper; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Session\Backend\Exception\SessionNotFoundException; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\PathUtility; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; -use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper; - -class AudioViewHelper extends AbstractTagBasedViewHelper -{ - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Name of the extension this view helper belongs to - */ - protected $pluginName = 'tx_srfreecap'; - - /** - * @var ConfigurationManagerInterface - */ - protected $configurationManager; - - /** - * @param ConfigurationManagerInterface $configurationManager - * @return void - */ - public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager) - { - $this->configurationManager = $configurationManager; - } - - /** - * @var Context - */ - protected $context; - - /** - * @param Context $context - */ - public function injectContext(Context $context) - { - $this->context = $context; - } - - public function initializeArguments() - { - parent::initializeArguments(); - $this->registerArgument('suffix', 'string', 'Suffix to be appended to the extenstion key when forming css class names', false, ''); - } - - /** - * Render the captcha audio rendering request icon - * - * @param string suffix to be appended to the extenstion key when forming css class names - * @return string The html used to render the captcha audio rendering request icon - */ - public function render($suffix = '') - { - // This viewhelper needs a frontend user session - if (!is_object($this->getTypoScriptFrontendController()) || !isset($this->getTypoScriptFrontendController()->fe_user)) { - throw new SessionNotFoundException('No frontend user found in session!'); - } - $value = ''; - // Get the plugin configuration - $settings = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, $this->extensionName, $this->pluginName); - // Get the translation view helper - $translator = GeneralUtility::makeInstance(TranslateViewHelper::class); - // Generate the icon - if (($settings['accessibleOutput'] ?? false) && ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem'] ?? false)) { - $languageAspect = $this->context->getAspect('language'); - $fakeId = substr(md5(uniqid(rand())), 0, 5); - $siteURL = GeneralUtility::getIndpEnv('TYPO3_SITE_URL'); - $urlParams = [ - 'eIDSR' => 'sr_freecap_EidDispatcher', - 'id' => $GLOBALS['TSFE']->id, - 'pluginName' => 'AudioPlayer', - 'actionName' => 'play', - 'formatName' => 'wav', - 'L' => $languageAspect->getId() - ]; - if ($this->getTypoScriptFrontendController()->MP) { - $urlParams['MP'] = $this->getTypoScriptFrontendController()->MP; - } - $audioURL = $siteURL . 'index.php?' . ltrim(GeneralUtility::implodeArrayForUrl('', $urlParams), '&'); - if (isset($settings['accessibleOutputImage']) && $settings['accessibleOutputImage']) { - $value = 'getClassAttribute('image-accessible', $suffix) . ' />'; - } else { - $value = 'getClassAttribute('accessible-link', $suffix) . '>' . $translator->render('click_here_accessible_before_link') - . '' - . $translator->render('click_here_accessible_link') . '' - . $translator->render('click_here_accessible_after_link') . ''; - } - $value .= 'getClassAttribute('accessible', $suffix) . ' id="tx_srfreecap_captcha_playAudio_' . $fakeId . '">'; - } - return $value; - } - - /** - * Returns a class attribute with a class-name prefixed with $this->pluginName and with all underscores substituted to dashes (-) - * - * @param string $class The class name (or the END of it since it will be prefixed by $this->pluginName.'-') - * @param string suffix to be appended to the extenstion key when forming css class names - * @return string the class attribute with the combined class name (with the correct prefix) - */ - protected function getClassAttribute ($class, $suffix = '') - { - return ' class="' . trim(str_replace('_', '-', $this->pluginName) . ($suffix ? '-' . $suffix . '-' : '-') . $class) . '"'; - } - - /** - * @return TypoScriptFrontendController - */ - protected function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/ImageViewHelper.php b/typo3conf/ext/sr_freecap/Classes/ViewHelpers/ImageViewHelper.php deleted file mode 100644 index 0555701..0000000 --- a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/ImageViewHelper.php +++ /dev/null @@ -1,174 +0,0 @@ - - * All rights reserved - * - * This script is part of the TYPO3 project. The TYPO3 project is - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\SrFreecap\ViewHelpers\TranslateViewHelper; -use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Page\PageRenderer; -use TYPO3\CMS\Core\Session\Backend\Exception\SessionNotFoundException; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Core\Utility\PathUtility; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; -use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper; - -class ImageViewHelper extends AbstractTagBasedViewHelper -{ - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionKey = 'sr_freecap'; - - /** - * @var string Name of the plugin this view helper belongs to - */ - protected $pluginName = 'tx_srfreecap'; - - /** - * @var ConfigurationManagerInterface - */ - protected $configurationManager; - - /** - * @param ConfigurationManagerInterface $configurationManager - */ - public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager) - { - $this->configurationManager = $configurationManager; - } - - /** - * @var PageRenderer - */ - protected $pageRenderer; - - /** - * @param PageRenderer $pageRenderer - */ - public function injectPageRenderer(PageRenderer $pageRenderer) - { - $this->pageRenderer = $pageRenderer; - } - - /** - * @var Context - */ - protected $context; - - /** - * @param Context $context - */ - public function injectContext(Context $context) - { - $this->context = $context; - } - - public function initializeArguments() - { - parent::initializeArguments(); - $this->registerArgument('suffix', 'string', 'Suffix to be appended to the extenstion key when forming css class names', false, ''); - } - - /** - * Render the captcha image html - * - * @param string suffix to be appended to the extenstion key when forming css class names - * @return string The html used to render the captcha image - */ - public function render($suffix = '') - { - // This viewhelper needs a frontend user session - if (!is_object($this->getTypoScriptFrontendController()) || !isset($this->getTypoScriptFrontendController()->fe_user)) { - throw new SessionNotFoundException('No frontend user found in session!'); - } - - $value = ''; - - // Include the required JavaScript - $this->pageRenderer->addJsFooterFile(PathUtility::stripPathSitePrefix(ExtensionManagementUtility::extPath($this->extensionKey)) . 'Resources/Public/JavaScript/freeCap.js'); - - // Disable caching - $this->getTypoScriptFrontendController()->no_cache = true; - - // Get the translation view helper - $translator = GeneralUtility::makeInstance(TranslateViewHelper::class); - - // Generate the image url - $fakeId = substr(md5(uniqid(rand())), 0, 5); - $siteURL = GeneralUtility::getIndpEnv('TYPO3_SITE_URL'); - $languageAspect = $this->context->getAspect('language'); - $urlParams = [ - 'eIDSR' => 'sr_freecap_EidDispatcher', - 'id' => $this->getTypoScriptFrontendController()->id, - 'pluginName' => 'ImageGenerator', - 'actionName' => 'show', - 'formatName' => 'png', - 'L' => $languageAspect->getId() - ]; - if ($this->getTypoScriptFrontendController()->MP) { - $urlParams['MP'] = $this->getTypoScriptFrontendController()->MP; - } - $urlParams['set'] = $fakeId; - $imageUrl = $siteURL . 'index.php?' . ltrim(GeneralUtility::implodeArrayForUrl('', $urlParams), '&'); - - // Generate the html text - $value = 'getClassAttribute('image', $suffix) . ' id="tx_srfreecap_captcha_image_' . $fakeId . '"' - . ' src="' . htmlspecialchars($imageUrl) . '"' - . ' alt="' . $translator->render('altText') . ' "/>' - . 'getClassAttribute('cant-read', $suffix) . '>' . $translator->render('cant_read1') - . ' ' - . $translator->render('click_here') . '' - . $translator->render('cant_read2') . ''; - return $value; - } - - /** - * Returns a class attribute with a class-name prefixed with $this->pluginName and with all underscores substituted to dashes (-) - * - * @param string $class The class name (or the END of it since it will be prefixed by $this->pluginName.'-') - * @param string suffix to be appended to the extenstion key when forming css class names - * @return string the class attribute with the combined class name (with the correct prefix) - */ - protected function getClassAttribute($class, $suffix = '') - { - return ' class="' . trim(str_replace('_', '-', $this->pluginName) . ($suffix ? '-' . $suffix . '-' : '-') . $class) . '"'; - } - - /** - * @return TypoScriptFrontendController - */ - protected function getTypoScriptFrontendController() - { - return $GLOBALS['TSFE']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/TranslateViewHelper.php b/typo3conf/ext/sr_freecap/Classes/ViewHelpers/TranslateViewHelper.php deleted file mode 100644 index 9cca129..0000000 --- a/typo3conf/ext/sr_freecap/Classes/ViewHelpers/TranslateViewHelper.php +++ /dev/null @@ -1,147 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\Extbase\Configuration\ConfigurationManagerInterface; -use TYPO3\CMS\Extbase\Utility\LocalizationUtility; -use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; - -/** - * Translate a key from locallang. The files are loaded from the folder - * "Resources/Private/Language/". - * - * Handle salutation suffixes - * - * == Examples == - * - * - * - * - * - * // value of key "key1" in the current website language - * - * - * - * - * - * - * // value of key "htmlKey" in the current website language, no htmlspecialchars applied - * - * - * - * - * - * - * // value of key "key1" in the current website language - * - * - * - * {f:translate(key: 'argumentsKey', arguments: {0: 'dog', 1: 'fox'}, default: 'default value')} - * - * - * // value of key "argumentsKey" in the current website language - * // with "%1" and "%2" are replaced by "dog" and "fox" (printf) - * // if the key is not found, the output is "default value" - * - */ -class TranslateViewHelper extends AbstractViewHelper -{ - /** - * @var string Name of the extension this view helper belongs to - */ - protected $extensionName = 'SrFreecap'; - - /** - * @var string Name of the extension this view helper belongs to - */ - protected $pluginName = 'tx_srfreecap'; - - /** - * @var array List of allowed suffixes - */ - protected $allowedSuffixes = ['formal', 'informal']; - - /** - * @var ConfigurationManagerInterface - */ - protected $configurationManager; - - /** - * @param ConfigurationManagerInterface $configurationManager - * @return void - */ - public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager) - { - $this->configurationManager = $configurationManager; - } - - public function initializeArguments() - { - $this->registerArgument('key', 'string', 'The language key to translate', true); - $this->registerArgument('default', 'string', 'Value to be used when the key is not found'); - $this->registerArgument('htmlEscape', 'boolean', 'Whether to escape html', false, true); - $this->registerArgument('arguments', 'array', 'Arguments to be replaced in the string'); - } - - /** - * Translate a given key or use the tag body as default. - * - * @param string $key The locallang key - * @param string $default if the given locallang key could not be found, this value is used. . If this argument is not set, child nodes will be used to render the default - * @param boolean $htmlEscape true if the result should be htmlescaped. This won't have an effect for the default value - * @param array $arguments Arguments to be replaced in the resulting string - * @return string The translated key or tag body if key doesn't exist - * @author Christopher Hlubek - * @author Bastian Waidelich - */ - public function render($key = null) - { - if ($this->hasArgument('key')) { - $key = $this->arguments['key']; - } - $value = null; - $default = $this->hasArgument('default') ? $this->arguments['default'] : ''; - $htmlEscape = $this->hasArgument('htmlEscape') ? $this->arguments['htmlEscape'] : false; - $arguments = $this->hasArgument('arguments') ? $this->arguments['arguments'] : []; - // If the suffix is allowed and we have a localized string for the desired salutation, we'll take that. - $settings = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, $this->extensionName, $this->pluginName); - if (isset($settings['salutation']) && in_array($settings['salutation'], $this->allowedSuffixes, 1)) { - $expandedKey = $key . '_' . $settings['salutation']; - $value = LocalizationUtility::translate($expandedKey, $this->extensionName, $arguments); - } - if ($value === null) { - $value = LocalizationUtility::translate($key, $this->extensionName, $arguments); - } - if ($value === null) { - $value = $default !== null ? $default : $this->renderChildren(); - } elseif ($htmlEscape) { - $value = htmlspecialchars($value); - } - return $value; - } -} diff --git a/typo3conf/ext/sr_freecap/Configuration/RequestMiddlewares.php b/typo3conf/ext/sr_freecap/Configuration/RequestMiddlewares.php deleted file mode 100644 index 1bce468..0000000 --- a/typo3conf/ext/sr_freecap/Configuration/RequestMiddlewares.php +++ /dev/null @@ -1,24 +0,0 @@ - [ - * 'middleware-identifier' => [ - * 'target' => classname or callable - * 'before/after' => array of dependencies - * ] - * ] - */ -return [ - 'frontend' => [ - 'sjbr/sr-freecap/eidsr' => [ - 'target' => \SJBR\SrFreecap\Middleware\EidHandler::class, - 'after' => [ - 'typo3/cms-frontend/tsfe', - 'typo3/cms-frontend/authentication', - 'typo3/cms-frontend/backend-user-authentication', - 'typo3/cms-frontend/site', - ] - ] - ] -]; \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Configuration/Services.yaml b/typo3conf/ext/sr_freecap/Configuration/Services.yaml deleted file mode 100644 index 3a251fa..0000000 --- a/typo3conf/ext/sr_freecap/Configuration/Services.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Configuration/Services.yaml -services: - _defaults: - autowire: true - autoconfigure: true - public: false - - SJBR\SrFreecap\: - resource: '../Classes/*' - exclude: '../Classes/Domain/Model/*' - - SJBR\SrFreecap\Configuration\ConfigurationHelper: - public: true \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Configuration/TCA/sys_template.php b/typo3conf/ext/sr_freecap/Configuration/TCA/sys_template.php deleted file mode 100644 index 3540839..0000000 --- a/typo3conf/ext/sr_freecap/Configuration/TCA/sys_template.php +++ /dev/null @@ -1,5 +0,0 @@ - - Copyright (C) - - This program 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 2 of the License, or - (at your option) any later version. - - This program 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/typo3conf/ext/sr_freecap/Contrib/freeCap-1.4.1/freecap141.php b/typo3conf/ext/sr_freecap/Contrib/freeCap-1.4.1/freecap141.php deleted file mode 100644 index abde61a..0000000 --- a/typo3conf/ext/sr_freecap/Contrib/freeCap-1.4.1/freecap141.php +++ /dev/null @@ -1,817 +0,0 @@ - 6 chars in length really. -$width = ($max_word_length*(array_sum($font_widths)/sizeof($font_widths))+75); -$height = 90; - -$im = ImageCreate($width, $height); -$im2 = ImageCreate($width, $height); - - - -////////////////////////////////////////////////////// -////// Avoid Brute Force Attacks: -////////////////////////////////////////////////////// -if(empty($_SESSION['freecap_attempts'])) -{ - $_SESSION['freecap_attempts'] = 1; -} else { - $_SESSION['freecap_attempts']++; - - // if more than ($max_attempts) refreshes, block further refreshes - // can be negated by connecting with new session id - // could get round this by storing num attempts in database against IP - // could get round that by connecting with different IP (eg, using proxy servers) - // in short, there's little point trying to avoid brute forcing - // the best way to protect against BF attacks is to ensure the dictionary is not - // accessible via the web or use random string option - if($_SESSION['freecap_attempts']>$max_attempts) - { - $_SESSION['freecap_word_hash'] = false; - - $bg = ImageColorAllocate($im,255,255,255); - ImageColorTransparent($im,$bg); - - $red = ImageColorAllocate($im, 255, 0, 0); - // depending on how rude you want to be :-) - //ImageString($im,5,0,20,"bugger off you spamming bastards!",$red); - ImageString($im,5,15,20,"service no longer available",$red); - - sendImage($im); - } -} - - - - - -////////////////////////////////////////////////////// -////// Functions: -////////////////////////////////////////////////////// -function make_seed() { -// from http://php.net/srand - list($usec, $sec) = explode(' ', microtime()); - return (float) $sec + ((float) $usec * 100000); -} - -function rand_color() { - global $bg_type,$rand_func; - if($bg_type==3) - { - // needs darker colour.. - return $rand_func(10,100); - } else { - return $rand_func(60,170); - } -} - -function myImageBlur($im) -{ - // w00t. my very own blur function - // in GD2, there's a gaussian blur function. bunch of bloody show-offs... :-) - - $width = imagesx($im); - $height = imagesy($im); - - $temp_im = ImageCreateTrueColor($width,$height); - $bg = ImageColorAllocate($temp_im,150,150,150); - - // preserves transparency if in orig image - ImageColorTransparent($temp_im,$bg); - - // fill bg - ImageFill($temp_im,0,0,$bg); - - // anything higher than 3 makes it totally unreadable - // might be useful in a 'real' blur function, though (ie blurring pictures not text) - $distance = 1; - // use $distance=30 to have multiple copies of the word. not sure if this is useful. - - // blur by merging with itself at different x/y offsets: - ImageCopyMerge($temp_im, $im, 0, 0, 0, $distance, $width, $height-$distance, 70); - ImageCopyMerge($im, $temp_im, 0, 0, $distance, 0, $width-$distance, $height, 70); - ImageCopyMerge($temp_im, $im, 0, $distance, 0, 0, $width, $height, 70); - ImageCopyMerge($im, $temp_im, $distance, 0, 0, 0, $width, $height, 70); - // remove temp image - ImageDestroy($temp_im); - - return $im; -} - -function sendImage($pic) -{ - // output image with appropriate headers - global $output,$im,$im2,$im3; - header(base64_decode("WC1DYXB0Y2hhOiBmcmVlQ2FwIDEuNCAtIHd3dy5wdXJlbWFuZ28uY28udWs=")); - switch($output) - { - // add other cases as desired - case "jpg": - header("Content-Type: image/jpeg"); - ImageJPEG($pic); - break; - case "gif": - header("Content-Type: image/gif"); - ImageGIF($pic); - break; - case "png": - default: - header("Content-Type: image/png"); - ImagePNG($pic); - break; - } - - // kill GD images (removes from memory) - ImageDestroy($im); - ImageDestroy($im2); - ImageDestroy($pic); - if(!empty($im3)) - { - ImageDestroy($im3); - } - exit(); -} - - - - -////////////////////////////////////////////////////// -////// Choose Word: -////////////////////////////////////////////////////// -if($use_dict==1) -{ - // load dictionary and choose random word - $words = @file($dict_location); - $word = strtolower($words[$rand_func(0,sizeof($words)-1)]); - // cut off line endings/other possible odd chars - $word = preg_replace('/[^a-z]/', '',$word); - // might be large file so forget it now (frees memory) - $words = ""; - unset($words); -} else { - // based on code originally by breakzero at hotmail dot com - // (http://uk.php.net/manual/en/function.rand.php) - // generate pseudo-random string - // doesn't use ijtf as are easily mistaken - - // I'm not using numbers because the custom fonts I've created don't support anything other than - // lowercase or space (but you can download new fonts or create your own using my GD fontmaker script) - $consonants = 'bcdghklmnpqrsvwxyz'; - $vowels = 'aeuo'; - $word = ""; - - $wordlen = $rand_func(5,$max_word_length); - - for($i=0 ; $i<$wordlen ; $i++) - { - // don't allow to start with 'vowel' - if($rand_func(0,4)>=2 && $i!=0) - { - $word .= $vowels{$rand_func(0,strlen($vowels)-1)}; - } else { - $word .= $consonants{$rand_func(0,strlen($consonants)-1)}; - } - } -} - -// save hash of word for comparison -// using hash so that if there's an insecurity elsewhere (eg on the form processor), -// an attacker could only get the hash -// also, shared servers usually give all users access to the session files -// echo `ls /tmp`; and echo `more /tmp/someone_elses_session_file`; usually work -// so even if your site is 100% secure, someone else's site on your server might not be -// hence, even if attackers can read the session file, they can't get the freeCap word -// (though most hashes are easy to brute force for simple strings) -$_SESSION['freecap_word_hash'] = $hash_func($word); - - - - -////////////////////////////////////////////////////// -////// Fill BGs and Allocate Colours: -////////////////////////////////////////////////////// - -// set tag colour -// have to do this before any distortion -// (otherwise colour allocation fails when bg type is 1) -$tag_col = ImageColorAllocate($im,10,10,10); -$site_tag_col2 = ImageColorAllocate($im2,0,0,0); - -// set debug colours (text colours are set later) -$debug = ImageColorAllocate($im, 255, 0, 0); -$debug2 = ImageColorAllocate($im2, 255, 0, 0); - -// set background colour (can change to any colour not in possible $text_col range) -// it doesn't matter as it'll be transparent or coloured over. -// if you're using bg_type 3, you might want to try to ensure that the color chosen -// below doesn't appear too much in any of your background images. -$bg = ImageColorAllocate($im, 254, 254, 254); -$bg2 = ImageColorAllocate($im2, 254, 254, 254); - -// set transparencies -ImageColorTransparent($im,$bg); -// im2 transparent to allow characters to overlap slightly while morphing -ImageColorTransparent($im2,$bg2); - -// fill backgrounds -ImageFill($im,0,0,$bg); -ImageFill($im2,0,0,$bg2); - -if($bg_type!=0) -{ - // generate noisy background, to be merged with CAPTCHA later - // any suggestions on how best to do this much appreciated - // sample code would be even better! - // I'm not an OCR expert (hell, I'm not even an image expert; puremango.co.uk was designed in MsPaint) - // so the noise models are based around my -guesswork- as to what would make it hard for an OCR prog - // ideally, the character obfuscation would be strong enough not to need additional background noise - // in any case, I hope at least one of the options given here provide some extra security! - - $im3 = ImageCreateTrueColor($width,$height); - $temp_bg = ImageCreateTrueColor($width*1.5,$height*1.5); - $bg3 = ImageColorAllocate($im3,255,255,255); - ImageFill($im3,0,0,$bg3); - $temp_bg_col = ImageColorAllocate($temp_bg,255,255,255); - ImageFill($temp_bg,0,0,$temp_bg_col); - - // we draw all noise onto temp_bg - // then if we're morphing, merge from temp_bg to im3 - // or if not, just copy a $widthx$height portion of $temp_bg to $im3 - // temp_bg is much larger so that when morphing, the edges retain the noise. - - if($bg_type==1) - { - // grid bg: - - // draw grid on x - for($i=$rand_func(6,20) ; $i<$width*2 ; $i+=$rand_func(10,25)) - { - ImageSetThickness($temp_bg,$rand_func(2,6)); - $text_r = $rand_func(100,150); - $text_g = $rand_func(100,150); - $text_b = $rand_func(100,150); - $text_colour3 = ImageColorAllocate($temp_bg, $text_r, $text_g, $text_b); - - ImageLine($temp_bg,$i,0,$i,$height*2,$text_colour3); - } - // draw grid on y - for($i=$rand_func(6,20) ; $i<$height*2 ; $i+=$rand_func(10,25)) - { - ImageSetThickness($temp_bg,$rand_func(2,6)); - $text_r = $rand_func(100,150); - $text_g = $rand_func(100,150); - $text_b = $rand_func(100,150); - $text_colour3 = ImageColorAllocate($temp_bg, $text_r, $text_g, $text_b); - - ImageLine($temp_bg,0,$i,$width*2, $i ,$text_colour3); - } - } else if($bg_type==2) { - // draw squiggles! - - $bg3 = ImageColorAllocate($im3,255,255,255); - ImageFill($im3,0,0,$bg3); - ImageSetThickness($temp_bg,4); - - for($i=0 ; $i$prev_y-2); - ImageCopy($im, $im2, $i, $y_pos, $i, 0, $font_pixelwidth, $height); - - // for debug: - //ImageRectangle($im,$i,$y_pos+10,$i+$font_pixelwidth,$y_pos+70,$debug); -} - -// for debug: -//sendImage($im); - -ImageFilledRectangle($im2,0,0,$width,$height,$bg2); - -// randomly morph each character individually on x-axis -// this is where the main distortion happens -// massively improved since v1.2 -$y_chunk = 1; -$morph_factor = 1; -$morph_x = 0; -for($j=0 ; $j \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/.htaccess b/typo3conf/ext/sr_freecap/Resources/Private/.htaccess deleted file mode 100644 index 3418e55..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Layouts/Default.html b/typo3conf/ext/sr_freecap/Resources/Private/Backend/Layouts/Default.html deleted file mode 100644 index 420f124..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Layouts/Default.html +++ /dev/null @@ -1,11 +0,0 @@ - -
    -
     
    -
     
    -
    -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Partials/FormErrors.html b/typo3conf/ext/sr_freecap/Resources/Private/Backend/Partials/FormErrors.html deleted file mode 100644 index 2a9d412..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Partials/FormErrors.html +++ /dev/null @@ -1,10 +0,0 @@ -{namespace freeCap=SJBR\SrFreecap\ViewHelpers} - - -
      - -
    • {error.code}
    • -
      -
    -
    -
    \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/Create.html b/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/Create.html deleted file mode 100644 index c581531..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/Create.html +++ /dev/null @@ -1,27 +0,0 @@ - - - -

    {f:translate(key: 'title-created')}

    -
    -
    -
    - -
    -
    - {font.ttfFontFileName} -
    -
    - -
    -
    - {f:translate(key: 'pngFontImage')} -
    -
    - -
    -
    - {font.gdFontFileName} -
    -
    -
    -
    diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/New.html b/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/New.html deleted file mode 100644 index e80365f..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Backend/Templates/FontMaker/New.html +++ /dev/null @@ -1,61 +0,0 @@ - - - -

    {f:translate(key: 'title')}

    - -
    -
    -
    - -
    -
    - -
    - -
    - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/anonymous.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/anonymous.gdf deleted file mode 100644 index 9ef0573..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/anonymous.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font1.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font1.gdf deleted file mode 100644 index 22c023e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font1.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font2.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font2.gdf deleted file mode 100644 index 90a2c13..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font2.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font3.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font3.gdf deleted file mode 100644 index d03d415..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font3.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font4.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font4.gdf deleted file mode 100644 index 1fe309d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_extended_font4.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font1.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font1.gdf deleted file mode 100644 index 115e4db..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font1.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font2.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font2.gdf deleted file mode 100644 index 0f549c2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font2.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font3.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font3.gdf deleted file mode 100644 index e9eba8a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font3.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font4.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font4.gdf deleted file mode 100644 index e3f61f9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font4.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font5.gdf b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font5.gdf deleted file mode 100644 index fe123f8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Fonts/freecap_font5.gdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im1.jpg b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im1.jpg deleted file mode 100644 index 823678e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im1.jpg and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im2.jpg b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im2.jpg deleted file mode 100644 index e9ad645..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im2.jpg and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im3.jpg b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im3.jpg deleted file mode 100644 index 7e3b65d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im3.jpg and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im4.jpg b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im4.jpg deleted file mode 100644 index f96821c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im4.jpg and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im5.jpg b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im5.jpg deleted file mode 100644 index a2800ed..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Images/freecap_im5.jpg and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.mp3 deleted file mode 100644 index 60ada25..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.wav deleted file mode 100644 index 9358413..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.mp3 deleted file mode 100644 index 258e208..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.wav deleted file mode 100644 index ee6eb8e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.mp3 deleted file mode 100644 index 8c7a037..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.wav deleted file mode 100644 index 46723ea..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.mp3 deleted file mode 100644 index 1557e15..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.wav deleted file mode 100644 index 14bd18a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.mp3 deleted file mode 100644 index d460756..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.wav deleted file mode 100644 index 0ba5286..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.mp3 deleted file mode 100644 index 0c2e015..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.wav deleted file mode 100644 index 2aa8cde..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.mp3 deleted file mode 100644 index 7e2aaf1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.wav deleted file mode 100644 index 2d3760e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.mp3 deleted file mode 100644 index 0d30e97..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.wav deleted file mode 100644 index 79006e9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.mp3 deleted file mode 100644 index 791052a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.wav deleted file mode 100644 index 5a4fe9d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.mp3 deleted file mode 100644 index 6e3c670..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.wav deleted file mode 100644 index 26a9204..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.mp3 deleted file mode 100644 index acb883b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.wav deleted file mode 100644 index 95f8196..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.mp3 deleted file mode 100644 index 59ea3a8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.wav deleted file mode 100644 index ae4fcad..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.mp3 deleted file mode 100644 index d868277..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.wav deleted file mode 100644 index 6218483..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.mp3 deleted file mode 100644 index 0864b84..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.wav deleted file mode 100644 index 87baa3c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.mp3 deleted file mode 100644 index f337da8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.wav deleted file mode 100644 index 2a4a0d4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.mp3 deleted file mode 100644 index e130f31..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.wav deleted file mode 100644 index e9815f0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.mp3 deleted file mode 100644 index 777cc1f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.wav deleted file mode 100644 index 4e60cb5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.mp3 deleted file mode 100644 index 2840e7a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.wav deleted file mode 100644 index f9a5b6d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.mp3 deleted file mode 100644 index 11f6202..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.wav deleted file mode 100644 index 25d2ffa..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.mp3 deleted file mode 100644 index 28834a5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.wav deleted file mode 100644 index ec8236c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.mp3 deleted file mode 100644 index 3b4acec..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.wav deleted file mode 100644 index 90841d9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.mp3 deleted file mode 100644 index 9a8d848..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.wav deleted file mode 100644 index 66ba9d2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.mp3 deleted file mode 100644 index 42dc5ca..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.wav deleted file mode 100644 index 16fb4f1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.mp3 deleted file mode 100644 index 8cf2673..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.wav deleted file mode 100644 index 44faa83..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.mp3 deleted file mode 100644 index fd56193..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.wav deleted file mode 100644 index 756c66c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.mp3 deleted file mode 100644 index 28203c6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.wav deleted file mode 100644 index c4a8bd5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.mp3 deleted file mode 100644 index d685cf2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.wav deleted file mode 100644 index 6d3464a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.mp3 deleted file mode 100644 index 9f0a41c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.wav deleted file mode 100644 index d821832..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.mp3 deleted file mode 100644 index eace550..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.wav deleted file mode 100644 index c84b1f0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.mp3 deleted file mode 100644 index d434ca9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.wav deleted file mode 100644 index 5bb1f83..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.mp3 deleted file mode 100644 index f04a98a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.wav deleted file mode 100644 index 2759786..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.mp3 deleted file mode 100644 index cefd1fb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.wav deleted file mode 100644 index 9a94f49..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.mp3 deleted file mode 100644 index 170061e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.wav deleted file mode 100644 index b88d9be..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.mp3 deleted file mode 100644 index 3fdbb4d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.wav deleted file mode 100644 index a748642..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.mp3 deleted file mode 100644 index e283a1a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.wav deleted file mode 100644 index 8979ff3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.mp3 deleted file mode 100644 index ed1d9e8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.wav deleted file mode 100644 index 35e0b46..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.mp3 deleted file mode 100644 index 00cc360..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.wav deleted file mode 100644 index 5dd2cc8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ß.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.mp3 deleted file mode 100644 index dd388e7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.wav deleted file mode 100644 index eaffe51..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ä.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.mp3 deleted file mode 100644 index 54fd3d0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.wav deleted file mode 100644 index 73bee15..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ö.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.mp3 deleted file mode 100644 index 7cfa479..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.wav deleted file mode 100644 index 393c91d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/de/ü.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.mp3 deleted file mode 100644 index 7cd497e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.wav deleted file mode 100644 index 88330b8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.mp3 deleted file mode 100644 index a2c27ac..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.wav deleted file mode 100644 index c9f9a4e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.mp3 deleted file mode 100644 index 2f2a190..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.wav deleted file mode 100644 index 6991d29..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.mp3 deleted file mode 100644 index 347dd8b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.wav deleted file mode 100644 index 216f3a3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.mp3 deleted file mode 100644 index da43f37..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.wav deleted file mode 100644 index 54a4a6f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.mp3 deleted file mode 100644 index 6038327..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.wav deleted file mode 100644 index 6efe852..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.mp3 deleted file mode 100644 index f74d64f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.wav deleted file mode 100644 index cdf3613..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.mp3 deleted file mode 100644 index ef4679b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.wav deleted file mode 100644 index 068495e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.mp3 deleted file mode 100644 index 43b22b2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.wav deleted file mode 100644 index 863d6f8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.mp3 deleted file mode 100644 index c0f1479..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.wav deleted file mode 100644 index 6b94611..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.mp3 deleted file mode 100644 index 1668cd4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.wav deleted file mode 100644 index 384e884..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.mp3 deleted file mode 100644 index a0a3f91..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.wav deleted file mode 100644 index 5c0e3ac..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.mp3 deleted file mode 100644 index 377e7cf..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.wav deleted file mode 100644 index b8d7730..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.mp3 deleted file mode 100644 index fd635bc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.wav deleted file mode 100644 index 4e9c3d6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.mp3 deleted file mode 100644 index a8462fc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.wav deleted file mode 100644 index 5197059..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.mp3 deleted file mode 100644 index c7eebe4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.wav deleted file mode 100644 index c7583a4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.mp3 deleted file mode 100644 index 9313389..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.wav deleted file mode 100644 index 414caa7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.mp3 deleted file mode 100644 index 4025974..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.wav deleted file mode 100644 index 01982be..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.mp3 deleted file mode 100644 index ae59dfe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.wav deleted file mode 100644 index a5c4e20..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.mp3 deleted file mode 100644 index a4a85c3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.wav deleted file mode 100644 index 6d7edb3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.mp3 deleted file mode 100644 index d93014e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.wav deleted file mode 100644 index 17e9554..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.mp3 deleted file mode 100644 index 249c637..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.wav deleted file mode 100644 index c88e94c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.mp3 deleted file mode 100644 index 5458032..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.wav deleted file mode 100644 index e2b9a87..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.mp3 deleted file mode 100644 index 0d528c4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.wav deleted file mode 100644 index b4778ad..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.mp3 deleted file mode 100644 index 726f19c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.wav deleted file mode 100644 index be2e34a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.mp3 deleted file mode 100644 index b7c9444..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.wav deleted file mode 100644 index 5158e81..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.mp3 deleted file mode 100644 index 98a7dca..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.wav deleted file mode 100644 index 34e843a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.mp3 deleted file mode 100644 index 16bda45..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.wav deleted file mode 100644 index 16d72c7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.mp3 deleted file mode 100644 index f20bc39..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.wav deleted file mode 100644 index 318c318..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.mp3 deleted file mode 100644 index 443d388..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.wav deleted file mode 100644 index 044f387..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.mp3 deleted file mode 100644 index abbbec6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.wav deleted file mode 100644 index f00bbab..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.mp3 deleted file mode 100644 index 3a3e93b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.wav deleted file mode 100644 index 0fa2259..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.mp3 deleted file mode 100644 index eb06c69..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.wav deleted file mode 100644 index a8d8fd0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.mp3 deleted file mode 100644 index 2ffa53a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.wav deleted file mode 100644 index b225423..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.mp3 deleted file mode 100644 index a88857b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.wav deleted file mode 100644 index 1492112..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.mp3 deleted file mode 100644 index c880909..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.wav deleted file mode 100644 index ad0c73b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/default/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.mp3 deleted file mode 100644 index 21ba5bd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.wav deleted file mode 100644 index fbcbbf7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.mp3 deleted file mode 100644 index 99a0ea0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.wav deleted file mode 100644 index f050426..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.mp3 deleted file mode 100644 index 85796cf..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.wav deleted file mode 100644 index 22463d8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.mp3 deleted file mode 100644 index f95b7ae..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.wav deleted file mode 100644 index d2f5c3b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.mp3 deleted file mode 100644 index 24ef311..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.wav deleted file mode 100644 index 1238363..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.mp3 deleted file mode 100644 index 24c2e21..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.wav deleted file mode 100644 index 1def929..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.mp3 deleted file mode 100644 index 375da7b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.wav deleted file mode 100644 index 10a2cd9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.mp3 deleted file mode 100644 index 96dc208..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.wav deleted file mode 100644 index 4fcd934..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.mp3 deleted file mode 100644 index de523b2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.wav deleted file mode 100644 index 5e8a55a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.mp3 deleted file mode 100644 index d43fa00..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.wav deleted file mode 100644 index 0f5b8cc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.mp3 deleted file mode 100644 index 5dfe67d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.wav deleted file mode 100644 index 4096198..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.mp3 deleted file mode 100644 index d28de8f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.wav deleted file mode 100644 index 6462e9c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.mp3 deleted file mode 100644 index 1eaba5d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.wav deleted file mode 100644 index c141b5d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.mp3 deleted file mode 100644 index 1884575..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.wav deleted file mode 100644 index d665729..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.mp3 deleted file mode 100644 index 3ff8e8e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.wav deleted file mode 100644 index 4cfe624..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.mp3 deleted file mode 100644 index 391bcb1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.wav deleted file mode 100644 index 2365003..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.mp3 deleted file mode 100644 index be96737..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.wav deleted file mode 100644 index d12fcc6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.mp3 deleted file mode 100644 index ddd9c6f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.wav deleted file mode 100644 index 9f39319..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.mp3 deleted file mode 100644 index 1132ea5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.wav deleted file mode 100644 index a336324..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.mp3 deleted file mode 100644 index 7e38ba0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.wav deleted file mode 100644 index 73fb37c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.mp3 deleted file mode 100644 index a6ba5de..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.wav deleted file mode 100644 index 49bd54c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.mp3 deleted file mode 100644 index bfa3189..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.wav deleted file mode 100644 index ac5da9e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.mp3 deleted file mode 100644 index d089e5c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.wav deleted file mode 100644 index 4feb583..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.mp3 deleted file mode 100644 index 4b0a5ac..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.wav deleted file mode 100644 index a2e9098..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.mp3 deleted file mode 100644 index 1d37ca6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.wav deleted file mode 100644 index 903f15e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.mp3 deleted file mode 100644 index 0b92ded..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.wav deleted file mode 100644 index 1df8e1e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.mp3 deleted file mode 100644 index 118ce63..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.wav deleted file mode 100644 index 9306a31..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.mp3 deleted file mode 100644 index 8b86f03..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.wav deleted file mode 100644 index 11c21b1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.mp3 deleted file mode 100644 index 3c18603..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.wav deleted file mode 100644 index c306db5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.mp3 deleted file mode 100644 index 23a07ea..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.wav deleted file mode 100644 index f5e3cd3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.mp3 deleted file mode 100644 index f2bc71a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.wav deleted file mode 100644 index 8aa9375..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.mp3 deleted file mode 100644 index 1b56cc9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.wav deleted file mode 100644 index dccc409..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.mp3 deleted file mode 100644 index 73cef3a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.wav deleted file mode 100644 index 3b3bfd2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.mp3 deleted file mode 100644 index 64fc97d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.wav deleted file mode 100644 index 9f9f35a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.mp3 deleted file mode 100644 index 1132ea5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.wav deleted file mode 100644 index a336324..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.mp3 deleted file mode 100644 index 0a5d705..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.wav deleted file mode 100644 index cadef37..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.mp3 deleted file mode 100644 index 3f18c0a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.wav deleted file mode 100644 index 224b73a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/á.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.mp3 deleted file mode 100644 index 128d4d4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.wav deleted file mode 100644 index 0b7298b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/é.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.mp3 deleted file mode 100644 index 46bdc8b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.wav deleted file mode 100644 index 7367488..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/í.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.mp3 deleted file mode 100644 index 0efc904..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.wav deleted file mode 100644 index 5f349f7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ñ.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.mp3 deleted file mode 100644 index 793f43b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.wav deleted file mode 100644 index 680b696..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ó.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.mp3 deleted file mode 100644 index 03fd0e6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.wav deleted file mode 100644 index 68d37d4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ú.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.mp3 deleted file mode 100644 index 3896adf..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.wav deleted file mode 100644 index d052a6c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/es/ü.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.mp3 deleted file mode 100644 index 8bb6799..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.wav deleted file mode 100644 index 0ae88b6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.mp3 deleted file mode 100644 index 6427018..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.wav deleted file mode 100644 index e412dee..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.mp3 deleted file mode 100644 index 9d1d813..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.wav deleted file mode 100644 index 10f2e50..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.mp3 deleted file mode 100644 index 4bd1ce6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.wav deleted file mode 100644 index 79e6752..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.mp3 deleted file mode 100644 index dd645e9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.wav deleted file mode 100644 index 4976ad1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.mp3 deleted file mode 100644 index 8e9f2dc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.wav deleted file mode 100644 index db6afb4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.mp3 deleted file mode 100644 index 66f17d7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.wav deleted file mode 100644 index 11a4d3f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.mp3 deleted file mode 100644 index 35efa7a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.wav deleted file mode 100644 index aa6a2b8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.mp3 deleted file mode 100644 index 94dd163..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.wav deleted file mode 100644 index 3b91b3d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.mp3 deleted file mode 100644 index d98432d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.wav deleted file mode 100644 index 3864ab1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.mp3 deleted file mode 100644 index db64310..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.wav deleted file mode 100644 index d111713..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.mp3 deleted file mode 100644 index 1d7192b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.wav deleted file mode 100644 index bfeb902..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.mp3 deleted file mode 100644 index de62a15..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.wav deleted file mode 100644 index 3eff464..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.mp3 deleted file mode 100644 index 9675731..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.wav deleted file mode 100644 index 90bd923..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.mp3 deleted file mode 100644 index ae8b549..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.wav deleted file mode 100644 index afe1d8a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.mp3 deleted file mode 100644 index c5f2883..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.wav deleted file mode 100644 index 5307e19..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.mp3 deleted file mode 100644 index 656eae0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.wav deleted file mode 100644 index 9e3caa6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.mp3 deleted file mode 100644 index ed17838..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.wav deleted file mode 100644 index 2188190..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.mp3 deleted file mode 100644 index f9023fd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.wav deleted file mode 100644 index c8d09b2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.mp3 deleted file mode 100644 index 7e40d3a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.wav deleted file mode 100644 index 78e8e4d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.mp3 deleted file mode 100644 index 26eae85..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.wav deleted file mode 100644 index 673b722..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.mp3 deleted file mode 100644 index bedfddd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.wav deleted file mode 100644 index 477eb54..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.mp3 deleted file mode 100644 index e403a8e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.wav deleted file mode 100644 index 9d64060..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.mp3 deleted file mode 100644 index 97907b6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.wav deleted file mode 100644 index a934d83..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.mp3 deleted file mode 100644 index 1b13f07..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.wav deleted file mode 100644 index bd6dfd1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.mp3 deleted file mode 100644 index f25c750..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.wav deleted file mode 100644 index 88f72ff..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.mp3 deleted file mode 100644 index 7d2454e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.wav deleted file mode 100644 index e9225e7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.mp3 deleted file mode 100644 index 830feb3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.wav deleted file mode 100644 index 487a655..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.mp3 deleted file mode 100644 index 39570f3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.wav deleted file mode 100644 index 0e5fdf5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.mp3 deleted file mode 100644 index 951ac60..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.wav deleted file mode 100644 index 72ba570..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.mp3 deleted file mode 100644 index 752394a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.wav deleted file mode 100644 index 39c4c2e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.mp3 deleted file mode 100644 index 59391e1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.wav deleted file mode 100644 index cd00d45..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.mp3 deleted file mode 100644 index b171d73..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.wav deleted file mode 100644 index b67fd62..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.mp3 deleted file mode 100644 index 09db981..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.wav deleted file mode 100644 index a285065..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.mp3 deleted file mode 100644 index 37cda98..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.wav deleted file mode 100644 index 9b35484..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.mp3 deleted file mode 100644 index ea5a5c6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.wav deleted file mode 100644 index 740c37d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.mp3 deleted file mode 100644 index 0a588a7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.wav deleted file mode 100644 index b34b0fe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/à.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.mp3 deleted file mode 100644 index 6f81bd8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.wav deleted file mode 100644 index 8025f0e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/â.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.mp3 deleted file mode 100644 index db64310..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.wav deleted file mode 100644 index d111713..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ä.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.mp3 deleted file mode 100644 index 0ef84eb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.wav deleted file mode 100644 index 214e9ea..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ç.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.mp3 deleted file mode 100644 index 3ed82ea..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.wav deleted file mode 100644 index 27d66ad..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/è.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.mp3 deleted file mode 100644 index 8784185..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.wav deleted file mode 100644 index 3a339b0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/é.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.mp3 deleted file mode 100644 index f2c6e7a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.wav deleted file mode 100644 index d520e9e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ê.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.mp3 deleted file mode 100644 index 39b44c0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.wav deleted file mode 100644 index fdd2ddc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ë.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.mp3 deleted file mode 100644 index edcb72c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.wav deleted file mode 100644 index f5fc61f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/î.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.mp3 deleted file mode 100644 index 3fc6136..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.wav deleted file mode 100644 index ed2dae0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ï.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.mp3 deleted file mode 100644 index c999000..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.wav deleted file mode 100644 index 23e0e74..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ô.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.mp3 deleted file mode 100644 index 8549c3f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.wav deleted file mode 100644 index 2c45d0b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ö.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.mp3 deleted file mode 100644 index 82c0fdb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.wav deleted file mode 100644 index 8ef72fe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/û.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.mp3 deleted file mode 100644 index 6aa24f0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.wav deleted file mode 100644 index ce6d830..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/fr/ü.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.mp3 deleted file mode 100644 index bae2574..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.wav deleted file mode 100644 index f0121c6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.mp3 deleted file mode 100644 index 58d5b9b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.wav deleted file mode 100644 index 77c1271..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.mp3 deleted file mode 100644 index 0f23ab3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.wav deleted file mode 100644 index 44adadf..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.mp3 deleted file mode 100644 index 578ec5d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.wav deleted file mode 100644 index f19b658..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.mp3 deleted file mode 100644 index 2cb6e22..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.wav deleted file mode 100644 index 772e7b4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.mp3 deleted file mode 100644 index 8c155de..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.wav deleted file mode 100644 index 294549b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.mp3 deleted file mode 100644 index f515e1c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.wav deleted file mode 100644 index 3f7d48c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.mp3 deleted file mode 100644 index 1032427..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.wav deleted file mode 100644 index 3ec4618..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.mp3 deleted file mode 100644 index 623e9ff..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.wav deleted file mode 100644 index d9ef5d1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.mp3 deleted file mode 100644 index b24a0c6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.wav deleted file mode 100644 index a2d9ef6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.mp3 deleted file mode 100644 index bc85057..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.wav deleted file mode 100644 index 89bce5e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.mp3 deleted file mode 100644 index aaf3d35..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.wav deleted file mode 100644 index 568919f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.mp3 deleted file mode 100644 index 87933b5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.wav deleted file mode 100644 index 74857ec..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.mp3 deleted file mode 100644 index 390a0ff..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.wav deleted file mode 100644 index 4cd9466..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.mp3 deleted file mode 100644 index 873e847..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.wav deleted file mode 100644 index f8985be..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.mp3 deleted file mode 100644 index e3c58ef..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.wav deleted file mode 100644 index 5a73359..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.mp3 deleted file mode 100644 index ad15542..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.wav deleted file mode 100644 index 88d121e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.mp3 deleted file mode 100644 index 905c110..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.wav deleted file mode 100644 index 34b5604..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.mp3 deleted file mode 100644 index fcdb965..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.wav deleted file mode 100644 index a6ccafc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.mp3 deleted file mode 100644 index 9ed7866..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.wav deleted file mode 100644 index 6fb0186..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.mp3 deleted file mode 100644 index 3f19c3f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.wav deleted file mode 100644 index a8f7499..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.mp3 deleted file mode 100644 index 029ad60..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.wav deleted file mode 100644 index b75a57b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.mp3 deleted file mode 100644 index 9e3f986..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.wav deleted file mode 100644 index d3a8e74..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.mp3 deleted file mode 100644 index 5d448fb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.wav deleted file mode 100644 index 169890f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.mp3 deleted file mode 100644 index e6276c7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.wav deleted file mode 100644 index c862461..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.mp3 deleted file mode 100644 index 740c463..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.wav deleted file mode 100644 index fbba783..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.mp3 deleted file mode 100644 index b44b47f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.wav deleted file mode 100644 index 671d938..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.mp3 deleted file mode 100644 index 1e043f2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.wav deleted file mode 100644 index 2d82538..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.mp3 deleted file mode 100644 index f0fdcf1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.wav deleted file mode 100644 index 99000b0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.mp3 deleted file mode 100644 index 53e649b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.wav deleted file mode 100644 index a682ca5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.mp3 deleted file mode 100644 index 5bdbb95..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.wav deleted file mode 100644 index b7ef181..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.mp3 deleted file mode 100644 index 19af2d0..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.wav deleted file mode 100644 index 1b67941..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.mp3 deleted file mode 100644 index b2fbafc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.wav deleted file mode 100644 index 3b6a78a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.mp3 deleted file mode 100644 index 932cf45..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.wav deleted file mode 100644 index 177d9e1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.mp3 deleted file mode 100644 index d3ab579..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.wav deleted file mode 100644 index 33572fb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.mp3 deleted file mode 100644 index 1727a86..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.wav deleted file mode 100644 index 81be24a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.mp3 deleted file mode 100644 index 6218a1c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.wav deleted file mode 100644 index 0711589..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/à.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.mp3 deleted file mode 100644 index b706a95..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.wav deleted file mode 100644 index d1f3837..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/è.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.mp3 deleted file mode 100644 index 34de317..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.wav deleted file mode 100644 index 075a4a6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/é.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.mp3 deleted file mode 100644 index 176c2da..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.wav deleted file mode 100644 index abf32fe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/it/ò.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.mp3 deleted file mode 100644 index 2e622c3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.wav deleted file mode 100644 index cd08c76..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/0.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.mp3 deleted file mode 100644 index 6cc3d16..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.wav deleted file mode 100644 index da44fcb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/1.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.mp3 deleted file mode 100644 index 88a147e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.wav deleted file mode 100644 index a660c69..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/2.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.mp3 deleted file mode 100644 index d412d36..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.wav deleted file mode 100644 index 1136c9e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/3.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.mp3 deleted file mode 100644 index 411c28d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.wav deleted file mode 100644 index e92305f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/4.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.mp3 deleted file mode 100644 index aaa9fb3..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.wav deleted file mode 100644 index e144c0b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/5.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.mp3 deleted file mode 100644 index dcba155..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.wav deleted file mode 100644 index f43e2fd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/6.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.mp3 deleted file mode 100644 index ae89cfc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.wav deleted file mode 100644 index 49983eb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/7.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.mp3 deleted file mode 100644 index 20eb7db..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.wav deleted file mode 100644 index f254c3d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/8.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.mp3 deleted file mode 100644 index d073f88..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.wav deleted file mode 100644 index 3080413..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/9.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.mp3 deleted file mode 100644 index 972eb9d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.wav deleted file mode 100644 index 307abbe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/a.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.mp3 deleted file mode 100644 index 8e5bd6e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.wav deleted file mode 100644 index b90e7c2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/b.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.mp3 deleted file mode 100644 index a15f711..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.wav deleted file mode 100644 index 27aa163..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/c.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.mp3 deleted file mode 100644 index 3502abd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.wav deleted file mode 100644 index ce06fd4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/d.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.mp3 deleted file mode 100644 index 937d76a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.wav deleted file mode 100644 index 7dfedb4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/e.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.mp3 deleted file mode 100644 index 43a8b8b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.wav deleted file mode 100644 index 77bb093..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/f.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.mp3 deleted file mode 100644 index e7103dd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.wav deleted file mode 100644 index b8e8b39..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/g.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.mp3 deleted file mode 100644 index 0e36cd6..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.wav deleted file mode 100644 index 6e13d03..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/h.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.mp3 deleted file mode 100644 index 266294b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.wav deleted file mode 100644 index cbeaab5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/i.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.mp3 deleted file mode 100644 index bab3bff..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.wav deleted file mode 100644 index 711bcd4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/j.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.mp3 deleted file mode 100644 index d8efa46..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.wav deleted file mode 100644 index 9f4f44b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/k.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.mp3 deleted file mode 100644 index 6d4fc5b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.wav deleted file mode 100644 index 4d7276c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/l.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.mp3 deleted file mode 100644 index c8e9abc..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.wav deleted file mode 100644 index f16a4e5..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/m.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.mp3 deleted file mode 100644 index 5314bbf..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.wav deleted file mode 100644 index a02c3bd..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/n.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.mp3 deleted file mode 100644 index a5d8bac..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.wav deleted file mode 100644 index 4cf1ca7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/o.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.mp3 deleted file mode 100644 index b448cd7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.wav deleted file mode 100644 index 55f44a2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/p.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.mp3 deleted file mode 100644 index 908b297..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.wav deleted file mode 100644 index 1236dae..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/q.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.mp3 deleted file mode 100644 index 35ff5ea..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.wav deleted file mode 100644 index 0958833..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/r.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.mp3 deleted file mode 100644 index 6d1b7e4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.wav deleted file mode 100644 index ff98d55..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/s.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.mp3 deleted file mode 100644 index a88bc5a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.wav deleted file mode 100644 index 8a45386..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/t.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.mp3 deleted file mode 100644 index cd44000..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.wav deleted file mode 100644 index 0c5cdcb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/u.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.mp3 deleted file mode 100644 index c278df9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.wav deleted file mode 100644 index 6885383..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/v.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.mp3 deleted file mode 100644 index f4573b1..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.wav deleted file mode 100644 index 16991d2..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/w.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.mp3 deleted file mode 100644 index 0b64e59..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.wav deleted file mode 100644 index 72465ce..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/x.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.mp3 deleted file mode 100644 index 7a52724..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.wav deleted file mode 100644 index 4cdc48c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/y.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.mp3 deleted file mode 100644 index 483f7a4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.wav deleted file mode 100644 index 78c0e02..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/z.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.mp3 deleted file mode 100644 index 972eb9d..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.wav deleted file mode 100644 index 307abbe..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/à.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.mp3 deleted file mode 100644 index ebce7e9..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.wav deleted file mode 100644 index 4f6f94c..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/á.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.mp3 deleted file mode 100644 index 852521b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.wav deleted file mode 100644 index 862662e..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ã.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.mp3 deleted file mode 100644 index 49b7d4b..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.wav deleted file mode 100644 index 99cb83a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ç.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.mp3 deleted file mode 100644 index 937d76a..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.wav deleted file mode 100644 index 7dfedb4..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/é.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.mp3 deleted file mode 100644 index b0f0b68..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.wav deleted file mode 100644 index a77b742..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ê.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.mp3 deleted file mode 100644 index ca81212..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.wav deleted file mode 100644 index d497dc8..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/í.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.mp3 deleted file mode 100644 index e19dec7..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.wav deleted file mode 100644 index 989b882..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ó.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.mp3 deleted file mode 100644 index 682c8fb..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.wav deleted file mode 100644 index 3237863..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/õ.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.mp3 b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.mp3 deleted file mode 100644 index a69df08..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.mp3 and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.wav b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.wav deleted file mode 100644 index 49e406f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Voices/pt/ú.wav and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/de_freecap_words b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/de_freecap_words deleted file mode 100644 index 8f86a49..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/de_freecap_words +++ /dev/null @@ -1,18552 +0,0 @@ -Aalen -Aases -Abakus -Abart -Abarten -Abbau -Abbaus -Abbitte -Abbruch -Abdrift -Abdruck -Abend -Abende -Abenden -Abeter -Abfahrt -Abfalls -Abflug -Abflugs -Abfolge -Abfuhr -Abgabe -Abgaben -Abgang -Abgangs -Abgas -Abgasen -Abgases -Abglanz -Abgott -Abgotts -Abgrund -Abgu -Abhangs -Abheben -Abhilfe -Abiture -Abkehr -Abkunft -Abladen -Ablagen -Abla -Ablativ -Ablaufs -Ablaute -Ableger -Abnehme -Abort -Aborten -Abortes -Abortus -Abpfiff -Abprall -Abraum -Abrede -Abreden -Abreise -Abri -Abruf -Abrufe -Abrufs -Absatz -Abscheu -Absicht -Abside -Absolut -Abstand -Absucht -Absud -Absuden -Absudes -Abtei -Abteien -Abteil -Abteile -Abtes -Abtrieb -Abweg -Abwege -Abwegs -Abwehr -Abwurf -Abzge -Abzug -Abzugs -Achse -Achsel -Achseln -Achsen -Achteln -Achtels -Achten -Achters -Achtung -Achtzig -Acidum -Acker -Ackers -Action -Addis -Adebar -Adelige -Adels -Adidas -Adieu -Adlern -Adligen -Adonis -Adorno -Adria -Advent -Adverb -Advokat -Aebte -Aebten -Aecker -Aeffin -Aegina -Aehren -Aeltere -Aemter -Aemtern -Aendern -Aengste -Aepfel -Aepfeln -Aerger -Aergers -Aermeln -Aerzte -Aerzten -Aerztin -Aeste -Aesthet -Aethers -Aethyl -Aetna -Aetsch -Aetzung -Aexte -Aexten -Affekt -Affes -Affront -Afghan -Afrika -Agadir -Agave -Agency -Agent -Agenten -Agentin -Agentur -Agonie -Ahlen -Ahndung -Ahnfrau -Ahnung -Ahorn -Ahorns -Airbus -Airline -Airways -Akaba -Akkord -Akkorde -Akribie -Akrobat -Akten -Akteur -Akteure -Aktie -Aktion -Aktions -Aktiva -Akustik -Akzent -Akzept -Aladin -Alarm -Alarme -Alarmen -Alaska -Albert -Albion -Album -Alfred -Algen -Alibis -Alkohol -Alkor -Alkoven -Allah -Allahs -Allee -Allein -Allen -Allianz -Alltag -Almwirt -Alpen -Altare -Altaren -Altars -Alten -Alter -Alters -Altes -Altgold -Amadeus -Amateur -Ameise -Ammen -Ammonit -Amnesie -Amnesty -Amors -Ampel -Ampeln -Ampere -Amseln -Amtes -Amtmann -Analog -Anatol -Anbau -Anbar -Anbaus -Anbeter -Anbruch -Anderen -Anders -Andrang -Andre -Andrea -Andreas -Anfall -Anfalls -Anfang -Anfangs -Anflug -Anflugs -Anfrage -Angabe -Angaben -Angeber -Angebot -Angel -Angelei -Angeln -Angina -Angler -Anglern -Anglers -Angriff -Angst -Anhang -Anhangs -Anhieb -Anhhe -Anilin -Animal -Anker -Ankers -Ankick -Anklage -Anklang -Anlage -Anlagen -Anla -Anlaufs -Anlaut -Anleger -Anleihe -Anmut -Anmuts -Annexe -Annexen -Annexes -Anorak -Anorake -Anrecht -Anreise -Anreiz -Anreize -Anruf -Anrufe -Ansage -Ansager -Ansatz -Ansicht -Ansporn -Anstand -Ansto -Ansturm -Anteil -Anteils -Antlitz -Antrag -Antritt -Antwort -Anwalts -Anwar -Anwuchs -Anzahl -Anzuge -Anzuges -Anzugs -Apache -Apachen -Apellen -Apfels -Appel -Appell -Appelle -Appetit -Applaus -Apple -April -Aprils -Apsis -Apulien -Ararat -Arbeit -Archiv -Archivs -Arden -Areal -Arena -Arenen -Argau -Arglist -Arien -Arier -Arkade -Armada -Armband -Armee -Armen -Armreif -Armut -Arnica -Aromas -Aromen -Arosa -Arrest -Arreste -Arsen -Arsenal -Artemis -Arterie -Arthur -Artikel -Artist -Artus -Arznei -Arztes -Asbest -Asche -Asind -Asket -Asketen -Aspekt -Aspekte -Asphalt -Aspik -Astern -Astes -Asthma -Asyls -Atemzug -Atheist -Athen -Athene -Athlet -Athlets -Atlant -Atmung -Atolle -Atome -Atomen -Atomium -Attache -Attacke -Attest -Attika -Attrape -Audienz -Aufbau -Aufbaus -Aufgabe -Aufgang -Aufgeld -Aufgu -Aufkauf -Auflage -Auflauf -Aufputz -Aufrufe -Aufrufs -Aufruhr -Aufsatz -Auftrag -Aufwand -Aufwind -Aufwurf -Aufzug -Aufzugs -Auges -Augusts -Auktion -Aurel -Ausbau -Ausbaus -Ausflug -Ausfuhr -Ausgabe -Ausgang -Ausguck -Ausgu -Auslage -Ausland -Auslauf -Auslaut -Auslese -Auspuff -Ausritt -Ausruf -Ausrufe -Aussen -Ausser -Auster -Austern -Ausweg -Auswege -Auswegs -Auszug -Autobox -Autobus -Automat -Autor -Autoren -Autorin -Autos -Axiom -Axiome -Azalee -Azetat -Azteken -Babel -Babylon -Babys -Baches -Backup -Badekur -Badeort -Bades -Bche -Bchen -Bdern -Blle -Bllen -Bnde -Bnden -Bnder -Bnke -Bnker -Bren -Brin -Brten -Bsse -Buche -Bume -Bagdad -Baggers -Bahamas -Bahnen -Bahnhof -Bahnweg -Bahrein -Baien -Baissen -Balken -Balkens -Balkon -Balkons -Ballens -Ballett -Ballon -Balls -Ballung -Balsams -Balten -Bamberg -Bambi -Banane -Bande -Bandes -Bandit -Bandits -Bange -Bangkok -Banjo -Banken -Bankers -Bankett -Bankier -Banner -Bannern -Banners -Bannung -Bantu -Baptist -Baracke -Barbar -Barbara -Barbare -Barden -Baren -Bares -Bargeld -Bariton -Barium -Barkauf -Barke -Barock -Baron -Baronen -Baronin -Barons -Barrel -Barrens -Barter -Bartes -Basalt -Basar -Basaren -Basars -Basel -Basen -Basic -Basken -Basler -Baslern -Bastes -Bastion -Batik -Batiken -Batzen -Bauamt -Bauch -Bauches -Bar -Bars -Bauherr -Bauholz -Baujahr -Bauland -Baulast -Baume -Baumes -Bauplan -Baustil -Bauwelt -Bauwerk -Bauxit -Bauzeit -Bazar -Beamte -Beamten -Beamter -Beamtin -Beatfan -Beatrix -Beben -Bebop -Bechers -Becken -Beckens -Bedarf -Bedarfs -Beere -Beeren -Beeten -Beetes -Befehle -Befunde -Beginn -Begonie -Behang -Behelf -Behelfs -Beides -Beifall -Beilage -Beile -Beileid -Beiles -Beine -Beinen -Beines -Beirat -Beisein -Beitrag -Beiwort -Belge -Belage -Belang -Belangs -Beleg -Belege -Beleges -Bengel -Bengeln -Bengels -Benzin -Benzins -Benzol -Bereich -Bereit -Bereits -Bergamt -Bergbad -Bergbau -Berge -Bergen -Bergnot -Bergson -Bericht -Berner -Beruf -Berufes -Beryll -Besen -Besens -Besser -Bestand -Besteck -Bestes -Bestie -Besuch -Besuche -Betel -Beton -Betons -Betraum -Betrieb -Betrugs -Betten -Bettes -Bettler -Bettuch -Beugung -Beule -Beulen -Beute -Beuten -Bevor -Bewegen -Beweis -Bezirk -Bezirke -Bezirks -Bezogen -Bezge -Bezug -Bezuges -Bibeln -Biber -Bibern -Biegen -Biegung -Biene -Bienen -Bierbar -Biere -Bieres -Biester -Biestes -Bieter -Bilder -Bildern -Bildes -Bildung -Bindung -Bingen -Binsen -Biologe -Biotope -Birken -Birne -Birnen -Bischof -Bisher -Bisse -Bisses -Bistums -Bitte -Bitumen -Biwak -Biwaks -Blser -Blsse -Blamage -Blanko -Blase -Blasius -Blatt -Blattes -Blan -Blech -Bleche -Bleches -Bleibe -Bleiben -Bleibt -Blick -Blickes -Blicks -Bliebe -Blinde -Blinker -Blitz -Blochs -Block -Blocks -Blcke -Blsse -Blouson -Blte -Bluff -Blume -Blumen -Blusen -Blutes -Blutige -Bluts -Bluttat -Bockes -Bocuse -Bcke -Bcken -Bgen -Bhmen -Brsen -Bses -Bogen -Bohle -Bohlen -Bohnen -Bohren -Bohrer -Bohrern -Bohrung -Bolzen -Bonbon -Bonbons -Bongo -Bonifaz -Bonns -Bonus -Bonze -Bonzen -Borke -Borken -Borste -Borsten -Borte -Bosheit -Botanik -Botank -Boten -Botin -Bottich -Bowle -Boyen -Brnde -Brute -Brands -Braten -Braucht -Bra -Bran -Braus -Braut -Brecher -Breie -Breis -Breite -Bremse -Bresche -Brett -Bretter -Brettes -Bretton -Brevier -Brezel -Bridge -Brief -Briefen -Briefes -Brigade -Brillen -Brisanz -Brise -Brisen -Brite -Briten -Brixen -Brocken -Brokat -Bronze -Brosame -Brosche -Broten -Brotes -Bruch -Bruchs -Bruder -Bruders -Brche -Brcke -Brder -Brgge -Brhen -Brter -Brummer -Brunst -Brust -Brutal -Brutei -Brutto -Buben -Buche -Buches -Buchs -Buckel -Buckeln -Buden -Bcher -Bchse -Bffel -Bffet -Bgels -Bhler -Bhne -Bhnen -Bnos -Bnzli -Brde -Brgen -Brger -Bros -Bsche -Bsser -Bste -Bsten -Btt -Buffet -Buges -Bukett -Bulle -Bummler -Bunde -Bunkern -Bunkers -Bunsen -Burda -Bureau -Burger -Burghof -Burgtor -Burgund -Bursche -Busch -Busches -Bussard -Busse -Busse -Bussen -Busses -Busstag -Buster -Camion -Camping -Camus -Candela -Carton -Celle -Cellist -Celsius -Cembalo -Center -Centrum -Champus -Chancen -Chandon -Chanel -Chaos -Chaoten -Charge -Charme -Charta -Charter -Charts -Chase -Chefs -Chemie -Chintz -Chirurg -Chlorid -Chlors -Choco -Cholera -Choral -Chors -Chroms -Chronik -Circus -Civil -Clone -Clowns -Clubs -Coaches -Coats -Daches -Dachs -Dachses -Dachten -Dackel -Dackeln -Dadurch -Dcher -Dmme -Dmon -Dmone -Dne -Dnen -Dnin -Drme -Drmen -Dafr -Dagegen -Damen -Damit -Dammtor -Dampfer -Dampfes -Danach -Dandy -Daneben -Dankes -Daraus -Darin -Darmes -Daseins -Datei -Dateien -Daten -Datex -Dativs -Dattel -Datteln -Datum -Datums -Dar -Darnd -Daumen -Daumens -Daune -Daunen -Davon -Davor -Debatte -Debt -Debts -Deckel -Deckels -Decoder -Defekte -Defizit -Defizt -Degens -Deich -Deichen -Deiches -Dekade -Dekalog -Dekan -Dekanen -Dekans -Dekor -Dekret -Dekrete -Delikt -Delikte -Delle -Delors -Delphi -Delphin -Deltas -Dementi -Demut -Denkbar -Denken -Denker -Denkern -Denkers -Denkmal -Dennoch -Dentist -Depot -Depots -Deren -Derzeit -Deshalb -Design -Deuten -Devise -Devon -Diadem -Dit -Diten -Diakone -Dialekt -Dialog -Dialoge -Diamant -Diebe -Dieben -Diebes -Diebin -Diebs -Diele -Dielen -Diener -Dienern -Dieners -Dienst -Dienste -Diese -Diesel -Diesen -Dieser -Dieses -Dieter -Diether -Digest -Diktat -Diktion -Dilemma -Dills -Diners -Dingen -Dinger -Dinner -Dinners -Diplome -Diploms -Direkt -Dirndl -Disco -Discs -Diskont -Diskus -Disney -Dispens -Dispute -Distel -Disteln -Diverse -Divisor -Diwan -Dnjepr -Dochte -Dochten -Dochtes -Docks -Drfer -Doggen -Dogma -Dogmas -Dogmen -Dohle -Doktor -Doktors -Doktrin -Dolche -Dolchen -Dolchs -Dollars -Dolly -Domne -Domchor -Domes -Domino -Dominos -Donald -Donner -Donners -Dopings -Doppels -Dorfes -Doris -Dorne -Dornier -Dorns -Dorsch -Dosen -Dosis -Dottern -Dozent -Drache -Drhte -Dragee -Draht -Drahtes -Drama -Dramas -Dramen -Drangs -Dreckes -Dreher -Drehern -Drehers -Drehung -Dreieck -Dreien -Dreirad -Drift -Drink -Drinks -Drittel -Dritter -Drohen -Droht -Drohung -Druck -Druide -Druiden -Drusen -Dubiose -Dne -Drer -Drfte -Dse -Dsen -Dtt -Dukate -Dukaten -Duldung -Dumme -Dummen -Dunkel -Dunkeln -Dunst -Dunstes -Durch -Durften -Durst -Durstes -Duschen -Dusel -Dutzend -Dynamik -Dynamo -Ebben -Ebene -Ebenso -Ebert -Echte -Echtes -Eckball -Ecken -Ecklage -Eckzahn -Edeka -Edelgas -Edelmut -Edens -Edison -Editor -Efeus -Effekt -Egeln -Egels -Ehebett -Ehefrau -Ehejahr -Ehemann -Ehering -Ehren -Ehrgeiz -Eiben -Eiche -Eichel -Eicheln -Eiden -Eides -Eiern -Eieruhr -Eifel -Eifer -Eigen -Eigenen -Eigner -Eignern -Eignung -Eilbote -Eilgut -Eimer -Eimern -Eimers -Einband -Einbau -Einehe -Einen -Einer -Eines -Einfach -Einfall -Eingabe -Eingang -Einheit -Einher -Einhorn -Einige -Einkauf -Einkehr -Einla -Einlauf -Einmal -Einde -Einrad -Einrede -Einsatz -Einsen -Eintopf -Eintrag -Einwurf -Einzahl -Einzel -Einzige -Einzug -Eisbr -Eisberg -Eisen -Eisens -Eiserne -Eises -Eisgang -Eiskrem -Eismeer -Eistanz -Eiszeit -Eiter -Eiwei -Eizelle -Ekels -Eklat -Eklipse -Ekofisk -Ekstase -Ekzem -Ekzeme -Ekzemen -Elans -Elefant -Elegie -Elegien -Element -Elend -Elends -Elias -Elite -Elixier -Ellipse -Elsa -Eltern -Emblem -Embolie -Embryen -Eminenz -Emirate -Emotion -Empfang -Empire -Emporen -Endes -Endet -Endlauf -Endlich -Endlos -Endung -Endzahl -Endziel -Energie -Engel -Engeln -Engpa -Enkel -Enkelin -Enkels -Enklave -Entebbe -Entgelt -Entzug -Enzian -Enzians -Enzym -Enzyme -Enzyms -Epikur -Epilog -Epilogs -Episode -Erbar -Erbens -Erbgut -Erbguts -Erbin -Erbse -Erbteil -Erdball -Erdnu -Erdl -Erdteil -Erdwall -Erfolg -Erfolge -Erfolgs -Erfurt -Erhalt -Erhardt -Erich -Erkannt -Erkers -Erla -Erleben -Erlen -Erls -Ernstes -Ernte -Erosion -Ersatz -Ersten -Erster -Ertrag -Ertrags -Erwerbs -Erzen -Erzes -Esche -Eschen -Escher -Eselei -Eseln -Essenz -Essgier -Essig -Essigs -Estrade -Etage -Etagen -Etappe -Etappen -Etates -Eternit -Ethik -Ethiker -Ethos -Etikett -Etde -Etden -Etwaige -Etwas -Eulen -Eutern -Euters -Evidenz -Examen -Examens -Examina -Exempel -Exile -Exilen -Exils -Exkurs -Exkurse -Exoten -Exporte -Exports -Extra -Extrakt -Extrem -Extreme -Fabel -Fabeln -Fabrik -Facette -Fackel -Fackeln -Faden -Fcher -Fden -Fhre -Fhren -Fhrte -Flle -Fllen -Fllt -Fnge -Fngen -Frber -Frse -Fahne -Fahrer -Fahrers -Fahrrad -Fakten -Faktors -Faktum -Falange -Falke -Falkens -Falle -Fallen -Fallout -Falten -Falter -Faltern -Familie -Fanfare -Fangs -Faraday -Farbe -Farben -Farbton -Faruk -Fasan -Fasane -Fasans -Faselei -Fasern -Fasolt -Fasses -Fassung -Fatum -Fatums -Fauna -Faxen -Fazit -Fazite -Faziten -Februar -Fechter -Feder -Federal -Federn -Fehde -Fehden -Fehlens -Fehlers -Fehlt -Fehlweg -Feier -Feind -Feinde -Feinden -Feindes -Feindin -Felde -Felder -Feldern -Feldweg -Feldzug -Felge -Fellen -Fells -Felsens -Fenchel -Fenster -Ferien -Ferkels -Ferne -Fernen -Ferngas -Fernost -Fernseh -Fernweh -Ferse -Fersen -Fersens -Festakt -Feste -Festtag -Festung -Festzug -Fetisch -Fette -Fetzens -Fer -Fers -Fiaker -Fiasko -Fiaskos -Fibeln -Fiber -Fichten -Fidibus -Fieber -Fiebers -Fiebig -Figuren -Fiktion -Filet -Filets -Filme -Filmes -Films -Filters -Filzes -Fimmel -Final -Finale -Finalen -Finals -Finanz -Finden -Finders -Finger -Fingers -Finken -Finne -Finnen -Finnin -Finte -Finten -Firma -Firmen -Firmung -First -Fisch -Fisches -Fistel -Fisteln -Fittich -Fjord -Fjorde -Flachs -Fladen -Fladens -Flche -Flden -Flume -Flagge -Flair -Flakon -Flakone -Flamen -Flamme -Flanell -Flanke -Flanken -Flasche -Flash -Flaums -Flausen -Flaute -Fleck -Fleckes -Flegel -Fleisch -Flei -Flexion -Flieder -Fliegen -Fliese -Fliesen -Flimmer -Flinte -Flipper -Flirts -Flitter -Flitzer -Flhen -Flohs -Flora -Florett -Floskel -Flossen -Flosses -Flotte -Flucher -Flucht -Flge -Flgel -Flgen -Fluge -Flugs -Flugtag -Flugweg -Flunder -Fluor -Fluors -Flurs -Flu -Flusses -Fhns -Fhre -Fhren -Fns -Fohlens -Fokker -Folgen -Folgt -Folie -Folter -Forelle -Foren -Formate -Formats -Formel -Formell -Formeln -Formen -Former -Formula -Formung -Forst -Forste -Forstes -Fortune -Forum -Fossil -Fotos -Fouls -Foyer -Fracht -Frack -Fracks -Frcke -Frage -Frager -Fragern -Fragers -Fragt -Franse -Frasses -Fratze -Fratzen -Fran -Freibad -Freien -Freier -Freiern -Freimut -Freitag -Freitod -Freske -Fresken -Fressen -Fresser -Freud -Freuden -Freunde -Frevel -Friede -Frieden -Friesen -Friseur -Frist -Frisur -Frites -Fritten -Frbe -Fronten -Frosch -Frostes -Frucht -Frher -Frust -Fuchses -Fuchtel -Fuder -Fudern -Fchse -Fhler -Fhren -Fllen -Fller -Fnf -Fnfer -Frst -Frze -Frzen -Fsse -Fugen -Fuhre -Fummel -Fummeln -Funde -Fundes -Fundis -Fundort -Fundus -Funken -Funker -Funkern -Funks -Furchen -Furcht -Furie -Furien -Furnier -Furoren -Furten -Furzes -Fusel -Fusion -Fussbad -Fusse -Fusses -Futter -Futters -Gabeln -Gnge -Gnse -Gnsen -Gnze -Grens -Gste -Gsten -Gulen -Gagen -Galas -Galaxie -Galerie -Galgen -Galgens -Galle -Gallien -Gallone -Galopps -Galvani -Gammler -Gangart -Ganges -Gangway -Ganoven -Ganze -Ganzen -Ganzes -Garage -Garagen -Garant -Garbe -Garben -Garden -Garne -Garnes -Garns -Garten -Gartens -Gasen -Gases -Gashahn -Gasherd -Gasl -Gasolin -Gassen -Gastes -Gasthof -Gastod -Gaswerk -Gatte -Gatten -Gattung -Gaukler -Gaumen -Gaumens -Gauner -Gaunern -Gazelle -Gest -Gebck -Geblk -Gebeine -Gebells -Geben -Geber -Gebern -Gebers -Gebet -Gebeten -Gebets -Gebiet -Gebiete -Gebiets -Gebilde -Gebirge -Gebi -Gebisse -Gebote -Geboten -Gebots -Gebhr -Geburt -Gecken -Gedanke -Gedecke -Gedecks -Gedicht -Geduld -Gef -Gefahr -Gefecht -Gefilde -Gefixt -Gefolge -Gefolgt -Gefhl -Gegend -Gegner -Gegners -Gehalt -Gehalts -Gehegen -Geheges -Gehei -Gehen -Geheul -Geheuls -Gehilfe -Gehirn -Gehirns -Gehft -Gehlz -Gehr -Gehrs -Gehweg -Gehwege -Geier -Geiern -Geigen -Geiger -Geigers -Gei -Geissel -Geissen -Geist -Geister -Geistes -Geizes -Gejohle -Gekeife -Gelut -Gelage -Gelagen -Gelages -Gela -Gelaufe -Gelben -Gelde -Geldern -Geldes -Gelees -Geleise -Gelenk -Geltung -Gelumpe -Gemach -Gemachs -Gemahl -Gemahls -Gemenge -Gemsen -Gemt -Gemte -Gemts -Genau -Genar -Genen -Genfer -Genfern -Genick -Genicke -Genicks -Genie -Genitiv -Genosse -Genre -Genres -Gensung -Genuss -Genusse -Gert -Gerts -Gerede -Geredes -Gericht -Gerippe -Germane -Gerste -Gerte -Geruch -Gerst -Ges -Gesagte -Gesamt -Gesang -Geselle -Gesetz -Gesetze -Gesimse -Gesinde -Gesff -Gespann -Gespr -Gestade -Gestalt -Gestank -Geste -Gestein -Gestell -Gesten -Gestern -Gestirn -Gesuche -Gesunde -Getse -Getreu -Gettos -Get -Gets -Gewhr -Gewalt -Gewand -Geweben -Gewebes -Gewehr -Gewehre -Gewehrs -Geweih -Geweihe -Gewerbe -Gewicht -Gewinde -Gewinns -Gewirr -Gewisse -Gewrz -Gezeigt -Gezeter -Giant -Gicht -Giebel -Giebeln -Giebels -Gierde -Giesser -Gifte -Giften -Giftes -Gifttod -Gilde -Gipfel -Gipfeln -Gipfels -Gipser -Giraffe -Gitarre -Gitter -Gittern -Gitters -Gizeh -Glser -Glanz -Glanzes -Glases -Glasur -Glatze -Glauben -Gleis -Gleise -Gleisen -Gleises -Glied -Gliedes -Globus -Glocke -Glosse -Glck -Glcks -Glykol -Gnade -Gnaden -Gnome -Gnosis -Gockel -Gnner -Gttin -Gtze -Gtzen -Golde -Goldes -Golfer -Golfes -Golfs -Gondel -Goslar -Gotts -Grabens -Graden -Grben -Grfin -Grser -Grte -Grafen -Grafik -Gramm -Gramme -Grammes -Grams -Granat -Granate -Granit -Granits -Graphit -Grases -Grate -Gratz -Gra -Graupen -Gravur -Grazie -Greifen -Greis -Greise -Greises -Greisin -Gremium -Grenze -Grenzen -Grenzer -Grenzt -Grete -Grieche -Grie -Griff -Griffe -Griffs -Grips -Grobian -Grsse -Grolls -Grosse -Grossen -Grosser -Grotte -Grotten -Grnde -Grnen -Grsse -Gruft -Grund -Grunde -Grundes -Gruppe -Gruppen -Grusses -Grtel -Gssen -Gte -Gter -Gtern -Gulden -Gummi -Gunst -Gurgel -Gurke -Gurken -Gurten -Guten -Guter -Gutshof -Habakuk -Habgier -Habicht -Habitus -Hacker -Hackern -Hades -Hfen -Hhnen -Hlfte -Hlse -Hlsen -Hlt -Hnden -Hrte -Htten -Huser -Hafen -Hafens -Hafer -Hafers -Hagel -Hagels -Hagen -Hahns -Haien -Haifa -Haken -Hakens -Halfter -Halle -Halley -Hallig -Hallo -Halme -Halmen -Halms -Halogen -Halses -Halsweh -Halten -Haltern -Halters -Haltung -Halunke -Hamburg -Hamlet -Hammel -Hammeln -Hammer -Hammers -Hampton -Handel -Handeln -Handels -Hangar -Hanges -Hanne -Hannes -Hanoi -Hansa -Hanseat -Hansi -Hantel -Hanteln -Happens -Harald -Harfe -Harfen -Harns -Harro -Harte -Harzes -Hasen -Hastig -Haube -Hauben -Hauch -Har -Harn -Haser -Haufen -Hauff -Haupt -Hauptes -Hauruck -Hausbar -Hause -Hauses -Hausrat -Havarie -Hebels -Heber -Hebung -Hechte -Hechts -Hecken -Hedda -Heeren -Heers -Hefts -Hehler -Hehlern -Heidin -Heike -Heilbad -Heilige -Heimat -Heimweg -Heimweh -Heine -Heino -Hei -Heisst -Heizer -Heizern -Heizl -Heizung -Hektars -Hektik -Helden -Heldin -Helds -Helfen -Helfer -Helfern -Helling -Helme -Helmen -Helms -Helote -Hemden -Hemds -Hemmnis -Hemmung -Hengst -Henkel -Henkeln -Henkels -Henker -Henkers -Henne -Henry -Herald -Herbert -Herbst -Herde -Herden -Herdes -Hergang -Hering -Heringe -Herings -Herkles -Herklit -Herold -Heros -Herren -Herrin -Herrs -Herzens -Herzes -Herzig -Herzogs -Herztod -Hesse -Hessen -Heureka -Heu -Heute -Hewlett -Hexen -Hexer -Hexerei -Hieben -Hiebes -Hierbei -Hiermit -Hiervon -Hierzu -Hilde -Hilfe -Hilfen -Hilft -Himmel -Himmeln -Hingabe -Hintern -Hinweis -Hirne -Hirnen -Hirns -Hirsch -Hirse -Hirten -Hitze -Hobbies -Hobel -Hochmut -Hochs -Hochtal -Hocker -Hchst -Hcker -Hfen -Hhe -Hhen -Hhere -Hhlen -Hhrer -Hrern -Hrers -Hofburg -Hofes -Hofhaus -Hofoper -Hofrat -Hoftor -Hofweg -Hoheit -Hoher -Holde -Holzer -Honorar -Horden -Hormone -Hormons -Horns -Horror -Horste -Horstes -Horten -Hortung -Hostie -Hostien -Hotel -Hotels -Hotline -Huber -Hubraum -Hfte -Hften -Hgel -Hgeln -Hgels -Hlle -Hlsen -Hndin -Hne -Hnen -Hrden -Hter -Htte -Htten -Hufen -Huhns -Humbug -Hummer -Hummern -Hummers -Humors -Humus -Hunde -Hunden -Hundert -Hunger -Hungers -Hunnen -Husar -Husaren -Husum -Hutes -Hynen -Hybrid -Hybris -Hydrant -Hygiene -Hymne -Hymnen -Hypnose -Ideals -Ideen -Idiome -Idiomen -Idole -Idolen -Idols -Idyll -Idylle -Igeln -Igels -Igitur -Ihnen -Ihrem -Ihren -Ihrer -Ikarus -Ikone -Ikonen -Image -Imkers -Impfung -Import -Imports -Impuls -Impulse -Indem -Inder -Indern -Index -Indexe -Indexen -Indexes -Indiz -Indizes -Indus -Infarkt -Infekt -Ingwer -Ingwers -Inhalt -Inhalte -Inhalts -Inland -Inneren -Inneres -Innern -Insekt -Insel -Inseln -Insider -Instanz -Interim -Interna -Inzucht -Ionen -Irgend -Ironie -Irrsinn -Irrtum -Irrtums -Italic -Jacht -Jacke -Jackett -Jger -Jgers -Jaguar -Jaguars -Jahre -Jahres -Jahrs -Jahwe -Jammers -Jargon -Jauche -Jauchen -Jause -Javasee -Jawort -Jaworte -Jeddah -Jedem -Jeden -Jeder -Jedes -Jedoch -Jemand -Jetzt -Jochen -Jodkur -Jodlern -Joghurt -Jogis -Jubel -Jubels -Jubilar -Jucken -Judoka -Judos -Jdin -Jrgen -Jugend -Julis -Jumbos -Junge -Jungen -Jungens -Jungfer -Junis -Junker -Junktim -Juroren -Justiz -Juwelen -Juwels -Kabeln -Kabels -Kabine -Kabrio -Kabuki -Kacheln -Kader -Kadern -Kaders -Kadett -Kfer -Kfern -Kfers -Kfig -Kfige -Khne -Khnen -Klte -Kse -Kses -Ksten -Kufe -Kufen -Kufer -Kaffee -Kaffs -Kahns -Kairos -Kaiser -Kaisern -Kaisers -Kajte -Kakadu -Kakao -Kakaos -Kaktee -Kaktus -Kalar -Kalif -Kalium -Kalkar -Kalkes -Kalks -Kalkl -Kalorie -Kalte -Kalzium -Kamele -Kamelen -Kamels -Kamera -Kameras -Kamin -Kaminen -Kamins -Kammer -Kamms -Kanal -Kanals -Kanapee -Kanne -Kannen -Kanon -Kanonen -Kantate -Kante -Kantine -Kanton -Kantons -Kanuten -Kanzeln -Kanzlei -Kanzler -Kaotin -Kapaun -Kapelle -Kappe -Kapsel -Kapseln -Kapuze -Kapuzen -Karaffe -Karat -Karate -Karates -Karees -Karibik -Karies -Karos -Karotte -Karre -Karren -Karte -Kartei -Kartell -Karton -Kartons -Kasinos -Kaskade -Kastell -Kasten -Kastens -Kasus -Katarrh -Kater -Katers -Kathago -Kathode -Kattun -Kattuns -Katzen -Kaufhof -Kaufs -Kaufte -Kaufwut -Kaution -Kaverne -Kaviar -Kaviars -Kegel -Kegels -Kegler -Keglers -Kehle -Kehlen -Kehren -Keile -Keils -Keims -Keine -Keiner -Kekse -Keksen -Kelch -Kelchen -Kelchs -Kelle -Keller -Kellner -Kelten -Kempten -Kenia -Kenner -Kennern -Kennung -Keramik -Kerbe -Kerbel -Kerbels -Kerkern -Kerle -Kerlen -Kerls -Kerne -Kerns -Kerosin -Kerzen -Kette -Ketzer -Ketzern -Keule -Keulen -Kicker -Kiefer -Kiefern -Kiele -Kielen -Kieler -Kiemen -Kiepen -Kiesel -Kiesweg -Killer -Kilos -Kinder -Kindern -Kindes -Kinetik -Kinns -Kinos -Kiosk -Kioske -Kiosken -Kirchen -Kirmes -Kirsche -Kisten -Kitschs -Kitteln -Kittels -Kitts -Kitzel -Klnge -Klage -Klang -Klangs -Klassen -Klassik -Klatsch -Klan -Klausel -Klees -Kleider -Kleie -Kleien -Klein -Kleine -Kleinen -Kleiner -Kleines -Kleinod -Kleist -Klemme -Klepper -Klerus -Klett -Klette -Kleve -Klick -Klient -Klima -Klimas -Klingel -Klinke -Klippen -Klipper -Klsse -Klonen -Klopfen -Kloppe -Klopps -Klosett -Klo -Klosses -Kloster -Klotz -Klubs -Klfte -Klumpen -Knabe -Knaben -Knacker -Knacks -Knlle -Knl -Knall -Knalls -Knappe -Knast -Knastes -Knauf -Knaur -Knaurs -Knauser -Knechte -Knechts -Kneipe -Kneipen -Knete -Knick -Kniee -Knieen -Knien -Knies -Kniff -Kniffe -Kniffen -Knigge -Knilch -Knirps -Knochen -Kndel -Knpfe -Knollen -Knopf -Knorpel -Knospe -Knospen -Knotens -Knlch -Kobalt -Kobold -Kobolde -Kobra -Kochern -Kochers -Kochs -Kche -Kchen -Kcher -Kder -Kders -Kln -Klner -Knig -Knige -Knigs -Knnen -Knner -Knnte -Kpfe -Krbe -Krner -Ktern -Kters -Koffein -Koffer -Koffers -Kognaks -Kohle -Kohlen -Kohls -Kojen -Kokain -Kokerei -Kokon -Kokons -Koksgas -Kolbens -Kolik -Kolleg -Kollege -Kollers -Kollier -Kolmar -Kolonie -Kolorit -Kolping -Kolumne -Kombi -Komeini -Komet -Komik -Komiker -Komitee -Komma -Kommen -Kommerz -Kommis -Kommode -Kommt -Kommune -Komplex -Kompost -Kompott -Konfekt -Kongo -Konkav -Konkret -Konkurs -Konnte -Konsens -Konsul -Konsule -Konsuls -Konsum -Konsums -Kontern -Kontext -Konto -Kontor -Kontors -Kontos -Kontra -Konvent -Konvoi -Konvois -Konzert -Konzil -Konzile -Kopfe -Kopfes -Kopfweh -Kopie -Kopien -Kopilot -Koppel -Koppler -Koralle -Korbes -Kordel -Kordeln -Korinth -Korken -Korkens -Korns -Korona -Korsen -Korso -Kosaken -Kosmos -Krabbe -Krach -Krachen -Krachs -Krfte -Krgen -Krhe -Krhen -Krmer -Kraft -Kragen -Kragens -Krakau -Kralle -Krampf -Kranbau -Kranke -Kranzes -Krater -Kratzer -Krauler -Kraut -Krautes -Krawall -Kreatur -Krebs -Krebse -Krebsen -Krebses -Kredite -Krefeld -Kreide -Kreis -Kreise -Kreisen -Kreises -Kreme -Kremel -Kreml -Krempe -Krempel -Kreole -Kreta -Kreuz -Kricket -Krieg -Kriege -Kriegen -Krieges -Krippe -Krippen -Krise -Krisen -Kritik -Kroaten -Krpke -Krte -Krten -Kronen -Krcke -Krge -Krgen -Kruges -Krume -Kruste -Kuala -Kubaner -Kubas -Kubus -Kuckuck -Kbeln -Kche -Kchen -Khe -Khen -Khle -Knder -Krbis -Krze -Kste -Kster -Kugel -Kultur -Kummers -Kumpans -Kumpels -Kunden -Kundin -Kupee -Kupfers -Kupon -Kupons -Kuppe -Kuppel -Kuramt -Kurbad -Kurbel -Kurde -Kurie -Kurort -Kurorte -Kurse -Kursen -Kursus -Kurven -Kurze -Kurzeit -Kusinen -Kutsche -Kuvert -Kuverts -Label -Labor -Labore -Labors -Labung -Lachens -Lacher -Lachern -Lachers -Lachs -Lachsen -Lacke -Lacken -Lacoste -Laden -Ladens -Ladung -Lden -Lger -Lmmer -Lnder -Lnge -Lnger -Lrm -Lsst -Lufen -Lufer -Luse -Lagen -Lager -Lagers -Lagunen -Laibern -Laibes -Lakaien -Lakens -Lamelle -Lametta -Lammes -Lampe -Lampen -Lande -Landes -Landgut -Landsee -Landung -Lange -Langmut -Langsam -Lanka -Lanzen -Lappen -Lappens -Larve -Larven -Laschen -Lassen -Lasso -Lasten -Laster -Lasters -Latein -Lateins -Lateran -Laterne -Latex -Latinum -Latten -Laubes -Lauch -Lauches -Laufe -Laufs -Lauge -Laune -Launen -Lawinen -Lawson -Layout -Leasing -Leben -Lecks -Leders -Leere -Legaler -Legen -Legion -Leguan -Leguane -Lehmann -Lehramt -Lehre -Lehrer -Lehrern -Leibe -Leibern -Leibes -Leibniz -Leibs -Leica -Leiche -Leichen -Leides -Leier -Leine -Leinen -Leise -Leitern -Leiters -Leitung -Lektion -Lektors -Lenkung -Lenze -Lenzen -Lerche -Lernens -Lesart -Lesen -Lesens -Leser -Lesern -Lesers -Lette -Letzte -Letzten -Letzter -Letztes -Leumund -Leute -Leuten -Lexika -Lexikon -Liaison -Liane -Libelle -Libyen -Libyer -Licht -Lichter -Lichts -Lidern -Lides -Liebe -Lieber -Lieder -Liedern -Liedes -Liegen -Liegt -Liftes -Lifts -Likr -Likre -Limit -Lindau -Linden -Lineale -Lineals -Linie -Linien -Linke -Linken -Links -Linnen -Linse -Linsen -Lippe -Lisbeth -Liste -Listen -Liter -Litern -Liters -Lithium -Lithos -Lizenz -Lobes -Loblied -Loches -Lockung -Lcher -Lffel -Lhne -L -Lsung -Lwe -Lwen -Lwin -Logbuch -Loggias -Logik -Logis -Lohnt -Lokals -Lorbeer -Losung -Lotte -Lotto -Lotus -Luchs -Luchses -Luder -Lcken -Lge -Lgen -Lgner -Lmmel -Lste -Lsten -Luftweg -Luftzug -Lumpen -Lunas -Lunch -Lunge -Lunte -Lyder -Lydien -Lynch -Lyrik -Lyriker -Mache -Macher -Machers -Macke -Macken -Macker -Maden -Maderl -Mchte -Mdel -Mdels -Mni -Mnner -Mrker -Mrz -Muler -Musen -Magazin -Magen -Magens -Magenta -Magie -Magier -Magiker -Magna -Magnet -Magnete -Magnets -Mahner -Maibock -Maitage -Majoran -Majore -Majoren -Majors -Makel -Makels -Makler -Maklern -Maklers -Maler -Malerin -Malern -Malers -Managen -Manche -Mandat -Mandate -Mandats -Mandel -Manegen -Manfred -Mangan -Mangel -Mangels -Manie -Manien -Manier -Mannen -Mantel -Mantels -Mappe -Marder -Marge -Margen -Marken -Markes -Markise -Markt -Marktes -Marsa -Marsch -Masche -Maschen -Masel -Maske -Master -Materie -Matsch -Mar -Maurer -Maurern -Maurers -Mauser -Maxim -Maximal -Mazurka -Medical -Medien -Mediums -Meere -Meeren -Meeres -Meers -Meeting -Megre -Mehls -Mehrere -Mehrung -Meier -Meile -Meilen -Meineid -Meinen -Meinhof -Meint -Meinten -Meinung -Meise -Meissel -Meissen -Meist -Meister -Melden -Melone -Melonen -Memel -Mengen -Mengung -Mensch -Men -Meran -Meriten -Merkmal -Merkur -Messe -Messen -Messene -Messern -Messung -Metalle -Metalls -Meteor -Meteore -Meteors -Meter -Metern -Metier -Metiers -Metzger -Meute -Meuten -Mieder -Mieke -Mienen -Mieten -Mieter -Mieters -Mietze -Mikro -Mikros -Milan -Milben -Milch -Milieu -Milieus -Miliz -Milizen -Miller -Million -Mimen -Mimik -Mimose -Minden -Mindest -Mineral -Minimum -Minis -Minne -Minni -Minus -Minute -Minuten -Miseren -Mister -Mistral -Mitgift -Mithras -Mitlaut -Mitleid -Mittags -Mittel -Mitteln -Mitwelt -Mixer -Mizwah -Modelle -Modem -Modems -Modul -Module -Modulen -Mbel -Mbeln -Mbels -Mge -Mnche -Mpse -Mrtel -Mwe -Mwen -Mohren -Mokka -Molen -Molle -Moments -Monat -Monaten -Monates -Monats -Mondale -Monde -Mondes -Mondtag -Moneten -Monitor -Monolog -Monopol -Monster -Montag -Montags -Monte -Monteur -Mopeds -Moral -Morast -Morchel -Mordes -Morgen -Moron -Morris -Moser -Moses -Moskaus -Motel -Motiv -Motiven -Motor -Motoren -Motors -Motte -Motten -Motus -Mcken -Mhe -Mhle -Mhlen -Mhsal -Mll -Mller -Mndel -Mnder -Mnz -Mnze -Mnzen -Mnzer -Mssen -Mtter -Mtze -Mulatte -Mulde -Multi -Multis -Mumie -Mundart -Mundes -Murks -Murmel -Muschel -Muschi -Muschis -Museum -Museums -Musical -Musik -Musiker -Musikus -Muskel -Muskels -Musse -Mussten -Mustang -Muster -Mustern -Musters -Mutes -Mutige -Mutter -Muttern -Mutters -Mystik -Nabel -Nabeln -Nachdem -Nachhut -Nacht -Nackens -Nadel -Nadeln -Nchte -Ngel -Nhe -Nhere -Nhten -Nsse -Nagel -Nagels -Nahen -Nahrung -Naive -Namens -Nansen -Narben -Nasen -Nation -Natrium -Natron -Nebel -Nebels -Neben -Neckar -Neffe -Negativ -Nehme -Nehmer -Nehru -Neider -Neides -Neisse -Nektar -Nelken -Nenner -Nenners -Neons -Nerze -Nestern -Netze -Netzen -Netzes -Neubau -Nen -Nes -Neugier -Neujahr -Neuling -Neumark -Neumond -Neurose -Neu -Neutron -Neuwerk -Neuzeit -Nevada -Newton -Niagara -Nicht -Nichte -Nichten -Nichts -Nickel -Niele -Nielen -Niere -Nieren -Niete -Nieten -Niger -Nigeria -Nikkeis -Nikki -Nikko -Nikotin -Niltal -Niltals -Nimbus -Ninive -Nische -Nischen -Nochmal -Nte -Nten -Nomade -Nomaden -Nonne -Nonnen -Norden -Nordens -Nordpol -Nordsee -Normal -Notar -Notare -Notaren -Notars -Notbett -Notdach -Noten -Notion -Notiz -Notizen -Notlage -Notre -Notruf -Notrufs -Nougat -Novum -Nuance -Nuancen -Nubier -Nudel -Nsse -Nssen -Nuklear -Nullen -Numerik -Numerus -Nummern -Nutzen -Nylon -Nylons -Oasis -Obdachs -Obelisk -Oberbau -Oberrat -Obers -Oberzug -Objekt -Objekte -Objekts -Oblaten -Obmann -Obstes -Ochse -Odium -Oefen -Oeffne -Oekonom -Oelbild -Oelfeld -Oelfund -Oelhahn -Oelhaus -Oelung -Oelzeug -Oesen -Offene -Offerte -Offset -Offside -Oftmals -Oheim -Oheims -Ohren -Ohres -Ohrring -Oktav -Oktaven -Oktober -Okular -Oliven -Oliver -Omega -Omnibus -Onkeln -Onkels -Online -Opern -Opfer -Opfers -Opium -Optiker -Optimum -Option -Orange -Orangen -Oranien -Orden -Ordens -Order -Ordner -Ordnern -Ordnung -Oregon -Organe -Organen -Organes -Organs -Organum -Orgel -Orient -Orients -Orion -Orkan -Orkane -Orten -Ortes -Ortung -Osten -Ostens -Ostern -Ostjude -Ostpakt -Ostsee -Ostwall -Ostwind -Othmar -Otter -Ottern -Ovation -Ozean -Ozeanen -Ozeanes -Ozeans -Packeis -Packen -Packern -Packers -Packung -Paella -Ppste -Prke -Prken -Pssen -Paket -Pakete -Paketen -Paketes -Pakets -Pakte -Pakten -Pakts -Palast -Palaver -Palette -Pallas -Palmen -Paniken -Pannen -Panther -Panzer -Panzern -Panzers -Papas -Papier -Papiere -Papiers -Pappe -Pappeln -Paprika -Papstes -Papyrus -Parade -Parasit -Pardon -Parfm -Parks -Parkuhr -Partei -Partie -Partien -Parties -Parts -Pascha -Paste -Pasten -Pastor -Pastors -Paten -Patent -Patente -Paters -Pathet -Pathos -Patient -Patrone -Patsche -Patzer -Pauke -Pauker -Paulus -Pausen -Pavia -Pavian -Paviane -Pazifik -Pechs -Pegasus -Pegel -Pegeln -Peilung -Pelikan -Pelzen -Pelzes -Pence -Pendel -Pendels -Pension -Pensum -Pensums -Pepita -Periode -Perle -Perlen -Perser -Persern -Persien -Person -Perus -Pesetas -Peseten -Pfade -Pfaden -Pfahles -Pfalz -Pfand -Pfande -Pfanden -Pfandes -Pfanne -Pfarrei -Pfarrer -Pfa -Pfan -Pfaus -Pfeil -Pfeilen -Pferch -Pferd -Pferde -Pferdes -Pfiffe -Pflaume -Pflege -Pflug -Pfluges -Pforte -Pfosten -Pfote -Pftze -Pfuhl -Pfunde -Pfunden -Pfundes -Phalanx -Phantom -Pharao -Pharma -Phase -Phasen -Phenol -Phlegma -Photo -Phrase -Physik -Pianist -Pickeln -Piett -Pigment -Pilger -Pilgers -Pille -Pilot -Piloten -Pilze -Pilzen -Pilzes -Pinguin -Pinie -Pinsel -Pinsels -Pionier -Piper -Pirat -Piraten -Pirats -Pirsch -Piste -Pistole -Pixel -Pizzas -Placebo -Plne -Plnen -Plsir -Pltte -Pltze -Plagiat -Plakat -Plakate -Planern -Planes -Planet -Planets -Planke -Planken -Planung -Plasma -Plasmen -Plastik -Plateau -Platin -Platins -Plato -Platon -Platos -Platte -Platten -Platze -Platzen -Platzes -Plausch -Pleite -Pleiten -Plenum -Plenums -Plotter -Plsch -Plural -Plurale -Plurals -Pocken -Podien -Podium -Podiums -Poker -Polemik -Polens -Polente -Police -Polier -Polin -Polis -Polit -Politik -Politur -Polle -Pollen -Pollock -Polster -Polypen -Pomade -Pomaden -Pommern -Pomps -Ponte -Pontius -Ponton -Ponys -Popper -Poren -Portier -Portion -Porto -Portos -Posaune -Posen -Postamt -Postens -Poster -Postweg -Postzug -Prmie -Prrie -Prager -Prags -Praline -Pranger -Pranke -Pranken -Praxen -Praxis -Preis -Preise -Premier -Prestel -Primat -Primate -Primus -Prinzen -Prinzip -Prismen -Problem -Produkt -Profil -Profile -Profis -Profit -Projekt -Prokura -Prologe -Proporz -Prosa -Protein -Protest -Proton -Provinz -Prozent -Prfer -Prgel -Prunk -Pseudo -Psyche -Pudels -Puder -Puders -Pree -Ptt -Ptts -Puffer -Pulle -Pulli -Pulte -Pulten -Punkt -Punkten -Punktes -Punsch -Puppe -Puppen -Purpur -Puschel -Puten -Puters -Putsch -Puzzi -Puzzle -Pyjama -Pyjamas -Pyrrhos -Pythia -Quadrat -Quler -Qualle -Qualm -Quarks -Quart -Quartal -Quasar -Quatsch -Quitte -Quitten -Quoten -Rache -Rachens -Racket -Radars -Radau -Radians -Radio -Radium -Radius -Radlern -Radon -Radtour -Rcher -Rdern -Rnge -Rngen -Rte -Rtsel -Ruber -Rahmen -Rahmens -Rahms -Raimund -Raketen -Rally -Rallye -Rallys -Rampe -Rampen -Ramses -Rande -Randes -Ranges -Rappen -Rapport -Raserei -Raster -Raten -Rates -Ratte -Raubzug -Rauch -Rauchen -Raucher -Raume -Raums -Raupen -Rausch -Razzien -Reaktor -Reben -Rechaud -Rechens -Rechnen -Rechner -Recht -Rechten -Rechtes -Record -Redner -Rednern -Reeders -Referat -Reflex -Reflexe -Regal -Regale -Regatta -Regel -Regeln -Regen -Regent -Reger -Regie -Regime -Region -Reglern -Reglers -Regung -Reibung -Reiche -Reichen -Reiches -Reichs -Reifen -Reifung -Reihe -Reihen -Reims -Reiner -Reise -Reisen -Reisser -Reiter -Reitern -Reizung -Reklame -Rekord -Rekorde -Rekrut -Rekruts -Rektors -Reliefs -Rendite -Rennen -Renner -Renntag -Rente -Rentier -Reporte -Reports -Reptil -Reptils -Reserve -Respekt -Reste -Restes -Rests -Retter -Rettern -Retters -Rettich -Rettung -Revier -Reviere -Reviers -Revolte -Rezept -Rezepte -Ricke -Riecher -Riege -Riegel -Riegeln -Riemen -Riesen -Riffen -Riffes -Rillen -Rinden -Rinder -Rindern -Rinds -Ringes -Rings -Rippe -Rippen -Risse -Rissen -Riten -Ritter -Rittern -Rituale -Rituals -Ritzel -Rival -Rivale -Rizinus -Robbe -Rodung -Rbi -Rcke -Rhm -Rhre -Rmer -Rmern -Rsti -Rte -Rtel -Roggens -Rohl -Rohls -Rohre -Rohren -Rohres -Rohware -Rolle -Rolles -Rollis -Romanze -Rosen -Rosenau -Rostes -Rotbart -Rotdorn -Rotor -Routen -Routine -Rubik -Rubrik -Ruder -Ruderer -Ruders -Rben -Rcken -Rhme -Rufen -Ruhmes -Ruhms -Ruinen -Ruins -Rumne -Rummel -Rumpf -Rumpfes -Rundbau -Runde -Runzel -Rupert -Rupien -Rythmen -Sachen -Sacher -Sbel -Sbeln -Sbels -Scken -Sfte -Sften -Sle -Snfte -Snger -Srge -Stze -Sufer -Sulen -Sure -Suren -Safari -Safran -Safrans -Safte -Safts -Sagen -Sagte -Saigons -Sainte -Saison -Saisons -Saite -Saiten -Saladin -Salami -Salat -Salaten -Salates -Salbei -Salden -Saldo -Salem -Salon -Salons -Salto -Saltos -Salve -Salven -Salze -Salzes -Samen -Sammeln -Sammler -Samson -Samts -Sande -Sandes -Sandoz -Sands -Sanduhr -Saphire -Saphirs -Sardine -Sargs -Satin -Satins -Satire -Sattel -Sattler -Saturn -Satyren -Satzbau -Satze -Satzes -Satzung -Sauce -Saucen -Sarei -Saugern -Saugers -Saulgau -Saumes -Sauna -Saunas -Saurier -Sauter -Scala -Scanner -Schach -Schachs -Schacht -Schade -Schaden -Schaf -Schafe -Schafen -Schafes -Schaft -Schah -Schakal -Schale -Schall -Schalls -Schals -Schames -Schande -Schar -Scharen -Scharm -Schatz -Schau -Schar -Schaums -Scheck -Schecks -Scheibe -Schein -Scheine -Scheins -Scheit -Scheite -Schelm -Schelme -Schemas -Schemel -Schemen -Scherbe -Scheune -Schick -Schiebe -Schiffe -Schiffs -Schild -Schilde -Schilf -Schirm -Schlaf -Schlag -Schlamm -Schleim -Schlick -Schlips -Schlitz -Schlo -Schlote -Schmach -Schmalz -Schmaus -Schmerz -Schmied -Schmitz -Schmutz -Schnake -Schnaps -Schnee -Schneid -Schnell -Schnitz -Schnur -Schober -Schock -Schn -Scholle -Schoner -Schopf -Schorf -Schorfe -Scho -Schote -Schott -Schotte -Schrank -Schranz -Schreck -Schreis -Schritt -Schrots -Schrott -Schub -Schubs -Schuft -Schufts -Schuh -Schuhe -Schuhen -Schuhs -Schuld -Schulen -Schund -Schuren -Schurke -Schurz -Schu -Schute -Schuten -Schutts -Schutz -Schutze -Schwamm -Schwan -Schwans -Schwanz -Schwarm -Schwarz -Schwede -Schwein -Schwere -Schwert -Schwips -Schwurs -Scout -Seebad -Seebr -Seebund -Seegang -Seegras -Seeheld -Seeigel -Seele -Seenot -Seerose -Seetang -Seetier -Seeufer -Seeweg -Seewege -Seewind -Segeln -Segels -Segen -Segens -Segler -Seglern -Seglers -Segnung -Sehen -Seher -Seherin -Sehers -Sehfeld -Sehnerv -Sehrohr -Seich -Seide -Seidel -Seife -Seiko -Seiler -Seilern -Seils -Seimen -Seims -Seinen -Seins -Seite -Seiten -Sekante -Sekret -Sekte -Sektor -Sekts -Sekunde -Selbst -Semit -Semiten -Semits -Semmel -Semmels -Senat -Senate -Senates -Senator -Senats -Sender -Sendern -Senegal -Senfs -Senior -Seniors -Senkel -Senkeln -Senkels -Senkern -Senkers -Senkung -Seoul -Seppel -Serail -Seraile -Seren -Serie -Serien -Serif -Serums -Service -Sesam -Sessel -Sessels -Session -Setzen -Setzer -Setzern -Setzers -Setzt -Seuche -Severin -Sextett -Shogun -Shows -Sichel -Sicher -Sichern -Sicht -Sidnay -Sieben -Siebes -Siedern -Sieders -Siedler -Siegel -Siegels -Sieger -Siegers -Siegs -Siels -Siesta -Sigma -Signal -Signale -Signet -Signete -Sigrid -Sigrun -Silbe -Silber -Silicon -Silikat -Silikon -Simsen -Simses -Sinken -Sinnen -Sinnes -Sinter -Sinters -Sinus -Siphon -Siphone -Sippe -Sippen -Sirene -Sirenen -Sirup -Sirups -Sitte -Sitten -Sitzbad -Sitze -Sitzes -Skala -Skalen -Skats -Skelett -Skepsis -Sketch -Skier -Skihose -Skiort -Skizze -Skizzen -Sklaven -Sklavin -Skodas -Skorbut -Skript -Skylla -Slalom -Slaloms -Slawen -Slogan -Sobald -Socke -Sockeln -Sockels -Socken -Sben -Sller -Sofort -Softeis -Sogar -Sohne -Sohnes -Sohns -Soldat -Solde -Solden -Solds -Solist -Sollten -Sommer -Sonate -Sonaten -Sonden -Sondern -Sonette -Sonne -Sonnen -Sonnhof -Sonntag -Sonst -Sopran -Soprans -Sorben -Sorge -Sorgen -Sorte -Sorten -Sosse -Sossen -Souffle -Sound -Soviel -Sowete -Sowie -Sozial -Soziale -Sozien -Sozius -Sphre -Spne -Spnen -Spsse -Spter -Spagat -Spagats -Spalier -Spalt -Spalte -Spalts -Spandau -Spanien -Spanier -Spann -Spannen -Spanns -Spans -Spant -Spanten -Sparen -Sparern -Sparers -Spargel -Sparta -Spa -Spatel -Spateln -Spaten -Spatens -Spatzes -Specht -Spechts -Speck -Speer -Speere -Speeren -Speiche -Spende -Spender -Sperber -Sperrad -Spesen -Spezies -Sphre -Sphinx -Spiegel -Spiel -Spieler -Spie -Spikes -Spinat -Spindel -Spinner -Spion -Spione -Spionen -Spionin -Spions -Spirale -Spital -Spitze -Spitzel -Spleen -Spleens -Splinte -Splints -Splitt -Splitts -Spore -Sporn -Sport -Sports -Spotts -Sprache -Spreu -Spreus -Sprich -Sprints -Sprit -Sprits -Spro -Sprosse -Spruchs -Sprudel -Sprung -Spuks -Spurts -Sputnik -Stabes -Stabs -Stachel -Stachus -Stadium -Stadt -Stbe -Stben -Stdte -Stmme -Stnde -Sttte -Staffel -Stahl -Stahls -Stake -Stall -Stalls -Stamm -Stamms -Stand -Stande -Stander -Standes -Stangen -Stapels -Stare -Staren -Starker -Stars -Starter -Statik -Station -Statist -Stativ -Stativs -Statt -Statur -Statut -Statuts -Staub -Staubs -Stauden -Star -Starn -Staufer -Staunen -Staupe -Staus -Stausee -Stecker -Stege -Stegen -Steger -Stegs -Stehen -Steher -Stehers -Stehlen -Steht -Steigen -Steigs -Steigt -Steine -Steinen -Stelle -Stempel -Stereo -Sternen -Sternes -Sterns -Stettin -Ster -Stern -Stich -Stiche -Stichs -Sticker -Stiefel -Stiege -Stiel -Stielen -Stiels -Stier -Stift -Stifter -Stiftes -Stifts -Stigma -Stilart -Stile -Stilen -Stille -Stils -Stimme -Stirn -Stirnen -Stcke -Strs -Stsse -Stsst -Stoffe -Stoffel -Stoffen -Stoffes -Stoiker -Stola -Stolas -Stollen -Stolz -Stopp -Stoppel -Storch -Storchs -Stories -Storno -Sto -Stosses -Stotter -Stout -Strafen -Strahl -Strahls -Strand -Strands -Strangs -Strasse -Strauch -Streben -Strecke -Streich -Streif -Streiks -Strenge -Streus -Strich -Striche -Strichs -Strick -Stricks -Stroh -Strohs -Strolch -Strome -Stromes -Strophe -Strudel -Strumpf -Strunk -Strunke -Stube -Stuben -Stuck -Stucks -Studien -Studio -Studium -Stck -Stcke -Stcks -Stufe -Stuhle -Stulle -Stullen -Stulpe -Stunden -Stunk -Stunke -Stunken -Sturm -Sturme -Sturzes -Stu -Stusses -Stute -Stutzer -Subjekt -Suchard -Suche -Suchen -Suchern -Sudelei -Schte -Shne -Slzen -Smpfe -Snde -Snden -Snder -Suite -Suiten -Sultane -Sultans -Sumerer -Summen -Summer -Summern -Sumpf -Sumpfes -Super -Suppe -Suppen -Sushi -Symbol -Symbols -Symptom -Synoden -Synonym -Syntax -Syrer -Systeme -Szenen -Tabak -Tabake -Tabaks -Tabelle -Tadel -Tadler -Tadlern -Tadlers -Tlern -Tnzen -Tnzer -Tter -Ttern -Tters -Tafel -Tagbau -Tages -Taggeld -Taifun -Taifune -Taifuns -Taiga -Taille -Takel -Takels -Takte -Takten -Taktik -Takts -Talent -Talente -Taler -Tales -Talgen -Talgs -Talken -Talon -Tamilen -Tamtam -Tamtams -Tandem -Tandems -Tands -Tange -Tangen -Tangens -Tanger -Tango -Tangs -Tannen -Tante -Tanzes -Tapet -Tapete -Tapeten -Taras -Tarent -Tarifen -Tarifs -Tarsos -Tasche -Taschen -Tasse -Tassen -Taste -Tastern -Tasters -Taten -Tatort -Tatorte -Tatze -Tatzen -Taube -Taucher -Taumeln -Taumels -Taunus -Tausch -Tausend -Tauwerk -Taxen -Taxis -Taxwert -Teckel -Teckeln -Teckels -Teers -Teesieb -Teheran -Teich -Teiche -Teichen -Teichs -Teigs -Teile -Teilen -Teiler -Teilers -Teiles -Teils -Teilung -Teint -Teints -Telefon -Telex -Teller -Tellern -Tellers -Tempel -Tempeln -Tenne -Tennis -Tenre -Tenor -Teppich -Termin -Termine -Termins -Termite -Terrine -Terze -Terzen -Teufeln -Textes -Textil -Textils -Textur -Theater -Theke -Theken -Thema -Themen -Therm -Therme -Thermen -Thermik -These -Thesen -Ticket -Tickets -Ticks -Tiefen -Tiefsee -Tiegel -Tiegeln -Tiere -Tieren -Tieres -Tiers -Tigerin -Tigers -Tilgung -Tinte -Tippen -Titan -Titanen -Titanin -Titans -Titel -Titeln -Titels -Tobak -Tochter -Todes -Tlpel -Tnen -Tnung -Tpfen -Tpfer -Trin -Ttung -Tolle -Tollwut -Tomaten -Tombak -Tombaks -Tonarm -Tonarms -Tonart -Tonbad -Tonband -Tonerde -Tones -Tonfall -Tonkrug -Tonlage -Tonnage -Tonnen -Tonspur -Tonsur -Tonware -Topase -Topasen -Toren -Toreros -Torfs -Torheit -Tories -Torlauf -Torpedo -Torraum -Torso -Torsos -Torten -Totos -Tourist -Tournee -Tower -Traber -Trabern -Trabi -Tracht -Trnen -Trume -Tragik -Trainer -Trakt -Traktat -Traktor -Tramper -Trance -Trancen -Tranche -Trane -Tranks -Trans -Trapez -Tratte -Tratten -Trauben -Trar -Traufe -Traufen -Traum -Trauma -Traumen -Traumes -Traute -Trecker -Treff -Treffen -Treffer -Treffs -Treiber -Trend -Trends -Trennen -Trense -Treppe -Treppen -Tresen -Tre -Treid -Tribun -Tribune -Tribuns -Tribur -Tribut -Tributs -Trick -Tricks -Trident -Trieb -Triebs -Triest -Trikot -Triller -Trinker -Triole -Trios -Tritt -Tritten -Triumpf -Triumph -Troja -Tropen -Tropfen -Trost -Trosts -Trottel -Trotts -Trotz -Trubel -Trubeln -Truck -Trucker -Truhe -Truhen -Trumpf -Trumpfs -Trunk -Truppe -Tuben -Tuches -Tll -Tlle -Tlls -Tmpel -Tpfel -Tre -Tren -Tte -Tten -Tuffen -Tuffs -Tugend -Tulmult -Tulpe -Tumor -Tumoren -Tumors -Tumult -Tumults -Tundra -Tunnel -Tunnels -Turban -Turbane -Turbine -Turbo -Turme -Turmes -Turms -Turner -Turnern -Turnier -Turnus -Tusch -Tutor -Typen -Typens -Typus -Tyrann -bel -bels -ber -bung -Ufers -Uhren -Uhrwerk -Uhrzeit -Ulmen -Umbaus -Umbruch -Umdruck -Umfangs -Umfeld -Umfrage -Umgang -Umgange -Umgangs -Umhang -Umkehr -Umkreis -Umlage -Umlagen -Umlaufs -Umlaute -Umlauts -Umrisse -Umsatz -Umschau -Umsicht -Umstieg -Umsturz -Umweg -Umwegen -Umwegs -Umwelt -Umzge -Umzug -Umzugs -Unarten -Undank -Unding -Unehren -Unfall -Unfalls -Unfugs -Ungar -Ungaren -Ungarin -Ungarn -Ungarns -Ungars -Ungnade -Ungunst -Unheil -Unhold -Unholds -Unikum -Unikums -Union -Unionen -Univer -Unken -Unkraut -Unmenge -Unmut -Unmuts -Unrast -Unrats -Unrecht -Unruh -Unruhe -Unruhen -Unsegen -Unser -Unsere -Unserer -Unsinn -Unsitte -Unsumme -Untat -Untaten -Unter -Untier -Unwerte -Unwesen -Unwille -Unzucht -Urachen -Urahnen -Urahns -Urans -Urbild -Urenkel -Urform -Urheber -Urins -Urkraft -Urkunde -Urlaub -Urlaube -Urlaubs -Ursache -Urteil -Urtiere -Urwald -Urwelt -Urzeit -Utopien -Vter -Vtern -Valuten -Vampir -Vanille -Variete -Vasall -Vasalls -Vater -Vatis -Vehikel -Velins -Venen -Ventile -Veranda -Verben -Verbot -Verbote -Verbots -Verbum -Verbund -Verderb -Vereins -Verfall -Vergabe -Verhau -Verhr -Verkehr -Verlage -Verlags -Verla -Verlust -Verputz -Verrat -Verrufs -Versand -Versbau -Verse -Versen -Version -Versuch -Vertrag -Vertri -Verzehr -Verzug -Verzuge -Verzugs -Veteran -Vetos -Vetter -Vetters -Veuve -Viadukt -Victor -Video -Videos -Viecher -Viehes -Viehhof -Viele -Vieleck -Viereck -Vierte -Viertel -Viertes -Vietnam -Vikare -Vikaren -Vikars -Villa -Viola -Violine -Viper -Viren -Visagen -Visier -Vision -Visite -Visiten -Visum -Vitamin -Vitnam -Vliese -Vliesen -Vlieses -Vgte -Vlker -Vllig -Vogels -Vogtes -Vokabel -Vokal -Vokale -Vokals -Volant -Volke -Volkes -Volks -Vollbad -Volle -Vollzug -Volumen -Vorab -Voraus -Vorbild -Vorbote -Vordera -Vorerst -Vorfahr -Vorfilm -Vorgabe -Vorgang -Vorhang -Vorher -Vorhof -Vorige -Vorjahr -Vorkauf -Vorlauf -Vormund -Vorrat -Vorraum -Vorsatz -Vorsitz -Vortags -Vorteil -Vortrag -Vorwahl -Vorwand -Vorweg -Vorwort -Vorwurf -Vorzug -Votum -Vulkane -Waben -Wachs -Wachses -Wachtel -Wchte -Whler -Wlder -Wlle -Wlzer -Wmsen -Wnde -Wnden -Wsche -Waffe -Waffel -Waffen -Wagemut -Wagen -Wagens -Waggon -Waggons -Wagner -Wahlakt -Wahlen -Wahltag -Wahns -Wahre -Waise -Waisen -Walde -Waldes -Waldgut -Waldsee -Waldweg -Walfang -Walker -Walkern -Walkers -Wallach -Walls -Wallung -Walnu -Walro -Walther -Waltran -Walzer -Walzern -Walzers -Walzgut -Wamses -Wandel -Wandels -Wanduhr -Wange -Wangen -Wanne -Wannsee -Wanst -Wanste -Wanstes -Wanze -Wanzen -Wappens -Waren -Warhol -Warnung -Warten -Wartens -Warze -Warzen -Waschen -Wassers -Watsche -Watte -Watten -Watts -Weber -Weberin -Webers -Webware -Wechsel -Wecker -Weckers -Wedel -Wedels -Wegebau -Wegen -Wegfall -Weggang -Wehen -Wehmut -Weibe -Weiber -Weibes -Weich -Weichen -Weide -Weihen -Weiher -Weihern -Weile -Weiler -Weilern -Weimar -Weinbau -Weingut -Weins -Weise -Weisen -Wei -Weissen -Weisung -Weiter -Weitere -Weizen -Welche -Welchen -Welches -Welfen -Wellen -Welpe -Welpen -Weltall -Welten -Weltrat -Weltruf -Wende -Wendel -Wenden -Wendung -Weniger -Werbe -Werber -Werbern -Werbung -Werden -Werder -Werders -Werft -Werkes -Werks -Wermut -Wermuts -Werte -Werten -Wertes -Wertung -Werwolf -Wesen -Wesens -Weser -Weshalb -Wespen -Weste -Westens -Wetten -Wetter -Wetters -Whigs -Whisky -Whiskys -Wichte -Wichten -Wichtig -Wicke -Wickel -Wickels -Wicken -Widder -Widdern -Widders -Widmung -Wiege -Wiener -Wieners -Wiesel -Wieseln -Wiesels -Wieso -Wildbad -Wilden -Wille -Willen -Willens -Willy -Wimpel -Wimpern -Windeis -Windeln -Windes -Windung -Winkel -Winkeln -Winkels -Winker -Winkers -Winks -Wipfel -Wipfels -Wippe -Wirbeln -Wirkens -Wirker -Wirkern -Wirkers -Wirkung -Wirrnis -Wirrsal -Wirte -Wirten -Wirth -Wirtin -Wischer -Wisent -Wisents -Wissen -Wissens -Witwe -Witwer -Witwers -Witze -Witzen -Witzes -Wobei -Woche -Wochen -Wodurch -Wlfe -Wlfen -Wlfin -Wrter -Wofr -Wohin -Wohle -Wohltat -Wohnbau -Wohnen -Wohnort -Wohnung -Wolfram -Wolke -Wolken -Wolle -Wollen -Wollens -Wollten -Wollust -Womit -Wonne -Wonnen -Woran -Worauf -World -Worms -Wortart -Worte -Worten -Wortes -Worts -Wotan -Wovon -Wovor -Wracks -Wright -Wucher -Wuchern -Wuchers -Wuchses -Wucht -Wrden -Wrfe -Wrfel -Wrfen -Wrger -Wrme -Wrmen -Wste -Wsten -Wulsts -Wunde -Wunden -Wundern -Wunderw -Wunsch -Wunsche -Wurde -Wurms -Wurst -Wurzel -Wurzeln -Wussten -Xanten -Yacht -Yachten -Yangtse -Zhler -Zhne -Zune -Zahle -Zahlen -Zahnrad -Zahns -Zange -Zangen -Zaren -Zarin -Zauber -Zaubers -Zebra -Zebras -Zeche -Zehen -Zehner -Zehnte -Zehntel -Zeichen -Zeiger -Zeigers -Zeigt -Zeile -Zeiten -Zeitnot -Zeitung -Zelle -Zelte -Zeltes -Zemente -Zements -Zensor -Zensur -Zentner -Zentral -Zentren -Zepter -Zeptern -Zepters -Zerfall -Zerrung -Zession -Zettel -Zetteln -Zettels -Zeuge -Zeugen -Zeugin -Zeugs -Zeugung -Zicke -Zicken -Ziege -Ziegel -Ziegeln -Ziegels -Ziehen -Zieht -Ziehung -Ziele -Zieles -Zielort -Zielpu -Ziemer -Ziemern -Zierat -Zierate -Zierde -Zierden -Ziffern -Zikade -Zikaden -Zimmers -Zimts -Zinkes -Zinne -Zinns -Zinse -Zinsen -Zionist -Zipfeln -Zirkel -Zirkels -Zirkus -Zitat -Zitate -Zitaten -Zitats -Zither -Zithern -Zitrone -Zitze -Zitzen -Zobels -Zlle -Zllen -Zpfe -Zofen -Zollamt -Zoologe -Zopfes -Zornes -Zorns -Zoten -Zuber -Zubern -Zubers -Zubusse -Zucht -Zuchten -Zuckers -Zuckung -Zudrang -Zgel -Zgen -Znder -Zrst -Zufahrt -Zufalls -Zufluss -Zugabe -Zugaben -Zugangs -Zugeben -Zuges -Zugluft -Zugriff -Zugseil -Zugtier -Zugvieh -Zugwind -Zukauf -Zukunft -Zulage -Zulagen -Zulauf -Zumal -Zunahme -Zunamen -Zunder -Zundern -Zunft -Zunge -Zungen -Zuppa -Zurck -Zuruf -Zurufe -Zusage -Zusehen -Zustand -Zutaten -Zuwachs -Zuzge -Zuzug -Zwanges -Zwangs -Zwecke -Zwecken -Zweckes -Zwecks -Zweifel -Zweig -Zweige -Zweigen -Zweimal -Zweirad -Zweiten -Zwerge -Zwergen -Zwerges -Zwick -Zwicker -Zwinger -Zwingli -Zwirn -Zwirnen -Zwirnes -Zwist -Zwiste -Zwistes -Zwitter -Zwlf -Zyanid -Zyklen -Zyklons -Zyklop -Zyklus -Zyniker -Zypern -Zyste -abban -abbaute -abbucht -abdeckt -abdient -abends -abessen -abfing -abgab -abgeben -abgehe -abgehen -abgeht -abgibt -abging -abgrabe -abhlt -abhaken -abhan -abhebt -abhielt -abhing -abhoben -abhold -abhole -abholt -abjagen -abkam -abladen -ablasse -ablegt -ablenkt -ablst -abnagen -abnahm -abnimmt -abnorm -abraten -abregen -abrufen -abrupt -abrupte -absagen -absagte -absehe -absehen -abseits -absetzt -absieht -absolut -abstrus -absurd -abtrat -abtun -abwgt -abwegig -abzgl -abziehe -abzieht -abzielt -abzog -abzuges -abzutun -achtbar -achte -achtem -achtend -achtens -achtes -achtest -achtet -achtsam -achzig -ackert -addiere -addiert -adelige -adeln -adelnd -adelt -adelte -adieu -adlest -adlig -adlige -adrette -chten -chze -chzen -chzte -ffen -ffend -fft -ffte -hnele -hnle -ltere -ltest -ndere -rgere -rgern -rgert -rgste -rmer -rmere -rmste -send -sende -tsch -tzend -tzt -tzten -ugen -ugte -affig -affige -affigen -affiger -agiere -agieren -agierst -agiert -agierte -agile -agilen -agiler -agiles -ahnde -ahnden -ahndest -ahndet -ahnen -ahnend -ahnende -ahnte -ahnten -ahntet -akkurat -aktiv -aktive -aktivem -aktiver -aktives -akute -akutem -akuten -akutere -akutes -alberne -alerte -allegro -allein -alleine -allemal -allen -aller -alles -allwo -almen -alpine -alpinem -alpinen -alpines -alsbald -alsdann -altem -alten -alter -altere -alternd -alterst -altert -alterte -altes -altklug -amigo -amigos -amorphe -amour -amtet -amtiere -amtiert -amtlich -analoge -anbahne -anbahnt -anban -anbei -anbeten -anbiete -anboten -anbrach -ander -andere -anderen -anderes -anders -andreht -andrer -androht -anekeln -anfange -anfangs -anfasst -anfiel -anfing -anfrass -angab -angeben -angelnd -angelst -angelte -angetan -angibt -anginge -angle -anhlt -anhalte -anhebt -anheim -anheizt -anhielt -anhob -anhoben -anhrt -ankme -ankam -ankamen -ankere -ankernd -ankerst -ankomme -ankommt -ankotzt -anlangt -anlegt -anlegte -anlief -anliegt -anmalen -anmasst -anmelde -anmuten -anmutet -anmutig -annalen -annimmt -anomal -anomale -anonym -anonyme -anormal -anpasse -anpasst -anraten -anregt -anrief -anrufen -ansah -ansehe -ansetzt -ansieht -ansteht -antat -antik -antikem -antiken -antiker -antraf -antut -anweist -anwies -anzeige -anzeigt -anzog -apart -aparte -apartem -aparter -apartes -apropos -arbeite -argen -arger -arges -arglos -arglose -arher -armem -armen -armes -armiert -armlose -artete -assen -assest -auffiel -auffing -auffuhr -aufgebe -aufgeht -aufgibt -aufging -aufhebe -aufhebt -aufhob -auflebt -auflegt -aufnahm -aufrief -aufruft -auftaut -auftut -aufwies -ausfiel -ausgab -ausgehe -ausgeht -ausgibt -auskam -auslege -ausnahm -ausruft -aussagt -aussehe -aussen -ausser -ausbt -autonom -backe -backend -backst -backte -backten -baden -badend -badest -badet -badete -badetet -brtig -bumt -baggere -baggern -baggert -bahnte -bahre -baldig -baldige -balgen -ballt -ballte -ballten -banal -banalem -banalen -banaler -banden -bandet -bange -bangen -bangend -banges -bangst -bangt -bangten -bangtet -banne -bannt -bannten -barer -barsch -barst -barsten -barstet -basisch -basteln -bastelt -bastle -batest -batet -ban -band -baumle -bausche -baust -baute -bauten -bautest -beatles -beatmet -beban -bebaut -bebaute -beben -bebend -bebende -bebte -bebten -bechern -bedacht -bedanke -bedankt -bedecke -bedeute -bediene -bedinge -bedingt -bedrohe -bedroht -beehre -beehren -beehrst -beehrt -beeilen -beeilst -beeilte -beenden -beendet -befahl -befahre -befand -befehle -befinde -befolge -befolgt -befragt -befreie -befugt -befugte -befuhr -befuhrt -begaben -begabt -begabte -begann -begannt -begeben -begegne -begehe -begehen -begehrt -begehst -begeht -begibt -beging -beginne -beginnt -begoss -begrabe -begrub -behlt -behage -behagen -behagst -behagte -behalf -behalte -beharre -beharrt -beha -behaust -behaute -behebe -beheben -behebst -beheizt -behend -behende -beherzt -behilft -behob -behobet -behte -beichte -beide -beiden -beider -beige -beinah -beinahe -beirre -beirren -beirrst -beirrt -beirrte -beisse -beitrat -beitrug -bejahe -bejahen -bejahrt -bejahst -bejahte -bekme -bekamen -bekamst -bekamt -bekannt -bekehre -bekehrt -bekenne -bekennt -beklagt -beklebe -beklebt -bekomme -bekommt -bekunde -beladen -beladet -belasse -beleben -belebt -belebte -belegst -belegt -belegte -belehre -beleihe -beleiht -belesen -beliebe -belief -beliess -belle -bellen -bellend -bellst -bellte -bellten -belog -belogen -belogst -belogt -belohne -beluden -beludet -belge -belgt -bemale -bemalen -bemalst -bemalt -bemannt -bemass -bemerke -bemerkt -bemesse -bemisst -bemhe -bemht -benannt -beneble -benenne -benennt -benetzt -bennent -benutze -benutzt -bepacke -bepackt -berate -beraten -beraube -beraubt -berede -bereden -beredet -beredt -bereit -bereits -bergab -bergan -beriet -berste -berstet -berufen -berufst -beruft -beruhen -beruhst -beruht -beruhte -besagen -besagt -besagte -besah -besaite -besann -besaufe -beseelt -besehen -besetzt -besinne -besinnt -besitze -besitzt -besofft -besohle -besohlt -besolde -besser -bessere -bessern -bessert -bestach -bestahl -beste -bestehe -besteht -besten -bester -bestes -bestieg -besuche -besucht -betagte -betankt -betaste -beten -betend -betest -betet -betete -betetet -beteure -betrt -betone -betonen -betonst -betont -betonte -betraf -betraut -betrete -betrieb -betritt -betteln -bettelt -betupfe -betupft -beuge -beugend -beugst -beugt -beugten -beugtet -beuteln -bewache -bewacht -bewahre -bewahrt -bewarb -bewarf -bewege -bewegst -bewegte -beweist -bewies -bewirbt -bewog -bewogen -bewohne -bewusst -bezahle -bezahlt -bezog -bezoget -bezogst -bezuge -bezwang -bieder -biedere -biedern -biege -biegsam -biegst -biegt -biete -bieten -bietend -bietet -bilde -bildend -bildet -bildete -billig -billigt -bimmelt -binre -binde -binden -bindend -bindet -binnen -birgt -bisher -bislang -bissen -bissest -bissig -bissige -bisst -bitte -bitten -bittend -bittet -bizarr -bizonal -blabla -blablah -blst -blamage -blanche -blanke -blankem -blanken -blankes -blanko -blasen -blasend -blass -blasse -blassem -blasser -blasses -bla -blan -blar -blas -blechen -bleib -bleibe -bleibt -bleich -bleiche -bleicht -bleiern -blende -blick -blicke -blicken -blickst -blickte -blieb -bliebe -blieben -bliebst -blies -blind -blinden -blinder -blindes -blinke -blinken -blinkt -blinkte -blitzen -blitzt -bld -blde -blden -blder -bldes -blken -blond -blonde -blonden -blonder -blondes -blosse -blossem -blossen -blosses -blhen -blht -blufft -blumige -blutarm -blute -bluten -blutest -blutet -blutete -blutig -bockig -bockige -bockte -big -bigem -biger -bse -bsen -bser -bsere -boget -bogst -bohnern -bohren -bohrend -bohrst -bohrte -bohrten -bombig -borge -borgend -borgst -borgt -borgten -borgtet -borstig -boshaft -botet -boxen -boxte -bozener -brachen -brachet -brachst -brune -branden -brandet -brandig -brate -braten -bratend -bratet -brauche -braunau -braune -braunem -brauner -braunes -brause -braust -brauten -brave -braven -braver -braves -breche -brechen -breit -breitem -breiter -breites -breitet -bremst -bremste -brenne -brennen -brennst -brichst -bricht -bring -bringe -bringen -bringet -bringst -bringt -brisant -brodelt -brown -brhe -brlle -brllt -brsk -brske -brste -brte -brtet -brumme -brummen -brummig -brummst -brummte -brutal -brutale -buche -buchen -buchend -buchst -bucht -buchten -buchtet -buckelt -bucklig -bcke -bcken -bckt -bckte -bgeln -bgelt -bgle -bndig -brge -brgen -brgst -brgt -brste -bsse -bssen -bsst -bsste -buhlen -buhten -bullige -bummelt -bummle -bumst -bunte -buntem -bunten -buntes -busste -buttere -buttert -capita -carte -cetera -chorus -circa -clever -clevere -comic -commerz -complex -dachte -dachten -dadurch -dmpfe -dmpft -dafr -daheim -daher -dahin -daliegt -damalig -damit -dampf -dampfe -dampfen -dampfst -dampft -dampfte -dance -dankbar -danke -danken -dankend -danket -dankst -dankt -dankten -danktet -dannen -daran -daraus -darbot -darein -darlegt -darnach -darum -dasein -dastehe -datiere -datiert -dare -darn -darnd -darst -dart -darte -darts -daure -davon -dazutun -dealen -decken -deckend -deckst -deckte -deckten -defekt -defekte -defence -deftig -dehnbar -dehne -dehnen -dehnst -dehnt -dehnte -deinem -deinen -deiner -deines -deinige -delikat -denen -denkbar -denke -denkend -denkst -denkste -deppert -derart -derbe -derben -derber -deren -derer -derweil -derzeit -deshalb -dessen -desto -deute -deuten -deutend -deutet -deutete -devot -devote -devoten -devotes -dezent -dezente -dicht -dichtem -dichten -dichtes -dichtet -dicken -dicker -dickere -dickes -diene -dienen -dienend -dient -diente -dienten -dientet -diesem -dieser -dieses -diesig -diesmal -diffus -diniere -diniert -direkt -diskret -divers -drre -drren -drrst -drrt -drrte -dse -dsen -dst -dste -dsten -dstet -donnere -donnern -donnert -doofe -doofen -doofer -dornig -dorthin -dortig -dosiere -dosiert -doziert -drnge -drngt -drahtig -dralle -drallen -draller -drang -dranget -drauf -dreckig -drehbar -drehen -drehend -drehst -drehten -drehtet -dreimal -drein -dreist -dreiste -drille -drillen -drillt -drillte -dringe -dringen -dringst -dringt -drinnen -dritt -drittem -drittes -droben -drohend -drohst -droht -drohten -drohter -drohtes -drollig -drossle -drucken -druckst -druckte -drben -drber -drcke -drckt -drumrum -drunten -dubio -ducke -duckend -duckst -duckt -duckten -dmmer -dmmst -dnge -dngst -dngt -dnkt -dnn -dnne -dnnen -dnner -dnnes -dnnst -dnste -drfe -drfen -drre -drren -drrer -dstre -dufte -duften -duftest -duftet -duftete -duftig -duftige -dulden -duldend -duldest -duldete -dummer -dummere -dummes -dumpf -dumpfen -dumpfer -dumpfes -dunkle -dunklem -dunkler -dunstig -durch -durfte -durstig -dusche -duscht -duschte -duzten -ebener -ebenes -ebenso -ebnen -echte -echten -echter -eckig -eckige -eckigem -eckiger -eckiges -edelste -edlen -edler -edlere -edleres -edles -egalem -egalen -egaler -ehedem -ehelich -ehelos -ehemals -ehesten -ehrbar -ehrbare -ehrend -ehrende -ehrlich -ehrlos -ehrlose -ehrsam -ehrst -ehrte -ehrtest -ehrtet -eidlich -eifern -eiferst -eifert -eiferte -eifre -eifrige -eigene -eigenem -eigenen -eigenes -eigne -eignem -eignen -eignes -eignest -eignet -eilend -eilende -eilends -eilig -eilige -eiligem -eiliger -eiliges -eilst -eilten -eiltest -eiltet -einen -einer -eines -einfach -einfand -einfiel -eingab -eingehe -eingeht -eingibt -einher -einhole -einholt -einig -einigem -einiger -einiges -einjagt -einlegt -einlief -einlud -einnahm -einsah -einsam -einsame -einsehe -einst -eintraf -eintrat -einzeln -einzig -einzige -einzog -eisern -eiserne -eisfrei -eisig -eisigem -eisigen -eisiger -eisiges -eiskalt -eitel -eiterig -eitern -eitert -eitlem -eitlen -eitler -eitles -eitrig -eitrige -elegant -elenden -elender -elfmal -elfte -elften -elfter -elftes -eminent -empfahl -empfand -empfing -empor -emsig -emsige -emsigen -emsiger -enden -endende -endest -endet -endete -endeter -endlich -endlos -endlose -engem -engen -enger -engerem -engeren -engerer -enges -engste -engstem -engster -engstes -enorm -enorme -enormen -enormer -entarte -entband -entehrt -enteise -enteist -entente -enterbe -enterbt -entere -entern -enternd -entert -enterte -entfloh -entfuhr -entging -enthebt -entkam -entlade -entlief -entlieh -entnahm -entrann -entriss -entsagt -entsann -entwarf -entzog -entzwei -episch -epische -epochal -erachte -erahnen -erbarme -erbaten -erbatet -erban -erbaust -erbaut -erbaute -erbend -erbende -erbeten -erbiete -erbitte -erbost -erbot -erbotet -erbst -erbte -erbten -erbtest -erdacht -erdige -erdigem -erdigen -erdiges -erdnah -erdulde -ereilen -ereilst -ereilt -ererbt -erfahre -erfand -erfasse -erfasst -erfinde -erfolgt -erfre -erfreut -ergab -ergaben -ergbe -ergebe -ergeben -ergehen -ergeht -erging -ergra -ergraut -erhaben -erhalte -erheben -erhebst -erhellt -erhielt -erhitze -erhitzt -erhoben -erhobst -erhobt -erhrt -erhole -erholst -erholt -erkannt -erklang -erkoren -erlag -erlagen -erlagst -erlahme -erlahmt -erlangt -erlasse -erlaube -erlaubt -erlebe -erleben -erlebst -erlebt -erlege -erlegen -erlegt -erlegte -erleide -erlerne -erlernt -erlesen -erlief -erliess -erlitt -erlse -erlst -erlogen -erlosch -ermahne -ermahnt -ermatte -ermisst -ermde -ernenne -ernennt -erneute -ernste -ernstem -ernsten -ernstes -ernte -erntend -erntet -erntete -erobern -erpicht -erprobe -erprobt -errt -errate -erraten -erregen -erregt -erregte -errette -erriet -erringe -erringt -errte -ersehen -ersehne -ersehnt -ersetze -ersetzt -ersieht -ersinne -ersinnt -erspare -erspart -erstach -erstand -erstem -ersten -erstens -erster -erstere -erstieg -erstmal -ersuche -ersucht -erteile -erteilt -ertne -ertrage -ertrank -ertrug -eruiert -erwache -erwacht -erwge -erwgt -erwarb -erwarte -erwecke -erweckt -erwehre -erwehrt -erwerb -erwerbe -erwerbt -erwies -erwirbt -erwogen -erzdumm -erzeuge -erzeugt -erziehe -erziele -erzielt -erzog -erzogen -erzoget -erzwang -essbar -essbare -essend -ethisch -etliche -etwas -eurem -euren -eures -evident -ewige -ewigem -ewigen -ewiges -exakt -exakte -exakten -exaktes -exogene -express -extern -externe -extreme -fache -facto -fadem -faden -fader -faderem -faderen -faderer -fades -fadeste -fhige -fhrst -flle -fllen -fllst -fllt -fnde -fngst -fngt -frbe -frbst -frbt -fahle -fahlem -fahlen -fahlere -fahles -fahlste -fahnden -fahnen -fahrbar -fahre -fahrend -fahrig -fahrige -fahrt -fairer -faires -falbe -falbem -falber -falbes -fallen -falls -falsch -falsche -falte -faltest -faltete -faltige -famos -famose -famosen -famoser -fanden -fandest -fange -fangen -farbig -farbige -farblos -faseln -faselte -faserig -fassbar -fasse -fassen -fassest -fasst -fasste -fassten -faste -fasten -fastest -fastet -fastete -fatal -fatale -fatalen -fataler -fauchen -fauchst -fauchte -faule -faulem -faulend -fauler -faulere -faulst -faulste -faulte -faulten -fechte -fechtet -federte -fegen -fegende -fegst -fegte -fegtest -fegtet -fehlen -fehlend -fehlst -fehlte -fehlten -feiere -feiernd -feierst -feiert -feige -feigem -feigen -feigere -feiges -feigste -feilen -feilend -feiler -feilst -feilt -feilte -feiltet -feinem -feinen -feinere -feines -feire -felsig -feminin -fernab -ferner -fernere -fernes -fernste -fertig -fertige -fertigt -fesch -fesche -feschen -fescher -fesches -fesseln -fesselt -fessle -festem -festen -fester -festes -fetten -fetter -fettere -fettige -feuchte -feudal -feudale -fernd -ferst -fert -ferte -feure -feurige -fidel -fidele -fidelen -fideles -fides -fiebert -fiele -fielst -fielt -fiktiv -fiktive -filmen -filmst -filmt -filmte -filmtet -filtere -filtert -filzig -filzige -finde -findend -findest -findet -findige -fingen -finget -fingst -finster -finstre -fischst -fischte -fixen -fixend -fixende -fixer -fixiere -fixiert -fixte -fixten -fixtest -flache -flachem -flacher -flaches -flaggen -flammt -flammte -flankte -fla -flam -flar -flare -flas -flaumig -flechte -fleckig -flehe -flehen -flehend -flehst -fleht -flehten -flehtet -flenne -flennen -flennt -flennte -fleucht -flicken -flickst -flickte -fliegen -fliegst -fliegt -fliehe -fliehst -flieht -fliesst -flink -flinke -flinkem -flinker -flinkes -flirte -flirtet -flitz -flitze -flitzen -flitzst -flitzt -flitzte -flocken -flockig -flte -flten -fltet -flogen -floget -flogst -flohe -flohen -floss -flott -flotter -flottes -fluch -fluche -fluchen -flucht -flgge -flugs -fluid -focht -fochten -fhnig -frmig -folgen -folgend -folgere -folgern -folgsam -folgst -folgten -folgtet -foltere -foltern -foltert -foppe -foppend -foppt -foppte -foppten -fopptet -fordere -fordern -fordert -formal -forme -formell -formend -formlos -formst -formt -formten -formtet -forsch -forscht -fortan -fotogen -frgst -frgt -frsen -frage -fraglos -fragt -fragte -fragten -fragtet -frass -frassen -frech -freche -frechem -frecher -freches -freie -freiem -freien -freiere -freies -freigab -freist -freiste -freite -freiten -freitet -fremd -fremde -fremden -fremder -fremdes -fresse -fressen -freudig -fre -frend -freust -freute -freuten -freveln -frevelt -frevle -friere -friert -frisch -frische -frisst -friste -fristen -fristet -fritte -frivole -frohe -frohem -frohen -frohere -frohes -fromm -frommem -frommen -frommer -frontal -froren -froret -frorst -frostig -frh -frhe -frhen -frher -fuchsen -fgen -fgend -fgst -fgt -fgten -fgtet -fhle -fhlen -fhlst -fhlt -fhlte -fhre -fhrt -fhrte -flle -fllig -fllst -fllt -fllte -fndig -frs -fuhret -fuhrst -fummeln -funkend -fussen -futsch -futsche -futtern -gabeln -gaben -gackere -gackern -gackert -gbe -ghne -ghnen -ghnt -ghnte -gren -grend -grt -grte -grten -grtet -gaffe -gaffend -gaffst -gafft -gafften -gafftet -galant -galante -gallig -gallige -gangbar -ganzem -ganzen -ganzer -garni -garstig -geballt -gebangt -gebannt -gebare -gebaren -gebart -gebarte -gebaut -gebebt -gebellt -geben -gebende -gebogen -gebohrt -geborgt -geboxt -gedacht -gedeckt -gedehnt -gedeiht -gedenke -gedenkt -gedst -gedopt -gedreht -gedroht -gedulde -geehrt -geehrte -geeicht -geeint -geendet -geerbte -gefalle -gefault -gefegt -gefegte -gefehlt -gefeilt -gefeit -gefeite -gefiel -gefilmt -gefixt -gefleht -gefolgt -geformt -gefoult -gefragt -gefreit -gefreut -gefror -gefgt -gegafft -gegeizt -gegen -geguckt -gehabt -gehabte -gehasst -gehan -gehaust -gehegt -gehegte -geheilt -geheizt -gehemmt -gehen -gehende -gehenkt -gehetzt -geher -geheult -gehievt -gehinkt -gehre -gehofft -geholt -gehst -gehupt -geile -geilen -geiler -geilere -geiles -geirrt -geistig -geize -geizen -geizest -geizig -geizige -geizt -geizte -geiztet -gejagt -gejuckt -gekannt -gekappt -gekauft -gekaut -gekehrt -gekeift -gekeimt -gekerbt -gekippt -geklagt -geklebt -gekniet -gekocht -gekonnt -gelabte -gelacht -geladen -gelahmt -gelang -gelange -gelangt -gelaust -gelbe -gelbem -gelber -gelebt -gelebte -geleckt -geleert -gelegen -gelegt -gelegte -gelehnt -gelehrt -geleimt -geleit -geleite -gelernt -gelesen -geliebt -gelingt -gelle -gellen -gellend -gellt -gellte -gellten -gelltet -gelobe -geloben -gelobst -gelobt -gelobte -gelocht -gelockt -gelst -gelogen -gelohnt -geloste -gelotst -gelte -geltend -gemht -gem -gemalt -gemalte -gemein -gemeine -gemeint -gemerkt -gemixte -gemocht -gemusst -genht -genagt -genannt -genas -genaset -genau -genam -genan -genar -genas -genauso -geneckt -genehm -genehme -genese -genesen -genest -geniale -geniere -geniert -geniest -genippt -geno -gengt -genug -genuine -genung -gelt -gelte -geortet -gepatzt -gepeilt -gepickt -geplagt -geplant -geprobt -gepumpt -geputzt -geradem -gerader -gerades -gert -geragt -gerammt -gerannt -gerate -geraten -geraubt -geraum -geraume -geraunt -gerben -gerecht -gereckt -gereift -gereimt -gereist -gereizt -geriet -gering -gerne -gerodet -gerollt -gergt -gerufen -geruhen -geruhst -geruht -geruhte -gerupft -gesackt -gesgt -geste -gesagt -gesagte -gesamt -gesamte -gesandt -gesaugt -gesaust -geschah -gesehen -gesehnt -gesellt -gesengt -gesenkt -gesetzt -gesiebt -gesiegt -gesinnt -gesogen -gesorgt -gespart -gespeit -gespult -gestand -gestaut -gestehe -gesteht -gesucht -gesund -gesurrt -getagt -getagte -getan -getane -getanem -getaner -getanes -getankt -getanzt -getappt -getapst -getarnt -getauft -getaut -getaute -geteilt -getickt -getilgt -getippt -getobt -getollt -getost -getoste -getraut -getreu -getre -getunkt -getupft -geturnt -getutet -gebte -geulkt -geulkte -gewhr -gewagte -gewahr -gewahrt -gewallt -gewalzt -gewandt -gewann -gewatet -gewebte -gewehrt -geweht -geweilt -gewelkt -gewellt -gewerkt -gewesen -gewetzt -gewiegt -gewillt -gewinnt -gewippt -gewiss -gewisse -gewitzt -gewogen -gewohnt -gewollt -gewurmt -gewusst -gezankt -gezapft -gezecht -gezerrt -gezielt -geziemt -geziert -gezogen -gezollt -gibst -gierig -gierige -giesse -giessen -giesst -giftig -giftige -ginge -gingen -gingst -gipfelt -glnze -gltte -glasig -glasige -glatt -glattem -glatten -glatter -glattes -glaub -glauben -glaubst -glaubte -gleich -gleiche -gleicht -gleite -glich -glichen -glichet -glimmen -glimmte -glitt -glitten -global -globale -glockig -glotze -glotzen -glotzt -glotzte -glcke -glckt -glhe -glhst -glht -golden -goldene -goldige -goldnen -gossen -gossest -gottlob -grabe -graben -grabt -grbst -grbt -grmen -grmst -grmt -grmte -grtig -grantig -grase -grasen -grast -graste -grasten -gratis -gra -gram -gran -grar -gras -grausam -grausen -grausig -grauste -graute -greife -greifen -greifst -greift -greisen -grell -grelle -grellen -greller -grelles -grenzt -griff -griffen -griffet -griffig -griffst -grille -grimmig -grinse -grinsen -grinst -grinste -grobem -groben -grober -grobes -grle -grlst -grlt -grollen -grollt -gross -grossem -grossen -grotesk -gruben -grubst -grble -grn -grne -grnem -grner -grsst -grunzen -gruseln -guckt -guckten -gtige -gurgeln -gurgle -gutem -guter -gutes -gutgeht -guttun -haben -habend -habhaft -hacke -hacken -hackend -hackst -hackt -hackte -hacktet -hadern -hkeln -hkelt -hkle -hlt -hnge -hngen -hngt -hngte -hrten -htte -httet -hufe -hufig -hufst -huft -hufte -hute -haftbar -hafte -haftend -haftest -haftete -hageln -hagelnd -hagelt -hagelte -hager -hagerem -hageren -hagerer -hageres -hakte -hakten -halbe -halbem -halber -halbes -halbgar -halfet -halfst -hallt -hallte -halten -haltend -haltlos -handeln -handelt -handle -hange -hangen -hantelt -hapert -happy -harke -harlem -harmlos -harpen -harren -harrte -harrten -harsch -hartem -harten -harter -hasch -hasche -haschte -hasse -hassen -hasst -hasste -hassten -hasstet -haste -hastend -hastest -hastet -hastige -hatten -hattest -hattet -hauche -hauchen -hauchst -hauchte -han -hande -hausen -hausend -haust -hauste -haustet -haute -hauten -hauteng -hautest -hautet -hautnah -hebeln -heben -hebend -hebst -hecheln -hechten -heckte -hefte -heften -heftest -heftet -heftige -hegen -hegend -hegende -hegte -hegten -hegtet -heikel -heiklem -heiklen -heikler -heikles -heilbar -heile -heilen -heilend -heilere -heiles -heilig -heilsam -heilst -heilste -heilte -heilten -heimkam -heimsen -heiser -heiss -heisse -heissem -heissen -heisser -heisses -heisst -heiter -heitere -heizbar -heize -heizen -heizend -heizest -heizt -heizte -heiztet -helfe -helfen -helft -helle -hellen -hellere -helles -hello -hellrot -hellste -hellte -hemmen -hemmend -hemmt -hemmte -hemmten -hemmtet -herab -heran -herauf -heraus -herbe -herbei -herben -herbere -herbes -herfuhr -hergabe -hergebe -hergibt -herging -hernach -herum -herzige -herzlos -herzu -hetzen -hetzt -hetzte -heuchle -her -heule -heulen -heulst -heult -heulte -heultet -heute -heutig -heutige -hiefr -hielt -hielte -hieltet -hieran -hieraus -hierbei -hierher -hierhin -hierin -hierzu -hiesig -hiess -hiesse -hiesset -hilflos -hilft -hinab -hinan -hinauf -hindere -hindern -hindert -hingab -hinge -hingeht -hingen -hingibt -hinken -hinkend -hinkt -hinkte -hinkten -hinktet -hinsah -hinten -hintere -hinterm -hinweg -hinwies -hinzog -hinzu -hirte -hissen -hisst -hitzige -hobelnd -hobelst -hobelt -hobet -hoble -hobst -hochrot -hocke -hocken -hockst -hockt -hockte -hocktet -hchst -hher -hhere -hhlt -hhnen -hhnst -hhnt -hhnte -hrbar -hren -hrend -hrig -hrst -hrt -hrten -hrtet -hoffe -hoffend -hofft -hoffte -hofften -hofftet -hohen -hohes -hohlen -hohler -hohlere -holden -holdes -holen -holende -holpern -holprig -holst -holte -holten -holzig -homogen -hoppeln -hoppelt -hopsen -horchen -horchst -horchte -horrend -horsten -hbsch -hlle -hllt -hllte -hpfen -hpft -hten -htend -htest -htete -human -humane -humaner -humanes -hungere -hungern -hungert -hungrig -hupen -hupend -hupende -hupst -hupte -hupten -huptest -hurra -hurtig -huschte -husten -hustend -hustest -hustete -ideal -idealem -idealen -idealer -ideales -ideelle -idiots -ihnen -ihren -ihrer -ihrigen -illegal -imkern -immens -immerzu -immun -immunem -immunen -immuner -impfe -impfen -impfend -impft -impfte -impften -impftet -inaktiv -indes -infolge -infrage -inhuman -innehat -inner -innerem -inneren -innerer -innert -innig -innigem -innigen -inniger -inniges -inputs -intakt -intern -interne -intim -intime -intimen -intimer -inverse -irdisch -irgenwo -irische -irren -irrend -irrende -irrer -irres -irrig -irrige -irriger -irrst -irrstem -irrsten -irrster -irrte -irrten -irrtest -jhem -jhen -jher -jhrig -jhrt -jten -jagend -jagende -jagst -jagte -jagten -jagtest -jahraus -jahrein -jammere -jammern -jammert -jaulen -jedem -jeden -jeder -jedes -jedoch -jedwede -jemals -jemand -jemehr -jenen -jener -jenes -jetten -jetzige -jetzt -jobben -jollen -jubeln -jubelst -jubelt -juble -juckend -juckte -juckten -jnger -jngst -juhee -juhei -junger -junior -kByte -kabbeln -kabelt -kabelte -klter -kmen -kmme -kmmen -kmmst -kmmt -kmmte -kmpfe -kmpft -kahle -kahlem -kahler -kahles -kahmige -kalbern -kalkarm -kalkig -kalkige -kaltem -kalten -kalter -kamst -kanns -kannte -kannten -kantend -kantest -kantete -kantig -kantige -kapiere -kapiert -kaputt -karge -kargem -kargen -kargere -karges -kargste -kariert -kaspere -kaspert -kasteie -kasteit -kaudere -kaudern -kaudert -kand -kande -kare -karn -karst -kart -karte -kaufen -kaufend -kaufst -kauften -kauftet -kausal -kausale -kaute -kauten -kautet -keckem -kecken -kecker -keckes -keckste -kegeln -kegelnd -kegelst -kegelte -kegle -kehre -kehrend -kehrt -kehrte -kehrten -kehrtet -keife -keifen -keifend -keift -keifte -keiften -keiftet -keilen -keime -keimen -keimend -keimt -keimte -keine -keinem -keiner -keines -keinmal -keins -kellern -keltern -kennbar -kenne -kennend -kennst -kennt -kentere -kentert -kerbe -kerben -kerbst -kerbt -kerbte -kerbtet -kernige -kesse -kessen -kesser -kessere -ketten -kettend -kettet -kettete -keuche -keuchen -keuchst -keucht -keuchte -keusch -kichern -kicke -kicken -kille -killend -killst -killt -killten -killtet -kippe -kippend -kippst -kippt -kippten -kipptet -kitte -kitten -kittest -kittet -kittete -kitzele -kitzeln -kitzelt -klre -klren -klrt -klrte -klafft -klaffte -klagbar -klage -klagend -klagst -klagt -klagten -klagtet -klamme -klammem -klammen -klammes -klangen -klanget -klangst -klappe -klappen -klappt -klappte -klappts -klarem -klarer -klarere -klarste -kla -klan -klaust -klaut -klaute -klautet -kleben -klebend -klebrig -klebst -klebte -klebten -kleide -kleiden -kleidet -kleine -kleinem -kleiner -klemmen -klemmt -klemmte -klinge -klingen -klingle -klingst -klingt -klinken -klinkt -klipp -klirren -klirrte -klne -klnen -klnst -klnt -klnte -klonen -klopfe -klopfen -klopfst -klopft -klotzig -klger -kluge -klugem -kluger -kluges -knacke -knackst -knackt -knallen -knallig -knallte -knapp -knappem -knappen -knapper -knappes -knarren -knarrt -knebeln -knebelt -kneble -kneifen -kneifst -kneifte -knetbar -knete -knetend -knetest -knetet -knieend -knien -kniend -kniende -kniest -kniete -knieten -kniffen -knipse -knipst -knobeln -knobelt -knoble -knochig -knollig -knotig -knpfe -knpft -knurre -knurren -knurrst -knurrt -knurrte -koche -kochend -kochst -kochte -kochten -knen -knne -knnen -knnt -kpfen -kpft -kokett -kokette -kollern -komme -kommend -kommt -kompakt -konform -konfus -konisch -konnte -konnten -kontere -kontert -konvex -kopiere -kopiert -koppeln -koppelt -korrekt -korrupt -kostbar -koste -kosten -kostend -kostet -kostete -kracht -krht -krtze -kraft -krallte -krame -krank -krankem -kranken -kranker -krankt -krasse -krassem -krasser -krasses -kratze -kratzen -kratzt -kratzte -kraule -kraulen -kraulst -krault -kraulte -kraus -krausem -krausen -krauser -krauses -kraust -kreidet -kreiere -kreiert -kreist -kreiste -kreuze -kreuzen -kreuzte -kriegst -kriegt -kriti -kroch -krochen -krnen -krnte -krmme -krmmt -krumm -krumme -krummem -krummer -krummes -khl -khle -khlem -khler -khlst -khlt -khne -khnem -khnen -khnes -knden -kndet -kren -krzen -krzer -krzt -krzte -ksse -ksst -kugelig -kugeln -kulant -kundig -kundige -kundtat -kuppeln -kurbeln -kurbelt -kuren -kurvt -kurze -kurzem -kurzer -kurzes -kuscht -labend -labende -labil -labile -labilen -labiler -labiles -labst -labte -labtest -labtet -lachend -lachst -lacht -lachten -lachtet -ladend -ladende -ladest -ladet -lge -lgen -lhme -lhmst -lhmt -lnger -lngst -lrme -lrmen -lrmig -lrmst -lrmt -lrmte -lsst -lstig -lufst -luft -luten -lagen -lagern -lagernd -lagerst -lagerte -lagst -lahmen -lahmend -lahmer -lahmst -lahmte -lahmten -laichen -lallend -landab -landen -landend -landete -lange -langem -langen -langes -langner -langsam -langte -langten -lapidar -lasen -lassen -lassend -lasst -laste -lastend -lastest -lastete -lasziv -latente -laude -lam -lar -lare -larem -larer -lares -larn -lart -larte -laufen -laufend -laugen -launig -launige -lausche -lauscht -lause -lausend -lausig -laust -lauste -laustem -lauster -laustes -laute -lautem -lauten -lautere -lautes -lautete -lautlos -leasen -least -leben -lebend -lebhaft -leblos -leblose -lebst -lebten -lebtest -lebtet -lechzt -lecke -lecken -lecker -leckere -leckes -leckst -leckt -leckte -ledig -ledigem -ledigen -lediger -leerem -leerend -leerer -leeres -leerst -leert -leerte -leerten -legal -legalen -legales -legende -leger -legiert -legitim -legte -legten -legtet -lehne -lehnend -lehnst -lehnt -lehnten -lehntet -lehren -lehrend -lehrst -lehrte -lehrten -leichte -leide -leiden -leidend -leidest -leidet -leidige -leihen -leihst -leiht -leime -leimen -leimst -leimt -leimte -leisem -leiser -leisere -leises -leiste -leisten -leistet -leite -leiten -leitend -leitest -leitete -lenkbar -lenken -lenkend -lenkst -lenkte -lenkten -lerne -lernen -lernend -lernst -lernt -lernten -lerntet -lesbare -lesend -lesende -letzte -letztem -letzten -letzter -leuchte -leugne -leugnen -leugnet -liberal -libysch -lichte -lichten -lichtet -liebe -liebem -lieben -lieber -liebes -liebste -liebt -liebte -liebtet -liefe -liefen -liefere -liefert -lieft -liege -liegen -liegend -liegst -liegt -liehen -liehest -lieht -liess -liesse -liesset -liest -lifte -liften -liliput -limes -lindere -lindern -lindert -linear -lineare -linkem -linkes -liquid -liquide -lispeln -listen -listet -listige -litten -littest -littet -loben -lobende -lobte -lobten -lobtet -loche -lochen -lochst -locht -lochte -lochtet -locke -locker -lockig -lockige -lockt -lockte -lockten -lodern -lodernd -lodert -lhnen -lsbar -lsche -lscht -lse -lsen -lsest -lst -lste -lsten -logen -lohnen -lokal -lokalem -lokaler -lokales -losen -losend -losere -loserem -loseren -loseres -loseste -losgeht -loste -lostest -lotse -loyale -loyalen -luden -ludest -lften -lge -lgen -lgt -lgte -lgten -lgtet -luftig -lumpige -lungern -lustige -lustlos -lyrisch -machbar -mache -machen -machend -machst -macht -machte -machten -machtet -machts -madige -madiges -mhe -mhne -mhst -mht -mhten -mhtet -mssig -msten -mstet -magere -magerem -mageren -mageres -magst -mahlen -mahlst -mahlt -mahlten -mahltet -mahnen -mahnend -mahnst -mahnte -mahnten -makaber -makiert -malend -malende -malst -malte -maltest -maltet -manch -manchen -mancher -manches -mangeln -mangels -mangelt -manuale -maritim -markant -markte -markten -martert -martial -massen -massest -massig -massige -massiv -masslos -mattem -matter -mattere -mattes -marn -marte -maulen -maulst -mault -maulten -maultet -mausert -maximal -meckere -meckern -meckert -media -medium -mehlig -mehlige -mehre -mehrere -mehrt -mehrten -meide -meidest -meidet -meine -meinem -meinen -meines -meinige -meinst -meinte -meinten -meist -meiste -meisten -melde -melden -meldest -meldet -meldete -melke -melkst -melkt -melkte -melktet -mengte -merci -merke -merken -merksam -merkt -merkte -merkten -merktet -message -messen -meuchle -meutert -miand -mickrig -mieden -miedest -miese -miete -mieten -mietet -mietete -milchig -milde -mildem -milder -mildere -mildern -mildes -minder -mindere -minim -minnt -mische -mischen -mischt -mischte -misse -missest -misst -misste -misstet -misten -mistest -mistet -mitfuhr -mitgab -mitkam -mitsamt -mittags -mittels -mixed -mixte -mixten -mobil -mobile -mobilen -mobiler -mochte -mochten -mochtet -modern -modisch -modular -mcht -mgen -mogeln -mogelnd -mogelst -mogelte -mogle -mollig -mollige -moniert -monogam -monoton -montane -morden -mordend -mordest -mordete -morgens -mortale -moste -mosten -motzen -motzt -motzten -mde -mdem -mden -mdere -mdes -mhen -mhsam -mht -mnden -mndet -mrbe -mssen -mssen -mssig -msst -msste -muffig -mulmig -munde -munkelt -munter -muntere -murmeln -murmle -murren -murrend -murrten -musisch -musste -mussten -mustert -muteten -mutig -mutigem -mutiger -mutiges -mutlos -mutlose -nachdem -nachgab -nachher -nachts -nackend -nackig -nackte -nacktem -nackten -nacktes -nhe -nhend -nher -nhere -nhert -nhme -nhmen -nhren -nhrt -nhrte -nhst -nht -nhten -nhtet -nageln -nagelte -nagen -nagende -nagst -nagte -nagtest -nagtet -nahen -nahend -nahende -nahes -nahezu -nahmen -nahmt -nahst -nahte -nahtest -nahtet -naivem -naiven -naiver -naives -naivste -namens -namhaft -nannte -nanntet -narren -narrend -narrt -narrte -naschen -nassem -nassen -nasser -nasses -nebenan -neblig -neblige -nebst -necke -necken -necking -neckst -neckt -neckten -necktet -negiere -nehmen -nehmend -nehmt -neiden -neidend -neidlos -neigen -neigt -neigte -nennbar -nenne -nennen -nennend -nennst -nennt -nervt -nettem -netten -netter -nettes -nen -ner -nere -nerem -neren -neres -nes -neste -neulich -neunte -neuntem -neunten -neunter -neuntes -neunzig -neusten -neutral -nicht -nichtig -nichts -nicken -nickend -nickt -nickte -nickten -nicktet -niedere -niemand -niente -niese -nieseln -niesen -niesend -nieste -niesten -nimmer -nimmst -nippe -nippen -nippst -nippt -nippte -nipptet -nirgend -niste -nisten -nistend -nistet -nistete -noble -noblem -noblen -nobles -nochso -ntig -nominal -nonstop -normal -norme -notiere -notiert -nottut -ntze -ntzt -ntzte -nutzbar -nutzen -nutzend -nutzlos -nutzt -obenan -obenauf -oberem -oberen -oberer -obern -oberst -obige -obigen -obiger -obiges -oblag -obliegt -obschon -obskure -obsolet -obwohl -obzwar -ocker -den -der -dere -deren -derer -deres -deste -ffne -fter -ftere -fters -len -lend -lig -lige -ligem -liger -liges -lst -lte -ltest -ltet -offen -offene -offenen -offener -ohnehin -omins -opake -opfere -opferte -optimal -optisch -ordern -ordne -ordnend -ordnest -ordnete -orten -ortend -ortende -ortest -ortete -orteten -outputs -ovalem -ovalen -ovaler -pachte -pachten -pachtet -packe -packend -packst -packte -packten -paffe -paffend -paffst -pafft -pafften -pafftet -panisch -pappig -pappige -paradox -parate -paratem -paraten -parates -pariere -pariert -pariser -parke -parkend -parkst -parkte -parkten -passe -passend -passest -passiv -passte -passten -paukte -pausen -pedale -peilt -peinige -peinigt -pendant -pendeln -pendelt -pendent -penibel -penible -perfekt -perfid -perfide -perlend -perplex -pervers -petting -pfade -pfhle -pfeife -pfeifen -pfeift -pfeile -pferche -pfiff -pflanze -pflanzt -pflegst -pflegte -pflge -pflgt -piano -pickten -piepen -piepte -pikant -pilgern -pilgert -pinseln -pipapo -pisse -pissen -pissten -plage -plagen -plagst -plagt -plagten -plagtet -planbar -plane -planen -planlos -planst -plant -planten -plantet -platsch -platt -platte -platzt -platzte -plump -plumpe -plumpen -plumper -pochen -pochend -pocht -pochte -pochten -pochtet -pokern -polar -poliert -polymer -pomps -porse -posiert -potent -potente -prge -prgen -prgst -prgt -przis -prahle -prahlst -prahlt -prahlte -prall -prallem -prallen -praller -pralles -prallte -prangen -prangt -prangte -predige -preis -preise -preist -prekr -presst -presste -presto -pries -prima -primr -print -priori -private -proben -probst -probt -probte -probtet -prompt -promte -promtem -promten -promtes -prost -protzen -protzig -protzt -protzte -prde -prdem -prder -prdes -prfe -prfen -prfst -prfte -publik -publike -puderte -pulvern -pumpe -pumpst -pumpt -pumpten -pumptet -punktum -purem -puren -pures -purzelt -puste -pustend -pustest -pustete -putsche -putze -putzen -putzest -putzige -putzte -putzten -qule -qulst -qult -qulte -qualmig -qualmt -quillt -rabiat -rabiate -radelnd -radelst -radelte -radiere -rche -rchst -rcht -rkeln -rudig -rume -rumst -rumt -rumte -raffe -raffen -raffst -rafft -raffte -rafftet -ragend -ragende -ragst -ragte -ragten -ragtest -ramme -rammen -rammend -rammst -rammt -rammte -rammtet -rangen -rangst -rangt -ranken -rannte -rannten -rapide -rapiden -rapides -rarem -rarer -rarere -rarerem -rarerer -rareres -rares -rarstem -rarsten -rarster -rasant -rasante -rasch -rasche -raschen -rascher -raschle -rasend -rasende -rasest -rasiert -rasseln -rasselt -rassige -rassle -rasten -rastend -rastet -rastete -rastlos -ratend -ratende -ratet -ratio -ratlose -ratsam -ratsame -rattere -rattern -rattert -rauben -raubend -raubst -raubt -raubte -raubtet -rauche -rauchig -raucht -rauchte -raufen -rauhe -rauhen -rauher -rauhere -rauhste -raunen -raunend -raunt -raunte -raunten -rauntet -rausche -rauscht -realem -realen -realer -rechen -rechne -rechnen -rechnet -recht -rechtem -recken -reckend -reckt -reckte -reckten -recktet -redende -redest -redet -redeten -redetet -redlich -reell -reellem -reellen -reeller -reelles -regele -regeln -regelst -regelt -regelte -regem -regen -regeren -reges -regiere -regiert -reglos -regnen -regnend -regnet -regnete -regsam -regte -reibe -reiben -reibend -reibst -reibt -reicher -reichst -reichte -reife -reifem -reifer -reifere -reifst -reifste -reift -reiften -reiftet -reiht -reime -reimend -reimst -reimt -reimten -reimtet -reinem -reinen -reinere -reinige -reinigt -reinste -reisend -reisse -reissen -reisst -reist -reiste -reisten -reistet -reite -reiten -reitest -reitet -reizbar -reizen -reizend -reizte -reizten -relativ -remis -renne -rennst -resolut -restlos -rette -retten -rettend -rettest -rettete -richte -richtet -riebst -riebtet -rieche -riechst -riecht -riefst -rieft -rieseln -rieselt -riesige -rieten -rietet -rietst -rigoros -ringe -ringen -ringend -ringst -ringt -rinnen -rinnt -rinnte -riskant -rissig -rissige -ritte -rittest -ritze -ritzen -ritzest -ritzt -ritzten -ritztet -robbt -robbte -robuste -rochen -rochst -rocht -rockige -rodeln -rodend -rodende -rodest -rodete -rodeten -rhren -rste -rsten -rstet -rter -rohem -rohen -rohes -rojekte -rollen -rolling -rollst -rollt -rollte -rollten -rosige -rosigem -rosigen -rosiges -roste -rosten -rostend -rostest -rostet -rostete -rostig -rostige -rotem -roten -roter -rotiere -rottete -rotzt -rouge -ruchbar -rudere -rudernd -ruderst -ruderte -rcken -rckt -rckte -rgte -rhme -rhmst -rhmt -rhren -rhrt -rhrte -rste -rsten -rstet -rstig -rttle -rufend -rufende -rufst -ruhelos -ruhen -ruhend -ruhig -ruhige -ruhigem -ruhiger -ruhiges -ruhst -ruhte -ruhten -ruhtest -rundem -runder -rundes -runter -runzeln -rupfe -rupfen -rupfend -rupfst -rupft -rupfte -rupftet -russig -rutsche -rutscht -sabbere -sabbern -sabbert -sachte -sachtem -sachten -sachtes -sackte -schl -sen -sende -sge -sgen -sgend -sgt -sgte -sgten -sgtet -she -shen -sst -ste -sten -stest -suge -sugen -sugt -sugte -sume -sumt -saftig -saftige -sagen -sagend -sagende -sagten -sagtest -sahen -sahet -sahnig -sahnige -sahst -salben -salbend -salbst -salbte -salbten -salbtet -salopp -salzen -salzige -sammeln -sammelt -sandig -sandige -sandte -sandtet -sanft -sanftem -sanften -sanfter -sanftes -sangen -sanget -saniere -saniert -sanken -sanket -sankt -sannen -sannst -sapiens -sassen -sassest -sattelt -satten -satter -sattes -sattle -sattsam -sauber -saubere -san -sar -sare -saren -sarer -sares -saufe -saufend -saufst -sauft -saugen -saugend -saugst -saugte -saugten -saure -sauren -sause -sausend -saust -sauste -saustet -schabe -schabet -schaden -schadet -schle -schlt -schaff -schafft -schal -schalem -schalen -schaler -schall -schalle -schallt -schalt -schalte -schare -scharen -scharf -scharfe -scharte -scha -schan -schaust -schaut -schaute -scheel -scheide -scheine -scheint -schelle -schellt -schenke -schenkt -schere -scherst -schert -scherzt -scheu -sche -schem -schen -scher -sches -scheut -scheute -schicke -schickt -schied -schief -schiefe -schiele -schielt -schiene -schient -schier -schiess -schimpf -schinde -schirme -schirmt -schiss -schlaf -schlafe -schlaff -schlaft -schlag -schlage -schlank -schlapp -schlau -schla -schlepp -schlich -schlief -schliff -schlimm -schmal -schmale -schmatz -schmelz -schmiss -schmore -schmort -schmus -schmuse -schmust -schneit -schnell -schob -schoben -schobet -schn -schne -schon -schone -schont -schonte -schrg -schrei -schreie -schrein -schreit -schrie -schrieb -schrien -schriet -schrill -schroff -schub -schre -schuf -schufen -schur -schwach -schwamm -schwand -schwank -schwarz -schwebe -schwebt -schweif -schweig -schwele -schwenk -schwer -schwieg -schwitz -schwor -schwort -schwl -schwur -science -sechs -sechst -sechste -sechzig -seefest -segel -segeln -segelnd -segelt -segelte -segle -segne -segnend -segnest -segnete -sehen -sehende -sehne -sehnen -sehnig -sehnige -sehnt -sehnte -sehnten -sehntet -seicht -seichte -seidene -seidig -seidige -seiend -seiende -seife -seifen -seifige -seile -seilen -seimige -seine -seinen -seiner -seines -seinige -seitens -selbe -selben -selbig -selbige -selbst -selige -seligem -seligen -seliges -selten -seltsam -sende -senden -sendest -sendet -sendete -sengen -sengend -sengt -sengte -sengten -sengtet -senil -senile -senilen -seniler -senke -senken -senkst -senkte -senkten -separat -servil -setting -setzend -setzte -setzten -seuchen -seufze -seufzen -seufzst -seufzt -seufzte -sexta -seziere -seziert -sicher -sichere -sichern -sichte -sichten -sichtet -sickern -siebe -siebend -siebent -siebt -siebte -siebtel -siebter -siebzig -siech -siechen -siechst -siechte -siedeln -sieden -siedend -siedet -siedle -siege -siegelt -siegend -siegle -siegst -siegte -siegten -siehe -siehst -silbern -simple -simplem -simplen -simples -singe -singen -singend -singt -sinke -sinkst -sinkt -sinnige -sinnlos -sinnst -sinnt -sintern -sittig -sittsam -sitze -sitzen -sitzend -sitzst -skurril -smart -smarten -sobald -sodann -shnen -soffen -soffet -sogar -sogen -sohle -sohlen -solange -solch -solche -solchen -solcher -solches -solid -solide -soliden -solider -sollen -solls -sollst -sollte -sollten -solvent -somit -sonder -sondern -sonnige -sonnte -sonor -sonore -sonorem -sonorer -sonores -sonst -sonstwo -sooft -sorgend -sorglos -sorgst -sorgt -sorgten -sorgtet -soviel -soviele -sowas -soweit -sowie -sowieso -sowohl -soziale -sphe -sphst -spht -spte -sptem -spten -sptes -spalte -spalten -spanne -spannen -spannst -spannt -spare -sparen -sparsam -sparst -spart -sparte -spartet -spasse -spassen -spassig -spasst -spasste -speie -speiend -speise -speisen -speist -speiste -speit -spendet -sperren -sperrig -sperrst -sperrt -sperrte -spezial -spieen -spiegle -spielen -spielt -spielte -spiesse -spiesst -spiest -spiet -spinne -spinnen -spitzen -spitzer -spitzig -spitzt -spontan -spornen -spornst -spornte -spott -spotten -sprach -sprang -sprangt -sprayt -spreize -spreizt -sprich -springe -springt -sprinte -spritze -spritzt -sprde -sprhe -sprht -spucken -spuckst -spuckte -sple -splst -splt -spren -sprst -sprte -spukt -spulen -spulend -spulst -spulte -spulten -spurlos -spurte -spurten -spurtet -square -stabil -stabile -stach -stachen -stachle -stachst -strkt -stube -stubt -staffle -stahlen -stahlt -staken -stamme -stammen -stammle -stammst -stammte -stampfe -stampft -standen -standet -stank -stanken -stankst -stanze -stanzen -stanzt -stanzte -stapelt -stapfen -stapfst -stapfte -staple -starb -starben -starbt -stark -starke -starken -starker -starkes -starre -starrem -starren -starrer -starres -starrt -starrte -starte -starten -startet -statt -statten -stauben -stauche -staucht -sta -stan -staune -staunst -staunt -staunte -staust -staute -stauten -steche -stechen -stecke -stecken -steckt -steckte -stehe -stehen -stehend -stehle -stehlen -stehn -stehst -steht -steif -steife -steifem -steifer -steifst -steift -steigen -steigst -steigt -steil -steilem -steilen -steiler -steiles -steinig -stellst -stellt -stellte -stelze -stelzen -stelzst -stelzt -stelzte -stemme -stemmst -stemmt -steppen -steppst -steppte -sterbe -sterben -sterile -stete -steten -steter -stetes -stetige -stere -stern -stert -stichig -stichst -sticht -sticken -stickig -stickst -stickt -stickte -stiebe -stiebst -stiebt -stiefle -stiegen -stiegst -stiegt -stiehlt -stiere -stieren -stierst -stierte -stiess -stifte -stiften -stiftet -still -stillem -stiller -stilles -stillos -stillst -stillt -stillte -stimmen -stimmte -stockte -sthne -sthnt -stren -strst -strte -stsst -stolz -stolzen -stolzer -stolzes -stopfte -stossen -streben -strebt -streng -stren -streute -strikte -strme -strmt -stlpe -stlpt -strmt -strze -strzt -stumm -stumme -stummem -stummer -stummes -stumpf -stumpfe -stupid -stupide -stupse -stupsen -stupst -stupste -sturem -sturen -sturer -stures -sturste -stutze -stutzig -stutzt -stutzte -subtil -subtile -suchen -suchst -sucht -suchte -sudelig -sudeln -sudelnd -sudelst -sudelte -sudle -surre -surrst -surrt -surrten -surrtet -swingen -syrisch -tadelnd -tadelst -tadelt -tfeln -tfelt -tfle -tndle -tte -tten -ttige -ttigt -tafeln -tafelst -tafelt -tafelte -tafle -tagein -tagende -tagst -tagte -tagtest -tagtet -takeln -takelnd -takelst -takelte -takle -talentl -talgig -talgige -tanken -tankend -tankst -tankte -tankten -tantig -tanze -tanzend -tanzest -tanzt -tanzten -tanztet -tapfer -tapfere -tappe -tappen -tappend -tappt -tappte -tappten -tapptet -tapse -tapsen -tapsig -tapsige -tapst -tapste -tapsten -tapstet -tariere -tariert -tarnen -tarnend -tarnst -tarnte -tarnten -tasten -tastend -tastet -tastete -tatet -tatst -taubem -tauber -taubere -taubste -tauchen -taucht -tauchte -tan -tande -taufe -taufen -taufend -tauft -taufte -tauften -tauftet -tauge -taugen -taugst -taugt -taugte -taugtet -taumelt -tausche -tauscht -taust -taute -tautest -tautet -taxiert -teere -teeren -teerst -teert -teerten -teertet -teigig -teigige -teilbar -teilend -teils -teilt -teilte -teilten -teiltet -terbuch -testen -testend -testest -testete -ter -teren -teure -teurem -teurer -teurere -teures -texte -thronen -thronst -thronte -ticken -tickend -tickst -tickte -tickten -tiefen -tiefere -tiefes -tiefste -tilgbar -tilge -tilgen -tilgend -tilgt -tilgte -tilgten -tilgtet -tippe -tippeln -tippelt -tippend -tippst -tippt -tippte -tipptet -tische -tischen -toaste -toasten -toastet -tobend -tobende -tobte -tobten -tobtet -tne -tnen -tnend -tnst -tnten -tten -ttend -ttest -ttete -tolle -tollen -toller -tollere -tolles -tollst -tollte -tollten -tonlos -tonlose -topfit -torkeln -torkle -torlos -torlose -tosen -tosend -tosende -tosest -toste -tosten -tostest -total -totale -totalen -totaler -totales -toten -toter -totes -trabe -traben -trachte -trfe -trge -trgen -trger -trges -trgst -trgt -trnen -trnke -trnkt -trume -trumt -trafen -traff -traffen -tragbar -trage -tragend -trample -trank -tranken -trapple -traten -tratet -tra -tran -trare -trarn -trart -traurig -traust -traut -trauten -trauter -trautes -trautet -trecken -treckst -treckte -treffe -treffen -treibe -treibst -treibt -trenne -trennst -trennt -treten -tretend -tren -trer -tres -treulos -triebe -trieben -triebet -triebst -triefe -triefen -triefst -triefte -triffst -trifft -triftig -trimme -trimmen -trimmt -trimmte -trink -trinke -trinken -trinkt -tripple -tristen -trittst -trivia -trivial -trocken -trste -trolle -trollst -trollt -trommle -tropft -trotte -trotten -trottet -trotz -trotze -trotzen -trotzig -trotzt -trotzte -trudeln -trudelt -trudle -trbe -trbem -trben -trber -trbes -trbt -trbte -trge -trgst -trgt -trugen -trugt -trumpfe -trumpft -trunken -ttem -tnche -tncht -tnd -tnde -tnden -tndes -trmen -trmst -trmte -tummeln -tummelt -tummle -tunke -tunkend -tunkst -tunkt -tunkten -tunktet -tupfe -tupfend -tupfst -tupfte -tupften -turne -turnen -turnend -turnst -turnt -turnten -turntet -tusche -tuschst -tuscht -tuten -tutende -tutest -tutet -tutete -tutetet -tutti -ben -bende -berr -bers -blem -blen -bler -bles -blich -brig -brige -bst -bte -btest -btet -ppig -ulkend -ulkende -ulkig -ulkige -ulkigen -ulkiger -ulkst -ulkten -ulktest -ulktet -umarmen -umarmst -umarmte -umban -umdreht -umfange -umfasst -umflog -umgaben -umgabet -umgabst -umgebe -umgehe -umgehst -umgeht -umgibst -umgibt -umhaben -umhan -umher -umhin -umkippt -umlegen -umlief -umpolen -umrahme -umrahmt -umrande -umranke -umrankt -umrenne -umrennt -umringe -umringt -umsah -umsegle -umsieht -umsonst -umspann -umtun -umwarb -umwarf -umwerbe -umzog -unartig -unbar -unbaren -uneben -unebene -unecht -unechte -unedel -unedlem -unedlen -unedler -unfair -unfei -unfein -unfeine -unfrei -ungern -ungut -ungute -ungutes -unklar -unklug -unlieb -unmg -unntz -unrecht -unreell -unreif -unreife -unrein -unruhig -unser -unsere -unserem -unseren -unserer -unseres -unserm -unsrige -unstet -unstete -unten -unter -untere -unterem -unteres -unterm -untern -unterst -untief -untreu -unwahr -unwahre -unweit -unwohl -uraltem -uralten -uralter -urbane -urbanem -urbanen -urbanes -ureigen -urteile -vagen -vager -verarge -verargt -verarme -verbal -verband -verbarg -verbat -verba -verbaut -verbiss -verbog -verbot -verdarb -verda -verdaut -verebbe -verebbt -verehre -vereine -vereist -verende -verenge -verengt -vererbe -vererbt -verfeme -verfemt -verfiel -verflog -verfolg -verfror -vergabt -vergebe -vergibt -vergilt -verging -vergiss -vergoss -vergrub -verh -verhalf -verhexe -verhext -verirre -verirrt -verjagt -verkam -verkamt -verkauf -verlade -verlass -verlebe -verlebt -verlege -verlegt -verleih -verlese -verlief -verlieh -verlist -verlobe -verlobt -verlort -verlose -verlost -vermag -vermass -vermerk -vermied -vermint -vermute -vernahm -verrt -verran -verrann -verrate -verriss -verrohe -verroht -versage -versagt -versah -versa -versaut -versehe -versoff -versp -vertont -vertrat -vertrug -verbe -verbt -verwarf -verwehe -verweis -verwese -verwest -verwies -verzage -verzieh -vespere -vespern -vielem -vielen -vieler -vieles -viermal -vierten -vierter -viertes -vierzig -violett -visiere -visiert -vital -vitalem -vitalen -vitaler -vitales -vgeln -vllig -volatil -vollauf -vollem -vollen -voller -vollere -volles -vollzog -vollzug -vorab -voran -vordem -vorder -vorgibt -vorging -vorhabe -vorhat -vorher -vorig -vorigem -voriger -voriges -vorlas -vorlaut -vornahm -vorne -vornehm -vorwarf -vulgr -wache -wachen -wachend -wacher -waches -wachsam -wachse -wachsen -wacht -wachte -wachtet -wackelt -wacker -wacklig -wchst -wgbar -wgen -wgst -wgt -whle -whlen -whlst -whlt -whnen -whnst -whnte -whre -whren -whrst -whrt -wlze -wlzen -wlzt -wlzte -wre -wrme -wrmen -wrmst -wrmt -wrmte -waffnen -wagend -wagst -wagte -wagtest -wagtet -wahllos -wahrer -wahrere -wahres -wahrste -waldig -waldige -walle -wallst -wallt -wallten -walltet -walten -waltest -waltet -waltete -walze -walzend -walzt -walzte -walzten -walztet -wandelt -wandere -wandern -wandert -wandest -wandet -wandte -wandten -wanke -wankend -wankst -wankt -wankten -wanktet -wappne -wappnen -wappnet -warbst -warbtet -warfen -warfst -warme -warmem -warmer -warmes -warnen -warnt -warnte -warte -wartend -wartet -wartete -warzig -warzige -wasche -wassert -waten -watende -water -watest -watet -wateten -watetet -weben -webend -webte -webten -webtet -wechsle -wecke -weckend -weckst -weckt -weckten -wecktet -wedeln -wedelnd -wedelst -wedelte -weder -wedle -wegen -wegsein -wegtun -wehende -wehre -wehren -wehrlos -wehrst -wehrt -wehrten -wehrtet -wehte -wehten -wehtet -weich -weiche -weichem -weicher -weiches -weichst -weichte -weiden -weidend -weidet -weidete -weigere -weigern -weigert -weiland -weilend -weils -weilst -weilte -weilten -weine -weinen -weinend -weinrot -weint -weinte -weinten -weintet -weisem -weiser -weisere -weises -weiss -weisse -weissen -weisser -weisst -weisste -weist -weitab -weite -weitem -weiter -weitere -weitern -weites -weitete -weither -weithin -welch -welche -welcher -welches -welkem -welken -welkend -welkere -welkes -welkst -welkt -welkte -welkten -welktet -wellend -wellig -wellige -wenden -wendend -wendest -wendete -wendig -wendige -wenig -wenige -wenigem -weniger -weniges -wenns -werben -werbt -werde -werdend -werdet -werfe -werfend -werken -werkend -werkst -werkte -werkten -werktet -wertend -wertest -wertet -wertete -wertlos -wesen -wessen -wettern -wettest -wettet -wettete -wetze -wetzen -wetzend -wetzt -wetzte -wetzten -wetztet -wichen -wichse -wichsen -wichst -wichste -wicht -wichtig -wickeln -wickle -wider -widme -widmen -widmest -widmet -widmete -widrig -wieder -wiegen -wiegend -wiegt -wiegte -wiegten -wiegtet -wiehere -wiehern -wiehert -wiesest -wieset -wieviel -wieweit -wilde -wildem -wilder -wildere -wildern -willen -willig -willige -willst -wimme -wimmelt -wimmern -winde -winden -windest -windet -windig -winken -winkend -winkst -winkt -winkten -winktet -winselt -winzig -winzige -wippen -wippst -wippt -wippten -wipptet -wirbst -wirfst -wirke -wirken -wirkend -wirksam -wirkst -wirkt -wirkte -wirktet -wirrem -wirren -wirrer -wirres -wirrste -wische -wischst -wischte -wispern -wissbar -wisse -wissen -wisst -wisst -wittert -witzeln -witzig -witzige -witzle -wlbe -wlben -wlbst -wlbt -wlbte -wofern -wogegen -wogst -woher -wohlau -wohler -wohlere -wohles -wohlig -wohlige -wohlt -wohltun -wohnend -wohnst -wohnte -wohnten -wolkige -wollend -wollige -wollt -wollte -wolltet -womit -wonnig -wonnige -worden -worin -wortarm -wortlos -worum -wrang -wringe -wringst -wringt -wuchern -wuchert -wuchs -wuchst -wuchte -wuchten -wuchtet -wuchtig -whle -whlt -whlte -wrden -wrdet -wrfle -wrge -wrgen -wrgst -wrgt -wrgte -wrze -wrzig -wrzst -wrzt -wste -wstem -wsten -wstes -wten -wtend -wtest -wtete -wunde -wundem -wunden -wundert -wurde -wurdet -wurme -wurmen -wurmt -wurmte -wurmten -wurmtet -wurstle -wurzeln -wurzelt -wurzle -wusch -wuseln -wussten -wusstet -zackig -zher -zhle -zhlst -zhlt -zhmen -zhmst -zhmte -zune -zaghaft -zahlbar -zahle -zahlend -zahlst -zahlt -zahlten -zahltet -zahmem -zahmen -zahmer -zahmes -zahmste -zanke -zankend -zankst -zankt -zankten -zanktet -zapfte -zappeln -zappelt -zapple -zarte -zartem -zarter -zartere -zartes -zaubere -zaubern -zaubert -zaudern -zehnten -zehnter -zehren -zehrt -zeichne -zeige -zeigend -zeigst -zeigt -zeigten -zeigtet -zeitig -zeitige -zeitigt -zelten -zeltend -zeltet -zeltete -zerfiel -zergehe -zergeht -zerging -zerka -zerkaut -zerrann -zerren -zerrieb -zerriss -zerrt -zerrte -zerrten -zerrtet -zertrat -zetere -zeternd -zeterst -zetert -zeugend -zeugst -zeugt -zeugten -zeugtet -ziehe -ziehen -ziehst -zielen -zielend -zielst -zielt -zielte -zieltet -zieme -ziemend -ziemt -ziemte -ziemten -ziemtet -ziere -zieren -zierst -ziert -zierte -ziertet -zigsten -zikelte -zimmern -zimmert -zinkig -zinnern -zinnrot -zinslos -zirkeln -zirkelt -zirkle -zirpen -zirpt -zirpte -zirpten -zischen -zischle -zischt -zischte -zitiere -zitiert -zittere -zittern -zittert -zivil -zivile -zivilem -ziviler -ziviles -zgere -zllig -zogen -zoget -zogst -zollen -zollend -zollst -zollte -zollten -zopfig -zornig -zornige -zotig -zotige -zotigem -zotiger -zotiges -zottig -zucke -zuckend -zuckere -zuckern -zuckert -zuckt -zuckte -zuckten -zucktet -zudem -zchte -zcken -zckst -zckte -zge -zgelt -zgle -znden -zndet -zrne -zrnen -zrnst -zrnt -zrst -zufahrt -zufiel -zufolge -zufgt -zugab -zugaben -zugang -zugeben -zugegen -zugehen -zugeht -zugige -zugigem -zugigen -zugiges -zuging -zugute -zuhaben -zuhan -zuhrt -zukomme -zukommt -zulasse -zulegen -zulegt -zuletzt -zuliess -zumal -zumuten -zunutze -zupfe -zupfen -zupfend -zupft -zupfte -zupften -zupftet -zuraten -zureden -zurck -zurufen -zurzeit -zusagen -zusah -zusehen -zusieht -zusteht -zutage -zuteil -zutraut -zutnd -zuviel -zuviele -zuwege -zuweist -zuwende -zuwenig -zuwider -zwang -zwangen -zwangst -zwanzig -zweier -zweifle -zweigte -zweimal -zweit -zweite -zweitem -zweiter -zwicken -zwickst -zwickte -zwingen -zwingt -zwirnst -zwirnte -zwlf -Aermel -Aetzen -Abfalle -Abfluss -Abstand -Achse -Adresse -After -Ahorn -Alkohol -Alter -Ameise -Angel -Anker -Antwort -Anzeige -Apfel -Arbeit -Armee -Armel -Artikel -Artzt -Asche -Asien -Atzen -Aufgabe -Aufruhr -Ausgabe -Ausland -Backe -Ballon -Bambus -Banane -Bausch -Becher -Beere -Befehl -Behorde -Beifall -Bericht -Beruf -Besen -Besitz -Beule -Beweis -Biene -Birne -Blase -Blatt -Blitz -Block -Blume -Boden -Bogen -Bohne -Bohrer -Bombe -Breite -Bremse -Brett -Brief -Brille -Bronze -Brcke -Brucke -Bruder -Brust -Bchse -Bndel -Brger -Bro -Brste -Buchse -Bucht -Bundel -Burger -Burste -Busch -Busen -Butter -Chlor -Dampf -Dattel -Datum -Dar -Daumen -Decke -Deckel -Detail -Dichte -Dicke -Donner -Drache -Draht -Drama -Dreieck -Drucker -Dunst -Dusche -Ebene -Eiche -Eimer -Eisen -Elefant -Eltern -Energie -Engel -Epoche -Erbse -Erdnuss -Erdl -Erdol -Erfolg -Ernte -Ersatz -Essen -Essig -Etappe -Etikett -Fcher -Fabrik -Facher -Faden -Fahne -Fahrrad -Fahrt -Fahrzug -Falle -Familie -Farbe -Farbton -Faser -Feder -Fehler -Feige -Feile -Feind -Feldzug -Fenster -Ferne -Ferse -Fer -Fieber -Finger -Fisch -Flche -Flache -Flasche -Fleck -Fleisch -Flicken -Fliege -Flocke -Flgel -Flugel -Fluss -Folge -Frage -Freitag -Fremd -Freund -Friede -Frosch -Frucht -Fuchs -Furche -Furwort -Gabel -Gardine -Garten -Gasthof -Gattung -Gebaude -Geburt -Gedarme -Gedicht -Geduld -Gefahr -Gegend -Geist -Gericht -Gerippe -Gesetz -Gesicht -Gestalt -Gestell -Gesten -Gestern -Getrank -Gewand -Gewebe -Gewehr -Gewicht -Gewinn -Gewolbe -Gewurtz -Ginseng -Gitarre -Gitter -Glocke -Gnade -Grenze -Griff -Grille -Grsse -Grosse -Grund -Gruppe -Grtel -Gummi -Gurke -Gurtel -Hacke -Hafen -Hafer -Hagel -Haken -Hammer -Handel -Haufen -Haupt -Hebel -Henkel -Herbst -Heute -Hilfs -Himmel -Hirsch -Hhe -Hhle -Hlle -Hockey -Hohle -Holle -Honig -Hotel -Hfte -Hgel -Hlse -Hufte -Hugel -Hulse -Human -Hummer -Ingwer -Insekt -Insel -Jacke -Junge -Juwel -Kfig -Kse -Kabel -Kaffee -Kafig -Kaktus -Kalium -Kalzium -Kamel -Kamera -Kamin -Kampf -Kanal -Kanone -Kapitel -Karotte -Karren -Karte -Karton -Kasten -Katze -Kegel -Kehle -Keller -Kerbe -Kerze -Kette -Keule -Kiefer -Kirche -Kirsche -Kissen -Klappe -Klasse -Klinge -Klippe -Klosett -Klotz -Klumpen -Kneipe -Knochen -Knopf -Knoten -Knig -Krper -Kohle -Kolibri -Kolonie -Komet -Konig -Konigin -Konto -Konus -Korper -Krhe -Kraft -Kragen -Krahe -Kredit -Kreide -Kreis -Kreuz -Krieg -Kche -Krbis -Kuche -Kugel -Kultur -Kummer -Kunst -Kupfer -Kuppel -Kurbis -Kurve -Lnge -Ladung -Lager -Laken -Lampe -Lange -Laufe -Laune -Leber -Leder -Leiter -Licht -Linie -Linse -Lippe -Lffel -Lsung -Lwe -Loffel -Logik -Losung -Lunge -Macht -Madchen -Magen -Magnet -Makel -Mantel -Markt -Masche -Materie -Mar -Maximum -Medizin -Meinung -Menge -Mensch -Messer -Messing -Metall -Methode -Milch -Million -Mineral -Minimum -Minute -Minze -Mitlaut -Mittag -Mitten -Mbel -Mobel -Molekul -Monat -Montag -Morgen -Motor -Mhle -Mll -Mnze -Muhle -Munze -Musik -Muskel -Muster -Mutter -Nabel -Nachbar -Nacht -Nadel -Nagel -Nation -Natrium -Natur -Nebel -Negativ -Niere -Notiz -Nummer -Objekt -Offnung -Olive -Onkel -Orange -Organ -Ozean -Paddel -Paket -Papagei -Papier -Paprika -Partei -Partie -Partner -Pedal -Pendel -Periode -Person -Pfahl -Pfanne -Pfeffer -Pfeil -Pferd -Pflanze -Pflaume -Pflug -Photo -Pinsel -Planet -Platte -Politik -Polizei -Positiv -Prfix -Prmie -Prafix -Pramie -Praxis -Preis -Problem -Project -Prosa -Protest -Provinz -Prozess -Pulver -Pumpe -Puppe -Quadrat -Quarz -Rache -Rahmen -Rakete -Ranke -Rauch -Raufe -Rechen -Recht -Regal -Regel -Regen -Reihe -Reklame -Richten -Riemen -Rinne -Ritual -Ritus -Roggen -Rolle -Rcken -Rucken -Rumpf -Runzel -Sge -Saeule -Saite -Salat -Samen -Samstag -Saule -Schabe -Schach -Schadel -Schaf -Schal -Schale -Scham -Schande -Schar -Schaum -Scheck -Scheibe -Scheide -Schere -Schicht -Schiff -Schild -Schlag -Schlamm -Schleim -Schlich -Schlitz -Schloss -Schmuck -Schnee -Schub -Schuh -Schuld -Schule -Schurze -Schwamm -Schwan -Schwanz -Schwein -Schwert -Seele -Seetang -Segel -Sehne -Seide -Seife -Seite -Sekunde -Sense -Sesam -Silbe -Socke -Soldat -Sommer -Sonne -Sonntag -Sorge -Spalte -Spass -Speer -Sphre -Sphare -Spiegel -Spiel -Spinat -Spinne -Spirale -Spitze -Sprache -Spritze -Spross -Spule -Stachel -Stadt -Stadter -Stahl -Stamm -Stander -Stange -Station -Staub -Stein -Stern -Ster -Stimme -Stirn -Stoff -Stolz -Stopsel -Stoss -Strahl -Strand -Strasse -Streik -Strumpf -Stck -Stuck -Stuhl -Sturm -Subjekt -Sumpf -Suppe -System -Tabak -Tablett -Taille -Talent -Tante -Tasche -Tasse -Taube -Telefon -Teller -Tendenz -Tennis -Teppich -Termite -Theater -Thema -Theorie -Tiefe -Tiger -Tinte -Tisch -Tochter -Tomate -Tonhohe -Trne -Trane -Traum -Treppe -Trick -Trommel -Tropfen -Tulpe -Tyrann -bung -Ubung -Umwelt -Unfall -Unheil -Uniform -Unkraut -Urbild -Urkunde -Ursache -Urstoff -Vater -Ventil -Versuch -Vertrag -Viereck -Virus -Vogel -Vokal -Vorhang -Vorrat -Wrme -Wachs -Waffe -Wagen -Warme -Wasser -Watte -Weisser -Weizen -Welle -Weltall -Wetter -Winkel -Winter -Wipfel -Wirbel -Wissen -Woche -Wohnort -Wolke -Wolle -Wrfel -Wste -Wunde -Wunder -Wurfel -Wurst -Wurzel -Wuste -Zahnrad -Zange -Zeitung -Zelle -Ziege -Zimmer -Zinke -Zucker -Zufall -Zukunft -Zunge -Zustand -Zweig -Zwiebel -rgern -usser -abend -absagen -achten -ahnlich -andere -anstatt -argern -atmen -aussen -ausser -backen -ban -beended -beissen -bersten -beruhmt -bessern -beten -betonen -bevor -bewegen -bewusst -biegsam -billig -binden -bitte -bitten -bitter -blasen -bleiben -blind -blitzen -bld -blond -braun -brechen -breit -brennen -bringen -dafr -dafur -damals -dankbar -danken -darnd -deise -demutig -denken -dicht -dienen -dieser -dieses -doktor -drehen -drucken -dunkel -durch -eilen -einfach -einige -einmal -einsam -einzeln -einzig -enden -ernst -ernten -essen -facts -fallen -falsch -falten -fangen -fegen -fehlen -feiern -fertig -finden -flach -fleigen -flossen -folgen -foltern -fragen -fhlen -fhren -fuhlen -fuhren -geben -gebeugt -gefallt -geheim -gehen -genau -geneigt -genug -gerade -gerecht -gesund -gierig -giessen -glatt -glauben -gleich -gleiten -graben -gross -grn -hufig -haben -haften -halten -hangen -hassen -haufig -heben -heilig -helfen -heruber -hindern -hinein -hinter -hitzig -hren -hocken -hoffen -holen -horen -hten -hunderd -husten -huten -immer -inner -jagen -jeden -jemals -jetzt -jucken -keuhl -kaufen -kehren -keine -kennen -klein -kleiner -knien -knen -kochen -komisch -kommen -konen -konkav -konvex -kssen -kurze -kurzem -kussen -lacheln -lachen -lange -langem -langsam -lassen -laufen -leben -lehren -leicht -leihen -lernen -lesen -letzte -leugnen -lieben -liegen -linke -loben -locker -lgen -lugen -machen -mager -mahlen -mangelt -meist -meisten -merken -messen -mischen -mittels -moglich -mde -nhen -nachste -nackt -nahen -neben -nehmen -neutral -nicht -niedrig -niesen -normal -obskur -orange -ordnen -perfekt -pfeifen -platt -primr -primar -privat -prfen -prufen -prugeln -recht -regeln -reiben -reich -reichen -reiten -retten -richtig -riesig -ringen -rollen -rufen -ruhig -sagen -sanft -sauber -sar -saugen -schaben -scharf -schlaff -schnell -schn -schon -schwach -schwer -sechs -segnen -sehen -seicht -selbe -selten -senden -sicher -sieben -sieden -singen -sinken -sitzen -slank -solid -sollen -spt -sparsam -spielen -spitz -spucken -starr -stechen -stehen -stehlen -steif -stellen -sterben -still -stossen -strafen -straff -streng -stromen -stumm -stumpf -stutzen -sss -suchen -tanzen -tausend -teilen -tten -toricht -toten -tragen -tran -treffen -treiben -treten -trinken -trocken -tropfen -bel -ber -unten -unter -viele -whlen -wachsam -wachsen -wahlen -wahrend -wandern -warnen -warten -warum -waschen -wassrig -weben -wegen -wehen -weich -weinen -weise -weiss -weiter -wenig -wenige -weniger -werden -werfen -wichtig -wickeln -wieviel -winzig -wischen -wissen -wohnen -wollen -zhlen -zahlen -zeigen -zeitig -ziehen -zielen -zornig -zucken -zugeben -zurck -zuruck -Aendern -Aerger -Aesten -Abbau -Abbaus -Abbild -Abbruch -Abende -Abenden -Abfahrt -Abfall -Abfalls -Abflug -Abfolge -Abfrage -Abgabe -Abgang -Abgehen -Abgriff -Abgrund -Abhilfe -Ablage -Ablagen -Ablauf -Ablaufs -Ablegen -Ableger -Ablesen -Abnahme -Abreise -Abrieb -Abruf -Abrufen -Absage -Absatz -Absicht -Abstand -Absturz -Abteil -Abteile -Abzug -Aceton -Achse -Achseln -Achsen -Achtung -Adamek -Adelung -Adern -Adresse -Adria -Aegide -Agonie -Ahnung -Akkus -Akten -Aktion -Aktiv -Aktiva -Aktive -Aktor -Aktoren -Akzent -Alarme -Allee -Alleen -Allein -Alles -Alltag -Altlast -Altl -Ameise -Ameisen -Analoge -Anbei -Anblick -Andere -Anfahrt -Anfang -Anfrage -Angabe -Angaben -Angeber -Angebot -Angriff -Anhalt -Anhand -Anhang -Anheben -Anhhe -Ankauf -Anker -Ankern -Ankers -Anklang -Ankunft -Anlage -Anlagen -Anla -Anllo -Annahme -Anrecht -Anreise -Anreiz -Anruf -Anrufen -Ansatz -Ansicht -Anstatt -Anstieg -Anteil -Anteile -Antenne -Antike -Antrag -Antrieb -Antritt -Antwort -Anwahl -Anzahl -Anzeige -Anzug -Apparat -Appetit -Araldit -Arbeit -Archiv -Arkaden -Armen -Arten -Artikel -Aspekt -Aspekte -Asterix -Atari -Atemnot -Atmen -Aufbau -Aufgabe -Auflage -Aufri -Aufruf -Aufsatz -Auftrag -Aufwand -Augen -Aussen -Ausser -Ausbau -Ausbaus -Ausfall -Ausflug -Ausgabe -Ausgang -Ausland -Ausma -Ausrede -Aussage -Auswahl -Ausweg -Ausweis -Auszug -Autor -Autoren -Autors -Blde -Bnden -Bnder -Bnke -Bnken -Bume -Backe -Backen -Bahnhof -Baiser -Balken -Balluff -Baltes -Banalen -Banane -Bande -Bandes -Baracke -Barcode -Barke -Barken -Barmag -Basar -Bassin -Bauart -Bauch -Barn -Bauform -Baumes -Baums -Bauteil -Bauwerk -Bayern -Beachte -Beamten -Bedarf -Beenden -Beere -Befehl -Befehle -Beginn -Beginne -Beginnt -Begriff -Behoben -Beide -Beiden -Beifall -Beilage -Beinahe -Beine -Beinen -Beitrag -Beleg -Belege -Beleges -Belegs -Belgien -Benutzt -Bereich -Bereits -Bergbau -Berge -Berges -Bergler -Bericht -Bernd -Bersten -Beruf -Besitz -Besitzt -Besser -Bessere -Bestand -Besteck -Bestie -Bestnr -Besuch -Besuche -Besuchs -Beton -Betons -Betrag -Betreff -Betrieb -Beute -Bevor -Bewegen -Beweis -Bezieht -Bezirke -Bezirks -Bezug -Bibel -Biegung -Bilanz -Bilden -Bilder -Bildern -Bildung -Billard -Binre -Binden -Bindung -Bisher -Bitte -Bittner -Bizeps -Blase -Blasen -Blatt -Blatte -Bla -Blech -Bleche -Bleiben -Bleibt -Bleiche -Blick -Blicke -Blinken -Blitze -Blitzen -Blcke -Blocken -Blo -Blten -Blume -Blumen -Bck -Bmken -Bochum -Boden -Bodens -Bwe -Bohren -Bohrung -Bolenz -Bombe -Bonmot -Boote -Booten -Bosse -Boten -Boxen -Brand -Braten -Bra -Bran -Breit -Breite -Breiten -Bremsen -Briefe -Briefen -Briefes -Brikett -Brille -Bringen -Brote -Brche -Brcke -Brder -Bruch -Bruder -Brunnen -Brust -Bgel -Bgels -Brde -Bro -Bros -Buben -Buchse -Buchsen -Buchst -Buckel -Bummel -Busen -Busse -Bussen -Cadmus -Cerchar -Chancen -Charge -Chargen -Charme -Chassis -Chefin -Chemie -Clippen -Coaten -Cocteau -Compaq -ConM4 -Conm4 -Connor -Consol -Creme -Crimpen -Dcher -Dabei -Dachau -Dadurch -Dafr -Dagegen -Daher -Damals -Damen -Damit -Dampf -Danach -Daneben -Dankbar -Danke -Darauf -Daraus -Darin -Daseins -Datei -Dateien -Daten -Datex -Datteln -Datum -Datums -Dar -Daumen -Daumens -Davon -Davor -Decke -Deckel -Deckels -Decken -Deckung -Defekt -Defekte -Denken -Denker -Dennoch -Deren -Derlei -Derzeit -Deshalb -Desktop -Dessen -Detlev -Dezimal -Dialoge -Dichte -Dicke -Diebe -Dienst -Diese -Diesen -Dieser -Dieses -Diesmal -Diktat -Dinge -Dingen -Diobits -Dioden -Display -Distanz -Disteln -Diwan -Dolch -Donau -Dongl -Dongle -Doppel -Dorfe -Drhte -Drache -Drachen -Draht -Dreck -Drehen -Drehung -Dresden -Drinnen -Dritte -Drohung -Drossel -Drcke -Druck -Drucke -Drucken -Drucker -Druckt -Dse -Dlle -Dumme -Dunkeln -Dunst -Durch -Durst -Duschen -Dutzend -Dynamik -Dynamit -Ebene -Ebenen -Ebenso -Echolot -Eckchen -Ecken -Eckige -Effekt -Effekte -Effekts -Ehren -Eichamt -Eichung -Eigenem -Eigenes -Eimer -Einbau -Einem -Einen -Einer -Eines -Eingabe -Eingang -Einheit -Einige -Einiges -Einkauf -Einkehr -Einmal -Einsatz -Einst -Eintrag -Einwand -Einzel -Einzeln -Einzig -Einzige -Eisbar -Eisen -Eisiges -Element -Eltern -Empfang -Empore -Endlage -Endlich -Endtest -Energie -Enkelin -Entlang -Entwurf -Enzmann -Epoxi -Epoxyd -Eprom -Eproms -Epson -Erdl -Erdung -Erfolg -Erfolgt -Ergeben -Erhalt -Erhht -Ernte -Erotik -Ersetzt -Erste -Erstens -Erstes -Erstmal -Ertrag -Erzeugt -Etage -Etikett -Exakte -Exempel -Externe -Fcher -Fhre -Flle -Fllen -Fllt -Fabrik -Faden -Fafner -Fahne -Fahren -Fahrer -Fahrers -Fahrt -Fahrten -Faible -Fakten -Faktor -Faktors -Falle -Falsch -Falsche -Falte -Familie -Fangen -Farbe -Farben -Fassade -Fassung -Februar -Feder -Federn -Fehler -Fehlern -Fehlers -Fehlt -Feilen -Feind -Feiner -Felder -Feldern -Feldes -Felds -Felsen -Fenster -Ferien -Fersen -Fertig -Fertige -Fibel -Figur -Filiale -Filme -Filtern -Filzhut -Finden -Fingern -Firma -Firmen -Firste -Fisch -Fische -Flche -Flach -Flammen -Flanke -Flanken -Flansch -Flasche -Fleisch -Fliegen -Fliesen -Flz -Flucht -Fluid -Fluten -Fhn -Folge -Folgen -Folie -Folien -Folter -Foltern -Fordere -Formale -Formel -Formeln -Formen -Forst -Fortan -Fotos -Frse -Frack -Frage -Fragen -Fratzen -Fran -Freie -Freitag -Fresken -Fresse -Freude -Freuden -Freund -Freunde -Friede -Frieden -Friseur -Frist -Frisur -Frohes -Frh -Frher -Frhes -Fchsl -Fhler -Fhlt -Fhrt -Fllen -Frst -Fsse -Fssen -Fugen -Fugger -Fuhre -Funke -Funken -Fusse -Gnge -Gste -Gsten -Gabel -Gaben -Gabun -Gange -Ganze -Ganzes -Gasen -Gasteig -Gattern -Gattin -Gauner -Getzt -Gebeine -Geben -Geber -Gebers -Gebete -Gebiet -Gebinde -Gebirge -Gebot -Gebrumm -Gedacht -Gedanke -Geduld -Gefahr -Gefecht -Gefolge -Gefhl -Gegeben -Gegen -Gegend -Gegner -Gegners -Gehabe -Gehen -Gehirn -Gehirne -Gehrs -Gehupe -Gehweg -Gehwege -Geifer -Geist -Geiste -Gelaber -Gelenk -Geltung -Gemahl -Genau -Gena -Genauso -Gert -Gerte -Gerts -Geraden -Gericht -Gerne -Gesamt -Gesetz -Gesicht -Gestank -Geste -Gestein -Gestell -Gesten -Gestirn -Gewalt -Gewicht -Gewinde -Gewhl -Gipfel -Gitters -Glser -Glanz -Glaube -Glauben -Glaubst -Gleich -Glied -Glieder -Glimmen -Glocke -Glocken -Glck -Gtzen -Gondel -Gondeln -Gosmann -Gottes -Grafik -Graphik -Grases -Greifer -Greift -Greis -Greise -Gremium -Grenze -Grenzen -Grel -Griff -Grinsen -Grsse -Grsse -Grobian -Gro -Grosse -Grn -Grnde -Grsse -Grube -Gruben -Grund -Grunde -Gruppe -Gruppen -Gru -Gte -Gummi -Gunst -Gunsten -Gutes -Hfen -Hlfte -Hlt -Hnde -Hnden -Hrte -Hrten -Hrter -Haben -Hafen -Haften -Haftung -Halbdot -Halde -Halden -Halfdot -Halle -Hallo -Halme -Haltung -Haniel -Hanke -Hannes -Harald -Harzen -Haube -Hauben -Hauch -Haufen -Haupt -Haupte -Hause -Hauses -Hebamme -Hebel -Heben -Hecke -Hecken -Hefte -Heftes -Heiden -Heilsam -Heilung -Heimat -Heimweg -Heizen -Heizung -Helden -Helme -Hemden -Henkeln -Heraus -Herbst -Herbste -Heringe -Herren -Herrn -Herst -Herzen -Herzens -Heureka -Heute -Hexdump -Hexerei -Hierbei -Hierein -Hiermit -Hiervon -Hierzu -Hilfe -Hilfen -Hilfs -Hilger -Himmel -Hintern -Hinweis -Hitze -Hber -Hhe -Hhen -Hhlen -Hlle -Hrer -Hsch -Hobel -Hobeln -Hobels -Hocke -Hockern -Hoden -Hchst -Hsch -Hoher -Honig -Hosen -Hbe -Hben -Hhner -Hlle -Hlse -Hlsen -Hpfer -Htte -Hubende -Hubes -Hundert -Hupen -Husaren -Huster -Hypnose -Ideen -Idioten -Ihnen -Ihrem -Ihren -Ihrer -Ihres -Ikone -Immer -Impuls -Inhalt -Innen -Innere -Innern -Insel -Inseln -Interne -Irren -Irrsinn -Irrtum -Jachten -Jacke -Jahre -Jahren -Jahres -Januar -Jause -Jedem -Jeder -Jedes -Jedoch -Jetzige -Jetzt -Jeweils -Jrg -Jodler -Jrg -Jrgen -Jubel -Jugend -Jumpern -Juwel -Kfer -Kfern -Khnen -Klte -Kmmen -Kabel -Kabeln -Kabels -Kabine -Kamera -Kamin -Kammer -Kammern -Kampf -Kanle -Kanal -Kanals -Kanone -Kante -Kantine -Kanzel -Kanzlei -Kapazit -Kapital -Kapitel -Kappe -Kappen -Karos -Karre -Karte -Karten -Karton -Kartons -Kasse -Kassel -Kassen -Kasten -Katalog -Kater -Kathode -Katze -Katzen -Kauper -Kbyte -Kdnet -Kegel -Kehle -Keiler -Keine -Keinen -Keiner -Kellner -Kennung -Keramik -Kerbe -Kerle -Kerlen -Kerzen -Kette -Ketten -Keuchen -Keule -Kindern -Kinex -Kinos -Kippe -Kippung -Kirche -Kirchen -Kiste -Kisten -Kittel -Klren -Klage -Klammer -Klang -Klappe -Klappen -Klaps -Klasse -Klassen -Kleber -Kleid -Kleine -Klemme -Klemmen -Klenk -Klopfen -Kloster -Knabe -Knallen -Knien -Knierim -Knochen -Knopf -Knopfes -Knospen -Knoten -Knotens -Knig -Kpfe -Kpfen -Krper -Kochen -Koffer -Koffern -Kohle -Kohlen -Kolben -Kolbens -Kollege -Kolonie -Komfort -Kommas -Kommen -Konkret -Konkurs -Konsens -Konsol -Konsole -Konsul -Konsum -Kontakt -Konten -Kontext -Konto -Kontos -Kontron -Kontur -Konzept -Konzert -Koord -Kopfes -Kopie -Kopien -Korken -Kosten -Kotzen -Krfte -Krmer -Krabat -Krabben -Kragen -Kranke -Kratzer -Kraus -Kreide -Kreis -Kreise -Kreisen -Kreuz -Krieg -Krimi -Krimis -Kritik -Krger -Krumen -Kche -Khle -Khlen -Khn -Kken -Krze -Krzel -Kste -Ksten -Kubiak -Kuchen -Kufen -Kulanz -Kulisse -Kultur -Kumpel -Kunde -Kunden -Kunst -Kupfer -Kurhaus -Kurort -Kurpark -Kursiv -Kursor -Kurve -Kurven -Kurzer -Kurzum -Kussel -Ldt -Lnder -Lnge -Lngen -Lngs -Lrm -Lachen -Lacher -Ladegut -Lader -Ladung -Lafette -Lagen -Lagern -Lagune -Lampe -Lampen -Lande -Lanze -Lappen -Laschen -Lasnier -Lasten -Latchup -Latte -Laufe -Laufens -Laune -Leben -Leber -Leder -Leere -Leerung -Legende -Lehle -Lehrer -Lehrern -Leiber -Leiden -Leider -Leine -Leinen -Leipzig -Leiste -Leisten -Leiter -Leitern -Leitner -Leitung -Lenze -Lenzen -Lerne -Lernen -Lernens -Lesen -Lesung -Letzt -Letzte -Leucht -Leuchte -Leute -Leuten -Licht -Lider -Lidern -Liebe -Lieben -Lieber -Liebste -Liegen -Liegt -Lindner -Linie -Linien -Linkbit -Linken -Linkt -Lippe -Lippen -Liste -Listet -Litze -Litzen -Lizenz -Lcher -Lffel -Lhne -Lhnen -Lsche -Lsen -Lsung -Lten -Ltpin -Ltung -Lwe -Lwen -Lochs -Lochung -Locken -Lsche -Logbuch -Logik -Lokale -Lokales -Lothar -Lcke -Lcken -Lfte -Lften -Lgen -Lgner -Lke -Lnen -Lumpen -Lungen -Lyzeum -Lyzeums -Mngel -Mrz -Machart -Machen -Macht -Maffei -Mafioso -Magazin -Magen -Magnete -Magst -Mahnung -Mailand -Makro -Makros -Maler -Malerei -Malven -Manche -Mangel -Manne -Mannes -Manntag -Marke -Marken -Markt -Marktes -Marmor -Marne -Marsch -Masse -Massen -Maske -Masken -Masse -Massen -Materie -Matrose -Matsch -Marn -Maurer -Mbyte -Medien -Meere -Meeres -MegaBit -Mehrere -Meigs -Meine -Meiner -Meinung -Meissel -Meist -Meldung -Melodie -Melone -Membran -Mende -Menge -Mengen -Mensch -Mentrup -Merford -Merke -Merker -Merkmal -Merten -Messber -Messe -Messen -Messung -Metall -Meteore -Metern -Methode -Metzger -Miene -Mienen -Miete -Mieter -Mikro -Minicar -Minuten -Mipro -Mischer -Mittag -Mitte -Mittel -Mitteln -Mittels -Mchte -Modell -Modelle -Moden -Modul -Module -Modulen -Moduls -Mokka -Monat -Monate -Monaten -Monats -Montag -Morde -Mordio -Morgana -Mosaike -Motoren -Mrcnum -Mhe -Mller -Mtze -Muffe -Mulden -Mundart -Murmeln -Museen -Musik -Muskeln -Mustern -Muttern -Myriade -Nchte -Nhe -Nhere -Nachbar -Nachbau -Nachdem -Nacht -Nacken -Nadel -Nadeln -Nagel -Nahfeld -Namen -Namens -Nasen -Natur -Nawrath -Nebel -Neben -Neffe -Nehmen -Nehmt -Neige -Neigung -Nerven -Netze -Netzen -Netzes -Neubau -Nem -Ner -Nere -Nes -Nicht -Nichts -Niemand -Nieten -Nimmt -Nippel -Nische -Nischen -Niveau -Nixdorf -Nochmal -Nocken -Norden -Normale -Normen -Notar -Notars -Notaus -Noten -Nothalt -Notiz -Notizen -Nudeln -Nullen -Nummer -Nummern -Nuten -Nutzen -Nutzung -Oeffnen -Oeffner -Oeffnet -Oelen -Oberer -Obhut -Objekt -Objekte -Objekts -Obwohl -Ochse -Ocram -Offen -Offerte -Offline -Ohmsche -Ohren -Oktan -Oktaven -Oktober -Online -Opfer -Ordner -Ordnern -Ordnug -Ordnung -Otmar -Ouput -Ozeane -Pacht -Paella -Paket -Pakete -Paketen -Paketes -Palast -Palme -Palmen -Panik -Papagei -Papier -Papiere -Papiers -Papst -Parafin -Parfums -Parkett -Partei -Partie -Passiv -Pattex -Pausen -Pazifik -Pegel -Pegeln -Peltier -Pelze -Pendel -Pendels -Periode -Perlen -Pfade -Pfaller -Pfarrer -Pfeffer -Pfeil -Pfeile -Pferd -Pfiff -Pfister -Pflaume -Pflege -Pflicht -Pforten -Pfosten -Pfoten -Pfund -Pfunde -Phasen -Phono -Physik -Piepen -Piepsen -Piepser -Piezo -Pillen -Pinsel -Piraten -Piste -Pixel -Plne -Pltze -Plakat -Plakate -Planen -Planung -Plastik -Platine -Platten -Platz -Pleite -Pschl -Psie -Pohnke -Pointen -Polare -Polemik -Polen -Politik -Polizei -Polster -Poltern -Polymer -Polyol -Poren -Positiv -Posten -Pracht -Pranger -Pratze -Pratzen -Preise -Preisen -Preises -Presse -Pressen -Primr -Prinz -Prinzen -Prinzip -Proben -Probst -Produkt -Profil -Profils -Progamm -Projekt -Prozent -Prfen -Prfer -Puder -Puffern -Punkt -Punkte -Punkten -Punktes -Puppe -Puppen -Purpur -Pyjama -Quadrat -Quais -Quarz -Quarze -Quirl -Rtsel -Rume -Rumen -Rades -Rahmen -Rainen -Rakete -Ramdisk -Rampe -Rampen -Rande -Rascher -Raserei -Raten -Ratsche -Rauben -Raubens -Rauch -Rauchen -Raupe -Raupen -Rausch -Rechen -Rechner -Recht -Rechter -Recke -Reflexe -Regeln -Regen -Regie -Regler -Reglern -Reglers -Reibrad -Reibung -Reigen -Reihe -Reihen -Reine -Reineke -Reise -Reisen -Reklame -Rekord -Rekorde -Rennen -Renner -Rentner -Rexroth -Rialto -Richtig -Riedl -Riegel -Rieger -Riese -Riesen -Riesin -Rinden -Ringbau -Ringe -Ringes -Rinnen -Rippen -Risiko -Risse -Ritzel -Rivale -Rivalen -Rhre -Rhren -Robuste -Rodel -Rohre -Rolle -Romane -Romtest -Rotgu -Rcken -Rsten -Rubrik -Rufen -Rugby -Ruhmes -Runde -Runden -Sule -Sure -Sache -Sachen -Salven -Sammeln -Samstag -Sandale -Sattel -Satzung -Schach -Schacht -Schaden -Schal -Schall -Schalls -Schande -Schau -Schaum -Scheck -Schecks -Scheibe -Schei -Schemen -Schere -Scherer -Scher -Schicht -Schickt -Schiff -Schiffe -Schild -Schilda -Schilde -Schirm -Schirms -Schlaf -Schlag -Schlamm -Schluck -Schlupf -Schlu -Schmal -Schmerz -Schmuck -Schmutz -Schnee -Schneid -Schnitt -Schnur -Schober -Schock -Schopf -Schrank -Schreck -Schrei -Schrift -Schritt -Schroff -Schrott -Schub -Schubs -Schuhe -Schuhen -Schuld -Schule -Schu -Schutz -Schwall -Schwamm -Schwarm -Schwarz -Schweiz -Schwelm -Schwenk -Schwere -Schwert -Schwing -Schwung -Sechsen -Sedeme -Seefunk -Seele -Segeln -Segen -Seide -Seife -Seile -Seilzug -Seins -Seitdem -Seite -Seiten -Seither -Sektors -Sekunde -Selbst -Sende -Senden -Sendens -Sendung -Senken -Senkung -Sequenz -Serie -Seriell -Serien -Sessel -Setze -Setzen -Setzt -Seufzer -Shaneor -Sicher -Sichern -Sicht -Sichten -Siehe -Signale -Silan -Silikon -Sinne -Sitten -Sitzung -Skala -Skandal -Skelett -Skizze -Skizzen -Skonto -Sobald -Socke -Sockel -Sockeln -Socken -Sodann -Sofort -Sofware -Sohle -Sohlen -Solarim -Solche -Sollen -Sollte -Sollten -Solvay -Somit -Sommer -Sommers -Sonne -Sonnen -Sonntag -Sonst -Sorge -Sorte -Sorten -Sowohl -Spnen -Spter -Spalte -Spalten -Spanne -Spannen -Sparre -Spa -Sperre -Sperren -Spezies -Spielen -Spirale -Spitze -Sprle -Sporns -Sprache -Spreti -Spritze -Sprudel -Spucke -Spule -Spulen -Spuren -Strke -Stadion -Stadt -Staffel -Stamm -Standes -Stange -Stangen -Stanzen -Stapel -Starte -Starten -Startet -Stativ -Statt -Staub -Staunen -Stecker -Steffi -Stege -Stegen -Steht -Steine -Steinen -Stelle -Stellen -Stempel -Stengel -Sterne -Stetige -Stets -Ster -Stern -Stich -Stiel -Stift -Stifte -Stiften -Stille -Stimme -Stirb -Stirn -Stirne -Strer -Stsse -Stoffen -Stopbit -Stoppe -Storch -Storno -Strang -Strasse -Streb -Strebe -Streben -Strebes -Strebs -Strecke -Streich -Stre -Strich -Striche -Strme -Stromes -Stru -Stck -Sthle -Strme -Studie -Studium -Stufe -Stufen -Stuhl -Stumme -Stummel -Stunde -Stunden -Sturmes -Sturz -Snder -Suche -Suffixe -Summe -Summen -Suppe -Sylphen -Symbole -Systeme -Szene -Tabelle -Tablett -Tafel -Tagen -Tages -Tagung -Takte -Taktes -Taktik -Taktpin -Taktrad -Tantal -Tasche -Taschen -Tasse -Tasten -Tastern -Taten -Tauben -Tauchen -Taumel -Tausch -Tauwerk -Technik -Teich -Teilbus -Teile -Teilen -Teiler -Teils -Teilung -Telefon -Telskop -Tempel -Teppich -Termin -Termine -Termins -Ternik -Testen -Testet -Testpin -Tetra -Teufel -Texte -Texten -Textes -Textil -Theken -Thema -Themen -Theorie -Thieme -Thnes -Thron -Thurn -Tiefbau -Tiefe -Tiefen -Tieren -Tinte -Tippen -Tisch -Tische -Tischen -Titel -Tne -Tnen -Tochter -Tonfall -Tonnen -Totmann -Totzeit -Touren -Trger -Trne -Trnen -Trume -Trafo -Trafos -Trampel -Trauben -Trar -Traum -Treff -Treffen -Treiben -Treiber -Trenn -Trennen -Treppe -Treppen -Tretern -Trifft -Trimmen -Tripel -Tritt -Trder -Troja -Tropfen -Trost -Trottel -Trotz -Tren -Trken -Trme -Trmen -Tte -Tten -Turbo -Turnier -Twinax -Typen -Typisch -Typus -Ufern -Uhren -Uhrzeit -Umbau -Umbruch -Umfang -Umgang -Umkreis -Umlauf -Umlaute -Umlegen -Umsatz -Umstand -Umweg -Umwelt -Ungarn -Unheil -Unklar -Unmenge -Unruhe -Unser -Unsere -Unseres -Unter -Unteren -Unterer -Unzahl -Updaten -Uralt -Urladen -Urlaub -Ursache -Vanille -Vasen -Vater -Vektor -Velter -Venedig -Ventil -Ventile -Verband -Verbund -Verein -Verfall -Vergabe -Vergl -Vergu -Verkauf -Verlauf -Verlust -Vermerk -Versand -Versen -Versuch -Vertieb -Vertrag -Verweis -Verzug -Video -Viele -Vielen -Viereck -Vierte -Viertel -Villen -Visum -Visums -Vgel -Volle -Vollmer -Volumen -Vorerst -Vorgabe -Vorgang -Vorher -Vorjahr -Vorlage -Vororte -Vorrat -Vorraum -Vortag -Vorteil -Vortrag -Vorwahl -Vorwurf -Vorzug -Wgung -Wnde -Wnden -Wre -Wrme -Wsche -Wachen -Wachs -Wachsen -Wacker -Wackler -Wagen -Waggons -Wahlen -Walze -Walzen -Wandel -Wandler -Wange -Wangen -Warnung -Warte -Warten -Wartung -Warum -Watte -Wechsel -Wecker -Wegen -Weges -Wegfall -Weiber -Weicht -Weigel -Weile -Weine -Wei -Weise -Weite -Weiter -Weitere -Welche -Welle -Wellen -Welten -Weltruf -Wenden -Wendung -Werbung -Werden -Werke -Werken -Werte -Werten -Wertes -Wesen -Weste -Westen -Wetten -Whisky -Whitt -Wichtig -Wieder -Wieland -Wiese -Wieso -Wieviel -Wille -Willen -Willens -Winde -Winkel -Winkels -Winken -Wirbel -Wirkung -Wirtin -Wissen -Wissens -Witzen -Wrter -Wobei -Woche -Wochen -Wohnung -Wolke -Wolken -Wolter -Womit -Wonne -Worte -Worten -Wortes -Wrde -Wrfel -Wucht -Wunde -Wunden -Wunder -Wunsch -Wurden -Wurzel -Wurzeln -Zhlen -Zhler -Zhnen -Zahlen -Zahlung -Zahnrad -Zahnweh -Zakel -Zander -Zange -Zapfen -Zauber -Zeche -Zechen -Zehntel -Zeichen -Zeiger -Zeigt -Zeile -Zeilen -Zeiten -Zelle -Zellen -Zentral -Zentrum -Zeter -Zettel -Zeugnis -Zeugs -Ziehen -Ziele -Zielen -Zielort -Ziels -Ziffer -Ziffern -Zigarre -Zillen -Zilog -Zimmer -Zirkus -Zitat -Zittern -Zudem -Zufall -Zugang -Zugegen -Zugriff -Zugseil -Zukunft -Zunahme -Zunge -Zurck -Zusage -Zusagen -Zusatz -Zustand -Zuvor -Zwang -Zweck -Zwecke -Zwecken -Zweifel -Zweimal -Zweite -Zweiten -Zwerg -Zwickel -Zyklen -Zyklus -Zypern -lter -ltere -ndern -ndert -rger -abdeckt -abends -abgeben -abgeht -abging -abhan -abhaut -abheben -abhebt -abhing -abholen -ablegen -abmalt -abnimmt -abnorm -abrollt -abrufen -abruft -absieht -absinkt -absolut -abwerte -abzog -achten -achtlos -achtzig -adaptiv -addiert -adrig -adrige -adrigen -agieren -ahmen -aktiv -aktive -aktivem -aktiven -aktiver -aktives -aktuell -akute -akuten -alice -allein -alleine -allem -allemal -allen -alles -allzu -alpinen -altem -alten -altrosa -analoge -anbei -anboten -andere -anderem -anderen -anderes -andern -aneckt -anfangs -anfing -anfleht -angeben -angeht -angibt -anhaben -anhand -anheben -anlege -anlegen -anliegt -annehme -annimmt -anregen -anrief -anrufen -anruft -ansehe -ansehen -ansetzt -ansieht -anstatt -antik -anzeigt -arbeite -arglos -armen -armer -armes -artig -artigen -atemlos -atmen -atmet -aufbaut -auffiel -aufgab -aufgeht -aufhalf -aufhebt -auftat -auftun -aufwies -aussen -ausser -ausgebe -ausgibt -aussah -autark -autonom -baldige -ballen -ballert -basiert -ban -baumeln -baumelt -baute -beachte -beban -beben -bebten -bedarf -bedaure -bedeckt -bedenkt -bediene -bedient -bedingt -bedurft -beeilen -beendet -befand -befasst -befasse -befinde -befolgt -befreit -befugt -begabt -begann -begeben -beginne -beginnt -begriff -behlt -behalte -beheben -behebt -behext -behob -behoben -beide -beiden -beider -beides -beinahe -bekam -bekamen -bekannt -beklebt -bekomme -bekommt -beladen -belaubt -belegen -belegt -belegte -bemerke -bemerkt -benamst -benannt -benutze -benutzt -bert -beredte -bereit -bereits -bergan -bergauf -beruht -besser -besagte -besa -besehen -besetzt -besiegt -besitze -besitzt -besorgt -besser -bessere -bestand -beste -bestehe -besteht -bestem -besten -besucht -betonen -betont -betonte -betraf -betraut -betrete -betritt -betrug -bettet -beuge -beugt -beutelt -bevor -bewege -bewegen -bewegt -bewegte -beweist -bewirkt -bewogen -bewohnt -bewusst -bezahlt -bezieht -bezog -bezogen -biegen -biegsam -biegt -biete -bieten -bietet -bifilar -bilden -bildet -billig -binr -binre -binnen -birgt -bisher -bislang -bitte -blanke -blanken -bla -blan -blar -bleibe -bleiben -bleibt -bleiche -blicke -blickt -blickte -blieb -blieben -blinken -blinkt -blitzt -bld -blonden -blo -blossen -blutest -blutet -blutrot -bse -bohren -bohrt -boniert -booten -bootet -borstig -boten -brachen -brachte -brandet -braten -brauche -braucht -braun -breche -brechen -breit -breite -breiten -breiter -breites -breitet -bremse -bremsen -brennen -brennt -bricht -bringe -bringen -bringt -brodelt -brummen -brummt -bndig -buchen -bunte -buntem -bunten -coaten -coatet -codiert -conm4 -dabei -dachte -dachten -dadurch -dafr -dagegen -daher -dahin -damals -damit -dampft -danach -daneben -dankbar -danke -danken -dankend -dankte -daran -darauf -daraus -darin -darum -dasitzt -darn -darnd -dart -darte -davon -davor -dazumal -debile -debilen -decken -deckt -defekt -defekte -deine -deinem -deinen -deiner -delikat -demnach -denen -denkbar -denke -denken -denkst -denkt -dennoch -derart -derben -deren -derer -derzeit -deshalb -dessen -desto -deute -deutet -deutete -deutsch -dezimal -dicht -dichte -dichten -dicke -dickem -dicken -dienen -dient -diente -diese -diesem -diesen -dieser -dieses -diesmal -diffus -direkt -direkte -doppelt -dorthin -drauf -dreckig -drehbar -drehe -drehen -drehend -dreht -drehte -dreien -dreimal -dringen -dringt -drinnen -dritt -dritte -dritten -dritter -drohen -drohend -droht -drohten -drben -drckt -drucke -drucken -druckt -drunter -dmmer -dnn -dnne -dnnen -drfe -drfen -drfte -duftend -duftet -dumme -dummen -dumpfes -dunkel -dunkle -dunklen -durch -durchs -durfte -ebene -ebenem -ebenen -ebenso -echte -echtem -echten -eckigen -edlem -egsam -ehesten -ehrlich -eifrig -eigen -eigene -eigenem -eigenen -eigener -eigenes -eignen -eignet -eilig -eiligst -einem -einen -einer -eines -einfach -eingibt -einging -einher -einige -einigem -einigen -einiger -einiges -einigte -einlade -einmal -einsam -einschl -einst -eintrat -einzeln -einzig -einzige -eisig -eisigem -eisiger -eklig -ekliges -elektr -emsig -endet -endete -endlich -endlos -endlose -enfernt -engen -enger -engere -engeren -engte -enorm -enormer -entgeht -entlang -entspr -entzwei -erbeten -erden -erfasst -erfasst -erfolgt -erfragt -erfuhr -ergab -ergaben -ergeben -ergeht -ergibt -ergriff -erhlt -erhaben -erhebe -erhebt -erhellt -erhielt -erhht -erhrt -erhob -erhofft -erholen -erholt -erkannt -erkennt -erklang -erkoren -erlag -erlangt -erlaubt -erlebe -erleben -erlebt -erlegen -ermahnt -erneut -erneute -ernst -ernste -erntete -erprobt -erregen -erregt -erregte -ersehen -ersetzt -ersieht -erste -ersten -erster -erstes -erstmal -ertappe -erteilt -ertnt -erwacht -erwarte -erweckt -erwies -erwogen -erzeugt -erzielt -essen -etliche -etwaig -etwas -eurem -ewige -exakt -exakte -exakten -exine -externe -extrem -fhig -fhrt -fllig -fllt -fngt -fahre -fahren -falle -falsch -falsche -falten -faltet -fanden -fangen -farbig -fasst -fasse -fassen -faulen -faulige -faxen -fehlen -fehlt -fehlte -fehlten -feine -feinen -ferne -fernen -fertig -fertige -fertigt -fesseln -feste -festem -festen -festes -fette -fetten -fettere -fettige -feucht -feuchte -fiele -fielen -filmen -findbar -finde -finden -findet -fischen -fixen -fixiert -flach -flachen -fleht -fliege -fliegen -fliegt -fliehen -fliesst -flitzt -flogen -flottes -flugs -folge -folgen -folgt -folgte -fordere -fordern -fordert -formale -formell -formlos -formt -fortan -frage -fragen -fragt -fragte -frech -freie -freiem -freien -freier -freies -fremd -fremden -fremder -freudig -fren -frieren -frisch -frische -frohen -fromm -frh -frhe -frher -fge -fgen -fgt -fgte -fhle -fhlen -fhlt -fhre -fhren -fhrt -fhrte -fllen -fnf -frs -fuhren -funkelt -fusst -gbe -ghnte -galant -ganze -ganzen -ganzer -ganzes -getzt -geahnt -gebadet -gebannt -gebaut -gebaute -gebbar -geben -gebeten -gebohrt -geboren -geboten -gedacht -gedient -gedreht -geehrte -geeicht -geerbt -geerdet -gefalle -gefasst -gefaxt -gefilmt -gefolgt -gefragt -gefreut -gefgt -gegeben -gegen -gehabt -gehen -gehend -gehetzt -geheult -gehrt -gehoben -gehofft -gehst -gehts -geirrt -geistig -gejagt -gekappt -gekauft -gekippt -geklaut -geklebt -gekonnt -gelacht -geladen -gelang -gelangt -gelbe -gelben -geleert -gelegen -gelegt -gelegte -gelenkt -gelernt -gelesen -geliebt -gelingt -gelinkt -gelst -gelockt -geloggt -gelten -geltend -gem -gemacht -gemalte -gemein -gemeint -gemerkt -genannt -genau -gena -genam -genan -genar -genas -genauso -geniale -geniert -gengt -genug -genutzt -gepackt -geparkt -gepasst -geplant -gepolt -geputzt -gert -gerade -gerannt -geraten -geratet -geraubt -gerecht -geredet -gereist -gering -geringe -geritzt -gerne -gerollt -gerufen -gesagt -gesamte -gesandt -gesaved -geschah -gesehen -gesetzt -gesiegt -gesorgt -gespart -gesteht -gestern -gesucht -getan -getanzt -geteilt -getilgt -getippt -getraut -gewandt -gewarnt -geweckt -gewesen -gewillt -gewinne -gewinnt -gewirkt -gewisse -gewohnt -gewollt -gewusst -gezeigt -gezielt -gezogen -gibst -giessen -giesst -gingen -gipfelt -glatt -glaube -glauben -glaubst -glaubt -glaubte -gleich -gleiche -gleicht -gleiten -gleitet -glichen -glotzt -graben -gra -gran -grar -grausig -greifen -greift -greisen -grenzen -griffig -grinst -grinste -grobe -groben -grollen -grollt -gro -grosse -grossem -grossen -grosser -grosses -grn -grne -grnem -grnen -grner -grnt -gltig -guten -guter -gutes -guttun -hlt -hnge -hngen -hngt -hrten -hrter -htte -htten -httet -hufig -haben -habhaft -haften -halbe -halben -halber -halbes -halbtot -halfen -hallo -hallt -haltbar -halte -halten -hancen -handeln -handelt -harte -hartem -harten -hartes -hasse -hatte -hatten -haucht -hauchte -hausen -heben -hechelt -heftige -heilen -heilige -heirate -hei -heisse -heissem -heissen -heisst -heissen -heisst -heiter -helfen -helle -hellt -hemmt -herab -heran -heraus -herbei -hergeht -herum -hervor -hetzen -her -heule -heulen -heute -heutige -hielt -hielten -hieraus -hierbei -hierher -hierhin -hierin -hiermit -hiervon -hierzu -hilflos -hilft -hinab -hinauf -hinaus -hindern -hindert -hinein -hingen -hinkt -hinlegt -hinten -hintere -hinterm -hintern -hinters -hinweg -hinzu -hitzig -hher -hhere -hrbar -hre -hren -hrt -hrte -hockt -hoffe -hoffen -hohem -hohen -hoher -hohes -hohle -holen -homogen -hpft -hundert -hurra -huste -hustet -ideale -idealen -ideales -ihnen -ihrem -ihren -ihrer -ihres -immer -immerzu -inaktiv -indem -infamen -innen -innere -inneren -innig -innigen -insbes -integr -interne -invers -irgend -irrem -irren -jhen -jammern -jedem -jeden -jeder -jedes -jedoch -jeher -jemals -jemand -jenem -jenen -jener -jenes -jetzige -jetzt -jeweils -jngst -junge -jungen -junges -kme -kmen -kmpft -kalte -kalten -kalter -kamen -kamst -kannst -kannte -kannten -kapiere -kapiert -kapseln -karren -kaufen -kauft -kauften -kausal -kausale -kdnet -kehren -kehrt -keine -keinem -keinen -keiner -keines -kenne -kennen -kennt -keucht -keuchte -kichere -kichert -kitzeln -kitzelt -klren -klrt -klamm -klappe -klappt -klare -klarem -klaren -klarste -klaut -kleben -klebrig -klebt -kleidet -klein -kleine -kleinem -kleinen -kleiner -kleines -klemmen -klingen -klingt -klirren -klirrt -klopfe -klopft -knallen -knallt -knapp -kneift -knetete -knpft -knurrt -knne -knnen -knnt -knnte -kochend -kocht -kodiert -kollern -komisch -komme -kommen -kommst -kommt -kompakt -komplex -konkret -konnte -konnten -kopiert -koppeln -koppelt -korrekt -kostbar -koste -kosten -kostet -kotzen -krabat -kraft -krank -kranken -kratzen -kratzt -kraus -kreisen -kreuzen -kriege -kriegen -kriegt -kroch -krochen -krmmt -krumm -krummen -khl -krzen -krzer -kundnum -kupfer -kursiv -kurze -kurzem -kurzen -kurzer -kurzes -kurzum -lchle -ldt -lnger -lngs -lngst -lsst -lstig -luft -lache -lachen -lacht -ladbar -lagen -lagern -landen -landet -lange -langem -langen -langer -langes -langsam -lapidar -lasse -lassen -lastet -laft -laufe -laufen -laufend -lausche -lauscht -lauten -lauter -lautes -lautet -lautete -lautlos -lauwarm -leben -lebende -lebst -lebten -leere -leeren -leert -legen -legst -legte -lehne -lehnen -lehnt -lehren -leibst -leicht -leichte -leiden -leider -leidet -leihen -leise -leisen -leiser -leiste -leisten -leistet -leite -leitet -lenkte -lerne -lernen -lernte -lesbar -lesen -lesend -letzte -letztem -letzten -letzter -letztes -leugnen -lichten -liebe -lieben -lieber -liebt -liebte -liefen -liefern -liefert -liege -liegen -liegend -liegt -lie -liesse -liessen -lineare -linke -linken -linkes -linksum -lispelt -listig -lsche -lscht -lsen -lst -lten -ltet -lobend -lochen -lockte -lockten -logfile -loggen -loggt -logisch -lohnt -lokal -lokale -lokalen -lokaler -lokales -losem -losgeht -lgt -lustig -lutsche -mssig -machbar -mache -machen -machst -macht -machte -machten -mager -magerer -malen -managt -manche -manchen -mangels -mangelt -manisch -manuell -marco -markant -massiv -massive -maximal -meckert -mehrere -mehrern -meine -meinem -meinen -meiner -meines -meinst -meint -meist -meisten -melden -meldet -merke -merken -merkt -merkte -messbar -messen -mexine -milden -minimal -misst -mische -mitgibt -mithin -mitsamt -mittags -mittels -mittelt -mitten -mittig -mittige -mchte -mge -mgen -mochte -mochten -modells -modern -moderne -mollig -montags -morgens -mrcnum -mde -mhsam -mssen -mssig -msst -msste -msse -mssen -murmelt -musst -musste -mussten -mustern -mustert -nchst -nher -nhert -nachdem -nachts -nackt -nackte -nahen -nahezu -nahmen -namens -nassem -nassen -natura -neben -nebst -negativ -nehme -nehmen -nehmt -neigen -neigt -nennen -nennt -nervs -nette -netten -nettes -netto -nem -nen -ner -nere -neren -nes -neste -neulich -neunzig -nicht -nichts -nicke -nickt -nickte -niedrig -niemals -niemand -nimmst -nimmt -ntig -ntige -nochmal -normale -notiert -ntzen -ntzt -nunmehr -nurmehr -nutzbar -nutze -nutzen -nutzt -nutzte -det -ffne -ffnen -ffnet -fter -fters -lig -obere -oberen -oberste -obige -obigem -obigen -obiger -obiges -obliegt -obwohl -obzwar -offen -offene -offenem -offenen -offener -offenes -offline -ohnehin -omputer -online -optisch -ordern -ordnen -ordnet -ovalen -packe -packen -packt -paniert -parat -passt -passen -passend -passiv -pervers -petzen -pfeift -pflanzt -pflegen -pflegt -piepst -planen -platt -plotten -pocht -pochte -pokern -polare -polaren -poliert -polig -polige -poligem -poligen -poliger -poliges -poltert -positiv -prgt -prallen -prangt -prangte -presst -primr -privat -proben -prfen -prft -puren -putzte -qllen -quitt -rumt -ragen -rapple -rasch -rasche -raschen -rascher -rasen -rasend -raten -rauben -raubt -rauchen -raucht -rauhe -rauhen -rauher -reaktiv -realen -rechnen -rechnet -recht -rechte -rechtem -rechten -rechter -rechtes -rechts -reckt -redet -redeten -regeln -regelt -reglos -regnen -regnet -reiche -reichen -reicht -reifen -reine -reinem -reinen -reines -reinste -reisst -reise -reisen -reizen -reizend -reizt -relativ -renne -rennt -retten -richten -richtet -richtig -riechen -riecht -riefen -riesig -riesige -ringen -rings -rinnt -robuste -rohem -rollt -rosarot -rosig -rostig -rotem -roten -roter -rcken -rckt -rhrt -rstet -rufen -ruhen -ruhig -ruhige -ruhiges -runde -runden -rundum -runzelt -sumen -sabbern -sachte -sackt -saftige -sagen -sagst -sagte -sahen -sammeln -sammelt -sammle -sandig -sanft -sanfte -sanften -sanfter -sanftes -sangen -sauber -saubere -saugt -schlt -schade -schadet -schafft -schal -schalte -scharf -scharfe -scharrt -schart -scha -schan -schaut -scheine -scheint -schenke -schenkt -schert -schicke -schickt -schiebt -schief -schielt -schien -schier -schlafe -schlage -schlau -schlimm -schlug -schmal -schmale -schmolz -schneit -schnell -schnitt -schn -schne -schob -schon -schrg -schreie -schreit -schrieb -schrill -schuld -schulen -schult -schwach -schwamm -schwarz -schwebt -schwer -schwere -sechs -sechste -sechzig -segelt -sehen -sehende -seien -seinem -seinen -seitdem -seitens -seither -seitige -selben -selber -selbst -selig -selten -seltsam -sende -senden -sendet -senken -senkt -separat -seriell -setzbar -setze -setzen -setzt -setzte -setzten -seufze -seufzt -sicher -sichere -sichern -sichten -sieben -siebten -siebzig -siegen -siehe -siehst -sieht -singen -singt -sinke -sinkt -sinnlos -sitze -sitzen -sitzend -sitzt -sobald -sodann -soda -sben -sofern -sofort -soft83 -sogar -solang -solange -solch -solche -solchem -solchen -solcher -solches -soliden -sollen -sollte -sollten -somit -sonder -sondern -sonnten -sonst -sonstwo -sorgen -sorgt -soviel -sowas -soweit -sowie -sowieso -sowohl -spt -spte -spten -spter -spannen -spannt -sparen -spart -speisen -speist -sperren -sperrt -spezial -spiele -spielen -spielt -spielte -spinnst -spinnt -spitzen -spitzt -sprach -spreche -spricht -springt -sprht -sprudle -splen -spucke -spuckt -spukt -stabil -stammen -stammt -stampft -standen -stanzen -stapeln -starb -starke -starkem -starken -starkes -starr -starre -starren -starrt -starrte -starte -starten -startet -statt -stechen -stecke -stecken -steckt -stehe -stehen -stehend -stehst -steht -stehts -steif -steifem -steifen -steige -steigen -steigt -stelle -stellen -stellig -stellt -stellte -stemmen -sterbe -sterben -stetes -stetig -stets -stern -stert -sticht -sticken -stieg -stiegen -stie -stille -stimmen -stimmt -stimmte -stinkt -stirbt -sthnt -stren -strt -stsst -stolz -stopfen -stopft -stoppe -stoppen -stoppt -stossen -strahlt -strebe -strebt -strecke -streckt -streift -streng -strenge -stricke -strikt -strmt -strze -sttzt -stumm -stummen -stutzig -suche -suchen -sucht -sulzend -surrt -ttig -takten -tanzen -tanzt -tanzte -tapfere -tasten -tauchen -taucht -tauchte -taugen -tausend -teilbar -teile -teilen -teils -teilt -teilte -teilten -testbar -teste -testen -testet -ter -teure -teuren -teurer -thronen -tiefen -tiefer -tiefes -tiefste -tippen -tippst -tippt -toben -toggeln -toggelt -tolle -tollen -totale -totalen -trge -trgen -trgt -trume -trumt -traben -tragen -traten -tran -traurig -traute -treffe -treffen -treiben -treibt -trennen -trennt -trete -treten -tre -triefe -triffst -trifft -trinke -trinken -trinkt -tripple -tritt -trocken -tropft -trotz -trotzig -tummeln -turteln -twinax -typisch -bel -ber -berm -bern -bers -ble -blich -brig -brige -bte -umarmen -umarmt -umdrehe -umfasst -umgeben -umgeht -umher -umhin -umlegen -umsetzt -umsonst -umwogt -unfrei -ungenau -unklar -unser -unsere -unserem -unseren -unserer -unseres -unsern -unsrer -unter -untere -unteren -unterm -untern -unters -updaten -uralt -uralter -vagen -verbaut -verbot -verehrt -vereint -vergeht -vergibt -vergl -vergo -verirrt -verkam -verlas -verlebt -verlegt -verlief -vermag -vermute -verpolt -versagt -versank -versuch -vertrat -verweht -viele -vielen -viermal -viert -vierte -vierzig -violett -vllig -vollauf -volle -vollem -vollen -voller -volles -vorab -voran -voraus -vorbei -vordere -vorerst -vorhabe -vorhat -vorher -vorhin -vorigem -vorigen -voriges -vorne -wchst -whlen -whlt -whnte -whrt -wre -wren -wachsen -wacht -wackelt -wagen -wahre -wahren -wahres -walzen -wandeln -wandelt -wandere -wandern -wandert -wandte -waren -warfen -warme -warmem -warnen -warnt -warst -wartbar -warte -warten -wartet -wartete -warum -watet -wecken -weder -wegen -wehen -wehte -wehtun -weich -weiche -weichen -weigern -weinen -wei -weisse -weissem -weissen -weisses -weisst -weise -weisen -weiser -weist -weitaus -weite -weitem -weiten -weiter -weitere -weithin -welch -welche -welchem -welchen -welcher -welches -welken -wende -wenden -wendet -wenig -wenige -wenigen -weniger -werde -werden -werdet -werfe -werfen -werten -wertet -weshalb -wessen -wichtig -wickelt -widert -widmen -widrig -wieder -wiegen -wiegt -wiesen -wieso -wieviel -wieweit -wilde -wilden -willen -willst -wimmelt -wimmern -wimmert -winde -windet -winkt -winzig -winzige -wirbeln -wirbelt -wirft -wirke -wirken -wirksam -wirkt -wirkte -wirkten -wirst -wischt -wispert -wissen -wissend -wittere -wittert -wobei -wodurch -wofr -woher -wohin -wohlige -wohne -wohnen -wohnst -wohnt -wolle -wollen -wollt -wollte -wollten -wolltet -womit -wonach -woran -worauf -woraus -worden -wovon -wrde -wrden -wrgt -wuchern -wuchten -wunden -wundern -wundert -wurde -wurden -wusste -xload -zhlt -zaghaft -zahlen -zahlt -zahlten -zapfen -zappelt -zarte -zarten -zehnten -zeige -zeigen -zeigt -zeigte -zeigten -zentral -zerlegt -zerrt -zerrte -zeugt -ziehe -ziehen -zieht -ziele -zielen -ziellos -ziemt -zieren -zierte -zischen -zischt -zitiert -zittern -zittert -zittrig -zgern -zornig -zgig -zgige -zucke -zucken -zuckt -zudem -zrst -zugeben -zugeht -zukommt -zulange -zulegen -zuletzt -zumal -zumeist -zumute -zunimmt -zupfe -zurecht -zurck -zusagen -zusagt -zusehen -zuviel -zuviele -zuvor -zuwenig -zuzgl -zwanzig -zwecks -zweier -zweimal -zweit -zweite -zweiten -zweiter -zweites -zwicken -zwingen -zwingt -zwlf \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/default_freecap_words b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/default_freecap_words deleted file mode 100644 index c7a3bbd..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/default_freecap_words +++ /dev/null @@ -1,2867 +0,0 @@ -aback -abacus -abate -abbey -abduct -abhor -abide -ablaze -aboard -abound -about -above -abroad -abrupt -absent -absorb -absurd -abuse -abyss -accent -accept -access -accord -accost -accrue -accuse -acidic -acorn -acquit -acrid -across -acting -action -active -actor -actual -acumen -acute -adage -adapt -addict -adept -adhere -adjoin -adjust -admire -adobe -adopt -adore -adorn -adrift -adroit -adult -advent -adverb -advice -advise -aerial -affair -affect -affirm -affix -afford -afloat -afraid -afresh -after -again -agency -agenda -aghast -agile -aging -agony -agree -agreed -ahead -ailing -ailment -airily -airing -aisle -alarm -albeit -albino -album -alcove -alert -algae -alias -alibi -alien -alight -align -alike -alive -alkali -allay -allege -alley -allied -allot -allow -alloy -allude -allure -almond -almost -aloft -aloha -alone -along -aloof -aloud -alpine -alright -altar -alter -alumna -alumni -always -amass -amaze -amazed -amber -amble -ambush -amend -amends -amidst -amiss -amoeba -among -amoral -amount -ampere -ample -amply -amuse -amused -anchor -anemia -anemic -angel -anger -angle -angler -angry -angst -animal -ankle -annex -annoy -annual -annul -anoint -answer -anthem -antics -antler -anvil -anyhow -anyone -anyway -apart -apathy -apiece -aplomb -appall -appeal -appear -append -apple -apply -apron -aptly -arable -arcade -arched -arctic -ardent -ardor -arena -argue -arise -arisen -armed -armful -armor -armory -armpit -aroma -arose -around -arouse -array -arrest -arrive -arrow -arson -artery -artist -artsy -ascend -ascent -ashes -ashore -aside -askew -asleep -aspect -aspire -assent -assert -assess -asset -assign -assist -assume -assure -asthma -astray -astute -asylum -atlas -atomic -attach -attack -attain -attend -attest -attic -attire -auburn -audio -audit -aural -author -autumn -avail -avenge -avenue -averse -avert -avid -avoid -avowal -avowed -await -awake -awaken -award -aware -awash -awful -awhile -awning -awoke -awoken -axiom -babble -baboon -backer -backup -bacon -badge -badger -badly -baffle -bagel -baker -bakery -baleful -ballad -ballet -ballot -balmy -bamboo -banal -banana -bandit -bangle -bangs -banish -banjo -banker -banner -banter -barber -barely -barge -barley -baron -barrel -barren -barrio -barter -bases -basic -basics -basin -basis -basket -batch -bated -bathe -baton -batter -battle -bayonet -bayou -bazaar -beach -beacon -beady -beagle -beaker -beard -bearer -beast -beaten -beater -beauty -beaver -bebop -became -beckon -become -beech -beefy -beeper -beetle -befall -befell -befit -before -began -beggar -begin -begun -behalf -behave -behead -behind -behold -beige -being -belated -belch -belie -belief -bellow -belong -below -bench -benign -berate -bereft -beret -berry -berth -beset -beside -bestow -betray -better -beware -beyond -biased -biceps -bicker -bidden -bidder -bigot -biker -bikini -bill -billow -binary -bind -binder -bingo -biopsy -birch -birth -bisect -bishop -bison -biting -bitten -bitter -black -blade -bland -blank -blare -blase -blast -blatant -blaze -blazer -bleach -bleak -bleed -blend -bless -blind -blink -bliss -blitz -block -blond -blood -bloody -bloom -blouse -blown -blowup -blues -bluff -bluish -blunt -blush -board -boast -bodice -bodily -boggle -bogus -boiler -boldly -bonus -books -boost -border -bored -boring -borne -borrow -bosom -botany -bother -bottle -bottom -bought -boulder -bounce -bound -bounds -bounty -bovine -bowel -boxer -boxing -brace -braces -brain -brains -brainy -braise -brake -branch -brand -brandy -brass -brave -bravo -brazen -breach -bread -break -breath -breed -breeze -breezy -brewer -bribe -brick -bridal -bride -bridge -bridle -brief -bright -bring -brink -brisk -broil -broke -broken -broker -bronco -bronze -broom -broth -brown -browse -brunch -brush -bubble -bucket -buckle -budget -buffer -buffet -build -built -bullet -bumper -bunch -bundle -burden -bureau -burger -burnt -busily -butler -butter -button -buyer -buyout -bylaw -bypass -cabin -cable -cache -cactus -cadet -cajole -caller -calmly -camel -camera -camper -campus -canal -canary -cancel -cancer -candid -candle -candor -candy -canine -canoe -canopy -canvas -canyon -carat -carbon -cards -career -caress -cargo -caring -carol -carpet -carrot -carry -cartel -carton -carve -cashew -casino -castle -casual -catch -cater -cattle -caucus -caught -cause -cavern -caviar -cavity -cease -celery -cellar -cement -censor -census -center -cereal -chain -chair -chalet -chalk -chance -change -chant -chaos -chapel -charge -charm -chart -charts -chase -cheap -cheat -check -cheek -cheer -cheers -cheese -cherry -chess -chest -chief -child -chili -chill -chilly -chime -chives -choice -choir -choke -choose -choral -chord -chorus -chose -chosen -chowder -chrome -chunky -church -cider -cigar -cinema -cipher -circle -circus -citrus -civic -civil -claim -clamor -clash -class -clause -clean -clear -clergy -clerk -clever -click -client -cliff -climate -climax -climb -climber -clinic -clock -clone -close -closed -closet -cloth -cloud -cloudy -clout -clown -coach -coarse -coast -cobra -coffee -cognac -coldly -collar -colony -color -column -combat -comedy -comet -comic -comics -commit -common -compel -comply -condo -condor -confer -consul -convex -convey -cookie -cooler -copper -cornea -corner -cornet -cosmic -cosmos -cotton -cougar -cough -count -county -couple -coupon -course -court -cousin -cover -covert -cowboy -coyote -cradle -craft -crash -crave -crawl -cream -creamy -create -credit -credo -creole -crepe -crest -crisis -crisp -crispy -critic -crocus -cross -crown -crude -cruel -cruise -crunch -crush -crying -crypt -cubic -curfew -curry -cursor -curve -custom -cycle -cymbal -cynic -daddy -daily -dairy -daisy -damage -dance -dancer -dandy -danger -daring -darken -dated -daunt -debate -debit -debris -debug -debut -decade -decent -decide -decode -decor -decree -decry -deduce -deduct -deepen -deeply -defeat -defend -defer -define -deftly -deity -delay -delete -delta -deluge -demand -demon -denial -denote -dense -dental -depart -depend -depict -deploy -depose -depot -deputy -derail -derby -deride -derive -desert -design -desire -detail -detect -deter -detour -device -devil -devote -diary -diesel -differ -digest -digit -dilate -dilute -dinner -direct -dirt -disarm -dismal -divert -divest -divide -divine -diving -docile -doctor -dogma -dollar -domain -domino -donate -donkey -donor -double -doubt -draft -dragon -drain -drama -drape -drapes -drawer -dream -dress -dried -drier -drift -drill -drink -drive -driven -driver -drone -dryer -duplex -during -dusty -dwarf -dynamo -eager -eagle -early -earth -easily -eatery -ebony -edible -edify -editor -effect -effigy -effort -eight -either -eject -elapse -elbow -elder -eldest -elect -elegy -eleven -elicit -elite -elude -embark -ember -emblem -embryo -emerge -empire -employ -empty -enable -enact -enamel -encore -ending -endive -endow -endure -enemy -engage -engine -engulf -enigma -enjoy -enlist -enough -enrage -enrich -enroll -ensure -entail -enter -entire -entity -entry -envoy -epoch -equal -equip -equity -erase -eraser -erode -escape -essay -estate -esteem -ether -ethic -ethics -ethnic -evade -evenly -event -every -evoke -evolve -exact -exceed -excel -except -excess -excite -exclude -excuse -exempt -exhort -exile -exist -exodus -exotic -expect -expert -export -expose -extend -exult -eyelid -fabric -facet -factor -fairly -fairy -faith -falcon -false -family -famous -fancy -farmer -fasten -father -fauna -favor -feast -feline -fellow -female -fence -ferry -fervor -fetch -fever -fiasco -field -fierce -fiesta -fifth -fifty -fight -figure -filter -final -finale -finder -finely -finger -finish -finite -fireman -firmly -first -fiscal -fjord -flair -flake -flaky -flame -flash -flashy -flatly -flavor -flight -flirt -float -flood -floor -floppy -flora -floral -floss -flour -flower -flown -fluent -fluid -flute -foggy -folder -follow -forage -forbid -force -forest -forge -forget -forgot -formal -format -former -forty -forum -fossil -foster -fought -found -fourth -frame -frank -freely -freeze -frenzy -fresh -fried -friend -front -frost -frosty -frozen -frugal -fruit -fudge -fully -funds -funny -furry -fusion -futile -future -fuzz -fuzzy -gadget -galaxy -gallon -gallop -galore -gambit -gamble -garage -garden -garlic -gasket -gather -gauge -gazebo -geisha -gelatin -gender -genial -genius -genre -gentle -gently -gentry -genus -geyser -ghost -giant -gifted -ginger -given -gizmo -glacier -gladly -glamour -glance -glass -glaze -glazed -glitch -global -globe -glory -gloss -glossy -glove -gnome -going -golden -golfer -goods -gospel -gossip -govern -grace -grade -grader -grand -grant -grape -graph -grasp -grass -grassy -gratis -great -greed -greedy -green -greet -ground -group -guard -guess -guide -guided -guitar -gypsy -habit -hacker -hairdo -hairy -halve -hammer -handle -handy -hangar -hanger -happen -happy -harbor -hardly -harem -haven -hazard -hazing -health -heard -heart -heated -heater -heaven -heavy -hectic -hedge -heels -hefty -height -helium -hello -helmet -helper -hemlock -hence -herald -herbal -hereby -herein -heroic -heron -hexagon -hiatus -hidden -highly -hijack -hiker -hilly -hockey -holder -homage -homely -honest -honey -honor -horse -hostel -hound -hourly -house -hugely -human -humble -humid -humor -hunter -hurrah -hurry -husky -hybrid -hyena -hyphen -icing -ideal -idiom -igloo -ignore -iguana -image -impact -impair -imply -import -incite -income -indeed -indent -index -indoor -inert -infant -infer -inform -infuse -inland -inlet -inner -input -insect -insert -inside -insist -intact -intend -intent -invent -invert -invest -invite -invoke -inward -inwards -ironic -irony -island -issue -italic -ivory -jacket -jaguar -jargon -jazzy -jeans -jelly -jersey -jewel -jigger -jogger -joker -jovial -joyful -judge -juice -juicy -jumbo -jumper -jungle -junior -juror -karat -karate -karma -kayak -keenly -keeper -kennel -kernel -kettle -khaki -kidney -kimono -kindly -kiosk -kitten -kneel -knife -knight -known -koala -label -labor -ladder -lagoon -lapse -laptop -large -larva -larynx -laser -lasso -latch -lately -latent -later -latest -latex -laugh -launch -laurel -lavish -lawful -lawyer -layer -layout -lazily -leader -league -lease -leash -least -leave -leaves -ledger -legacy -legal -legend -legion -lemon -lender -length -lentil -lessen -lesser -lesson -letter -level -lever -liable -lichen -light -likely -lilac -limbo -limit -linear -linen -lineup -liquid -liquor -listen -litany -little -lively -liver -living -lizard -llama -loaded -loafer -lobby -local -locate -locker -lodge -logic -lonely -loner -looks -loose -loosen -lotion -loudly -lounge -lovely -lover -loving -lower -loyal -lucid -lucky -lumber -lunar -lunch -lyric -lyrics -macro -magic -magnet -magpie -maiden -mainly -major -maker -makeup -making -malice -malign -mammal -manage -mango -mania -maniac -manner -manor -mantle -mantra -manual -maple -marble -march -margin -marina -marine -marked -marker -market -markup -maroon -marrow -marry -marsh -martyr -mascara -mascot -master -match -matter -mature -mauve -maxim -maybe -mayor -meadow -meager -means -meant -medal -media -median -medium -medley -mellow -melody -melon -member -memory -mental -mentor -mercy -merely -merger -merit -merry -metal -meteor -meter -method -metric -metro -middle -midst -might -mildly -miles -milieu -mimic -miner -mining -minor -minus -minute -mirage -mirror -mixed -mobile -modal -model -modem -modern -modest -modify -module -mohair -moist -moment -money -monkey -month -moral -morale -mosaic -mostly -motel -mother -motif -motion -motive -motor -motto -mount -mouse -mouth -mover -movie -movies -moving -muffin -mulch -murmur -muscle -museum -music -musing -muted -mutely -mutton -mutual -myopic -myriad -myself -mystic -naive -namely -napkin -narrow -nasal -nation -native -nature -naughty -naval -navel -nearby -nearly -neatly -nectar -needle -needs -negate -neither -nephew -nerdy -nerve -nerves -never -newly -nicely -nickel -niece -night -nights -ninety -noble -nobody -noise -noisy -nomad -noodle -normal -north -notch -noted -notes -notice -notify -notion -novel -novice -nowhere -nuance -nuclear -nuclei -nugget -number -nurse -nutmeg -nuts -nylon -nylons -nymph -oasis -object -oblige -oblong -oboe -obtain -occult -occur -ocean -octave -oddity -oddly -offer -office -offset -often -olive -omelet -onion -onset -onward -opaque -openly -opera -optic -option -orally -orange -orator -orbit -orchid -order -organ -orient -origin -oriole -ornate -orphan -other -ounce -outfit -outlaw -output -outset -overdo -owner -oxide -oxygen -oyster -ozone -pacify -packed -packer -packet -paddle -pager -pagoda -paint -palace -panda -panel -panic -pantry -pants -papaya -paper -papers -parade -parcel -pardon -parent -parish -parity -parka -parlor -parody -parole -parrot -partly -party -pasta -paste -pastel -pastor -pastry -patch -patchy -patent -pathos -patient -patio -patrol -patron -pause -payment -payoff -peace -peach -peanut -pearl -pebble -pecan -pedal -peddle -pencil -penny -people -pepper -perch -peril -period -permit -person -petal -pewter -phase -phlegm -phobia -phobic -phone -photo -phrase -piano -picket -pickup -picnic -piece -pierce -pigeon -pileup -pillar -pillow -pilot -piracy -pirate -pistol -piston -pitch -pivot -pixel -pizza -place -plains -plane -planet -plant -plasma -plate -player -plaza -please -pledge -plenty -plural -plush -pocket -podium -poetic -poetry -point -poised -poker -polar -police -polio -polish -polite -polka -pollen -polls -poncho -ponder -poodle -poorly -poppy -porch -porous -portal -postal -poster -potato -potion -potter -pounce -pound -powder -power -praise -prayer -preach -prefer -prefix -press -pretty -price -pricey -pride -priest -primal -prime -primer -prince -print -prior -prism -prize -probe -profit -prompt -prone -proof -propel -proper -prose -proton -proud -prove -proven -proxy -prune -public -pulse -punch -pundit -pupil -puppet -purely -purify -purple -purse -puzzle -python -quack -quake -quartz -queen -query -quest -quiche -quick -quiet -quilt -quorum -quota -quote -rabbi -rabbit -rabble -racial -racing -racket -radar -radial -radio -radish -radium -radius -radon -raffle -rafter -ragged -raider -rainy -raise -raisin -rally -ramble -ranch -random -range -ranks -rapid -rapids -rarely -rarity -rather -ratify -rating -ratio -ration -rattle -ravage -raven -ravine -rayon -razor -reach -react -reader -ready -really -realm -realty -reason -rebate -rebel -rebuff -rebuke -rebut -recall -recap -recede -recent -recipe -recite -reckon -recoil -record -rector -recur -redeem -redone -reduce -refer -refill -refine -reflex -reform -refuel -refuge -refund -refuse -refute -regain -regal -regard -regent -reggae -regime -region -regret -reign -rejoin -relate -relax -relay -relent -reliant -relic -relief -relish -relive -remain -remake -remark -remedy -remind -remiss -remit -remote -remove -rename -render -renew -renown -rental -renter -repaid -repair -repay -repeal -repeat -repel -replay -reply -report -repute -resale -rescue -reside -resign -resin -resist -resort -result -resume -retail -retain -retake -retard -retina -retire -return -revamp -reveal -revel -revere -revert -review -revise -revive -revoke -revolt -revue -reward -rewind -rework -rhyme -ribbon -richly -ridden -riddle -rider -ridge -riding -rifle -right -rights -rigor -rinse -risky -ritual -rival -river -rivet -robot -robust -rocket -rodeo -rosary -roster -rotary -rotate -rotor -rough -round -route -royal -rubber -rudely -rugby -ruler -ruling -rumble -rumor -runner -rural -rustic -rusty -saber -sacred -saddle -sadly -safari -safely -safety -sailor -saint -salad -salami -salary -sales -salient -saliva -salmon -salon -saloon -salsa -salty -salute -salve -sample -sandal -sandy -sanity -satin -satiny -satire -sauce -saucer -sauna -savage -saver -saving -savior -savor -savory -savvy -saying -scab -scale -scalp -scant -scarce -scare -scared -scarf -scary -scene -scenic -scent -scheme -schism -school -scoop -scope -score -scores -scotch -scout -scram -scrap -scrape -scream -screen -screw -scribe -script -scroll -sealed -search -season -secede -second -secret -sector -secure -sedan -seduce -seedy -seesaw -seize -seldom -select -seller -selves -senate -senior -sense -sensor -sentry -sequel -serene -serial -series -sermon -serum -serve -server -settle -setup -seven -sever -severe -shabby -shack -shade -shades -shadow -shady -shake -shaken -shaky -shall -shanty -shape -share -shark -sharp -shave -shaver -shawl -sheep -sheer -sheet -sheik -shell -shelve -shield -shift -shine -ship -shirt -shiver -shock -shoe -shop -shore -short -shorts -should -shout -shove -shovel -shown -shrank -shrewd -shrimp -shrine -shrink -shrub -sibling -siege -siesta -sight -sights -signal -silent -silky -silver -simile -simmer -simple -simply -since -singer -single -sinus -siren -sister -sixth -sixty -sizzle -skate -skater -sketch -skewed -skier -skiing -skill -skim -skinny -skirt -skunk -slack -slalom -slash -sleep -sleepy -sleeve -slender -slept -slice -slide -slogan -slope -slowly -slump -small -smart -smash -smell -smile -smith -smog -smoggy -smoke -smoked -smoker -snack -snail -snake -snooze -soccer -social -socket -sodium -soften -softly -solar -solely -solemn -solid -solve -sonata -sonic -sonnet -soothe -sorbet -sorely -sorrow -sorry -sought -sound -source -south -space -spade -spades -spare -sparse -spasm -speak -speech -speed -spell -spent -sphere -sphinx -spice -spicy -spider -spill -spinal -spiral -spirit -splash -split -spoil -spoke -spoken -sponge -spool -spoon -sport -sports -sporty -spouse -sprawl -spread -spring -sprint -squad -square -squash -squat -squid -stable -staff -stage -stain -stair -stairs -stake -stakes -stale -stamp -stance -stand -stare -start -state -static -statue -status -steady -steak -steal -stealth -steam -steel -steep -steer -stellar -stem -stencil -stereo -stick -sticky -still -stock -stoic -stole -stolen -stone -store -storm -stormy -story -stove -strain -strait -strap -strata -straw -stream -street -stress -strict -strike -string -strive -strong -studio -study -stuff -stupor -style -suave -subdue -sublet -submit -subtle -subtly -suburb -subway -sudden -suede -suffix -sugar -suite -sulfur -sultan -sultry -summer -summit -summon -sundae -sunny -sunset -supper -supply -surely -surfer -surge -survey -swear -sweet -swept -swing -switch -sword -symbol -syntax -syrup -system -table -tablet -taboo -tacit -tackle -tactic -tailor -tails -taint -taken -taking -talent -talker -talks -tallow -tamper -tandem -tangle -tango -tanker -taper -tardy -target -tariff -tarmac -tarot -tartan -tartar -tassel -taste -taster -tasty -tattle -tattoo -taught -taunt -tavern -tawny -taxing -teach -tease -teens -teller -temper -temple -tempo -tempt -tenant -tender -tendon -tenet -tennis -tenor -tense -tenth -tenure -terms -terror -terse -thank -thanks -theft -their -theirs -theme -theory -there -these -thesis -thick -thief -thing -things -think -thinly -third -thirst -thirty -thorn -those -though -thread -threat -three -threw -thrift -thrill -thrive -throat -throne -throw -thrown -thrust -thumb -thwart -tiara -ticket -tidal -tiger -tight -timber -timely -timer -times -timid -timing -tiptoe -tirade -tired -toast -today -toffee -toggle -token -tomato -tongue -tonic -tonight -toolbar -tooth -topic -torch -torrid -total -toucan -touch -tough -toward -towel -tower -toxic -toxin -trace -tracer -track -tract -trade -trader -tragic -trail -train -trait -trance -trap -travel -treat -treaty -tremor -trend -trendy -trial -trials -tribal -tribe -trick -tricky -triple -tripod -trivia -troll -troop -troops -trophy -tropic -trout -truly -trust -tryout -tulip -tumor -tumult -tundra -tuner -tunic -tunnel -turban -turkey -turtle -tutor -tuxedo -tweed -tweet -twelve -twenty -twice -twin -twist -tycoon -typify -typing -typist -tyrant -ugly -ukase -umlaut -unable -uncle -under -undone -unease -uneven -unfair -unfelt -unfit -unfold -unify -union -unique -unison -unite -united -unity -unjust -unkind -unless -unlike -unload -unlock -unmask -unpack -unpaid -unplug -unreal -unsafe -unseen -unsure -untie -until -untold -untrue -unused -unveil -unwise -unzip -upbeat -update -upheld -uphill -uphold -upkeep -upper -upright -uproar -upset -upward -urban -urchin -urgent -usage -useful -usher -usual -usurp -utmost -utopia -utter -vacant -vacate -vacuum -vague -vainly -valet -valid -valley -valor -value -values -valve -vampire -vandal -vanish -vanity -vapor -varied -varnish -vastly -veiled -velour -velvet -vendor -veneer -venue -verbal -verify -verse -versus -verve -vessel -viable -victim -video -viewer -vigil -vigor -villa -vinyl -viola -violet -violin -viper -viral -virgin -virile -virtue -virus -visage -vision -visit -vista -visual -vital -vivid -vocal -vodka -vogue -voice -volley -volume -vortex -voter -voucher -vowel -voyage -vulgar -wacky -wafer -waffle -wager -wages -wagon -waist -waiter -waken -walker -wallet -walnut -walrus -waltz -wand -wander -wanted -wares -warmly -warmth -warped -washer -waste -wasted -watch -water -waters -watery -waver -weaken -weakly -wealth -weapon -weather -weave -wedge -weekly -weigh -weight -weird -welder -whale -whaler -wharf -wheat -wheel -wheels -where -which -while -whirl -whisk -white -whiten -whole -widely -widen -widow -width -wildly -willow -window -windy -wings -winner -winter -wiper -wired -wiring -wisdom -wisely -wishes -witch -wither -within -wives -wizard -wolves -woman -women -wonder -wooden -woods -woolen -wordy -worker -works -world -worry -worse -worsen -worst -worth -worthy -wound -woven -wreck -wrist -write -writer -wrong -wrote -yacht -yard -yearly -years -yeast -yellow -yield -yogurt -young -yours -youth -zebra -zigzag -zipper -zodiac -zombie \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/fr_freecap_words b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/fr_freecap_words deleted file mode 100644 index 768263b..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/fr_freecap_words +++ /dev/null @@ -1,5072 +0,0 @@ -abats -abattu -abbaye -abb -abcs -aber -abtir -abme -abmer -abject -aboli -abolir -abonn -abord -aborde -abord -abords -about -abouti -aboyer -abrge -abri -abrite -abrit -abrupt -abruti -absent -absolu -abus -abuser -abusif -acacia -acajou -accde -accent -accs -accise -accord -accore -accru -accrue -accrus -accus -accuse -accus -acerbe -acre -acrer -achat -achats -achte -achet -achve -achev -acide -acides -acier -acquis -acquit -acre -acte -actes -acteur -actif -actifs -action -active -actuel -acuit -adagio -adapt -adepte -adhre -adieu -adieux -admet -admis -admise -adopte -adopt -adore -ador -adorer -adroit -aduler -adulte -arien -affam -afflux -afft -afin -agacer -agate -ge -ges -agence -agenda -agent -agents -ges -gs -agile -agir -agit -agite -agit -agite -agiter -agneau -agrafe -agrer -aidant -aide -aid -aident -aider -aides -aids -aient -aigle -aigre -aigri -aigu -aigu -aile -ailes -aille -aimait -aimant -aime -aim -aime -aiment -aimer -an -ane -ans -ainsi -aire -aires -airs -aise -ais -aise -aiss -ajout -ajoute -ajout -alarme -album -albums -alcali -alcool -alas -alne -alerte -alert -algue -alias -alibi -aline -align -alina -alit -allais -allait -allant -all -alle -alles -allge -aller -alls -allez -alli -allie -allier -allis -all -allons -allume -allure -alos -alors -alpage -alpes -alpha -alpin -altier -alto -amande -amant -amants -amas -ambigu -ambon -amen -amende -amne -amen -amene -amener -amens -amer -amre -mes -amibe -amical -amidon -amie -amiral -amis -amiti -amont -amoral -amorce -amorc -amour -amours -ampre -amphi -ample -amus -amuser -ananas -anche -ancien -ancre -andain -andin -anmie -nerie -ange -anges -angle -angora -animal -anime -anim -anime -animer -anims -anis -anneau -anne -annes -annexe -annuel -annule -anode -anodin -anse -antan -aorte -aot -aperu -aplomb -apoge -aptre -apparu -appel -appel -appels -apport -apprt -appris -appui -appuis -appuy -pre -aprs -pret -apte -aptes -arbre -arbres -arcade -arcane -arceau -arche -archet -ardent -ardeur -ardu -arne -arte -argent -argile -argot -arguer -aria -arias -aride -arme -arrt -arrte -arrt -arrts -arrhes -arrive -arriv -arros -artre -arts -ascte -asile -aspect -aspic -aspir -assaut -asse -assez -assis -assise -assume -assure -assur -asthme -astre -astuce -athe -atlas -atome -atonie -atout -atouts -tre -attend -attife -attire -attir -aube -aucun -aucune -audace -audit -auge -augure -aumne -aune -auprs -auquel -aura -aurais -aurait -aurons -auront -aurore -aussi -autant -autel -auteur -auto -autos -autour -autre -autres -autrui -auvent -avais -avait -aval -avaler -avance -avanc -avant -avare -avarie -avatar -avec -avenir -avenue -avre -averse -averti -aveu -aveux -avez -avide -avides -aviez -avilir -avion -avions -aviron -avis -avise -aviser -aviss -aviv -avocat -avoine -avoir -avons -avoue -avou -avouer -avril -axe -axes -axiome -ayant -azimut -azote -azot -azur -bcle -bacon -badaud -badge -bfrer -bagage -bague -bahut -baie -bail -bain -bains -baiser -baisse -baiss -balade -balai -balaye -balcon -balze -balise -balle -balles -ballet -ballon -ballot -bambin -bambou -banal -banale -banane -banc -banco -bancs -bande -bandit -bang -banjo -bannir -banque -baobab -barbe -barber -barbes -barbu -barde -barme -barge -baril -barils -barman -baron -barons -barque -barre -barrer -barres -barrot -bars -baryum -base -bas -base -baser -bases -basket -basse -basses -bassin -bateau -bti -btir -bton -btons -bats -battre -battu -battus -baudet -baume -bavard -bave -baver -bavure -bazar -beau -beaut -beaux -bb -bbs -bcane -bcher -bcot -beige -beigne -bler -blier -belle -belles -bni -bnin -bnir -berc -bercer -bercez -bret -berge -berger -berges -bern -berner -besoin -bta -btail -bte -btes -btise -bton -bette -beurre -bvue -biais -bide -bidon -bien -biens -bire -biffer -bigle -bijou -bijoux -bilan -bilans -bile -biler -bileux -bill -billes -billet -binme -bipde -bique -biquet -bise -bison -bisou -bitume -bitum -blague -blme -blmer -blanc -blancs -blase -blason -blatte -bled -blme -blmir -bless -bleu -bleue -bleues -bleus -blind -bloc -blocs -blocus -blond -blonde -bloque -bloqu -blouse -blues -bobine -bocage -bocal -bock -boeuf -boire -bois -boite -bote -boiter -botes -bombe -bombes -bonace -bonbon -bond -bonde -bondir -bonds -bonne -bonnes -bonnet -bons -bont -bonus -boom -bord -borde -bords -borne -born -borner -bornes -bosse -bosser -bossu -botte -bottes -bottin -bouc -boucan -bouche -boucle -boucl -bouder -boudin -boue -boue -boueux -bouffe -bouge -boug -bouger -bougie -boulet -boulot -boum -bourbe -bourde -bourg -bourse -bout -bouton -bouts -bovin -boxe -boxeur -boyau -brai -braise -brame -brandy -bras -brave -braver -bravo -brebis -brche -bref -brefs -breton -brve -brves -brevet -bribes -bride -brider -bridge -brigue -brin -brio -brique -brise -bris -brise -briser -broder -bronze -brosse -broyer -bruine -bruit -bruits -brle -brler -brume -brun -brunch -brune -brunir -brut -brute -brutes -bcher -budget -buffet -buffle -buire -bulbe -bull -bulle -bure -bureau -bute -buter -butin -butor -buts -butte -cabale -cabane -cabine -cble -cbl -cbles -cbls -cabot -cabri -cacao -cache -cach -cache -cacher -cachs -cachet -cadeau -cadet -cadran -cadre -cadres -caduc -cafard -caf -cafs -cage -cageot -cagibi -cagnes -cahier -cahute -caisse -calcul -caler -clin -cline -calme -calmer -calmes -camra -camion -camp -campe -camps -campus -camus -canal -canard -canaux -cancan -cancer -cane -canne -cannes -canot -cantal -canton -capes -capter -captif -carafe -carat -carcan -carder -cargo -cargos -carmin -carnet -carpe -carr -carre -carrs -carte -cartel -carter -cartes -carton -case -caser -cases -casino -casque -casse -cass -casser -castel -catin -cause -cause -causer -causes -cavale -cave -caves -caviar -cavit -ceci -ccit -cdant -cde -cd -cder -cela -celer -cleri -celle -celles -celui -cendre -cendr -cens -cense -censs -cent -centre -cents -cercle -cerf -cerise -cerne -cerner -cernes -certes -cesse -cess -cesser -cessez -cette -ceux -chacun -chane -chair -chaire -chairs -chaise -chle -chalet -champ -champs -chance -change -chang -chant -chante -chant -chants -chaos -chapon -chaque -char -charge -charge -charme -chars -charte -chas -chasse -chass -chaste -chat -chats -chaud -chaude -chauds -chaume -chauve -chaux -chef -chefs -chemin -chenet -chque -cher -chre -chres -chri -chrir -chers -chtif -cheval -cheveu -chvre -chez -chic -chicon -chien -chiens -chimie -chiper -chlore -choc -chocs -choeur -choir -choisi -choix -chope -choper -choque -chose -choses -chou -choyer -chute -chut -chuter -cible -cibles -ciel -cierge -cieux -ciller -cils -cime -ciment -cin -cinma -cingle -cinq -cintre -cire -cirque -citant -cite -cit -cite -cites -citer -cits -citons -citron -civil -civile -civils -clair -claire -clairs -clame -clamer -clan -clans -claque -clart -classe -class -clause -clef -clefs -clerc -clerg -cls -clich -client -climat -clin -cliver -cloche -clope -cloque -clore -clos -close -clou -clouer -clown -club -clubs -coca -cocon -code -codes -coeur -coffre -cognac -cogne -cogner -cohue -coiffe -coin -coinc -coins -cola -colre -colin -colis -colle -coller -collet -colore -cols -coma -combat -combe -comble -comble -comit -comme -commis -commun -compas -compte -compt -comte -comte -concis -conclu -conu -conue -conus -confie -confie -confit -confus -cong -congs -connu -connue -connus -connut -consul -conte -conter -contes -contre -convie -convoi -copain -copie -copier -copies -copine -coque -coran -corde -cordes -cordon -corne -cornes -cornu -corps -corpus -cors -corss -corve -cosmos -cosse -cotais -cote -cte -cot -coteau -cote -cotes -ctes -cots -couard -couche -couch -coucou -coude -coudre -coule -coule -couler -coup -coupe -coup -coupe -couper -coupes -coups -couple -coupon -coups -cour -courbe -courge -courir -cours -course -court -courte -courts -couru -cousin -cot -cote -coter -cots -couver -couvre -crabe -craie -crains -craint -crampe -cran -crane -craner -craque -crasse -crayon -cra -crant -crche -crdit -credo -cre -cr -cre -cres -crent -crer -crme -crole -crpe -crpi -crpir -crpu -crte -crtin -creuse -creus -creux -crve -crever -criant -crible -crie -cri -crient -crier -crime -crimes -crin -crique -cris -crise -crises -croc -croire -crois -croise -croise -croit -croix -crotte -crotte -croupe -crote -croyez -cruche -cruel -cuba -cubain -cube -cuber -cubes -cuir -cuire -cuisse -cuit -cuite -cuiter -cuivre -cuivre -culot -culte -cumul -cumule -cupide -cure -cure -curer -curie -cursus -cuve -cuveau -cycle -cycles -cygne -dague -dahlia -dais -dallai -dallas -dalle -daller -damas -dame -dames -dandy -danger -danois -dans -danse -danser -danses -dard -darder -data -datant -date -dat -date -dates -datent -dater -dates -datif -dbat -dbats -dbile -dbit -debout -dbris -dbut -dbute -dbut -dbuts -dcade -dcde -dcent -dcs -dche -dchet -dchu -dcida -dcide -dcid -dclin -dcor -dcor -dcors -dcote -dcret -dcri -dcrit -du -due -dus -ddain -dedans -ddi -ddier -ddire -dfait -dfaut -dfend -dfi -dfier -dfil -dfini -dfis -dfunt -dgage -dgag -dgt -dgts -dgel -dgot -degr -degrs -dehors -dj -dlai -dlais -dlaye -dlice -dlie -dlier -dlire -dlit -dlits -delta -dluge -demain -dment -demi -demie -demis -dmod -dmon -dmons -denier -dnis -denre -dense -dent -dents -dpart -dpend -dpens -dpit -dpose -dpos -dpt -dpts -depuis -dput -drive -driv -dsert -design -dsir -dsire -dsir -dsirs -dsol -dessin -dessus -destin -dsuet -dsuni -dtail -dtenu -dtour -dette -dettes -deuil -deux -devais -devait -devant -devenu -devez -dvier -devine -devint -devis -devise -devoir -dvolu -devons -dvot -dvou -devra -dextre -diable -diane -diapre -dicte -dicter -dicton -diesel -dite -dieu -dieux -digne -dignes -digue -dilate -dilue -diluer -dner -dners -dingue -dira -dirais -dirait -dire -direct -dirige -dirige -diront -disais -disait -disant -dise -disent -disons -dispos -disque -disse -dite -dites -dits -diurne -divan -divers -divin -divine -divise -divis -docile -docker -dodo -dogme -dogmes -doigt -doigt -doigts -dois -doit -doive -dollar -dme -domine -domin -donc -donjon -donna -donne -donn -donne -donner -donnes -dons -dont -dorage -dor -dorer -dormir -dorsal -dort -dorure -dosage -dose -doser -doses -dote -dot -dote -dotes -doter -dotes -douane -double -doubl -douce -douces -douche -dou -dous -doute -douter -doutes -doux -douze -doyen -dragon -drame -drames -drap -dresse -dress -drogue -droit -droite -droits -drle -drles -duel -dues -dment -dunes -duos -dupe -dup -duper -duquel -durant -duras -durcir -dure -dur -dure -dures -durent -durer -durera -dures -durs -duvet -eaux -bahi -bahir -bne -cale -cart -carte -carts -chec -checs -chine -cho -chos -choue -clair -clat -clate -clat -clats -clop -clore -cluse -cole -coles -corce -coute -cout -cran -crans -cras -cri -crire -crit -crite -crits -crou -cueil -cume -curie -cus -den -dent -dit -dit -diter -efface -effac -effet -effets -effort -effroi -gal -gale -gales -gard -gards -garer -gaux -gayer -gide -glise -hont -lan -lanc -lans -largi -lve -lev -leve -lever -lves -levs -lim -limer -lire -lite -lites -elle -elles -loge -loges -luder -lue -lus -maci -email -mane -maner -mch -met -meute -migr -mis -mise -mises -emmen -moi -motif -empan -empire -emplir -emploi -empote -enclin -enclos -encore -encre -enduit -enfant -enfer -enfers -enfin -enfle -enfler -engage -engag -engin -engins -nime -nigme -enjeu -enjeux -enjoue -enlev -ennemi -ennui -ennuis -norme -entame -entam -entend -entte -entier -entit -entre -entr -entre -entrer -entrs -entrez -envahi -envers -envi -envie -envier -envoi -envoie -envol -envoy -pais -pat -pater -paule -pave -pe -pice -picer -pics -pier -pine -pines -ptre -ponge -pope -poque -pouse -pous -poux -pris -prise -puis -purer -quipe -quip -quit -riger -roder -errer -erreur -erron -rudit -escale -escroc -espace -espce -espre -espr -espion -espoir -esprit -esquif -essai -essaie -essais -essaye -essieu -essor -essuy -estime -estime -table -tabli -tage -tages -tai -tain -tais -tait -taler -talon -tame -tamer -tang -tant -tape -tapes -tat -tats -tau -tay -tayer -tendu -tes -ts -ethnie -tions -tirer -toffe -toile -tonne -tre -trier -troit -tude -tudes -tudie -tudi -tui -eurent -euro -vacu -vad -value -valu -vas -vch -vque -vier -vite -vit -viter -volue -volu -voque -voqu -exact -exacte -exalte -examen -excs -exclu -exclue -exclus -exclut -excuse -exempt -exerce -exerc -exige -exig -exiger -exigu -exil -exile -exiler -exiles -existe -exist -exode -expert -expier -expose -expos -exprs -exquis -extra -fable -face -faces -fch -fcher -facial -facile -faon -faons -facto -fada -fade -fades -fado -fagne -fagot -faible -faille -failli -faim -fais -faisan -fait -faite -fate -faites -faits -fallu -fallut -falot -fameux -famine -faner -fange -farce -farcir -fard -farder -farine -fascia -fasse -faste -fatal -fatale -fatras -fatum -fauche -faucon -faudra -faune -fausse -faut -faute -fautes -fautif -fauve -fauves -faux -faveur -favori -fcond -ferie -fes -feint -feinte -fl -fler -flon -femme -femmes -fendre -fente -fera -ferai -ferait -ferme -ferm -ferme -fermer -fermes -ferms -froce -ferons -feront -ferr -ferre -ferrer -ferry -fers -festin -fte -fte -fter -ftes -feu -feutre -feux -fve -fiable -fiacre -fiance -fiasco -fiat -fibre -fibres -fiche -ficher -fiches -fichu -fictif -fidle -fief -fieffe -fiel -fier -fire -fiers -fiert -fivre -figaro -fige -figue -figure -figure -file -filer -files -filet -filets -fille -filles -film -filme -filmer -films -filon -filou -fils -filtre -final -finale -finaud -fine -fini -finie -finir -finira -finis -finit -fins -firent -firme -firmes -fisc -fiscal -fixant -fixe -fix -fixe -fixes -fixer -fixes -fixs -flair -flamme -flanc -flner -flaque -flash -flau -flche -flegme -flemme -fleur -fleuri -fleurs -fleuve -flic -flop -flore -flores -flot -flots -flotte -flou -floue -flous -fluide -flux -foetus -foie -foin -foire -foires -fois -foison -folie -folies -folle -folles -fonc -fond -fonde -fond -fonde -fonder -fonds -fondre -fonds -font -fonte -forage -force -forc -forcer -forces -forcs -forcir -forer -fort -forts -forge -forg -forger -format -forme -form -forme -formel -former -formes -forms -fort -forte -fortes -forts -forum -fosse -foss -foudre -fouet -fougue -fouir -foule -foule -fouler -foules -four -fourbe -fourbi -fourmi -fourni -fours -fous -foutre -foutus -foyer -foyers -fracas -frai -frais -fraise -franc -franco -francs -francs -frappe -frappe -fraude -frein -freins -frmir -frre -frres -fret -friand -fric -frigo -frime -frimer -fripon -frire -frise -friser -froc -froid -froide -frle -frler -fronde -front -fronts -frugal -fruit -fruits -fugace -fuient -fuir -fuit -fuite -fuites -fume -fumer -fumet -fumeur -furent -furet -fureur -furie -furtif -fuse -fuses -fusion -fut -futile -fts -futur -future -futurs -fuyant -gcher -gchis -gadget -gadoue -gaffe -gage -gager -gages -gagne -gagn -gagne -gagner -gaiet -gain -gaine -gaines -gains -gala -galant -galre -galles -galure -gamin -gamins -gamme -gandin -gang -ganse -gant -gants -garage -garant -garon -garde -gard -garder -gardes -gardes -gare -garer -gares -garnir -gars -gte -gteau -gter -gauche -gaver -gaze -gazeux -gazole -gazon -gant -gante -gants -gel -geler -glule -gmine -gmir -gnant -gendre -gne -gne -gn -gner -gnes -gns -gense -gneur -gnial -gnie -gnome -genou -genoux -genre -genres -gens -gentil -gele -grant -gerbe -gerber -gre -gr -gre -grent -grer -grs -germe -germer -geste -gestes -giaour -gibet -gibier -gigot -gigots -gilets -gilles -girafe -giron -gitan -gitane -givre -glace -glac -glacer -glaon -glaise -glaive -glande -glapir -glisse -gliss -global -globe -gloire -glose -gloser -gluant -gober -gogo -goitre -golf -golfe -gomme -gommer -gonfle -gorge -gorge -gorger -gosier -gosse -gosses -goujat -goulag -goulet -goulot -goulu -gousse -got -goter -gots -goutte -grce -grces -grade -grades -gradin -grain -graine -grains -gramme -grand -grande -grandi -grands -grange -granit -graphe -grappe -gras -grasse -gratin -gratis -grave -grav -graver -graves -gravir -grec -grecs -green -greffe -grle -grenu -grve -grves -griefs -griffe -gril -grille -grimer -grippe -gris -grise -griser -grises -grive -grogne -gros -grosse -grotte -group -groupe -grue -guelte -guenon -gupe -gure -gurir -guerre -guet -guette -gueule -guide -guider -guides -guidon -guinde -guise -gypse -habile -habit -habite -habite -habits -hache -hacher -haie -haine -har -hale -haler -haler -hall -halle -halles -halte -hameau -hampe -hanche -hangar -hante -hante -happe -happer -hareng -harpe -hasard -hte -hter -hausse -haut -haute -hautes -hauts -havane -havas -have -have -havre -heaume -hbt -hein -hlas -hler -hlice -hlium -hennir -hraut -herbe -herbes -hrit -hron -hros -hsite -hsit -heure -heures -heurte -heurt -heurts -hibou -hideux -hier -hindou -hisser -hiver -hoche -hocher -homard -homme -hommes -honore -honte -hormis -hors -hostie -hte -htel -htels -htes -houle -hourra -housse -huile -huiler -huis -huit -hutre -humain -humble -humer -humeur -humide -humour -hure -hurler -hurrah -hutte -hyne -hymne -iceux -icne -ictre -idal -idale -idaux -ide -ides -idiot -idiote -ignare -ignore -ignor -les -image -image -images -imam -imide -imiter -impact -impair -imper -impie -impoli -impose -impos -impt -impts -impuni -impur -inapte -incite -incit -inclus -inde -inde -index -indice -indien -induit -indit -ingal -inepte -inerte -infme -infect -infime -infini -ingnu -ingrat -inique -initi -injure -inn -inou -insre -instar -insu -intact -intime -intrus -invite -invit -iode -irait -iris -ironie -iront -irrel -irrit -isol -isole -isoler -isols -issu -issue -issues -issus -ivoire -ivre -jade -jadis -jaguar -jaloux -jamais -jambe -jambes -jambon -japon -japper -jardin -jargon -jarret -jars -jaser -jauge -jauger -jaune -jaunes -jaunir -jazz -jeans -jetait -jetant -jet -jete -jeter -jets -jeton -jetons -jette -jeudi -jeun -jeune -jeune -jeunes -jeux -joie -joies -joint -joints -joker -joli -jolie -jolis -jonc -joua -jouait -jouant -joue -jou -joue -joues -jouent -jouer -jouera -jouet -jouets -joueur -joug -joujou -jour -jours -jovial -joyeux -jubile -judas -judo -juge -jug -juge -juges -jugent -juger -juges -jugs -juin -jumeau -jument -jungle -junte -jupe -jupes -jupon -jura -jure -jure -jurer -jures -juron -jury -jurys -jusant -jusque -juste -justes -jute -juteux -kilo -kilos -kilt -klaxon -krach -kyste -label -labeur -labour -lacet -lacez -lche -lcher -lacs -lact -lacune -ladite -lagune -lac -lacs -laid -laine -laine -laque -laissa -laisse -laiss -lait -laiton -laitue -laus -lama -lambin -lame -lamie -lampe -lamper -lance -lanc -lance -lancer -lances -landes -lange -langes -langue -lapin -lapins -laps -lapsus -laque -laquer -larcin -lard -large -larges -larme -larmes -larynx -lascif -laser -lasse -lasser -latin -latine -latte -lavabo -lave -laver -laye -leader -leon -leons -lgal -lgale -lgaux -lger -lgre -lgers -lgion -legs -lguer -lgume -lent -lente -lents -lequel -lser -lsion -lest -lester -lettre -lettr -leur -leurre -leurs -levain -levant -lve -lev -leve -leves -lvent -lever -levs -levier -lvre -lvres -levure -lzard -liant -liasse -libre -libr -libre -libres -lice -lichen -licite -licou -lie -lies -lige -lien -liens -lier -lis -liesse -lieu -lieux -livre -ligne -ligne -lignes -ligue -lilas -lim -limer -limite -limit -linge -lion -lionne -lions -lire -lisant -lisent -lisre -liseur -lisse -lisser -liste -listes -litige -litre -litres -lits -livre -livr -livre -livrer -livres -livrs -livret -lobby -local -locale -locaux -loge -loger -loges -loges -logeur -logis -logo -loin -loir -lois -loisir -long -longs -longue -look -lopin -loque -lord -loriot -lors -loto -lots -louche -loue -loue -louer -loueur -louis -loup -loupe -louper -loups -lourd -lourde -lourds -loyal -loyer -loyers -lucide -luette -lueur -luire -luis -lundi -lune -lustre -lutrin -lutte -lutter -luttes -luxe -luxer -lyce -lycen -lyces -lyse -mcher -machin -maon -maons -macro -madame -madone -mafia -magie -magnat -maigre -maille -main -mains -maints -maire -maires -mairie -mais -mas -maison -matre -majeur -major -major -majors -malade -mle -malgr -mali -malice -malin -malle -maman -manche -mandat -mander -mange -manger -manie -manier -manne -manque -manqu -mans -manuel -maquis -marais -marbre -marc -marche -march -mardi -mare -mare -mares -marge -marges -mari -mari -marie -marier -maris -marin -marina -marine -marins -marmot -marne -marner -marque -marque -marre -marrer -marron -mars -martyr -masque -masque -masse -masses -massif -mastic -masure -match -mater -maths -matin -matins -maudit -mauve -maux -maxime -mayas -mcano -mche -mecs -mdia -mdian -mdias -mdire -mfie -mfier -mgre -mlant -mle -ml -mle -mlent -mler -mls -melon -membre -mme -mmes -menace -menac -mnage -mnag -menait -menant -mne -men -mene -menes -mnent -mener -mens -meneur -mental -menthe -mentir -menton -menu -menus -merci -merde -mre -mres -mrite -mrit -merle -merlin -mers -messe -messie -mestre -mesure -mesure -mtal -mtaux -mto -mtier -mtis -mtre -mtres -mtro -mets -mette -mettra -mettre -meuble -meurt -micmac -micro -micros -midi -miel -mien -mienne -miens -miette -mieux -mikado -milan -milan -milice -milieu -mille -milles -mimi -mince -minces -mine -mines -minet -mineur -mini -minier -minime -minou -minuit -minute -mioche -mirage -miroir -mise -miser -misre -mises -mitige -mitre -mixte -mixtes -mobile -moche -mode -modle -modre -modes -module -moine -moines -moins -mois -moise -moisi -moite -moitie -mle -mollet -moment -monde -mondes -monme -mont -monte -mont -monte -monter -monts -montre -montr -moque -moral -morale -moraux -mordre -morgue -morne -morose -mort -morte -mortel -mortes -morts -morue -morve -motard -moteur -motif -motifs -motion -motive -moto -motos -mots -mouche -moue -moufle -moule -mouler -moules -moulin -mourir -mourut -mousse -mouton -moyen -moyens -muet -muets -muette -mufle -mule -mules -muni -munir -munis -mures -muret -mrir -murs -murs -muscle -muse -muses -mutile -mutuel -myope -myopie -mythe -mythes -nabot -nage -nager -naf -nain -naisse -nat -natre -nantis -naphte -nappe -nappes -naquit -narine -narrer -nase -naseau -natal -natale -natif -nation -natte -natter -nature -nause -naval -navale -navet -navire -navrer -nant -nes -ngoce -neige -neiges -non -nerf -nerfs -nervi -nets -nette -nettes -neuf -neufs -neural -neutre -neuve -neuves -neveu -niais -niant -nicher -nickel -nice -nier -nigaud -nimber -nipper -nippes -niveau -noble -nobles -noce -noces -noir -noire -noires -noirs -noix -nolis -nomade -nombre -nomme -nomm -nomme -nommer -nomms -noms -nonce -nonne -nord -normal -norme -normes -notait -notant -note -note -notent -noter -notera -notes -notice -notion -notons -notre -ntre -ntres -nou -nouer -nounou -nourri -nous -nouvel -novice -noyau -noy -noyer -nuage -nuages -nuance -nuanc -nudit -nue -nues -nuire -nuit -nuits -nulle -nuls -numro -nuque -nurse -oasis -obir -obse -objet -objets -oblige -oblig -obscur -obtenu -obtus -obus -occupe -occup -ocan -octroi -odeur -odeurs -odorat -oeufs -oeuvre -offert -office -offre -offres -offrir -ogre -oignon -oindre -oiseau -oiseux -oisif -olive -ombre -ombres -omis -once -oncle -onde -ondes -ongle -ongles -onze -opaque -open -opra -opras -opre -opr -opre -oprer -oprs -oppose -oppos -opte -option -orage -orages -oral -orale -orange -orbite -ordre -ordres -ordure -ores -organe -orge -orgue -orient -orne -orner -orteil -ortie -oscar -osent -oser -osseux -otage -otages -ter -ouate -oubli -oublie -oubli -ouest -ouest -oue -oues -our -oukase -ourdir -ourlet -ours -ourse -oursin -ourson -outil -outils -outre -ouvert -ouvre -ouvrir -ovaire -ovule -oxyde -oxyder -pacage -pacte -page -pages -paie -paen -paient -paille -pain -pair -paire -paires -pairs -paix -palace -palais -pale -palier -plir -palis -palme -palper -panier -panne -pannes -pans -panser -pantin -papa -pape -papier -papule -paquet -parade -parat -parc -parce -parcs -pardon -pare -par -pareil -parent -parer -parfum -pari -parier -paris -parit -parle -parl -parle -parler -parlez -parmi -paroi -parois -parole -part -parti -partie -partir -partis -parts -paru -parue -parure -parus -parut -passa -passe -pass -passe -passer -passes -passif -patate -pte -pt -patre -ptes -ptir -patois -ptre -patrie -patron -patte -pattes -paume -paumer -pause -pauvre -pavage -pave -payait -payant -paye -pay -paye -payes -payer -payes -pays -paysan -page -peau -pche -pche -pcher -pcher -pgre -peigne -peine -pein -peiner -peines -peint -pelage -pel -peler -pelle -pelote -pelure -pnal -pnale -penaud -penche -pench -pendre -pendu -pense -pens -pense -penser -pensez -pensif -pente -pentes -pentu -ppin -perce -percer -perche -peru -perue -perus -perd -perdre -perdu -perdue -perdus -pre -pres -pri -pril -prils -prim -prir -perle -perles -permet -permis -permit -persil -perte -pertes -pesait -pesant -pse -pes -psent -peser -peste -pester -ptale -petit -petite -petits -ptri -ptrir -peuple -peupl -peur -peut -peux -phare -phares -phase -phases -phones -phono -phoque -photo -photos -phrase -piano -picard -pichet -pics -pice -pices -pied -pieds -pige -pige -pigs -pierre -pierre -pit -piton -pitre -pieu -pieux -pigeon -piger -pignon -pile -pilier -piller -pilon -pilot -pilote -pilule -piment -pince -pince -pincer -pinces -pingre -pins -pinte -pioche -pion -pipe -pique -piquer -piquet -piqre -pire -pires -piste -pistes -piteux -piti -pitre -pivert -pivot -place -plac -place -placer -places -placs -plage -plages -plaide -plaid -plaie -plaies -plaine -plaint -plaire -plat -plan -plane -planer -plans -plant -plante -plante -plaque -plat -plate -plates -pltre -plats -plbe -plein -pleine -pleins -pleure -pleurs -plier -plis -plomb -plonge -plong -plouc -ployer -pluie -pluies -plume -plumer -plumes -plumet -plus -plutt -pneu -pneus -poche -poches -pole -pome -pomes -posie -pote -potes -pognon -poids -poil -poing -point -pointe -points -pointu -poire -poison -poisse -poivre -poix -polar -ple -ples -poli -police -polir -pomme -pommes -pompe -pomper -pompes -ponant -poncif -poney -pont -ponts -pope -popote -porc -port -porte -port -porte -porter -portes -ports -porto -ports -posait -posant -pose -pos -pose -poses -posent -poser -poses -postal -poste -poster -postes -potage -pote -poteau -potes -potin -pots -pouce -poudre -poule -poulet -poulie -pouls -poumon -poupe -poupe -poupon -pour -pourra -pourvu -pousse -pouss -poutre -pouvez -prche -prcis -prdit -prfet -prend -prends -prenez -prenne -prnom -prs -prs -presse -press -prt -prte -prt -prter -prtes -prts -preuve -preux -prvu -prvue -prvus -prie -pri -prier -prire -pris -prieur -primat -prime -prim -primer -primes -prince -priori -pris -prise -prises -prison -prit -prive -priv -prive -priver -privs -prix -probe -procs -proche -prof -profil -profit -proie -projet -promet -promis -prompt -promu -promus -prne -prner -pronom -propos -propre -prose -prote -prou -proue -prouve -prouve -prune -pseudo -psych -public -publie -publi -puce -puces -puche -pudeur -puer -puril -puis -puise -puiser -puisse -puits -pulpe -pulser -punir -pure -purent -pures -puret -purge -purger -purs -pyjama -quai -quais -quand -quant -quart -quarts -quasi -quatre -quel -quelle -quels -qute -quter -quinte -quinze -quitte -quitt -quoi -quota -quotas -rabais -race -races -rachat -racine -racket -racle -racler -radar -radars -rade -radeau -radier -radin -radine -radio -radios -radis -radius -rafale -raffut -rage -ragot -raid -raide -raids -raie -rail -rails -rais -raisin -raison -rler -rallie -rallye -rame -rameau -ramne -ramen -rames -rameur -rampe -ramper -ranon -rang -range -rang -range -ranger -rangs -rapace -rp -rper -rapide -rapine -rappel -rapt -rare -rares -raret -rase -raser -rasoir -rassis -rate -rate -rteau -rater -rates -ration -rats -rauque -ravage -ravage -ravi -ravin -ravir -ravis -ray -rayer -rayon -rayons -ragi -ragir -ragit -rebord -rebut -recel -rcent -rche -rcif -rcit -rcits -reclus -reoit -record -reu -reue -reues -recul -recule -recule -reus -rcuse -reut -rdige -redire -redite -rduit -rel -relle -rels -rlu -refait -rfre -rfr -reflet -reflux -refuge -refus -refusa -refuse -refus -regain -regard -rgie -rgime -rgion -rgis -rgle -rgl -rgle -rgler -rgles -rgls -rgne -rgner -regret -rein -reine -reins -rejet -rejet -rjoui -relais -relent -relve -relev -relie -reli -relief -relier -relire -remde -remet -remis -remise -remous -rempli -remuer -renard -rend -rende -rendez -rendit -rendra -rendre -rendu -rendue -rendus -renie -renier -rennes -renom -renoue -rnove -rente -rentre -rentr -renvoi -rpand -repart -repas -repre -repr -rpte -rpt -rpit -repli -rpond -report -repos -repose -repris -repu -rput -requin -requis -rseau -rside -rsidu -rsine -rsolu -resta -reste -rest -reste -rester -restes -rests -rsume -rsum -retard -retenu -rtine -retire -retire -retour -rets -runi -runie -runir -runis -runit -russi -rvait -rve -rv -rveil -rvla -rvle -rvl -revenu -rver -rvre -revers -rves -revt -rveur -rvise -revoir -revu -revue -revues -rhume -riche -riches -ride -rideau -rien -rigide -rigole -rigolo -rime -rincer -ripa -riper -rire -rires -rise -risque -risque -rite -rites -rituel -rivage -rival -rivale -rivaux -rive -rives -robe -robes -robin -robot -robots -roche -rocher -rock -roder -rdeur -rognon -rois -rle -rles -romain -roman -romans -rompre -rompt -rompu -rompus -rond -ronde -rondes -ronger -rosa -rose -roseau -rose -roses -rosier -rtir -roue -rouer -roues -rouge -rouges -rougir -roui -roule -rouler -round -route -routes -roux -royal -royale -ruban -ruche -rucher -rude -rudes -rue -rues -rugby -ruine -ruiner -ruines -rumeur -rupin -rural -rurale -ruraux -ruse -rus -ruser -rustre -rythme -sable -sables -sabre -sache -sachet -sacr -sacre -sacs -saga -sagace -sage -sages -sain -saine -saint -sainte -saints -sais -saisi -saisie -saisir -saisis -saisit -saison -sait -sajous -salade -salami -sale -sale -saler -sales -salet -salin -saline -salir -salive -salle -salles -salon -salons -salue -salue -saluer -salut -sang -sangle -sans -sant -saoul -saper -sapes -sapin -sapins -satin -satire -sauce -sauf -sauge -saule -saumon -saura -saut -saute -saute -sauter -sauve -sauv -sauver -sauvs -savais -savait -savant -savate -savent -saveur -savez -savon -savons -sceau -sceaux -scell -scne -scnes -schma -sciage -scie -scier -scinde -scoop -score -scores -sance -seau -sche -scher -sches -second -secoue -secret -secs -sduit -seigle -seing -sisme -seize -sjour -selle -seller -selon -semble -sembl -sme -semer -semis -snat -senne -sens -sens -sent -sente -senti -sentir -spare -spar -sept -sera -serai -srail -serais -serait -serein -serf -srie -sries -sermon -serons -seront -serre -serr -serre -serrer -serres -serrs -sert -serve -servi -servie -servir -servis -seuil -seuils -seul -seule -seules -seuls -sve -svre -svir -sidr -sicle -sige -siger -siges -sien -sienne -siens -sigle -signal -signe -sign -signe -signer -signes -signs -sillon -simple -singe -singes -sinon -sioux -sirne -sirop -site -sites -situe -situ -situe -situer -situs -skieur -slogan -snob -snober -sobre -social -socle -sodium -soeur -soeurs -soie -soient -soif -soigne -soin -soins -soir -soire -soirs -soit -soldat -solde -solde -solder -soldes -soleil -solide -solive -solo -sols -sombre -somme -sommes -sommet -sonate -sonde -sonder -songe -song -songer -sonne -sonn -sonner -sonore -sons -sont -sorgho -sort -sorte -sortes -sorti -sortie -sortir -sortis -souche -souci -soucis -soud -souder -soufre -soumet -soumis -soupe -souper -soupir -souple -source -sourd -sourde -sourds -souris -sourit -sous -soute -soyons -spasme -sphre -sphinx -spore -sport -sports -spot -squame -square -stable -stade -stades -stage -stages -stalle -statue -statut -stock -stocks -stoppe -stores -strate -stress -strict -studio -style -styles -stylo -suant -suave -subi -subie -subir -subit -subtil -succs -sucer -sucre -sucr -sude -suer -sueur -suffit -suie -suis -suit -suite -suites -suivi -suivie -suivis -suivra -suivre -sujet -sujets -super -sure -sures -sret -surgi -surgir -surgit -surnom -surs -sursis -survie -survit -suture -svelte -sympa -synode -syrien -tabac -table -tables -tabou -tabous -tache -tach -tacher -taches -tacite -tact -taie -taille -taille -tain -taire -talent -talon -talons -talus -tamis -tampon -tancer -tandem -tandis -tango -tanin -tanner -tannin -tant -tante -tantt -tapage -tape -taper -tapie -tapis -taquin -tard -tarde -tarder -tardif -tare -tari -tarif -tarifs -tarin -tarir -taris -tarte -tasse -tass -tasser -tter -ttons -taule -taupe -taux -taxe -taxer -taxes -taxi -taxis -teint -teinte -tl -telle -telles -tels -telson -tmoin -tempe -tempes -temple -tempo -temps -tenace -tenait -tenant -tend -tendon -tendre -tendu -tendue -tendus -teneur -tenir -tennis -tnor -tnors -tente -tent -tente -tenter -tentes -tenu -tenu -tenue -tenues -tenus -terme -termes -terne -ternir -terre -terres -tertre -test -tester -tests -tte -ttes -ttu -texte -textes -thme -thmes -thse -thses -thon -thorax -thym -tibia -ticket -tide -tidir -tien -tienne -tiens -tient -tiers -tige -tigre -tigr -tilde -timbre -timbre -timide -timon -timor -tinter -tirage -tirant -tire -tir -tire -tires -tirent -tirer -tirs -tireur -tiroir -tirs -tiss -tisser -tissu -tissus -titan -titre -titres -toile -toiles -toison -toit -toits -tle -toll -tomate -tombe -tomb -tombe -tomber -tombes -tombs -tome -tondre -tonne -tonner -tonnes -tons -tonus -toque -torche -tordre -torse -tort -tortue -total -totale -touche -touch -touer -touffe -touffu -toupet -tour -tourbe -tourne -tourn -tours -tous -tout -toutes -toux -tracas -trace -trac -trace -tracer -traces -tract -tracts -trafic -trahi -trahir -train -trane -trains -traire -trait -traite -trait -traits -trajet -tram -trame -tramer -transi -trappe -traque -trfle -treize -trempe -tremp -trente -trs -trsor -trve -tribu -tribus -tricot -trier -trimer -trio -tripes -triple -tripl -triste -troc -trois -trombe -trompe -tromp -tronc -troncs -trne -trop -trou -troupe -trous -trouva -trouve -trouv -truand -truc -truque -tuant -tube -tubes -tuile -tulipe -tunnel -turbo -tutu -tuyau -tympan -type -types -typhon -typo -tyran -ukase -ultime -unes -unie -unies -unifi -union -unions -unique -unir -unis -unit -unit -units -urbain -urgent -urnes -usage -usager -usages -user -usine -usiner -usines -usuel -usure -utile -utiles -utopie -vacant -vaccin -vacuum -vague -vagues -vaille -vain -vaincu -vaines -vais -valait -valent -valet -valeur -valide -valise -valle -valoir -valse -vamp -vanit -vanne -vanner -vanter -vapeur -varie -varie -varier -varis -vase -vaseux -vasque -vaste -vastes -vaudra -vaut -veau -vcu -vcue -vcues -veille -veine -vlo -venait -venant -vend -vendre -vendu -vendue -vendus -vnre -venez -venger -venin -venir -venons -vent -vente -venter -ventes -ventre -vents -venu -venue -venues -verbal -verbe -vrit -verni -vernir -vernis -vrole -verre -verrou -vers -verse -vers -verse -verser -verss -verso -vert -verte -vertes -verts -vertu -vertus -verve -veste -vestes -veston -vtir -veto -vtu -vtus -veuf -veule -veut -veuve -veux -vexant -vexer -viande -vibrer -vice -vicier -vide -vid -vido -vider -vides -vieil -viens -vient -vies -vieux -vifs -vigile -vigne -vilain -villa -ville -villes -vingt -vins -vint -violet -violon -vipre -virage -virent -virer -viril -virus -visa -visage -visait -visant -visas -vise -vis -vise -vises -visent -viser -vision -visite -visit -visser -visuel -vital -vite -vitre -vitres -vivace -vivait -vivant -vive -vivent -vives -vivier -vivons -vivra -vivre -vivres -vlan -vodka -voeux -vogue -voguer -voici -voie -voient -voies -voile -voiler -voiles -voir -voire -voirie -vois -voisin -voit -voix -volage -volant -volcan -vole -vol -vole -voles -voler -volet -volets -voleur -volige -vols -volume -volute -vont -votant -vote -vot -vote -voter -votes -votre -vtre -vtres -voudra -voue -voue -vouer -vous -voulez -voulu -voulue -voulut -vous -vote -voyage -voyais -voyait -voyant -voyez -voyons -voyou -vrai -vraie -vraies -vrais -vues -vulgo -wagon -wagons -wigwam -yacht -yack -yang -yens -yeux -yoga -zbre -zle -zl -znith -zro -zigzag -zinc -zlotys -zombie -zone -zones -zygote \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/tr_freecap_words b/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/tr_freecap_words deleted file mode 100644 index 6d37e29..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Captcha/Words/tr_freecap_words +++ /dev/null @@ -1,21629 +0,0 @@ -abaci -abadi -abali -abani -abaso -abayi -abaza -abbas -abdal -abece -abhaz -abide -abiye -ablak -abone -abosa -abras -abuli -acaba -acara -acele -acemi -aceze -acibe -acica -acici -aciga -acigi -acili -acima -acimi -acina -acisi -aciyi -aclik -acmak -acmaz -acube -acuze -adabi -adale -adali -adama -adami -adana -adasi -adayi -addan -adedi -adedî -adese -adeta -adina -adini -adlar -adres -adsal -adsiz -afaki -afazi -afgan -afife -afili -afise -afoni -afsar -afsun -aftos -afura -afyon -agaca -agaci -agami -agasi -agcik -agili -agina -agiza -aglak -aglar -agmak -agmaz -agnam -agora -agraf -agraz -agyar -agzim -ahali -ahbap -ahcar -ahd-i -ahenk -ahfat -ahfes -ahini -ahira -ahize -ahkam -ahlaf -ahlak -ahlat -ahmak -ahraz -ahret -ahsap -ahval -aidat -ajani -ajans -ajite -akabe -akait -akaju -akala -akani -akara -akari -akbas -akcil -akdut -akemi -akici -akide -akimi -akisi -akkor -akkus -aklan -aklen -aklik -aklin -akmak -akman -akmaz -akont -akort -akpas -akran -akrep -aksak -aksam -aksan -aksin -akson -aktar -aktas -aktif -akvam -alaca -alaka -alana -alani -alarm -alasi -alaya -alayi -alaza -albay -album -alcak -aldim -aleme -alemi -aleni -aleti -alevi -aleyh -algin -alici -alima -alimi -alina -alize -alkan -alkil -alkim -alkis -alkol -allah -allak -allem -allik -almac -almak -alman -almas -almaz -almis -alnac -alsin -altes -altik -altin -altiz -altli -altta -alyan -alyon -amade -amana -amasi -ambar -amber -amele -ameli -amelî -amigo -amino -amiri -amorf -amper -ampir -ampul -amuda -amudi -anaca -anali -anam! -anane -anasi -anaya -ancak -andac -andic -andik -andiz -anele -anemi -angic -angin -angut -anide -anime -anjin -anket -anlak -anlam -anlar -anlik -anmak -anons -ansin -ansiz -anten -antep -antet -antik -antli -antre -anues -anyon -anzak -apaci -apart -apiko -aplik -aport -aposi -apotr -april -apsis -aptal -aptes -araba -arabi -araci -arada -araka -arama -arami -arasi -araya -arayi -arazi -ardak -ardic -ardil -ardin -arefe -arena -argac -argin -argit -argon -arici -arife -arina -arisi -ariya -ariza -arizi -arkac -arkit -arkoz -armut -armuz -aroma -arpci -arpej -arsin -arsiv -arsiz -artar -artci -arter -artik -artim -artin -artis -artma -asabi -asagi -asama -asari -asasi -asevi -ashap -asici -asida -aside -asidi -asiga -asigi -asili -asima -asimi -asina -asini -asiri -asisi -asist -askat -asker -askin -askli -aslan -aslen -aslik -asma! -asmak -asmis -aspur -astar -astat -asti? -astik -astim -asude -asure -atama -atari -atase -ates! -atese -atesi -atfen -atici -atili -atimi -atina -atini -atisi -atlar -atlas -atlet -atmak -atmik -atmis -atsan -attan -atti? -attik -attin -avrat -avuca -avurt -ayaga -ayagi -ayari -ayasi -aydim -ayini -ayisi -ayiya -aylar -aylik -ayrac -ayran -ayrik -ayrim -ayvaz -azabi -azadi -azani -azdan -azdir -azigi -aziya -azmak -azmaz -babac -babai -babam -baban -bacak -bacci -badas -badat -badem -badic -badik -badya -bagaj -bagan -bagci -bagda -baget -bagil -bagim -bagin -bagir -bagis -bagit -bagla -bagli -bagri -bahai -bahar -bahce -bahir -bahis -bahri -bahse -bahsi -bahta -bahti -bakac -bakam -bakan -bakar -bakim -bakir -bakis -bakla -bakma -balar -balat -balci -balda -baldo -balet -balig -balik -balin -balki -balli -balon -baloz -balta -balya -bambu -bamya -banak -banal -banda -bandi -bando -banjo -banka -banko -banma -banyo -baraj -barak -baran -barba -barca -barci -barda -bardo -barem -baret -baris -barit -bariz -barka -barok -baron -barut -basac -basak -basar -basat -basci -basen -basik -basil -basim -basin -basip -basis -basit -baska -baski -basla -basli -basma -bassa -basso -basta -basti -basur -basya -batak -batar -batik -batil -batin -batir -batis -batki -batma -batti -batur -bavci -bavli -bavul -bayan -bayat -bayir -bayma -bayri -bazal -bazen -bazik -bazit -bebek -becet -bedel -beden -bedii -bedik -bedir -beher -behey -behre -bekar -bekas -bekci -bekle -bekri -belce -belde -belek -belen -beles -belge -belgi -belig -belik -belit -belki -belli -bemol -bence -benci -bende -benek -bengi -benim -beniz -benli -benzi -berat -beril -berri -beser -besik -besin -besiz -besle -besli -besme -besni -beson -beste -beter -betik -betim -beton -beyan -beyaz -beyde -beyin -beyit -beyni -beyti -beyzi -bezci -bezek -bezen -bezgi -bezik -bezir -bezis -bezme -bezsi -biber -biblo -bicak -bicem -bicer -bicik -bicil -bicim -bicir -bicis -bicki -bicme -bidar -bidat -bidik -bidon -bihus -bijon -bikes -bikip -bikir -bikis -bikma -bilar -bilek -bilen -bilet -bilge -bilgi -bilim -bilir -bilis -bilme -bilye -binde -bindi -binek -binen -biner -bingi -binin -binis -binit -binme -birak -biraz -birci -birde -birer -birey -birim -birli -birun -bisek -bitap -bitek -biter -bitey -bitik -bitim -bitis -bitki -bitli -bitme -bitti -biyel -biyik -bizar -bizce -bizim -bizir -bizli -bizon -bloef -bloke -bloku -bobin -bocce -bocuk -boduc -bodur -boece -boeke -boele -boerk -bogak -bogan -bogaz -bogma -boguk -bogum -bohca -bohem -boklu -bokum -bolca -bomba -bombe -borak -boran -borat -borca -borcu -borda -bordo -borik -borsa -boruk -bosar -boslu -bosna -bosta -boyar -boyca -boyda -boylu -boyna -boynu -boyoz -boyun -boyut -bozar -bozca -bozma -bozuk -bozum -bozus -brans -bravo -brons -bronz -bruet -bucak -bucuk -budak -budun -budur -buefe -buero -buest -bueve -bugra -bugul -bugur -buguz -buhar -buhur -buket -bukle -bulak -bulgu -bulma -bulug -bulup -bulur -bulus -bulut -bunak -bunar -bunca -bunda -bunlu -bunma -bunun -burak -buram -burcu -burgu -burma -burnu -bursa -buruk -burum -burun -burus -buson -butik -butlu -buton -buyma -buyot -buyur -buzcu -buzla -buzlu -buzul -cabuk -cacik -cadde -cadir -cafer -cagil -cagin -cagla -cagma -cagri -cahil -caize -cakal -cakar -caker -cakil -cakim -cakin -cakir -cakis -cakma -cakra -calak -calan -calap -calar -calgi -calik -calim -calip -calis -calki -calma -calti -camal -camat -camca -camci -camia -camit -camiz -camli -camsi -camur -canak -canan -canci -canda -candi -canim -canin -canip -canla -canli -canta -capak -capar -capla -capli -capma -capta -capul -caput -carik -carka -carki -carli -carpi -carsi -carta -casar -casit -casus -catak -catal -catik -catir -catis -catki -catma -catra -cavli -cavma -cavun -cavus -cayan -cayci -cayir -cayis -cayli -cayma -cazci -cazip -cazir -cazli -cebel -cebic -cebin -cebir -cebri -cebrî -cecen -cecik -cedel -cedik -cedit -cedre -cehil -cehre -cehri -cekce -cekek -cekel -cekem -ceker -ceket -cekic -cekik -cekim -cekip -cekis -cekme -celal -celbe -celek -celen -celep -celgi -celik -celil -celim -cello -celme -celse -cemal -ceman -cemce -cemen -cemic -cemil -cemis -cemre -cenah -cenap -cenek -cenen -cenet -cengi -cenin -cenup -cepci -cepel -ceper -cepez -cephe -cepin -cepni -cerag -cerci -ceren -cerez -cerge -cerre -ceset -cesim -cesit -cesme -cesni -ceste -cesur -cetin -cevap -cevaz -cevik -cevir -ceviz -cevre -cevri -cevvi -cevza -ceyiz -cezai -cezbe -cezir -cezri -cezrî -cezve -ciban -cibil -cibin -cibre -cicek -cicik -cicim -cicoz -cidak -cidal -cidam -cidar -ciddi -cifit -cifte -cifti -cigan -cigde -ciger -cigil -cigin -cigir -cigit -cihan -cihar -cihat -cihaz -cihet -cikak -cikan -cikar -cikik -cikin -cikip -cikir -cikis -cikit -cikma -cikra -ciksa -cikti -cilek -ciliz -cilki -cilli -cilve -cimek -cimen -cimme -cimri -cinai -cinar -cinas -cince -cinci -cingi -cinko -cinli -cinsi -cinsî -cipil -cipir -cirag -cirak -cirim -ciris -cirit -cirmi -ciroz -cirpi -cisik -cisim -cismi -citak -citar -citen -citir -citme -civan -civar -civik -civil -civit -civma -ciyak -ciyan -cizer -cizge -cizgi -cizik -cizim -cizin -cizir -cizis -cizme -cizye -coban -cocuk -coele -coenk -coepe -cogul -cogun -cokal -cokca -cokcu -coklu -coksa -colak -colpa -coluk -comak -comar -conta -copra -copur -corak -corap -corba -corlu -corum -cosku -cosma -cosum -cotra -cotuk -cubuk -cubur -cudam -cuece -cueda -cuezi -cukka -cukul -cukur -culcu -culha -cumba -cunda -cunta -cupra -cusis -cuska -cutur -cuval -cuvas -dadas -dagar -dagci -dagda -dagin -dagli -dahil -dahli -daima -daimi -daimî -daire -dakik -dalak -dalan -dalas -dalay -dalda -dalga -dalgi -dalip -dalis -daliz -dalli -dalma -dalsi -dalya -damak -damar -damat -damga -damla -damli -danca -danis -dansi -darac -daras -darbe -darca -darda -dasit -datif -davar -davet -davul -davut -davya -dayak -dayim -debbe -debil -dedem -dedik -defin -defne -degaj -degdi -degec -deger -degil -degim -degin -degis -degme -deist -deizm -dekan -dekar -dekor -delep -deler -delgi -delik -delil -delme -delta -demci -deme! -demec -demek -demem -demet -demez -demin -demir -demis -demli -denek -denet -deney -denge -dengi -denim -deniz -denli -denme -denyo -depar -derbi -derde -derdi -dergi -derik -derim -derin -derli -derme -dersi -derun -derya -desen -desik -desme -deste -detay -devam -devce -devim -devin -devir -devre -devri -devrî -deyim -deyip -deyis -dibek -dibin -dibir -didar -didik -didon -digan -diger -dikce -dikec -dikel -diken -dikey -dikim -dikis -dikit -dikiz -dikme -dikse -dikta -dikte -dilak -dilci -dilek -dilim -dilin -dilis -dille -dilli -dilme -dilsi -dimag -dinar -dince -dinci -dinek -dinen -dingi -dingo -dinim -dinis -dinle -dinli -dinme -dipli -dipte -direk -diren -direy -dirig -diril -dirim -disci -disik -disil -disin -diski -disko -disli -ditme -dival -divan -divik -divit -diyar -diyen -diyet -diyez -diyor -dizek -dizel -dizem -dizer -dizey -dizge -dizgi -dizim -dizin -dizis -dizme -dobra -doeke -doene -doert -dogac -dogal -dogan -dogar -dogma -dogru -dogsa -dogum -dogus -dokun -dokuz -dolak -dolam -dolan -dolap -dolar -dolas -dolay -dolgu -dolma -dolum -dolup -dolus -domur -domuz -donam -donlu -donma -donra -donuk -donup -dorse -doruk -dorum -dosta -dostu -dosya -doyar -doygu -doyma -doyum -doyus -dozaj -dozer -draje -drama -duaci -duali -duasi -duaya -dubar -duble -ducar -dudak -dueet -dues! -duese -dueve -dueze -duhul -dulda -duluk -duman -dumur -durac -durak -dural -duran -durdu -durgu -durma -dursa -duruk -durum -durup -durur -durus -dusak -duvak -duvar -duyar -duydu -duygu -duyma -duyum -duyun -duyus -ebcet -ebedi -ebedî -ebeli -ebesi -ebleh -ecdat -ecele -eceli -echel -edali -edati -edebi -edebî -eder? -edinc -edvar -efdal -efece -efekt -efkar -eflak -efrat -efriz -efsun -efsus -eften -eglek -eglog -egmec -egmek -egrez -egrim -egzoz -ehram -ehven -ejder -ekici -ekili -ekini -eklem -ekler -ekmek -ekmez -ekose -ekran -eksen -ekser -eksik -eksin -eksiz -ektim -elbet -elcek -elcik -elcim -elden -elegi -eleji -eleme -elgin -elhak -elifi -elifî -elimi -eline -elini -elips -eller -ellik -elmas -elmek -elvan -elyaf -elzem -emare -emaye -emcek -emcik -emegi -emici -emini -emlak -emlik -emmec -emmek -emmim -emmis -emraz -emsal -emtia -emval -emzik -enayi -encam -endam -ender -eneme -eneze -enfes -engel -engin -enine -enkaz -enlem -ensar -enser -ensiz -entel -enzim -eosen -epeyi -epope -erbap -erbas -erbin -ercik -erdek -erdem -erden -ergen -ergin -erigi -erika -erime -erimi -erinc -erine -erkan -erkci -erkec -erkek -erken -erkin -erkli -erlik -ermek -ermez -ermin -ermis -eroin -ersiz -ervah -erzak -erzel -esame -esans -esarp -esasa -esasi -esbak -esbap -esege -esegi -eseme -eseri -esham -eshas -esige -esigi -esine -esini -esire -eskal -eskil -eskin -eskiz -eslaf -eslek -eslem -eslik -esmek -esmer -esmez -esnaf -esnek -esner -espas -espri -esraf -esrar -esref -esrik -essah -essiz -estek -ester -estet -esvap -etcik -etcil -etege -etegi -etene -etfal -etine -etini -etken -etkin -etlik -etmek -etmen -etmez -etnik -etraf -etsel -etsem -etsin -etsiz -etten -etuet -etuev -evaze -evcek -evcik -evcil -evdes -evgin -evham -evine -evire -eviye -evkaf -evlat -evlek -evlen -evlik -evrak -evrat -evren -evrik -evrim -evsaf -evsel -evsin -evsiz -evvel -eyere -eyeri -eylem -eytam -eyuep -eyvah -eyvan -eyyam -ezani -ezber -ezeli -ezelî -ezgic -ezgin -ezici -ezile -ezinc -ezine -ezmek -facia -fagot -fahis -fahri -fahte -fahur -faili -faize -faizi -fakat -fakih -fakir -falan -falci -falez -falso -falya -fanta -fanti -fanus -fanya -farad -faras -farba -farig -faril -farki -farta -faset -fasih -fasik -fasil -fasir -fasit -faska -fasla -fasli -fason -fatih -fatma -fauna -fayda -fazil -fazla -fazli -fecir -fedai -fehim -fehva -felah -felce -felek -felli -fenci -fende -fendi -fener -fenik -fenni -fennî -fenol -ferag -ferah -ferda -ferde -ferdi -ferdî -ferih -ferik -ferli -ferma -fesat -fesih -fetha -fetih -fetis -fetva -fevri -feyiz -fiber -fidan -fidye -fifre -figan -fiile -fiili -fiilî -fikih -fikir -fikra -fikri -fikrî -filan -filar -filet -filiz -filmi -filoz -filsi -filum -final -fince -finis -firak -firar -firca -firez -firik -firil -firin -firka -firma -fisek -fisil -fisir -fiska -fiske -fiski -fisli -fisne -fisto -fitci -fitik -fitil -fitin -fitir -fitne -fitre -fitri -fiyat -fizik -flama -flasi -fleol -flora -flori -fluet -fodla -fodra -fodul -foetr -fokur -fokus -folyo -fonda -fonem -forma -foroz -forsa -forsu -forte -forum -fosil -fosur -frank -frape -freni -frenk -fresk -freze -frigo -frisa -frize -fuari -fuaye -fueme -fuers -fueru -fueze -fuhus -fujer -fular -fulue -fulya -funda -furta -furya -gabin -gabro -gabya -gacir -gadir -gadre -gafil -gafur -gaile -gaita -galat -galip -galiz -galon -galop -galos -gamba -gamet -gamli -gamze -garaj -garaz -garbi -garip -garoz -gasbi -gasil -gasiy -gauss -gavot -gavur -gayda -gayet -gayri -gayur -gayya -gazal -gazap -gazel -gazli -gazoz -gazve -gebes -gebre -gecce -gecek -gecen -gecer -gecim -gecip -gecis -gecit -gecme -gecti -gedik -gedme -geldi -gele! -gelen -gelin -gelip -gelir -gelis -gelme -gelse -gemre -genel -genis -geniz -genom -geoit -gerci -gerec -gerek -geren -gergi -geri! -gerim -geris -geriz -germe -gerze -getir -getto -geven -gevis -gevme -geyik -geysa -gezen -gezer -gezip -gezis -gezme -gicik -gicir -giden -gider -gidik -gidim -gidip -gidis -gidon -gipta -giray -girci -girdi -giren -girer -giril -girim -girip -giris -girit -girla -girme -gitar -gitme -gitse -gitti -giyap -giyer -giyim -giyis -giyit -giyme -giysi -gizem -gizil -gizli -glase -gnays -gocuk -godos -goece -goege -goele -goenc -goere -goerk -goeze -gonca -goril -gotca -gotik -grado -grena -grevi -grisi -grizu -grogi -grosa -grubu -guano -guatr -gucur -gudde -guece -guele -gueme -guene -guere -guerz -gueve -gueya -guguk -gulas -gulet -gurka -gurme -gurup -gurur -gusto -habbe -haber -habes -habip -habis -hacca -hacet -hacim -hacir -haciz -hacli -hacmi -hadde -haddi -hadim -hadis -hafif -hafik -hafit -hafiz -hafta -haham -hahha -haile -haini -hakan -hakas -hakca -hakem -hakim -hakir -hakki -hakli -halac -halas -halat -halay -halde -halef -halel -halen -halep -halet -halfa -halic -halik -halil -halim -halin -halis -halka -halki -halli -haluk -hamak -hamal -hamam -hamel -hamil -hamis -hamiz -hamla -hamle -hamse -hamsi -hamur -hamut -hanak -hanay -hanci -hande -hanek -hangi -hanim -hanut -hanya -hapaz -hapci -hapir -hapis -hapsi -hapsu -harac -haram -harap -harar -harbe -harbi -harbî -harca -harci -harem -harfi -haric -haril -harim -harin -harir -haris -harli -harta -hasar -hasat -hasbi -hasep -haset -hasil -hasim -hasin -hasir -hasis -hasiv -haspa -hassa -hasse -hasta -hasut -hatay -hatif -hatil -hatim -hatip -hatir -hatmi -hatta -hatti -hatun -havai -havan -havas -havil -havli -havlu -havra -havuc -havut -havuz -havva -havya -havza -hayal -hayat -haybe -hayci -hayda -haydi -hayfa -hayif -hayin -hayir -hayit -hayiz -hayli -hayra -hayri -hayta -hazan -hazar -hazci -hazik -hazim -hazin -hazir -hazne -hecin -hedef -heder -hedik -hekim -helak -helal -hele! -helen -helik -helis -helke -helme -helva -hemen -hempa -hemze -heple -hepsi -herek -herif -herik -herke -hertz -herze -hesap -heves -heybe -heyet -hezel -hezen -hicap -hicaz -hicci -hiciv -hicri -hidir -hidiv -hidra -hifiz -hifza -hikem -hilaf -hilal -hilat -hilye -himen -himis -hindi -hindu -hippi -hirbo -hiril -hirka -hirli -hirti -hisar -hisil -hisim -hisir -hisli -hisse -hissi -hissî -hitam -hitan -hitap -hitit -hiyar -hizar -hizip -hizir -hizla -hizli -hizma -hodan -hodri -hoest -hokey -hokka -homur -honda -hoppa -horon -horoz -horst -horul -hosaf -hosca -hosur -hotoz -hozan -hudut -hueda -huema -hukuk -hulul -hulus -hulya -humar -humma -humor -humus -hupur -hurda -hurma -hurra -huruc -husuf -husul -husur -husus -husye -hutbe -hutur -hutut -huylu -huzme -huzur -ibare -ibate -ibdai -ibigi -iblag -iblis -ibraz -ibret -ibrik -ibzal -icadi -icara -icbar -iceri -icici -icigi -icine -icini -ickin -iclem -icler -iclik -icmal -icmek -icmis -icrek -icsel -icsiz -icten -ictim -idadi -idame -idare -idari -iddia -ideal -idman -idrak -idrar -idris -ifade -iffet -ifham -iflah -iflas -ifrag -ifrat -ifraz -ifrit -ifsat -iftar -igdir -igdis -igfal -iglik -igrip -ihale -ihata -ihbar -ihdas -ihlal -ihlas -ihmak -ihmal -ihrac -ihram -ihraz -ihsan -ihsas -ihtar -ihvan -ihzar -ikame -ikbal -ikdam -ikici -ikide -ikili -ikina -ikisi -ikizi -iklim -ikmal -ikrah -ikram -ikrar -ikraz -iksir -ilaci -ilahe -ilahi -ilahî -ilami -ilani -ilave -ilbay -ilenc -ileri -ileti -ilgar -ilgec -ilgim -ilgin -ilgit -ilhak -ilham -ilhan -ilica -iligi -ilima -ilkah -ilkel -ilkin -illet -ilmek -ilmik -iltar -ilzam -imale -imali -imame -imami -imana -imani -imara -imbat -imbik -imdat -imece -imkan -imlec -imlek -imlik -imren -imroz -imsak -inada -inadi -inanc -incik -incil -incir -indis -inegi -infak -infaz -ingin -inisi -inkar -inmek -inmez -insaf -insan -insat -intac -intak -intan -inzal -ipcik -ipegi -ipeka -ipham -ipini -iplik -ipsiz -iptal -ipten -ipucu -irade -iradi -irama -irfan -irgat -irice -irili -irisi -irite -irkci -irkme -irmak -irmik -ironi -irsal -irsat -irsen -isale -isari -iseme -isevi -isgal -ishak -ishal -isiga -isigi -isima -isime -isine -isini -isisi -iskal -iskan -iskat -iskil -iskin -iskoc -islah -islak -islam -islav -islek -islem -isler -islev -islik -islim -ismar -ismen -ismet -isnat -ispat -ispir -ispit -israf -israr -isret -issiz -istah -istar -istek -istem -isten -ister -istes -istif -istim -istir -istop -isyan -isyar -itaat -itegi -ithaf -ithal -itham -itici -itila -itina -itise -itlaf -itlak -itlik -itmam -itmek -itrah -ivedi -ivesi -ivmek -iyesi -iyice -iyisi -iyiye -izabe -izafe -izafi -izale -izani -izgin -izhar -izine -izini -izlek -izlem -izlev -izmir -iznik -izole -izrar -izzet -jakar -japon -jarse -jeloz -jeton -jikle -jilet -joele -joker -jokey -jueri -kabak -kaban -kabil -kabin -kabir -kabiz -kablo -kabuk -kabul -kabus -kabza -kacak -kacan -kacar -kacik -kacin -kacis -kacli -kacma -kacta -kadar -kadeh -kadem -kader -kadim -kadin -kadir -kadit -kadri -kadro -kafes -kafir -kafur -kagan -kagir -kagit -kagni -kahil -kahin -kahir -kahpe -kahve -kahya -kaide -kaime -kakac -kakao -kakic -kakim -kakir -kakis -kakma -kalak -kalan -kalas -kalay -kalbe -kalbi -kalbî -kalca -kalci -kaldi -kalem -kalfa -kalic -kalik -kalim -kalin -kalip -kalir -kalis -kalit -kalka -kalma -kalsa -kalya -kamci -kamer -kamet -kamga -kamil -kamis -kampa -kampi -kamus -kanal -kanat -kanca -kanik -kanis -kanit -kanka -kanla -kanli -kanma -kanon -kanto -kanun -kapak -kapan -kapar -kapik -kapip -kapis -kapli -kapma -kapti -kaput -kapuz -karar -karay -karda -karga -kargi -karin -karis -karni -karsi -karti -kasap -kasem -kaset -kasik -kasim -kasin -kasir -kasli -katar -katil -katip -katir -katli -katma -kavak -kaval -kavat -kavga -kavun -kavur -kavuz -kayba -kaybi -kaydi -kayik -kayin -kayip -kayis -kayit -kazan -kazik -kazir -kazma -kebap -kebir -kebze -keder -kefal -kefen -kefil -kefir -kefne -kehle -kekec -kekik -kekre -kelam -kelek -kelem -kelep -keler -keles -kelik -kelin -kelle -kelli -kemal -keman -kemer -kemha -kemik -kemre -kenar -kendi -kenef -kenet -kepce -kepek -kepez -kepir -kepme -kerde -kerem -keres -kerih -kerim -keriz -kerki -kerli -kerte -kerti -kesap -kesat -kesbi -kesbî -kesek -kesel -kesem -kesen -keser -kesif -kesik -kesim -kesin -kesip -kesir -kesis -kesit -keske -keski -kesme -kesre -ketal -keten -keton -ketum -kevel -keven -keyfi -keyfî -keyif -kibar -kibir -kible -kicin -kidem -kifaf -kikir -kikla -kiler -kilgi -kilic -kilif -kilik -kilim -kilir -kilis -kilit -kiliz -killi -kilma -kilsi -kimde -kimil -kimin -kimiz -kimse -kimya -kinci -kinik -kinin -kinis -kinli -kipik -kipir -kipma -kipti -kirac -kiran -kirat -kiray -kiraz -kirba -kirca -kirci -kirde -kirec -kirik -kiril -kirim -kirin -kirip -kiris -kirki -kirli -kirma -kirpi -kirve -kisas -kisik -kisim -kisin -kisir -kisis -kisit -kiska -kiski -kisla -kisli -kisma -kismi -kissa -kisve -kital -kitap -kitik -kitin -kitir -kitle -kitre -kivam -kivil -kivir -kiyak -kiyam -kiyas -kiygi -kiyik -kiyim -kiyin -kiyis -kiyma -kiyye -kizak -kizan -kizik -kizil -kizim -kizin -kizip -kizir -kizis -kizli -kizma -klapa -klima -klips -klise -kluez -kobay -kobra -kocak -kocan -kocma -kodes -koele -koere -koese -koesk -koeye -kofra -kofti -koful -kogus -kokak -kokar -koket -kokma -kokot -kokoz -kokus -kolaj -kolan -kolay -kolcu -kolej -kolik -kolit -kollu -kolon -kolpo -kolsu -kolun -kolye -kolza -komar -kombi -komik -komot -komsu -komut -konak -konan -konar -kondu -konik -konma -konsa -konuk -konum -konur -konus -konut -konya -kopal -kopar -kopca -kopek -kopil -kopma -kopoy -kopuk -kopup -kopuz -kopya -koral -korku -korna -korno -korse -korte -kortu -koruk -korun -korza -kosac -kosam -kosan -kosar -kosin -kosma -kosuk -kosul -kosum -kosun -kosut -kotan -koton -kotra -kovan -kovcu -kovma -kovuk -kovus -koyak -koyar -koyma -koyun -koyup -koyut -kozak -kraca -kraft -kramp -krank -kravl -kredi -krema -kremi -kriko -krizi -kroki -krome -krose -kubat -kubbe -kubur -kucak -kudas -kuduz -kuefe -kuelt -kueme -kuenh -kuenk -kuepe -kuere -kuerk -kuert -kukla -kulac -kulak -kulis -kulle -kulpu -kulum -kulun -kuman -kumar -kumas -kumcu -kumda -kumla -kumlu -kumru -kumsu -kumuc -kumuk -kumul -kunda -kupes -kuple -kupon -kurak -kural -kuram -kurar -kurca -kurdu -kurgu -kurma -kurna -kuron -kursu -kurul -kurum -kurun -kurur -kurus -kurut -kurya -kurye -kusak -kusam -kuscu -kuset -kusku -kusla -kusma -kusun -kusup -kusur -kutan -kutbu -kutlu -kutnu -kutsi -kutup -kutur -kuver -kuvve -kuytu -kuyum -kuzen -kuzey -kuzin -lacin -lacka -laden -lades -ladik -ladin -lafci -lafin -lafiz -lafla -lafta -lafzi -lagar -lagim -lagiv -lahit -lahos -lahut -lahza -lakap -lakci -lakin -lakoz -lamba -lamel -lando -lanet -lanse -lapon -largo -larva -laski -lasta -latif -latin -lavaj -lavas -lavta -lavuk -layik -lazca -lazer -lazim -lazut -lecek -legal -legen -lehce -lehim -lehte -lemis -lenfa -lento -lepra -lerze -letce -levha -levye -leyla -leyli -lezar -leziz -libas -libos -libre -lider -lifli -ligli -liken -likir -likit -liman -limbo -limit -limon -linet -linin -lipit -lipom -liret -lirik -lisan -liste -litre -livar -liyan -lizol -lobut -lodos -logos -lojik -lokal -lokma -lokum -lolo? -lonca -longa -lopur -lorta -losca -lotus -lueks -luele -maada -maasa -maasi -mabat -mabet -mabut -macar -macun -madam -madde -maddi -madem -maden -mader -madik -madun -mafis -mafya -magma -magri -mahal -mahfe -mahfi -mahir -mahiv -mahra -mahur -mahut -mahya -maile -major -makak -makam -makas -makat -maket -makro -maksi -makta -maktu -makul -makus -makûs -malak -malay -malaz -malca -malci -malen -malik -malin -malta -malul -malum -malya -mamak -mambo -mamul -mamur -mamut -manas -manat -manav -manca -mancu -manda -manej -manen -manga -mango -mania -manti -manto -maocu -mapus -maral -maras -maraz -marda -mariz -marji -marka -marke -marki -maron -marti -maruf -marul -maruz -marya -masaj -masal -masat -maser -masif -maske -masnu -mason -masti -masuk -masum -masun -matah -matal -matbu -matem -matiz -matla -matuf -matuh -maval -mavis -mavna -mavra -mayin -mayis -mayna -mazak -mazot -mazur -mebde -mebiz -mebni -mebus -mecal -mecaz -mecmu -mecra -mecus -medar -medet -medih -medya -meful -meger -mehaz -mehdi -mehil -mehle -mekan -meker -mekik -melal -melas -melce -melek -meles -melez -melik -melon -melul -melun -memat -memba -memnu -memul -memur -menfa -menfi -mense -menue -menus -merak -meram -merci -merek -meres -meret -meric -merih -mermi -mesai -mesaj -mesbu -mesel -mesen -mesih -mesin -mesmu -mesru -mesul -mesum -mesut -metal -metan -metbu -metil -metin -metis -metod -metot -metre -metro -mevdu -mevki -mevla -mevta -mevut -mevzi -mevzu -meyal -meyan -meyil -meyli -meyus -meyva -meyve -mezar -mezat -mezon -mezra -mezru -mezun -miadi -micel -micir -midir -midye -migir -migri -mihli -mikap -mikoz -mikro -milat -milel -milim -milis -milli -millî -mimar -mimik -mimli -minha -minik -minor -mirac -miras -mirat -miril -mirim -mirin -mirra -mirza -misak -misal -misel -misil -misin -misir -misis -misli -misra -mitil -mitos -mitoz -miyar -miyav -miyaz -miyom -miyop -mizac -mizah -mizan -mobil -model -modem -modul -mogol -moher -molas -molla -moloz -monat -monte -moral -moren -morga -morto -moruk -motel -motif -motor -motto -mozak -muare -mubah -mucip -mucir -mucit -mucuk -mucur -mueft -muege -muelk -muert -mueta -mueze -mufla -mugla -muhal -muhat -muhik -muhil -muhip -muhit -mujik -mukim -mukni -mukus -mulaj -mumcu -mumla -mumlu -mumya -munis -murat -muris -musap -musir -muska -muslu -muson -musta -mustu -mutaf -mutat -mutcu -mutlu -muylu -muzip -muzir -muzsu -nabiz -nabzi -nacak -nacar -naciz -nadan -nadas -nadim -nadir -nafia -nafiz -nafta -nagme -nagra -nahak -nahif -nahir -nahiv -nahos -nakdi -nakdî -nakil -nakip -nakis -nakit -nakiz -nakli -naklî -naksi -nalan -nalca -nalin -nalla -namaz -namli -namlu -namus -nanay -nanik -narin -nasil -nasip -nasir -natir -natuk -nazal -nazar -nazik -nazil -nazim -nazir -nazli -nebat -nebze -necat -necef -necip -nedbe -neden -nedim -nedir -nefer -nefes -nefha -nefir -nefis -nefiy -nefsi -nefti -neftî -nehir -nehiy -nekes -nekre -neler -nemce -nemli -nemse -nesep -neset -nesi? -nesic -nesih -nesil -nesim -nesir -nesli -nesne -nevir -nevri -neyce -neyin -neyse -nezif -nezih -nezir -nezle -nicel -nicin -nifak -nigde -nihai -nihan -nikah -nikap -nikel -nimet -ninni -nipel -nisai -nisan -nisap -nisif -nispi -nitel -niyaz -niyet -nizam -nizip -nodul -noetr -nogay -nohut -nokra -nokta -nonos -notam -noter -nueks -nueve -nukut -numen -nurlu -nutku -nutuk -oberj -obruk -obues -ocagi -ocuma -odaci -odali -odasi -odeon -odsuz -odun` -odunu -oebek -oecue -oedem -oedev -oedue -oefke -oegle -oekce -oekse -oelem -oelet -oelme -oelue -oemre -oence -oende -oenel -oenem -oenue -oepme -oerek -oeren -oerfi -oerge -oerme -oerue -oeten -oeter -oetme -oetre -oevec -oevme -oeyle -oezek -oezel -oezen -oezet -oezge -oezne -oezue -ofans -ofisi -oflaz -ofris -ofset -oglak -oglan -oglum -oglun -ojeli -okapi -okluk -oksit -oktan -oktav -okulu -okuma -okume -olali -olana -olasi -olayi -olcum -oldum -oleik -olein -olgun -olma! -olmak -olmaz -olmus -olsam -olsun -olur! -olur? -oluru -olusu -ombra -omlet -omuza -onama -ondan -ondur -ongen -ongun -oniks -onlar -onluk -onmak -onmaz -onsuz -oosit -opera -optik -orada -oraga -oragi -orali -orani -orasi -oraya -orcik -orfoz -organ -orgcu -orion -orkit -orlon -orman -ortac -ortak -ortam -ortay -ortez -ortoz -orucu -otaci -otama -otcul -otist -otizm -otlak -otluk -otsul -otsuz -ottur -otunu -ovada -ovali -ovmac -ovmak -ovucu -oyaci -oyali -oyasi -oydas -oylum -oymak -oynak -oynas -oysun -oyugu -oyuna -oyunu -ozani -ozmoz -ozuga -pabuc -pacal -pacoz -padok -pafta -pagan -pahal -pakca -paket -pakti -palan -palas -palaz -palet -palto -pampa -pamuk -panda -panel -panik -papak -papaz -papel -paraf -paran -parca -paril -parka -parke -parki -parpa -parsa -parti -parya -pasaj -pasak -pasam -pasci -pasif -pasli -pasta -patak -patal -paten -patik -patir -patka -patoz -patra -paunt -payan -payda -payen -payet -payim -payli -pazar -pazen -pecic -pedal -peder -pekce -pekin -pekse -pelin -pelit -pelte -pembe -pence -penes -penis -pense -pensi -penye -perde -peren -perki -perma -permi -peron -perte -peruk -perva -pesek -pesin -pesli -pestu -petek -peyda -peyke -pigme -pihti -pikaj -pikap -piket -pilav -pilic -pilli -pilot -pinar -pinel -pines -pinti -pipet -piril -pirit -pirpi -pirti -pisek -piser -pisik -pisim -pisin -pisma -pisme -pisti -pitir -piton -piyan -piyaz -piyes -piyon -pizza -plagi -plaka -plana -plani -plase -plati -plato -plaza -pofur -poker -pokus -polar -polat -polen -polip -polis -polka -pomak -pomat -pomel -pompa -ponje -ponza -popcu -porno -porte -porto -poset -posta -postu -potas -potin -potuk -potur -poyra -prafa -prens -prese -primi -print -proje -prova -pruva -pudra -puere -pufla -pulcu -pullu -puluc -pumba -punto -pusat -puset -puslu -pusma -rabit -racon -radar -radde -radon -radyo -rafit -rafya -ragbi -rahat -rahim -rahîm -rahip -rahle -rahmi -rahne -rakam -raket -rakik -rakim -rakip -rakit -rakor -rakun -ralli -ramak -rampa -randa -ranza -rapor -rasat -rasit -raspa -rasyo -ratip -raunt -rayba -rayic -reaya -rebap -recel -recep -recim -redif -refah -refik -rehin -reisi -rejim -rekat -rekiz -rekor -remel -remil -remiz -rende -renge -rengi -resen -resif -resim -resit -resme -resmi -resmî -resti -resul -revac -revak -revan -revir -revis -revue -reyon -rezil -rical -ricat -rijit -rimel -ringa -riske -riski -ritim -riyal -rizik -robot -rodaj -rodeo -roele -roket -rolue -roman -romen -rosto -rotil -rotor -rozet -rubai -ruble -ruecu -ruekû -ruest -rueya -rufai -rugan -ruhca -ruhen -ruhlu -rujlu -rulet -rumba -rumca -rumuz -runik -rusca -rutin -saati -sabah -saban -sabik -sabir -sabit -sabri -sabuh -sabuk -sabun -sabur -sacak -sacik -sacin -sacip -sacis -sacli -sacma -sadak -sadet -sadik -sadir -sadme -sadra -safak -safca -safer -safha -safii -safir -safra -saful -sagar -sagci -sagim -sagin -sagir -sagli -sagma -sagri -sahaf -sahan -sahap -sahih -sahil -sahim -sahin -sahip -sahis -sahit -sahne -sahra -sahre -sahsi -sahsî -sahte -sahur -saibe -saika -saire -sairi -sakaf -sakak -sakal -sakar -sakat -sakil -sakim -sakin -sakir -sakit -sakiz -sakla -sakli -saksi -sakul -salah -salak -salam -salap -salar -salas -salat -salca -salci -salep -salgi -salik -salim -salip -salli -salma -salon -saloz -salpa -salsa -salta -salto -salur -salvo -salya -saman -samar -samba -samil -samsa -samur -samut -sanal -sanat -sanci -sanem -sangi -sanik -sanir -sanki -sanli -sanma -sanri -sansa -sansi -sapak -sapan -sapci -sapel -sapik -sapir -sapis -sapka -sapki -sapla -sapli -sapma -sapot -sarac -sarak -sarap -sarat -saray -sargi -sarig -sarih -sarik -saril -sarim -sarip -saris -sarki -sarma -sarpa -sarpi -saryo -sasaa -sasar -sasma -satar -saten -sathi -satih -satim -satin -satip -satir -satis -satma -sauna -savak -savan -savas -savat -savca -savci -savki -savla -savlo -savma -savul -savur -sayac -sayak -sayan -sayar -sayet -sayfa -saygi -sayha -sayia -sayim -sayin -sayip -sayis -sayka -sayma -sayri -sazak -sazan -sazci -sazli -seans -sebat -sebek -sebep -sebil -sebze -secal -secde -secik -secim -secis -secki -secme -sedde -sedef -sedir -sedit -sedye -sefer -sefih -sefik -sefil -sefir -segah -seher -sehim -sehir -sehit -sehiv -sehla -sehpa -sekel -seker -sekil -sekis -sekiz -sekle -seklî -sekme -seksi -sekte -sekva -selam -selef -selek -selen -selim -selis -selva -selvi -semah -semai -seman -semen -semer -semih -semiz -semse -semsî -sence -sende -senek -senet -senin -senir -senit -senli -sepek -sepet -sepil -sepit -sepya -serak -seran -serap -serce -serde -seref -seren -sergi -serha -serhi -serif -serik -serim -serin -serir -seris -serit -serme -serpe -serri -serum -servi -sesci -sesle -sesli -seter -setik -setim -setir -setre -sevap -sevda -seven -sever -sevgi -sevim -sevir -sevis -sevke -sevki -sevme -seyde -seyek -seyhi -seyin -seyir -seyis -seyit -seyre -seyri -sezer -sezgi -sezis -sezme -sezon -sezue -siber -sibop -sicak -sican -sicar -sicil -sicim -sicip -sicma -sicti -sidik -sidki -sifat -sifin -sifir -sifon -sifre -sigar -sigil -sigin -sigir -sigla -sigma -sihhi -sihir -sihri -siiri -siirt -sikar -sikca -sikir -sikit -sikke -sikma -siksa -silah -silaj -silem -silep -silgi -silik -silin -silip -silis -silki -sille -silme -silte -simak -simal -simdi -simge -simit -simya -sinai -sinav -sindi -sinek -sinif -sinik -sinir -sinis -sinle -sinma -sinme -sinop -sinsi -sinto -siper -sipin -sipir -sipka -sipsi -sirak -siram -sirat -sirca -siren -sirik -siril -sirim -sirin -sirke -sirli -sirma -sirmo -siroz -sirra -sirri -sirta -sirti -sirto -sisek -sisik -siska -sisko -sisli -sisme -sitem -sitil -sitma -sivas -sivik -sivil -sivri -siyah -siyak -siyam -siyek -siyem -siyer -siyga -siygi -siyim -siyme -sizak -sizce -sizim -sizin -sizis -sizli -sizma -skala -skink -slayt -soebe -soeke -soerf -soeve -soeze -sofra -softa -sogan -soguk -sokak -sokar -soket -sokma -sokra -sokum -sokur -sokus -solak -solar -solcu -solda -solen -sollu -solma -soluk -solus -somak -somon -somun -somut -somya -sonar -sonat -sonda -sonlu -sonra -sonuc -sopar -soplu -sorca -sorgu -sorit -sorma -sorti -sorum -sorun -soset -sosis -soson -soven -soyka -soylu -soyma -soyum -soyup -soyus -soyut -spazm -sperm -sprey -stant -stari -start -steno -stent -stilo -strec -stres -suale -suali -suara -suare -subat -subay -subra -subuk -subye -suclu -sucuk -sucul -sudak -sudan -sueet -sueit -sueje -suelf -suene -suere -sueyu -sufle -suhut -sukur -sukut -sulak -sular -sulta -suluk -sumak -sumen -sunak -sunca -sunda -sungu -sunma -sunta -sunum -sunun -sunus -suoku -supap -supur -surat -suret -suruc -surup -susak -susam -susku -susma -susta -susus -susuz -sutas -sutlu -suvat -suyla -suyuk -suyum -suyun -taami -tabak -taban -tabii -tabip -tabir -tabla -tablo -tabur -tabut -tabya -tacik -tacil -tacir -taciz -tacli -tadat -tadil -tadim -tafra -tafta -tafur -tahil -tahin -tahra -tahta -takar -takas -takat -takil -takim -takip -takir -takke -takla -takma -takoz -taksa -taksi -takti -takva -talak -talan -talas -talaz -talep -talih -talik -talil -talim -talip -talli -tamah -tamam -tamik -tamim -tamir -tanem -tanen -tango -tanik -tanim -tanin -tanir -tanis -tanit -tanki -tanri -tapan -tapir -tapis -tapma -tapon -taraf -tarak -taras -taraz -taret -tarif -tarih -tarik -tarim -tariz -tarla -tarti -tarzi -tasak -tasar -tasci -tasdi -tasil -tasim -tasin -tasir -tasit -tasla -tasli -tasma -tasni -tasra -tassi -tatar -tatil -tatli -tatma -tavaf -tavan -tavci -tavik -tavir -taviz -tavla -tavli -tavri -tavuk -tavus -tayfa -tayga -tayin -tayip -tazim -tazip -taziz -teali -teati -tebaa -teber -tecil -tecim -tedai -tedip -tefek -teget -tehir -teist -teizm -tekci -tekel -teker -tekil -tekin -tekir -tekit -tekke -tekli -tekme -tekne -tekst -telas -telef -telek -telem -teles -telif -telin -telis -telli -telsi -telve -temas -temek -temel -temin -temiz -tempo -tenge -tenha -tenis -tenor -tente -tenya -teori -teper -tepik -tepir -tepis -tepke -tepki -tepme -tepsi -teras -terbi -terek -teres -terfi -terim -terki -terli -terme -tersi -terzi -tesci -tesir -tesis -tesit -tesne -tesri -testi -tesyi -tetik -tetir -tevdi -tevek -tevil -tevki -tevsi -tevzi -teybe -teyel -teyit -teyze -tezat -tezce -tezek -tezli -tibbi -tibet -tifil -tikac -tikel -tikim -tikir -tikis -tikiz -tikma -tilki -timar -tinaz -tiner -tinma -tipik -tipir -tipis -tipki -tiraj -tirak -tiran -tiras -tirat -tirik -tiril -tiris -tirit -tiriz -tirle -tirse -tirsi -titan -titiz -toere -tohum -tokac -tokat -toklu -tokus -tokuz -tokyo -tolga -tomak -tomar -tonaj -toner -tonga -tonik -tonla -tonlu -tonoz -tonya -topac -topak -topal -topar -topaz -topcu -topik -topla -toplu -topuk -topur -toput -topuz -torak -torba -torik -torna -tortu -torum -torun -tosun -total -totem -toyca -toycu -toyga -tozan -tozlu -trafo -trake -trans -trata -trend -trene -treni -triko -tromp -truek -tuere -tuerk -tueyo -tueze -tufan -tugay -tugcu -tugla -tuglu -tugra -tuhaf -tukas -tukur -tuluk -tulum -tulup -tuman -tumba -tunik -turac -turan -turba -turbo -turfa -turna -turne -turno -turpu -tursu -turta -tutac -tutak -tutam -tutan -tutar -tutku -tutma -tutsa -tuttu -tutuk -tutum -tutup -tutus -tutya -tuval -tuyug -tuzak -tuzcu -tuzla -tuzlu -tuzsu -tvist -ucagi -ucari -uckun -uckur -ucmak -ucman -ucmaz -ucsuz -uctan -ucube -ucucu -ucumu -ucuna -ucunu -ucusu -ucuza -uecer -ueful -ueles -uelke -uemit -uemmi -uenik -uerat -uerem -uerik -ueser -uesme -ueste -uetme -uetue -uevey -uevez -uezme -uezre -ufaga -ufagi -ugrak -ugras -ugrun -uguru -ukala -uknum -ulaci -ulagi -ulama -ulema -ulufe -uluma -umaci -ummak -umman -umran -umuda -umudu -umumi -unluk -unsur -ununu -unvan -urban -urgan -usagi -usanc -usare -uskun -uskur -ussak -ussal -ustun -utana -utanc -utmak -uyari -uygar -uygun -uygur -uyluk -uymak -uymaz -uyruk -uysal -uyuma -uyumu -uyuzu -uzadi -uzaga -uzagi -uzama -uzasa -uzlet -uzluk -uzman -vaadi -vacip -vagon -vahim -vahit -vahiy -vahsi -vakar -vakfe -vakia -vakif -vakit -vakta -vakti -vakum -vakur -valfi -valiz -vanli -vapur -varak -varan -varda -vargi -varil -varir -varis -varit -varla -varma -varos -varsa -varta -vasak -vasat -vasif -vasil -vatan -vatka -vatoz -vazih -vebal -vecde -veche -vecih -veciz -vedia -vefat -vehim -vehme -vekil -velet -velur -velut -verdi -verem -veren -verev -vergi -verim -verip -verir -veris -verit -verme -vezin -vezir -vezne -vezni -vicik -vicir -video -vigla -villa -viraj -viral -viran -visal -viski -visne -vites -vitir -viyak -viyol -vizir -vizon -vokal -volan -volta -vonoz -votka -voyvo -vukuf -vulva -vurac -vuran -vurdu -vurgu -vurma -vursa -vuruk -vurum -vurup -vurus -vusul -vuzuh -yaban -yabgu -yadin -yafta -yagar -yagci -yagda -yagdi -yagir -yagis -yagiz -yagli -yagma -yagsa -yagsi -yahey -yahni -yahsi -yahut -yakan -yakar -yakim -yakin -yakip -yakis -yakit -yakma -yakut -yalak -yalan -yalap -yalar -yalaz -yalim -yalin -yaliz -yalpa -yalpi -yamac -yamak -yaman -yamci -yamru -yamuk -yanak -yanal -yanan -yanar -yanay -yanci -yanda -yandi -yangi -yanik -yanip -yanis -yanit -yanki -yanli -yanma -yansi -yapak -yapan -yapar -yapay -yapik -yapim -yapip -yapis -yapit -yapma -yarak -yaran -yarar -yaras -yarda -yaren -yargi -yarik -yarim -yarin -yaris -yarka -yarma -yasa! -yasak -yasal -yasam -yasin -yasit -yasli -yasma -yassi -yasta -yatak -yatan -yatar -yatay -yatci -yatik -yatim -yatip -yatir -yatis -yatma -yatsi -yavan -yavas -yaver -yavru -yavsi -yavuz -yayan -yaygi -yayik -yayim -yayin -yayis -yayla -yayli -yayma -yazar -yazdi -yazgi -yazik -yazim -yazin -yazip -yazir -yazis -yazit -yazli -yazma -yedek -yeder -yediz -yedme -yegah -yegan -yegen -yegin -yegni -yeise -yekin -yekta -yekun -yekûn -yelec -yelek -yelin -yelli -yelme -yelve -yemci -yemek -yemem -yemez -yemin -yemis -yendi -yenen -yenge -yengi -yenik -yenir -yenli -yenme -yense -yerde -yerel -yerey -yergi -yerim -yerin -yerle -yerli -yerme -yesem -yesil -yesim -yesin -yeter -yetik -yetim -yetke -yetki -yetme -yetti -yevmi -yeygi -yezit -yigin -yigis -yigit -yigma -yikar -yikik -yikim -yikis -yikma -yilan -yilda -yilgi -yilik -yilin -yilki -yilma -yirik -yirmi -yitik -yitim -yitip -yitis -yitme -yivis -yivli -yiyen -yiyim -yiyip -yiyis -yobaz -yoere -yogun -yokcu -yoksa -yokum -yokus -yolak -yolcu -yolda -yollu -yolma -yoluk -yolun -yonca -yonga -yonma -yontu -yorar -yorga -yorma -yortu -yorum -yosma -yosun -yudum -yuece -yueze -yufka -yukac -yulaf -yular -yumak -yumdu -yumma -yumru -yumuk -yunak -yunan -yunma -yunus -yurdu -yutak -yutar -yutma -yutum -yuvak -yuvar -yuvgu -zaafa -zabit -zafer -zagar -zagci -zagli -zahir -zahit -zalim -zaman -zamir -zamki -zamli -zamme -zammi -zanka -zanli -zapti -zarar -zarci -zarfi -zarif -zarsi -zarta -zaten -zayif -zeban -zebil -zebra -zebun -zebur -zecir -zecri -zecrî -zefir -zehap -zehir -zekat -zeker -zelil -zelve -zemin -zenci -zenne -zerde -zerre -zeval -zevat -zevce -zevki -zeyil -zibin -ziddi -zifaf -zifin -zifir -zifos -zigon -zigot -zihaf -zihin -zihli -zihni -zihnî -zikir -zikri -zilli -zimba -zimmi -zimni -zinde -zipir -zipka -zirai -zirhi -ziril -zirva -zirve -zivir -ziyan -zorba -zorca -zorgu -zorla -zorlu -zorun -zueht -zuhur -zurna -abajur -abanin -abanis -abanma -abanoz -abarti -abasiz -abazan -abdala -abdest -abesle -abidik -ablaci -abliyi -abluka -aborda -abrama -absent -abstre -abukca -acacak -acayip -acelya -acemce -acente -acgoez -acidan -acidir -acikan -acikca -acikci -acikis -acikli -acikma -acikta -acilan -acilar -acilen -acilik -acilim -acilip -acilis -acilma -acimak -acimaz -acimik -acimsi -acinim -acinis -acinma -acirak -acirga -acisal -acisiz -acitis -acitma -aciyan -aciyis -ackici -ackili -acmaci -acmali -acmaza -acyocu -adacik -adacyo -adakli -adalet -adamak -adamca -adamin -adanma -adapte -adatma -adavet -adayim -adayis -ademci -adenit -adetce -adilik -adiyla -adliye -afacan -afakan -aferin -affini -afisci -afiste -afiyet -aforoz -afrali -afrika -afyonu -agabey -agacin -agacli -agacsi -agacta -agadir -agalik -aganin -aganta -agaran -agarik -agarma -agarti -agdaci -agdali -agilda -agimli -aginma -agirca -agitci -agizda -agizli -aglama -aglati -agnama -agnosi -agnozi -agrafi -agrega -agrili -agrima -agrisi -agucuk -agzima -agzimi -agzina -agzini -ahacik -aharli -ahengi -aheste -ahilik -ahiren -ahiret -ahirin -ahiska -ahlaki -ahlama -ahmaga -ahmagi -ahuvah -aidati -ailece -ailevi -ajanda -ajansi -ajurlu -akacak -akagac -akamet -akarca -akaret -akarsu -akasma -akasya -akbaba -akceli -akcesi -akceye -akdari -akibet -akilci -akilda -akilli -akimci -akinci -akinti -akisli -akisma -akitis -akitma -akiyla -aklama -akligi -aklima -aklina -aklini -akliye -akmasa -akordu -akraba -akrebi -aksagi -aksama -aksami -aksani -aksata -aksesi -aksine -aksona -aksuna -aktoer -aktris -akyurt -alabas -alacak -alacam -alacik -alakok -alamaz -alamet -alarga -alarma -alasim -alasin -alatav -alaten -alayci -alayis -alayli -alaysi -albatr -albeni -albuem -alcici -alcili -alciya -aldanc -aldigi -aleksi -alemci -alemin -alenen -alerji -alesta -aletli -alevli -aleyhe -alfabe -algler -aliaga -alikca -alimci -alimli -alindi -alinir -alinis -alinli -alinma -alinti -alisik -aliski -alisma -alivre -alkali -allah! -allahi -allama -allame -almaca -almaci -almadi -almali -almaya -alnina -alnini -alpaka -alpaks -alplik -alsimi -alsin! -altili -altina -altini -altlik -altmis -altsiz -alttan -altuni -alucra -alveol -alyans -amacli -amalik -amanin -amasya -amazon -ambale -ambara -ambari -amblem -amenna -ametal -amfibi -amfora -amilaz -amipli -amiral -amirce -amitoz -amnezi -amorti -amyant -anacik -anacil -anadan -anadut -anafor -analik -analiz -analog -anamal -anamin -ananas -ananin -anarsi -anasil -anasir -anasiz -anason -anbean -andini -anemik -anemon -angaje -angora -angudi -aniden -anilik -anilin -anilis -anilma -aninda -aniris -anirma -anirti -anisal -anitli -anitsi -anizli -anjiyo -ankara -anlama -anlat! -anlata -anlati -anofel -anonim -anorak -antant -antika -antrok -antsiz -anueri -apacik -apalak -aparat -aparey -aparma -apatit -apayri -apisak -apisik -apisip -apisma -aplike -apolet -apreci -apreli -apseli -apsent -araban -aracli -aradan -arafat -arakci -aralar -aralik -aramak -aranip -aranje -aranma -aranti -arapca -ararot -arasat -arasit -arasiz -arasta -aratis -aratma -arayan -arayip -arayis -arbede -ardici -ardina -ardini -ardiye -argali -argolu -aricak -arikci -arilar -arilik -arinik -arinin -arinis -arinma -arioso -aritim -aritis -aritma -aritmi -ariyet -arkada -arkaik -arkali -arkasi -arkaya -arkeen -arktik -armada -armali -armoni -armudi -armudu -arnika -arpaci -arpasi -arpayi -arsizi -arslan -artigi -artist -artmak -artrit -artroz -artsiz -artvin -arzani -arzulu -arzusu -asalak -asalet -asarci -asayis -asbest -asepsi -aserat -aserme -asetat -asetik -aseton -asfalt -asgari -ashane -asigin -asikar -asikli -asilik -asilir -asilis -asilli -asilma -asilti -asinim -asinis -asinma -asinti -asiret -asirir -asirma -asirti -asisiz -asiyan -asiyla -askere -askeri -askerî -askici -askida -askili -askina -askisi -askiya -aslana -aslani -aslina -aslini -asliye -asmali -asmasi -asorti -astari -astigi -asuman -asurca -asyali -asyoen -atabey -atadan -atalar -atalet -atalik -atamak -ataman -atanis -atanma -atarim -atavik -atbasi -ateist -ateizm -atelye -atesci -atesin -atesle -atesli -ateste -atidir -atifet -atilan -atilim -atilir -atilis -atilma -atimci -atisma -atkili -atladi -atlama -atlasi -atlaya -atliya -atmaca -atomal -atomcu -atomik -atonal -attigi -avcisi -averaj -avucta -avukat -ayakli -ayakta -ayarli -aydin! -aygiri -aygiti -ayirir -ayirma -aykiri -aylari -aylasi -ayligi -aynasi -aynisi -ayrica -ayrimi -ayvasi -ayyuka -azapta -azgini -azmani -babaca -babali -babam! -babana -babasi -babaya -babayi -bacagi -bacasi -bacayi -badana -badehu -badeli -badema -bademi -badire -badiye -bagcik -bagdas -bagdat -bagici -bagina -bagini -bagira -baglac -baglam -baglik -bagnaz -bagris -bagsiz -bahane -bahari -bahsis -bahtli -bakani -bakara -bakaya -bakici -bakima -bakire -bakisi -bakiye -bakkal -baklan -bakmak -bakmaz -bakmis -bakrac -baktin -balama -balans -balast -balata -balayi -balbal -balcak -balcik -baldan -baldir -baldiz -balgam -baliga -baligi -balina -balkan -balkar -balkir -balkon -ballik -balosu -balsam -baltik -balyos -balyoz -bambul -bandaj -bangir -banker -banket -bankiz -banmak -baobap -baraji -baraka -barata -barbar -barbut -barcak -bardak -bardan -bargah -bargam -barisi -barkli -barkod -barlam -barmen -baronu -barsak -barsam -bartin -barudi -barutu -baryum -basari -basbug -bascik -basici -basila -basili -basima -basimi -basina -basinc -basini -basite -baskan -baskca -basket -baskin -baslik -basmak -basmal -basoda -basrol -bassiz -bastan -bastik -baston -basucu -bataga -batasi -bateri -batici -batili -batimi -batini -batisi -batkin -batmak -batman -batmaz -batoez -batsat -batsin -battal -batyal -bayagi -bayati -baygin -bayila -bayira -bayisi -baykus -baylan -baymak -baypas -bayrak -bayram -baysal -baytar -bazali -bazalt -bazice -bazisi -bazuka -bebegi -becene -beceri -bedava -bedayi -bedbin -beddua -bedeli -bedeni -bedenî -bedevi -bedhah -bedihi -bednam -beduek -begeni -beguem -behcet -behime -behimi -behist -bekara -bekler -belada -belali -belasi -belaya -belayi -belden -beledi -beleme -belese -belgec -belgin -belgit -beline -belini -beliye -bellek -bellem -beller -bellik -bencil -bende! -benden -bendir -benlik -benzen -benzer -benzes -benzin -benzol -beraat -berati -berbat -berber -berdel -berdus -bereli -beride -beriki -berisi -beriye -beriyi -berjer -berrak -bertik -bertme -berzah -beserî -besgen -besici -besigi -besili -besini -besiri -besiye -beslek -besler -beslik -bestas -beteri -betili -betimi -bevvap -beyani -beyaza -beyden -beygir -beyler -beylik -bezeli -bezeme -bezene -bezgin -bezini -bezmek -bezzaz -biaman -bibaht -biberi -bicaga -bicagi -bicare -bicici -bicili -bicimi -bickin -bicmek -bicmez -bidonu -bienal -biftek -bigane -bigudi -biilac -bikini -bikkin -bikmak -bildik -bildim -bildir -bilegi -bileli -bileme -bilene -bileti -bilgic -bilgin -bilici -bilimi -bilinc -billah -billik -billur -bilmek -bilmem -bilmez -bilmis -bilsat -bilsen -bilyon -binaen -binasi -binbir -bingil -binici -binkat -binlik -binmek -binyil -biraci -bircok -birden -birdir -birimi -birine -birini -birisi -birkac -birler -birlik -birsam -biryan -bistro -bitevi -bitimi -bitken -bitkin -bitler -bitlis -bitmek -bitmez -bitmis -bitnik -bitter -bittim -bituem -bivefa -biyeli -biyigi -bizans -bizbiz -bizden -bizdik -bizmut -bizzat -blokaj -bloklu -blucin -boalar -bobini -bodrum -boecek -boecue -boelen -boelge -boelme -boelue -boence -boerek -boeyle -bogada -bogasi -bogata -bogaya -bogaza -bogazi -bogmak -bogucu -bogula -bogunc -bokluk -boksit -boktan -boktur -bokuna -bolero -bolice -bolluk -bolulu -bombok -bombos -bomboz -bonbon -boncuk -bonjur -bonosu -bopluk -boraks -borali -borani -borcka -borclu -borcum -borcun -bordro -borina -bornoz -borucu -borulu -borusu -boruya -bosama -bosluk -bosnak -bostan -bosuna -boyaci -boyadi -boyali -boyama -boyana -boyasi -boyaya -boyayi -boydak -boydan -boydas -boykot -boylam -boyler -boynuz -boysuz -boyuma -boyuna -bozaci -bozayi -bozdur -bozgun -bozkir -bozlak -bozmak -bozrak -bozsun -bozucu -bozugu -bozumu -brahma -braket -branda -brezil -bricka -briket -broeve -brokar -broker -bucaga -bucagi -bucugu -budala -budama -budist -budizm -bueget -bueken -buekme -buelug -buenye -buetan -buetce -bueten -buetey -buevet -bueyue -buezme -bugday -buguen -bugulu -bugusu -buhran -bukagi -buklet -bukran -bulaca -bulada -bulama -buldan -buldok -bulduk -buldum -bulgar -bulgur -bullak -bulmak -bulmaz -bulmus -bulsun -bultak -bulucu -buluga -bulutu -bulvar -bumbar -bumbuz -bunama -bundan -bungun -bunlar -bunluk -bunmak -bunsuz -burada -burali -burasi -burcak -burdur -burgac -burhan -burkma -burkuk -burmak -burnaz -burslu -burulu -buruna -burusu -butlan -butsuz -buutlu -buymak -buyruk -buyur! -buyuru -buzagi -buzlar -buzluk -buzuki -buzulu -cabasi -cacaca -cadiri -cafcaf -caferi -cagcil -cagdas -cagini -cagira -caglar -caglik -cagmak -cagnak -cagrim -cagris -cahile -cahili -cakaci -cakali -cakici -cakili -cakkal -cakmak -caksir -caldik -calgic -calgin -caligi -calili -calisi -caliyi -calkak -calkar -calmac -calmak -calmaz -calsan -cambaz -cambul -camcak -cameli -camevi -camisi -camlar -camlik -camsiz -camuka -camura -camuru -canaga -canagi -candan -candas -candir -canevi -canfes -cangal -cangil -cangir -canice -canimi -canina -canini -cansiz -capaci -capali -capari -capcak -capkin -capmak -caprak -capraz -capsiz -captan -capula -carcar -carcur -cardak -cardas -caresi -cargah -carice -cariye -carkci -carkit -carkli -carlik -carmih -carpan -carpik -carpim -carpis -carpma -carsaf -carsiz -catana -catici -catili -catiyi -catkin -catlak -catlar -catmak -catpat -cavdar -cavdir -cavela -cavlak -cavlan -cavmak -cavsir -cavusu -caydan -caydim -cayevi -caygin -cayira -cayiri -caylak -caylik -caymak -cazgir -cazibe -cazsiz -cebbar -cebeci -cebeli -cebine -cebini -cebire -cebren -cedene -cefali -cefaya -cefayi -cegmel -cekcek -cekene -cekici -cekimi -cekise -cekiye -cekmek -cekmen -cekmis -cekuel -cekyat -celali -celebi -celenk -celige -celigi -cellat -celmek -celmik -celtek -celtik -cemaat -cember -cemevi -cemile -cemrek -cemsat -cenaze -cencen -ceneli -cenesi -ceneye -cengel -cenkci -cennet -center -centik -centme -cenubi -cepken -cepten -cerden -cereme -ceride -ceriha -cerkez -cermen -cermik -cerrah -cerrar -cervis -ceteci -cetele -cetvel -cevabi -cevgen -cevher -cevire -ceviri -cevizi -cevizî -cevren -cevrik -cevrim -cevval -ceyhan -ceyizi -ceylan -ceyrek -cezali -cezasi -cezaya -cezire -cibani -cicege -cicegi -cicigi -cicili -cicim! -cidagi -cidden -ciftci -cifter -cigdem -cigden -cigere -cigeri -ciglik -cignek -cignem -cihana -cihani -cihazi -cikani -cikcik -cikisi -cikkin -ciklet -cikmak -cikmaz -cikmis -cikrik -ciksin -cikti? -ciktik -cilaci -cilali -cilasi -cilban -cilbir -cildir -cileci -cilegi -cileli -cileme -cilesi -cileye -cilgin -cillop -cilsiz -ciltci -ciltli -cimaci -cimbar -cimbiz -cimcek -cimdik -cimmek -cincik -cingar -cingen -cingil -cingir -cinici -cinili -cinine -cinlak -cinler -cinnet -cinsel -ciplak -cipura -cirali -cirasi -circil -circir -cirkef -cirkin -cirlak -cirmik -cirnak -cirnik -cirosu -cirpis -cirpma -ciseme -ciskin -cismen -citari -citayi -citcit -citili -citlik -citmek -citmik -citpit -civali -civata -civciv -civgar -civgin -civici -cividi -civili -civima -civisi -civiyi -civmak -cizbiz -cizici -cizili -cizlam -cizmek -cizvit -cobana -cobani -cocuga -cocugu -coegme -coekek -coekel -coeker -coekme -coelue -coemce -coemez -coemme -coepue -coerek -coeven -coezme -cokgen -cokluk -coktan -coktur -colpan -comagi -corabi -coskun -cosmak -cotira -cubuga -cubugu -cuebbe -cuelus -cuemle -cuenha -cuenun -cueret -cueruf -cuesse -cuhaci -cuhali -cuhcuh -cukura -cukuru -culluk -culpan -culsuz -cultar -cumbul -cumhur -cungul -cungur -curaci -curcur -curpuk -cuvala -dadaci -dagcil -dagdan -dagina -daglar -daglic -daglik -dahasi -dahice -dahili -dahilî -dakika -dalagi -dalama -dalasi -dalcik -daldan -daldiz -dalfes -dalgic -dalgin -dalgir -dalici -dalina -dalinc -dalmak -dalsiz -dalyan -damaci -damali -damari -damdan -damlar -damper -damsiz -danaci -danasi -dandik -dangil -dansci -dansli -dantel -dapdar -daraya -dargin -darina -darisi -dariya -darlik -dasnik -davaci -davali -davasi -davaya -davete -davran -davudi -davulu -dayaga -dayagi -dayali -dayama -dayanc -dayisi -dayiya -daylak -dazkir -dazlak -debbag -debboy -deccal -dedesi -dedigi -defaat -defada -defans -defile -define -defol! -defolu -defter -degaje -degeri -deggin -degini -degmek -degnek -dehdeh -dehhas -dehliz -dehset -dejavu -dekont -dekore -delege -delgec -delgic -delice -delici -delige -deligi -delisi -deliye -deliyi -delmek -demedi -demesi -demeti -demevi -demire -demiri -demirî -demkes -demlik -demode -denaet -denden -deneme -denize -denkci -denmek -densiz -depara -depocu -deposu -deprem -derdin -derece -derede -dereke -dereyi -dergah -derhal -derici -derili -derim! -derine -derisi -deriyi -derken -derlem -derler -derman -dermek -dernek -derpis -dersen -dersiz -dertli -dertop -dertte -deruni -dervis -desarj -desise -desmek -despot -dessas -destan -destar -destek -destur -detant -detone -devasa -deveci -devede -devesi -deveye -deveyi -devlet -devran -devrek -devren -devrik -devrim -deyyus -dibace -dibegi -dibine -dibini -didona -difana -digdik -digeri -dikegi -dikeni -dikgen -dikici -dikili -dikine -dikisi -dikize -dikkat -diklik -dikmek -dikmen -dilbaz -dilber -dilcik -dildas -dilden -dileme -dilimi -diline -dilini -dillek -diller -dilmac -dilmek -dilsel -dilsiz -dimdik -dimmer -dimnit -dimyat -dinamo -dindar -dindas -dinden -dineri -dingil -dingin -dinine -dinler -dinmek -dinsel -dinsiz -dipcik -dipdam -dipnot -dipsiz -dirdir -diregi -direkt -direme -direnc -dirgen -dirhem -dirice -dirile -dirlik -dirsek -disari -discik -disegi -diseme -disici -disili -disina -disine -disini -diskci -disket -diskur -dislek -dislik -dispec -disrak -dissal -dissiz -distan -disten -ditmek -divane -divani -divlek -diyari -diyene -dizayn -dizdar -dizdik -dizdiz -dizgin -dizici -dizili -dizimi -dizine -dizini -dizisi -dizlik -dizman -dizmek -dizmen -dizyem -docent -doekme -doelek -doelue -doenec -doenek -doenel -doenem -doener -doenme -doesek -doesem -doevec -doeven -doeviz -doevme -dogaci -dogmak -dogmus -dogram -dogulu -dogumu -dogura -dogusu -doksan -doktor -dokulu -dokuma -dokusu -dokuza -dokuzu -dolaba -dolabi -dolama -dolasa -dolayi -dolgun -dolmak -dolmaz -dolmen -dolmus -dolusu -doluya -dombay -domdom -domino -domuzu -donama -donati -dondur -donmak -donmus -donoer -donsuz -donuna -doping -dorugu -dorusu -dostca -dostun -doygun -doyma! -doymak -doymam -doymaz -doymus -doyuma -dozunu -drenaj -drezin -duahan -duasiz -duayen -dubara -dubasi -dublaj -dudaga -dudagi -duebel -duebes -duecar -dueden -duegah -duegme -duegue -duemen -duenit -duenya -duerme -duerue -duerzi -duesen -dueser -dueses -duesey -duesme -duesse -duetto -duevel -dueven -duever -dueyek -dueyun -duezce -duezec -duezem -duezen -duezey -duezme -dulluk -dumagi -dumana -dumani -dumura -dungul -duragi -durgun -durmak -durmaz -durmus -dursun -dursuz -durucu -durumu -durusu -dutluk -duvara -duvari -duygan -duygun -duymak -duysal -duyumu -duyuru -duyusu -duziko -ebabil -ebelik -ebesiz -ebonit -ebrucu -ebruli -ebrulu -ecinni -ecnebi -eczaci -eczali -eczane -edatli -edemez -edenin -edepli -ederse -edevat -edilgi -edilme -edimli -edinim -edinme -edinti -edirne -efelek -efelik -efendi -efkari -eflake -efradi -efsane -egemen -egilen -egilim -egilip -egilir -egilis -egilme -egimli -eginik -eginme -eginti -egirme -egitim -egitme -egleme -egmuer -egoist -egoizm -egreti -egrice -egrili -egrisi -egriye -egzama -ekabir -ekarte -ekecek -ekenek -ekilme -ekinci -ekinti -ekleme -eklemi -ekleri -ekmegi -ekolog -ekseni -ekseri -eksibe -eksili -eksime -eksper -ekstra -ekstre -ekueri -elaman -elazig -elbise -elciye -eldeci -eldeki -eldeli -elekci -eleman -elemek -elemge -elemli -elenme -elenti -eletme -eleyip -elezer -elguen -elifba -elifin -elinde -elinin -elinle -eliyle -elkizi -elleme -ellere -ellisi -elmaci -elmasi -elmaya -elmayi -eloglu -eltiye -elveda -elyafi -emanet -emaret -emboli -emdigi -emekci -emekli -emilme -emisme -emleme -empati -empoze -emrine -enberi -enbiya -endaze -endeks -endise -enemek -enenme -enerji -enfiye -engebe -engeli -eninde -eniste -enkazi -enlice -enoete -ensesi -ensest -enseyi -entari -epeyce -epifit -epilog -epitel -epizot -eprime -erbabi -erbain -erekci -ergene -ergime -erigen -eriksi -erimek -erinme -erisim -erisme -eriste -eriten -eritis -eritme -eriyik -eriyip -eriyis -erkani -erkege -erkegi -erkete -erklik -erksiz -ermeni -erosal -eroscu -erotik -erseme -ertesi -esansi -esaret -esasen -esasli -esatir -esefle -esefli -esegim -esegin -esekce -esekci -esekle -eseksi -eselek -eserme -eseyli -esikte -esilme -esinme -esinti -esirci -esirme -esitci -eskice -eskici -eskime -eskimo -eskisi -eskiya -eskiye -eskort -eskrim -eslegi -esleme -esmayi -esmere -esmeri -esneme -esperi -espiye -esrara -esrime -estamp -estigi -estomp -esyali -esyasi -etajer -etalon -etamin -etanol -etcigi -etibba -etiket -etilen -etiyle -etkili -etkime -etkisi -etliye -etmedi -etobur -etrafi -etriye -ettigi -evcara -evdeci -evdeki -everme -evinde -evinli -evirip -evirme -evladi -evlere -evliya -evliye -evseme -evvela -evveli -eyalet -eyerci -eyerli -eyitme -eyleme -eylemi -eyluel -ezanci -ezanda -ezbere -ezgili -ezilip -ezilir -ezilis -ezilme -ezinti -eziyet -ezkaza -ezmesi -facali -facasi -faceta -factor -facuna -fagfur -fahise -faizci -faizli -fakfon -fakuel -falaka -falanj -fallop -fallus -fanfan -fanfar -fanfin -fangri -fanila -fantom -fanyol -faraza -farazi -faresi -farika -farima -farisi -fariza -farkli -farsca -fasila -fasile -fasing -fasist -fasizm -fasone -fassal -fatiha -fatura -favori -fayans -fayrap -fayton -fecaat -federe -fekuel -felcli -felege -felegi -feliks -fellah -fellek -fellik -fenasi -fenaya -fenere -feneri -feodal -ferace -ferahi -ferden -ferman -fernez -fersah -fersiz -fertik -feryat -fesadi -fesini -fetret -fettan -fetues -feyyaz -fibrin -ficici -ficisi -fideci -figuer -fiilen -fikdan -fikren -fiktif -fildir -filenk -fileto -filika -filizi -filizî -filmci -filosu -filtre -finale -finans -fincan -findik -fingir -finike -firari -firfir -firina -firini -firkat -firlak -firsat -firuze -fisegi -fisfis -fisini -fiskal -fiskin -fiskos -fislik -fissiz -fistan -fistik -fisuer -fitigi -fitili -fitrat -fiyaka -fiyati -fiyonk -fiyort -fizigi -fiziki -flaman -flambe -flanel -flavta -flebit -floere -floert -florin -florit -flurya -folluk -fondan -fondip -forint -format -formda -formel -formen -formik -formol -forslu -fortcu -forvet -fosfat -fosfor -fosgen -foyasi -frakli -frapan -frenci -frengi -frezya -frikik -friska -fuarci -fuecur -fuenye -fuesun -fuetur -fuezen -fukara -furgon -futbol -fuzuli -gabari -gabyar -gaddar -gaffar -gafile -gaflet -gagali -gahice -galebe -galeri -galeta -galiba -galyot -galyum -gamali -gambot -gamdan -gammaz -gamsiz -ganali -ganyan -garaip -garami -garazi -gargar -garibe -garibi -garpci -garpli -garson -gaspci -gassal -gavura -gavuru -gayeli -gayret -gayzer -gazaba -gazebo -gazeki -gazete -gazino -gazisi -gazla! -gazlar -gazsiz -gececi -geceki -geceli -gecesi -geceyi -gecgec -gecici -gecidi -gecisi -geckin -gecmek -gecmez -gecmis -gedmek -gegrek -gehgeh -geldik -geldin -geleme -gelene -geleni -gelesi -gelgec -gelgel -gelgit -gelimi -gelini -gelir? -geliri -gelisi -gelmek -gelmez -gelmic -gelmis -gelsin -gemici -gemini -gemisi -gemiyi -gemlik -genlik -genzek -genzel -gercek -gerdan -gerdek -gerdel -geregi -gergef -gerger -gergin -gerici -gerili -gerisi -geriye -gerize -germek -germen -gerzek -getire -getiri -geveze -gevher -gevmek -gevrek -gevsek -geyigi -gezgin -gezici -gezisi -geziye -gezlik -gezmek -gezmen -gibisi -giciri -gidali -gidene -gideri -gidici -gildir -gineli -girdap -girene -gireni -girgin -girgir -girift -girmek -girmez -gitmek -gitsin -giyabi -giybet -giygiy -giymek -glikol -glikoz -global -glokom -goblen -goebek -goebel -goecen -goecer -goecme -goecue -goeden -goedes -goegem -goegue -goekce -goekte -goelek -goelet -goelge -goelue -goemec -goemme -goemue -goenen -goenle -goenye -goeren -goerev -goerme -goerse -goerue -goevde -goevek -goevel -goevem -goeyme -goezde -goezer -goezle -goezue -gofret -golcue -gollue -gondol -gosist -gosizm -gotlar -grafik -grafit -gramaj -gramer -grandi -granit -grekce -gremse -grevci -grimsi -gripli -guebre -guecue -guedek -gueden -guedue -guefte -guelec -gueler -guelle -guelme -guelue -guemec -guenah -guence -guende -guenec -guenes -gueney -guenue -gueres -gueruh -guetme -guevec -gueven -guevez -guezel -guezey -gufran -gulden -gurbet -gusuel -haberi -habesî -haceti -hacisi -hademe -hadise -hadsiz -hafife -hafiye -hafiza -haince -hakani -hakemi -hakeza -hakiki -hakimi -hakkak -haklar -haksiz -haktan -halati -halayi -halaza -halden -haldir -halebi -haleli -halhal -halici -halife -halile -haline -halini -halisi -halita -halkci -hallac -halsiz -halter -halvet -hamala -hamali -hamama -hamami -hamasi -hamile -hamlac -hamlik -hamsin -hamule -hamuru -hancer -handan -hanefi -haneli -hanesi -hangar -hanimi -hanlik -hantal -harabe -harabi -haraca -harala -harama -harami -harani -harara -haraso -haraza -harcli -hardal -hareke -hareki -hareli -harici -haricî -harika -harita -harlak -harman -harnup -harput -hartuc -hasadi -hasara -hasari -hasebi -hasefe -haseki -hasere -hashas -hasila -hasili -hasini -hasiye -haslak -haslet -hasmet -hasret -hassas -hastel -hasyet -hatali -hataya -hatime -hatira -hatiri -hatlar -hattat -havaci -havada -havale -havali -havari -havasi -havaya -havayi -havhav -havran -havucu -havuzu -havyar -hayale -hayali -hayalî -hayata -hayati -haydan -haydin -haydut -hayhay -hayhuy -haylaz -hayran -hayrat -hayret -hayvan -hazari -hazine -hazira -hazire -hazret -heccav -hececi -heceli -hecesi -hediye -hekimi -hektar -helali -helalî -hellim -helyum -hemati -hemhal -hendek -hengam -henuez -hepcil -hepten -hepyek -hercai -herkes -hesaba -hesabi -hevenk -hevesi -heybet -heyeti -heyhat -heyhey -heykel -heyula -hibrit -hicbir -hiclik -hicran -hicret -hicten -hiddet -hidrat -hidrik -hijyen -hikaye -hikemî -hikmet -hilali -hilalî -hileci -hileli -hilesi -hilkat -hiltan -hiltar -himaye -himbil -himhim -himmet -hincli -hinlik -hintce -hintli -hinzir -hipnoz -hircin -hirfet -hirsiz -hirsli -hirvat -hisiri -hisset -hissiz -hitabe -hiyari -hizaya -hizini -hizmet -hocasi -hodbin -hodkam -hokeyi -horhor -hormon -horozu -hortum -hosafi -hosbes -hoshos -hosluk -hosnut -hostes -hosuna -hoyrat -hristo -huecre -huecum -huekme -huekmi -huelle -huelya -huener -huensa -huerle -huerya -huezme -huezne -huksat -hukuki -hukuku -hulasa -hunhar -hunnak -hunriz -hurafe -hurufi -husule -hususi -huysuz -huyuma -huyuna -huyunu -iadeli -iadesi -ibadet -ibaret -ibibik -ibikli -ibiksi -ibradi -ibrani -icabet -icapci -icatci -icazet -icecek -icelli -icerik -icerme -icilis -icilme -icimli -icinde -icinin -icirik -iciris -icirme -ickici -ickili -icmece -icmeye -icraat -icraci -icraya -ictepi -ictima -icyagi -icyuez -iflahi -iflasi -ifrata -ifsaat -iftira -igdesi -igneci -igneli -ignesi -igneyi -igrenc -igribi -iguana -ihanet -ihlali -ihlama -ihrama -ihtida -ihtira -ihtiva -ihzari -ikamet -ikbali -ikile! -ikilem -ikilik -ikinci -ikindi -ikinip -ikinma -ikinti -ikiser -ikitek -ikizli -iklama -iklaya -iklimi -ikmale -iktifa -iktiza -ilacli -ilanen -ilarya -ilenis -ilenme -iletim -iletis -iletki -iletme -ilgama -ilgili -ilginc -ilicak -ilikca -ilikci -ilikli -iliksi -ilimak -iliman -ilimci -ilimli -ilinek -ilinma -ilinti -ilisik -ilisim -iliski -ilisme -ilitma -ilkeci -ilkesi -ilkten -ilkyaz -illaki -illeti -ilmini -ilmiye -iltica -imalat -imamet -imamin -imanim -imanli -imarci -imaret -imdada -imgeci -imgeli -imkani -imlaya -imleme -imtina -imzali -imzasi -imzayi -inadim -inakci -inanca -inanci -inanis -inanli -inanma -inatci -inatla -inayet -inceye -inciri -indeks -indifa -inekci -inekli -infial -ingini -inhina -inikas -inikat -inilme -inilti -inisin -inisli -inkita -inleme -inmeci -inmeli -insaat -insafa -insafi -insana -insani -intani -intiba -intifa -intiha -inziva -ipekci -ipekli -ipilti -ipince -ipiyle -ipleri -iplige -ipligi -ipotek -iptida -iptila -irakca -irakli -iramak -iranli -irgama -iribas -irilik -irinli -irinti -irkmek -irksal -irktas -irlama -irmigi -ironik -irtica -irtifa -irtisa -irzina -irzini -isabet -isaret -isbasi -iscisi -isemek -isetme -isicam -isidam -isigan -isikci -isikli -isilak -isilik -isilti -isimak -isimci -isimli -isinim -isinin -isinis -isinli -isinma -isinti -isirik -isirma -isitim -isitip -isitir -isitis -isitma -isitme -iskaca -iskana -iskele -iskete -iskine -iskota -iskuna -islahi -islama -islami -isleme -islemi -isler? -islere -isleri -ismini -ispari -ispati -ispenc -israfa -istaha -istahi -isteka -isteme -istenc -isteri -istial -istiap -istida -istifa -istifi -istiha -istika -istila -istira -istiva -isveli -italik -itenek -itibar -itidal -itikaf -itikal -itikat -itilaf -itilis -itilme -itimat -itiraf -itiraz -itirli -itisip -itisme -itiyat -itizar -itlere -itmeli -ittila -ivazli -ivecen -ivegen -ivinti -iydiye -iyelik -iyicil -iyiden -iyidir -iyilik -iyonik -iyotlu -izafet -izahat -izahli -izanli -izbiro -izgara -izinli -izleme -izobar -izomer -izotop -izzeti -jaguar -jakuzi -jaluzi -jambon -janjan -japone -jargon -jeolog -jersey -jigolo -jorjet -judocu -juepon -jurnal -kabaca -kabagi -kabala -kabana -kabara -kabare -kabile -kabina -kabine -kabini -kabugu -kacagi -kacani -kackin -kaclik -kacmak -kadehi -kademe -kadere -kadidi -kadife -kadimi -kadimî -kadina -kadini -kadiri -kadisi -kadiya -kadraj -kadran -kadrat -kadril -kaduek -kafaca -kafada -kafali -kafasi -kafaya -kafayi -kafein -kafese -kafesi -kafile -kafiye -kafkas -kaftan -kagida -kagidi -kagsak -kahhar -kainat -kakaya -kakici -kakima -kakinc -kakisa -kaklik -kakmak -kaknem -kakuel -kakule -kalaba -kalasi -kalayi -kalben -kalbin -kalbur -kalcin -kaldi! -kaldin -kaleci -kaleme -kalemi -kalevi -kaleyi -kaliba -kalibi -kalici -kaliko -kalite -kalkan -kalkar -kalker -kalkik -kalkip -kalkis -kalkma -kalles -kalmak -kalmaz -kalmis -kaloma -kalori -kalpak -kalpci -kalpli -kalsin -kalsit -kaltak -kalyon -kamaci -kamali -kamara -kamber -kambur -kamera -kameri -kamerî -kameti -kamisi -kamkaz -kampci -kampus -kamyon -kanaat -kanada -kanadi -kanali -kanama -kanara -kanata -kancik -kancil -kancur -kandas -kandil -kanepe -kangal -kanina -kanini -kaniya -kankan -kanlim -kanmak -kanmam -kanser -kansiz -kantar -kantat -kantci -kantin -kanton -kanuni -kanunu -kanyak -kanyon -kaolin -kaotik -kapagi -kapali -kapama -kapana -kapani -kapari -kapcak -kapcik -kapela -kapici -kapida -kapili -kapini -kapisi -kapiya -kapiyi -kapkac -kaplam -kaplan -kaplar -kaplik -kapmak -kapmaz -kapora -kapris -kapsam -kapsiz -kaptan -karaca -karaci -karada -karafa -karagi -karaim -karali -karama -karara -karari -karasi -karasu -karate -karaya -karayi -karbon -kardan -kardes -kareli -karili -karisi -karnim -karnin -karpuz -karsit -kartal -kartus -kasaba -kasigi -kasnak -katari -katibi -katimi -katiri -katmak -katman -katran -kattim -kavafi -kavaga -kavagi -kavram -kavsak -kavugu -kavunu -kayagi -kayasi -kayigi -kayini -kayisa -kayisi -kayiti -kaymak -kaynar -kaynat -kazagi -kazana -kazani -kazasi -kazdan -kazein -kaziga -kazigi -kazisi -kazmak -kebabi -kebeci -kebere -kececi -keceli -keceyi -kecide -kecisi -keciye -keciyi -kedisi -kediye -kediyi -kefali -kefeki -kefeli -kefeni -kefere -kefiye -kekeme -kekigi -keklik -kelami -keleci -keleme -keleri -keleye -kelime -kellik -kemale -kemane -kemani -kement -kemere -kemeri -kemige -kemigi -kemlik -kenara -kendin -kendir -kengel -kenger -kental -kentci -kenter -kentet -kentli -kepaze -kepenk -kepmek -kepsut -kerata -kerhen -kerime -kerkes -kermen -kermes -kerpic -kerrat -kertik -kertme -kervan -kesegi -keseli -kesene -keseri -kesesi -keseye -kesici -keside -kesimi -keskek -keskin -kesme; -kesmek -kesmez -kesmik -kesret -kessaf -kessen -kestik -kesyap -ketcap -ketebe -keteni -kevgir -kevser -keyfim -kezzap -kibari -kibrit -kibutz -kicina -kicini -kictan -kiklon -kilade -kilagi -kilbaz -kilcal -kilcan -kilcik -kildan -kilgin -kilici -kilidi -kilifi -kiliga -kilimi -kilina -kilini -kilise -killar -kilmak -kilolu -kilsiz -kilues -kimine -kimisi -kimkim -kimlik -kimono -kimues -kimyon -kinali -kinama -kinasi -kinaye -kindar -kinina -kinini -kinizm -kinnap -kinsiz -kipcak -kipkip -kiplik -kipmak -kiraat -kiraci -kirada -kiragi -kirali -kirana -kirasi -kiraya -kirazi -kirbac -kircil -kircin -kireci -kirgin -kirgiz -kirici -kirigi -kirimi -kirisi -kirkar -kirkim -kirkit -kirkli -kirkma -kirlik -kirlos -kirmak -kirmen -kirmiz -kirnak -kirnav -kirpik -kirpma -kirsal -kirtil -kisaca -kisasa -kisasi -kisini -kisiye -kisiyi -kiskac -kislak -kislik -kismak -kismen -kismet -kismik -kismis -kisner -kisnis -kispet -kisrak -kistak -kistas -kistir -kitaat -kitaba -kitabe -kitabi -kitasi -kitina -kitira -kitlik -kivanc -kivrak -kivrik -kivrim -kiyaci -kiyasa -kiyasi -kiygin -kiyici -kiyida -kiyiya -kiymak -kiymet -kiymik -kizaga -kizagi -kizana -kizevi -kizgin -kizina -kizini -kizlar -kizlik -kizmak -klasik -klavye -klikci -klinik -klorik -klorlu -kloroz -klozet -kobalt -kocali -kocama -kocani -kocaya -kockar -kocmak -kodein -kodeks -kodese -kodesi -koecek -koefte -koehne -koeken -koekue -koelen -koembe -koemec -koepek -koerle -koerpe -koerue -koesek -koesem -koetek -koetue -koeyde -koeyue -koezue -kofana -kofluk -kogusu -kokain -kokara -kokari -kokart -kokmak -kokmaz -kokmus -kokona -kokpit -koksun -kokucu -kokulu -kokusu -kolaci -kolali -kolayi -kolcak -koldas -kolera -kolhoz -kolluk -koloit -koloni -kolsuz -koltuk -koluna -kolunu -kolyoz -komaya -komedi -komita -komite -komple -komplo -komuen -komuta -komutu -konagi -konclu -kondom -kondor -konfor -kongre -konisi -konkav -konken -konkre -konkur -konmak -konmaz -konser -konsey -konsol -konson -kontak -kontes -kontra -kontur -konugu -konulu -konusa -konusu -konvoy -konyak -kopar? -kopmak -kordon -korece -koreli -korgan -korida -korist -korkak -korkan -korkma -korluk -kornea -korner -kornet -kornis -korona -korpus -korsaj -korsan -kortej -korucu -korugu -koruma -korvet -kosmak -kosnil -kostak -koster -kostik -kosucu -kosulu -kosusu -kotlet -kovana -kovani -kovasi -kovboy -kovmak -kovsan -kovugu -koycuk -koydum -koygun -koymak -koymus -koysan -koyucu -koyuna -koyunu -kozaci -kozali -kozluk -kozmik -kozmos -kozunu -kraker -kralci -krater -kravat -krepon -kreten -kreton -krezol -kriket -kripto -kriter -kritik -kromaj -kromlu -kromsu -kronik -kruton -ksenon -kucaga -kucagi -kudema -kudret -kuduem -kuebik -kuefue -kuekre -kuelah -kuelce -kuelek -kuelle -kuelli -kuelot -kuelte -kuelue -kuemes -kuende -kuenye -kuepue -kuerar -kuerdi -kuerek -kuerit -kuesat -kuesme -kuesne -kuespe -kuesue -kuesuf -kuesur -kuetin -kuetle -kuevet -kulaga -kulagi -kuldur -kulesi -kuleye -kullap -kulluk -kulplu -kuluep -kulunc -kulunu -kulvar -kulyuc -kumali -kumasi -kumcul -kumluk -kumpas -kumpir -kumral -kumsal -kumsuz -kundak -kunduz -kungfu -kuponu -kupuer -kuraci -kurada -kurak; -kurala -kurali -kurama -kurami -kurasi -kurban -kurdun -kurgan -kurmak -kurmay -kurnaz -kursak -kursun -kurtla -kurtlu -kurtul -kuruca -kurucu -kuruda -kurulu -kuruma -kurumu -kurusu -kuruya -kusagi -kusane -kusbaz -kusevi -kuskun -kuskus -kuslak -kuslar -kusluk -kusmak -kusmar -kusmuk -kustan -kustur -kusura -kutsal -kutsuz -kutucu -kutulu -kutusu -kutuyu -kuvars -kuvoez -kuvvet -kuymak -kuyruk -kuyucu -kuyusu -kuyuya -kuzgun -kuzine -kuzulu -kuzum! -kuzusu -laakal -labada -labros -ladini -ladinî -ladino -laedri -lafini -laftan -lafzen -lagimi -laguen -lahana -lahika -lahuri -lahuti -lakaci -laklak -laktaz -laktik -laktoz -laleli -lalesi -lamaci -lambri -lamise -langir -langur -lantan -lapaci -lapcin -lapina -lastik -latali -lateks -latife -lavabo -lavman -layiha -lazime -lazlik -leduen -legato -legene -legeni -legorn -lehine -lehtar -lejant -lejyon -lekeci -lekeli -lekesi -leksik -lenger -leopar -lerzan -lescil -lesini -lesker -levent -levrek -leylak -leylek -lezyon -lezzet -libero -libido -ligden -lignin -likide -likoer -limaki -limani -limiti -limoni -limonu -lineer -linyit -lipari -lipsos -lirizm -lisana -lisani -lisans -liseli -lityum -livasi -livata -lizoez -lobici -locasi -lodosa -loekoz -lohusa -lojman -lokavt -lokman -lokumu -lololo -lombar -lomboz -longoz -lopcuk -losluk -lostra -losyon -luefer -luegat -luegol -luemen -luenet -luetfa -luetuf -luezum -lungur -lutiye -maaile -maarif -maasla -maasli -mablak -mabude -macera -macuna -macunu -madama -madara -madeni -madenî -madrup -mafevk -mafsal -magara -magaza -magdur -magfur -maglup -magmum -magrip -magrur -magsus -mahbes -mahbup -mahcup -mahcur -mahcuz -mahdum -mahdut -mahfil -mahfuz -mahiye -mahkuk -mahkûk -mahkum -mahkûm -mahlas -mahlep -mahluk -mahlul -mahlut -mahmul -mahmur -mahmut -mahmuz -mahpus -mahrec -mahrek -mahrem -mahrum -mahrut -mahser -mahsul -mahsup -mahsur -mahsus -mahzar -mahzen -mahzun -mahzur -maiset -maiyet -majoer -makale -makama -makami -makara -makasi -makber -makbul -makbuz -makina -makine -maksat -maksut -maktel -maktul -makule -makyaj -malafa -malaga -malama -maldan -maliki -malini -maliye -malkar -malkoc -mallak -maltiz -maltoz -malumu -mamasi -mamure -manaca -manali -manaya -mandal -mandar -manevi -mangal -mangan -mangir -mangiz -manici -manika -manisa -manita -manken -manset -mansip -manson -mantar -mantik -mantin -mantis -manuel -manuka -manyak -manyat -manyok -manzum -mapusa -maraba -maraza -marazi -mardin -marina -marjli -markaj -market -markiz -markka -marley -marpuc -marsik -martak -martin -martir -marulu -maruni -masaci -masala -masali -masara -masasi -masaya -maserî -masiko -maskot -maslah -maslak -maslup -masoer -masoez -masraf -masrik -masruf -mastar -master -mastor -mastur -masuka -masume -masura -matara -matbaa -matbua -matine -matkap -matlik -matlup -matrah -matrak -matris -matrus -matrut -mavera -mavili -mavisi -mavzer -mayali -mayasi -mayhos -maymun -mayocu -mayosu -maysor -maytap -mazbut -mazgal -mazhar -mazisi -maziye -mazlum -mazmun -maznun -mazruf -mealen -meblag -mebzul -mecali -mecazi -mecbur -mechul -meclis -meclup -mecmua -mecnun -mecruh -mecusi -meczup -meddah -medeni -medine -medlul -meduez -medyum -medyun -mefhum -mefluc -mefret -mefrus -mefsuh -meftun -mehmet -mehtap -mehter -meknuz -mekruh -mektep -mektup -melami -meleke -meleme -melfuf -melhuz -melike -melisa -melodi -meltem -meluel -memede -memeli -memesi -memluk -memnun -memure -memuru -menafi -mendil -menent -menfez -menfur -menhus -menisk -menkul -mensup -mensur -mentol -menzil -meraka -merasi -merbut -mercan -mercek -mergup -merhem -merhum -merkat -merkep -merkez -merkum -merkûp -mermer -mersin -mertce -mertek -meryem -mesabe -mesafe -mesaha -mesail -mesaji -mesale -mesame -mesane -mescit -mesela -mesele -mesesi -mesgul -mesher -meshet -meshur -meshut -mesime -mesire -mesken -mesket -meskûk -meskun -meskûn -meskûr -meskut -meskût -meslek -mesnet -mesrep -mesrur -mesrut -mestci -mestur -meteor -metfen -metfun -methal -metraj -metres -metrik -metris -metruk -mevali -mevcut -mevhum -mevize -mevkuf -mevkut -mevlit -mevlut -mevrut -mevsim -mevsuf -mevsuk -mevzii -mevzun -meyane -meydan -meyyal -meyyit -mezada -mezara -mezeci -mezgit -mezhep -mezkur -mezkûr -mezmur -mezuer -mezura -mibzer -mideci -midesi -midevi -mideye -mideyi -midir? -miftah -migfer -migren -mihenk -mihina -mihini -mihman -mihnet -mihrak -mihrap -mihver -mikado -mikail -mikali -miklep -mikron -mikrop -mikser -miktar -mikyas -miladi -milimi -millet -milsiz -milyar -milyon -mimari -mimoza -minare -minber -mincik -minder -mineci -mineli -minesi -mingir -minnet -minnos -minoer -mintan -minval -minyon -mirasa -mirasi -mirici -mirîci -mirmir -mirnav -misali -misdak -misin! -misin? -misina -misiri -miskal -misket -miskin -mismil -mismis -mistik -misvak -misyon -miting -mitral -mizahi -mizana -mizika -mizima -mizmiz -mizrak -mizrap -modaci -modasi -modern -moduel -moeble -moenue -molali -molasi -moment -monden -monist -monizm -monokl -monser -montaj -morali -morfem -morfin -morina -morluk -morula -moruna -moskof -mosmor -mostra -motive -motoru -motris -moymul -mozaik -mozole -muadil -mualla -muamma -muariz -muasir -muavin -mucize -muebah -muefit -muehim -muehre -muejde -muelga -muelki -muemas -muemin -muensi -muerai -muerit -muerur -muesir -muezic -muezik -muflon -mugber -muglak -muhbir -muhkem -muhlis -muhrik -muhrip -muhtac -muhtar -muhtel -muhzir -muinli -mukaar -mukoza -mukriz -mumluk -mumunu -mundar -munsap -munzam -murada -murana -murdar -musevi -mushaf -musiki -muslin -musluk -musun? -mutena -mutfak -mutlak -mutsuz -muvazi -muzlim -nadasa -nadide -nafaka -nafile -nahiye -nakavt -nakden -nakisa -nakkas -naklen -nakzen -nalbur -nalina -nalini -namaza -namazi -namdar -nameci -namert -namina -namusu -namzet -naneli -nanesi -naneye -nansuk -napalm -narcil -nardin -narenc -narina -narkoz -narval -narven -nasfet -nasip` -natika -natron -natuer -natura -navlun -naylon -nazara -nazari -nazina -nazini -nazire -naziri -nazizm -nazmen -nebati -nebbas -nebevi -nedeni -nedime -nedret -neferi -nefese -nefesi -nefret -nefrit -nehari -nekais -nekroz -nektar -neler! -nemcil -nemden -nemrut -neodim -neojen -nerede -nereli -neresi -nereye -nergis -nesebi -neseli -nesesi -neside -nesile -nesine -nesnel -nesren -nester -netice -netlik -nevale -nevmit -nevroz -nevruz -nevton -nevzat -neymis -neyzen -nezgep -nihale -nikahi -nikbet -nikbin -nikris -nikriz -nimbus -nimeti -nisane -nisani -nispet -nisyan -nitrat -nitrik -niyeti -nizami -nobran -noduel -noebet -noeron -nohudi -noksan -normal -norton -nosyon -notunu -nueans -nuefus -nuefuz -nuekte -nuekûl -nuesha -nuezul -numara -numune -nurani -nursuz -obuaci -oburca -ocakci -ocakli -ocumak -odacik -odalik -oduncu -odunlu -odunsu -odunum -oebegi -oebuer -oeclue -oedeme -oedevi -oedlek -oeduel -oeduen -oeglen -oegrek -oegren -oeguen -oeguer -oeguet -oekuez -oelcek -oelcer -oelcme -oelcue -oeldue -oeleni -oelmek -oelmez -oeluek -oeluem -oeluep -oeluer -oelues -oemrue -oemuer -oencel -oencue -oenden -oender -oeneri -oeneze -oenlem -oenlue -oensel -oepmek -oeptue -oepuep -oepues -oercin -oerdek -oereke -oergen -oergue -oermek -oernek -oerter -oertme -oertue -oeruek -oeruem -oerues -oesuer -oetede -oeteki -oetesi -oeteye -oeteyi -oetmek -oetmez -oetues -oevgue -oevmek -oevues -oeykue -oezalp -oezbek -oezdek -oezden -oezdes -oezeme -oezenc -oezene -oezeni -oezerk -oezeti -oezgue -oezlem -oezlue -oeznel -oezrue -oezsel -oezuer -oezuet -oflama -oflaya -ofsayt -oglagi -oglani -ogluna -ogullu -oguzca -ohlama -okkali -oklama -oklava -okrama -oksama -okside -oktant -oktrua -okullu -okumak -okumus -okunma -okuntu -okunus -okutma -okutur -okutus -okuyup -okuyus -olacak -olagan -olamaz -olanak -olanca -olanin -olarak -olasin -olayci -olayim -olayin -olayli -oldugu -olefin -olgucu -olivin -olmasa -olmasi -olsun! -olsuna -oltaci -oltasi -oltaya -oltayi -oluklu -olumlu -olunca -olunma -olunsa -olurdu -olursa -olusma -olusuk -olusum -omcada -omurga -omuzda -omuzlu -omzuna -onamak -onanma -onarim -onarma -onasma -onatma -onayli -onbasi -onejit -onulma -onulur -onuncu -onunki -onurlu -oosfer -opalin -operet -oracik -oradan -orakci -oranca -oranla -oranli -oranti -ordino -orducu -ordulu -orduyu -organi -orgazm -orijin -orkide -ortaci -ortada -ortagi -ortali -ortama -ortami -ortasi -ortaya -oruclu -osman! -osmani -osurma -osuruk -otagci -otamak -otarma -otarsi -otelci -otlagi -otlama -otlari -otluga -otoban -otobur -otogar -otokar -otolit -otoman -otomat -otonom -otopsi -otoray -otoyol -oturak -oturan -oturma -oturum -oturup -oturur -oturus -otuzar -ovacik -ovalik -ovasiz -ovogon -ovolit -ovulma -ovunma -oyalan -oylama -oymaci -oymali -oynama -oynaya -oysaki -oyuklu -oyulga -oyulma -oyulus -oyuncu -oyuntu -oyunun -ozalit -ozanca -ozansi -pabuca -pabucu -pacaci -pacali -pacasi -pacayi -pagoda -pahaci -pahada -pahali -pahasi -pahaya -paketi -paklar -paklik -paldim -paldir -palyos -pamugu -panama -pancar -paneli -panige -panjur -panosu -panter -panzer -papara -papaya -papaza -papazi -papura -papyon -paraca -paraci -paradi -parafe -parali -parasi -paraya -parayi -pardon -parite -parkci -parkur -parlak -parmak -parodi -parola -parsel -partal -parter -pasali -pasata -pasini -paskal -pasoer -paspal -paspas -passiz -pastal -pastav -pastel -pastil -pastis -pastra -pateni -patent -patika -patlak -patlar -patpat -patrik -patron -pavyon -paydas -paydos -payina -payini -paytak -payton -pazara -pazari -pazili -pazisi -pazval -peceli -pecete -pedali -pehpeh -pekala -pekent -pekini -pekiyi -peklik -pekmez -pektin -peleme -pelenk -pelidi -peltek -peluer -pelues -pencik -pendik -pengoe -pentan -pepeme -pepsin -pepton -percem -percin -perdah -pereme -perese -pergel -perhiz -perili -perisi -perlit -perlon -pertek -peruka -perulu -pervaz -pervin -peseta -pesine -pesini -peskes -peskir -pesrev -pestil -pesues -petegi -petrol -peydah -peynir -peyrev -peyzaj -pianta -piclik -picuta -pideci -pideli -pidesi -pijama -piknik -pikocu -pikolo -pikoya -pikrik -pilaki -pilavi -pilili -pillim -pilotu -pimini -pinari -pinhan -pinpon -pirana -pirasa -pireli -piresi -pireye -pireyi -pirina -pirinc -pirlak -pirnal -pirpir -pirpit -pirsiz -pirtik -piruhi -piryol -pisdar -pisine -piskin -pislik -pismak -pisman -pismek -pismis -piston -pistov -pitrak -piyade -piyale -piyano -piyasa -piyata -piyazi -piyore -piyrim -placka -plakci -plaket -planci -planda -planet -planli -planya -platin -plazma -plevra -podyum -pogaca -pogrom -pohpoh -police -polisi -pompaj -ponpon -ponton -poplin -porfir -porsuk -portal -portre -posali -postal -poster -postis -postlu -postum -posulu -potali -potkal -potlac -poyraz -pozsuz -pranga -pratik -presci -presto -primat -prizma -profil -prolog -promil -proses -protez -proton -psikoz -psisik -puanli -puding -puenez -pueren -pulluk -pulman -pulsuz -pusmak -pusucu -pusuda -pusula -pusuya -pusval -putrel -rabita -radika -radyan -radyum -rafine -rafizi -ragbet -ragmen -rahata -rahati -rahibe -rahman -rahmet -rahvan -rakibe -rakici -rakisi -rakkas -rantci -raporu -rapten -rasist -rasizm -rastik -rasyon -rating -ravent -raydan -rayiha -rayina -razaki -raziye -razmol -rebabi -receli -recete -recina -recine -redoks -refika -reform -refuej -regaip -reglan -rehber -rehine -rejimi -reklam -rektum -relaks -renkci -renkli -renyum -reosta -replik -repocu -resifi -resmen -ressam -retina -revani -revize -revnak -reyhan -rezede -rezene -rezerv -rezili -riayet -ricaci -ricada -rihdan -rihter -rihtim -rikkat -rintce -risale -riskli -ritmik -riyala -riyazi -rizasi -rizeli -riziko -robali -rodyum -roefle -roegar -roetar -roetus -rokfor -rokoko -rolcue -romali -romani -romans -rozbif -rueesa -ruesum -ruesup -ruesva -ruetbe -rueyet -ruhani -ruhban -ruhsal -ruhsat -ruhsuz -ruhunu -rujsuz -ruleti -rulman -rumluk -rusluk -rustai -rustik -saadet -saatci -saatli -saatte -sabaha -sabahi -sabika -sabite -sablon -sabote -sabuna -sabunu -sabura -sacina -sacini -sacmak -sacsiz -sacula -sadaka -sadece -sadede -sadist -sadizm -safari -safdil -saffet -safiha -saflik -safran -sagdan -sagdic -sagici -sagini -sagkol -saglam -saglik -sagmak -sagmal -sagucu -sagyag -sahabe -sahaca -sahane -sahasi -sahaya -sahbaz -sahibe -sahibi -sahici -sahidi -sahife -sahika -sahile -sahimi -sahken -sahlep -sahlik -sahnis -sahrem -sahsen -sahtur -sahura -sakaci -sakagi -sakala -sakali -sakasi -sakata -sakaya -sakayi -sakima -sakirt -sakizi -saklar -saklik -sakrak -saksak -sakuli -salaki -salami -salata -salgam -salgim -salgin -salise -salkim -sallak -salmak -salonu -salpak -saltci -salter -saltik -salupa -salvar -samali -samama -samani -samata -samdan -samimi -samsun -samuru -sanati -sanayi -sancak -sancma -sandal -sandel -sandik -sangir -sanina -saniye -sanmak -sansar -sansiz -sansli -sanson -santaj -santim -santra -santur -sapani -sapcik -sapigi -sapina -sapinc -sapini -sapkin -saplak -sapmak -saprak -sapsal -sapsiz -sarabi -saraka -sarali -sarayi -sarban -sarbon -sardun -sargac -sargin -sarhos -sarica -sarici -sarili -sarisi -sarkac -sarkci -sarkik -sarkil -sarkis -sarkit -sarkli -sarkma -sarkom -sarmac -sarmak -sarmal -sarman -sarmas -sarnic -sarpin -sarraf -sarsak -sarsik -sarsim -sarsis -sarsma -sartli -sasima -saskin -saslik -sasmak -sasmaz -sasmis -satici -satisa -satisi -satiya -satmak -satmaz -satmis -satrap -satsan -satvet -savaci -savana -savasi -savlet -savmak -savran -savruk -savsak -savul! -savunu -sayaci -saydam -saygin -sayica -sayici -sayili -sayimi -sayisi -saykal -saylav -saymak -sayman -sayril -sayvan -sazevi -sazkar -sazlar -sazlik -sazsiz -seamet -sebboy -sebebi -sebeke -sebnem -secaat -secere -secici -seciye -seckin -secmek -secmen -sedali -sedefi -sefaat -sefali -sefasi -seferi -seferî -seffaf -sefine -sefire -sefkat -seflik -segman -segmen -sehevi -sehidi -sehnaz -sehven -sehvet -sekans -sekant -sekban -sekene -sekeri -sekili -sekisi -sekize -seklem -seklen -sekmek -sekmen -sekoya -seksek -seksen -sekter -selale -selami -selcik -selcuk -selika -seller -semail -semavi -sembol -semere -semeri -semesi -senaat -senato -senden -sendik -senedi -senevi -seneye -sengin -senlik -sensen -sentez -sepeti -sepici -sepili -sepken -septik -serabi -seraci -serait -serapa -serare -serbaz -serbet -sercin -serdar -serden -serefe -sergen -sergil -sergin -serhat -serian -seriat -seridi -serili -seriye -serkes -sermek -serpis -serpme -serpus -sersem -sertap -serumu -servet -servis -seryum -sesbes -sescil -sesini -seslem -seslik -sesper -sessiz -sestes -sesyek -setlic -sevaba -sevici -sevinc -seviye -sevket -sevkli -sevmek -sevval -seyhin -seylan -seylap -seyler -seyran -seyrek -seytan -seyyah -seyyal -seyyar -seyyie -sezmek -sezyum -sfenks -sicaga -sicagi -sicana -sicani -sicili -sicimi -sicmak -siddet -sifahi -sifali -sifati -sifayi -sifira -sifiri -sifonu -siftah -sigala -sigara -sigiri -siglik -sigmak -sigmaz -sihhat -siilik -siirce -siirli -siirsi -sikeli -sikica -sikici -sikila -sikina -sikiya -sikkin -siklet -siklik -siklon -sikmac -sikmak -sikmek -siksan -siksik -siktir -silaci -silaha -silahi -silaya -sildir -silgec -silgic -silici -silkip -silkme -sillik -silmek -siluet -simidi -simsar -simsek -simsir -simurg -sinaat -sinama -sinara -sinava -sinavi -sincan -sincap -sincik -sinegi -sinema -sineye -singil -singin -singir -sinifi -siniri -sinizm -sinlik -sinmak -sinmek -sinsin -sinues -sinyal -sinyor -sipahi -sipasi -sipere -siperi -sipsak -sipsip -siraca -siraci -sirada -sirali -sirasi -siraya -siraze -sirdas -sirden -sirigi -sirima -sirkat -sirken -sirket -sirnak -siroko -sirpca -sirret -sirrus -sirsiz -sirtar -sirtci -sirtim -siryan -siseci -sisesi -siskin -sislik -sisman -sismek -sismik -sistem -sistit -sistli -sistol -sitesi -sitrik -sivaci -sivali -sivama -siveli -sivgin -sivisi -sivric -siyahi -siyasa -siyasi -siymek -siyrik -sizden -sizgit -sizici -sizili -sizmak -sizoit -skavut -slalom -slavca -slempe -slogan -slovak -sloven -smokin -sobaci -sobasi -sodasi -sodyum -soekel -soeker -soekme -soekue -soelen -soelom -soemiz -soener -soenme -soeven -soevme -soeyle -soezce -soezde -soezel -soezue -sofben -sofist -sofizm -sofoer -sofora -sofuca -sogana -sogani -sogdca -sogugu -soguma -sohbet -sokaga -sokmak -sokman -sokola -soksam -soksun -sokucu -sokulu -sokumu -solfej -solgun -solist -solluk -solmak -solocu -soluga -solugu -soluma -solunu -somaki -somata -somluk -soncul -sondaj -soneri -sonsal -sonsuz -sonunu -sopali -sopasi -sorguc -sorgun -sorma! -sormak -sormuk -sorolo -sorulu -soruma -sorunu -sosluk -sosyal -sotesi -sovhoz -sovmen -sovyet -soyadi -soydas -soydur -soygun -soymak -soymuk -soysal -soysuz -soyucu -spazmi -sperma -spiker -spiral -spiril -sporcu -spotcu -spreyi -sprint -stabil -stadya -starta -statik -stator -statue -stepne -steril -sterol -stoaci -stokcu -stopaj -stoper -storlu -sualli -subasi -subayi -subesi -subret -sucsuz -sucunu -suebek -suebut -suebye -suecut -suefli -suekse -suekûn -suekut -suekût -sueluk -suemek -suemen -suemer -suemme -suemul -suenme -suenni -sueper -suephe -suerat -suerec -suerek -suerer -suerfe -suerme -suerre -suerue -suerur -suesen -suesme -suetre -suetue -suetun -sueven -sueyek -sueyuu -suezek -suezme -suhluk -suizan -sulama -sulari -sulhcu -sultan -sumbas -sumsuk -sundan -sungur -sunlar -sunmak -sunucu -supabi -supara -suples -surada -surali -surasi -surata -surati -sureta -sureti -sursak -surubu -susama -suskun -susmak -suspus -sutasi -sutyen -suurlu -suyolu -suyuna -suyunu -suzeni -tabaat -tabagi -tabaka -tabana -tabani -tabela -tabiat -tabibi -tabiri -tablet -tabure -taburu -tacsiz -tadada -tadina -tadini -taflan -tafsil -tafura -tagsis -tagyir -tahdit -tahfif -tahini -tahinî -tahkik -tahkim -tahkir -tahlif -tahlil -tahlis -tahmil -tahmin -tahmis -tahnit -tahrif -tahrik -tahril -tahrip -tahrir -tahris -tahsil -tahsis -tahvil -takaci -takati -takaza -takbih -takdim -takdir -takdis -takibe -takili -takimi -takiye -taklip -taklit -takmak -takozu -takrip -takrir -takriz -taksim -taksir -taksit -taktik -taktir -takvim -takyit -talebe -talibi -talihi -talika -talkim -talkin -taltif -talyum -tamami -tambur -tamina -tamire -tamlik -tampon -tamtam -tandem -tandir -tanede -taneli -tangir -tanigi -tanima -taniti -tankci -tanker -tannan -tansik -tantal -tanzim -tanzir -taoizm -tapali -tapmak -tapucu -tapulu -taraba -taraca -tarafa -tarafi -taragi -tarali -tarama -tarcin -tarhun -tarife -tarihe -tarihi -tarihî -tarpan -tarsin -tarsus -tartak -tartar -tartil -tartim -tartis -tartma -tasali -tasari -tasasi -tascil -tasdik -tasgir -tashih -tasima -tasiri -tasiti -tasizm -taskin -taslak -taslar -taslik -tasmak -tasmim -tasnif -tasrif -tasrih -tassiz -tastan -tastir -tasvip -tasvir -tatari -tatbik -tatile -tatili -tatmak -tatmin -tatsal -tatsiz -tatula -tavana -tavasi -tavina -tavini -tavsan -tavsif -tavsiz -tavugu -tavzif -tavzih -taydas -tayfun -tayini -taylak -tayyar -tazece -tazici -taziya -taziye -tazmin -tazyik -teakup -tearuz -tebcil -tebdil -teblig -tebrik -tebsir -tebyiz -tecdit -techil -techiz -tecrit -tecvit -tecviz -tedavi -tedbir -tedfin -tedhis -tediye -tedric -tedris -tedvin -tedvir -teenni -tefcir -tefeci -tefeli -tefhim -tefrik -tefris -tefrit -tefsir -teftih -teftis -tefviz -tegmen -tehcir -tehdit -tehyic -tehzil -tekapu -tekbir -tekdir -tekere -tekeri -tekfin -tekfir -tekfur -tekila -teklif -teklik -tekmil -teknik -tekrar -tekrir -teksif -teksir -tektas -tekvin -tekzip -telafi -telaki -telaro -telasa -telase -telcik -telden -teleke -teleks -teleme -telfin -telhis -teline -telkih -telkin -tellak -tellal -teller -telmih -telsiz -teltik -telvis -temadi -temasa -temasi -tembel -tembih -tembul -temcit -temdit -temeli -temhir -temize -temkin -temlik -temmuz -temren -temrin -temsil -temyiz -tender -tendon -teneke -tenisi -tenkil -tenkis -tenkit -tensel -tensik -tensil -tensip -tenvir -tenzih -tenzil -teolog -teorem -teorik -tepede -tepeli -tepesi -tephir -tepkin -tepmek -tepmez -teptim -terane -terapi -teravi -terazi -tercan -tercih -terdit -tereci -tereke -teresi -terfih -terfik -tergal -terhin -terhis -terini -terkin -terkip -terler -terlik -termal -termik -termin -termit -termos -teroer -tersim -tersin -tertip -tervic -terzil -tesbih -tescil -tesdis -tesdit -teshil -teshin -teshir -teshis -teskil -teskin -teslim -teslis -tesmil -tespih -tespit -tesrif -tesrih -tesrii -tesrik -tesrin -testis -tesvik -tesvis -tesvit -tetige -tetkik -tevabi -tevali -tevazu -tevbih -tevcih -tevfik -tevhit -tevkif -tevkil -tevlit -tevrat -tevsih -tevsik -teyeli -tezada -tezene -tezgah -tezhip -tezlik -tezvir -tezyif -tezyin -tezyit -tibben -ticani -ticari -ticarî -tiftik -tifues -tigala -tiglik -tikaci -tikali -tikama -tikina -tikiri -tiklim -tikmak -tiknaz -tilmiz -tilsim -timari -timbal -timsah -timsal -timues -tingir -tinmak -tinmaz -tinnet -tinsel -tintin -tipali -tipili -tipina -tipocu -tirasa -tirasi -tirfil -tirhos -tiridi -tirink -tirisa -tirkaz -tirlin -tirmik -tirnak -tiroit -tirpan -tirsma -tirtik -tirtil -tirtir -tiryak -titrek -titrem -tiynet -toerel -toeren -toevbe -toezel -togolu -tohuma -tohumu -tokadi -tokali -tokluk -tokmak -toksin -tombak -tombaz -tombik -tombul -tomruk -tonluk -tonsuz -tonton -topbas -toplac -toplam -toplum -toprak -topsuz -toptan -topugu -topunu -torero -torlak -torluk -tornet -torpil -tortop -tortul -toryum -tostcu -toyaka -toydan -toygar -toyluk -toynak -tozdan -tozluk -tozmak -tozuma -tozunu -trafik -trahom -trajik -trakit -trampa -tranca -transa -trapez -travma -trisin -triton -triyas -troest -tropik -troyka -tuefek -tueker -tuelue -tuemce -tuemel -tuemen -tuemey -tuenek -tuenel -tuenme -tuepue -tuerap -tuerbe -tuerel -tuerev -tuerki -tuerue -tuetme -tuevit -tueyme -tueyue -tuezel -tufani -tugbay -tugrik -tugrul -tugyan -tuhafi -tulani -tuluat -tulumu -tulyum -tumagi -tumsuk -tundan -tundra -tungur -tunguz -turani -turgay -turgor -turist -turizm -turpun -turunc -tutcek -tutkal -tutkun -tutmac -tutmak -tutmaz -tutmus -tutsak -tutsat -tutucu -tutulu -tutuya -tuvaca -tuzaga -tuzagi -tuzcul -tuzlak -tuzluk -tuzsuz -tuzunu -ucacak -ucubik -ucunda -ucuran -ucurma -ucurum -ucusma -ucuyla -ucuzca -ucuzcu -uecgen -uecler -ueclue -uecret -uectas -uecten -uecuez -uedeba -ueflec -uelfet -uelger -uelker -uelkue -uelser -uemide -uemidi -uemmet -uemran -uemuek -uendes -uenite -uenlem -uenlue -uereme -ueremi -uerkek -uerkme -uerkue -ueruen -ueruer -ueryan -uesenc -uesera -ueslue -ueslup -uesmek -uessue -uestat -uestel -uestte -uestue -uetmek -ueyesi -uezere -uezeri -uezgue -uezmek -uezuem -ufacik -ufakca -ufakli -ufalma -ufarak -ufkunu -uflama -ufuklu -ufunet -ugragi -ugrama -ugrasi -ugruna -ugrusu -ugultu -ugunma -ugurlu -uhrevi -ukubet -ulacli -ulahca -ulamak -ulanma -ulanti -ulasim -ulasma -ululuk -ulumak -ulusal -uluscu -uluslu -ulutma -umulma -umutlu -unlama -unutma -unutur -upuslu -upuzun -uragan -urbali -urduca -urodel -usagin -usakli -usanma -usanti -uskuru -ustaca -ustasi -ustayi -ustunc -ustura -usulca -usulue -utanir -utanis -utanma -utarit -uterus -utkulu -utulma -uyakli -uyanik -uyanis -uyanma -uyaran -uyarci -uyarim -uyaris -uyarli -uyarma -uyarti -uykucu -uykuda -uykulu -uykusu -uykuya -uymaca -uymaci -uyulma -uyumak -uyumaz -uyumlu -uyumus -uyunma -uyuntu -uyusma -uyusuk -uyusum -uyutma -uyuyan -uyuyus -uyuzlu -uzakca -uzamak -uzamaz -uzanim -uzanis -uzanma -uzanti -uzatim -uzatir -uzatis -uzatma -uzayli -uzlasi -uzlugu -uzmani -uzunca -vaatte -vadeli -vadesi -vadiye -vaftiz -vagonu -vahdet -vahset -vajina -vaketa -vakvak -valide -valoer -vampir -vanasi -vandal -vantuz -vapuru -varaka -vardir -vargel -varide -varken -varlik -varmak -varmaz -varmis -varsil -varsin -varyos -vasati -vasita -vatani -vatlik -vatman -vatvat -vazife -vebali -vebasi -vecibe -vecize -vefali -vekili -venues -verdik -verese -verici -verile -verimi -verkac -vermek -vermez -vermut -vernik -versin -vesaik -vesair -vesait -vesika -vesile -veston -vetire -vicahi -vicdan -vidala -vidali -vidolu -vidoyu -vikaye -vikont -viladi -vinter -vinyet -virane -virman -virues -viskoz -visnap -vitese -vitray -vitrin -viyana -viyola -vizite -vizoer -vizviz -vizyon -vodvil -vohozu -volkan -voltaj -vombat -vualet -vuecut -vuerut -vuesat -vukuat -vurana -vurgun -vurmak -vurtut -vurucu -vurusu -vuslat -yabana -yabani -yadini -yaglik -yagmak -yagmis -yagmur -yagrin -yagsiz -yahudi -yakali -yakana -yakari -yakasi -yakayi -yakaza -yakici -yakila -yakisi -yakiti -yakmac -yakmak -yalagi -yalaka -yalama -yalana -yalani -yalcin -yaldiz -yalgin -yalimi -yalinc -yallah -yalman -yalniz -yalova -yalpak -yalpik -yaltak -yalvac -yalvar -yamaci -yamagi -yamali -yamama -yaman! -yaman? -yamyam -yamyas -yanaga -yandan -yandas -yandik -yangin -yanigi -yanima -yanina -yanini -yanlik -yanlis -yanmak -yanmaz -yanmis -yansak -yansiz -yapagi -yapboz -yapici -yapili -yapisi -yapma! -yapmak -yaprak -yapsat -yaptin -yarali -yarama -yarari -yarasa -yarasi -yarati -yaraya -yarayi -yarbay -yardak -yardan -yarden -yardim -yargic -yarici -yarida -yarigi -yarina -yarisa -yarisi -yariya -yarlik -yarmak -yarmaz -yarpuz -yasagi -yasali -yasama -yasami -yasasi -yasina -yasini -yasken -yaslik -yasmak -yasmik -yastik -yataga -yatagi -yatili -yatisi -yatkin -yatmak -yatsin -yavas! -yavasa -yavsak -yavsan -yaydan -yaygin -yayili -yayimi -yayini -yaylak -yaylim -yaymak -yayvan -yazari -yazboz -yazici -yazila -yazili -yazini -yazisi -yaziya -yaziyi -yazlik -yazmak -yazman -yedege -yedigi -yedili -yedmek -yegane -yegdir -yeglik -yegrek -yekine -yeksan -yekten -yelegi -yeleli -yeleme -yelken -yeller -yellim -yelloz -yelmek -yelpik -yeltek -yemegi -yemeni -yemeye -yemini -yemisi -yemlik -yenene -yengec -yengen -yenice -yenici -yenigi -yenisi -yeniye -yenmek -yenmez -yensiz -yerden -yerici -yerine -yerini -yerken -yermek -yersel -yersiz -yesili -yeteri -yetimi -yetis! -yetkin -yetmek -yetmez -yetmis -yezidi -yiddis -yigide -yigidi -yigili -yigmak -yikama -yikici -yikkin -yikmak -yilana -yilani -yilbik -yildan -yildir -yildiz -yilgin -yilina -yillar -yillik -yilmak -yilmaz -yiprak -yirtik -yirtim -yirtis -yirtma -yitimi -yitmek -yiyici -yiyisi -yogrum -yogurt -yokluk -yokmus -yoksul -yoksun -yoksuz -yoktan -yoktur -yokusa -yokusu -yoldan -yoldas -yolluk -yolmak -yolsuz -yoluna -yolunu -yomsuz -yongar -yonmak -yontma -yontuk -yordam -yorgan -yorgun -yormak -yortma -yorucu -yosunu -yozgat -yozluk -yuekte -yuekue -yuenue -yuerek -yuerue -yuezde -yuezer -yuezey -yuezme -yuezue -yuhaya -yukari -yulafi -yulari -yumagi -yummak -yumruk -yumulu -yunlus -yunmak -yunmus -yurlar -yutmak -yutmus -yutumu -yuvali -yuvari -yuvasi -yuvaya -yuvayi -zabita -zafran -zagara -zagsiz -zahire -zahiri -zahirî -zahmet -zahter -zakkum -zamana -zamane -zamani -zambak -zambur -zamiri -zamkli -zamsiz -zanaat -zangir -zangoc -zarara -zarari -zarfci -zarfli -zarini -zaruri -zaviye -zayiat -zayice -zeamet -zebani -zebunu -zecren -zedeli -zehaba -zekali -zekice -zelber -zembil -zemzem -zengin -zeplin -zerrin -zevale -zevali -zevalî -zevkli -zevzek -zeybek -zeyrek -zeytin -zibidi -zifafa -zifiri -zifirî -ziftin -zihnen -zihsiz -zikkim -zikzak -zilgit -zillet -zilsiz -zilyet -zimmet -zimnen -zincir -zindan -zindik -zingil -zingir -zinhar -zipkin -zipzip -ziraat -zirhli -zirkon -zirlak -zirnik -zirzop -zitlik -zivana -ziyade -ziyali -ziyani -ziynet -ziypak -zodyak -zokayi -zoolog -zoraki -zordur -zorluk -zoruna -zuebde -zuehal -zuehre -zuehul -zuekam -zuelal -zuemre -zueppe -zuerra -zueyuf -zuhuri -zulmet -zuluem -abakues -abaliya -abanmak -abartik -abartis -abartma -abazaca -abdalin -abdesti -abeslik -abhazca -abidevi -ablakca -ablalik -ablatif -ablatya -ablavut -abonman -aborjin -abramak -absorbe -absuert -abuhava -abukluk -abusluk -acacagi -acarlar -acarlik -aceleci -acelesi -aceleye -acemice -acigini -acikara -aciklar -aciklik -acikmak -acikmam -acikmis -aciktan -acilama -acilmak -acimaz? -acindan -acinmak -acisina -acisini -acitmak -aciyici -acizane -acizlik -ackisiz -acmalik -acmamak -actiris -actirma -adaklik -adaksiz -adaleli -adalete -adamcik -adamcil -adamdan -adamina -adamini -adamlik -adamotu -adamsiz -adanali -adanmak -adaslik -adatmak -adaylik -adcilik -addetme -adezyon -adilane -adillik -adimina -adimini -adimlik -adisyon -adlanma -adlasma -aerobik -aferist -affedis -affetme -afganli -aforizm -afsuncu -afsunlu -afyonlu -agababa -agabeyi -agaccik -agaclik -agacsil -agacsiz -agactan -agarmak -agartir -agartma -agbenek -agcilik -agdalik -agdirma -agilama -aginmak -agirdan -agirdir -agirina -agirlar -agirlik -agirsak -agirtop -agitato -agitsal -agizcil -agizdan -agizlik -agizotu -agizsil -agizsiz -aglamak -aglamaz -aglamsi -aglanma -aglanti -aglarsa -aglasma -aglatan -aglatir -aglatis -aglatma -aglayan -aglayip -aglayis -agnamak -agnamci -agreman -agresif -agrimak -agrimaz -agrisin -agrisiz -agritir -agritma -agriyis -agulama -agustos -agzinda -agzinin -agziyla -ahbapca -ahdetme -ahenkli -ahirdas -ahireti -ahirini -ahlakca -ahlakci -ahlaken -ahlakli -ahlamak -ahlatin -ahlayis -ahmakca -ahmetli -ahtapot -ahududu -ahzetme -aidiyet -ailecek -ailelik -ailesiz -ajanlik -akademi -akamber -akamete -akarina -akarlar -akbakla -akbalik -akbasma -akcasal -akciger -akdeniz -akdetme -akdiken -akdogan -akidesi -akideyi -akilane -akildan -akilini -akillim -akilsal -akilsiz -akiskan -akismak -akismaz -akissiz -akitmak -akkavak -akkefal -aklamak -aklanma -aklasma -aklatma -aklimda -aklinca -aklinda -aklinin -aklinla -akliyat -akortcu -akortlu -akpelin -akrilik -akrobat -akronim -akropol -aksakal -aksamak -aksamci -aksamin -aksamki -aksamli -aksaray -aksatis -aksatma -aksayis -aksedir -aksedis -aksetme -aksilik -aksirik -aksiris -aksirma -aksiyom -aksiyon -aksogan -aktarim -aktaris -aktarma -aktinit -aktoere -aktueel -aktueer -aktutma -akustik -akvarel -akyuvar -alabora -alabros -alacagi -alacali -alacasi -alakali -alakart -alakayi -alalama -alamana -alameti -alarmak -alasagi -alasimi -alavere -albasma -albasti -albinos -alcacik -alcakca -alcalis -alcalma -alcalti -alcarak -alcipan -aldanis -aldanma -aldatir -aldatis -aldatma -aldehit -aldiris -aldirma -alegori -alelade -alemdar -alemine -alengir -alerjen -alerjik -alevsiz -aleyhte -alfenit -alicisi -aliklik -alimane -alimlik -alimsiz -alingan -alinlik -alinmak -alinmaz -alirlik -aliskan -aliskin -alismak -alismis -alkalik -alkarna -alkisci -alkolik -allamak -allanma -allasma -allegro -almadan -almamak -almanak -almanca -almanci -almasik -almasli -almayan -almazsa -alninda -alninin -alogami -alperen -altayca -altidan -altigen -altilik -altinci -altinda -altinin -altinsi -altipas -altisar -altlama -altligi -altuest -altyapi -aluefte -aluemin -alyuvar -amabile -amacsiz -amalgam -amansiz -amatoer -ambalaj -ambarci -ambarda -ambargo -amberbu -amcalik -amcamla -amelesi -ameliye -amentue -amerika -ametist -amfibik -amfibol -amfizem -amipler -amirane -amirlik -amiyane -amniyon -amonyak -amonyum -ampirik -anaclik -anadolu -anafora -anagram -anahtar -analist -analizi -analoji -anamnez -ananeci -ananevi -anapara -anarsik -anartri -anasina -anasini -anasonu -anatomi -anayasa -ancueez -andante -andaval -andezit -andirin -andiris -andirma -anekdot -aneroit -angarya -angutca -aniklik -anilmak -anilmaz -animato -animizm -anirmak -anirtma -anitsal -anitsiz -anizlik -anketci -ankiloz -anlakli -anlamak -anlamaz -anlamca -anlamda -anlamli -anlasik -anlasin -anlasma -anlatim -anlatis -anlatma -anlayan -anlayip -anlayis -anlikci -anmalik -annelik -anomali -anormal -ansambl -ansimak -ansizin -antalya -antenli -anterit -antetli -antidot -antijen -antikor -antilop -antimon -antitez -antrakt -antrepo -anzarot -apandis -apansiz -aparkat -aparmak -aparsin -apartma -apaslik -apaydin -apislik -apismak -apokrif -apraksi -apresiz -aprilin -apriori -aptalca -arabaci -arabali -arabasi -arabaya -arabesk -arabist -aracisi -aracsal -aracsiz -arakiye -aralama -aralari -araligi -aramice -aranmak -araplik -ararken -arasina -arasini -aratmak -arayici -arayuez -arazbar -arazisi -araziye -arazoez -arbalet -ardahan -ardanuc -ardicin -ardilma -ardinca -ardinda -ardisik -arduvaz -argonot -argosuz -arifane -arifeyi -ariklik -arilama -arilari -arindan -arinmak -arinmis -aritici -aritmak -aritmik -arizali -arkadan -arkadas -arkaizm -arkalic -arkalik -arkasiz -arkegon -arketip -arlanir -arlanma -arlilik -armador -armagan -armasiz -armatur -armonik -armudun -armutsu -arnavut -aromali -arpacik -arpadan -arpagan -arpalik -arpamsi -arsenik -arsiala -arsivci -arsizca -arsizin -artagan -arterit -artimli -artirim -artirir -artiris -artirma -arziyat -arzuhal -arzusuz -asabina -asabiye -asagili -asamali -asamble -asarcik -ascilik -aseptik -asermek -asikane -asikare -asiklik -asiktas -asiktir -asilama -asildir -asillik -asilmak -asilmaz -asilsiz -asimile -asinmak -asinmaz -asirici -asirlik -asirmak -asirtma -asistan -askarit -askerce -askerci -askilik -askinti -askisiz -aslanca -aslanin -aslansi -aslinda -asmalik -asmolen -asonans -asortik -asosyal -aspirin -asrilik -astarli -astarya -astasim -astatin -astimli -astirma -asuefte -ataklik -atanmak -atanmis -atarlar -atasesi -atavizm -atcilik -aterina -atesbaz -atesine -atesini -ateskes -atesler -ateslik -atessiz -atesten -atfetme -atiklik -atilgan -atilmak -atilmaz -atimlik -atismak -atlamak -atlanma -atlatis -atlatma -atlayis -atletik -atmamak -atoelye -atropin -attirir -attiris -attirma -avlamak -avlanir -avradim -avratta -avucuma -avucuna -avutmak -ayagina -ayagini -ayaklar -ayaktan -ayarini -ayibini -ayirmak -azindan -azitmak -babacan -babacik -babacil -babacko -babadan -babaevi -babalik -babamin -babanin -babasiz -babiali -babilik -bacadan -bacakli -bacanak -bacasiz -bacilik -bademci -bademli -bademsi -baderna -bagdadi -bagdama -bagetli -bagimli -baginti -bagirip -bagiris -bagirma -bagirti -bagisci -bagisik -bagitci -bagitli -baglama -bagrina -bagrini -bagrisa -bahadir -baharat -baharci -baharin -baharli -bahceci -bahceli -bahcesi -bahisci -bahname -bahriye -bahtina -bahtsiz -bahusus -bakalim -bakalit -bakamaz -bakanak -bakarak -bakilik -bakilir -bakilma -bakimci -bakimli -bakindi -bakinis -bakinma -bakinti -bakirci -bakirli -bakirsi -bakisim -bakisli -bakisma -bakkala -baklali -baklasi -baklava -baklayi -bakmali -bakmaya -bakteri -baktigi -balaban -balalik -baldiri -balerin -balhane -baligin -balikci -balikli -balkima -ballama -baloncu -balotaj -balsira -baltaci -baltali -baltasi -baltaya -baltayi -baltrap -bandana -bandira -bandocu -bandrol -bankaci -bankasi -bankaya -banknot -banlama -banttan -banyolu -banyosu -baptist -barajli -barbasi -barbata -bardagi -barfiks -barhana -barikat -barinak -barinis -barinma -barisci -barisik -barisma -baritin -baritli -bariton -bariyer -barksiz -barokcu -barsama -barutcu -barutla -basagac -basakci -basakli -basalti -basamak -basarim -basaris -basarma -basarna -basbayi -baseser -baseski -basibos -basilis -basilma -basimam -basimci -basimla -basinci -basinda -basinin -basiret -basitce -baskaca -baskale -baskani -baskasi -baskent -baskici -baskida -baskili -baskina -baskini -baskisi -baskuel -baskurt -baslama -baslica -basligi -basmaci -basmali -basmasi -bastana -bastigi -bastika -basurlu -basvuru -basyazi -batakci -batakli -batarya -batirik -batirip -batirir -batiris -batirma -batkiya -batmasi -battigi -bavlima -bavulcu -bavullu -bayatsi -bayburt -bayilik -bayilis -bayilma -bayirda -baykusu -bayragi -bayrama -bayrami -bazasiz -bazitli -bazlama -bazofil -bebecik -bebekce -becayis -becerme -bedahet -bedbaht -bedelci -bedelli -bedence -bedenci -bedenen -bedirik -begayet -begence -begenir -begenis -begenme -begonya -bekaret -bekarin -bekcisi -bekinis -bekinme -bekitme -bekleme -bektasi -beladan -belagat -belahet -belalar -belasiz -belemek -belemir -belenme -belerme -belesci -beletme -belgeci -belgeli -belgesi -belgili -belinde -belirgi -beliris -belirli -belirme -belirti -belkili -belleme -benekli -benimki -benizli -benligi -benmari -benzeme -benzeri -benzeti -benzeye -benzine -beraber -berbere -berberi -bereket -berhane -berhava -beriden -berkime -berklik -bermuda -bertmek -besalet -besamel -besaret -beserek -beserli -besikci -besikte -besinci -besinli -besizli -besleme -beslisi -besmele -besteci -besteli -beterin -betimci -betisiz -betoncu -betonsu -bevliye -beyaban -beyagac -beyanat -beyazin -beyazli -beybaba -beygiri -beyhude -beyinli -beyinsi -beyitli -beyligi -beynine -beynini -beyyine -beyzade -beyzbol -bezekci -bezekli -bezelye -bezemek -bezenis -bezenme -bezetme -bezeyis -bezilme -bezleme -bezleri -bibehre -biberli -biberon -bibersi -bibilik -bicakci -bicakli -bicenek -bicilis -bicilme -bicimce -bicimci -bicimli -bickici -bickisi -bicmeli -bidayet -bidoncu -bihaber -bikarar -bikilir -bikilma -bikisma -bilader -bilakis -bilanco -bilardo -bildiri -bilecen -bilecik -bilekli -bilemek -bilenin -bilenme -bilerek -bilesen -bilesik -bilesim -bileske -bilesme -biletci -biletli -biletme -bileyim -bilezik -bilfarz -bilfiil -bilgece -bilgici -bilgili -bilgini -bilgisi -bilimci -bilinen -bilinir -bilinme -biliriz -bilisim -bilisiz -bilisme -biliyor -bilkima -billahi -billuri -bilmece -bilumum -bilyeli -binbasi -bindigi -binenin -binerse -bingoel -binilme -binince -bininci -binisme -binmeli -biperva -birader -birakim -birakip -birakir -birakis -birakit -birakma -biralik -birbiri -bircogu -birebir -birecik -biresim -bireyci -biricik -birikim -birikis -birikme -birinci -birinde -birinin -biriyle -birkaci -birleme -birligi -bisturi -bitaraf -bitelge -bitimli -bitirim -bitiris -bitirme -bitisik -bitisis -bitisme -bitkici -bitkisi -bitleri -bitmisi -bittabi -biyesiz -biyikli -biyogaz -biyolog -biyonik -biyopsi -biyotit -biyotop -bizimki -bizleme -blender -bloknot -bloksuz -bobinaj -boebrek -boebuer -boecegi -boecuel -boeguer -boelmec -boelmek -boeluek -boeluem -boelues -boeluet -boeregi -boerkue -boertme -boertue -bogalik -boganak -bogasak -bogazli -bogmaca -bogulma -bogulus -bogumlu -boguntu -bogunuk -bogusma -bohcaci -bohcasi -boklama -bokluga -boksoer -bokunda -bokuyla -bolalma -bolamat -bolarma -bombaci -bombasi -bombeli -boncuga -boncugu -bonfile -bonkoer -bopstil -borasit -borazan -borclar -borcsuz -borctan -borctur -borcunu -bordada -bordaya -borduer -borikli -bornova -borsaci -borsasi -borusuz -bosalim -bosalis -bosalma -bosalti -bosamak -bosanis -bosanma -bosatma -boslama -boslugu -bostana -botanik -bovling -boyabat -boyalar -boyamak -boyanis -boyanma -boyasiz -boyatis -boyatma -boyayis -boylama -boylami -boyluca -boynuna -boynunu -boynuzu -boyunca -boyunlu -boyunun -boyutlu -bozalik -bozarik -bozaris -bozarma -bozguna -bozkiri -bozkurt -bozlama -bozmaci -bozukca -bozuldu -bozulma -bozulur -bozulus -bozumca -bozumsu -bozunma -bozuntu -bozunum -bozusma -bozusuk -bozyazi -brahman -brifing -brizbiz -brokoli -bromuer -bronsit -brosuer -bucakli -bucakta -bucuklu -budakli -budamak -budanis -budanma -budatma -budayis -buecuer -buecues -buefeci -buegeme -bueglue -buegrue -buehtan -buekmek -buekuec -buekuek -buekuem -buekuen -buekues -buelten -bueluga -buergue -buerosu -bueruek -bueruem -bueruen -buetuen -bueyuek -bueyuer -buezgen -buezgue -buezmek -buezuek -bugdayi -buguene -buguevi -buharli -buhrana -buhrani -bukanak -bukleli -bulamac -bulamak -bulamaz -bulanik -bulanis -bulanma -bulanti -bulasik -bulasma -bulatma -bulgari -bulmaca -bulunak -bulunan -bulunca -bulunma -buluntu -bulunur -bulunus -bulusma -bulutlu -bulutsu -bumlama -bunakca -bunalim -bunalis -bunalma -bunalti -bunamak -bunayis -bununla -buradan -buragan -burclar -burcuma -burgata -burgulu -burjuva -burkmak -burkucu -burlesk -burnuna -burnunu -bursali -burssuz -burtlak -burukca -buruksu -burulma -burunlu -buruntu -burusma -burusuk -buselik -butafor -butikci -buutsuz -buyrugu -buyuran -buyurma -buyurun -buzhane -buzullu -cabadan -cabasiz -cabucak -cabukca -cacalik -cacaron -cadaloz -caddeyi -cadilik -cadirci -cadirli -caganak -caganoz -cagilti -cagirim -cagirir -cagiris -cagirma -cagirti -caglama -cagrici -cagrili -cagrisa -cahilce -cakaloz -cakasiz -cakilip -cakilis -cakilli -cakilma -cakilti -cakinti -cakirci -cakisik -cakisiz -cakisma -cakmaci -calacak -calarma -calcene -calgici -calgili -calilik -calimci -calimli -calinis -calinma -calinti -calisim -calisip -calisiz -calisma -calkagi -calkama -calmaci -calpara -calsin! -calyaka -camadan -camasir -cambazi -camekan -camgoez -camiasi -caminin -camlama -camoluk -camurlu -canakci -canaksi -canavar -canfeza -canilik -canimin -caninin -cankiri -canlari -canlici -canlisi -cantaci -cantada -cantali -cantasi -capacul -capakli -capariz -capasiz -capkima -capkini -caplama -capraza -caprazi -capulcu -cardaga -caresiz -carevic -carikci -carikli -carkaci -carkina -carksiz -carlama -carmiha -carpici -carpili -carpmak -carsafa -carsafi -carsida -carsili -carsisi -cartayi -cartlak -catalca -catalli -catapat -catilis -catilma -catinma -catirti -catisik -catisiz -catiski -catisma -catkili -catlama -catlasa -catmaci -cavalye -cavlagi -cavlama -caycuma -cayhane -cayirda -cayirli -cayirti -caykara -cazbant -cazirti -ceberut -cebinde -cebrail -cebriye -cecence -ceddine -cefakar -cefakes -cehalet -cehrece -cehreli -cehresi -cekberi -cekecek -cekelez -cekemez -cekerek -ceketli -cekikce -cekilir -cekilis -cekilme -cekimci -cekimli -cekince -cekinik -cekinis -cekinme -cekinti -cekirge -cekisli -cekisme -cekiste -cekiver -cekmece -cekmeli -cekmeye -cektigi -cektiri -celadet -celalli -celikli -celiksi -celimli -celisik -celiski -celisme -celmece -celseyi -cemaate -cemadat -cembalo -cemberi -cembiye -cemenli -cemetme -cemiyet -cemreme -cenabet -cendere -cenebaz -cenekli -cenesiz -cenetli -cengele -cennete -cenneti -centmek -cenuplu -cepelli -ceperli -cephane -cepheli -cepheye -cepleme -cerahat -cerbeze -cerceve -cereyan -cerezci -cergeci -cergici -cerrahi -cesamet -cesaret -cesitli -cesmeye -cesnici -cesnili -cesurca -cetince -cetveli -cevaben -cevahir -cevapli -cevelan -cevheri -cevikce -cevirge -cevirgi -cevirim -cevirir -ceviris -cevirme -cevizli -cevreci -cevresi -cevrili -ceyizci -ceyizli -cezaevi -cezasiz -cezayir -cezbeli -cezbeye -cezerye -cezvesi -cibanin -cicekci -cicekle -cicekli -ciceksi -cidalci -ciddiye -cifteli -ciftlik -cigdemi -cigerci -cigerim -cigilti -cigiris -cigirma -cigirti -cigitli -cigliga -cigneme -cikacak -cikaran -cikarci -cikarim -cikarir -cikaris -cikarma -cikarsa -cikarti -cikikci -cikilir -cikilma -cikinca -cikinti -cikisli -cikisma -cikmali -cikmaza -cikrigi -ciksin! -ciktigi -ciktisi -cilasiz -cilasun -cilbent -cildiye -cileden -cilekci -cilekes -cilekli -cileksi -cilemek -cilenti -cilgina -cilkava -cilklik -ciltevi -ciltlik -ciltsiz -cilveli -cimbali -cimcime -cimenli -cimento -cimleme -cimrice -cinakop -cinarli -cinasli -cinayaz -cinayet -cingene -cingoez -cinisiz -cinlama -cinleri -cinsaci -cinslik -cinyolu -cipilti -cirakma -ciralik -ciramoz -ciranta -cirasiz -cirboga -cirilti -cirisci -cirisli -ciritci -cirkefe -cirlama -cirpici -cirpida -cirpiya -cirpmak -cirtlak -cisemek -cisenti -cismani -cismini -citilme -citirti -citlama -citleme -civadan -civadra -civelek -civilti -civimak -civisiz -civitli -civitma -ciyirti -ciyleme -cizecek -cizelge -cizgara -cizgili -cizgisi -cizikli -cizilis -cizilme -cizilti -cizimci -cizinti -cizirti -cizlama -cizlami -cizmeci -cizmeli -cobanin -cocugun -cocukca -cocukcu -cocukla -cocuklu -cocuksu -coegmek -coeguer -coekmek -coekuek -coekuem -coekues -coemert -coemlek -coemmek -coepcue -coeplue -coepten -coerdek -coeregi -coerkue -coerten -coertue -coezgue -coezmek -coezuek -coezuem -coezues -cogalis -cogalma -cografi -cogulcu -coklari -coklugu -coksama -coluklu -coplama -corapci -corbaci -corbada -corbasi -corbaya -corbayi -corumlu -coskulu -cosumcu -cosuntu -cotanak -cubukcu -cubuklu -cuecesi -cuecuek -cuehela -cuekuer -cuenkue -cuenuep -cueruek -cueruem -cueruer -cuezdan -cuezzam -cuhadar -cuhasiz -cukkayi -cukurca -cukurda -cukurlu -cullama -cullugu -cumbali -cuntaci -curcuna -curnata -cuvalci -cuvalla -cuvalli -cuvasca -dadaist -dadaizm -dadanan -dadanis -dadanma -dadilik -dagbasi -dagdaga -dagilim -dagilis -dagilma -daginik -daginti -dagitik -dagitim -dagitis -dagitma -daglagi -daglama -daglara -daglari -dahilen -dahilik -daireli -dairesi -dairevi -daktilo -dalalet -dalamak -dalanci -dalanis -dalanma -dalasma -dalayis -dalgaci -dalgali -dalgasi -dalgaya -dalgayi -dalinin -dallama -dallari -daluyku -damakli -damaksi -damarda -damarli -damasko -damgaci -damgali -damgasi -damitik -damitim -damitis -damitma -damlama -damlaya -danalar -dananin -dandini -danisan -danisik -daniska -danisma -dansoer -dansoez -danssiz -daraban -daracik -daralis -daralma -daralti -darasiz -darbeci -darbesi -darbuka -darilma -darliga -darligi -davacin -davalik -davetci -davetli -davulcu -davulun -dayakli -dayamak -dayamis -dayanak -dayanim -dayanis -dayanma -dayanti -dayatis -dayatma -dayayip -dayayis -dayilik -dazkiri -dazlama -debagat -debdebe -dededen -dedelik -dedigim -dedikci -dedirme -dediyse -defacik -defalik -defaten -defedis -defetme -defigam -defleme -defnesi -defolma -defolus -deforme -defosuz -defteri -degerli -degilim -degilse -degimli -deginis -deginme -deginti -degirme -degirmi -degisen -degisik -degisim -degisis -degiske -degisme -degnegi -dehalet -dehleme -dehsete -dekadan -deklare -dekoder -dekolte -dekorcu -dekovil -delalet -delecek -delepme -delibas -deliden -delikli -delilik -delinin -delinir -delinme -deliris -delirme -demagog -demarke -demeden -demekle -dememek -demetci -demetli -deminki -demirci -demirli -demirsi -demleme -denemek -denenme -denetci -denetim -denetme -deneyci -deneyim -deneyis -deneyli -dengeci -dengeli -dengesi -dengeyi -dengine -denilen -denilme -denizci -denizde -denizli -denklem -denklik -denktas -deplase -depozit -depremi -derakap -derbent -derdest -derdine -derdini -derecik -dereden -dereotu -dergici -derilme -derince -derinti -derisik -derisim -derisme -derleme -dermani -derrace -dersiam -derslik -dertsiz -deruhte -deryasi -deseler -desenci -desenli -deserim -desibel -desifre -desilme -desimal -destani -destari -desteci -detayli -devamli -devasiz -deveden -develik -devenin -deveran -devimli -devinim -devinme -deviris -devirli -devirme -devitme -devresi -devreye -devrisi -devriye -deyince -dialkol -dideban -didilme -didinis -didinme -didinti -didisim -didisip -didisme -difteri -diftong -digdigi -dijital -dikelis -dikelme -dikemez -dikence -dikenli -dikensi -dikilip -dikilis -dikilme -dikisci -dikisli -dikiste -dikizci -dikkate -dikkati -diktaci -dilalti -dilaver -dilberi -dilekce -dilemek -dilemma -dilenci -dilenis -dilenme -diletme -dileyim -dilinde -dilinim -dilinin -dilinis -dilinme -diliyle -dillere -dilleri -dimiski -dinamik -dinamit -dinclik -dinelme -dinleme -dinleti -dinozor -dipdinc -dipdiri -dipfriz -dipleme -diploit -diploma -dirayet -direkci -direkli -diremek -direnim -direnis -direnme -diresme -diretis -diretme -dirilik -dirilis -dirilme -dirilti -dirimli -dirsege -disemek -disilik -disinda -disinin -disinli -disisel -disiyle -dislama -disleme -disleri -dislisi -ditilme -divance -divitin -diyabaz -diyabet -diyafon -diyakoz -diyalaj -diyalel -diyaliz -diyalog -diyanet -diyecek -diyorit -dizelge -dizemli -dizgeli -dizgesi -dizgici -dizgine -dizilis -dizilme -dizlama -dizleme -dizleri -doegues -doekmek -doekuek -doekuem -doekuep -doellue -doeluet -doenemi -doenesi -doengel -doengue -doenmek -doenmez -doenuek -doenuem -doenuep -doenues -doenuet -doerder -doesege -doesegi -doeseli -doeseme -doesemi -doeslue -doevmek -doevues -dogacak -dogalci -doganci -dogdugu -dogmaca -dogmaci -dogmusa -dograma -dogruca -dogrucu -dogrulu -dogrusu -dogruya -dogumlu -doguran -dogurgu -dogurma -dogurur -dogurus -doktora -doktoru -doktrin -dokumak -dokunac -dokunca -dokunma -dokunum -dokunur -dokunus -dokusuz -dokutma -dokuyus -dokuzar -dokuzda -dokuzlu -dolamak -dolamik -dolanim -dolanip -dolanis -dolanli -dolanma -dolanti -dolapci -dolasik -dolasim -dolasip -dolasir -dolasma -dolayli -dolgulu -dolgusu -dolmaci -dolmadi -dolmasi -dolmusa -dolomit -dolukma -doluluk -dolunay -dolusma -domalan -domalis -domalma -domates -domuzun -donamak -donanim -donanma -donatim -donatis -donatma -dopdolu -dostane -dostlar -dostluk -dostsuz -dostuna -dosyasi -doydugu -doyulma -doyulur -doyumlu -doyunca -doyunma -doyuran -doyurma -doyurus -dretnot -drosera -duacisi -dubleks -dubloer -dudakli -dueduek -dueello -dueetto -duegmek -dueguem -dueguen -duekkan -duelger -duemdar -duemeni -duemtek -duenden -duenkue -duenuer -duermek -duertme -duertue -dueruem -duerzue -duescue -duesene -dueskue -dueslem -duesman -duesmek -duesmez -duessel -duestue -duestur -duesuek -duesuen -duesuep -duesues -duesuet -duezeme -duezeni -duezeyi -duezgue -dueziko -duezine -dueziye -duezlek -duezlem -duezmek -duezuem -dukalik -duldali -dumanli -dupduru -duragan -durakli -durdugu -duromer -durulma -duruluk -durusma -duvakci -duvakli -duvarci -duvarli -duyarga -duyarli -duyguca -duygulu -duygusu -duyulma -duyultu -duyulur -duyumcu -duyumlu -duyurma -duyurum -duyusal -ebeleme -ebeligi -ebeveyn -eceabat -eceline -edebini -edepsiz -edeptir -ederim! -ederler -edersen -edersin -edibane -edilgen -edilgin -edilmek -edimsel -edimsiz -edinmek -edisyon -editoer -ediyor? -efektif -efemine -efendim -efileme -efkarli -eflatun -efsuncu -efsunlu -egdiris -egdirme -egeleme -egiklik -egilmek -egimsiz -eginmek -egirdir -egirmek -egirmen -egirtme -egitici -egitimi -egitmek -egitmen -egitsel -eglemek -eglence -eglenis -eglenme -eglenti -eglesir -eglesme -egmecli -egotizm -egrelti -egrilik -egrilis -egrilme -egritme -egzotik -egzozcu -ehlidil -ehliyet -ejderha -ekilmek -ekilmez -ekinlik -ekinoks -ekipman -eklemek -eklemli -eklenme -eklenti -eklesil -eklesme -ekletme -ekmeden -ekmegin -ekmekci -ekmekle -ekmeksi -ekolali -ekoloji -ekonomi -eksenli -eksikli -eksikti -eksilen -eksilik -eksilis -eksilme -eksilti -eksimek -eksimik -eksimsi -eksitme -ekspoze -ekspres -ekstern -ekstrem -ektilik -ektirme -ekvator -elastik -elbasan -elbette -elcekli -elcilik -eldesiz -eldiven -elebasi -elegini -eleklik -elekten -elektro -elemani -element -elemsiz -elenmek -eletmek -elhasil -elifine -elimden -elimine -elinden -eliptik -elitlik -ellemek -ellenme -ellerde -ellerim -ellerin -ellesme -elletme -ellibir -ellilik -ellinci -elliser -elmabas -elmacik -elmalik -elmamsi -elmanin -elmasli -eloepen -eltiden -eltilik -elverir -elverme -emanete -embesil -embriyo -emdirme -emeksiz -emektar -emeline -emilmek -emirber -emircik -emirdag -emirlik -emismek -emisyon -emlakci -emlemek -emniyet -empirme -emprime -emretme -emretti -emrihak -emzikli -emziris -emzirme -enayice -endamli -endeksi -endemik -enderun -enenmek -enerjik -enfuesi -engelli -engerek -enginar -enikonu -enistem -enjekte -enlilik -ensefal -entegre -enterne -entimem -entrika -entropi -epeyice -epidemi -epiderm -epigram -epikriz -e-posta -eprimek -epsilon -erbiyum -ercecik -erdemli -erdirme -ereksel -erendiz -erfelek -erganun -ergilik -ergimek -ergimis -ergitme -erguvan -eriklik -erillik -erincek -erincli -erinlik -erinmek -erirlik -eriskin -erismek -eristik -eritici -eritmek -erkegin -erkekce -erkekli -erkeksi -erkence -erkenci -erkinci -ermemek -ermenek -eroinci -erotizm -erozyon -erselik -ersemek -erzurum -esamesi -esasina -esassiz -esastan -esatirî -esegini -esekler -eseklik -esekten -esektir -eseleme -esenlik -eserler -esermek -eseysel -eseysiz -esigine -esigini -esilmek -esinden -esinmek -esirlik -esirmek -esitlik -esitsiz -eskalop -eskenar -eskiden -eskilik -eskimek -eskimsi -eskinci -eskinli -eskitir -eskitme -eslemek -eslenik -eslenme -eslesme -eslilik -esmerce -esmerin -esnemek -esnetme -esneyis -esofman -espasli -esprili -esprisi -esrarci -esrarli -esrimek -esritme -estetik -estirme -etcilik -etegine -etegini -eteklik -eteneli -etinden -etkimek -etkinci -etkisiz -etlenme -etmemek -etmesin -etnolog -etoloji -etrafli -ettirme -etyaran -etyemez -evcikli -evcilik -evcimen -eveleme -evermek -evhamli -evinden -evinsiz -evirgen -evirmek -evirtik -evirtim -evirtme -evladin -evlatli -evlenen -evlenir -evlenis -evlenme -evlilik -evlinin -evrilir -evrilme -evrimci -evrisik -evsemek -evvelce -evvelki -evvelsi -eyersiz -eyitmek -eylemci -eylemde -eylemek -eylemli -eylemsi -eylesin -eytisim -eyyamci -ezansiz -ezberci -ezdirme -ezgince -ezgisel -eziklik -ezilgen -ezilmek -ezilmis -ezimevi -eziyeti -ezofori -fabrika -faciali -fagfuri -fagosit -fahriye -faizsiz -fakirce -faktoer -falanca -falcata -falcisi -falname -falsolu -familya -fanatik -fanilik -fantezi -fanuslu -farbala -fareler -farfara -farimak -farkina -farksiz -fartasi -fasarya -fasizan -fasulye -faullue -faydaci -faydali -faydasi -fazilet -fazlaca -fedaice -fedakar -federal -fehamet -felaket -felegin -felsefe -felsefi -feminen -fenalik -fenerci -fenerli -fennini -fenomen -feragat -feraset -ferdasi -ferhane -feribot -feriste -fermani -fermene -ferment -fermuar -fersude -feryadi -fesahat -fesatci -fettane -fetvaci -feveran -fevkani -fevvare -feyezan -feyizli -fezleke -fideist -fideizm -fidelik -fihrist -fikirli -fikirti -fikraci -fikrama -fikrini -filaman -filariz -filarli -fildisi -filinta -filizli -filolog -filozof -filvaki -finanse -fincani -findigi -findiki -firakli -firavun -fircaci -fircali -fircasi -firfiri -firinci -firinda -firinli -firkaci -firkata -firkete -firlama -firsati -firtina -fisekci -fisekli -fisilti -fisirti -fiskiye -fislama -fisleme -fissuer -fistigi -fistiki -fistolu -fistuel -fitikli -fitilci -fitilli -fitleme -fitneci -fitriye -fiyasko -fiyatli -fizikce -fizikci -flamaci -flandra -flasoer -flegmon -florisi -floruer -flurcun -fodlaci -fodulca -fokurtu -folklor -fonetik -fonolit -fonolog -formdan -formika -formuel -formunu -forseps -forsunu -fosilli -foslama -fosurtu -fotojen -fototek -fragman -fransiz -frekans -frenini -frenkce -frezeci -fritoez -fruktoz -fuelues -fuezyon -furtasi -gabavet -gabilik -gabonlu -gabyaci -gacirti -gaflete -gagamsi -gagavuz -gaileli -gailesi -gaiplik -gaipten -gaklama -galaksi -galalit -galenit -galerya -galeyan -galiba! -galoslu -galsame -galvano -gametli -gamsele -gamzeli -gangama -ganimet -garabet -garajci -garanti -garazli -gardini -gargara -gariban -gaseyan -gastrit -gavurca -gavurun -gayakol -gaydaci -gayesiz -gayetle -gayrete -gayreti -gayrisi -gazapli -gazhane -gaziler -gazilik -gazisil -gazlama -gazojen -gazolin -gazozcu -gebedir -gebelik -geberik -geberip -geberme -geberse -geceler -gecelik -gecende -gecenek -gecerli -gecerse -gecikme -gecilis -gecilme -gecimli -gecinim -gecinip -geciniz -gecinme -gecirim -geciris -gecirme -gecisim -gecisli -gecisme -gecitte -gecmeli -gecmeye -gecmise -gecmisi -gectigi -gedikli -gedilme -gegiris -gegirme -gegirti -gelberi -geldigi -geldin? -geldine -gelecek -gelegen -gelembe -gelenek -gelinin -gelinme -gelirdi -gelirli -gelisim -gelisme -gelmeli -gemerek -gemilik -gemleme -genclik -gencten -genelci -genelev -genelge -genelme -general -genetik -genisce -genitif -genligi -genosit -genotip -gensoru -geodezi -gepgenc -gercege -gerdege -gerekce -gerekci -gerekli -gerekme -gerelti -gergili -geriden -gerilek -gerilik -gerilim -gerilis -gerilla -gerilme -gerinir -gerinis -gerinme -gerisin -gestalt -gestapo -getiren -getirim -getirir -getiris -getirme -gevreme -gevseme -gezegen -gezenin -gezenti -gezilis -gezilme -gezimci -gezinis -gezinme -gezinti -gezleme -gibidir -gicikca -gicirti -gicisme -gidasiz -gidegen -gidemem -giderek -gideren -giderme -giderse -gidilis -gidilme -gidimli -gidisat -gidisle -gidisme -ginseng -girdisi -girecek -giresun -girilis -girilme -girince -girinti -girisik -girisim -girisme -giritli -girnata -girtlak -gitarci -gitgide -gitmeli -gitmeye -giyaben -giydigi -giyecek -giyilis -giyilme -giyimli -giyinik -giyinip -giyinis -giyinme -giyotin -giysili -gizemci -gizemli -gizleme -gizlice -gizlide -gizliye -glayoel -glokoni -glueten -gocuklu -gocunma -gocunur -goebegi -goebuet -goecebe -goeceri -goecmek -goecmen -goecuek -goecuem -goecuep -goecues -goegsue -goegues -goekcek -goekevi -goekmen -goeksel -goeksin -goekten -goelden -goeluek -goemlek -goemmek -goemuek -goemues -goemuet -goencue -goender -goenenc -goenlue -goenuel -goerdek -goerece -goereci -goereli -goergue -goerkem -goerme! -goermek -goermez -goersel -goeruem -goeruep -goeruer -goerues -goetten -goetuen -goetuer -goeveri -goeymek -goeyuek -goezcue -goezden -goezeli -goezeme -goezene -goezesi -goezevi -goezgue -goezlem -goezler -goezlue -goezuem -goezuen -golfcue -golluek -golsuez -gomalak -gonokok -gradosu -gramlik -granuel -gravite -gravuer -gravyer -grejuva -gresoer -greyder -groston -grotesk -guarani -gubidik -gudubet -guebuer -guecler -gueclue -guecten -guecuek -guecuen -guederi -gueduek -gueduel -gueduem -gueguem -guelcue -guelene -guellac -gueller -guellue -guelmek -guelmez -guelnar -guelsen -gueluek -gueluem -gueluep -guelues -gueluet -guemrah -guemuel -guemues -guenaha -guenahi -guencek -guencel -guendem -guenden -guendes -guenese -guenesi -guenisi -guenler -guenlue -guenuen -guepuer -guercue -guerele -gueresi -guergen -guerlek -gueruel -guetmek -guevela -guevenc -gueveni -guevesi -gueveyi -guezele -guezeli -guezide -guezlek -guezuen -guguklu -gulgule -gurbete -gurlama -gurultu -gururlu -habaset -habbesi -habbeyi -haberci -haberin -haberli -habitat -habitus -hacamat -haciaga -hacilik -hacimli -hacivat -hacizli -haclama -hacvari -haddeci -haddini -hadisat -hafakan -hafifce -hainlik -hakaret -hakasca -hakcasi -hakemli -hakikat -hakkari -hakkina -hakkini -haklama -haklari -halacca -halalik -halavet -halayik -halbuki -haletme -halinde -haliyle -halkaci -halkali -halkasi -halkavi -halkevi -halkoyu -hallice -halojen -halveti -hamakat -hamamci -hamamin -hamarat -hamaset -hamayli -hamilen -haminne -hamisiz -hamiyet -hamlaci -hamlama -hamleci -hamlede -hamsili -hamurcu -hamursu -hamurun -hanbeli -hancere -hanedan -hanelik -hanende -hangisi -hanidir -hanuman -hanutcu -haploit -hapsine -harabat -haracci -haracli -haramin -hararet -harbici -harbiye -harcama -harclik -harcsiz -hardali -harekat -hareket -haresiz -harezmi -harfine -harfler -haricen -harilti -harlama -harmani -harmoni -hartama -hasarli -hasatci -hasenat -haserat -hasetci -hasetli -hasilat -hasimca -hasirci -hasirli -hasirti -hasiyet -haslama -hasmane -haspam! -hastane -hastasi -hastaya -hatasiz -hatayli -hatirat -hatirli -hatlari -havadan -havadar -havadis -havanda -havanin -havasiz -havlama -havlucu -havlusu -havsala -havuzcu -havuzlu -havzasi -hayalat -hayalci -hayalen -hayalet -hayalli -hayasiz -hayatta -haybeci -haybeye -haydama -haydari -hayirla -hayirli -haykiri -haylama -haymana -hayrati -hayrete -hayrina -hayrini -hayrola -hayvani -hazakat -hazarca -hazimli -haziran -hazirci -hazirda -hazirun -haznesi -hazzini -hecelik -helalli -helecan -helezon -helikon -helisel -helmeli -helvaci -helvasi -hematit -hemayar -hemcins -hemdert -hemofil -hemsire -hendegi -hendese -hendesi -hengame -hentbol -hepatit -hergele -hesapca -hesapci -hesapli -hesapta -hevesli -heybeci -heyecan -heyelan -hezaren -hezeyan -hezimet -hicbiri -hicleme -hicviye -hidatit -hidayet -hiddete -hidruer -hikmeti -hilafet -hilebaz -hilekar -hilesiz -hincini -hincsiz -hindiba -hindici -hinoglu -hipofiz -hipotez -hirguer -hirilti -hirizma -hirkali -hirkayi -hirlama -hirpani -hirsini -hirsiza -hirsizi -hirssiz -hirtlik -hisilti -hisimli -hisirti -hislama -hismina -hisseli -hissesi -hissine -hissini -histeri -hitaben -hitabet -hititce -hiyaban -hiyanet -hizarci -hizipci -hiziyla -hizlica -hizmete -hizmeti -hocalar -hocalik -hoeduek -hoeyuek -hohlama -hokkasi -holding -holigan -holosen -homojen -homolog -homonim -homurtu -hoplama -hoplaya -hoppaca -hoppala -horanta -horasan -horlama -horozsu -horozun -hortlak -hortumu -horultu -hosafin -hoslugu -hostesi -hotanto -hotozlu -hovarda -hububat -hudutlu -hueccet -huecuma -huekmen -huekmue -huekuem -huelasa -huenkar -huennap -huermet -huesnue -huesran -huesuen -hueyuek -huezuen -huezzam -hukukcu -hukuken -hulyali -humbara -hummali -hummasi -hurdaci -hurdasi -hurdaya -hurmasi -hurufat -hurusan -husumet -husunet -huyluya -huzmeli -huzurlu -iadesiz -iblisce -ibnelik -ibrahim -ibretle -ibrikci -ibrisim -icabina -iceride -iceriye -icerlek -icermek -icigini -icilene -icilmek -icimlik -icinden -icindir -icirmek -icirtme -ickisiz -iclenis -iclenme -iclilik -icmeden -icmemek -icraata -ictihat -ictimai -ictinap -idamlik -idarece -idareci -idareli -idaresi -iddiaci -iddiali -iddiaya -idefiks -identik -ideolog -idmanci -idmanli -iffetli -ifrazat -iftihar -igbirar -igdemir -igdirli -ignecik -igneden -ignelik -igrenis -igrenme -igrenti -igtinam -ihaleye -ihanete -ihatali -ihbarci -ihbarli -ihlamak -ihlamur -ihlasli -ihmalci -ihracat -ihracci -ihtifal -ihtikar -ihtilac -ihtilaf -ihtilal -ihtilam -ihtilas -ihtilat -ihtimal -ihtimam -ihtiram -ihtiras -ihtiraz -ihtirma -ihtisam -ihtisap -ihtisar -ihtisas -ihtiyac -ihtiyar -ihtiyat -ihtizaz -ikamete -ikebana -ikileme -ikiligi -ikincil -ikinmak -ikircik -ikircil -ikircim -ikisini -ikizler -iklamak -ikramci -iktibas -iktidar -iktiran -iktisap -iktisat -ilaclik -ilacsiz -ilaveli -ilcebay -ilencli -ilenmek -ilerici -ileride -ileriyi -ilerlek -iletici -iletken -iletmek -ilgamak -ilgarci -ilgecli -ilgisiz -iligine -iligini -ilikcil -iliklik -iliksiz -ilimler -ilinmak -ilisigi -ilisken -iliskin -ilismek -ilistir -ilitmak -ilkelce -ilkesel -ilkguez -ilkokul -illegal -illetli -illiyet -ilmihal -ilmikli -iltibas -iltifat -iltihak -iltihap -iltimas -iltisak -iltizam -imamevi -imamlik -imandan -imanina -imaniye -imansiz -imdatci -imeceye -imgelem -imgesel -imlemek -immoral -imrahor -imranli -imrence -imrenis -imrenme -imrenti -imtihan -imtisal -imtisas -imtiyaz -imtizac -imzasiz -inadina -inaksal -inancli -inanmak -inanmis -inansiz -incaliz -incecik -inceden -incelik -incelis -incelme -incerek -incinme -incirsi -incitis -incitme -incizap -indifai -indinde -indirim -indirir -indiris -indirme -indiyum -inegoel -ineklik -infazci -infiale -infilak -infirak -infirat -infisah -ingiliz -inhidam -inhilal -inhimak -inhiraf -inhisar -inhitat -inilmek -inilmez -inisyal -inkarci -inkibaz -inkilap -inkiraz -inkisaf -inkisam -inkisar -inkiyat -inlemek -inletme -inleyen -inleyis -insafli -insanca -insanci -insanda -insanin -insanli -insansi -insicam -insiraf -insirah -insiyak -intibah -intibak -intihal -intihap -intihar -intikal -intikam -intisap -intisar -intizam -intizar -inzibat -inzimam -ipcilik -ipileme -ipislak -ipissiz -iplemek -iplicik -iplikci -ipliksi -ipotegi -ipsiler -iptidai -iptizal -iradeci -iradeli -iradiye -iraklik -iraksak -iralama -iranist -irgadin -irgamak -irganma -iridyum -irkilis -irkilme -irkilti -irkinti -irkiyat -irlamak -irsiyet -irtibat -irticai -irtical -irtifak -irtihal -irtikap -irtisam -isareti -iscilik -isetmek -isfahan -isgalci -ishalli -isialan -isigina -isiksiz -isilama -isildak -isimden -isimlik -isimsiz -isinden -isinlar -isinmak -isirgan -isirgin -isirici -isirmak -isirmaz -isirtma -isitici -isitmak -isitmek -isitmez -isitsel -iskarca -iskarta -iskarto -iskatci -iskelet -iskembe -iskemle -iskence -iskilip -iskilli -iskitce -iskocca -iskocya -iskonto -islahat -islamak -islamci -islanis -islanma -islatis -islatma -islavca -islemci -islemek -islenis -islenme -islenti -isletis -isletme -islevci -isleyen -isleyim -isleyis -islikli -isloven -ismetli -ismiyle -isnaden -ispalya -ispanak -ispanya -isparta -ispatli -ispavli -ispinoz -ispirto -ispiyon -isporta -israfil -israrla -israrli -istadya -istahla -istahli -istakoz -istampa -istekli -istemek -istemem -istemez -istemli -istenis -istenme -isterik -isterse -istesme -istetis -istetme -isteyen -isteyis -istiane -istiare -istibat -istical -isticar -istidat -istifci -istifra -istigal -istigna -istihar -istihza -istikak -istikra -istilah -istimal -istimna -istinaf -istinas -istinat -istinga -istirak -istirap -istirar -istisna -istiyak -istizah -istizan -isvecce -isvecli -isveren -isyanci -itaatli -italyan -itayagi -itbogan -itburnu -iteleme -itfaiye -ithalat -ithamda -itibara -itibari -itilmek -itinali -itismek -itlenme -itlesme -itminan -itriyat -itriyum -ittifak -ittihat -ittihaz -ittirat -ittirme -ittisal -ivazsiz -ivdirme -ivedili -iyicene -iyilige -iyiligi -iyimser -iyisini -iyoduer -izafiye -izansiz -izbelik -izcilik -izdiham -izdirap -izdivac -izinden -izinsiz -izlemci -izlemek -izlence -izlenim -izlenis -izlenme -izletis -izletme -izleyis -izmarit -izmirli -izohips -izomeri -izomorf -izoterm -iztirar -jakarli -jakoben -japonca -jelatin -jenerik -jenosit -jeodezi -jeoloji -jetoncu -jiletli -joeleli -jogging -jokeyli -juebile -julluek -kabagi! -kabahat -kabakci -kabalak -kabalik -kabarik -kabaris -kabarma -kabarti -kabasis -kablocu -kablolu -kabotaj -kabuklu -kabuksu -kaburga -kabuslu -kabzasi -kacacak -kacakci -kacamak -kacanin -kacgoec -kacikca -kacilma -kacinci -kacinik -kacinma -kacinti -kacirir -kaciris -kacirma -kacisma -kackini -kadavra -kadayif -kademli -kaderci -kadilik -kadinca -kadinin -kadinli -kadinsi -kadirga -kadrini -kadrocu -kadrolu -kadrosu -kafadan -kafadar -kafadas -kafakol -kafasiz -kafdagi -kafesci -kafesli -kaffesi -kagitci -kagitli -kagitsi -kagsama -kahirli -kahkaha -kahpece -kahveci -kahvesi -kahyasi -kaideci -kaideli -kaidesi -kakalak -kakaolu -kakavan -kakilip -kakilma -kakimak -kakinti -kakirca -kakirti -kakisma -kakmaci -kakmali -kaktues -kalafat -kalamar -kalamin -kalamit -kalanin -kalanli -kalavra -kalayci -kalayli -kalaysi -kalbine -kalbini -kalbura -kalburu -kalcali -kalcete -kalecik -kalemde -kalemis -kaleska -kalfasi -kalgima -kalhane -kalibre -kalimli -kalinca -kalinis -kalinma -kalinos -kalinti -kalipci -kalipli -kalipso -kalitci -kalitim -kalkisa -kalkmak -kalkmaz -kalktim -kallavi -kalmadi -kalmali -kalomel -kalotip -kalpgah -kalplik -kalpsiz -kalpten -kalsemi -kalsin! -kaltagi -kamanco -kamarot -kamasiz -kamasma -kambiyo -kambura -kamburu -kamcili -kamelya -kamilen -kamisli -kamissi -kampana -kamping -kampues -kamufle -kamuoyu -kamusal -kamutay -kamyonu -kanalet -kanamak -kanamaz -kanarya -kanasta -kanatis -kanatli -kanatma -kanayan -kanayis -kancaci -kancali -kancayi -kandela -kandili -kandira -kangren -kanguru -kanikma -kanirma -kanitli -kaniyla -kanlama -kanlara -kanlisi -kanseri -kantara -kantari -kantite -kantocu -kanuncu -kanunen -kapakli -kapamac -kapamak -kapanca -kapanci -kapanik -kapanin -kapanis -kapanma -kapanti -kaparoz -kaparsa -kapatis -kapatma -kapicik -kapidan -kapilar -kapilis -kapilma -kapinin -kapisiz -kapisma -kapital -kapkara -kaplama -kaplica -kapmaca -kaporta -kapsama -kapsuel -kaptani -kapucin -kapuska -karabas -karabet -karacam -karadul -karadut -karakas -karakol -karakul -karakus -karalar -karalik -karalti -karamak -karaman -karamel -karamsi -karamuk -kararda -kararip -kararir -kararis -kararli -kararma -kararti -karasal -karasin -karavan -karavas -karavel -karbuer -kardesi -karesel -karfice -kargasi -kargayi -karinca -karinin -karinla -karisir -kariyla -karnesi -karnina -karnini -karpuza -karpuzu -kartali -kartopu -kasigin -katalog -kavgasi -kavusum -kavusur -kaygisi -kaymagi -kaymasi -kaynaga -kaynagi -kayrasi -kazadan -kazanci -kazanda -kazanir -kazimak -kazmasi -kazmayi -kebapci -kebapli -kebzeci -keciler -kecilik -kecinin -kederli -kedinin -kefalet -kefaret -kefenci -kefenin -kefenli -kefesiz -kehanet -kekelik -kekikli -kekleme -kelam-i -kelebek -kelepce -kelepci -kelepir -kelifit -kelleci -kelleyi -kemakan -kemance -kemanci -kemence -kemerci -kemerli -kemikli -kemiksi -kemiris -kemirme -kemiyet -kenarci -kenarda -kenarin -kenarli -kendimi -kendine -kendini -kendisi -keneler -kenetli -kenevir -kentler -kentsel -kenttas -kenyali -kepceli -kepcesi -kepceye -kepekci -kepekli -kepenek -kerahet -keramet -keratin -kerecik -kerelik -kerempe -kereste -kerevet -kerevit -kereviz -kerhane -kerizci -kerrake -kertigi -kertmek -kervana -kesafet -kesecik -kesedar -keseden -kesekli -kesenek -kesenin -kesesiz -kesikli -kesilen -kesilis -kesilme -kesimci -kesinme -kesinti -kesirli -kesisen -kesisme -kesiyor -keskuel -kesleme -kesmece -kesmesi -kestane -kestere -kestigi -kevelci -keyfine -keyfini -keyifli -kezalik -kibarca -kibirli -kibrine -kiciyla -kidemce -kidemli -kifayet -kikirik -kikirti -kilavuz -kilerci -kilgili -kilibik -kilicci -kilicla -kilicli -kilifci -kilifli -kilikli -kilimci -kilinir -kilinis -kilinma -kilisli -kilitli -killeme -kilojul -kiloluk -kiloton -kilovat -kimesne -kimilti -kiminin -kiminle -kimligi -kimsede -kimsesi -kimseye -kimyaca -kimyaci -kimyasi -kimyevi -kimyoni -kinacik -kinamak -kinanma -kinasiz -kinayis -kindira -kinetik -kininli -kinlama -kipirti -kipisik -kipleri -kiprama -kiracak -kiralik -kiranta -kirazin -kirdeci -kirdigi -kirdili -kirecci -kirecli -kirecsi -kiremit -kirikci -kirildi -kirilip -kirilir -kirilis -kirilma -kirilsa -kirinim -kirinma -kirinti -kirisci -kirisik -kirisli -kirisma -kiriste -kiritim -kiritis -kiritma -kirizma -kirkici -kirklar -kirklik -kirkmak -kirkyil -kirlent -kirliye -kirmaci -kirmali -kirmasi -kirmizi -kirpigi -kirpmak -kisacik -kisalik -kisalir -kisalis -kisalma -kisarak -kisayol -kisikca -kisiler -kisilik -kisilis -kisilma -kisinin -kisinma -kisinti -kisisel -kisitli -kisiyiz -kiskaci -kiskanc -kislama -kismeti -kismiri -kisneme -kisragi -kisveye -kitabet -kitab-i -kitalar -kitapca -kitapci -kitapta -kitikli -kitirci -kitirti -kitlama -kivamli -kivanis -kivanma -kiviris -kivirma -kivrama -kiyafet -kiyakci -kiyamet -kiyanus -kiyasen -kiyaset -kiyidas -kiyilik -kiyilma -kiyimli -kiyinma -kiyinti -kiyisma -kiymali -kiymete -kiymeti -kizamik -kizarik -kizarip -kizaris -kizarma -kizarti -kizilca -kizilis -kizilma -kizilti -kizinda -kizisik -kizisma -kizmaca -klakson -klarnet -klasman -klasoer -klavsen -klinker -kliseci -kloruer -kobrasi -kocabas -kocadan -kocaeli -kocalik -kocalma -kocamak -kocaman -kocamaz -kocanci -kocasiz -kocatma -kocayis -kocbasi -kocsama -kocusma -kodaman -kodlama -koefter -koekcue -koeklue -koeknar -koeksel -koeksue -koekten -koektes -koelcer -koeleci -koeleli -koelesi -koeluek -koemuer -koemues -koepege -koepegi -koeprue -koepuek -koerebe -koerese -koerfez -koerler -koeruek -koeruen -koescue -koesede -koesegi -koesele -koeseli -koesesi -koeseye -koeseyi -koesker -koeskte -koeskue -koesnue -koestek -koeycue -koeyden -koeydes -koeylue -koeyuen -kofalik -kohenit -kokarca -kokarsa -koketri -koklama -koklasa -kokorec -kokoroz -kokteyl -kokusma -kokusuk -kokusuz -kokutma -kolacan -kolanci -kolasiz -kolayca -kolayci -kolayda -kolbasi -kolcusu -koledok -kolejli -kolibri -kollama -kollari -kolofan -kolonya -kolordu -kolpocu -kolpoya -koltuga -koltugu -kolunda -komadan -komalik -komamak -komando -kombili -kombina -kombine -komedya -komiser -komodin -komodor -kompoze -kompres -komsuda -komsuna -komsunu -komsusu -komsuya -komutan -konakci -konalga -koncina -koncsuz -konducu -konfeti -kongolu -konsept -konsome -konsuel -kontagi -kontluk -kontoer -kontrat -kontrol -kontuar -konukcu -konulma -konusma -konusus -konusuz -konveks -konyali -koparan -koparip -koparis -koparma -kopcali -kopkoyu -koptugu -kopuntu -kopuzcu -kopyaci -korakor -kordone -kordonu -koridor -korkagi -korkmak -korkmaz -korkulu -korkunc -korkusu -korkuya -koroner -korozif -korsani -korseci -korseli -korteks -korucuk -korugan -koruluk -korumak -korunak -korunga -korunma -korunum -korusun -korutma -koruyus -kosalik -kosalti -koskoca -kosmaca -kostuem -kosullu -kosulma -kosumcu -kosumlu -kosuntu -kosusma -kosutcu -kotarma -kotlama -kovalik -kovlama -kovucuk -kovulma -kovulus -kovuntu -koyacak -koyayim -koynuna -koyulma -koyuluk -koyuncu -koyuntu -koyunun -kozakli -kozalak -kozasiz -kraldan -kralice -krallik -krampon -kreatif -kredili -kredisi -kremali -kreozot -kreplin -kretase -krikocu -kripton -kristal -krupiye -kruvaze -kuafoer -kuantum -kuartet -kubarma -kubasma -kubbeli -kucakta -kudurma -kuduruk -kudurur -kudurus -kuebali -kuebist -kuebizm -kuecuek -kuefeci -kuefesi -kueffar -kuefler -kueflue -kuefran -kuefrue -kuefuer -kuelahi -kuelfet -kuelhan -kuellue -kueluen -kuembet -kuemeli -kuemesi -kuemeye -kuencue -kuenefe -kuepeli -kueplue -kueraso -kuerdan -kueregi -kuereme -kueresi -kuerevi -kuerkas -kuerkue -kuersue -kuertaj -kuertce -kuesade -kueskue -kuesmek -kuestah -kuesuem -kuetlue -kuetoer -kuetuek -kuetuer -kueveti -kuevoez -kuintet -kuklaci -kukumav -kulakci -kulakli -kuleden -kuloglu -kulpsuz -kulpunu -kulucka -kuluebe -kuluebu -kulunuz -kumanca -kumanda -kumandi -kumanya -kumarci -kumasci -kumasiz -kumasli -kumbara -kumbasi -kumkuma -kumlama -kumpasa -kumrucu -kumrusu -kumukca -kundura -kunduru -kupkuru -kuralci -kuralli -kuramci -kurbaga -kurbani -kurdele -kurdunu -kurgucu -kurgulu -kurmaca -kurmaci -kurmaya -kurnali -kursuna -kursuni -kursunu -kurtcuk -kurtcul -kurtluk -kurtsuz -kurttan -kurulma -kuruluk -kurulus -kurumak -kurumlu -kuruntu -kurunun -kurusun -kurutac -kurutma -kurutus -kuruyus -kusakli -kusamli -kusanis -kusanma -kusanti -kusatis -kusatma -kusbasi -kusdili -kusetli -kushane -kuskucu -kuskulu -kuskunu -kuskusu -kuskuya -kuslari -kusuntu -kusurlu -kusyemi -kutlama -kutsama -kuvveti -kuyruga -kuyrugu -kuytuda -kuytusu -kuyucak -kuyudan -kuyudat -kuyumcu -kuzeyli -kuzguna -kuzguni -kuzuluk -lacerem -ladenli -lafazan -laflama -lagimci -lagimla -lahavle -lahzada -laiklik -laisizm -lakapli -lakaydi -lakayit -lakerda -lakirti -laklaka -laklama -lakonik -lalalik -lalanga -lalelik -lalezar -lamaist -lamaizm -lambada -lambali -lambasi -lambayi -lamekan -lamelif -lanetli -langirt -langust -lanolin -lansman -lapilli -laponca -laskine -lasteks -latanya -latasiz -laterit -laterna -latifce -latince -laubali -lavanta -lavtaci -layemut -layuhti -lazanya -lazimci -lebalep -lebbeyk -leblebi -lecelik -lehceci -lehimci -lehimli -lehinde -lekesiz -lektoer -lenduha -leninci -lepiska -letafet -letarji -letonca -levanti -levazim -levhaci -levhasi -levregi -leylagi -leylaki -leylegi -liberal -libyali -lifleme -liglama -limitet -limoncu -limonit -limonlu -limonsu -limuzin -linotip -liparit -liralik -listeci -listesi -listeye -liturya -livarli -liyakat -lobelya -lodoslu -loepuer -loesemi -loglama -lokanta -lokatif -lokmaci -lokmasi -loncasi -lopcugu -lortlar -losyonu -lotarya -lueferi -lueknet -lueleci -lueleli -luempen -luepcue -luepten -luetfen -luezuci -lumbago -lustrin -lutilik -maassiz -mabeyin -macarca -macuncu -madalya -maddeci -maddesi -mademki -madenci -madensi -madikci -madimak -maestro -mafyaci -mafyasi -maganda -magazin -magribî -mahalle -mahalli -mahallî -maharet -mahbube -mahfaza -mahiyet -mahkeme -mahkûmu -mahmude -mahrama -mahruti -mahsere -mahserî -mahunya -mahyaci -majeste -makabil -makadam -makamla -makarna -makasci -makasli -makbule -makedon -maketci -makilik -makosen -makrama -makrome -maksure -makyoer -makyoez -malakit -malarya -malatya -malgama -maliyet -maltali -malulen -malulue -malumat -malzeme -mamafih -mamelek -mamulat -manasiz -mancana -mancuca -mandaci -mandali -mandasi -mandayi -mandira -manendi -manevra -maniali -manidar -maniple -maniska -mankafa -mankeni -mankurt -manolya -mantara -mantari -mantici -mantiki -mantisi -mantolu -manyagi -manyeto -manyezi -manzara -manzume -marabut -maranta -maraton -marazli -maresal -marifet -marinat -marjsiz -markaci -markaja -markali -markoer -marksci -marmara -maroken -martini -marulcu -maruzat -masajci -masalci -masalik -masalsi -masarif -maskara -maskeli -maskesi -masmavi -masnuat -masrafa -masrafi -masrapa -mastara -mastika -masturi -masumca -matador -matbuat -matemli -matraga -matrahi -matriks -mavilik -mavimsi -mavnaci -mavraci -mavruka -mayalik -mayasil -mayasiz -mayinci -mayinli -mayisli -mayisma -maymuna -maymunu -mayonez -maytaba -mazbata -mazeret -mazgirt -mazilik -mazurka -mecazen -mecazli -mecburi -meccani -mecelle -mecidit -meclisi -mecrasi -medikal -medrese -medyaci -mefahir -mefkure -mefkûre -megafon -megapol -megaton -megavat -megerki -megerse -mehabet -mehtaba -mekanci -mekanik -mekkare -meksefe -meksika -mektebi -mektubu -melaike -melamet -melanet -melanit -melekût -melemek -melesme -meletme -melinit -melodik -melunca -memalik -memecik -memeden -mememsi -memesiz -memleha -memurin -menajer -menakip -menekse -menemen -menendi -menetme -menevis -menfaat -mengene -menkibe -menopoz -menseli -mentese -menzile -merakli -merakta -meramin -merasim -mercegi -merdane -merhaba -merhale -merhemi -merhume -merinos -meriyet -merkezi -merkezî -merkuer -mermeri -mermisi -mersini -mersiye -mertebe -mertegi -mertlik -mesaiye -mesamat -mesecik -meselik -mesgale -mesihat -mesleki -mesnevi -mesruta -mesruti -mestane -mesture -mesutca -metafor -metalik -metalsi -metanet -metatez -metelik -methali -methini -methiye -metilen -metilik -metodik -metotlu -metruke -mevduat -mevhibe -mevkide -mevkisi -mevkute -mevlevi -mevsimi -mevzuat -mevzulu -mevzusu -mevzuya -meyanci -meyanda -meydana -meydani -meyhane -meyilli -meyveci -meyveli -meyvesi -meyveye -mezalim -mezamir -mezarci -mezarda -mezarin -mezatci -mezbaha -mezbele -mezelik -mezhebi -meziyet -mezozom -mideden -midesiz -midilli -midyeci -mihenge -mihlama -mihrabi -mihrace -mikamsi -miktari -mildiyu -milfoey -milibar -militan -milleti -mimleme -minakop -minderi -mineral -minesiz -minicik -minimal -minimum -minkale -minorka -mintika -miralay -mirasci -mirilti -mirlama -mirliva -misafir -misirci -misirli -miskala -misketi -mitingi -miyasma -miyosen -mizacli -mizahci -mizahsi -mizikci -mizimak -mobilya -modaevi -modelaj -modelci -moesyoe -mogolca -molasiz -monarsi -monogam -monolog -monopol -monoray -monotip -monoton -montuer -moraris -morarma -morarti -mortocu -mortoyu -morumsu -motamot -motelci -motifli -motorcu -motorin -motorlu -mozalak -muaccel -muacciz -muaddel -muadele -muaflik -muahede -muaheze -muahhar -muakkip -muallak -muallel -muallim -muamele -muammer -muannit -muaraza -muarefe -muasaka -muattal -muattar -muavini -muayede -muayene -muayyen -muazzam -muazzep -muazzez -mubayaa -mudanya -muebrem -muecbir -muecmel -muecrim -muecver -muedafi -muedana -muedara -muedavi -mueddea -mueddei -mueddet -muedire -muedrik -muedrir -mueduer -mueflis -mueflon -muefret -muefrez -muefrit -muefsit -mueftue -muehlet -muehlik -muehmel -muehrue -muehuer -muejgan -muekrim -muelaki -muelhak -muelhem -muelhit -muembit -muemtaz -muenadi -muencer -muenhal -muenhat -muenkir -muephem -muersit -muertet -muerver -muesait -muesavi -muesfik -mueshil -mueskat -mueslim -muesmir -muespet -muesrif -muesrik -muestak -muesuen -muethis -muezeci -muezesi -muezigi -muezmin -mugaddi -muganni -mugayir -muglali -muhabir -muhacim -muhacir -muhafiz -muhalif -muharip -muhasim -muhasip -muhasir -muhatap -muhtari -muhteri -muhteva -muhtevi -muhtira -muinsiz -mukabil -mukaffa -mukassi -mukataa -mukavim -mukavva -mukavvi -mukteza -muktezi -mumhane -mumlama -murabba -murabit -murabut -murafaa -murakip -murassa -musaffa -musahip -musakka -musalla -musalli -musamba -musanna -musibet -musikar -muskaci -muslugu -musmula -mustucu -mustulu -mutabik -muteber -mutedil -mutekit -mutemet -muteriz -mutlaka -mutluca -mutmain -muttali -muvafik -muvazaa -muzahir -muzipce -nabekar -nabzina -nabzini -nadanca -nadasli -nadirat -nadiren -nagehan -nagmeli -nahirci -naiplik -nakarat -nakisci -nakisli -nakkare -nakliye -nalayik -nalbant -nalcali -nalekar -nalinci -nalinli -nallama -nallari -namazci -namerde -namuslu -nanesiz -nankoer -nardenk -nargile -narince -narsist -narteks -nasihat -nasilsa -nasipli -nasirli -nasrani -nasturi -natamam -nazaran -nazenin -nazikce -nebatat -necabet -necaset -nedamet -nedenli -nedense -nefaset -nefesli -nefeste -nefsani -nefsine -nefsini -negatif -nekahet -neonazi -neozoik -neptuen -nerede? -nereden -nergisi -neritik -nervuer -nesesiz -nevazil -nevazis -neveser -nezafet -nezahet -nezaket -nezaret -nezetme -nezleli -nezlesi -nicelik -nifakci -nigdeli -nihayet -nikahli -nikahta -nikelaj -nikelli -nikelsi -nikotin -nimetli -ninelik -nirengi -nisadir -nisaiye -nisanci -nisanli -nisasta -nisfiye -nispeti -nitekim -nitelik -niyabet -niyetci -niyetli -nizamli -noebeti -noetron -nogayca -nohutlu -nohutsu -noktaci -noktali -noktasi -noktayi -nominal -nuedist -nuedizm -nuefuzu -nuhuset -numerik -nusayri -obabasi -obelisk -obezite -obruklu -obsesif -oburluk -ocagina -ocagini -ocaklik -ocaksiz -odabasi -oduncul -odunluk -oedemek -oedemez -oedemli -oedence -oedenek -oedenis -oedenme -oedenti -oedesme -oedetme -oedevli -oeduenc -oefkeli -oefkesi -oefkeye -oeglena -oegreti -oeguet; -oekceli -oekelik -oekseme -oekseye -oeksuez -oekueze -oelcegi -oelcmek -oelcuem -oelcuen -oelcuep -oelcues -oelcuet -oeldue? -oelduer -oelenle -oeleyim -oelguen -oelmues -oelueme -oenayak -oenceki -oencesi -oencuel -oenemli -oenerge -oeneris -oenerme -oenerti -oenguen -oenleme -oenluek -oenolog -oensezi -oenuene -oepeyim -oerdege -oerdegi -oerguen -oerguet -oernegi -oertbas -oertmek -oertuek -oertues -oestaki -oeteden -oetlegi -oevmues -oevuenc -oeylece -oeylesi -oezcesi -oezelik -oezemek -oezenip -oezenis -oezenle -oezenli -oezenme -oezenti -oezezer -oezgeci -oezguel -oezguen -oezguer -oezleme -oezlemi -oezluek -oezveri -ofansif -oflamak -oflayip -ofsayta -ofsetci -oglanci -ogulcuk -ogulluk -ogulsuz -ohlamak -okazyon -okcudur -okculuk -okkalik -okkanin -okkayla -oklamak -oklanma -okramak -oksalat -oksalik -oksamak -oksanma -oksanti -oksatma -oksayis -oksijen -oksilit -okueler -okuldan -okuldas -okullar -okumasi -okumayi -okunmak -okutmak -okutman -okuyucu -okyanus -olacagi -olanlar -olasici -olasili -olasiya -olaycik -olayim! -olayim? -olaysiz -oldukca -oldurma -olgular -olgunca -olgusal -olijist -olimpik -olmadan -olmadik -olmamak -olmamis -olmasin -olmayan -olmazli -olmazsa -olmussa -olsaydi -olukcuk -olumsal -olumsuz -olunmak -olunmaz -olurluk -oluruna -olusmak -oluyor! -oluyor? -omfazit -omnivor -omuzdas -omuzluk -onanizm -onanmak -onarici -onarmak -onartma -onasmak -onatmak -onayina -onaysiz -onbesli -ondalik -onduele -ondurma -onlarca -onmadik -onsekiz -onulmak -onulmaz -onurluk -onursal -onursuz -onuruna -operaci -opsiyon -optikci -optimal -optimum -oransiz -orasina -ordinat -ordoevr -orduevi -ordugah -ordusuz -organik -organze -orkinos -ormanci -ornatma -orojeni -ortadan -ortakca -ortakci -ortakli -ortalik -ortanca -ortanin -orucsuz -osmanli -osmiyum -osurgan -osurmak -osurtma -osurugu -otalama -otantik -otarmak -otistik -otlakci -otlamak -otlanma -otlatma -otluyor -otobues -otodrag -otograf -otoklav -otokrat -otokton -otonomi -otopark -otorite -otosist -otostop -ototrof -oturmak -oturmam -oturmaz -oturmus -oturtma -oturtum -otuzluk -ovalama -ovdurma -overlok -ovulmak -ovunmak -oyalama -oyculuk -oydasma -oydurma -oylamak -oylanis -oylanma -oylasma -oylatma -oylumlu -oynakca -oynamak -oynamaz -oynanir -oynanis -oynanma -oynasin -oynasma -oynatim -oynatis -oynatma -oynayis -oynuyor -oyulmak -oyunbaz -oyuncak -oyundan -oyunluk -ozanlik -ozonuer -pabuccu -pabuclu -pacalik -pacariz -pacasiz -pacavra -padalya -padisah -paftali -pahlama -paklama -palalik -palamar -palamut -palanga -palanka -palaska -palavra -paldimi -paletli -palizat -palmiye -paltolu -palyaco -pamukcu -pamuklu -panayir -pancari -panduel -pankart -pankras -panteon -papagan -papalik -papatya -papelci -papikci -papirus -paprika -parabol -paracol -paradan -parafin -paralar -paralel -paralik -paranin -parapet -parasal -parasiz -paravan -parazit -parcaci -parcali -parcasi -parfuem -parilti -parkeci -parlama -parmaga -parmagi -parsayi -partici -partili -partisi -partiyi -partner -pasakli -pasalik -pasavan -pastaci -pastali -pastane -patadak -patalya -patates -patenci -patetik -patinaj -patirti -patiska -patlama -patojen -patolog -patrona -pavurya -payanda -paydosu -payidar -paylama -payreks -pazarci -pazarda -pazisiz -pazvant -pecenek -pecesiz -pedagog -pedavra -pedofil -pedolog -peganit -pekisme -pekitme -pekmezi -pelerin -pelikan -pembesi -penalti -penceli -pencere -penceye -pencgah -penguen -pentuer -penuvar -pepelik -perdeci -perdeli -perdesi -perende -pergola -perhizi -pericik -peridot -perisan -periton -periyot -permece -persenk -perukar -perukcu -pervane -pesinat -pesinci -pesinde -pesinen -pespaye -pestile -pestili -pestuca -petunya -peyapey -peyklik -peyleme -peyniri -pigment -pikajci -pilisiz -pilotaj -pintide -piramit -pireler -pirilti -pirinci -pirlama -pirpiri -pirsing -pirtiyi -pirtlak -pirzola -pisegen -pisekar -pisiren -pisirik -pisirim -pisirip -pisiris -pisirme -pisleme -pisligi -pisuvar -pitirti -pitragi -piyango -piyazci -pizolit -pizzaci -plakaci -plakali -planoer -plansiz -plasman -plaster -plastik -pleybek -plonjon -plueton -poecuek -pokerci -polargi -polarma -polemik -poligam -poligon -polimer -polisaj -politik -polonez -pomakca -pompali -pompasi -pornocu -porsuma -portoer -posasiz -postaci -postane -postaya -postayi -postsuz -postuna -posusuz -potpuri -poturlu -pozitif -pratika -preluet -prenses -prensip -presbit -prestij -problem -program -projeci -prostat -protein -provoke -prozodi -psikozu -puanlik -puansiz -puantaj -puanter -pudrali -pudrasi -pueften -puefuer -pueklue -puektue -puercek -pueresi -puerist -puerizm -pueruez -pueskue -pueslue -puesuer -puetuer -puflama -puflaya -pulcugu -pullama -punduna -pundunu -puntolu -pusarik -pusatci -pusatli -pusetci -pustluk -pusuluk -rabbani -rabbena -radansa -radarci -radikal -radyocu -rafadan -rafinaj -rahatca -rahmani -rahmine -rakamli -rakkase -rakorlu -rallici -ramazan -rampaci -rampali -randevu -rantabl -rantiye -raporcu -raporlu -rapsodi -raptiye -rasatci -rasitik -raspaci -ratanya -reaktif -realist -realite -realizm -recelci -reddiye -refahli -refakat -refetme -refleks -reftiye -rehavet -rehberi -reislik -rekabet -rekaket -rekolte -rektoer -remilci -rencide -rencper -rendeli -rengini -renkler -renkser -renksiz -renktas -renkten -reomuer -resesif -resimci -resimli -resimsi -resital -resmini -ressami -restore -retorik -revacta -reyhani -rezalet -rezilce -rimelli -rindane -rintlik -ritimli -ritueel -rivayet -riyakar -riyaset -riyasiz -riyazet -riyolit -rizkini -robotik -rodeocu -roelans -roelyef -roemork -roevans -roluene -romanci -romansi -rondela -rotatif -ruechan -ruefeka -ruekuen -ruekues -rueping -rueseym -ruestik -ruesvet -rueyasi -ruezgar -ruhiyat -ruhsati -ruhunda -rujlama -rumence -rumuzlu -rutubet -ruzname -ruzuseb -saadeti -saatine -saatler -saatlik -sabahci -sabahin -sabahki -sabahli -sabanin -sabirla -sabirli -sabotaj -sabuncu -sabunlu -sacakli -sacayak -sacilip -sacilis -sacilma -sacinti -saclari -sacmaci -sacmasi -sadakat -sadakli -sadakor -sadaret -sadelik -sadeyag -sadikca -safahat -safiyet -saflara -safrali -safrani -safrasi -safsata -sagalma -saganak -sagduyu -sagilis -sagilma -sagimli -saglama -sagligi -sahabet -sahavet -saheser -sahiden -sahinci -sahipli -sahitli -sahneye -sahsina -sahteci -sahtere -saibeli -sairane -sairlik -sakadan -sakalik -sakalim -sakalli -sakamet -sakarca -sakarin -sakarya -sakasiz -sakatat -sakatci -sakayik -sakilik -sakimak -sakinca -sakince -sakinim -sakinis -sakinma -sakinti -sakirga -sakirti -sakiyis -sakizci -sakizli -saklama -sakrama -salabet -salacak -salakca -salavat -salcali -salcasi -saldiri -salepci -salgami -salgili -salhane -salihli -salimen -salinim -salinis -salinma -salinti -salipli -salisen -salkima -salkimi -sallama -sallasa -sallaya -salname -samanli -sambaba -sambaci -sambrel -sampuan -samuray -sanatci -sanatli -sancili -sancima -sancisi -sanciyi -sancmak -sandali -sandiga -sandigi -sanduka -sandvic -sanidin -sanilma -saniyla -sansari -sanssiz -sansuer -santiar -santiye -santoer -santoez -santral -santung -santuri -sapanca -saparna -saparta -sapcigi -saphane -sapikca -sapilma -sapirti -sapitis -sapitma -sapkaci -sapkali -sapkasi -saplama -sapsari -saptama -sarahat -sarapci -sararip -sararir -sararis -sararma -sararti -sarayli -sargili -sarhosa -sariagi -saricam -saricik -sarifig -sarikci -sarikiz -sarikli -sarilik -sarilir -sarilis -sarilma -sarilti -sarimli -sarimsi -sarinma -sarisin -sarjoer -sarkici -sarkmak -sarlama -sarmasi -sarnici -sarplik -sarrafi -sarsici -sarsmak -sartsiz -sasaali -sasayim -sasilar -sasilik -sasilma -sasimak -sasirip -sasirir -sasiris -sasirma -sasirti -saskina -satafat -satasma -sathiye -satilik -satilis -satilma -satimci -satirik -satranc -satsuma -sattigi -satuern -savalak -savasci -savasim -savasma -savatli -savilma -savkima -savlama -savmaci -savsama -savulma -savunma -savunus -savurma -savusma -savusup -sayayim -sayeban -sayeste -sayfiye -saygili -sayilar -sayilir -sayilma -sayimli -sayisal -sayisiz -sayisma -saylama -saymaca -sazende -sebabet -sebatli -sebekci -sebepli -sebilci -sebzeci -seccade -secdeye -secenek -secilis -secilme -secmece -secmeci -secmeli -sedasiz -seddadi -seddeli -sedefci -sedefli -sedefsi -sedyeci -sefahat -sefalet -sefanin -sefaret -sefasiz -seferli -sefilce -seftali -segirme -segrime -sehadet -sehirci -sehirli -sehname -sehpasi -sehpaya -sehriye -sehvani -sehzade -sekavet -sekerci -sekerle -sekerli -sekilci -sekilik -sekilli -sekitme -sekizde -sekizer -sekizli -sektesi -sekteye -sektoer -sekvaci -selamet -selanik -selaset -selatin -selcuki -selinti -selofan -selvice -selzede -semafor -semahat -semaisi -sematik -semaver -semazen -semerci -semerli -seminer -semirme -semitik -semizce -sempati -semptom -semsiye -semtine -senaryo -sendeci -sendere -sendika -sendrom -senelik -senelme -senetli -senfoni -seninki -seniyet -senkron -senligi -sensoer -sentaks -senyoer -sepelek -sepetci -sepetli -sepette -seramik -serazat -serbest -serbeti -sercesi -serdari -serefli -serenat -serendi -seretan -sergici -sergisi -serilip -serilis -serilme -serince -seritci -seritli -sermaye -sermest -serpici -serpmek -serrine -serseme -sersemi -serseri -sertlik -servise -servisi -sesleme -sesuese -setaret -setlant -sevahit -sevdali -sevdasi -sevdigi -sevecen -severim -severse -seveyim -sevgili -sevgisi -sevilis -sevilme -sevimli -sevinci -sevinis -sevinme -sevisme -sevksiz -seyahat -seyelan -seyfiye -seyhlik -seyirci -seylani -seyrana -seyregi -seyret! -seytana -seytani -seyyare -seyyiat -seyyibe -sezdiri -sezgici -sezgili -sezilme -sezlong -sfagnum -sicacik -sicakca -sicilli -sicrama -siddete -siderit -sideroz -sidikli -sifahen -sifalar -sifasiz -sifilis -sifirci -sifleme -sifreci -sifreli -sifreyi -siginak -siginik -siginis -siginma -siginti -sigirci -sigisma -sigorta -sihhiye -sihirli -siirsel -siirtli -sikacak -sikalar -sikatif -sikayet -sikayim -sikesiz -sikeste -sikilik -sikilis -sikilma -sikinma -sikinti -sikirti -sikisik -sikisma -sikiysa -siklaya -sikligi -siktir! -silahci -silahli -silecek -silikat -silikon -silikoz -sililik -silinip -silinis -silinme -silinti -silisik -silisiz -silisli -silkmek -silmece -silmeci -silsile -silueet -simalli -simarik -simaris -simarma -simdiki -simdiye -simetri -simgeci -simitci -simsari -simsiki -simyaci -sinagog -sinamak -sinanay -sinanma -sinarit -sinatma -sinavda -sinayis -sincabi -sinerji -sinifli -sinifta -sinikci -sinirce -sinirli -sinolog -sinonim -sinoplu -sinsice -sintine -sinyali -sinyora -sipanin -siparis -siperli -sipidik -sipirti -sipolin -siradag -siradan -siralac -siralik -sirasiz -sirayet -sirikci -sirikla -sirilti -sirimak -siringa -siritik -siritis -siritma -sirkeci -sirkeli -sirkesi -sirketi -sirlama -sirmali -sirozlu -sirplik -sirrini -sirtaki -sirtina -sirtini -sirtlan -sirtlik -siselik -sishane -sisinme -sisiris -sisirme -siskasi -sisleme -sistemi -sistire -sitaiye -sitayis -sitemde -sitemli -sitmali -sivamak -sivanma -sivasli -sivasma -sivatma -sivekar -siverek -sivesiz -sivilce -sivinma -sivirya -sivisik -sivisma -sivrice -siyakat -siyanet -siyasal -siyaset -siyatik -siyenit -siygasi -siygaya -siyirga -siyirgi -siyirip -siyiris -siyirma -sizilti -sizinki -sizinti -sizirma -sizisiz -sizlama -skandal -skleroz -slavist -slavlar -slavlik -smacoer -snitzel -snobizm -snopluk -snorkel -sobalik -soegues -soeguet -soehret -soekmek -soekuek -soekuem -soekuen -soekuep -soekues -soeleni -soemine -soenmek -soenuek -soenuem -soevale -soevgue -soevmek -soevuep -soevues -soeylem -soeylen -soeyler -soeylev -soezcue -soezden -soezlue -soezsel -soezuem -soezuen -sofilik -sofiyan -sofraci -sofrasi -sofrayi -softaca -sofuluk -soganci -soganli -sogansi -sogukca -sogulma -sogumak -sogurma -sogurus -sogusma -sogutma -sogutus -soguyus -sohbeti -sokakta -sokulma -sokulus -sokusma -sollama -solucan -solugan -solukta -solumak -solunma -solunum -solutma -soluyus -somurma -sondasi -sonlama -sonraki -sonrasi -sonucta -sonunda -sonurgu -sonurtu -soprano -sorguya -sorlama -sormaca -sormasi -sorolop -sorulma -sorumak -sorumlu -sorunlu -sorusma -sorutma -sosyete -soytari -soyulma -soyunma -soyuntu -soyunup -soyunus -spastik -spatula -sponsor -sportif -stadyum -stajyer -stearik -stearin -sterlin -steysin -stilist -stratej -stratus -stresli -stuedyo -sualsiz -suarasi -subasar -suclama -sucukcu -sucuklu -suculuk -sudanli -suebyan -sueheda -sueheyl -suekran -suekuer -suekûti -suekûtu -suelale -suelfat -suelfit -sueline -sueluek -sueluen -suelues -suemter -suemuek -suenepe -suenger -suengue -suenmek -suennet -suerahi -suercen -suercme -suereka -suereli -sueresi -suergen -suergit -suergue -suermek -suersat -suertme -sueruem -sueruep -sueruer -suerues -sueslue -suesmek -suetana -suetcue -suetkiz -suetlac -suetlue -suetsue -suetten -suetuen -suetyen -suevari -sueyuem -suezeni -suezgec -suezgue -suezmek -suezuek -suezuem -sufloer -sufloez -suhulet -suhunet -suikast -sulamak -sulanma -sulanti -sulatma -sulfata -sultani -sululuk -sunilik -sunulma -sunulus -suracik -suradan -suratla -suratli -surtsuz -susamak -susamsi -susatma -susayan -susayis -sustali -sustaya -sutlama -suursuz -suvarim -suvarma -suyunca -suyunda -suyunun -suzidil -suzinak -taalluk -taarruz -taassuk -taassup -tababet -tabakci -tabanca -tabanli -tabetme -tabidir -tabilik -tabirle -tablaci -tablali -tablasi -tabliye -tablosu -taburcu -tacikce -tadilat -tadinda -tafraci -tafrali -tagaddi -taharet -taharri -tahinli -tahkime -tahkire -tahkiye -tahlili -tahlilî -tahliye -tahmini -tahminî -tahriri -tahrirî -tahsiye -tahtaci -tahtada -tahtali -tahtasi -tahtaya -tahtayi -tahttan -tahvili -takanak -takatli -takibat -takiben -takilip -takilis -takilma -takinak -takinir -takinma -takinti -takipci -takirti -takisma -takkeli -taklaci -taklidi -taklidî -takribi -takribî -taksali -taksici -taksimi -taksite -takunya -takvimi -takviye -talakat -talanci -talihin -talihli -talimar -talimat -talimli -talipli -talkini -tallahi -tamamen -tamanit -tambura -tamburi -tamburu -tamirat -tamirci -tamlama -tamzara -tandans -tanecik -tanecil -tanesiz -tanidik -tanilma -tanimak -tanimaz -taninis -taninli -taninma -tanisik -tanisis -tanisiz -tanisma -tanitim -tanitis -tanitli -tanitma -taniyis -tanjant -tankeri -tanlama -tanrica -tanrici -tantana -tantuni -tapasiz -tapinak -tapinis -tapinma -tapirti -taponcu -taptaze -tapusuz -tapyoka -tarafli -tarafta -tarakci -tarakli -taraksi -tarakta -taramak -taranga -taranis -taranma -taranti -taratis -taratma -tarator -taravet -tarayis -tarcini -tardiye -tarhana -tarifli -tarihce -tarihci -tarihli -tarikat -tarimci -tarizde -tarlada -tarlasi -tarlayi -tartici -tartili -tartmak -tartura -tarumar -tarziye -tasakli -tasannu -tasarim -tasasiz -tasemen -taseron -tasfiye -tasilli -tasimak -tasimsi -tasinca -tasinin -tasinir -tasinis -tasinma -tasinti -tasiran -tasirma -tasitci -tasitma -tasiyis -taskini -taslama -taslara -taslisi -tasmasi -tasrali -tasrifi -tasviri -tasvirî -tatarca -tatbiki -tatbikî -tatlica -tatlici -tatlili -tatlisi -tatliya -tavalik -taverna -tavhane -tavinda -tavirli -tavizci -tavlaci -tavlama -tavlasi -tavsama -tavsana -tavsani -tavsiye -tavugun -tavukcu -tavuklu -tavuksu -tavulga -tayalik -tayinli -taylama -tayyare -tayyoer -tazarru -tazelik -tazimat -taziyet -teaduel -teamuel -teavuen -tebdili -teberli -teberru -tebesir -tebrigi -tebriye -tecelli -tecemmu -tecezzi -tecimen -tecridi -tecziye -tedarik -tedenni -tedrici -tedricî -tefarik -tefecik -tefeuel -tefrika -teganni -tegelti -tehirli -tehlike -tekalif -tekauet -tekeden -tekelci -tekerli -tekiden -tekkesi -tekkeyi -tekleme -teklifi -tekmesi -tekmeyi -tekneci -teknesi -teknigi -tekstil -telakki -telasla -telasli -telatin -telefat -telefon -telekiz -teleuet -telgraf -telkari -tellali -telleme -telleri -tellice -tellisi -telluer -telsizi -telyazi -temaruz -temasta -tematik -tembele -temelli -temenna -temenni -teminat -tempolu -temriye -temsili -temsilî -temyize -tenakus -tenakuz -tenazur -tencere -tendonu -tenesir -tenhaca -tenisci -tenkidi -tenkidî -tenkiye -tennure -tenteli -tentene -tentuer -tenyasi -teogoni -teokrat -teoloji -teorisi -tepecik -tepeden -tepelik -tepesiz -tepilme -tepinis -tepinme -tepisir -tepisme -tepkide -tepkili -tepkime -tepsisi -terakki -teravih -terbiye -tereddi -terfian -terilen -terimli -terkibî -terkide -terleme -terligi -termiye -tersane -tersine -terslik -tertibe -terzisi -tesaduf -tesadûf -tesahup -teselli -tesirli -tesisat -teskere -tesmiye -tespihe -testere -testici -testisi -testiyi -tesviye -tetabuk -tetanos -tetebbu -tetikci -tetikte -tevafuk -tevakki -tevdiat -tevkici -tevriye -tevziat -teyelli -tezatli -tezgahi -tezkere -tezkire -tezkiye -tezleme -tezyini -tezyinî -tibbiye -tibetce -tibetli -ticaret -tifdruk -tikacli -tikamak -tikanik -tikanma -tikatma -tikilma -tikinma -tikirti -tikisik -tikisma -tiklama -tiksinc -tilavet -timarci -timarli -tinerci -tingiri -tinlama -tipasiz -tipatip -tipirti -tipkisi -tipleme -tirasci -tirasli -tirfili -tirmigi -tirnaga -tirnagi -tirpana -tirsmak -tiryaki -tislama -tisoert -titizce -titreme -tiyatro -toehmet -toereci -toereli -toereni -toerpue -toevbe! -toharca -tohumcu -tohumlu -tohumun -tokasiz -tokatci -tokatli -toklugu -tokmagi -tokurtu -tokusma -tolgali -tolksov -tolueen -tombala -tomruga -tomrugu -tomurma -tongaya -topacci -topalak -topatan -tophane -topladi -toplama -topluca -toplumu -topraga -topragi -topuklu -topuzlu -toraman -torbada -torbali -torbasi -torbaya -tornaci -tornado -tornali -torpido -tortulu -tortusu -tosbaga -toslama -tozarma -tozumak -tozuntu -tozutma -trabzon -trafosu -trajedi -trakeit -trampet -tramvay -transit -travers -treyler -tribuen -triloji -trilyon -tripoli -triptik -trityum -trolcue -trombon -trompet -tropika -tropizm -troplar -truakar -tsunami -tueccar -tuefegi -tuelyum -tuembek -tuemden -tuemlec -tuemler -tuemoer -tuemsek -tuemuer -tueneli -tueneme -tuenmek -tuepcue -tueplue -tuerban -tuerbin -tuerdes -tueredi -tuereme -tuerkce -tuerkue -tuerlue -tueruem -tueruez -tuetmek -tuetmez -tuetsue -tuetuen -tuevana -tueveyc -tueyler -tueylue -tueymek -tueytop -tuezuek -tufeyli -tuglaci -tuglasi -tugrali -tulumba -tulumcu -tunceli -tunuslu -turanci -turanli -turizmi -turkuaz -turlama -turnaci -turnasi -turnayi -turnike -turnuva -tursucu -tursusu -tursuya -turuncu -tuslama -tutacak -tutamac -tutamak -tutanak -tutarak -tutarga -tutarik -tutarli -tutkali -tutkulu -tutkuya -tutmasi -tuttugu -tutuklu -tutulma -tutulum -tutulur -tutulus -tutumlu -tutunma -tutunus -tuturuk -tutusma -tuvalet -tuzakci -tuzlama -tuzluca -tuzluya -tuzumsu -tvistci -uckurlu -uclanma -ucukluk -ucundan -ucurmak -ucurtma -ucurumu -ucusmak -ucuzdur -ucuzluk -ucuzuna -uecayak -uecerli -uecgeni -uecguel -uecleme -uecluek -uecreti -uefleme -uelesme -uelkece -uelkesi -uemitli -ueniter -uenleme -uensuez -ueremek -ueremik -ueretec -ueretim -ueretis -ueretme -uereyis -uerguep -uerkegi -uerkmek -uerkues -uerodel -uerolog -uerueme -ueryani -uesenme -ueskuef -ueslubu -uestlue -uestten -uestuen -uesueme -uetopik -uetopya -ueveyik -ueveyme -ueyelik -uezengi -uezenti -uezguen -uezluek -uezueme -uezuenc -ufaklik -ufaktan -ufalama -ufalmak -ufaltma -uflamak -uflayip -ufuksuz -ugramak -ugranma -ugrasma -ugratma -ugruluk -ugrunda -ugunmak -ugurluk -ugursuz -uhuvvet -ukalaca -ulanmak -ulasimi -ulasmak -ulayici -ulufeci -ululama -ulussuz -ulutmak -ulviyet -umarlar -umarsiz -umdurma -umudunu -umulmak -umutsuz -unculuk -unlamak -unlanma -unundan -unutkan -unutmak -unutmaz -unutmus -unvanli -upuygun -uranues -uranyum -urganci -urlasma -usaklik -usangin -usanmak -usanmaz -usculuk -uskumru -uskurlu -uslanma -usluluk -ustalik -ustamin -usturpa -usuldan -usulden -utangac -utangan -utanmak -utanmaz -utulmak -uyaksiz -uyanmak -uyarici -uyarlik -uyarmak -uyarsiz -uyartma -uyduluk -uydurma -uyduruk -uygarca -uygurca -uykudan -uykuluk -uykusuz -uylasim -uylasma -uymamak -uyruklu -uysalca -uyulmak -uyumsuz -uyunmak -uyuskan -uyusmak -uyutmak -uyutucu -uyuzluk -uzadiya -uzaklik -uzaktan -uzanmak -uzatmak -uzatmaz -uzlasim -uzlasma -uzundur -uzunluk -vaadini -vabeste -vadesiz -vadetme -vagonet -vahamet -vahsice -vaizlik -vakarli -vakfiye -vakitce -vakitli -vaklama -vaktini -vakumlu -valilik -vallahi -vanilya -varakci -varakli -vardaci -vardela -vardiya -vareste -varidat -varilma -varisli -variyet -varliga -varligi -varolus -varsagi -varsani -vartayi -varyant -varyete -vasifli -vasilik -vasiyet -vaveyla -vazelin -vazetme -vaziyet -vefakar -vefasiz -vehimli -vekalet -vektoer -veladet -velakin -velayet -velense -veliaht -velilik -velvele -veranda -veraset -verecek -veremli -vereyim -vergici -vergili -vergisi -vergiye -verilir -verilis -verilme -verimli -verince -verinti -verirse -vermeli -vermeye -verniye -vesaire -vesayet -vesvese -veyahut -vezaret -vezinli -vezneci -vibriyo -vicahen -vicdani -vidasiz -videocu -vidosuz -viglaci -vilayet -vinilti -vinlama -virajli -virguel -virilti -virlama -virolog -visneli -vitamin -vitesli -vizilti -viziyer -vizlama -vizonet -volfram -voyvoda -vuecuda -vuekela -vuezera -vukuflu -vurdugu -vurdulu -vurduya -vurgulu -vurgunu -vurgusu -vurmali -vurulma -vurulus -vurumcu -vurunma -vuruntu -vurusma -yabanci -yabanil -yabansi -yadigar -yadirgi -yadsima -yaftayi -yagardi -yaghane -yagilik -yagilti -yagimsi -yaginin -yagisli -yagiyla -yagiyor -yaglama -yagmaci -yagmaya -yagmuru -yahnisi -yakacak -yakadan -yakalik -yakamoz -yakarca -yakarim -yakaris -yakarma -yakasiz -yakilma -yakimci -yakinda -yakinen -yakinis -yakinma -yakinti -yakisik -yakisir -yakisma -yakitci -yakutca -yalabik -yalamak -yalamis -yalamuk -yalanci -yalanis -yalanma -yalatma -yalavac -yalayip -yalayis -yalelli -yalitim -yalitma -yalpili -yamalak -yamalik -yamalma -yamamak -yamanma -yamatma -yamcili -yampiri -yamulma -yanakli -yanarca -yanasik -yanasma -yangili -yangina -yangini -yangisi -yaniksi -yanilgi -yanilir -yanilis -yanilma -yanilti -yaninda -yanitli -yankili -yanlama -yanlisi -yansama -yansica -yansima -yapakci -yapalak -yaparsa -yapilis -yapilma -yapimci -yapinma -yapinti -yapisak -yapisal -yapisan -yapisik -yapisma -yapragi -yaptigi -yaradan -yaramak -yaramaz -yaranin -yaranis -yaranma -yararci -yararli -yarasik -yarasir -yarasma -yaratik -yaratim -yaratir -yaratis -yaratma -yaratti -yarence -yargici -yargili -yargisi -yargiya -yaricap -yarilip -yarilir -yarilma -yarimca -yarimci -yarinki -yarinti -yarisci -yarisim -yarisma -yariyil -yarmasi -yasakci -yasakli -yasamak -yasamli -yasanak -yasanma -yasanti -yasarma -yasasin -yasasiz -yasatma -yasayan -yasayis -yasemin -yasinda -yaslama -yaslara -yaslari -yaslica -yassica -yastama -yastiga -yastigi -yatagan -yatakci -yatakli -yatalak -yatarim -yatilma -yatinca -yatirim -yatirma -yatisiz -yatisma -yatsiya -yattigi -yatugan -yavasca -yavrum! -yavrusu -yavsani -yavuklu -yavuzca -yayalik -yaygara -yayilim -yayilir -yayilis -yayilma -yayimci -yayinci -yayinik -yayinim -yayinma -yayinti -yaylaci -yaylama -yaymaca -yaymaci -yazanak -yazgici -yazilan -yazilim -yazilis -yazilma -yazimci -yazinci -yazinin -yazisma -yazlama -yazliga -yazmaci -yazmasi -yedekci -yedekli -yedekte -yediden -yedigen -yedigir -yediler -yedilik -yedilme -yedinci -yedirip -yedirir -yedirme -yediser -yegleme -yekinis -yekinme -yekpare -yelalim -yeleken -yelkeni -yelleme -yelpaze -yelseme -yelvesi -yemeden -yemedim -yemekli -yememek -yemenin -yemenli -yemeyen -yeminli -yemisci -yemisen -yemisli -yemleme -yengeyi -yeniden -yenilgi -yenilik -yenilir -yenilis -yenilme -yenimsi -yenirce -yenisme -yenmise -yepelek -yeperek -yepyeni -yeralti -yerberi -yergici -yeridir -yerilme -yerinde -yerinel -yerinme -yerlere -yerleri -yermeci -yermeli -yeroete -yeserme -yeserti -yesilli -yetenek -yeterli -yetinme -yetirme -yetisek -yetisim -yetisme -yetkeli -yetkili -yetkisi -yetmise -yevmiye -yigidin -yigilim -yigilip -yigilma -yiginak -yiginla -yiginti -yigisik -yigisim -yigisma -yigitce -yikamac -yikamak -yikanis -yikanma -yikatma -yikayis -yikilir -yikilis -yikilma -yikilsa -yikimci -yikinti -yikisma -yikmaci -yilanci -yilanin -yilbasi -yildiri -yildizi -yilisik -yilisma -yilkici -yillama -yiprama -yirlama -yirtici -yirtlak -yirtmac -yirtmak -yirtmis -yitirir -yitiris -yitirme -yivacar -yivisik -yivisma -yivleme -yiyecek -yiyimli -yiyinti -yobazca -yoenbul -yoenden -yoendes -yoenlue -yoentem -yoeruek -yogalma -yogurdu -yogurma -yogusma -yoklama -yoklugu -yoksula -yoksulu -yokuscu -yokuslu -yokusta -yokusun -yolcuya -yoldasi -yollama -yollara -yollari -yolmaya -yolunda -yolunma -yoluyla -yoncasi -yongayi -yontmak -yontucu -yonulma -yordami -yorgunu -yortmak -yorulma -yorulur -yorumcu -yosmaca -yosmasi -yosunlu -yuekcue -yueklem -yueklue -yueksek -yuekuem -yuekuen -yuelgue -yueluek -yuenlue -yuerege -yueregi -yuerue! -yueruek -yueruer -yuesrue -yuezden -yuezgec -yuezler -yuezlue -yuezmek -yuezuek -yuezuen -yuezuep -yuezues -yuezyil -yufkaci -yukari! -yumruga -yumrugu -yumulma -yumurta -yumusak -yunanca -yunanli -yurtluk -yurtsal -yurtsuz -yurttas -yutulma -yutulur -zabitan -zadegan -zafiyet -zaganos -zagarci -zaglama -zahirde -zahiren -zahmete -zalimce -zamanla -zamanli -zambagi -zampara -zannina -zaptiye -zarafet -zararda -zararin -zararli -zargana -zarifce -zarlari -zartayi -zaruret -zavalli -zebella -zedesiz -zehapta -zehirli -zekasiz -zekavet -zelzele -zemheri -zeminli -zendost -zengini -zenneci -zenneye -zephiye -zerdali -zerdeva -zerrece -zerresi -zevahir -zeveban -zevkine -zevkini -zevksiz -zevkten -zeytini -zeytuni -zibarma -ziddina -zihayat -zihince -zihinde -zihlama -zihnine -zihnini -zihniye -zilkade -zimbali -zimpara -zincire -zinciri -ziplama -ziplaya -zirdeli -zirhsiz -zirilti -zirlama -zirtlak -zirveye -ziyadar -ziyafet -ziyanla -ziyaret -ziyasiz -zooloji -zoospor -zorbaca -zorgulu -zorlama -zorlugu -zorunda -zorunlu -zoruyla -zueluef -zuerafa -zuerefa -zuhurat -zumlama -zurnaci -zurnada diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/da.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/da.locallang.xlf deleted file mode 100644 index 1e31ecd..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/da.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Beklager, tjenesten er ude af drift. - - - CAPTCHA image for SPAM prevention - CAPTCHA billede for SPAM beskyttelse - - - Please enter here the word as displayed in the picture. - Indtast venligst det ord der er vist på billedet. - - - Please enter here the word as displayed in the picture. - Indtast venligst det ord der er vist på billedet. - - - This is to prevent spamming. - Dette er for at beskytte imod misbrug. - - - If you can't read the word, - Hvis du ikke kan læse ordet, - - - If you can't read the word, - Hvis du ikke kan læse ordet, - - - click here - tryk her - - - click here - tryk her - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang.xlf deleted file mode 100644 index 8d88d8e..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang.xlf +++ /dev/null @@ -1,160 +0,0 @@ - - - -
    - - - Make GD Font for freeCap CAPTCHA - GD-Schriftart für freeCap-CAPTCHA erzeugen - - - Characters included in font: - Zeichen in Schriftart: - - - Numbers only (0-9) - nur Ziffern (0-9) - - - ASCII lowercase letters (a-z) - Kleine ASCII-Buchstaben (a-z) - - - ISO 8859-2 lowercase letters (a-z,ß-ţ) - Kleine ISO 8859-2-Buchstaben (a-z,ß-ţ) - - - Character width: - Zeichenbreite: - - - Character height: - Zeichenhöhe: - - - Byte order (Endianness): - Byte-Reihenfolge (Endian): - - - Little-endian - Little-Endian - - - Big-endian - Big-Endian - - - Path to source TTF font file relative to TYPO3 site: - Pfad zur TTF-Schriftartdatei relativ zur TYPO3-Site: - - - Prefix of GD font file name to create: - Präfix für zu erzeugende GD-Schriftartdatei: - - - Make font - Schriftart erzeugen - - - The following TTF font file is used as source: - Folgende TTF-Schriftart wird als Quelle verwendet: - - - The source TTF font file could not be found: - Die TTF-Schriftart-Quelldatei konnte nicht gefunden werden: - - - The following PNG image was created: - Folgendes PNG-Bild wurde erzeugt: - - - The following GD font file was created from the above image: - Folgende GD-Schriftartdatei wurde aus obigem Bild erzeugt: - - - The following GD font file could not be created: - Folgende GD-Schriftartdatei konnte nicht erzeugt werden: - - - Sorry, service is interrupted. - Der Dienst ist leider unterbrochen. - - - CAPTCHA image for SPAM prevention - CAPTCHA-Bild zum Spam-Schutz - - - Please enter here the word as displayed in the picture. - Bitte geben Sie hier das Wort ein, das im Bild angezeigt wird. - - - Please enter here the word as displayed in the picture. - Gib hier das Wort ein, das im Bild angezeigt wird. - - - This is to prevent spamming. - Dies dient der Spam-Abwehr. - - - If you can't read the word, - Wenn Sie das Wort nicht lesen können, - - - If you can't read the word, - Wenn du das Wort nicht lesen kannst, - - - click here - bitte hier klicken - - - click here - hier klicken - - - Click here for audio version of the word to enter. - Klicken Sie hier, um das einzugebende Wort anzuhören. - - - Click here for audio version of the word to enter. - Klicke hier, um das einzugebende Wort anzuhören. - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Entschuldigung, wir können nicht automatisch ein neues Bild zeigen. Schicken Sie das Formular ab und ein neues Bild wird geladen. - - - Sorry, we cannot play the word of the image. - Entschuldigung, wir können das Wort aus dem Bild nicht abspielen. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang_mod.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang_mod.xlf deleted file mode 100644 index 608ec93..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/de.locallang_mod.xlf +++ /dev/null @@ -1,20 +0,0 @@ - - - -
    - - - GD Font Maker for freeCap CAPTCHA - GD-Schriftartgenerator für freeCap CAPTCHA - - - Makes GD font files for use by freeCap CAPTCHA. - Erzeugung von GD-Schriftartdateien zur Verwendung mit freeCap CAPTCHA. - - - GD Font Maker - GD-Schriftartgenerator - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/es.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/es.locallang.xlf deleted file mode 100644 index c3dae4d..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/es.locallang.xlf +++ /dev/null @@ -1,96 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Lo sentimos, el servicio está interrumpido. - - - CAPTCHA image for SPAM prevention - Imagen CAPTCHA para prevenir el uso abusivo - - - Please enter here the word as displayed in the picture. - Favor entrar las letras tal como aparecen en la imagen. - - - Please enter here the word as displayed in the picture. - Favor entrar las letras tal como aparecen en la imagen. - - - This is to prevent spamming. - Esto es para prevenir los abusos. - - - If you can't read the word, - Si no puede leer toda las letras, - - - If you can't read the word, - Si no puedes leer todas las letras, - - - click here - haga clic aquí - - - click here - haz clic aquí - - - Click here for audio version of the word to enter. - Haga clic aquí para oír una versión audio de las letras. - - - Click here for audio version of the word to enter. - Haz clic aquí para oír una versión audio de las letras. - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - Las letras entradas no son correctas. - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - Favor entrar las letras tal como aparecen en la imagen. Las letras entradas no son correctas. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/fi.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/fi.locallang.xlf deleted file mode 100644 index 2a09120..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/fi.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Pahoittelut, palvelu keskeytettiin. - - - CAPTCHA image for SPAM prevention - CAPTCHA kuva roskapostin välttämiseksi - - - Please enter here the word as displayed in the picture. - Kirjoita tähän kuvassa näkyvä sana. - - - Please enter here the word as displayed in the picture. - Kirjoita tähän kuvassa näkyvä sana - - - This is to prevent spamming. - (varmistamme ettei viesti tule haittaohjelmasta). - - - If you can't read the word, - Jos et saa sanasta selvää, - - - If you can't read the word, - Jos et saa sanasta selvää, - - - click here - klikkaa tästä uusi kuva - - - click here - klikkaa tästä uusi kuva - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang.xlf deleted file mode 100644 index cf63786..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang.xlf +++ /dev/null @@ -1,204 +0,0 @@ - - - -
    - - - Make GD Font for freeCap CAPTCHA - Fabrication d'une police de caractères GD pour freeCap CAPTCHA - - - A GD font for freeCap CAPTCHA was created - Un fichier de police de caractères GD a été créé pour freeCap CAPTCHA - - - Characters included in font: - Caractères inclus dans la police: - - - Numbers only (0-9) - Chiffres seulement (0-9) - - - ASCII lowercase letters (a-z) - Lettres minuscules ASCII (a-z) - - - ISO 8859-2 lowercase letters (a-z,ß-ţ) - Lettres minuscules ISO 8859-2 (a-z,ß-ţ) - - - Character width: - Largeur des caractères: - - - Character height: - Hauteur des caractères: - - - Byte order (Endianness): - Ordre des octets (endianness): - - - Little-endian - Petit-boutiste - - - Big-endian - Gros-boutiste - - - Path to source TTF font file relative to TYPO3 site: - Chemin jusqu'au fichier de police TTF d'entrée relativement au site TYPO3: - - - Prefix of GD font file name to create: - Préfixe du nom du fichier de police GD à créer: - - - Make font - Fabriquer la police - - - The following TTF font file is used as source: - Le fichier de police TTF suivant est utilisé en entrée: - - - The source TTF font file could not be found: - Le fichier de police TTF d'entrée n'a pas été trouvé: - - - The following PNG image was created: - L'image PNG suivante a été créée: - - - Font image created from the TTF font file - Image créée à partir du fichier de police TTF - - - The following GD font file was created from the above image: - Le fichier de police GD suivant a été créé à partir de l'image ci-haut: - - - The following GD font file could not be created: - Le fichier de police GD suivant n'a pas pu être créé: - - - Sorry, service is interrupted. - Le service est interrompu. - - - CAPTCHA image for SPAM prevention - Image CAPTCHA pour prévenir l'utilisation abusive - - - Please enter here the word as displayed in the picture. - Veuillez entrer ici le mot ou le nombre tel qu'il apparaît dans l'image. - - - Please enter here the word as displayed in the picture. - Entre ici le mot ou le nombre tel qu'il apparaît dans l'image. - - - This is to prevent spamming. - Ceci vise à prévenir les abus. - - - If you can't read the word, - Si vous ne pouvez lire toutes les lettres ou chiffres, - - - If you can't read the word, - Si tu ne peux pas lire toutes les lettres ou chiffres, - - - click here - cliquez ici - - - click here - clique ici - - - Click here for audio version of the word to enter. - Cliquez ici pour une version audio du mot ou du nombre à entrer. - - - Click here for audio version of the word to enter. - Clique ici pour une version audio du mot ou du nombre à entrer. - - - For - Cliquez sur ce lien pour une - - - For - Cliquez sur ce lien pour une - - - the audio version of the word - version audio du mot ou du nombre - - - the audio version of the word - version audio du mot ou du nombre - - - click on this link. - à entrer. - - - click on this link. - à entrer. - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Désolé, nous ne pouvons présenter une nouvelle image. Envoyez le formulaire et une nouvelle image sera présentée. - - - Sorry, we cannot play the word of the image. - Désolé, nous ne pouvons jouer le mot ou le nombre à entrer. - - - - Désolé, nous ne pouvons présenter une nouvelle image. Envoie le formulaire et une nouvelle image sera présentée. - - - Please enter a file name of length 1 to 255 characters. - Veuillez entrer un nom contenant entre 1 et 255 caractères. - - - Please enter a number betwwen 5 and 255. - Veuillez entrer un nombre entre 5 et 255. - - - A file with the given name could not be found. - Aucun fichier portant ce nom n'a été trouvé. - - - The specified file is not a True Type Font file. - Le fichier spécifié ne contient pas une police de caractères True Type Font. - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - Veuillez entrer le mot ou le nombre tel qu'il apparaît dans l'image. La valeur entrée était incorrecte. - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - Entre le mot ou le nombre tel qu'il apparaît dans l'image. La valeur entrée était incorrecte. - - - Please enter the path to the source TTF font file relative to TYPO3 site. - Veuillez entrer le chemin jusqu'au fichier de police TTF relativement au site TYPO3. - - - Please enter the path to the source TTF font file relative to TYPO3 site. - Entre le chemin jusqu'au fichier de police TTF relativement au site TYPO3. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang_mod.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang_mod.xlf deleted file mode 100644 index 6effa80..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/fr.locallang_mod.xlf +++ /dev/null @@ -1,20 +0,0 @@ - - - -
    - - - GD Font Maker for freeCap CAPTCHA - Polices de caratères GD pour freeCap CAPTCHA - - - Makes GD font files for use by freeCap CAPTCHA. - Ce module permet de fabriquer des polices de caratères GD pour utilisation par freeCap CAPTCHA. - - - GD Font Maker - Polices GD - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/it.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/it.locallang.xlf deleted file mode 100644 index 24e01ec..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/it.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Immagine CAPTCHA per prevenire lo SPAM - - - Please enter here the word as displayed in the picture. - Per favore, inserisci la parola che vedi nell'immagine seguente. - - - Please enter here the word as displayed in the picture. - Inserisci la parola che vedi nell'immagine seguente. - - - This is to prevent spamming. - Questo serve per prevenire lo SPAM. - - - If you can't read the word, - Se non riesci a leggere la parola, - - - If you can't read the word, - Se non riesci a leggere la parola, - - - click here - clicca qui - - - click here - clicca qui - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang.xlf deleted file mode 100644 index 79cfa62..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang.xlf +++ /dev/null @@ -1,152 +0,0 @@ - - - -
    - - - Make GD Font for freeCap CAPTCHA - - - A GD font for freeCap CAPTCHA was created - - - Characters included in font: - - - Numbers only (0-9) - - - ASCII lowercase letters (a-z) - - - ISO 8859-2 lowercase letters (a-z,ß-ţ) - - - Character width: - - - Character height: - - - Byte order (Endianness): - - - Little-endian - - - Big-endian - - - Path to source TTF font file relative to TYPO3 site: - - - Prefix of GD font file name to create: - - - Make font - - - The following TTF font file is used as source: - - - The source TTF font file could not be found: - - - The following PNG image was created: - - - Font image created from the TTF font file - - - The following GD font file was created from the above image: - - - The following GD font file could not be created: - - - Sorry, service is interrupted. - - - CAPTCHA image for SPAM prevention - - - Please enter here the word as displayed in the picture. - - - Please enter here the word as displayed in the picture. - - - This is to prevent spamming. - - - If you can't read the word, - - - If you can't read the word, - - - click here - - - click here - - - Click here for audio version of the word to enter. - - - Click here for audio version of the word to enter. - - - For - - - For - - - the audio version of the word - - - the audio version of the word - - - click on this link. - - - click on this link. - - - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - Sorry, we cannot play the word of the image. - - - Please enter a string of length 1 to 255 characters. - - - Please enter a number betwwen 5 and 255. - - - A file with the given name could not be found. - - - The specified file is not a True Type Font file. - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - - - Please enter the word or number as it appears in the image. The entered value was incorrect. - - - Please enter the path to the source TTF font file relative to TYPO3 site. - - - Please enter the path to the source TTF font file relative to TYPO3 site. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang_mod.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang_mod.xlf deleted file mode 100644 index 0e0ebfa..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/locallang_mod.xlf +++ /dev/null @@ -1,17 +0,0 @@ - - - -
    - - - GD Font Maker for freeCap CAPTCHA - - - Makes GD font files for use by freeCap CAPTCHA. - - - GD Font Maker - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/nl.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/nl.locallang.xlf deleted file mode 100644 index bec6f2d..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/nl.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Service is onderbroken. - - - CAPTCHA image for SPAM prevention - CAPTCHA afbeelding om SPAM tegen te gaan - - - Please enter here the word as displayed in the picture. - Voer hier het woord in zoals getoond in de afbeelding. - - - Please enter here the word as displayed in the picture. - Voer hier het woord in zoals getoond in de afbeelding. - - - This is to prevent spamming. - Dit is om spam tegen te gaan. - - - If you can't read the word, - Als u het woord niet kunt lezen, - - - If you can't read the word, - Als je het woord niet kunt lezen, - - - click here - klik hier - - - click here - klik hier - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/pl.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/pl.locallang.xlf deleted file mode 100644 index dc6eb19..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/pl.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Desculpe, o serviço foi suspenso. - - - CAPTCHA image for SPAM prevention - Obrazek zabezpieczający przed spamem - - - Please enter here the word as displayed in the picture. - Wprowadź kod widoczny na obrazku - - - Please enter here the word as displayed in the picture. - Wprowadź kod widoczny na obrazku - - - This is to prevent spamming. - To służy ochronie przed spamem - - - If you can't read the word, - Jeśli nie możesz przeczytać kodu, - - - If you can't read the word, - Jeśli nie możesz przeczytać kodu, - - - click here - kliknij tu - - - click here - kliknij tu - - - Click here for audio version of the word to enter. - kliknij tu aby odsłuchać kod - - - Click here for audio version of the word to enter. - kliknij tu aby odsłuchać kod - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Przepraszamy ale nie możemy załadować nowego obrazka. Kliknij dalej a nowy obrazek załaduje się automatycznie. - - - Sorry, we cannot play the word of the image. - Przepraszamy, nie możemy odtworzyć wyświetlonego kodu - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/pt.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/pt.locallang.xlf deleted file mode 100644 index fbc44fd..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/pt.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Desculpe, o serviço foi suspenso. - - - CAPTCHA image for SPAM prevention - Imagem CAPTCHA para prevenir "spam" - - - Please enter here the word as displayed in the picture. - Por favor introduza aqui a palavra escrita na imagem. - - - Please enter here the word as displayed in the picture. - Por favor introduza aqui a palavra escrita na imagem. - - - This is to prevent spamming. - Esta verificação previne a ocorrência de "spam". - - - If you can't read the word, - Se não consegue ler a palavra, - - - If you can't read the word, - Se não consegue ler a palavra, - - - click here - clique aqui para gerar uma nova - - - click here - clique aqui para gerar uma nova - - - Click here for audio version of the word to enter. - Clique aqui para ouvir uma versão audio do código a digitar. - - - Click here for audio version of the word to enter. - Clique aqui para ouvir uma versão audio do código a digitar. - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/pt_BR.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/pt_BR.locallang.xlf deleted file mode 100644 index 8df5467..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/pt_BR.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Desculpe, o serviço foi interrompido. - - - CAPTCHA image for SPAM prevention - Imagem CAPTCHA para prevenção de SPAM - - - Please enter here the word as displayed in the picture. - Por favor digite a palavra exibida na imagem. - - - Please enter here the word as displayed in the picture. - Por favor digite a palavra exibida na imagem. - - - This is to prevent spamming. - Isto serve para prevenir lixo eletrônico. - - - If you can't read the word, - Se você não conseguir ler a palavra, - - - If you can't read the word, - Se você não conseguir ler a palavra, - - - click here - clique aqui - - - click here - clique aqui - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang.xlf deleted file mode 100644 index 719e3bb..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang.xlf +++ /dev/null @@ -1,160 +0,0 @@ - - - -
    - - - Make GD Font for freeCap CAPTCHA - Создать GD шрифт для freeCap CAPTCHA - - - Characters included in font: - Символы, которые следует включить в шрифт: - - - Numbers only (0-9) - Только цифры (0-9) - - - ASCII lowercase letters (a-z) - Символы ASCII в нижнем регистре (a-z) - - - ISO 8859-2 lowercase letters (a-z,ß-ţ) - ISO 8859-2 в нижнем регистре (a-z,ß-ţ) - - - Character width: - Ширина символа: - - - Character height: - Высота символа: - - - Byte order (Endianness): - Порядок байт (Endianness): - - - Little-endian - От младшего к старшему (Little-endian) - - - Big-endian - От старшего к младшему (Big-endian) - - - Path to source TTF font file relative to TYPO3 site: - Путь к исходному файлу TTF шрифта относительно сайта TYPO3: - - - Prefix of GD font file name to create: - Префикс к создаваемому GD файлу шрифта: - - - Make font - Создать шрифт - - - The following TTF font file is used as source: - В качестве источника использован следующий TTF файл шрифта: - - - The source TTF font file could not be found: - Невозможно найти исходный TTF файл шрифта: - - - The following PNG image was created: - Созданное изображение PNG: - - - The following GD font file was created from the above image: - Следующий файл GD шрифта был создан из этого изображения: - - - The following GD font file could not be created: - Невозможно создать следующий файл GD шрифта: - - - Sorry, service is interrupted. - Извините, сервис недоступен. - - - CAPTCHA image for SPAM prevention - Изображение CAPTCHA для предотвращения спама - - - Please enter here the word as displayed in the picture. - Введите слово, показанное на картинке. - - - Please enter here the word as displayed in the picture. - Введите слово, показанное на картинке. - - - This is to prevent spamming. - Необходимо для предотвращения спама. - - - If you can't read the word, - Если слово непонятно, - - - If you can't read the word, - Если слово непонятно, - - - click here - нажмите здесь. - - - click here - нажмите здесь - - - Click here for audio version of the word to enter. - Нажмите здесь, чтобы прослушать вводимое слово. - - - Click here for audio version of the word to enter. - Нажмите здесь, чтобы прослушать вводимое слово. - - - For - Для - - - For - Для - - - the audio version of the word - аудио версия слова - - - the audio version of the word - аудио версия слова - - - click on this link. - щелкните по этой ссылке. - - - click on this link. - щелкните по этой ссылке. - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Извините, но невозможно перезагрузить новое изображение. Подтвердите форму, чтобы появилось другое изображение. - - - Sorry, we cannot play the word of the image. - Извините, невозможно воспроизвести изображенное слово. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang_mod.xlf b/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang_mod.xlf deleted file mode 100644 index 820a2e5..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Language/ru.locallang_mod.xlf +++ /dev/null @@ -1,20 +0,0 @@ - - - -
    - - - GD Font Maker for freeCap CAPTCHA - Генератор шрифтов GD для расширения freeCap CAPTCHA - - - Makes GD font files for use by freeCap CAPTCHA. - Формирует файлы GD шрифта для использования во freeCap CAPTCHA. - - - GD Font Maker - Генератор шрифтов GD - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaElement.html b/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaElement.html deleted file mode 100644 index 5c955b6..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaElement.html +++ /dev/null @@ -1,9 +0,0 @@ -{namespace freeCap=SJBR\SrFreecap\ViewHelpers} -
    - -
    -
    - - - -
    \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaHtmlTemplateInsert.html b/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaHtmlTemplateInsert.html deleted file mode 100644 index b3ed267..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Private/Partials/CaptchaHtmlTemplateInsert.html +++ /dev/null @@ -1,8 +0,0 @@ - -
    - - - ###SR_FREECAP_IMAGE### - ###SR_FREECAP_ACCESSIBLE### -
    - diff --git a/typo3conf/ext/sr_freecap/Resources/Public/Icons/Extension.svg b/typo3conf/ext/sr_freecap/Resources/Public/Icons/Extension.svg deleted file mode 100644 index 9afcb95..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Public/Icons/Extension.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/typo3conf/ext/sr_freecap/Resources/Public/Images/audio.png b/typo3conf/ext/sr_freecap/Resources/Public/Images/audio.png deleted file mode 100644 index 39030ff..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Public/Images/audio.png and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Public/Images/moduleicon.gif b/typo3conf/ext/sr_freecap/Resources/Public/Images/moduleicon.gif deleted file mode 100644 index 37abb9f..0000000 Binary files a/typo3conf/ext/sr_freecap/Resources/Public/Images/moduleicon.gif and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/Resources/Public/JavaScript/freeCap.js b/typo3conf/ext/sr_freecap/Resources/Public/JavaScript/freeCap.js deleted file mode 100644 index a1ba031..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Public/JavaScript/freeCap.js +++ /dev/null @@ -1,108 +0,0 @@ -/*************************************************************** -* Copyright notice -* -* (c) 2007-2020 Stanislas Rolland -* 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 2 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. -* A copy is found in the textfile GPL.txt and important notices to the license -* from the author is found in LICENSE.txt distributed with these scripts. -* -* -* 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! -***************************************************************/ -/* - * Javascript functions for TYPO3 extension freeCap CAPTCHA (sr_freecap) - * - */ -(function () { - SrFreecap = { - - /* - * Loads a new freeCap image - * - * @param string id: identifier used to uniiquely identify the image - * @param string noImageMessage: message to be displayed if the image element cannot be found - * @return void - */ - newImage: function (id, noImageMessage) { - if (document.getElementById) { - // extract image name from image source (i.e. cut off ?randomness) - var theImage = document.getElementById('tx_srfreecap_captcha_image_' + id); - var parts = theImage.src.split('&set'); - theImage.src = parts[0] + '&set=' + Math.round(Math.random()*100000); - } else { - alert(noImageMessage ? noImageMessage : 'Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded.'); - } - }, - - /* - * Plays the audio captcha - * - * @param string id: identifier used to uniquely identify the wav file - * @param string wavUrl: url of the wave file generating script - * @param string noPlayMessage: message to be displayed if the audio file cannot be rendered - * @return void - */ - playCaptcha: function (id, wavUrl, noPlayMessage) { - if (document.getElementById) { - var theAudio = document.getElementById('tx_srfreecap_captcha_playAudio_' + id); - var url = wavUrl + '&set=' + Math.round(Math.random()*100000); - while (theAudio.firstChild) { - theAudio.removeChild(theAudio.firstChild); - } - var audioElement = document.createElement('audio'); - if (audioElement.canPlayType) { - // HTML 5 audio - if (audioElement.canPlayType('audio/mpeg') === 'maybe' || audioElement.canPlayType('audio/mpeg') === 'probably') { - url = url.replace('formatName=wav', 'formatName=mp3'); - } - audioElement.setAttribute('src', url); - audioElement.setAttribute('id', 'tx_srfreecap_captcha_playAudio_audio' + id); - theAudio.appendChild(audioElement); - audioElement.load(); - audioElement.play(); - } else { - url = url.replace('formatName=wav', 'formatName=mp3'); - // In IE, use the default player for audio/mpeg, probably Windows Media Player - var objectElement = document.createElement('object'); - objectElement.setAttribute('id', 'tx_srfreecap_captcha_playAudio_object' + id); - objectElement.setAttribute('type', 'audio/mpeg'); - theAudio.appendChild(objectElement); - objectElement.style.height = 0; - objectElement.style.width = 0; - var parameters = { - autoplay: 'true', - autostart: 'true', - controller: 'false', - showcontrols: 'false' - }; - for (var parameter in parameters) { - if (parameters.hasOwnProperty(parameter)) { - var paramElement = document.createElement('param'); - paramElement.setAttribute('name', parameter); - paramElement.setAttribute('value', parameters[parameter]); - paramElement = objectElement.appendChild(paramElement); - } - } - objectElement.setAttribute('altHtml', '' + (noPlayMessage ? noPlayMessage : 'Sorry, we cannot play the word of the image.') + ''); - } - } else { - alert(noPlayMessage ? noPlayMessage : 'Sorry, we cannot play the word of the image.'); - } - } - } -})(); diff --git a/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/CaptchaElement.css b/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/CaptchaElement.css deleted file mode 100644 index 0f8e18a..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/CaptchaElement.css +++ /dev/null @@ -1,28 +0,0 @@ -.tx-srfreecap-captcha label { - display: inline-block; - width: 180px; -} -img.tx-srfreecap-image { - margin-left: 1em; - margin-right: 1em; - vertical-align: middle; -} -.tx-srfreecap-image-accessible { - background-color: transparent; - vertical-align: middle; -} -.tx-srfreecap-accessible-link { - float: right; - margin-right: 7em; - vertical-align: middle; - width: 10em; -} -.tx-srfreecap-cant-read { - display: inline-block; - width: 180px; -} -.tx-srfreecap-cant-read a:link { - background-color: transparent; - font-weight: bold; - text-decoration: none; -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/FontMaker.css b/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/FontMaker.css deleted file mode 100644 index 29216f7..0000000 --- a/typo3conf/ext/sr_freecap/Resources/Public/StyleSheets/FontMaker.css +++ /dev/null @@ -1,41 +0,0 @@ -.sjbr-freecap-font-maker dl { - margin: 0; - padding: 1em 0 0 0; -} -.sjbr-freecap-font-maker dt, -.sjbr-freecap-font-maker dd { - float: left; - margin: 0; - padding: 0 0 .5em 0; -} -.sjbr-freecap-font-maker dt { - clear: left; - margin-top: 5px; - padding-right: 1em; - text-align: right; - width: 25%; -} -.sjbr-freecap-font-maker dd { - margin-top: 8px; - text-align: left; - width: 50%; -} -.sjbr-freecap-font-maker dd input { - margin-bottom: 5px; -} -.sjbr-freecap-font-maker dd label { - margin-bottom: 3px; - padding: 0 0 0 .5em; - vertical-align: top; -} -.sjbr-freecap-font-maker ul.errors li { - font-weight: bold; -} -.sjbr-freecap-font-maker-created dl { - padding: 1em; -} -.sjbr-freecap-font-maker-created dd { - margin-bottom: 10px; - margin-left: 20px; - margin-top: 5px; -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/composer.json b/typo3conf/ext/sr_freecap/composer.json deleted file mode 100644 index 7317241..0000000 --- a/typo3conf/ext/sr_freecap/composer.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "sjbr/sr-freecap", - "description": "A TYPO3 integration of freeCap CAPTCHA.", - "type": "typo3-cms-extension", - "license": "GPL-2.0-or-later", - "keywords": [ - "TYPO3", - "captcha" - ], - "authors": [ - { - "name": "Stanislas Rolland", - "homepage": "https://www.sjbr.ca", - "role": "Developer" - } - ], - "homepage": "https://codeberg.org/sjbr/sr-freecap", - "support": { - "issues": "https://codeberg.org/sjbr/sr-freecap/issues" - }, - "replace": { - "typo3-ter/sr-freecap": "self.version" - }, - "require": { - "typo3/cms-core": "^11.5" - }, - "autoload": { - "psr-4": { - "SJBR\\SrFreecap\\": "Classes/" - } - }, - "extra": { - "typo3/cms": { - "extension-key": "sr_freecap" - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/doc/manual.odt b/typo3conf/ext/sr_freecap/doc/manual.odt deleted file mode 100644 index 56633f2..0000000 Binary files a/typo3conf/ext/sr_freecap/doc/manual.odt and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/doc/manual.pdf b/typo3conf/ext/sr_freecap/doc/manual.pdf deleted file mode 100644 index f0aca2d..0000000 Binary files a/typo3conf/ext/sr_freecap/doc/manual.pdf and /dev/null differ diff --git a/typo3conf/ext/sr_freecap/ext_autoload.php b/typo3conf/ext/sr_freecap/ext_autoload.php deleted file mode 100644 index d3badc1..0000000 --- a/typo3conf/ext/sr_freecap/ext_autoload.php +++ /dev/null @@ -1,5 +0,0 @@ - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('sr_freecap') . 'pi2/class.tx_srfreecap_pi2.php', -); -?> \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/ext_conf_template.txt b/typo3conf/ext/sr_freecap/ext_conf_template.txt deleted file mode 100644 index 5f31ac5..0000000 --- a/typo3conf/ext/sr_freecap/ext_conf_template.txt +++ /dev/null @@ -1,5 +0,0 @@ - - # cat=basic; type=# cat=basic; type=user[SJBR\SrFreecap\Configuration\ConfigurationHelper->buildEncryptionAlgorithmSelector]; label=Encryption Algorithm: Select the encryption algorithm to be used by the extension. -encryptionAlgorithm = aes-256-cbc - # cat=basic; type=# cat=basic; type=string; label=Salt: Salt -salt = cH!swe!retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39=E@rAsp7c-Ph@pH diff --git a/typo3conf/ext/sr_freecap/ext_emconf.php b/typo3conf/ext/sr_freecap/ext_emconf.php deleted file mode 100644 index a3ae4a1..0000000 --- a/typo3conf/ext/sr_freecap/ext_emconf.php +++ /dev/null @@ -1,38 +0,0 @@ - 'freeCap CAPTCHA', - 'description' => 'A TYPO3 integration of freeCap CAPTCHA.', - 'category' => 'fe', - 'version' => '11.5.2', - 'state' => 'stable', - 'uploadfolder' => false, - 'clearcacheonload' => false, - 'author' => 'Stanislas Rolland', - 'author_email' => 'typo3AAAA(arobas)sjbr.ca', - 'author_company' => 'SJBR', - 'constraints' => - array ( - 'depends' => - array ( - 'typo3' => '11.5.0-11.5.99', - ), - 'conflicts' => - array ( - ), - 'suggests' => - array ( - ), - ), -); - diff --git a/typo3conf/ext/sr_freecap/ext_localconf.php b/typo3conf/ext/sr_freecap/ext_localconf.php deleted file mode 100644 index ac3c9da..0000000 --- a/typo3conf/ext/sr_freecap/ext_localconf.php +++ /dev/null @@ -1,46 +0,0 @@ - 'show', - ], - // An array of non-cachable controller-action-combinations (they must already be enabled) - [ - \SJBR\SrFreecap\Controller\ImageGeneratorController::class => 'show', - ] - ); - - // Configuring the audio captcha player - \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( - // The extension name (in UpperCamelCase) or the extension key (in lower_underscore) - $extensionName, - // A unique name of the plugin in UpperCamelCase - 'AudioPlayer', - // An array holding the controller-action-combinations that are accessible - [ - // The first controller and its first action will be the default - \SJBR\SrFreecap\Controller\AudioPlayerController::class => 'play', - ], - // An array of non-cachable controller-action-combinations (they must already be enabled) - [ - \SJBR\SrFreecap\Controller\AudioPlayerController::class => 'play', - ] - ); - }, - 'sr_freecap' -); \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/ext_tables.php b/typo3conf/ext/sr_freecap/ext_tables.php deleted file mode 100644 index 7fe1d02..0000000 --- a/typo3conf/ext/sr_freecap/ext_tables.php +++ /dev/null @@ -1,35 +0,0 @@ - 'new,create' - ], - [ - 'access' => 'user,group', - 'icon' => 'EXT:sr_freecap/Resources/Public/Icons/Extension.svg', - 'labels' => 'LLL:EXT:sr_freecap/Resources/Private/Language/locallang_mod.xlf' - ] - ); - // Add module configuration setup - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript($extKey, 'setup', ''); - } - }, - 'sr_freecap' -); \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/br.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/br.locallang.xlf deleted file mode 100644 index ec4a03a..0000000 --- a/typo3conf/ext/sr_freecap/pi1/br.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Desculpe, o serviço foi interrompido. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/de.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/de.locallang.xlf deleted file mode 100644 index 58ea7f4..0000000 --- a/typo3conf/ext/sr_freecap/pi1/de.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Der Dienst ist leider unterbrochen. - - - Please do NOT enter the text|if this site is not %1$s - Bitte geben Sie den Text NICHT ein|wenn diese Seite nicht %1$s ist - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/dk.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/dk.locallang.xlf deleted file mode 100644 index 090dd66..0000000 --- a/typo3conf/ext/sr_freecap/pi1/dk.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Beklager, tjenesten er ude af drift. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/es.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/es.locallang.xlf deleted file mode 100644 index 537a8d9..0000000 --- a/typo3conf/ext/sr_freecap/pi1/es.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Lo sentimos, el servicio está interrumpido. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/fi.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/fi.locallang.xlf deleted file mode 100644 index 8793fbf..0000000 --- a/typo3conf/ext/sr_freecap/pi1/fi.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Pahoittelut, palvelu keskeytettiin. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/fr.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/fr.locallang.xlf deleted file mode 100644 index f724d82..0000000 --- a/typo3conf/ext/sr_freecap/pi1/fr.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Le service est interrompu. - - - Please do NOT enter the text|if this site is not %1$s - N'entrez pas le mot|si le site n'est pas %1$s! - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/it.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/it.locallang.xlf deleted file mode 100644 index 931475e..0000000 --- a/typo3conf/ext/sr_freecap/pi1/it.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Spiacente, servizio interrotto. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/locallang.xlf b/typo3conf/ext/sr_freecap/pi1/locallang.xlf deleted file mode 100644 index e2c86c8..0000000 --- a/typo3conf/ext/sr_freecap/pi1/locallang.xlf +++ /dev/null @@ -1,14 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - - - Please do NOT enter the text|if this site is not %1$s - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/nl.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/nl.locallang.xlf deleted file mode 100644 index 27bca63..0000000 --- a/typo3conf/ext/sr_freecap/pi1/nl.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Service is onderbroken. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/pt.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/pt.locallang.xlf deleted file mode 100644 index d47b82c..0000000 --- a/typo3conf/ext/sr_freecap/pi1/pt.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Desculpe, o serviço foi suspenso. - - - Please do NOT enter the text|if this site is not %1$s - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi1/ru.locallang.xlf b/typo3conf/ext/sr_freecap/pi1/ru.locallang.xlf deleted file mode 100644 index 92600a7..0000000 --- a/typo3conf/ext/sr_freecap/pi1/ru.locallang.xlf +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - Sorry, service is interrupted. - Извините, сервис недоступен. - - - Please do NOT enter the text|if this site is not %1$s - НЕ вводите текст|если это не %1$s сайт - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/br.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/br.locallang.xlf deleted file mode 100644 index 5789ab7..0000000 --- a/typo3conf/ext/sr_freecap/pi2/br.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Imagem CAPTCHA para prevenção de SPAM - - - Please enter here the word as displayed in the picture. - Por favor digite a palavra exibida na imagem. - - - Please enter here the word as displayed in the picture. - Por favor digite a palavra exibida na imagem. - - - This is to prevent spamming. - Isto serve para prevenir lixo eletrônico. - - - If you can't read the word, - Se você não conseguir ler a palavra, - - - If you can't read the word, - Se você não conseguir ler a palavra, - - - click here - clique aqui - - - click here - clique aqui - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/class.tx_srfreecap_pi2.php b/typo3conf/ext/sr_freecap/pi2/class.tx_srfreecap_pi2.php deleted file mode 100644 index 20e5310..0000000 --- a/typo3conf/ext/sr_freecap/pi2/class.tx_srfreecap_pi2.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/de.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/de.locallang.xlf deleted file mode 100644 index fb6ffa1..0000000 --- a/typo3conf/ext/sr_freecap/pi2/de.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - CAPTCHA-Bild zum Spam-Schutz - - - Please enter here the word as displayed in the picture. - Bitte geben Sie hier das Wort ein, das im Bild angezeigt wird. - - - Please enter here the word as displayed in the picture. - Gib hier das Wort ein, das im Bild angezeigt wird. - - - This is to prevent spamming. - Dies dient der Spam-Abwehr. - - - If you can't read the word, - Wenn Sie das Wort nicht lesen können, - - - If you can't read the word, - Wenn du das Wort nicht lesen kannst, - - - click here - bitte hier klicken - - - click here - hier klicken - - - Click here for audio version of the word to enter. - Klicken Sie hier, um das einzugebende Wort anzuhören. - - - Click here for audio version of the word to enter. - Klicke hier, um das einzugebende Wort anzuhören. - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Entschuldigung, wir können nicht automatisch ein neues Bild zeigen. Schicken Sie das Formular ab und ein neues Bild wird geladen. - - - Sorry, we cannot play the word of the image. - Entschuldigung, wir können das Wort aus dem Bild nicht abspielen. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/dk.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/dk.locallang.xlf deleted file mode 100644 index 9d49dbe..0000000 --- a/typo3conf/ext/sr_freecap/pi2/dk.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - CAPTCHA billede for SPAM beskyttelse - - - Please enter here the word as displayed in the picture. - Indtast venligst det ord der er vist på billedet. - - - Please enter here the word as displayed in the picture. - Indtast venligst det ord der er vist på billedet. - - - This is to prevent spamming. - Dette er for at beskytte imod misbrug. - - - If you can't read the word, - Hvis du ikke kan læse ordet, - - - If you can't read the word, - Hvis du ikke kan læse ordet, - - - click here - tryk her - - - click here - tryk her - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/es.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/es.locallang.xlf deleted file mode 100644 index 11680aa..0000000 --- a/typo3conf/ext/sr_freecap/pi2/es.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Imagen CAPTCHA para prevenir el uso abusivo - - - Please enter here the word as displayed in the picture. - Por favor introduzca la palabra tal como aparece en la imagen. - - - Please enter here the word as displayed in the picture. - Por favor introduce la palabra tal como aparece en la imagen. - - - This is to prevent spamming. - Esto es para prevenir los abusos. - - - If you can't read the word, - Si no puede leer toda las letras, - - - If you can't read the word, - Si no puedes leer todas las letras, - - - click here - haga clic aquí - - - click here - haz clic aquí - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/fi.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/fi.locallang.xlf deleted file mode 100644 index b2e8ccc..0000000 --- a/typo3conf/ext/sr_freecap/pi2/fi.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - CAPTCHA kuva roskapostin välttämiseksi - - - Please enter here the word as displayed in the picture. - Kirjoita tähän kuvassa näkyvä sana. - - - Please enter here the word as displayed in the picture. - Kirjoita tähän kuvassa näkyvä sana - - - This is to prevent spamming. - (varmistamme ettei viesti tule haittaohjelmasta). - - - If you can't read the word, - Jos et saa sanasta selvää, - - - If you can't read the word, - Jos et saa sanasta selvää, - - - click here - klikkaa tästä uusi kuva - - - click here - klikkaa tästä uusi kuva - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/fr.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/fr.locallang.xlf deleted file mode 100644 index 6d87cbb..0000000 --- a/typo3conf/ext/sr_freecap/pi2/fr.locallang.xlf +++ /dev/null @@ -1,88 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Image CAPTCHA pour prévenir l'utilisation abusive - - - Please enter here the word as displayed in the picture. - Veuillez entrer ici le mot ou le nombre tel qu'il apparaît dans l'image. - - - Please enter here the word as displayed in the picture. - Entre ici le mot ou le nombre tel qu'il apparaît dans l'image. - - - This is to prevent spamming. - Ceci vise à prévenir les abus. - - - If you can't read the word, - Si vous ne pouvez lire toutes les lettres ou chiffres, - - - If you can't read the word, - Si tu ne peux pas lire toutes les lettres ou chiffres, - - - click here - cliquez ici - - - click here - clique ici - - - Click here for audio version of the word to enter. - Cliquez ici pour une version audio du mot ou du nombre à entrer. - - - Click here for audio version of the word to enter. - Clique ici pour une version audio du mot ou du nombre à entrer. - - - For - Cliquez sur ce lien pour une - - - For - Cliquez sur ce lien pour une - - - the audio version of the word - version audio du mot ou du nombre - - - the audio version of the word - version audio du mot ou du nombre - - - click on this link. - à entrer. - - - click on this link. - à entrer. - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Désolé, nous ne pouvons présenter une nouvelle image. Envoyez le formulaire et une nouvelle image sera présentée. - - - Sorry, we cannot play the word of the image. - Désolé, nous ne pouvons jouer le mot ou le nombre à entrer. - - - - Désolé, nous ne pouvons présenter une nouvelle image. Envoie le formulaire et une nouvelle image sera présentée. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/it.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/it.locallang.xlf deleted file mode 100644 index 24e01ec..0000000 --- a/typo3conf/ext/sr_freecap/pi2/it.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Immagine CAPTCHA per prevenire lo SPAM - - - Please enter here the word as displayed in the picture. - Per favore, inserisci la parola che vedi nell'immagine seguente. - - - Please enter here the word as displayed in the picture. - Inserisci la parola che vedi nell'immagine seguente. - - - This is to prevent spamming. - Questo serve per prevenire lo SPAM. - - - If you can't read the word, - Se non riesci a leggere la parola, - - - If you can't read the word, - Se non riesci a leggere la parola, - - - click here - clicca qui - - - click here - clicca qui - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/locallang.xlf b/typo3conf/ext/sr_freecap/pi2/locallang.xlf deleted file mode 100644 index b282cfa..0000000 --- a/typo3conf/ext/sr_freecap/pi2/locallang.xlf +++ /dev/null @@ -1,65 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - - - Please enter here the word as displayed in the picture. - - - Please enter here the word as displayed in the picture. - - - This is to prevent spamming. - - - If you can't read the word, - - - If you can't read the word, - - - click here - - - click here - - - Click here for audio version of the word to enter. - - - Click here for audio version of the word to enter. - - - For - - - For - - - the audio version of the word - - - the audio version of the word - - - click on this link. - - - click on this link. - - - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - Sorry, we cannot play the word of the image. - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/nl.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/nl.locallang.xlf deleted file mode 100644 index 0c5f867..0000000 --- a/typo3conf/ext/sr_freecap/pi2/nl.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - CAPTCHA afbeelding om SPAM tegen te gaan - - - Please enter here the word as displayed in the picture. - Voer hier het woord in zoals getoond in de afbeelding. - - - Please enter here the word as displayed in the picture. - Voer hier het woord in zoals getoond in de afbeelding. - - - This is to prevent spamming. - Dit is om spam tegen te gaan. - - - If you can't read the word, - Als u het woord niet kunt lezen, - - - If you can't read the word, - Als je het woord niet kunt lezen, - - - click here - klik hier - - - click here - klik hier - - - Click here for audio version of the word to enter. - - - - Click here for audio version of the word to enter. - - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/pl.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/pl.locallang.xlf deleted file mode 100644 index af127d6..0000000 --- a/typo3conf/ext/sr_freecap/pi2/pl.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Obrazek zabezpieczający przed spamem - - - Please enter here the word as displayed in the picture. - Wprowadź kod widoczny na obrazku - - - Please enter here the word as displayed in the picture. - Wprowadź kod widoczny na obrazku - - - This is to prevent spamming. - To służy ochronie przed spamem - - - If you can't read the word, - Jeśli nie możesz przeczytać kodu, - - - If you can't read the word, - Jeśli nie możesz przeczytać kodu, - - - click here - kliknij tu - - - click here - kliknij tu - - - Click here for audio version of the word to enter. - kliknij tu aby odsłuchać kod - - - Click here for audio version of the word to enter. - kliknij tu aby odsłuchać kod - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Przepraszamy ale nie możemy załadować nowego obrazka. Kliknij dalej a nowy obrazek załaduje się automatycznie. - - - Sorry, we cannot play the word of the image. - Przepraszamy, nie możemy odtworzyć wyświetlonego kodu - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/pt.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/pt.locallang.xlf deleted file mode 100644 index 8359261..0000000 --- a/typo3conf/ext/sr_freecap/pi2/pt.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Imagem CAPTCHA para prevenir "spam" - - - Please enter here the word as displayed in the picture. - Por favor introduza aqui a palavra escrita na imagem. - - - Please enter here the word as displayed in the picture. - Por favor introduza aqui a palavra escrita na imagem. - - - This is to prevent spamming. - Esta verificação previne a ocorrência de "spam". - - - If you can't read the word, - Se não consegue ler a palavra, - - - If you can't read the word, - Se não consegue ler a palavra, - - - click here - clique aqui para gerar uma nova - - - click here - clique aqui para gerar uma nova - - - Click here for audio version of the word to enter. - Clique aqui para ouvir uma versão audio do código a digitar. - - - Click here for audio version of the word to enter. - Clique aqui para ouvir uma versão audio do código a digitar. - - - For - - - - For - - - - the audio version of the word - - - - the audio version of the word - - - - click on this link. - - - - click on this link. - - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - - - - Sorry, we cannot play the word of the image. - - - - - \ No newline at end of file diff --git a/typo3conf/ext/sr_freecap/pi2/ru.locallang.xlf b/typo3conf/ext/sr_freecap/pi2/ru.locallang.xlf deleted file mode 100644 index 0d95592..0000000 --- a/typo3conf/ext/sr_freecap/pi2/ru.locallang.xlf +++ /dev/null @@ -1,84 +0,0 @@ - - - -
    - - - CAPTCHA image for SPAM prevention - Изображение CAPTCHA для предотвращения спама - - - Please enter here the word as displayed in the picture. - Введите слово, показанное на картинке. - - - Please enter here the word as displayed in the picture. - Введите слово, показанное на картинке. - - - This is to prevent spamming. - Необходимо для предотвращения спама. - - - If you can't read the word, - Если слово непонятно, - - - If you can't read the word, - Если слово непонятно, - - - click here - нажмите здесь. - - - click here - нажмите здесь - - - Click here for audio version of the word to enter. - Нажмите здесь, чтобы прослушать вводимое слово. - - - Click here for audio version of the word to enter. - Нажмите здесь, чтобы прослушать вводимое слово. - - - For - Для - - - For - Для - - - the audio version of the word - аудио версия слова - - - the audio version of the word - аудио версия слова - - - click on this link. - щелкните по этой ссылке. - - - click on this link. - щелкните по этой ссылке. - - - . - . - - - Sorry, we cannot autoreload a new image. Submit the form and a new image will be loaded. - Извините, но невозможно перезагрузить новое изображение. Подтвердите форму, чтобы появилось другое изображение. - - - Sorry, we cannot play the word of the image. - Извините, невозможно воспроизвести изображенное слово. - - - - \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables b/typo3conf/ext/static_info_tables new file mode 160000 index 0000000..5c07b63 --- /dev/null +++ b/typo3conf/ext/static_info_tables @@ -0,0 +1 @@ +Subproject commit 5c07b63ae7aad9fa668be61bec797b11a898b484 diff --git a/typo3conf/ext/static_info_tables/.gitattributes b/typo3conf/ext/static_info_tables/.gitattributes deleted file mode 100644 index 521f131..0000000 --- a/typo3conf/ext/static_info_tables/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -# Please keep the lines in this file sorted. -/.editorconfig export-ignore -/.gitattributes export-ignore -/Tests/ export-ignore diff --git a/typo3conf/ext/static_info_tables/ChangeLog b/typo3conf/ext/static_info_tables/ChangeLog deleted file mode 100644 index c3785e4..0000000 --- a/typo3conf/ext/static_info_tables/ChangeLog +++ /dev/null @@ -1,803 +0,0 @@ -2021-03-03 Stanislas Rolland - - * Resolves #93570: Typo in name of country zone Newfoundland - * Resolves #93265: Deprecated language file references - -2020-10-24 Stanislas Rolland - - * Resolves #92615: Missing language label in TCA - * Update version to 6.9.5 - -2020-11-21 Stanislas Rolland - - * Update version to 6.9.4 - -2020-10-23 Stanislas Rolland - - * Resolves #92615: Missing language label in TCA - -2020-10-19 Stanislas Rolland - - * Update version to 6.9.3 - -2020-06-09 Stanislas Rolland - - * Resolves #91626: Remove any code related to TYPO3 prior to 9 LTS - * Require TYPO3 9 LTS - * Update version to 6.8.0 - -2020-06-04 Stanislas Rolland - - * Resolves #91587: Streamline some redundant code in language pack - * Resolves #91590: Fix ordering of record lists in current language in backend - * Resolves #88684: Only run update script when extensions have changed - -2020-06-03 Stanislas Rolland - - * Resolves #91250: Add php configuration file for Extbase persistence mapping - * Resolves #90274: Add support for PHP 7.4 - * Resolves #91251: Add Symfony dependency injection configuration - * Resolves #91567: Add php configuration file for Extbase persistence mapping to generated language pack - * Resolves #91575: Use Symfony expression language for TypoScript conditions - * Resolves #91252: Adapt to changed arguments of Extensionmanager\Utility\EmConfUtility\includeEmConf in TYPO3 10 - * Resolves #91577: Delete @lazy annotation removed in TYPO3 10 - * Resolves #90741: Enable in TYPO3 LTS 10 - * Update version to 6.8.0 - -2020-01-05 Stanislas Rolland - - * Resolves #88867: Raise PHP dependency to < 7.4 - -2019-10-17 Stanislas Rolland - - * Resolves #88683: Updater uses default columns in TYPO3 9 - * Resolves #88780: Undefined variable usage in the DatabaseUpdateUtility.php - * Resolves #89443: Update subdivisions of Italy - * Update version to 6.7.5 - -2019-05-28 Stanislas Rolland - - * Resolves #82132: Composer install fails with additional languages required at the same time - -2019-05-21 Stanislas Rolland - - * Resolves #87983: The name of capital of Ukraine should be 'Kyiv' - * Resolves #87943: Change Country Name Macedonia to North Macedonia - * Resolves #87877: LocalizationUtility missing import for TYPO3\CMS\Core\Site\Entity\SiteLanguage in TYPO3 9 LTS - -2019-01-04 Stanislas Rolland - - * Resolves #87243: Constant editor fails with class not found exception - * Resolves #87329: Fix non-UTF-8 character in ext_emconf - * Resolves #87330: Fix wrong array access to $emConf['version'] - * Update version to 6.7.4 - -2018-12-19 Stanislas Rolland - - * Resolves #86991: Language pack generation fails with fatal error - * Resolves #87225: Add Kosovo user-defined country code - -2018-10-25 Stanislas Rolland - - * Resolves #86710: Crash in PHP 7.0 due to nullable return type - * Resolves #86723: Autoformat the code - * Update version to 6.7.2 - -2018-10-20 Stanislas Rolland - - * Resolves #86706: Avoid reference to PHP constant TAB - * Resolves #86707: Use @TYPO3\CMS\Extbase\Annotation\ORM\Lazy annotation - -2018-10-18 Stanislas Rolland - - * Resolves #86694: Avoid constant TYPO3_site with TYPO3 9 LTS - * Resolves #86695: In frontend, localize using current site language when it exists - * Update version to 6.7.1 - -2018-10-14 Stanislas Rolland - - * Resolves #86610: Add schema migration service and dumping utility - * Resolves #86654: Migrate extension update script to TYPO3 LTS 9 - * Resolves #84258: Call to a member function getTreeList() on null - * Update version to 6.6.0 - * Resolves #83722: Installation via Composer does not work correctly - * Resolves #86656: Change name of Swaziland to Eswatini - * Update version to 6.7.0 - -2018-10-11 Stanislas Rolland - - * Resolves #86633: Migrate Recordlist hook to TYPO3 9 LTS - * Resolves #86634: Remove @inject annotation - -2018-10-9 Stanislas Rolland - - * Resolves #86608: Remove support for TYPO3 7 LTS - Thanks to Tomas Norre Mikkelsen - * Resolves #86609: Remove references to TYPO3_DB object - Thanks to Tomas Norre Mikkelsen - -2017-12-19 Stanislas Rolland - - * Resolves #83060: Wrong table name in Configuration/TCA/Overrides/static_countries.php - Thanks to Simon Schaufelberger - * Update manual - * Update version to 6.5.1 - -2017-11-19 Stanislas Rolland - - * Resolves #83033: Adapt suggest options to 8 LTS - * Resolves #82808: Critical Invalid Cache Bug - Thanks to Tim Lochmüller - * Update version to 6.5.0 - -2017-10-16 Stanislas Rolland - - * Resolves #82779: Corrections to official and English names of Swiss cantons - Thanks to Urs Bräm - * Resolves #80408: Error in composer replace statement - -2017-04-11 Stanislas Rolland - - * Update version to 6.4.3 - -2017-02-21 Stanislas Rolland - - * Resolves #79648: Call to undefined method SJBR\StaticInfoTables\Domain\Model\Country::getAddessFormat() - * Resolves #79944: Croatia is not marked as EU country - * Resolves #77144: Table 'typo3.tx_staticinfotables_domain_model_language' doesn't exist - -2017-01-24 Stanislas Rolland - - * Update version to 6.4.2 - -2017-01-20 Stanislas Rolland - - * Resolves #79396: class.tx_staticinfotables_encoding.php, failed to open stream: No such file or directory - -2017-01-18 Stanislas Rolland - - * Resolves #79384: Issues in TYPO3 CMS 7 after migration to Doctrine - * Resolves #79385: Update extension icon to svg - * Update version to 6.4.1 - -2017-01-17 Stanislas Rolland - - * Resolves #79359: Migrate PiBaseApi to Doctrine - * Follow-up to Resolves #79229: Migrate suggest receiver to Doctrine - * Follow-up to Resolves #79207: Cleanup extension configuration - * Update version to 6.4.0 - -2017-01-10 Stanislas Rolland - - * Resolves #79255: Migrate Localization Utility to Doctrine - -2017-01-09 Stanislas Rolland - - * Resolves #79223: Standardize SQL table definitions - * Resolves #79035: Update currency of Baltic states - * Resolves #77245: Add languages "Swiss" and "Austrian" - * Resolves #77246: Missing extbase declaration for field "static_lang_isocode" in sys_language - * Follow-up to Resolves #79209: Migrate update script to Doctrine - * Resolves #79229: Migrate suggest receiver to Doctrine - * Follow-up to Resolves #79209: Migrate update script to Doctrine - * Resolves #79230: Migrate ProcessDataMap hook to Doctrine - * Resolves #79231: Drop character set conversions - -2017-01-08 Stanislas Rolland - - * Resolves #79207: Cleanup extension configuration - * Resolves #79209: Migrate update script to Doctrine - * Resolves #79210: Migrate AbstractEntityRepository to Doctrine - -2017-01-07 Stanislas Rolland - - * Cleanup ManagerController.php - * Cleanup SelectViewHelper.php - * Migrate DatabaseUpdateUtility to Doctrine - -2017-01-06 Stanislas Rolland - - * Resolves #79192: Remove constant PATH_BE_staticinfotables_rel - * Require TYPO3 CMS 7.6.0 - * Follow-up to #79174: Let the SelectViewHelper accept correct values - * Resolves #79193: Drop renderMode argument from flash message view helper - -2017-01-05 Stanislas Rolland - - * Resolves #79174: Let the SelectViewHelper accept correct values - * Resolves #79172: Database updates not working for translations with TYPO3 8.0 - -2016-07-14 Stanislas Rolland - - * Update version to 6.3.10 - -2016-06-29 Stanislas Rolland - - * Resolves #76640: Fix removed TCA icon options - -2016-02-19 Stanislas Rolland - - * Update version to 6.3.9 - -2016-02-16 Stanislas Rolland - - * Resolves #73462: Update of static_info_tables breaks TYPO3 6.2 installation - * Resolves #72828: Follow-up to Avoid exceptions in backend list - * Update version to 6.3.8 - * Resolves #73497: Composer name sjbr/static_info_tables vs sjbr/static-info-tables - -2016-02-15 Stanislas Rolland - - * Resolves #72260: SelectViewHelper should honour TypoScript settings - * Update the manual - * Resolves #72828: Avoid exceptions in backend list, if there are elements with wrong uids (Thanks to Tim Lochm�ller) - -2016-02-14 Stanislas Rolland - - * Resolves #72257: Repository Tags should be in a form recongized by composer - -2015-12-02 Stanislas Rolland - - * Resolves #72009: composer.json wrong replace - * Resolves #71910: Field name conversion uses upperCamelCase instead of lowerCamelCase - * Update version to 6.3.6 - -2015-11-23 Stanislas Rolland - - * Resolves #71310: composer.json contains invalid version range for core - * Update version to 6.3.5 - -2015-11-03 Stanislas Rolland - - * Resolves #71263: Fatal error in tx_rtehtmlarea_acronym with PHP 5.3 - * Resolves #66194: 500 error in access log - * Update version to 6.3.4 - -2015-11-02 Stanislas Rolland - - * Resolves #71108: some broken icon paths - * Resolves #71005: Add static_lang_isocode of RTE acronym table - * Update version to 6.3.3 - -2015-10-11 Stanislas Rolland - - * Resolves #70592: Fix deprecated TCA specification for select fields - * Resolves #70593: Cleanup ext_emconf.php - * Update version to 6.3.2 - -2015-10-09 Stanislas Rolland - - * Resolves #70541: Warning: Ambiguous class resolution, because of two ext_update definitions - * Update version to 6.3.1 - -2015-10-01 Stanislas Rolland - - * Resolves #59834: Always run the extension update script except on first install of base extension - * Resolves #59834: Follow-up to Always run the extension update script - * Update version to 6.3.0 - -2015-09-30 Stanislas Rolland - - * Resolves #70224: Import SQL parser for Dbal-free parsing with TYPO3 CMS 7.5+ - * Resolves #70225: Add composer.json to extension and language pack template - * Resolves #70228: Delete old language files - * Resolves #70231: Delete translation files from extension - * Resolves #70235: Move static template registration to TCA/Overrides - * Resolves #70239: Adapt to new TCA configuration and backend Form Engine API of TYPO3 CMS 7 - * Resolves #70240: !!! Remove class tx_staticinfotables_div - * Resolves #70241: Remove reference to removed method - * Update the manual - * Resolves #70240: Follow-up to Remove class tx_staticinfotables_div - * Resolves #66011: Fatal error when executing update script - * Resolves #70224: Follow-up to Import SQL parser for Dbal-free parsing with TYPO3 CMS 7.5+ - * Resolves #69133: Avoid exception if a class is loaded early - -2015-09-14 Stanislas Rolland - - * Resolves #67998: Increase maxitems for cn_country_zones in TCA - * Resolves #67677: Problems in Typo3 CMS 7.3 - * Resolves #67161: Incorrect mapping for field 'deleted' - * Resolves #66484: Missing TCA option in manual example - -2015-02-10 Oliver Klee - - * Resolves #64135: Block any write access to the static models - -2015-02-10 Stanislas Rolland - - * Escape some backslashes in class names - * Resolves #64945: Error when installing on 7.1 - * Enable in TYPO3 CMS 7.1 - -2014-12-09 Stanislas Rolland - - * Fix for TYPO3 CMS 7.0 - * Enable in TYPO3 CMS 7.0 - * Update version to 6.2.1 - -2014-12-08 Stanislas Rolland - - * Update version to 6.2.0 - -2014-11-07 Stanislas Rolland - - * Require TYPO3 CMS 6.2.0 - * Resolves #62770: Replace deprecated calls to ObjectManager ->create() with ->get() - * Resolves #61296: Move TCA configuration from ext_tables.php to Configuration/TCA - * Remove method TcaUtility::loadTCA - -2014-10-16 Stanislas Rolland - - * Remove file Resources/Private/Language/pl.locallang_db.xlf - * Update version to 6.1.2 - -2014-10-10 Stanislas Rolland - - * Resolves #62153: Open country or territory for editing in backend leads to fatal error (Thanks to Daniel Minder) - -2014-10-08 Stanislas Rolland - - * Update version to 6.1.1 - -2014-09-29 Stanislas Rolland - - * Add getters for abstract entity properties tableName and columnsMapping - -2014-09-22 Stanislas Rolland - - * Resolves #59586: Add Subterritory "419 Latin America and the Caribbean" - * Resolves #61769: Polish zones should be written beginning from lower letter - * Rename directory Configuration/Tca to Configuration/TCA - * Resolves #60725: Reduce used memory of the Domain Models (Thanks to Tim Lochmüller) - * Resolves #59896: TCA Selection of countries with different key - -2014-07-29 Stanislas Rolland - - * Resolves #60666: Outdated data for Turkish lira - * Resolves #59459: SelectViewHelper: DefaultOptionValue and Label with no effect (Thanks to Thomas Löffler) - * Resolves #59451: SelectViewHelper returns no items (Thanks to Thomas Löffler) - -2014-06-03 Stanislas Rolland - - * Resolves #59300: Missing namespace for InvalidArgumentException - * Resolves #59301: Missing "searchFields" configuration in ext_tables.php - * Add localized fields as searchFields next time language pack is (re-)generated - * Usage of $GLOBALS['typo3CacheManager'] and $GLOBALS['typo3CacheFactory'] are deprecated since 6.2 - -2014-04-29 Stanislas Rolland - - * Update version to 6.1.0 - -2014-04-23 Stanislas Rolland - - * Update the manual - -2014-04-22 Stanislas Rolland - - * Resolves #58100: Incorrect annotation for tableName on AbstractEntity - * Resolves #58101: Make extension incompatible with extension "uncache" - * Resolves #56327: Add select viewHelper with values from tables (Thanks to Carsten Biebricher) - * Resolves #58100: Incorrect annotation for tableName on AbstractEntity - * Resolves #58107: Add countryZones to country domain model - * Use select viewHelper in test form - -2014-03-26 Stanislas Rolland - - * Update version to 6.0.10 - -2014-03-17 Stanislas Rolland - - * Resolves #56389: Fatal error: Call to a member function getCollatingLocale() on a non-object in LocalizationUtility.php - -2014-03-16 Stanislas Rolland - - * Resolves #56954: getIsoCodeField() is protected but needed from outside - -2014-02-27 Stanislas Rolland - - * Resolves #52431: Localization of nameLocalized not working in preview of attribute - -2014-02-21 Stanislas Rolland - - * Update version to 6.0.9 - -2014-02-17 Stanislas Rolland - - * Resolves #56038: Language Pack Generator crashes in TYPO3 6.0 - -2014-02-15 Stanislas Rolland - - * Resolves #56001: Language packs not re-applied by update script of Static Info Tables - -2014-02-13 Stanislas Rolland - - * Resolves #55952: Wrong phone code for Liechtenstein in static_countries table - * Update version to 6.0.8 - -2014-02-06 Stanislas Rolland - - * Resolves #55476: Deprecated CSS inclusion - * Resolves #55744: Class TYPO3\CMS\Install\Sql\SchemaMigrator was renamed - -2014-01-20 Stanislas Rolland - - * Resolves #55183: Deprecation message - remove parameter - -2014-01-18 Stanislas Rolland - - * Re-create the tables whenever the extension update script in run - -2014-01-17 Stanislas Rolland - - * Follow-up to #54160: List module broken on root page - * Follow-up to #54160: Throw exception when current language is not found in Language repository - -2014-01-16 Stanislas Rolland - - * Resolves #55081: Fatal error in Static Info Tables Manager module in TYPO3 6.2 - * Follow-up to #55081: Fatal error in Static Info Tables Manager module in TYPO3 6.2 - * Clean-up in class SJBR\StaticInfoTables\Hook\Backend\Form\SuggestReceiver - * Clean-up in class SJBR\StaticInfoTables\Hook\Backend\Form\ElementRenderingHelper - * Add TYPO3 version range dependency to generated language pack extension - * Follow-up to #50804: Entities not sorted according to locale collation - * Adjust country BE form - -2013-12-03 Stanislas Rolland - - * Resolves #54160: List module broken on root page - -2013-11-27 Stanislas Rolland - - * Resolves #54008: CachedClassLoader not loaded in ext_localconf in TYPO3 6.2 - * Enable in TYPO3 6.2 - * Update version to 6.0.7 - -2013-11-26 Stanislas Rolland - - * Resolves #52103: PHP Warning in ElementRenderingHelper - * Update version to 6.0.6 - * Resolves #53987: Incorrectly named Brazilian locallang file - -2013-11-25 Stanislas Rolland - - * Resolves #52415: Caching issue while using static country repository - -2013-11-21 Stanislas Rolland - - * Resolves #53840: Could not determine the child object type. - * Resolves #51532: cn_currency_iso_3 in some african countries are wrong in table static_countries - * Resolves #52572: countryRepository->findByTerritory does not respect territory hierarchy - -2013-11-20 Stanislas Rolland - - * Resolves #51754: PHP Warning in ClassCacheManager - -2013-08-12 Stanislas Rolland - - * Follow-up to #50804: Entities not sorted according to locale collation - * Resolves #50742: Translation handling fails in multi select fields (TCA) - -2013-08-07 Stanislas Rolland - - * Resolves #50804: Entities not sorted according to locale collation - -2013-07-24 Stanislas Rolland - - * Update version to 6.0.5 - -2013-07-18 Stanislas Rolland - - * Follow-up to #50050: Use TYPO3 caching framework for extended domain model classes - * Resolves #50164: Autoload cached extended domain model classes - -2013-07-15 Stanislas Rolland - - * Resolves #50034: Re-introduce tx_staticinfotables_div::getTitleFromIsoCode as deprecated method - * Resolves #50036: Clarify message from ext_update script - * Resolves #49878: clearCachePostProc should clear proxy classes only when cacheCmd=all - * Resolves #50050: Use TYPO3 caching framework for extended domain model classes - * Resolves #49590: Montenegrin language is missing in the static_info_tables - -2013-07-02 Stanislas Rolland - - * Resolves #49397: No method name 'selectItemsTCA' in class tx_staticinfotables_div - * Follow-up to #49397: Correction to the manual - * Cleanup unescaped backslashes - * Correction to the manual - -2013-06-26 Stanislas Rolland - - * Resolves #49462: Class tx_staticinfotables_pi1 not always available - * Resolves #49463: Make extension version available to other extensions - -2013-06-17 Stanislas Rolland - - * Update version to 6.0.4 - -2013-06-14 Stanislas Rolland - - * Resolves #49124: Automated PHP Syntax check on LanguagePackTemplates fails - * Resolves #49142: Add a method to Language Repository - -2013-06-06 Stanislas Rolland - - * Follow-up to #48814: Records labels missing in list view using PHP 5.4 (Thanks to Visay Keo) - -2013-06-04 Stanislas Rolland - - * Resolves #48814: Records labels missing in list view using PHP 5.4 (Thanks to Visay Keo) - -2013-05-31 Stanislas Rolland - - * Resolves #48659: Superfluous closing ">" in pi1/class.tx_staticinfotables_pi1.php - * Update version to 6.0.3 - -2013-05-25 Stanislas Rolland - - * Resolves #48524: Missing file Classes/Domain/Model/LanguageExtensible.php - * Resolves #48528: Error in update script on TYPO3 6.1.1 - * Update version to 6.0.1 - -2013-05-23 Stanislas Rolland - - * Fix extended domain model classes loading after class loader cache is cleared - * Improve class cache handling - * Relax extension conflicts - * Update manual - * GeneralUtility::loadTCA is deprecated in TYPO3 6.1 - * Follow-up to GeneralUtility::loadTCA is deprecated in TYPO3 6.1 - -2013-05-22 Stanislas Rolland - - * Resolves #48473: Add action to test localization after installation of language pack - * Fix language pack update - -2013-05-21 Stanislas Rolland - - * Log usage of deprecated functions - * Set TYPO3 version constraint to 6.0.6-6.1.99 - * Delete unused partials - * Fix domain model inconsistencies - * Refactor findAllOrderedByLocalizedName - -2013-05-20 Stanislas Rolland - - * Fix for backward compatibility of class tx_staticinfotables_div - * Update some copyright notices - * Follow-up fix for backward compatibility of class tx_staticinfotables_div - -2013-05-16 Stanislas Rolland - - * Re-introduce class tx_staticinfotables_div for backward compatibility - -2013-05-15 Stanislas Rolland - - * Follow-up to #12683: Make TS template constants selectable - * Follow-up to #45862: Enable domain model extension: rebuild class cache when updating extensions - * Remove unnecessary entries from ext_autoload.php - * Fix layout of code generated by class cache builder - -2013-05-14 Stanislas Rolland - - * Resolves #12683: Make TS template constants selectable - * Resolves #48197: Incorrect extension of the language domain model by language packs - * Resolves #48198: Add methods to retrieve entities ordered by localized names - -2013-05-13 Stanislas Rolland - - * Resolves #48156: Add backend module to generate language packs - * Resolves #48161: Localization should honour alternative languages - * Resolves #48162: Make pibase-style api usable in backend - * Resolves #48163: Add repository method to retrieve all non-constructed and non-sacred languages - * Resolves #48164: Add repository method to retrieve all entities including deleted ones - * Update version to 6.0.0 - * Simplify EM configuration template - -2013-03-05 Stanislas Rolland - - * Resolves #46051: Make the extension version and constraints available when creating language packs - -2013-03-03 Stanislas Rolland - - * Resolves #45986: Add domain repositories classes - -2013-02-27 Stanislas Rolland - - * Resolves #45901: Add extbase persistence configuration and field mapping - * Follow-up to #45901: Add extbase persistence configuration and field mapping - -2013-02-26 Stanislas Rolland - - * Resolves #45862: Enable domain model extension - * Resolves #45874: Move domain model extension configuration to Configuration directory - * Follow-up to #45848: Add domain model - -2013-02-25 Stanislas Rolland - - * Resolves #45823: Remove hotlist feature - * Resolves #45847: Move TCA arrays to Configuration directory - * Resolves #45848: Add domain model - -2013-02-24 Stanislas Rolland - - * Resolves #45809: Refactor code and introduce namespacing - -2013-02-22 Stanislas Rolland - - * Resolves #45738: Connect static_country_zones to static_countries - * Apply TCA userFuncs to Static Info Tables Manager tables - -2013-02-21 Stanislas Rolland - - * Resolves #10037: Connect static_territories with static_countries - * Resolves #45733: Move icons to Resources directory - * Resolves #45734: Connect static_countries to static_currencies - -2013-02-20 Stanislas Rolland - - * Fixed issue #39552: Default TS constants contain superfluous dot - * Added feature #45626: Update countries to level of ISO 3166-1:2006 - Newsletter VI-12 (2012-02-15) - * Added feature #45626: Update countries to level of ISO 3166-1:2006 - Newsletter VI-14 (2013-02-06) - * Added feature #43009: Add federal states of croatia to static_country_zones - * Fixed issue #45372: Update Åland Islands tdl - * Added feature #45630: Update currencies in accordance with ISO 4217 Amendment Number 154 - * Fixed issue #35775: Remove redundant indexes - * Fixed issue #40509: Wrong ISO codes for currency Serbian Dinar - * Follow up to feature #45630: Update currencies in accordance with ISO 4217 Amendment Number 154 - * Update version to 2.3.2 - * Resolves #45681: Require TYPO3 4.7 - * Update version to 2.4 - * Resolves #45684: Add autoloading - * Follow up to #45684: Add autoloading - * Fixed issue #45686: Remove reference to static_info_tables_markets - * Resolves #45688: Always keep tables utf-8-encoded - * Resolves #45692: Move static template to Configuration directory - * Resolves #45689: Convert locallang files to XLIFF - -2013-02-19 Stanislas Rolland - - * Update version to 2.3.1 - -2012-05-29 Stanislas Rolland - - * Fixed security issue [Ticket#2011101510000057] XSS in static_info_tables 2.3.0 - -2011-12-16 Stanislas Rolland - - * Fixed issue #32614: Errors in names of two provinces of Italy - * Fixed issue #32094: Usage of deprecated testInt method (Thanks to Stefan Galinski) - * Fixed issue #29241: NZ static currencies thousands decimal - * Fixed issue #28830: cn_short_local for Czech Republic misses an accent mark - * Added feature #32635: Update countries to level of ISO 3166-1:2006 - Newsletter VI-9 (2011-06-12) - * Added feature #32636: Update countries to level of ISO 3166-1:2006 - Newsletter VI-10 (2011-08-09) - * Added feature #32637: Update countries to level of ISO 3166-1:2006 - Newsletter VI-11 (2011-11-08) - * Added feature #28104: Polish country zones (Thanks to Tomasz Krawczyk) - * Fixed issue #27646: Territory of United Arab Emirates - * Follow-up to feature #28104: Polish country zones - * Fixed issue #13284: tx_staticinfotables_div::getCurrentLanguage should return 'EN' if language is 'default' (Thanks to Robert Heel) - * Fixed issue #28483: tx_staticinfotables_div::getCurrentLanguage issues repetitive SQL queries (Thanks to Raphaël Riel) - * Updated version to 2.3.0 - -2011-01-25 Stanislas Rolland - - * Added feature #9423: Add country zones for the regions and departments of France - * Fixed issue #12530: Erroneous country zone codes for Austria - * Follow-up to issue #12530: Erroneous country zone codes for Austria (remove country code) - * Follow-up to feature #9423: Add country zones for the regions and departments of France (remove country code) - * Fixed bugtracker issue #6901: Remove DEFAULT '0' from uid fields sql definition - * Fixed issue #12531: Remove reference to extension patch1822 - * Updated Manual - * Added missing files in SVN - * Fixed issue #12555: Removed db_layout configuration not supported on page 0 - * Updated version to 2.2 - -2011-01-24 Stanislas Rolland - - * Fixed issue #12506: Add missing languages and/or missing TYPO3 language codes (Albanian, Canadian French, Filipino, Georgian, Khmer, Serbian) - * Fixed issue #12508: Update countries to level of ISO 3166-1:2006 - Newsletter VI-8 (2010-12-15) - * Fixed issue #10897: Missing (non-existent) territory for some countries - * Fixed bugtracker issue #8739: Swiss Currency Symbols are wrong - -2010-04-29 Franz Holzinger - - * new feature: countriesAllowed gives the ordered ISO-3 codes of the countries which are allowed in the select box. - -2010-01-31 Franz Holzinger - * fix bug in getTitleFromIsoCode: SQL error due to wrong starting AND in where statement - * remove static_markets: New extension static_info_tables_markets - * fix bug 10037: add Albacete to Spain - * fix bug 10038: use TYPO3 internal language code if this exists instead of ISO code - * fix bug 12854: getCurrentLanguage doesn't use FE language - * fix bug 12145: static_info_tables, syntax errors in "ext_tables_static+adt.sql" - * fix bug 0011739: Wrong abbreviations for german federal states - * add Italian provinces - * make Stanlislas Rolland the new maintainer of static_info_tables - -2009-06-20 Franz Holzinger - * Fix bug 2397: loadTcaAdditions - * Add the field 'deleted' to static_countries because some countries like 'Serbia and Montenegro' have been divided. - * This makes it possible to keep lost countries for historical reasons. - * Add the new countries Serbia and Montenegro - * Add Dutch country zones - * fix the telephone precall number for some countries - * make Romania and Bulgaria to EU countries - -2008-11-03 Franz Holzinger - * Fix bug 9351: Tennessee - * fix getTitleFromIsoCode: empty where clause must be '1=1' to allow AND combinations - * support for page module - * fix bug 7930: return the resulting selected array in the methods buildStaticInfoSelector and optionsConstructor - -2008-07-15 Franz Holzinger - * Add the form tags to the UPDATE! function in EM for TYPO3 4.2.1 - * The versions 2.0.x are the last ones which will work under PHP 4. - * Fix bug with PHP4: http://www.jambage.com/index.php?id=215&tt_board_uid=1621 - Remove the parameter $outSelectedArray again for PHP4. This will be back again in version 2.1.0. - -2008-06-07 Franz Holzinger - * fix bug 7930: return the resulting selected array in the methods buildStaticInfoSelector and optionsConstructor - * new method needsInit which tells if the object has already been initialised - * fix bug 8347: Vorarlberg is correct for VB in Austria - * fix bug 8594: no default zone must be used if it does not fit to the default country - -2008-04-26 Franz Holzinger - * fix bug 7930: default values for country zones and currencies have been wrong - * move static_taxes into a separate extension static_info_tables_taxes - -2008-03-15 Franz Holzinger - * fix bug 6059: Static_country_zones Canada wrong ISO-Nr - * set default country to DEU and contry zone to NRW because most persons using TYPO3 live here - * set default language to EN because most persons using TYPO3 understand English - * add a $conf parameter to the init routine. Other extensions may override the setup now. - * fix bug with not set default country - * fix bug with not getting rid of the div extension - * replace $TYPO3_CONF_VARS by $GLOBALS['TYPO3_CONF_VARS'] because some PHP5 versions loose its value - -2007-12-16 Franz Holzinger - * remove dependancy from div extension - * new feature charset: extension setup for the character set of the tables - * fix bug with wrong '1 AND ...' SQL query with itemsProcFunc_config.hotlistOnly - * change Galician language - * fix bug 4589 with wrong SQL when no country code is available - * new feature: mutliple countries and languages can be selected at once - -2007-08-03 David Bruehlmeier - * Updated static_markets - -2007-07-17 Franz Holzinger - * new function fetchCountries to get a list of countries which match the parameters - -2007-06-19 David Bruehlmeier - * Updated static_markets - -2007-06-16 Franz Holzinger - * support for custom where clauses with static_info_tables by Jeff Segars - * fix bug #5616: hook function processDatamap_postProcessFieldArray must not use $this as parameter name - -2007-05-22 David Bruehlmeier - * Updated static_markets - -2007-05-16 David Bruehlmeier - * Added static_markets to $TYPO3_CONF_VARS['EXTCONF'][STATIC_INFO_TABLES_EXTkey]['tables'] - -2007-04-24 Franz Holzinger - * adapt manual for market places - -2007-04-14 Franz Holzinger - * small modifications using constants - -2007-04-03 David Bruehlmeier - * Fixed small bug in selectItemsTCA() - * Added new table 'static_markets' (regulated by ISO 10383) - -2007-01-13 Franz Holzinger - * fix bug with wrong SQL query with "SELECT static_countries.cn_iso_3, FROM ..." - -2006-11-23 Franz Holzinger - * fix bug with wrong SQL query with "... AND static_country_zones.=''" - -2006-10-31 Franz Holzinger - * change the param into an addWhere parameter where it is a WHERE clause - -2006-10-11 Franz Holzinger - * additional WHERE clauses to many functions in order to filter the lists - * call function to load additional TCA to allow fields added from the language specific static_info_tables derivates - -2006-09-09 Michael Stucki - * Added a ChangeLog file - * Initial SVN import, based on static_info_tables 2.0.0 diff --git a/typo3conf/ext/static_info_tables/Classes/Cache/CachedClassLoader.php b/typo3conf/ext/static_info_tables/Classes/Cache/CachedClassLoader.php deleted file mode 100644 index 8598602..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Cache/CachedClassLoader.php +++ /dev/null @@ -1,105 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\Cache\CacheManager; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Cached classes autoloader - */ -class CachedClassLoader -{ - /** - * Extension key - * - * @var string - */ - protected static $extensionKey = 'static_info_tables'; - - /** - * Cached class loader class name - * - * @var string - */ - protected static $className = __CLASS__; - - /** - * Name space of the Domain Model of StaticInfoTables - * - * @var string - */ - protected static $namespace = 'SJBR\\StaticInfoTables\\Domain\\Model\\'; - - /** - * The class loader is static, thus we do not allow instances of this class. - */ - private function __construct() - { - } - - /** - * Registers the cached class loader - * - * @return bool TRUE in case of success - */ - public static function registerAutoloader() - { - return spl_autoload_register(static::$className . '::autoload', true, true); - } - - /** - * Autoload function for cached classes - * - * @param string $className Class name - * @return void - */ - public static function autoload($className) - { - $className = ltrim($className, '\\'); - if (strpos($className, static::$namespace) !== false) { - // Lookup the class in the array of static info entities and check its presence in the class cache - $entities = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][static::$extensionKey]['entities'] ?? []; - // ClassCacheManager instantiation creates the class cache if not already available - $classCacheManager = GeneralUtility::makeInstance(ClassCacheManager::class); - $cacheManager = GeneralUtility::makeInstance(CacheManager::class); - $classCache = $cacheManager->getCache(static::$extensionKey); - foreach ($entities as $entity) { - if ($className === static::$namespace . $entity) { - $entryIdentifier = 'DomainModel' . $entity; - if (!$classCache->has($entryIdentifier)) { - // The class cache needs to be rebuilt - $classCacheManager->reBuild(); - } - $classCache->requireOnce($entryIdentifier); - break; - } - } - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Cache/ClassCacheManager.php b/typo3conf/ext/static_info_tables/Classes/Cache/ClassCacheManager.php deleted file mode 100644 index 289b72d..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Cache/ClassCacheManager.php +++ /dev/null @@ -1,284 +0,0 @@ - - * (c) 2013-2022 Stanislas Rolland - * - * 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 2 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\Cache\Backend\FileBackend; -use TYPO3\CMS\Core\Cache\CacheManager; -use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface; -use TYPO3\CMS\Core\Cache\Frontend\PhpFrontend; -use TYPO3\CMS\Core\SingletonInterface; -use TYPO3\CMS\Core\Utility\ArrayUtility; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Class Cache Manager - */ -class ClassCacheManager implements SingletonInterface -{ - /** - * Extension key - * - * @var string - */ - protected $extensionKey = 'static_info_tables'; - - /** - * @var array Cache configurations - */ - protected $cacheConfiguration = [ - 'static_info_tables' => [ - 'frontend' => PhpFrontend::class, - 'backend' => FileBackend::class, - 'options' => [], - 'groups' => ['all'], - ], - ]; - - /** - * Cache manager - * - * @var CacheManager - */ - private $cacheManager; - - /** - * @var FrontendInterface - */ - protected $cacheInstance; - - /** - * Constructor - */ - public function __construct(CacheManager $cacheManager) - { - $this->cacheManager = $cacheManager; - $this->initializeCache(); - } - - /** - * Initialize cache instance to be ready to use - * - * @return void - */ - protected function initializeCache() - { - if (!$this->cacheManager->hasCache($this->extensionKey)) { - if (isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$this->extensionKey]) && - is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$this->extensionKey])) { - ArrayUtility::mergeRecursiveWithOverrule($this->cacheConfiguration[$this->extensionKey], $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$this->extensionKey]); - } - $this->cacheManager->setCacheConfigurations($this->cacheConfiguration); - } - $this->cacheInstance = $this->cacheManager->getCache($this->extensionKey); - } - - /** - * Builds and caches the proxy files - * - * @return void - * @throws \Exception - */ - public function build() - { - $extensibleExtensions = $this->getExtensibleExtensions(); - $entities = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$this->extensionKey]['entities'] ?? []; - foreach ($entities as $entity) { - $key = 'Domain/Model/' . $entity; - - // Get the file from static_info_tables itself, this needs to be loaded as first - $path = ExtensionManagementUtility::extPath($this->extensionKey) . 'Classes/' . $key . '.php'; - if (!is_file($path)) { - throw new \Exception('given file "' . $path . '" does not exist'); - } - $code = $this->parseSingleFile($path, false); - - // Get the files from all other extensions that are extending this domain model class - if (isset($extensibleExtensions[$key]) && is_array($extensibleExtensions[$key]) && count($extensibleExtensions[$key]) > 0) { - $extensionsWithThisClass = array_keys($extensibleExtensions[$key]); - foreach ($extensionsWithThisClass as $extension) { - $path = ExtensionManagementUtility::extPath($extension) . 'Classes/' . $key . '.php'; - if (is_file($path)) { - $code .= $this->parseSingleFile($path); - } - } - } - - // Close the class definition and the php tag - $code = $this->closeClassDefinition($code); - - // The file is added to the class cache - $entryIdentifier = str_replace('/', '', $key); - try { - $this->cacheInstance->set($entryIdentifier, $code); - } catch (\Exception $e) { - throw new \Exception($e->getMessage()); - } - } - } - - /** - * Get all loaded extensions which try to extend EXT:static_info_tables - * - * @return array - */ - protected function getExtensibleExtensions() - { - $loadedExtensions = array_unique(ExtensionManagementUtility::getLoadedExtensionListArray()); - - // Get the extensions which want to extend static_info_tables - $extensibleExtensions = []; - foreach ($loadedExtensions as $extensionKey) { - $extensionInfoFile = ExtensionManagementUtility::extPath($extensionKey) . 'Configuration/DomainModelExtension/StaticInfoTables.txt'; - if (file_exists($extensionInfoFile)) { - $info = GeneralUtility::getUrl($extensionInfoFile); - $classes = GeneralUtility::trimExplode(LF, $info, true); - foreach ($classes as $class) { - $extensibleExtensions[$class][$extensionKey] = 1; - } - } - } - return $extensibleExtensions; - } - - /** - * Parse a single file and does some magic - * - Remove the php tags - * - Remove the class definition (if set) - * - * @param string $filePath path of the file - * @param bool $removeClassDefinition If class definition should be removed - * @return string path of the saved file - * @throws \Exception - * @throws \InvalidArgumentException - */ - public function parseSingleFile($filePath, $removeClassDefinition = true) - { - if (!is_file($filePath)) { - throw new \InvalidArgumentException(sprintf('File "%s" could not be found', $filePath)); - } - $code = GeneralUtility::getUrl($filePath); - return $this->changeCode($code, $filePath, $removeClassDefinition); - } - - /** - * @param string $code - * @param string $filePath - * @param bool $removeClassDefinition - * @param bool $renderPartialInfo - * @return string - * @throws \Exception - */ - protected function changeCode($code, $filePath, $removeClassDefinition = true, $renderPartialInfo = true) - { - if (empty($code)) { - throw new \InvalidArgumentException(sprintf('File "%s" could not be fetched or is empty', $filePath)); - } - $code = trim($code); - $code = str_replace([''], '', $code); - $code = trim($code); - - // Remove everything before 'class ', including namespaces, - // comments and require-statements. - if ($removeClassDefinition) { - $pos = strpos($code, 'class '); - $pos2 = strpos($code, '{', $pos); - - $code = substr($code, $pos2 + 1); - } - - $code = trim($code); - - // Add some information for each partial - if ($renderPartialInfo) { - $code = $this->getPartialInfo($filePath) . $code; - } - - // Remove last } - $pos = strrpos($code, '}'); - $code = substr($code, 0, $pos); - $code = trim($code); - return $code . LF . LF; - } - - protected function getPartialInfo($filePath) - { - return '/*' . str_repeat('*', 70) . LF . - ' * this is partial from: ' . $filePath . LF . str_repeat('*', 70) . '*/' . LF . chr(9); - } - - protected function closeClassDefinition($code) - { - return $code . LF . '}'; - } - - /** - * Clear the class cache - * - * @return void - */ - public function clear() - { - $this->cacheInstance->flush(); - if (isset($GLOBALS['BE_USER']) && isset($GLOBALS['BE_USER']->user)) { - $GLOBALS['BE_USER']->writelog(3, 1, 0, 0, '[StaticInfoTables]: User %s has cleared the class cache', [$GLOBALS['BE_USER']->user['username']]); - } - } - - /** - * Rebuild the class cache - * - * @param array $parameters - * @return void - * @throws \Exception - */ - public function reBuild(array $parameters = []) - { - $isValidCall = ( - empty($parameters) - || ( - !empty($parameters['cacheCmd']) - && GeneralUtility::inList('all,temp_cached', $parameters['cacheCmd']) - && isset($GLOBALS['BE_USER']) - ) - ); - if ($isValidCall) { - $this->clear(); - $this->clearReflectionCache(); - $this->build(); - } - } - - /** - * Drop the reflection cache - */ - protected function clearReflectionCache() - { - if ($this->cacheManager->hasCache('extbase_reflection')) { - $this->cacheManager->getCache('extbase_reflection')->flush(); - } - if ($this->cacheManager->hasCache('extbase_datamapfactory_datamap')) { - $this->cacheManager->getCache('extbase_datamapfactory_datamap')->flush(); - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Configuration/Tca/Provider.php b/typo3conf/ext/static_info_tables/Classes/Configuration/Tca/Provider.php deleted file mode 100644 index afe2b01..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Configuration/Tca/Provider.php +++ /dev/null @@ -1,68 +0,0 @@ - - * (c) 2020-2022 Stanislas Rolland - * 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 2 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. - * A copy is found in the text file GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\ExtensionManagementUtility; - -class Provider -{ - /** - * @var string Path to language file of labels in the backend - */ - protected static $LL = 'LLL:EXT:%s/Resources/Private/Language/locallang_db.xlf:%s_item.%s'; - - /** - * @param $additionalFields - * @param $tableName - * @return void - */ - public static function addTcaColumnConfiguration($extensionKey, $tableName, $additionalFields) - { - foreach ($additionalFields as $sourceField => $destField) { - $additionalColumns = []; - $additionalColumns[$destField] = $GLOBALS['TCA'][$tableName]['columns'][$sourceField] ?? []; - $additionalColumns[$destField]['label'] = sprintf( - static::$LL, - $extensionKey, - $tableName, - $destField - ); - ExtensionManagementUtility::addTCAcolumns($tableName, $additionalColumns); - ExtensionManagementUtility::addToAllTCAtypes( - $tableName, - $destField, - '', - 'after:' . $sourceField - ); - // Add as search field - $GLOBALS['TCA'][$tableName]['ctrl']['searchFields'] .= ',' . $destField; - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Configuration/TypoScript/ConfigurationHelper.php b/typo3conf/ext/static_info_tables/Classes/Configuration/TypoScript/ConfigurationHelper.php deleted file mode 100644 index a1d1b0b..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Configuration/TypoScript/ConfigurationHelper.php +++ /dev/null @@ -1,126 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CountryZoneRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguageRepository; -use SJBR\StaticInfoTables\Utility\HtmlElementUtility; -use TYPO3\CMS\Core\TypoScript\ExtendedTemplateService; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; - -/** - * Class providing TypoScript configuration help for Static Info Tables - */ -class ConfigurationHelper -{ - /** - * Renders a select element to select an entity - * - * @param array $params: Field information to be rendered - * @param \TYPO3\CMS\Core\TypoScript\ExtendedTemplateService $pObj: The calling parent object. - * @param mixed $arg - * - * @return string The HTML input field - */ - public function buildEntitySelector(array $params, ExtendedTemplateService $pObj, $arg = '') - { - $field = ''; - switch ($params['fieldName'] ?? '') { - case 'data[plugin.tx_staticinfotables_pi1.countryCode]': - case 'data[plugin.tx_staticinfotables_pi1.countriesAllowed]': - $repository = GeneralUtility::makeInstance(CountryRepository::class); - $entities = $repository->findAllOrderedBy('nameLocalized'); - break; - case 'data[plugin.tx_staticinfotables_pi1.countryZoneCode]': - $repository = GeneralUtility::makeInstance(CountryZoneRepository::class); - $countryCode = $this->getConfiguredCountryCode(); - if ($countryCode) { - $countryRepository = GeneralUtility::makeInstance(CountryRepository::class); - $country = $countryRepository->findOneByIsoCodeA3($countryCode); - if (is_object($country)) { - $entities = $repository->findByCountryOrderedByLocalizedName($country); - } - } - if (!$countryCode || (empty($entities) && $params['fieldValue'])) { - $entities = $repository->findAllOrderedBy('nameLocalized'); - } - break; - case 'data[plugin.tx_staticinfotables_pi1.currencyCode]': - $repository = GeneralUtility::makeInstance(CurrencyRepository::class); - $entities = $repository->findAllOrderedBy('nameLocalized'); - break; - case 'data[plugin.tx_staticinfotables_pi1.languageCode]': - $repository = GeneralUtility::makeInstance(LanguageRepository::class); - $entities = $repository->findAllNonConstructedNonSacred(); - $entities = $repository->localizedSort($entities); - break; - } - if (is_array($entities) && count($entities)) { - $options = []; - foreach ($entities as $entity) { - switch ($params['fieldName'] ?? '') { - case 'data[plugin.tx_staticinfotables_pi1.countryZoneCode]': - $value = $entity->getIsoCode(); - $options[] = ['name' => $entity->getNameLocalized() . ' (' . $value . ')', 'value' => $value]; - break; - case 'data[plugin.tx_staticinfotables_pi1.countryCode]': - case 'data[plugin.tx_staticinfotables_pi1.countriesAllowed]': - case 'data[plugin.tx_staticinfotables_pi1.currencyCode]': - $value = $entity->getIsoCodeA3(); - $options[] = ['name' => $entity->getNameLocalized() . ' (' . $value . ')', 'value' => $value]; - break; - case 'data[plugin.tx_staticinfotables_pi1.languageCode]': - $countryCode = $entity->getCountryIsoCodeA2(); - $value = $entity->getIsoCodeA2() . ($countryCode ? '_' . $countryCode : ''); - $options[] = ['name' => $entity->getNameLocalized() . ' (' . $value . ')', 'value' => $value]; - break; - } - } - $outSelected = []; - $size = $params['fieldName'] == 'data[plugin.tx_staticinfotables_pi1.countriesAllowed]' ? 5 : 1; - $field = HtmlElementUtility::selectConstructor($options, [$params['fieldValue']], $outSelected, $params['fieldName'], '', '', '', '', $size); - } - return $field; - } - - /** - * Gets the configured default country code - * - * @return string The configured default country code - */ - protected function getConfiguredCountryCode() - { - $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class); - $settings = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); - return $settings['plugin.']['tx_staticinfotables_pi1.']['countryCode']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Controller/ManagerController.php b/typo3conf/ext/static_info_tables/Classes/Controller/ManagerController.php deleted file mode 100644 index 40c3a1f..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Controller/ManagerController.php +++ /dev/null @@ -1,329 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\StaticInfoTables\Domain\Model\Country; -use SJBR\StaticInfoTables\Domain\Model\CountryZone; -use SJBR\StaticInfoTables\Domain\Model\Language; -use SJBR\StaticInfoTables\Domain\Model\LanguagePack; -use SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CountryZoneRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguageRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguagePackRepository; -use SJBR\StaticInfoTables\Domain\Repository\TerritoryRepository; -use SJBR\StaticInfoTables\Utility\LocaleUtility; -use TYPO3\CMS\Core\Localization\Locales; -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; - -/** - * Static Info Tables Manager controller - */ -class ManagerController extends ActionController -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'StaticInfoTables'; - - /** - * @var CountryRepository - */ - protected $countryRepository; - - /** - * Dependency injection of the Country Repository - * - * @param CountryRepository $countryRepository - * @return void - */ - public function injectCountryRepository(CountryRepository $countryRepository) - { - $this->countryRepository = $countryRepository; - } - - /** - * @var CountryZoneRepository - */ - protected $countryZoneRepository; - - /** - * Dependency injection of the Country Zone Repository - * - * @param CountryZoneRepository $countryZoneRepository - * @return void - */ - public function injectCountryZoneRepository(CountryZoneRepository $countryZoneRepository) - { - $this->countryZoneRepository = $countryZoneRepository; - } - - /** - * @var CurrencyRepository - */ - protected $currencyRepository; - - /** - * Dependency injection of the Currency Repository - * - * @param CurrencyRepository $currencyRepository - * @return void - */ - public function injectCurrencyRepository(CurrencyRepository $currencyRepository) - { - $this->currencyRepository = $currencyRepository; - } - - /** - * @var LanguageRepository - */ - protected $languageRepository; - - /** - * Dependency injection of the Language Repository - * - * @param LanguageRepository $languageRepository - * @return void - */ - public function injectLanguageRepository(LanguageRepository $languageRepository) - { - $this->languageRepository = $languageRepository; - } - - /** - * @var TerritoryRepository - */ - protected $territoryRepository; - - /** - * Dependency injection of the Territory Repository - * - * @param TerritoryRepository $territoryRepository - * @return void - */ - public function injectTerritoryRepository(TerritoryRepository $territoryRepository) - { - $this->territoryRepository = $territoryRepository; - } - - /** - * Display general information - */ - public function informationAction() - { - $this->view->assign( - 'actions', - [ - [ - 'code' => 'newLanguagePack', - 'title' => 'createLanguagePackTitle', - 'description' => 'createLanguagePackDescription', - ], - [ - 'code' => 'testForm', - 'title' => 'testFormTitle', - 'description' => 'testFormDescription', - ], - [ - 'code' => 'sqlDumpNonLocalizedData', - 'title' => 'sqlDumpNonLocalizedDataTitle', - 'description' => 'sqlDumpNonLocalizedDataDescription', - ], - ] - ); - } - - /** - * Display the language pack creation form - * - * @param LanguagePack $languagePack - */ - public function newLanguagePackAction(LanguagePack $languagePack = null) - { - if (!is_object($languagePack)) { - $languagePack = new LanguagePack(); - } - $languagePack->setVersion($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)]['version']); - $languagePack->setAuthor($GLOBALS['BE_USER']->user['realName']); - $languagePack->setAuthorEmail($GLOBALS['BE_USER']->user['email']); - $localeUtility = GeneralUtility::makeInstance(LocaleUtility::class); - $this->view->assign('locales', $localeUtility->getLocales()); - $this->view->assign('languagePack', $languagePack); - } - - /** - * Creation/update a language pack for the Static Info Tables - * - * @param LanguagePack $languagePack - */ - public function createLanguagePackAction(LanguagePack $languagePack) - { - // Add the localization columns - $locale = $languagePack->getLocale(); - // Get the English name of the locale - $localeUtility = new LocaleUtility(); - $language = $localeUtility->getLanguageFromLocale($locale); - $languagePack->setLanguage($language); - $languagePack->setTypo3VersionRange($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)]['constraints']['depends']['typo3']); - // If version is not set, use the version of the base extension - if (!$languagePack->getVersion()) { - $languagePack->setVersion($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)]['version']); - } - $this->countryRepository->addLocalizationColumns($locale); - $this->countryZoneRepository->addLocalizationColumns($locale); - $this->currencyRepository->addLocalizationColumns($locale); - $this->languageRepository->addLocalizationColumns($locale); - $this->territoryRepository->addLocalizationColumns($locale); - // Store the Language Pack - $languagePackRepository = GeneralUtility::makeInstance(LanguagePackRepository::class); - $messages = $languagePackRepository->writeLanguagePack($languagePack); - if (count($messages)) { - foreach ($messages as $message) { - $this->addFlashMessage($message, '', AbstractMessage::OK); - } - } - $this->forward('information'); - } - - /** - * Display a test form - * - * @param Country $country - * @param CountryZone $countryZone - * @param Language $language - */ - public function testFormAction(Country $country = null, CountryZone $countryZone = null, Language $language = null) - { - if (is_object($country) && (is_object($countryZone) || !$country->getCountryZones()->count())) { - $this->forward('testFormResult', 'Manager', $this->extensionName, ['country' => $country, 'countryZone' => $countryZone, 'language' => $language]); - } - if (is_object($country)) { - $this->view->assign('selectedCountry', $country); - } - if (is_object($countryZone)) { - $this->view->assign('selectedCountryZone', $countryZone); - } - if (is_object($language)) { - $this->view->assign('selectedLanguage', $language); - } - } - - /** - * Display the test form result - * - * @param Country $country - * @param CountryZone $countryZone - * @param Language $language - */ - public function testFormResultAction(Country $country = null, CountryZone $countryZone = null, Language $language = null) - { - $this->view->assign('country', $country); - $currencies = $this->currencyRepository->findByCountry($country); - if ($currencies->count()) { - $this->view->assign('currency', $currencies[0]); - } - if (is_object($countryZone)) { - $this->view->assign('countryZone', $countryZone); - } - $this->view->assign('language', $language); - $territories = $this->territoryRepository->findByCountry($country); - if ($territories->count()) { - $this->view->assign('territory', $territories[0]); - } - } - - /** - * Creation/update a language pack for the Static Info Tables - */ - public function sqlDumpNonLocalizedDataAction() - { - // Create a SQL dump of non-localized data - $dumpContent = []; - $dumpContent[] = $this->countryRepository->sqlDumpNonLocalizedData(); - $dumpContent[] = $this->countryZoneRepository->sqlDumpNonLocalizedData(); - $dumpContent[] = $this->currencyRepository->sqlDumpNonLocalizedData(); - $dumpContent[] = $this->languageRepository->sqlDumpNonLocalizedData(); - $dumpContent[] = $this->territoryRepository->sqlDumpNonLocalizedData(); - // Write the SQL dump file - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName); - $extensionPath = ExtensionManagementUtility::extPath($extensionKey); - $filename = 'export-ext_tables_static+adt.sql'; - GeneralUtility::writeFile($extensionPath . $filename, implode(LF, $dumpContent)); - $message = LocalizationUtility::translate('sqlDumpCreated', $this->extensionName) . ' ' . $extensionPath . $filename; - $this->addFlashMessage($message, '', AbstractMessage::OK); - $this->forward('information'); - } - - /** - * Get the typo3-supported locale options for the language pack creation - * - * @return array An array of language objects - */ - protected function getLocales() - { - $localeArray = []; - $locales = GeneralUtility::makeInstance(Locales::class); - $languages = $locales->getLanguages(); - foreach ($languages as $locale => $language) { - // No language pack for English - if ($locale != 'default') { - $languageObject = new Language(); - $languageObject->setCollatingLocale($locale); - $localizedLanguage = LocalizationUtility::translate('lang_' . $locale, 'Lang'); - $label = ($localizedLanguage ? $localizedLanguage : $language) . ' (' . $locale . ')'; - $languageObject->setNameEn($label); - $localeArray[$label] = $languageObject; - } - } - ksort($localeArray); - return $localeArray; - } - - /** - * Get language name from locale - * - * @param string $locale - * @return string Language name - */ - protected function getLanguageFromLocale($locale) - { - $locales = GeneralUtility::makeInstance(Locales::class); - $languages = $locales->getLanguages(); - $language = $languages[$locale]; - return $language . ' (' . $locale . ')'; - } - - protected function getErrorFlashMessage() - { - return false; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/AbstractEntity.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/AbstractEntity.php deleted file mode 100644 index b7d7822..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/AbstractEntity.php +++ /dev/null @@ -1,106 +0,0 @@ - - * 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 2 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 SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMap; -use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper; - -/** - * Abstract model for static entities - */ -class AbstractEntity extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity -{ - /** - * @var DataMapper - */ - protected $dataMapper; - - /** - * Name of the table from persistence mapping of this model - * - * @var string - */ - protected $tableName = ''; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - $this->dataMapper = GeneralUtility::makeInstance(DataMapper::class); - } - - /** - * Localized name of the entity - * - * @var string - */ - protected $nameLocalized = ''; - - /** - * Sets the localized name of the entity - * - * @param string $nameLocalized - * - * @return void - */ - public function setNameLocalized($nameLocalized) - { - $this->nameLocalized = $nameLocalized; - } - - /** - * Gets the localized name of the entity - * - * @return string - */ - public function getNameLocalized() - { - $language = LocalizationUtility::getCurrentLanguage(); - $labelFields = LocalizationUtility::getLabelFields($this->tableName, $language); - foreach ($labelFields as $labelField => $map) { - if ($this->_hasProperty($map['mapOnProperty'] ?? '')) { - $value = $this->_getProperty($map['mapOnProperty'] ?? ''); - if ($value) { - $this->nameLocalized = $value; - break; - } - } - } - return $this->nameLocalized; - } - - /** - * Gets the table name - * - * @return string - */ - public function getTableName() - { - return $this->tableName; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Country.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/Country.php deleted file mode 100644 index d5a2a68..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Country.php +++ /dev/null @@ -1,617 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\CountryZone; -use TYPO3\CMS\Extbase\Annotation\ORM\Lazy; -use TYPO3\CMS\Extbase\Persistence\ObjectStorage; - -/** - * The Country model - */ -class Country extends AbstractEntity -{ - /** - * @var string - */ - protected $addressFormat = ''; - - /** - * @var string - */ - protected $capitalCity = ''; - - /** - * Country zones of this country - * - * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SJBR\StaticInfoTables\Domain\Model\CountryZone> - * @Lazy - */ - protected $countryZones; - - /** - * Currency code as number (i.e. 978) - * ISO 4217 Nr Currency code - * - * @var int - */ - protected $currencyIsoCodeNumber = 0; - - /** - * Currency code as three digit string (i.e. EUR) - * ISO 4217 A3 Currency code - * - * @var string - */ - protected $currencyIsoCodeA3 = ''; - - /** - * Deletion status of the object - * - * @var bool - */ - protected $deleted = false; - - /** - * Whether or not the country is a member of the European Union - * - * @var bool - */ - protected $euMember = false; - - /** - * Country code as two digit string (i.e. AT) - * ISO 3166-1 A2 Country code - * - * @var string - */ - protected $isoCodeA2 = ''; - - /** - * Country code as three digit string (i.e. AUT) - * ISO 3166-1 A3 Country code - * - * @var string - */ - protected $isoCodeA3 = ''; - - /** - * Country code as number (i.e. 40) - * ISO 3166-1 Nr Country code - * - * @var int - */ - protected $isoCodeNumber = 0; - - /** - * The official name of the country in English - * - * @var string - */ - protected $officialNameEn = ''; - - /** - * The official name of the country in local language and local script - * - * @var string - */ - protected $officialNameLocal = ''; - - /** - * UN number of territory in which the country is located - * - * @var int - */ - protected $parentTerritoryUnCodeNumber = 0; - - /** - * The international phone prefix for the country - * - * @var int - */ - protected $phonePrefix = 0; - - /** - * @var string - */ - protected $shortNameEn = ''; - - /** - * @var string - */ - protected $shortNameLocal = ''; - - /** - * Whether the country is a member of the UNO or not - * - * @var bool - */ - protected $unMember = false; - - /** - * The Internet top level domain of the country - * - * @var string - */ - protected $topLevelDomain = ''; - - /** - * @var bool - */ - protected $zoneFlag = false; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - parent::initializeObject(); - $this->tableName = $this->dataMapper->getDataMap(self::class)->getTableName(); - $this->countryZones = new ObjectStorage(); - } - - /** - * Sets the address format. - * - * @param string $addressFormat - * - * @return void - */ - public function setAddressFormat($addressFormat) - { - $this->addressFormat = $addressFormat; - } - - /** - * Gets the address format. - * - * @return string - */ - public function getAddressFormat() - { - return $this->addressFormat; - } - - /** - * Sets the name of the capital city - * - * @param string $capitalCity - * - * @return void - */ - public function setCapitalCity($capitalCity) - { - $this->capitalCity = $capitalCity; - } - - /** - * Gets the name of the capital city - * - * @return string - */ - public function getCapitalCity() - { - return $this->capitalCity; - } - - /** - * Sets the ISO A3 currency code. - * - * @param string $currencyIsoCodeA3 - * - * @return void - */ - public function setCurrencyIsoCodeA3($currencyIsoCodeA3) - { - $this->currencyIsoCodeA3 = $currencyIsoCodeA3; - } - - /** - * Gets the ISO A3 currency code. - * - * @return string - */ - public function getCurrencyIsoCodeA3() - { - return $this->currencyIsoCodeA3; - } - - /** - * Sets the ISO numeric currency code - * - * @param int $currencyIsoCodeNumber - * - * @return void - */ - public function setCurrencyIsoCodeNumber($currencyIsoCodeNumber) - { - $this->currencyIsoCodeNumber = $currencyIsoCodeNumber; - } - - /** - * Gets the ISO numeric currency code - * - * @return int - */ - public function getCurrencyIsoCodeNumber() - { - return $this->currencyIsoCodeNumber; - } - - /** - * Sets whether this country is a member of the European Union. - * - * @param bool $euMember - * - * @return void - */ - public function setEuMember($euMember) - { - $this->euMember = $euMember; - } - - /** - * Gets the deletion status of the entity - * - * @return bool - */ - public function getDeleted() - { - return $this->deleted; - } - - /** - * Sets the deletion status of the entity - * - * @param bool $deleted - * - * @return void - */ - public function setDeleted($deleted) - { - $this->deleted = $deleted; - } - - /** - * Gets whether this country is a member of the European Union. - * - * @return bool - */ - public function getEuMember() - { - return $this->euMember; - } - - /** - * Gets whether this country is a member of the European Union. - * - * This method is a synonym for the getEuMember method. - * - * @return bool - */ - public function isEuMember() - { - return $this->getEuMember(); - } - - /** - * Sets the ISO alpha-2 code. - * - * @param string $isoCodeA2 - * - * @return void - */ - public function setIsoCodeA2($isoCodeA2) - { - $this->isoCodeA2 = $isoCodeA2; - } - - /** - * Gets the ISO alpha-2 code. - * - * @return string - */ - public function getIsoCodeA2() - { - return $this->isoCodeA2; - } - - /** - * Sets the ISO alpha-3 code. - * - * @param string $isoCodeA3 - * - * @return void - */ - public function setIsoCodeA3($isoCodeA3) - { - $this->isoCodeA3 = $isoCodeA3; - } - - /** - * Gets the ISO alpha-3 code. - * - * @return string - */ - public function getIsoCodeA3() - { - return $this->isoCodeA3; - } - - /** - * Sets the ISO code number. - * - * @param int $isoCodeNumber - * - * @return void - */ - public function setIsoCodeNumber($isoCodeNumber) - { - $this->isoCodeNumber = $isoCodeNumber; - } - - /** - * Gets the ISO code number. - * - * @return int - */ - public function getIsoCodeNumber() - { - return $this->isoCodeNumber; - } - - /** - * Sets the official name of the country in English - * - * @param string $officialNameEn - * - * @return void - */ - public function setOfficialNameEn($officialNameEn) - { - $this->officialNameEn = $officialNameEn; - } - - /** - * Gets the official name of the country in English - * - * @return string - */ - public function getOfficialNameEn() - { - return $this->officialNameEn; - } - - /** - * Sets the official name of the country in local language and script - * - * @param string $officialNameLocal - * - * @return void - */ - public function setOfficialNameLocal($officialNameLocal) - { - $this->officialNameLocal = $officialNameLocal; - } - - /** - * Gets the official name of the country in local language and script - * - * @return string - */ - public function getOfficialNameLocal() - { - return $this->officialNameLocal; - } - - /** - * Sets the parent territory UN numeric code. - * - * @param int $parentTerritoryUnCodeNumber - * - * @return void - */ - public function setParentTerritoryUnCodeNumber($parentTerritoryUnCodeNumber) - { - $this->parentTerritoryUnCodeNumber = $parentTerritoryUnCodeNumber; - } - - /** - * Gets the parent territory UN numeric code. - * - * @return int - */ - public function getParentTerritoryUnCodeNumber() - { - return $this->parentTerritoryUnCodeNumber; - } - - /** - * Sets the phone prefix. - * - * @param int $phonePrefix - * - * @return void - */ - public function setPhonePrefix($phonePrefix) - { - $this->phonePrefix = $phonePrefix; - } - - /** - * Gets the phone prefix. - * - * @return int - */ - public function getPhonePrefix() - { - return $this->phonePrefix; - } - - /** - * Sets the English short name. - * - * @param string $shortNameEn - * - * @return void - */ - public function setShortNameEn($shortNameEn) - { - $this->shortNameEn = $shortNameEn; - } - - /** - * Gets the English short name. - * - * @return string - */ - public function getShortNameEn() - { - return $this->shortNameEn; - } - - /** - * Sets the short local name. - * - * @param string $shortNameLocal - * - * @return void - */ - public function setShortNameLocal($shortNameLocal) - { - $this->shortNameLocal = $shortNameLocal; - } - - /** - * Gets the short local name. - * - * @return string - */ - public function getShortNameLocal() - { - return $this->shortNameLocal; - } - - /** - * Sets the top-level domain. - * - * @param string $topLevelDomain - * - * @return void - */ - public function setTopLevelDomain($topLevelDomain) - { - $this->topLevelDomain = $topLevelDomain; - } - - /** - * Gets the top-level domain. - * - * @return string - */ - public function getTopLevelDomain() - { - return $this->topLevelDomain; - } - - /** - * Sets whether this country is a member of the United Nations. - * - * @param bool $unMember - * - * @return void - */ - public function setUnMember($unMember) - { - $this->unMember = $unMember; - } - - /** - * Gets whether this country is a member of the United Nations. - * - * @return bool - */ - public function getUnMember() - { - return $this->unMember; - } - - /** - * Sets whether this country is a member of the United Nations. - * - * This method is a synonym for the getUnMember method. - * - * @return bool - */ - public function isUnMember() - { - return $this->getUnMember(); - } - - /** - * Sets the zone flag. - * - * @param bool $zoneFlag - * - * @return void - */ - public function setZoneFlag($zoneFlag) - { - $this->zoneFlag = $zoneFlag; - } - - /** - * Gets the zone flag. - * - * @return bool - */ - public function getZoneFlag() - { - return $this->zoneFlag; - } - - /** - * Sets the country zones - * - * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SJBR\StaticInfoTables\Domain\Model\CountryZone> $countryZones - * - * @return void - */ - public function setCountryZones($countryZones) - { - $this->countryZones = $countryZones; - } - - /** - * Gets the country zones - * - * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\SJBR\StaticInfoTables\Domain\Model\CountryZone> $countryZones - */ - public function getCountryZones() - { - return $this->countryZones; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/CountryZone.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/CountryZone.php deleted file mode 100644 index c768648..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/CountryZone.php +++ /dev/null @@ -1,255 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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! - */ - -/** - * The Country Zone model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ - -class CountryZone extends AbstractEntity -{ - /** - * Country code as two digit string (i.e. AT) - * ISO 3166-1 A2 Country code - * - * @var string - */ - protected $countryIsoCodeA2 = ''; - - /** - * Country code as three digit string (i.e. AUT) - * ISO 3166-1 A3 Country code - * - * @var string - */ - protected $countryIsoCodeA3 = ''; - - /** - * Country code as number (i.e. 40) - * ISO 3166-1 Nr Country code - * - * @var int - */ - protected $countryIsoCodeNumber = 0; - - /** - * Deletion status of the object - * - * @var bool - */ - protected $deleted = false; - - /** - * Country zone code as string - * ISO 3166-2 Country Zone code - * - * @var string - */ - protected $isoCode = ''; - - /** - * Local name of the country zone - * - * @var string - */ - protected $localName = ''; - - /** - * English name of the country zone - * - * @var string - */ - protected $nameEn = ''; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - parent::initializeObject(); - $this->tableName = $this->dataMapper->getDataMap(self::class)->getTableName(); - } - - /** - * Sets the country ISO alpha-2 code. - * - * @param string $countryIsoCodeA2 - * - * @return void - */ - public function setCountryIsoCodeA2($countryIsoCodeA2) - { - $this->countryIsoCodeA2 = $countryIsoCodeA2; - } - - /** - * Gets the country ISO alpha-2 code. - * - * @return string - */ - public function getCountryIsoCodeA2() - { - return $this->countryIsoCodeA2; - } - - /** - * Sets the country ISO alpha-3 code. - * - * @param string $countryIsoCodeA3 - * - * @return void - */ - public function setCountryIsoCodeA3($countryIsoCodeA3) - { - $this->countryIsoCodeA3 = $countryIsoCodeA3; - } - - /** - * Gets the country ISO alpha-3 code. - * - * @return string - */ - public function getCountryIsoCodeA3() - { - return $this->countryIsoCodeA3; - } - - /** - * Sets the country numeric ISO code - * - * @param int $countryIsoCodeNumber - * - * @return void - */ - public function setCountryIsoCodeNumber($countryIsoCodeNumber) - { - $this->countryIsoCodeNumber = $countryIsoCodeNumber; - } - - /** - * Gets the country numeric ISO code - * - * @return int - */ - public function getCountryIsoCodeNumber() - { - return $this->countryIsoCodeNumber; - } - - /** - * Gets the deletion status of the entity - * - * @return bool - */ - public function getDeleted() - { - return $this->deleted; - } - - /** - * Sets the deletion status of the entity - * - * @param bool $deleted - * - * @return void - */ - public function setDeleted($deleted) - { - return $this->deleted = $deleted; - } - - /** - * Sets the country zone ISO code. - * - * @param string $isoCode - * - * @return void - */ - public function setIsoCode($isoCode) - { - $this->isoCode = $isoCode; - } - - /** - * Gets the country zone ISO code. - * - * @return string - */ - public function getIsoCode() - { - return $this->isoCode; - } - - /** - * Sets the local name. - * - * @param string $localName - * - * @return void - */ - public function setLocalName($localName) - { - $this->localName = $localName; - } - - /** - * Gets the local name. - * - * @return string - */ - public function getLocalName() - { - return $this->localName; - } - - /** - * Sets the English name. - * - * @param string $nameEn - * - * @return void - */ - public function setNameEn($nameEn) - { - $this->nameEn = $nameEn; - } - - /** - * Returns English name. If empty returns the localName. - * - * @return string - */ - public function getNameEn() - { - if ($this->nameEn === '') { - return $this->getLocalName(); - } - return $this->nameEn; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Currency.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/Currency.php deleted file mode 100644 index 5120a9a..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Currency.php +++ /dev/null @@ -1,424 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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! - */ - -/** - * The Currency model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ - -class Currency extends AbstractEntity -{ - /** - * The number of decimals to be shown when an amount is presented in this currency - * - * @var int - */ - protected $decimalDigits = 0; - - /** - * The character to be shown in front of the decimals when an amount is presented in this currency - * - * @var string - */ - protected $decimalPoint = ''; - - /** - * Deletion status of the object - * - * @var bool - */ - protected $deleted = false; - - /** - * The divisor used to obtain the subdivision of the currency - * - * @var int - */ - protected $divisor = 0; - - /** - * Currency code as three digit string (i.e. EUR) - * ISO 4217 alpha-3 currency code - * - * @var string - */ - protected $isoCodeA3 = ''; - - /** - * Currency code as number - * ISO 4217 numeric currency code - * - * @var int - */ - protected $isoCodeNumber = 0; - - /** - * English name of the currency - * - * @var string - */ - protected $nameEn = ''; - - /** - * English name of the currency subdivision unit - * - * @var string - */ - protected $subdivisionNameEn = ''; - - /** - * The symbol to be shown to the left of an amount stated in units of the subdivision of the currency - * - * @var string - */ - protected $subdivisionSymbolLeft = ''; - - /** - * The symbol to be shown to the right of an amount stated in units of the subdivision of the currency - * - * @var string - */ - protected $subdivisionSymbolRight = ''; - - /** - * The symbol to be shown to the left of an amount stated in units of the currency - * - * @var string - */ - protected $symbolLeft = ''; - - /** - * The symbol to be shown to the right of an amount stated in units of the currency - * - * @var string - */ - protected $symbolRight = ''; - - /** - * Character to be used between every group of thousands of an amount stated in units of this currency - * - * @var string - */ - protected $thousandsPoint = ''; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - parent::initializeObject(); - $this->tableName = $this->dataMapper->getDataMap(self::class)->getTableName(); - } - - /** - * Sets the number of decimal digits. - * - * @param int $decimalDigits - * - * @return void - */ - public function setDecimalDigits($decimalDigits) - { - $this->decimalDigits = $decimalDigits; - } - - /** - * Gets the number of decimal digits. - * - * @return int - */ - public function getDecimalDigits() - { - return $this->decimalDigits; - } - - /** - * Sets the decimal point character - * - * @param string $decimalPoint - * - * @return void - */ - public function setDecimalPoint($decimalPoint) - { - $this->decimalPoint = $decimalPoint; - } - - /** - * Gets the decimal point character - * - * @return string - */ - public function getDecimalPoint() - { - return $this->decimalPoint; - } - - /** - * Gets the deletion status of the entity - * - * @return bool - */ - public function getDeleted() - { - return $this->deleted; - } - - /** - * Sets the deletion status of the entity - * - * @param bool $deleted - * - * @return void - */ - public function setDeleted($deleted) - { - return $this->deleted = $deleted; - } - - /** - * Sets the divisor. - * - * @param int $divisor - * - * @return void - */ - public function setDivisor($divisor) - { - $this->divisor = $divisor; - } - - /** - * Gets the divisor. - * - * @return int - */ - public function getDivisor() - { - return $this->divisor; - } - - /** - * Sets the ISO alpha-3 code. - * - * @param string $isoCodeA3 - * - * @return void - */ - public function setIsoCodeA3($isoCodeA3) - { - $this->isoCodeA3 = $isoCodeA3; - } - - /** - * Gets the ISO alpha-3 code. - * - * @return string - */ - public function getIsoCodeA3() - { - return $this->isoCodeA3; - } - - /** - * Sets the ISO code number. - * - * @param int $isoCodeNumber - * - * @return void - */ - public function setIsoCodeNumber($isoCodeNumber) - { - $this->isoCodeNumber = $isoCodeNumber; - } - - /** - * Gets the ISO code number. - * - * @return int - */ - public function getIsoCodeNumber() - { - return $this->isoCodeNumber; - } - - /** - * Sets the English name of the currency - * - * @param string $nameEn - * - * @return void - */ - public function setNameEn($nameEn) - { - $this->nameEn = $nameEn; - } - - /** - * Gets the English name of the currency - * - * @return string - */ - public function getNameEn() - { - return $this->nameEn; - } - - /** - * Sets the English name of the currency subdivision - * - * @param string $subdivisionNameEn - * - * @return void - */ - public function setSubdivisionNameEn($subdivisionNameEn) - { - $this->subdivisionNameEn = $subdivisionNameEn; - } - - /** - * Gets the English name of the currency subdivision - * - * @return string - */ - public function getSubdivisionNameEn() - { - return $this->subdivisionNameEn; - } - - /** - * Sets the left-hand side symbol for an amount stated in units of the subdivision of the currency - * - * @param string $subdivisionSymbolLeft - * - * @return void - */ - public function setSubdivisionSymbolLeft($subdivisionSymbolLeft) - { - $this->subdivisionSymbolLeft = $subdivisionSymbolLeft; - } - - /** - * Gets the left-hand side symbol for an amount stated in units of the subdivision of the currency - * - * @return string - */ - public function getSubdivisionSymbolLeft() - { - return $this->subdivisionSymbolLeft; - } - - /** - * Sets the right-hand side symbol for an amount stated in units of the subdivision of the currency - * - * @param string $subdivisionSymbolRight - * - * @return void - */ - public function setSubdivisionSymbolRight($subdivisionSymbolRight) - { - $this->subdivisionSymbolRight = $subdivisionSymbolRight; - } - - /** - * Gets the right-hand side symbol for an amount stated in units of the subdivision of the currency - * - * @return string - */ - public function getSubdivisionSymbolRight() - { - return $this->subdivisionSymbolRight; - } - - /** - * Sets the symbol to be shown to the left of an amount stated in units of the currency - * - * @param string $symbolLeft - * - * @return void - */ - public function setSymbolLeft($symbolLeft) - { - $this->symbolLeft = $symbolLeft; - } - - /** - * Gets the symbol to be shown to the left of an amount stated in units of the currency - * - * @return string - */ - public function getSymbolLeft() - { - return $this->symbolLeft; - } - - /** - * Sets the symbol to be shown to the right of an amount stated in units of the currency - * - * @param string $symbolRight - * - * @return void - */ - public function setSymbolRight($symbolRight) - { - $this->symbolRight = $symbolRight; - } - - /** - * Gets the symbol to be shown to the right of an amount stated in units of the currency - * - * @return string - */ - public function getSymbolRight() - { - return $this->symbolRight; - } - - /** - * Sets the thousands point/separator. - * - * @param string $thousandsPoint - * - * @return void - */ - public function setThousandsPoint($thousandsPoint) - { - $this->thousandsPoint = $thousandsPoint; - } - - /** - * Gets the thousands point/separator. - * - * @return string - */ - public function getThousandsPoint() - { - return $this->thousandsPoint; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Language.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/Language.php deleted file mode 100644 index 400a0b9..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Language.php +++ /dev/null @@ -1,325 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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! - */ - -/** - * The Language model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ - -class Language extends AbstractEntity -{ - /** - * @var string - */ - protected $collatingLocale = ''; - - /** - * Country code as two digit string (i.e. AT) - * Identifies this language as a variant of the language identified by the ISO 639-1 A2 Language code - * See also RFC 4646 - * ISO 3166-1 A2 Country code - * - * @var string - */ - protected $countryIsoCodeA2 = ''; - - /** - * @var bool - */ - protected $constructedLanguage = false; - - /** - * Deletion status of the object - * - * @var bool - */ - protected $deleted = false; - - /** - * ISO 639-1 A2 Language code - * - * @var string - */ - protected $isoCodeA2 = ''; - - /** - * Local name: name of language in the language itself - * - * @var string - */ - protected $localName = ''; - - /** - * English name - * - * @var string - */ - protected $nameEn = ''; - - /** - * @var bool - */ - protected $sacredLanguage = false; - - /** - * @var string - */ - protected $typo3Code = ''; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - parent::initializeObject(); - $this->tableName = $this->dataMapper->getDataMap(self::class)->getTableName(); - } - - /** - * Sets the collating locale. - * - * @param string $collatingLocale - * - * @return void - */ - public function setCollatingLocale($collatingLocale) - { - $this->collatingLocale = $collatingLocale; - } - - /** - * Gets the collating locale. - * - * @return string - */ - public function getCollatingLocale() - { - return $this->collatingLocale; - } - - /** - * Sets the ISO 3166-1 A2 Country code - * - * @param string $countryIsoCodeA2 - * - * @return void - */ - public function setCountryIsoCodeA2($countryIsoCodeA2) - { - $this->countryIsoCodeA2 = $countryIsoCodeA2; - } - - /** - * Gets the ISO 3166-1 A2 Country code - * - * @return string - */ - public function getCountryIsoCodeA2() - { - return $this->countryIsoCodeA2; - } - - /** - * Sets whether this is a constructed language. - * - * @param bool $constructedLanguage - * - * @return void - */ - public function setConstructedLanguage($constructedLanguage) - { - $this->constructedLanguage = $constructedLanguage; - } - - /** - * Gets whether this is a constructed language. - * - * @return bool - */ - public function getConstructedLanguage() - { - return $this->constructedLanguage; - } - - /** - * Gets whether this is a constructed language. - * - * This method is a synonym for the getConstructedLanguage method. - * - * @return bool - */ - public function isConstructedLanguage() - { - return $this->getConstructedLanguage(); - } - - /** - * Gets the deletion status of the entity - * - * @return bool - */ - public function getDeleted() - { - return $this->deleted; - } - - /** - * Sets the deletion status of the entity - * - * @param bool $deleted - * - * @return void - */ - public function setDeleted($deleted) - { - return $this->deleted = $deleted; - } - - /** - * Sets the ISO 639-1 A2 Language code - * - * @param string $isoCodeA2 - * - * @return void - */ - public function setIsoCodeA2($isoCodeA2) - { - $this->isoCodeA2 = $isoCodeA2; - } - - /** - * Gets the ISO 639-1 A2 Language code - * - * @return string - */ - public function getIsoCodeA2() - { - return $this->isoCodeA2; - } - - /** - * Sets the local name. - * - * @param string $localName - * - * @return void - */ - public function setLocalName($localName) - { - $this->localName = $localName; - } - - /** - * Gets the local name. - * - * @return string - */ - public function getLocalName() - { - return $this->localName; - } - - /** - * Sets the English name - * - * @param string $nameEn - * - * @return void - */ - public function setNameEn($nameEn) - { - $this->nameEn = $nameEn; - } - - /** - * Gets the English name - * - * @return string - */ - public function getNameEn() - { - return $this->nameEn; - } - - /** - * Sets whether this is a sacred language. - * - * @param bool $sacredLanguage - * - * @return void - */ - public function setSacredLanguage($sacredLanguage) - { - $this->sacredLanguage = $sacredLanguage; - } - - /** - * Gets whether this is a sacred language. - * - * @return bool - */ - public function getSacredLanguage() - { - return $this->sacredLanguage; - } - - /** - * Sets whether this is a sacred language. - * - * This method is a synonym for the getSacredLanguage method. - * - * @return bool - */ - public function isSacredLanguage() - { - return $this->getSacredLanguage(); - } - - /** - * Sets the TYPO3 language code. - * - * @param string $typo3Code - * - * @return void - */ - public function setTypo3Code($typo3Code) - { - $this->typo3Code = $typo3Code; - } - - /** - * Gets the TYPO3 language code. - * - * @return string - */ - public function getTypo3Code() - { - return $this->typo3Code; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/LanguagePack.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/LanguagePack.php deleted file mode 100644 index bbb9f0b..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/LanguagePack.php +++ /dev/null @@ -1,268 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CountryZoneRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguageRepository; -use SJBR\StaticInfoTables\Domain\Repository\TerritoryRepository; -use TYPO3\CMS\Core\Localization\Parser\XliffParser; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Annotation\Validate; -use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; - -/** - * Language Pack object - */ -class LanguagePack extends AbstractEntity -{ - /** - * Name of the extension this class belongs to - * - * @var string - */ - protected $extensionName = 'StaticInfoTables'; - - /** - * @var string - * @Validate("TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator") - */ - protected $author; - - /** - * @var string - */ - protected $authorCompany; - - /** - * @var string - * @Validate("TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator") - */ - protected $vendorName; - - /** - * @var string - * @Validate("EmailAddress") - */ - protected $authorEmail; - - /** - * @var string - */ - protected $locale; - - /** - * @var string - */ - protected $language; - - /** - * @var string - */ - protected $typo3VersionRange; - - /** - * @var string - * @Validate("TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator") - */ - protected $version; - - /** - * @var CountryRepository - */ - protected $countryRepository; - - /** - * @var CountryZoneRepository - */ - protected $countryZoneRepository; - - /** - * @var CurrencyRepository - */ - protected $currencyRepository; - - /** - * @var LanguageRepository - */ - protected $languageRepository; - - /** - * @var TerritoryRepository - */ - protected $territoryRepository; - - public function __construct( - $author = '', - $authorCompany = '', - $vendorName = '', - $authorEmail = '', - $locale = '', - $language = '' - ) { - $this->countryRepository = GeneralUtility::makeInstance(CountryRepository::class); - $this->countryZoneRepository = GeneralUtility::makeInstance(CountryZoneRepository::class); - $this->currencyRepository = GeneralUtility::makeInstance(CurrencyRepository::class); - $this->languageRepository = GeneralUtility::makeInstance(LanguageRepository::class); - $this->territoryRepository = GeneralUtility::makeInstance(TerritoryRepository::class); - $this->setAuthor($author); - $this->setAuthorCompany($authorCompany); - $this->setVendorName($vendorName); - $this->setAuthorEmail($authorEmail); - $this->setLocale($locale); - $this->setLanguage($language); - } - - public function setAuthor($author) - { - $this->author = $author; - } - - public function getAuthor() - { - return $this->author; - } - - public function setAuthorCompany($authorCompany) - { - $this->authorCompany = $authorCompany; - } - - public function getAuthorCompany() - { - return $this->authorCompany; - } - - public function setVendorName($vendorName) - { - $this->vendorName = $vendorName; - } - - public function getVendorName() - { - return $this->vendorName; - } - - public function setAuthorEmail($authorEmail) - { - $this->authorEmail = $authorEmail; - } - - public function getAuthorEmail() - { - return $this->authorEmail; - } - - public function setLocale($locale) - { - $this->locale = $locale; - } - - public function getLocale() - { - return $this->locale; - } - - public function setLanguage($language) - { - $this->language = $language; - } - - public function getLanguage() - { - return $this->language; - } - - public function setTypo3VersionRange($typo3VersionRange) - { - $this->typo3VersionRange = $typo3VersionRange; - } - - public function getTypo3VersionRange() - { - return $this->typo3VersionRange; - } - - public function setVersion($version) - { - $this->version = $version; - } - - public function getVersion() - { - return $this->version; - } - - /** - * Gets the localization labels for this language pack - * - * @return string localization labels in xliff format - */ - public function getLocalizationLabels() - { - // Build the localization labels of the language pack - $XliffParser = new XliffParser(); - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName); - $extensionPath = ExtensionManagementUtility::extPath($extensionKey); - $sourceXliffFilePath = $extensionPath . 'Resources/Private/Language/locallang_db.xlf'; - $parsedData = $XliffParser->getParsedData($sourceXliffFilePath, 'default'); - $localizationLabels = []; - $localeLowerCase = strtolower($this->getLocale()); - $localeUpperCase = strtoupper($this->getLocale()); - foreach ($parsedData['default'] as $translationElementId => $translationElement) { - if (substr($translationElementId, -3) == '_en') { - $localizationLabels[] = chr(9) . chr(9) . chr(9) . ''; - $localizationLabels[] = chr(9) . chr(9) . chr(9) . chr(9) . '' . str_replace('(EN)', '(' . $localeUpperCase . ')', $translationElement[0]['source']) . ''; - if ($translationElement[0]['target']) { - $localizationLabels[] = chr(9) . chr(9) . chr(9) . chr(9) . '' . str_replace('(EN)', '(' . $localeUpperCase . ')', $translationElement[0]['target']) . ''; - } - $localizationLabels[] = chr(9) . chr(9) . chr(9) . ''; - } - } - return implode(LF, $localizationLabels); - } - - /** - * Gets the update queries for this language pack - * - * @return string update queries in sql format - */ - public function getUpdateQueries() - { - $updateQueries = []; - $locale = $this->getLocale(); - $updateQueries = array_merge($updateQueries, $this->countryRepository->getUpdateQueries($locale)); - $updateQueries = array_merge($updateQueries, $this->countryZoneRepository->getUpdateQueries($locale)); - $updateQueries = array_merge($updateQueries, $this->currencyRepository->getUpdateQueries($locale)); - $updateQueries = array_merge($updateQueries, $this->languageRepository->getUpdateQueries($locale)); - $updateQueries = array_merge($updateQueries, $this->territoryRepository->getUpdateQueries($locale)); - return implode(LF, $updateQueries); - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/SystemLanguage.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/SystemLanguage.php deleted file mode 100644 index 5605563..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/SystemLanguage.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * 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\Extbase\DomainObject\AbstractEntity; - -/** - * The System Language model - */ -class SystemLanguage extends AbstractEntity -{ - /** - * @var string System language name - */ - protected $title = ''; - - /** - * @var \SJBR\StaticInfoTables\Domain\Model\Language - */ - protected $isoLanguage = null; - - /** - * Sets the language name - * - * @param string $title - * - * @return void - */ - public function setTitle($title) - { - $this->title = $title; - } - - /** - * Gets the backend language name - * - * @return string - */ - public function getTitle() - { - return $this->title; - } - - /** - * Sets the ISO language - * - * @param Language $isoLanguage - * - * @return void - */ - public function setIsoLanguage(Language $isoLanguage) - { - $this->isoLanguage = $isoLanguage; - } - - /** - * Gets the ISO language - * - * @return Language - */ - public function getIsoLanguage() - { - if ($this->isoLanguage !== null) { - return clone $this->isoLanguage; - } - return $this->isoLanguage; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Territory.php b/typo3conf/ext/static_info_tables/Classes/Domain/Model/Territory.php deleted file mode 100644 index 0d5a375..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Model/Territory.php +++ /dev/null @@ -1,161 +0,0 @@ - - * (c) 2013-2022 Stanislas Rolland - * 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 2 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! - */ - -/** - * The Territory model - * - * @copyright Copyright belongs to the respective authors - * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later - */ - -class Territory extends AbstractEntity -{ - /** - * Deletion status of the object - * - * @var bool - */ - protected $deleted = false; - - /** - * UN numeric territory code - * - * @var int - */ - protected $unCodeNumber = 0; - - /** - * English name - * - * @var string - */ - protected $nameEn = ''; - - /** - * UN numeric territory code of parent territory - * - * @var int - */ - protected $parentTerritoryUnCodeNumber = 0; - - /** - * On initialization, get the columns mapping configuration - */ - public function initializeObject() - { - parent::initializeObject(); - $this->tableName = $this->dataMapper->getDataMap(self::class)->getTableName(); - } - - /** - * Gets the deletion status of the entity - * - * @return bool - */ - public function getDeleted() - { - return $this->deleted; - } - - /** - * Sets the deletion status of the entity - * - * @param bool $deleted - * - * @return void - */ - public function setDeleted($deleted) - { - $this->deleted = $deleted; - } - - /** - * Sets the English name - * - * @param string $nameEn - * - * @return void - */ - public function setNameEn($nameEn) - { - $this->nameEn = $nameEn; - } - - /** - * Returns the English name - * - * @return string - */ - public function getNameEn() - { - return $this->nameEn; - } - - /** - * Sets the UN territory numeric code - * - * @param int $unCodeNumber - * - * @return void - */ - public function setUnCodeNumber($unCodeNumber) - { - $this->unCodeNumber = $unCodeNumber; - } - - /** - * Returns the UN territory numeric code - * - * @return int - */ - public function getUnCodeNumber() - { - return $this->unCodeNumber; - } - - /** - * Sets the UN numeric territory code of the parent territory - * - * @param int $parentTerritoryUnCodeNumber - * - * @return void - */ - public function setParentTerritoryUnCodeNumber($parentTerritoryUnCodeNumber) - { - $this->parentTerritoryUnCodeNumber = $parentTerritoryUnCodeNumber; - } - - /** - * Returns the UN numeric territory code of the parent territory - * - * @return int - */ - public function getParentTerritoryUnCodeNumber() - { - return $this->parentTerritoryUnCodeNumber; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/AbstractEntityRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/AbstractEntityRepository.php deleted file mode 100644 index 2dcbb49..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/AbstractEntityRepository.php +++ /dev/null @@ -1,423 +0,0 @@ - - * (c) 2013-2022 Stanislas Rolland - * 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 2 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 Doctrine\DBAL\Schema\Column; -use Doctrine\DBAL\Schema\TableDiff; -use Doctrine\DBAL\Types\Type; -use SJBR\StaticInfoTables\Service\SqlSchemaMigrationService; -use SJBR\StaticInfoTables\Utility\DatabaseUtility; -use SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper; -use TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface; -use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; -use TYPO3\CMS\Extbase\Persistence\QueryInterface; -use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; -use TYPO3\CMS\Extbase\Persistence\Repository; - -/** - * Abstract Repository for static entities - * - * @author Armin Rüdiger Vieweg - * @author Stanislas Rolland - * @author Oliver Klee - */ -abstract class AbstractEntityRepository extends Repository -{ - /** - * @var string Name of the extension this class belongs to - */ - protected $extensionName = 'StaticInfoTables'; - - /** - * @var DataMapper - */ - protected $dataMapper; - - /** - * @var array ISO keys for this static table - */ - protected $isoKeys = []; - - /** - * Injects the DataMapper to map nodes to objects - * - * @param DataMapper $dataMapper - * - * @return void - */ - public function injectDataMapper(DataMapper $dataMapper) - { - $this->dataMapper = $dataMapper; - } - - /** - * Initializes the repository. - * - * @return void - */ - public function initializeObject() - { - $querySettings = GeneralUtility::makeInstance(Typo3QuerySettings::class); - $querySettings->setRespectStoragePage(false); - $this->setDefaultQuerySettings($querySettings); - } - - /** - * Find all with deleted included - * - * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface|array all entries - */ - public function findAllDeletedIncluded() - { - $querySettings = GeneralUtility::makeInstance(QuerySettingsInterface::class); - $querySettings->setStoragePageIds([0]); - $querySettings->setIncludeDeleted(true); - $this->setDefaultQuerySettings($querySettings); - return parent::findAll(); - } - - /** - * Find all objects with uid in list - * - * @param string $list: list of uid's - * @return QueryResultInterface|array all entries - */ - public function findAllByUidInList($list = '') - { - if (empty($list)) { - return []; - } - $query = $this->createQuery(); - $list = GeneralUtility::trimExplode(',', $list, true); - $query->matching($query->in('uid', $list)); - return $query->execute(); - } - - /** - * Find all ordered by the localized name - * - * @param string $orderDirection may be "asc" or "desc". Default is "asc". - * @return QueryResultInterface|array all entries ordered by localized name - */ - protected function findAllOrderedByLocalizedName($orderDirection = 'asc') - { - $entities = parent::findAll(); - return $this->localizedSort($entities, $orderDirection); - } - - /** - * Sort entities by the localized name - * - * @param QueryResultInterface $entities to be sorted - * @param string $orderDirection may be "asc" or "desc". Default is "asc". - * - * @return array entities ordered by localized name - */ - public function localizedSort(QueryResultInterface $entities, $orderDirection = 'asc') - { - $result = $entities->toArray(); - $locale = LocalizationUtility::setCollatingLocale(); - if ($locale !== false) { - if ($orderDirection === 'asc') { - uasort($result, [$this, 'strcollOnLocalizedName']); - } else { - uasort($result, [$this, 'strcollOnLocalizedNameDesc']); - } - } - return $result; - } - - /** - * Using strcoll comparison on localized names - * - * @return int see strcoll - * - * @param mixed $entityA - * @param mixed $entityB - */ - protected function strcollOnLocalizedName($entityA, $entityB) - { - return strcoll($entityA->getNameLocalized(), $entityB->getNameLocalized()); - } - - /** - * Using strcoll comparison on localized names - descending order - * - * @return int see strcoll - * - * @param mixed $entityA - * @param mixed $entityB - */ - protected function strcollOnLocalizedNameDesc($entityA, $entityB) - { - return strcoll($entityB->getNameLocalized(), $entityA->getNameLocalized()); - } - - /** - * Find all ordered by given property name - * - * @param string $propertyName property name to order by - * @param string $orderDirection may be "asc" or "desc". Default is "asc". - * @return QueryResultInterface|array all entries ordered by $propertyName - */ - public function findAllOrderedBy($propertyName, $orderDirection = 'asc') - { - $queryResult = []; - - if ($orderDirection !== 'asc' && $orderDirection !== 'desc') { - throw new \InvalidArgumentException('Order direction must be "asc" or "desc".', 1316607580); - } - - if ($propertyName == 'nameLocalized') { - $queryResult = $this->findAllOrderedByLocalizedName($orderDirection); - } else { - $query = $this->createQuery(); - - $object = new $this->objectType(); - if (!array_key_exists($propertyName, $object->_getProperties())) { - throw new \InvalidArgumentException('The model "' . $this->objectType . '" has no property "' . $propertyName . '" to order by.', 1316607579); - } - - if ($orderDirection === 'asc') { - $orderDirection = QueryInterface::ORDER_ASCENDING; - } else { - $orderDirection = QueryInterface::ORDER_DESCENDING; - } - $query->setOrderings([$propertyName => $orderDirection]); - - return $query->execute(); - } - return $queryResult; - } - - /** - * Adds localization columns, if needed - * - * @param string $locale: the locale for which localization columns should be added - * @return AbstractEntityRepository $this - */ - public function addLocalizationColumns($locale) - { - $dataMap = $this->dataMapper->getDataMap($this->objectType); - $tableName = $dataMap->getTableName(); - $fieldsInfo = $this->getFieldsInfo(); - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - foreach ($fieldsInfo as $field => $fieldInfo) { - if ($field != 'cn_official_name_en') { - $matches = []; - if (preg_match('#_en$#', $field, $matches)) { - // Make localization field name - $localizationField = preg_replace('#_en$#', '_' . $locale, $field); - // Add the field if it does not yet exist - if (!$fieldsInfo[$localizationField]) { - // Get field length - $matches = []; - if (preg_match('#\\(([0-9]+)\\)#', $fieldInfo['Type'] ?? '', $matches)) { - $localizationFieldLength = (int)($matches[1]); - // Add the localization field - $connection = $connectionPool->getConnectionForTable($tableName); - $column = new Column($localizationField, Type::getType(Type::STRING)); - $column->setLength($localizationFieldLength) - ->setNotnull(true) - ->setDefault(''); - $tableDiff = new TableDiff($tableName, [$column]); - $query = $connection->getDatabasePlatform()->getAlterTableSQL($tableDiff); - $connection->executeUpdate($query[0]); - } - } - } - } - } - return $this; - } - - /** - * Get the information on the table fields - * - * @return array table fields information array - */ - protected function getFieldsInfo() - { - $fieldsInfo = []; - $dataMap = $this->dataMapper->getDataMap($this->objectType); - $tableName = $dataMap->getTableName(); - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $connection = $connectionPool->getConnectionForTable($tableName); - $query = $connection->getDatabasePlatform()->getListTableColumnsSQL($tableName, $connection->getDatabase()); - $columnsInfo = $connection->executeQuery($query); - foreach ($columnsInfo as $fieldRow) { - $fieldsInfo[$fieldRow['Field']] = $fieldRow; - } - return $fieldsInfo; - } - - /** - * Get update queries for the localization columns for a given locale - * - * @return array Update queries - * @param mixed $locale - */ - public function getUpdateQueries($locale) - { - // Get the information of the table and its fields - $dataMap = $this->dataMapper->getDataMap($this->objectType); - $tableName = $dataMap->getTableName(); - $tableFields = array_keys($this->getFieldsInfo()); - $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $connection = $connectionPool->getConnectionForTable($tableName); - $updateQueries = []; - // If the language pack is not yet created or not yet installed, the localization columns are not yet part of the domain model - $exportFields = []; - foreach ($tableFields as $field) { - $matches = []; - if (preg_match('#_' . strtolower($locale) . '$#', $field, $matches)) { - $exportFields[] = $field; - } - } - if (count($exportFields)) { - $updateQueries[] = '## ' . $tableName; - $exportFields = array_merge($exportFields, $this->isoKeys); - $queryBuilder = $connectionPool->getQueryBuilderForTable($tableName); - $queryBuilder->getRestrictions()->removeAll(); - $queryBuilder->select($exportFields[0]); - array_shift($exportFields); - foreach ($exportFields as $exportField) { - $queryBuilder->addSelect($exportField); - } - $rows = $queryBuilder - ->from($tableName) - ->execute() - ->fetchAll(); - foreach ($rows as $row) { - $set = []; - foreach ($row as $field => $value) { - if (!in_array($field, $this->isoKeys)) { - $set[] = $field . '=' . $connection->quote($value); - } - } - $whereClause = ''; - foreach ($this->isoKeys as $field) { - $whereClause .= ($whereClause ? ' AND ' : ' WHERE ') . $field . '=' . $connection->quote($row[$field]); - } - $updateQueries[] = 'UPDATE ' . $tableName . ' SET ' . implode(',', $set) . $whereClause . ';'; - } - } - return $updateQueries; - } - - /** - * Dump non-localized contents of the repository - */ - public function sqlDumpNonLocalizedData() - { - // Get the information of the table and its fields - $dataMap = $this->dataMapper->getDataMap($this->objectType); - $tableName = $dataMap->getTableName(); - - $sqlSchemaMigrationService = GeneralUtility::makeInstance(SqlSchemaMigrationService::class); - $dbFieldDefinitions = $sqlSchemaMigrationService->getFieldDefinitions_database(); - $dbFields = []; - $dbFields[$tableName] = $dbFieldDefinitions[$tableName]; - - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName); - $extensionPath = ExtensionManagementUtility::extPath($extensionKey); - $ext_tables = @file_get_contents($extensionPath . 'ext_tables.sql'); - - $tableFields = array_keys($dbFields[$tableName]['fields']); - foreach ($tableFields as $field) { - // This is a very simple check if the field is from static_info_tables and not from a language pack - $match = []; - if (!preg_match('#' . preg_quote($field, '#') . '#m', $ext_tables, $match)) { - unset($dbFields[$tableName]['fields'][$field]); - } - } - - $databaseUtility = GeneralUtility::makeInstance(DatabaseUtility::class); - return $databaseUtility->dumpStaticTables($dbFields); - } - - /** - * Adds an object to this repository. - * - * @param object $object The object to add - * @return void - * @throws \BadMethodCallException( - */ - public function add($object) - { - throw new \BadMethodCallException( - 'This is a read-only repository in which the add method must not be called.', - 1420485488 - ); - } - - /** - * Removes an object from this repository. - * - * @param object $object The object to remove - * @return void - * @throws \BadMethodCallException( - */ - public function remove($object) - { - throw new \BadMethodCallException( - 'This is a read-only repository in which the remove method must not be called.', - 1420485646 - ); - } - - /** - * Replaces an existing object with the same identifier by the given object. - * - * @return void - * @throws \BadMethodCallException( - */ - public function update($modifiedObject) - { - throw new \BadMethodCallException( - 'This is a read-only repository in which the update method must not be called.', - 1420485660 - ); - } - - /** - * Removes all objects of this repository as if remove() was called for all of them. - * - * @return void - * @throws \BadMethodCallException( - */ - public function removeAll() - { - throw new \BadMethodCallException( - 'This is a read-only repository in which the removeAll method must not be called.', - 1420485668 - ); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryRepository.php deleted file mode 100644 index 366338f..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryRepository.php +++ /dev/null @@ -1,119 +0,0 @@ - - * (c) 2013-2016 Stanislas Rolland - * - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\Territory; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; - -/** - * Repository for \SJBR\StaticInfoTables\Domain\Model\Country - */ -class CountryRepository extends AbstractEntityRepository -{ - /** - * ISO keys for this static table - * - * @var array - */ - protected $isoKeys = ['cn_iso_2']; - - /** - * @var TerritoryRepository - */ - protected $territoryRepository; - - /** - * Dependency injection of the Territory Repository - * - * @param TerritoryRepository $territoryRepository - * @return void - */ - public function injectTerritoryRepository(TerritoryRepository $territoryRepository) - { - $this->territoryRepository = $territoryRepository; - } - - /** - * Finds countries by territory - * - * @param Territory $territory - * @return QueryResultInterface|array - */ - public function findByTerritory(Territory $territory) - { - $unCodeNumbers = [$territory->getUnCodeNumber()]; - // Get UN code numbers of subterritories (recursively) - $subterritories = $this->territoryRepository->findWithinTerritory($territory); - foreach ($subterritories as $subterritory) { - $unCodeNumbers[] = $subterritory->getUnCodeNumber(); - } - $query = $this->createQuery(); - $query->matching( - $query->in('parentTerritoryUnCodeNumber', $unCodeNumbers) - ); - return $query->execute(); - } - - /** - * Finds countries by territory ordered by localized name - * - * @param Territory $territory - * @return array Countries of the territory sorted by localized name - */ - public function findByTerritoryOrderedByLocalizedName(Territory $territory) - { - $entities = $this->findByTerritory($territory); - return $this->localizedSort($entities); - } - - /** - * Finds a set of allowed countries - * - * @param string $allowedCountries: list of alpha-3 country codes - * @return array the selected countries - */ - public function findAllowedByIsoCodeA3($allowedCountries = '') - { - $query = $this->createQuery(); - $countries = GeneralUtility::trimExplode(',', $allowedCountries, true); - $query->matching( - $query->in('isoCodeA3', $countries) - ); - $entities = $query->execute(); - $orderedCountries = []; - foreach ($countries as $isoCodeA3) { - foreach ($entities as $entity) { - if ($entity->getIsoCodeA3() === $isoCodeA3) { - $orderedCountries[] = $entity; - break; - } - } - } - return $orderedCountries; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryZoneRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryZoneRepository.php deleted file mode 100644 index e3372e7..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CountryZoneRepository.php +++ /dev/null @@ -1,68 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\Country; -use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; - -/** - * Repository for \SJBR\StaticInfoTables\Domain\Model\CountryZone - */ -class CountryZoneRepository extends AbstractEntityRepository -{ - /** - * @var array ISO keys for this static table - */ - protected $isoKeys = ['zn_country_iso_2', 'zn_code']; - - /** - * Finds country zones by country - * - * @param Country $country - * @return QueryResultInterface|array - */ - public function findByCountry(Country $country) - { - $query = $this->createQuery(); - $query->matching( - $query->equals('countryIsoCodeNumber', $country->getIsoCodeNumber()) - ); - return $query->execute(); - } - - /** - * Finds country zones by country ordered by localized name - * - * @param Country $country - * @return array Country zones of the country sorted by localized name - */ - public function findByCountryOrderedByLocalizedName(Country $country) - { - $entities = $this->findByCountry($country); - return $this->localizedSort($entities); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CurrencyRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CurrencyRepository.php deleted file mode 100644 index 6c0403c..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/CurrencyRepository.php +++ /dev/null @@ -1,56 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\Country; -use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; - -/** - * Repository for \SJBR\StaticInfoTables\Domain\Model\Currency - */ -class CurrencyRepository extends AbstractEntityRepository -{ - /** - * @var array ISO keys for this static table - */ - protected $isoKeys = ['cu_iso_3']; - - /** - * Finds currency by country - * - * @param Country $country - * @return QueryResultInterface|array - */ - public function findByCountry(Country $country) - { - $query = $this->createQuery(); - $query->matching( - $query->equals('isoCodeNumber', $country->getCurrencyIsoCodeNumber()) - ); - return $query->execute(); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguagePackRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguagePackRepository.php deleted file mode 100644 index 005f06d..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguagePackRepository.php +++ /dev/null @@ -1,159 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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 SJBR\StaticInfoTables\Cache\ClassCacheManager; -use SJBR\StaticInfoTables\Domain\Model\LanguagePack; -use SJBR\StaticInfoTables\Utility\VersionNumberUtility; -use TYPO3\CMS\Core\Cache\CacheManager; -use TYPO3\CMS\Core\Core\Environment; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Repository; -use TYPO3\CMS\Extbase\Utility\LocalizationUtility; -use TYPO3\CMS\Extensionmanager\Utility\InstallUtility; - -class LanguagePackRepository extends Repository -{ - /** - * @var string Name of the extension this class belongs to - */ - protected $extensionName = 'StaticInfoTables'; - - /** - * Writes the language pack files - * - * @param LanguagePack the object to be stored - * @return array localized messages - */ - public function writeLanguagePack(LanguagePack $languagePack) - { - $content = []; - - $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName); - $extensionPath = ExtensionManagementUtility::extPath($extensionKey); - - $content = []; - $locale = $languagePack->getLocale(); - $localeLowerCase = strtolower($locale); - $localeUpperCase = strtoupper($locale); - $localeCamel = GeneralUtility::underscoredToUpperCamelCase(strtolower($locale)); - - $languagePackExtensionKey = $extensionKey . '_' . $localeLowerCase; - $languagePackExtensionPath = Environment::getPublicPath() . '/typo3conf/ext/' . $languagePackExtensionKey . '/'; - - // Cleanup any pre-existing language pack - if (is_dir($languagePackExtensionPath)) { - GeneralUtility::rmdir($languagePackExtensionPath, true); - } - // Create language pack directory structure - if (!is_dir($languagePackExtensionPath)) { - GeneralUtility::mkdir_deep($languagePackExtensionPath); - } - if (!is_dir($languagePackExtensionPath . 'Classes/Domain/Model/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Classes/Domain/Model/'); - } - if (!is_dir($languagePackExtensionPath . 'Configuration/DomainModelExtension/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Configuration/DomainModelExtension/'); - } - if (!is_dir($languagePackExtensionPath . 'Configuration/TCA/Overrides/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Configuration/TCA/Overrides/'); - } - if (!is_dir($languagePackExtensionPath . 'Configuration/PageTSconfig/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Configuration/PageTSconfig/'); - } - if (!is_dir($languagePackExtensionPath . 'Configuration/Extbase/Persistence/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Configuration/Extbase/Persistence/'); - } - if (!is_dir($languagePackExtensionPath . 'Resources/Private/Language/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Resources/Private/Language/'); - } - if (!is_dir($languagePackExtensionPath . 'Resources/Public/Icons/')) { - GeneralUtility::mkdir_deep($languagePackExtensionPath . 'Resources/Public/Icons/'); - } - - // Get the source files of the language pack template - $sourcePath = $extensionPath . 'Resources/Private/LanguagePackTemplate/'; - $sourceFiles = []; - $sourceFiles = GeneralUtility::getAllFilesAndFoldersInPath($sourceFiles, $sourcePath); - $sourceFiles = GeneralUtility::removePrefixPathFromList($sourceFiles, $sourcePath); - $typo3VersionRange = VersionNumberUtility::splitVersionRange($languagePack->getTypo3VersionRange()); - $typo3VersionMinArray = VersionNumberUtility::convertVersionStringToArray($typo3VersionRange[0]); - $typo3VersionMaxArray = VersionNumberUtility::convertVersionStringToArray(VersionNumberUtility::raiseVersionNumber('main', $typo3VersionRange[1])); - // Set markers replacement values - $replace = [ - '###LANG_ISO_LOWER###' => $localeLowerCase, - '###LANG_ISO_UPPER###' => $localeUpperCase, - '###LANG_ISO_CAMEL###' => $localeCamel, - '###TYPO3_VERSION_RANGE###' => $languagePack->getTypo3VersionRange(), - '###TYPO3_VERSION_MIN###' => $typo3VersionMinArray['version_main'] . '.' . $typo3VersionMinArray['version_sub'], - '###TYPO3_VERSION_MAX###' => $typo3VersionMaxArray['version_main'] . '.0', - '###VERSION###' => $languagePack->getVersion(), - '###LANG_NAME###' => $languagePack->getLanguage(), - '###AUTHOR###' => $languagePack->getAuthor(), - '###AUTHOR_EMAIL###' => $languagePack->getAuthorEmail(), - '###AUTHOR_COMPANY###' => $languagePack->getAuthorCompany(), - '###VENDOR_NAME###' => $languagePack->getVendorName(), - '###VERSION_BASE###' => $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extensionKey]['version'], - '###LANG_TCA_LABELS###' => $languagePack->getLocalizationLabels(), - '###LANG_SQL_UPDATE###' => $languagePack->getUpdateQueries(), - ]; - // Create the language pack files - $success = true; - foreach ($sourceFiles as $hash => $file) { - $fileContent = @file_get_contents($sourcePath . $file); - foreach ($replace as $marker => $replacement) { - $fileContent = str_replace($marker, $replacement, $fileContent); - } - $success = GeneralUtility::writeFile($languagePackExtensionPath . str_replace('.code', '.php', $file), $fileContent); - if (!$success) { - $content[] = LocalizationUtility::translate('couldNotWriteFile', $this->extensionName) . ' ' . $languagePackExtensionPath . $file; - break; - } - } - if ($success) { - $cacheManager = GeneralUtility::makeInstance(CacheManager::class); - $classCacheManager = new ClassCacheManager($cacheManager); - $installUtility = GeneralUtility::makeInstance(InstallUtility::class); - $installed = ExtensionManagementUtility::isLoaded($languagePackExtensionKey); - if ($installed) { - $content[] = LocalizationUtility::translate('languagePack', $this->extensionName) - . ' ' . $languagePackExtensionKey - . ' ' . LocalizationUtility::translate('languagePackUpdated', $this->extensionName); - } else { - $content[] = LocalizationUtility::translate('languagePackCreated', $this->extensionName) . ' ' . $languagePack->getLanguage() . ' (' . $locale . ')'; - $installUtility->install($languagePackExtensionKey); - $content[] = LocalizationUtility::translate('languagePack', $this->extensionName) - . ' ' . $languagePackExtensionKey - . ' ' . LocalizationUtility::translate('wasInstalled', $this->extensionName); - } - $classCacheManager->reBuild(); - } - return $content; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguageRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguageRepository.php deleted file mode 100644 index 2ab3d35..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/LanguageRepository.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * 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 2 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\Extbase\Persistence\QueryResultInterface; - -/** - * Repository for \SJBR\StaticInfoTables\Domain\Model\Language - */ -class LanguageRepository extends AbstractEntityRepository -{ - /** - * @var array ISO keys for this static table - */ - protected $isoKeys = ['lg_iso_2', 'lg_country_iso_2']; - - /** - * Find all neither constructed nor sacred languages - * - * @return QueryResultInterface|array all languages neither constructed nor sacred - */ - public function findAllNonConstructedNonSacred() - { - $query = $this->createQuery(); - $query->matching($query->logicalAnd([$query->equals('constructedLanguage', false), $query->equals('sacredLanguage', false)])); - return $query->execute(); - } - - /** - * Find the language object with the specified iso codes - * - * @param string $languageIsoCodeA2 - * @param string $countryIsoCodeA2 - * @return QueryResultInterface|array all entries ordered by $propertyName - */ - public function findOneByIsoCodes($languageIsoCodeA2, $countryIsoCodeA2 = '') - { - $query = $this->createQuery(); - $query->matching($query->logicalAnd([$query->equals('isoCodeA2', $languageIsoCodeA2), $query->equals('countryIsoCodeA2', $countryIsoCodeA2)])); - return $query->execute()->getFirst(); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/SystemLanguageRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/SystemLanguageRepository.php deleted file mode 100644 index 45cfaff..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/SystemLanguageRepository.php +++ /dev/null @@ -1,57 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\Persistence\QueryResultInterface; -use TYPO3\CMS\Extbase\Persistence\Repository; - -/** - * System language repository - */ -class SystemLanguageRepository extends Repository -{ - /** - * Find all system language objects with uid in list - * If no list is provided, find all system language objects - * - * @param string $list: list of uid's - * - * @return QueryResultInterface|array all entries - */ - public function findAllByUidInList($list = '') - { - if (empty($list)) { - return $this->findAll(); - } - $query = $this->createQuery(); - $list = GeneralUtility::trimExplode(',', $list, true); - $query->matching($query->in('uid', $list)); - return $query->execute(); - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/TerritoryRepository.php b/typo3conf/ext/static_info_tables/Classes/Domain/Repository/TerritoryRepository.php deleted file mode 100644 index 1e66935..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Domain/Repository/TerritoryRepository.php +++ /dev/null @@ -1,107 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\Country; -use SJBR\StaticInfoTables\Domain\Model\Territory; -use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; -/** - * Repository for \SJBR\StaticInfoTables\Domain\Model\Territory - */ -class TerritoryRepository extends AbstractEntityRepository -{ - /** - * ISO keys for this static table - * - * @var array - */ - protected $isoKeys = ['tr_iso_nr']; - - /** - * Finds the territory within which a country is located - * - * @param Country $country - * @return QueryResultInterface|array - */ - public function findByCountry(Country $country) - { - $query = $this->createQuery(); - $query->matching( - $query->equals('unCodeNumber', $country->getParentTerritoryUnCodeNumber()) - ); - return $query->execute(); - } - - /** - * Finds territories that have a given territory as parent territory - * - * @param Territory $territory - * @return QueryResultInterface|array - */ - public function findByTerritory(Territory $territory) - { - $query = $this->createQuery(); - $query->matching( - $query->equals('parentTerritoryUnCodeNumber', $territory->getUnCodeNumber()) - ); - return $query->execute(); - } - - /** - * Finds all territories within a territory recursively - * - * @param Territory $territory - * @param array $unCodeNumbers array of UN territory code numbers used for recursive retrieval of sub-territories - * @return QueryResultInterface|array - */ - public function findWithinTerritory(Territory $territory, &$unCodeNumbers = []) - { - if (empty($unCodeNumbers)) { - $unCodeNumbers = [$territory->getUnCodeNumber()]; - } - $initialCount = count($unCodeNumbers); - - $query = $this->createQuery(); - $query->matching( - $query->in('parentTerritoryUnCodeNumber', $unCodeNumbers) - ); - $territories = $query->execute(); - - // Get UN code numbers of new subterritories - foreach ($territories as $subterritory) { - $unCodeNumbers[] = $subterritory->getUnCodeNumber(); - } - $unCodeNumbers = array_unique($unCodeNumbers); - - // Call recursively until no additional subterritories are found - if (count($unCodeNumbers) > $initialCount) { - $territories = $this->findWithinTerritory($territory, $unCodeNumbers); - } - - return $territories; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/EventListener/AbstractEventListener.php b/typo3conf/ext/static_info_tables/Classes/EventListener/AbstractEventListener.php deleted file mode 100644 index 66cb893..0000000 --- a/typo3conf/ext/static_info_tables/Classes/EventListener/AbstractEventListener.php +++ /dev/null @@ -1,165 +0,0 @@ - - * 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 2 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 SJBR\StaticInfoTables\Cache\ClassCacheManager; -use SJBR\StaticInfoTables\Utility\DatabaseUpdateUtility; -use TYPO3\CMS\Core\Registry; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Utility\LocalizationUtility; - -/* - * AfterPackageActivation event listener - * - * Always run the extension update script except on first install of base extension - */ -abstract class AbstractEventListener -{ - /** - * @var string Name of the extension this controller belongs to - */ - protected $extensionName = 'StaticInfoTables'; - - /** - * @var Registry - */ - protected $registry; - - /** - * @param Registry $registry - */ - public function __construct(Registry $registry) - { - $this->registry = $registry; - } - - /** - * Execute the update - * - * @return void - */ - public function executeUpdate() - { - $databaseUpdateUtility = GeneralUtility::makeInstance(DatabaseUpdateUtility::class); - // Clear the class cache - $classCacheManager = GeneralUtility::makeInstance(ClassCacheManager::class); - $classCacheManager->reBuild(); - - if ($this->isUpdateRequired()) { - // Process the database updates of this base extension (we want to re-process these updates every time the update script is invoked) - // unless there was no change in the version numbers of the static info tables and language packs installed - $extensionSitePath = ExtensionManagementUtility::extPath(GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)); - if (isset($GLOBALS['BE_USER'])) { - $GLOBALS['BE_USER']->writelog(3, 1, 0, 0, '[StaticInfoTables]: ' . LocalizationUtility::translate('updateTables', $this->extensionName) ?? '', [$GLOBALS['BE_USER']->user['username']]); - } - $databaseUpdateUtility->importStaticSqlFile($extensionSitePath); - // Get the extensions which want to extend static_info_tables - $loadedExtensions = array_unique(ExtensionManagementUtility::getLoadedExtensionListArray()); - $languagePackUpdated = false; - foreach ($loadedExtensions as $extensionKey) { - if ($this->isStaticInfoTablesExtension($extensionKey)) { - // We need to reprocess the database structure update sql statements (ext_tables) - $databaseUpdateUtility->processDatabaseUpdates($extensionKey); - // Now we process the static data updates (ext_tables_static+adt) - // Note: The Install Tool Utility does not handle sql update statements - $databaseUpdateUtility->doUpdate($extensionKey); - if (isset($GLOBALS['BE_USER'])) { - $GLOBALS['BE_USER']->writelog(3, 1, 0, 0, '[StaticInfoTables]: ' . LocalizationUtility::translate('updateLanguageLabels', $this->extensionName, [$extensionKey]) ?? '', [$GLOBALS['BE_USER']->user['username']]); - } - $languagePackUpdated = true; - } - } - $this->storeLastUpdateStatus(); - } - } - - /** - * Is an update required? - * - * Returns true when the last stored update status is different from the current status - * or the forceUpdate GET parameter is provided. - * - * @return bool - */ - public function isUpdateRequired(): bool - { - $lastUpdateStatus = $this->registry->get('static_info_tables', 'last_update_status', false); - if (!$lastUpdateStatus) { - return true; - } - $extensionVersionInfo = $this->buildExtensionVersionInfo(); - return $lastUpdateStatus !== $extensionVersionInfo; - } - - /** - * Saves the last update status in the TYPO3 registry. - */ - protected function storeLastUpdateStatus() - { - $extensionVersionInfo = $this->buildExtensionVersionInfo(); - $this->registry->set('static_info_tables', 'last_update_status', $extensionVersionInfo); - } - - /** - * Loops over all loaded Extensions and collects the version info of every installed static_info_tables - * Extension. The Extension keys and version numbers are concated to a string: - * - * extension_key1:1.2.3 - * extension_key2:2.3.4 - * ... - * - * @return string - */ - protected function buildExtensionVersionInfo() - { - $mainVersion = ExtensionManagementUtility::getExtensionVersion('static_info_tables'); - $extensionVersions = ['static_info_tables:' . $mainVersion]; - - $loadedExtensions = array_unique(ExtensionManagementUtility::getLoadedExtensionListArray()); - foreach ($loadedExtensions as $extensionKey) { - if (!$this->isStaticInfoTablesExtension($extensionKey)) { - continue; - } - $extensionVersion = ExtensionManagementUtility::getExtensionVersion($extensionKey); - $extensionVersions[] = $extensionKey . ':' . $extensionVersion; - } - - return implode(LF, $extensionVersions); - } - - /** - * Returns true when the StaticInfoTables.txt configuration file exists in the given Extension. - * - * @param string $extensionKey - * @return bool - */ - protected function isStaticInfoTablesExtension($extensionKey) - { - $extensionInfoFile = ExtensionManagementUtility::extPath($extensionKey) - . 'Configuration/DomainModelExtension/StaticInfoTables.txt'; - return file_exists($extensionInfoFile); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/EventListener/AfterExtensionStaticDatabaseContentHasBeenImportedEventListener.php b/typo3conf/ext/static_info_tables/Classes/EventListener/AfterExtensionStaticDatabaseContentHasBeenImportedEventListener.php deleted file mode 100644 index aab187c..0000000 --- a/typo3conf/ext/static_info_tables/Classes/EventListener/AfterExtensionStaticDatabaseContentHasBeenImportedEventListener.php +++ /dev/null @@ -1,61 +0,0 @@ - - * 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 2 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\Extensionmanager\Event\AfterExtensionStaticDatabaseContentHasBeenImportedEvent; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\PathUtility; - -/* - * AfterExtensionStaticDatabaseContentHasBeenImported event listener - * - * Run the update script after base data was re-imported - */ -class AfterExtensionStaticDatabaseContentHasBeenImportedEventListener extends AbstractEventListener -{ - /** - * If the installed extension is static_info_tables or a language pack, execute the update - * - * @param AfterExtensionStaticDatabaseContentHasBeenImportedEvent $event - * @return void - */ - public function __invoke(AfterExtensionStaticDatabaseContentHasBeenImportedEvent $event): void - { - $extensionKey = $event->getPackageKey(); - if (strpos($extensionKey, 'static_info_tables') === 0) { - $extensionKeyParts = explode('_', $extensionKey); - if (count($extensionKeyParts) === 3) { - $extTablesStaticSqlRelFile = PathUtility::stripPathSitePrefix(ExtensionManagementUtility::extPath($extensionKey)) . 'ext_tables_static+adt.sql'; - } - if ( - // Base extension with data already imported once - (count($extensionKeyParts) === 3 && $this->registry->get('extensionDataImport', $extTablesStaticSqlRelFile)) - ) { - $this->registry->remove('static_info_tables', 'last_update_status'); - $this->executeUpdate(); - } - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/EventListener/AfterPackageActivationEventListener.php b/typo3conf/ext/static_info_tables/Classes/EventListener/AfterPackageActivationEventListener.php deleted file mode 100644 index 74939c8..0000000 --- a/typo3conf/ext/static_info_tables/Classes/EventListener/AfterPackageActivationEventListener.php +++ /dev/null @@ -1,64 +0,0 @@ - - * 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 2 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\Package\Event\AfterPackageActivationEvent; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; -use TYPO3\CMS\Core\Utility\PathUtility; - -/* - * AfterPackageActivation event listener - * - * Always run the extension update script except on first install of base extension - */ -class AfterPackageActivationEventListener extends AbstractEventListener -{ - /** - * If the installed extension is static_info_tables or a language pack, execute the update - * - * @param AfterPackageActivationEvent $event - * @return void - */ - public function __invoke(AfterPackageActivationEvent $event): void - { - $extensionKey = $event->getPackageKey(); - $packageType = $event->getType(); - if ($packageType === 'typo3-cms-extension' && strpos($extensionKey, 'static_info_tables') === 0) { - $extensionKeyParts = explode('_', $extensionKey); - if (count($extensionKeyParts) === 3) { - $extTablesStaticSqlRelFile = PathUtility::stripPathSitePrefix(ExtensionManagementUtility::extPath($extensionKey)) . 'ext_tables_static+adt.sql'; - } - if ( - // Base extension with data already imported once - (count($extensionKeyParts) === 3 && $this->registry->get('extensionDataImport', $extTablesStaticSqlRelFile)) - // Language pack - || (count($extensionKeyParts) === 4 && strlen($extensionKeyParts[3]) === 2) - || (count($extensionKeyParts) === 5 && strlen($extensionKeyParts[3]) === 2 && strlen($extensionKeyParts[4]) === 2) - ) { - $this->executeUpdate(); - } - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/SuggestLabelProcessor.php b/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/SuggestLabelProcessor.php deleted file mode 100644 index 26ecf69..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/SuggestLabelProcessor.php +++ /dev/null @@ -1,60 +0,0 @@ - - * 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 2 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 SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Backend\Form\Wizard\SuggestWizardDefaultReceiver; - -/** - * Processor for suggest items - */ -class SuggestLabelProcessor -{ - /** - * Translate label of entity in suggest selector - * - * @param array $params: table, uid, row, entry - * @param SuggestWizardDefaultReceiver $parentObj - * - * @return void - */ - public function translateLabel(array &$params, SuggestWizardDefaultReceiver $parentObj) - { - $path = $params['entry']['path']; - if (mb_strlen($path, 'utf-8') > 30) { - $croppedPath = '' . - htmlspecialchars( - mb_substr($path, 0, 10, 'utf-8') - . '...' - . mb_substr($path, -20, null, 'utf-8') - ) . - ''; - } else { - $croppedPath = htmlspecialchars($path); - } - $label = LocalizationUtility::translate(['uid' => $params['uid']], $params['table']); - $params['entry']['text'] = '' . $label . '[' . $params['uid'] . ']
    - ' . $croppedPath . ''; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaLabelProcessor.php b/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaLabelProcessor.php deleted file mode 100644 index 248c397..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaLabelProcessor.php +++ /dev/null @@ -1,136 +0,0 @@ - - * 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 2 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\ServerRequestInterface; -use SJBR\StaticInfoTables\Domain\Model\Country; -use SJBR\StaticInfoTables\Domain\Model\Currency; -use SJBR\StaticInfoTables\Domain\Model\Language; -use SJBR\StaticInfoTables\Domain\Model\Territory; -use SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguageRepository; -use SJBR\StaticInfoTables\Domain\Repository\TerritoryRepository; -use SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Http\ApplicationType; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Processor for TCA select items - */ -class TcaLabelProcessor -{ - /** - * @var TerritoryRepository - */ - protected $territoryRepository; - - /** - * @param TerritoryRepository $territoryRepository - */ - public function injectTerritoryRepository(TerritoryRepository $territoryRepository) - { - $this->territoryRepository = $territoryRepository; - } - - /** - * Add ISO codes to the label of entities - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @return void - */ - public function addIsoCodeToLabel(&$PA) - { - if (!isset($PA['row']['uid'])) { - return; - } - $PA['title'] = LocalizationUtility::translate(['uid' => $PA['row']['uid']], $PA['table']); - if (($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface - && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend()) { - switch ($PA['table']) { - case 'static_territories': - $isoCode = $PA['row']['tr_iso_nr'] ?? 0; - if (!$isoCode) { - $territory = $this->territoryRepository->findByUid($PA['row']['uid']); - if ($territory instanceof Territory) { - $isoCode = $territory->getUnCodeNumber(); - } - } - if ($isoCode) { - $PA['title'] .= ' (' . $isoCode . ')'; - } - break; - case 'static_countries': - $isoCode = $PA['row']['cn_iso_2'] ?? ''; - if (!$isoCode) { - $countryRepository = GeneralUtility::makeInstance(CountryRepository::class); - $country = $countryRepository->findByUid($PA['row']['uid']); - if ($country instanceof Country) { - $isoCode = $country->getIsoCodeA2(); - } - } - if ($isoCode) { - $PA['title'] .= ' (' . $isoCode . ')'; - } - break; - case 'static_languages': - $isoCodes = [$PA['row']['lg_iso_2'] ?? '']; - if ($PA['row']['lg_country_iso_2'] ?? '') { - $isoCodes[] = $PA['row']['lg_country_iso_2']; - } - $isoCode = implode('_', $isoCodes); - if (!$isoCode || !($PA['row']['lg_country_iso_2'] ?? '')) { - $languageRepository = GeneralUtility::makeInstance(LanguageRepository::class); - $language = $languageRepository->findByUid($PA['row']['uid']); - if ($language instanceof Language) { - $isoCodes = [$language->getIsoCodeA2()]; - if ($language->getCountryIsoCodeA2()) { - $isoCodes[] = $language->getCountryIsoCodeA2(); - } - $isoCode = implode('_', $isoCodes); - } - } - if ($isoCode) { - $PA['title'] .= ' (' . $isoCode . ')'; - } - break; - case 'static_currencies': - $isoCode = $PA['row']['cu_iso_3'] ?? ''; - if (!$isoCode) { - $currencyRepository = GeneralUtility::makeInstance(CurrencyRepository::class); - $currency = $currencyRepository->findByUid($PA['row']['uid']); - if ($currency instanceof Currency) { - $isoCode = $currency->getIsoCodeA3(); - } - } - if ($isoCode) { - $PA['title'] .= ' (' . $isoCode . ')'; - } - break; - default: - break; - } - } - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaSelectItemsProcessor.php b/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaSelectItemsProcessor.php deleted file mode 100644 index f343123..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/FormDataProvider/TcaSelectItemsProcessor.php +++ /dev/null @@ -1,280 +0,0 @@ - - * 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 2 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 SJBR\StaticInfoTables\Domain\Model\Country; -use SJBR\StaticInfoTables\Domain\Model\CountryZone; -use SJBR\StaticInfoTables\Domain\Model\Currency; -use SJBR\StaticInfoTables\Domain\Model\Language; -use SJBR\StaticInfoTables\Domain\Model\Territory; -use SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CountryZoneRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\LanguageRepository; -use SJBR\StaticInfoTables\Domain\Repository\TerritoryRepository; -use SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Backend\Form\FormDataProvider\TcaSelectItems; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper; - -/** - * Processor for TCA select items - */ -class TcaSelectItemsProcessor -{ - /** - * Translate and sort the territories selector using the current locale - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @param DataPreprocessor $fObj - * @return void - */ - public function translateTerritoriesSelector($PA, TcaSelectItems $fObj) - { - switch ($PA['table'] ?? '') { - case 'static_territories': - // Avoid circular relation - $row = $PA['row'] ?? []; - foreach (($PA['items'] ?? []) as $index => $item) { - if ($item[1] == $row['uid']) { - unset($PA['items'][$index]); - } - } - break; - } - $PA['items'] = $this->translateSelectorItems($PA['items'], 'static_territories'); - $PA['items'] = $this->replaceSelectorIndexField($PA); - } - - /** - * Translate and sort the countries selector using the current locale - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @param DataPreprocessor $fObj - * - * @return void - */ - public function translateCountriesSelector($PA, TcaSelectItems $fObj) - { - $PA['items'] = $this->translateSelectorItems($PA['items'], 'static_countries'); - $PA['items'] = $this->replaceSelectorIndexField($PA); - } - - /** - * Translate and sort the country zones selector using the current locale - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @param DataPreprocessor $fObj - * - * @return void - */ - public function translateCountryZonesSelector($PA, TcaSelectItems $fObj) - { - $PA['items'] = $this->translateSelectorItems($PA['items'], 'static_country_zones'); - $PA['items'] = $this->replaceSelectorIndexField($PA); - } - - /** - * Translate and sort the currencies selector using the current locale - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @param DataPreprocessor $fObj - * - * @return void - */ - public function translateCurrenciesSelector($PA, TcaSelectItems $fObj) - { - $PA['items'] = $this->translateSelectorItems($PA['items'], 'static_currencies'); - $PA['items'] = $this->replaceSelectorIndexField($PA); - } - - /** - * Translate and sort the languages selector using the current locale - * - * @param array $PA: parameters: items, config, TSconfig, table, row, field - * @param DataPreprocessor $fObj - * - * @return void - */ - public function translateLanguagesSelector($PA, TcaSelectItems $fObj) - { - $PA['items'] = $this->translateSelectorItems($PA['items'], 'static_languages'); - $PA['items'] = $this->replaceSelectorIndexField($PA); - } - - /** - * Translate selector items array - * - * @param array $items: array of value/label pairs - * @param string $tableName: name of static info tables - * - * @return array array of value/translated label pairs - */ - protected function translateSelectorItems($items, $tableName) - { - $translatedItems = $items; - if (isset($translatedItems) && is_array($translatedItems)) { - foreach ($translatedItems as $key => $item) { - if (is_array($translatedItems[$key]) && array_key_exists(1, $translatedItems[$key]) && ($translatedItems[$key][1] ?? '')) { - //Get isocode if present - $code = strstr($item[0], '('); - $code2 = strstr(substr($code, 1), '('); - $code = $code2 ? $code2 : $code; - // Translate - $translatedItems[$key][0] = LocalizationUtility::translate(['uid' => $item[1]], $tableName); - // Re-append isocode, if present - $translatedItems[$key][0] = $translatedItems[$key][0] . ($code ? ' ' . $code : ''); - } - } - $currentLocale = setlocale(LC_COLLATE, '0'); - $locale = LocalizationUtility::setCollatingLocale(); - if ($locale !== false) { - uasort($translatedItems, [$this, 'strcollOnLabels']); - } - setlocale(LC_COLLATE, $currentLocale); - } - $items = $translatedItems; - return $items; - } - - /** - * Using strcoll comparison on labels - * - * @return int see strcoll - * - * @param mixed $itemA - * @param mixed $itemB - */ - protected function strcollOnLabels($itemA, $itemB) - { - return strcoll($itemA[0], $itemB[0]); - } - - /** - * Replace the selector's uid index with configured indexField - * - * @param array $PA: TCA select field parameters array - * @return array The new $items array - */ - protected function replaceSelectorIndexField($PA) - { - $items = $PA['items'] ?? []; - $indexFields = GeneralUtility::trimExplode(',', $PA['config']['itemsProcFunc_config']['indexField'] ?? '', true); - if (!empty($indexFields)) { - $rows = []; - // Collect items uid's - $uids = []; - foreach ($items as $key => $item) { - if (is_array($items[$key]) && array_key_exists(1, $items[$key]) && ($items[$key][1] ?? 0)) { - $uids[] = $item[1]; - } - } - $uidList = implode(',', $uids); - if (!empty($uidList)) { - switch ($PA['config']['foreign_table'] ?? '') { - case 'static_territories': - /** @var $territoryRepository TerritoryRepository */ - $territoryRepository = GeneralUtility::makeInstance(TerritoryRepository::class); - $objects = $territoryRepository->findAllByUidInList($uidList)->toArray(); - break; - case 'static_countries': - /** @var $countryRepository CountryRepository */ - $countryRepository = GeneralUtility::makeInstance(CountryRepository::class); - $objects = $countryRepository->findAllByUidInList($uidList)->toArray(); - break; - case 'static_country_zones': - /** @var $countryZoneRepository CountryZoneRepository */ - $countryZoneRepository = GeneralUtility::makeInstance(CountryZoneRepository::class); - $objects = $countryZoneRepository->findAllByUidInList($uidList)->toArray(); - break; - case 'static_languages': - /** @var $languageRepository LanguageRepository */ - $languageRepository = GeneralUtility::makeInstance(LanguageRepository::class); - $objects = $languageRepository->findAllByUidInList($uidList)->toArray(); - break; - case 'static_currencies': - /** @var $currencyRepository CurrencyRepository */ - $currencyRepository = GeneralUtility::makeInstance(CurrencyRepository::class); - $objects = $currencyRepository->findAllByUidInList($uidList)->toArray(); - break; - default: - break; - } - if (!empty($objects)) { - $columnsMapping = $this->getColumnsMapping($objects[0]); - // Map table column to object property - $indexProperties = []; - foreach ($indexFields as $indexField) { - if ($columnsMapping[$indexField]['mapOnProperty'] ?? '') { - $indexProperties[] = $columnsMapping[$indexField]['mapOnProperty']; - } else { - $indexProperties[] = GeneralUtility::underscoredToLowerCamelCase($indexField); - } - } - // Index rows by uid - $uidIndexedRows = []; - foreach ($objects as $object) { - $uidIndexedObjects[$object->getUid()] = $object; - } - // Replace the items index field - foreach ($items as $key => $item) { - if (is_array($items[$key]) && array_key_exists(1, $items[$key]) && ($items[$key][1] ?? 0)) { - $object = $uidIndexedObjects[$items[$key][1]]; - $items[$key][1] = $object->_getProperty($indexProperties[0]); - if (($indexFields[1] ?? false) && $object->_getProperty($indexProperties[1] ?? '')) { - $items[$key][1] .= '_' . $object->_getProperty($indexProperties[1]); - } - } - } - } - } - } - return $items; - } - - /** - * Get the columns mapping for the object - * - * @param object $object - * @return array - */ - protected function getColumnsMapping($object) - { - $columnsMapping = []; - $dataMapper = GeneralUtility::makeInstance(DataMapper::class); - $className = get_class($object); - $dataMap = $dataMapper->getDataMap($className); - $properties = $object->_getProperties(); - foreach ($properties as $propertyName => $propertyValue) { - if (!$dataMap->isPersistableProperty($propertyName)) { - continue; - } - $columnMap = $dataMap->getColumnMap($propertyName); - $columnName = $columnMap->getColumnName(); - $columnsMapping[$columnName] = ['mapOnProperty' => $propertyName]; - } - return $columnsMapping; - } -} diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/Wizard/SuggestReceiver.php b/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/Wizard/SuggestReceiver.php deleted file mode 100644 index 339d29c..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Form/Wizard/SuggestReceiver.php +++ /dev/null @@ -1,121 +0,0 @@ - - * (c) 2013-2021 Stanislas Rolland - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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. - */ - -use SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Backend\Form\Wizard\SuggestWizardDefaultReceiver; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Default implementation of a handler class for an ajax record selector. - * - * Normally other implementations should be inherited from this one. - * queryTable() should not be overwritten under normal circumstances. - * - * @author Andreas Wolf - * @author Benjamin Mack - * @author Stanislas Rolland - */ -class SuggestReceiver extends SuggestWizardDefaultReceiver -{ - /** - * Prepare the statement for selecting the records which will be returned to the selector. May also return some - * other records (e.g. from a mm-table) which will be used later on to select the real records - * - * @return void - */ - protected function prepareSelectStatement() - { - $expressionBuilder = $this->queryBuilder->expr(); - $searchWholePhrase = !isset($this->config['searchWholePhrase']) || $this->config['searchWholePhrase']; - $searchString = $this->params['value']; - $searchUid = (int)$searchString; - if ($searchString !== '') { - $likeCondition = ($searchWholePhrase ? '%' : '') . $this->queryBuilder->escapeLikeWildcards($searchString) . '%'; - // Get the label field for the current language, if any is available - $lang = LocalizationUtility::getCurrentLanguage(); - $lang = LocalizationUtility::getIsoLanguageKey($lang); - $labelFields = LocalizationUtility::getLabelFields($this->table, $lang); - $selectFieldsList = $labelFields[0] . ',' . $this->config['additionalSearchFields']; - $selectFields = GeneralUtility::trimExplode(',', $selectFieldsList, true); - $selectFields = array_unique($selectFields); - $selectParts = $expressionBuilder->orX(); - foreach ($selectFields as $field) { - $selectParts->add($expressionBuilder->like($field, $this->queryBuilder->createPositionalParameter($likeCondition))); - } - $searchClause = $expressionBuilder->orX($selectParts); - if ($searchUid > 0 && $searchUid == $searchString) { - $searchClause->add($expressionBuilder->eq('uid', $searchUid)); - } - $this->queryBuilder->andWhere($expressionBuilder->orX($searchClause)); - } - if (!empty($this->allowedPages)) { - $pidList = array_map('intval', $this->allowedPages); - if (!empty($pidList)) { - $this->queryBuilder->andWhere( - $expressionBuilder->in('pid', $pidList) - ); - } - } - // add an additional search condition comment - if (isset($this->config['searchCondition']) && $this->config['searchCondition'] !== '') { - $this->queryBuilder->andWhere(QueryHelper::stripLogicalOperatorPrefix($this->config['searchCondition'])); - } - } - - /** - * Prepares the clause by which the result elements are sorted. See description of ORDER BY in - * SQL standard for reference. - * - * @return void - */ - protected function prepareOrderByStatement() - { - // Get the label field for the current language, if any is available - $lang = LocalizationUtility::getCurrentLanguage(); - $lang = LocalizationUtility::getIsoLanguageKey($lang); - $labelFields = LocalizationUtility::getLabelFields($this->table, $lang); - if (!empty($labelFields)) { - foreach ($labelFields as $labelField) { - $this->queryBuilder->addOrderBy($labelField); - } - } elseif ($GLOBALS['TCA'][$this->table]['ctrl']['label']) { - $this->queryBuilder->addOrderBy($GLOBALS['TCA'][$this->table]['ctrl']['label']); - } - } - - /** - * Manipulate a record before using it to render the selector; may be used to replace a MM-relation etc. - * - * @param array $row - */ - protected function manipulateRecord(&$row) - { - // Localize the record - $row[$GLOBALS['TCA'][$this->table]['ctrl']['label']] = LocalizationUtility::translate(['uid' => $row['uid']], $this->table); - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Recordlist/ModifyQuery.php b/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Recordlist/ModifyQuery.php deleted file mode 100644 index bec4e48..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Backend/Recordlist/ModifyQuery.php +++ /dev/null @@ -1,70 +0,0 @@ - - * 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 2 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\Query\QueryBuilder; -use TYPO3\CMS\Core\Database\Query\QueryHelper; -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; - -/** - * Order records according to language field of current language - */ -class ModifyQuery -{ - /** - * Specify records order - * - * @param array $parameters - * @param string $table - * @param int $pageId - * @param string $additionalConstraints - * @param string $fieldList - * @param QueryBuilder $queryBuilder - * @return void - */ - public function modifyQuery(&$parameters, $table, $pageId, $additionalConstraints, $fieldList, QueryBuilder $queryBuilder) - { - if (in_array($table, array_keys($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['static_info_tables']['tables'] ?? []))) { - $lang = substr(strtolower($this->getLanguageService()->lang), 0, 2); - if (ExtensionManagementUtility::isLoaded('static_info_tables_' . $lang) && - isset($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['static_info_tables']['tables'][$table]['label_fields']) && - is_array($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['static_info_tables']['tables'][$table]['label_fields'])) { - $label = array_key_first($GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['static_info_tables']['tables'][$table]['label_fields']); - if ($label) { - $orderBy = str_replace('##', $lang, $label); - $orderByFields = QueryHelper::parseOrderBy((string)$orderBy); - foreach ($orderByFields as $fieldNameAndSorting) { - list($fieldName, $sorting) = $fieldNameAndSorting; - $queryBuilder->orderBy($fieldName, $sorting); - } - } - } - } - } - - protected function getLanguageService() - { - return $GLOBALS['LANG']; - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/Hook/Core/DataHandling/ProcessDataMap.php b/typo3conf/ext/static_info_tables/Classes/Hook/Core/DataHandling/ProcessDataMap.php deleted file mode 100644 index bd093e3..0000000 --- a/typo3conf/ext/static_info_tables/Classes/Hook/Core/DataHandling/ProcessDataMap.php +++ /dev/null @@ -1,145 +0,0 @@ - - * 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 2 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 SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Domain\Repository\TerritoryRepository; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Utility\GeneralUtility; - -/** - * Hook on Core/DataHandling/DataHandler to manage redundancy of ISO codes in static info tables - */ -class ProcessDataMap -{ - protected $countryRepository; - - public function injectCountryRepository(CountryRepository $countryRepository) - { - $this->countryRepository = $countryRepository; - } - protected $currencyRepository; - - public function injectCurrencyRepository(CurrencyRepository $currencyRepository) - { - $this->currencyRepository = $currencyRepository; - } - - protected $territoryRepository; - - public function injectTerritoryRepository(TerritoryRepository $territoryRepository) - { - $this->territoryRepository = $territoryRepository; - } - - /** - * Post-process redundant ISO codes fields - * - * @param object $fobj TCEmain object reference - * @param mixed $status - * @param mixed $table - * @param mixed $id - * @return void - */ - public function processDatamap_postProcessFieldArray($status, $table, $id, &$incomingFieldArray, &$fObj) - { - switch ($table) { - case 'static_territories': - //Post-process containing territory ISO numeric code - if ($incomingFieldArray['tr_parent_territory_uid'] ?? 0) { - $territory = $this->territoryRepository->findOneByUid((int)$incomingFieldArray['tr_parent_territory_uid']); - if (is_object($territory)) { - $incomingFieldArray['tr_parent_iso_nr'] = $territory->getUnCodeNumber(); - } - } elseif (isset($incomingFieldArray['tr_parent_territory_uid'])) { - $incomingFieldArray['tr_parent_iso_nr'] = 0; - } - break; - case 'static_countries': - //Post-process containing territory ISO numeric code - if ($incomingFieldArray['cn_parent_territory_uid'] ?? 0) { - $territory = $this->territoryRepository->findOneByUid((int)$incomingFieldArray['cn_parent_territory_uid']); - if (is_object($territory)) { - $incomingFieldArray['cn_parent_tr_iso_nr'] = $territory->getUnCodeNumber(); - } - } elseif (isset($incomingFieldArray['cn_parent_territory_uid'])) { - $incomingFieldArray['cn_parent_tr_iso_nr'] = 0; - } - //Post-process currency ISO numeric and A3 codes - if ($incomingFieldArray['cn_currency_uid'] ?? 0) { - $currency = $this->currencyRepository->findOneByUid((int)$incomingFieldArray['cn_currency_uid']); - if (is_object($currency)) { - $incomingFieldArray['cn_currency_iso_nr'] = $currency->getIsoCodeNumber(); - $incomingFieldArray['cn_currency_iso_3'] = $currency->getIsoCodeA3(); - } - } elseif (isset($incomingFieldArray['cn_currency_uid'])) { - $incomingFieldArray['cn_currency_iso_nr'] = 0; - $incomingFieldArray['cn_currency_iso_3'] = ''; - } - break; - } - } - - /** - * Post-process redundant ISO codes fields of IRRE child - * - * @param object $fobj TCEmain object reference - * @param mixed $status - * @param mixed $table - * @param mixed $id - * @return void - */ - public function processDatamap_afterDatabaseOperations($status, $table, $id, &$fieldArray, &$fObj) - { - switch ($table) { - case 'static_countries': - //Post-process country ISO numeric, A2 and A3 codes on country zones - // Get the country record uid - if ($status === 'new') { - $id = $fObj->substNEWwithIDs[$id]; - } - // Get the country - $country = $this->countryRepository->findOneByUid((int)$id); - // Get the country zones - $countryZones = $country->getCountryZones()->toArray(); - if (count($countryZones)) { - $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('static_country_zones'); - foreach ($countryZones as $countryZone) { - $connection->update( - 'static_country_zones', - [ - 'zn_country_iso_nr' => (int)$country->getIsoCodeNumber(), - 'zn_country_iso_2' => $country->getIsoCodeA2(), - 'zn_country_iso_3' => $country->getIsoCodeA3(), - ], - ['uid' => (int)$countryZone->getUid()] - ); - } - } - break; - } - } -} \ No newline at end of file diff --git a/typo3conf/ext/static_info_tables/Classes/PiBaseApi.php b/typo3conf/ext/static_info_tables/Classes/PiBaseApi.php deleted file mode 100644 index b5b1eac..0000000 --- a/typo3conf/ext/static_info_tables/Classes/PiBaseApi.php +++ /dev/null @@ -1,622 +0,0 @@ - - * 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 2 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. - * A copy is found in the textfile GPL.txt and important notices to the license - * from the author is found in LICENSE.txt distributed with these scripts. - * - * - * 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\ServerRequestInterface; -use SJBR\StaticInfoTables\Domain\Model\Currency; -use SJBR\StaticInfoTables\Domain\Repository\CountryRepository; -use SJBR\StaticInfoTables\Domain\Repository\CurrencyRepository; -use SJBR\StaticInfoTables\Utility\HtmlElementUtility; -use SJBR\StaticInfoTables\Utility\LocalizationUtility; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\Query\QueryHelper; -use TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer; -use TYPO3\CMS\Core\Http\ApplicationType; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Frontend\Plugin\AbstractPlugin; - -/** - * Class for handling static info tables: countries, and subdivisions, currencies, languages and taxes - */ -class PiBaseApi extends AbstractPlugin -{ - /** - * The backReference to the mother cObj object set at call time - */ - public $cObj; - - // Same as class name - public $prefixId = 'tx_staticinfotables_pi1'; - // Path to this script relative to the extension dir. - public $scriptRelPath = 'pi1/class.tx_staticinfotables_pi1.php'; - - /** - * The extension key - * - * @var string - */ - public $extKey = 'static_info_tables'; - - public $conf = []; - // Default currency - public $currency; - public $currencyInfo = []; - public $defaultCountry; - public $defaultCountryZone; - public $defaultLanguage; - public $types = ['TERRITORIES', 'COUNTRIES', 'SUBDIVISIONS', 'CURRENCIES', 'LANGUAGES']; - public $tables = [ - 'TERRITORIES' => 'static_territories', - 'COUNTRIES' => 'static_countries', - 'SUBDIVISIONS' => 'static_country_zones', - 'CURRENCIES' => 'static_currencies', - 'LANGUAGES' => 'static_languages', - ]; - - /** - * @var CountryRepository - */ - protected $countryRepository; - - /** - * @var CurrencyRepository - */ - protected $currencyRepository; - - /** - * Whether the class has been initialized - * - * @var bool - */ - protected $bHasBeenInitialised = false; - - /** - * Returns info if the tx_staticinfotables_pi1 object has already been initialised. - * You need to initialise this object only once. - * - * @return bool Always returns true - */ - public function needsInit() - { - return !$this->bHasBeenInitialised; - } - - /** - * Initializing the class: sets the language based on the TS configuration language property - * - * @param array $conf ... overwriting setup of extension - * @return bool Always returns true - */ - public function init($conf = []) - { - if (($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface - && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend()) { - $this->conf = $GLOBALS['TSFE']->tmpl->setup['plugin.'][$this->prefixId . '.'] ?? []; - } - - $this->countryRepository = GeneralUtility::makeInstance(CountryRepository::class); - $this->currencyRepository = GeneralUtility::makeInstance(CurrencyRepository::class); - - //Get the default currency and make sure it does exist in table static_currencies - $this->currency = $conf['currencyCode'] ?? ''; - if (!$this->currency) { - $this->currency = (trim($this->conf['currencyCode'] ?? '')) ? trim($this->conf['currencyCode']) : 'EUR'; - } - //If nothing is set, we use the Euro because TYPO3 is spread more in this area - if (!$this->getStaticInfoName('CURRENCIES', $this->currency)) { - $this->currency = 'EUR'; - } - $this->currencyInfo = $this->loadCurrencyInfo($this->currency); - - $this->defaultCountry = $conf['countryCode'] ?? ''; - if (!$this->defaultCountry) { - $this->defaultCountry = trim($this->conf['countryCode'] ?? ''); - } - if (!$this->getStaticInfoName('COUNTRIES', $this->defaultCountry)) { - $this->defaultCountry = 'DEU'; - } - - $this->defaultCountryZone = $conf['countryZoneCode'] ?? ''; - if (!$this->defaultCountryZone) { - $this->defaultCountryZone = trim($this->conf['countryZoneCode'] ?? ''); - } - if (!$this->getStaticInfoName('SUBDIVISIONS', $this->defaultCountryZone, $this->defaultCountry)) { - if ($this->defaultCountry == 'DEU') { - $this->defaultCountryZone = 'NW'; - } else { - $this->defaultCountryZone = ''; - } - } - - $this->defaultLanguage = $conf['languageCode'] ?? ''; - if (!$this->defaultLanguage) { - $this->defaultLanguage = trim($this->conf['languageCode'] ?? ''); - } - if (!$this->getStaticInfoName('LANGUAGES', $this->defaultLanguage)) { - $this->defaultLanguage = 'EN'; - } - - $this->bHasBeenInitialised = true; - return true; - } - - /** - * Getting the name of a country, country subdivision, currency, language, tax - * - * @param string Defines the type of entry of the requested name: 'TERRITORIES', 'COUNTRIES', 'SUBDIVISIONS', 'CURRENCIES', 'LANGUAGES' - * @param string The ISO alpha-3 code of a territory, country or currency, or the ISO alpha-2 code of a language or the code of a country subdivision, can be a comma ',' separated string, then all the single items are looked up and returned - * @param string The value of the country code (cn_iso_3) for which a name of type 'SUBDIVISIONS' is requested (meaningful only in this case) - * @param string Not used - * @param bool local name only - if set local title is returned - * @param mixed $type - * @param mixed $code - * @param mixed $country - * @param mixed $countrySubdivision - * @param mixed $local - * - * @return string|bool The name of the object in the current language or false - */ - public function getStaticInfoName($type = 'COUNTRIES', $code = '', $country = '', $countrySubdivision = '', $local = false) - { - $names = false; - if (in_array($type, $this->types) && trim($code)) { - $codeArray = GeneralUtility::trimExplode(',', ($code)); - $tableName = $this->tables[$type]; - if (!$tableName) { - return false; - } - $nameArray = []; - foreach ($codeArray as $item) { - $isoCodeArray = []; - $isoCodeArray[] = $item; - switch ($type) { - case 'SUBDIVISIONS': - $isoCodeArray[] = trim($country) ? trim($country) : $this->defaultCountry; - break; - case 'LANGUAGES': - $isoCodeArray = GeneralUtility::trimExplode('_', $code, 1); - break; - } - $nameArray[] = LocalizationUtility::translate(['iso' => $isoCodeArray], $tableName, $local); - } - $names = implode(',', $nameArray); - } - return $names; - } - - /** - * Buils a HTML drop-down selector of countries, country subdivisions, currencies or languages - * - * @param string $type: Defines the type of entries to be presented in the drop-down selector: 'COUNTRIES', 'SUBDIVISIONS', 'CURRENCIES' or 'LANGUAGES' - * @param string $name: A value for the name attribute of the tag - * @param array $selectedArray: The values of the code of the entries to be pre-selected in the drop-down selector: value of cn_iso_3, zn_code, cu_iso_3 or lg_iso_2 - * @param string $country: The value of the country code (cn_iso_3) for which a drop-down selector of type 'SUBDIVISIONS' is requested (meaningful only in this case) - * @param boolean/string $submit: If set to 1, an onchange attribute will be added to the tag - * @param string $title: A value for the title attribute of the and