TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/Modules/qrcodes.xlf" date="2025-11-13T18:00:15Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="title">
|
||||
<source>QR Codes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="short_description">
|
||||
<source>QR Codes Administration</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="description">
|
||||
<source>Generate and customize QR codes to provide quick, scannable access to your digital content.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="heading_text">
|
||||
<source>QR Code Management</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="add_text">
|
||||
<source>Add QR Code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found_with_filter.message">
|
||||
<source>No QR Code could be found with the current set of filters applied.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found.title">
|
||||
<source>No QR Codes found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found.message">
|
||||
<source>There are currently no QR Codes found in the database.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="create">
|
||||
<source>Create new QR Code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="delete.title">
|
||||
<source>Delete QR Codes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="delete.message">
|
||||
<source>Delete all marked QR Codes permanently? You cannot undo this action.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="download">
|
||||
<source>Download</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="show">
|
||||
<source>Show QR Code</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/Modules/redirects.xlf" date="2026-11-10T13:37:37Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="short_description">
|
||||
<source>Redirect Administration</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="description">
|
||||
<source>Manage URL redirects to prevent broken links and route traffic to preferred destinations.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="title">
|
||||
<source>Redirects</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/Modules/short_urls.xlf" date="2025-11-13T18:00:15Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="title">
|
||||
<source>Short URLs</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="short_description">
|
||||
<source>Short URLs Administration</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="description">
|
||||
<source>Create and manage Short URLs that redirect to longer links for easier sharing and tracking.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="heading_text">
|
||||
<source>Short URL Management</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="add_text">
|
||||
<source>Add Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found_with_filter.message">
|
||||
<source>No Short URL could be found with the current set of filters applied.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found.title">
|
||||
<source>No Short URLs found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_found.message">
|
||||
<source>There are currently no Short URLs found in the database.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="create">
|
||||
<source>Create new Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="delete.title">
|
||||
<source>Delete Short URLs</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="delete.message">
|
||||
<source>Delete all marked Short URLs permanently? You cannot undo this action.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="show">
|
||||
<source>Show Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="generate_short_url">
|
||||
<source>Generate Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="validation.duplicate_short_url">
|
||||
<source>This Short URL already exists. Please choose a different source host or source path.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang.xlf" date="2017-12-29T20:22:14Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="redirects">
|
||||
<source>Redirect Settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects.autoUpdateSlugs">
|
||||
<source>Update the slugs of all sub pages automatically</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects.autoCreateRedirects">
|
||||
<source>Create redirects for pages with a new slug automatically</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects.redirectTTL">
|
||||
<source>Time To Live of redirect records in days</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects.httpStatusCode">
|
||||
<source>HTTP Status Code for the redirect, 301 is the default</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.days">
|
||||
<source>Cleanup redirects older than provided number of days</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.domain">
|
||||
<source>Cleanup redirects matching provided domain(s)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.hitCount">
|
||||
<source>Cleanup redirects matching hit counts lower than given number</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.path">
|
||||
<source>Cleanup redirects matching given path (as database like expression)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.creationType">
|
||||
<source>Cleanup redirects matching provided creation type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.statusCode">
|
||||
<source>Cleanup redirects matching provided status code(s)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.integrityStatus">
|
||||
<source>Cleanup redirects matching provided integrity status</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="cleanupRedirectsCommand.label.redirectType">
|
||||
<source>Cleanup redirects matching provided redirect type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="created_on">
|
||||
<source>on</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="not_tracked">
|
||||
<source>[Not Tracked]</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_qrcode">
|
||||
<source>Not enough information for generating a QR Code.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,149 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang_db.xlf" date="2017-12-29T20:22:14Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="sys_redirect">
|
||||
<source>Redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.redirect_type.qr_code">
|
||||
<source>QR Code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.redirect_type.short_url">
|
||||
<source>Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.source_host">
|
||||
<source>Source Domain</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.source_path">
|
||||
<source>Source Path</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.force_https">
|
||||
<source>SSL Redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.force_https.0">
|
||||
<source>Force SSL Redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.keep_query_parameters">
|
||||
<source>GET Parameters</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.keep_query_parameters.0">
|
||||
<source>Keep GET Parameters</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.respect_query_parameters">
|
||||
<source>GET Parameters (source)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.respect_query_parameters.0">
|
||||
<source>Respect GET Parameters</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target">
|
||||
<source>Target</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode">
|
||||
<source>Status Code HTTP Header</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.301">
|
||||
<source>301 Moved Permanently</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.302">
|
||||
<source>302 Found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.303">
|
||||
<source>303 See Other</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.307">
|
||||
<source>307 Temporary Redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.308">
|
||||
<source>308 Permanent Redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.keep">
|
||||
<source>Keep HTTP method</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.target_statuscode.change">
|
||||
<source>Change HTTP method to GET</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.hitcount">
|
||||
<source>Hit count</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.lasthiton">
|
||||
<source>Last Hit on</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.hitcountState">
|
||||
<source>Hit Counter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.disable_hitcount">
|
||||
<source>Disable Hit Counter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.disable_hitcount.0">
|
||||
<source>Disable</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tabs.redirectCount">
|
||||
<source>Statistics</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.protected">
|
||||
<source>Protected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.protected.description">
|
||||
<source>When enabled, this redirect will be skipped by scheduled cleanup tasks that might delete redirects under certain conditions.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.is_regexp">
|
||||
<source>Is regular expression?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.is_regexp.0">
|
||||
<source>Yes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.disabled">
|
||||
<source>Disable</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.disabled.0">
|
||||
<source>Deactivate redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.creation_type">
|
||||
<source>Creation Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.creation_type.description">
|
||||
<source>Defines how the redirect was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.creation_type.1">
|
||||
<source>manually created</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.creation_type.0">
|
||||
<source>automatically created</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.webhook_type.typo3-redirect-was-hit">
|
||||
<source>... when a redirect has been hit</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.integrity_status">
|
||||
<source>Integrity status</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.integrity_status.description">
|
||||
<source>Redirects can be checked via the command redirects:checkintegrity.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.integrity_status.no_conflict">
|
||||
<source>No conflict</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.integrity_status.self_reference">
|
||||
<source>Self reference</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.integrity_status.invalid_target">
|
||||
<source>Invalid target</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.uid">
|
||||
<source>UID</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.createdby">
|
||||
<source>Created by</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.short_url">
|
||||
<source>Short URL</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.short_url.description">
|
||||
<source>Enter a Short URL or generate a random one automatically. Once saved, the Short URL cannot be changed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sys_redirect.short_url.shortUrlGenerator">
|
||||
<source>Generate Short URL</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang_extconf.xlf" date="2023-06-19T06:49:15Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="showCheckintegrityInfoInReports.enable">
|
||||
<source>Show report warning if checkintegrity has not been run.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="showCheckintegrityInfoInReports.seconds">
|
||||
<source>Set validity period (seconds) for the last checkintegrity report.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf" date="2017-12-29T20:23:34Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="source_host_global_text">
|
||||
<source>Global redirect (any domain)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="heading_text">
|
||||
<source>Redirect Management</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_add_text">
|
||||
<source>Add redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_not_found.title">
|
||||
<source>No redirects found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_not_found.message">
|
||||
<source>There are currently no redirect records found in the database.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_create">
|
||||
<source>Create new redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="noAccessPermissions.title">
|
||||
<source>Access denied</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="noAccessPermissions.message">
|
||||
<source>You are not allowed to list or modify redirects due to insufficient permissions.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_not_found_with_filter.title">
|
||||
<source>No redirects found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_not_found_with_filter.message">
|
||||
<source>With the current set of filters applied, no redirect could be found.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirect_no_filter">
|
||||
<source>Remove all filter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.source_host.showAll">
|
||||
<source>Show All</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.targetStatusCode">
|
||||
<source>Status Code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.creationType">
|
||||
<source>Creation type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.creationType.showAll">
|
||||
<source>Show All</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.protected">
|
||||
<source>Protected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.protected.showAll">
|
||||
<source>Show All</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.protected.unprotected">
|
||||
<source>unprotected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.protected.protected">
|
||||
<source>protected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.integrityStatus">
|
||||
<source>Integrity status</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.integrityStatus.showAll">
|
||||
<source>Show All</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.neverHit">
|
||||
<source>Never hit</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.sendButton">
|
||||
<source>Filter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="filter.resetButton">
|
||||
<source>Reset</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="record_disabled">
|
||||
<source>Disabled</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="source_path.placeholder">
|
||||
<source>/my-path/ or #^/my-path/$# (when regex enabled)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="short_url.source_path.placeholder">
|
||||
<source>e.g. /AbCdEfGh</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="short_url.copy">
|
||||
<source>Copy Short URL to clipboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pageID">
|
||||
<source>Page ID</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="destination_status_code">
|
||||
<source>Status Code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="hit_reset">
|
||||
<source>Reset hit counter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="hit_reset.confirm.title">
|
||||
<source>Reset the hit counter of this record?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="hit_reset.confirm.content">
|
||||
<source>Are you sure you want to reset the hit counter of this record?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="hit_last_never">
|
||||
<source>Never</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="visit_destination">
|
||||
<source>Go to</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="view_redirect">
|
||||
<source>View redirect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="overview.tableHead.protected">
|
||||
<source>Protected</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="overview.tableField.protected.no">
|
||||
<source>No</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="overview.tableField.protected.yes">
|
||||
<source>Yes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="labels.delete.title">
|
||||
<source>Delete redirects</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="labels.delete.message">
|
||||
<source>Are you sure you want to delete all marked redirects?</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang_reports.xlf" date="2019-09-05T15:20:15Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="statusProvider">
|
||||
<source>Redirects</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.conflictingRedirects">
|
||||
<source>Conflicting Redirects</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.conflictingRedirects.none">
|
||||
<source>None</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.conflictingRedirects.count">
|
||||
<source>%1$s conflicting redirects</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.conflictingRedirects.message">
|
||||
<source>These redirects cause a conflict as there are pages that are still accessible with the same URL.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.checkIntegrityResultState">
|
||||
<source>Redirects integrity check</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.checkIntegrityResultState.title">
|
||||
<source>List of conflicting redirects may not be up to date</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="status.checkIntegrityResultState.message">
|
||||
<source>Regularly run the console command redirects:checkintegrity.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" datatype="plaintext" original="EXT:redirects/Resources/Private/Language/locallang_slug_service.xlf" date="2017-12-29T20:23:34Z" product-name="redirects">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="notification.slug_and_redirects.title">
|
||||
<source>Slugs updated and redirects created</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="notification.slug_and_redirects.message">
|
||||
<source>Because you renamed a slug, the slugs of all sub-pages were updated and redirects were created for you automatically.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="notification.slug_only.title">
|
||||
<source>Slugs updated</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="notification.slug_only.message">
|
||||
<source>Because you renamed a slug, the slugs of all sub-pages were updated for you automatically.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="notification.redirects.button.revert_update">
|
||||
<source>Revert update</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="notification.redirects.button.revert_redirect">
|
||||
<source>Revert redirects only</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects_error_title">
|
||||
<source>An error occurred</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="redirects_error_message">
|
||||
<source>Sorry something went wrong.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="revert_update_success_title">
|
||||
<source>Revert successful</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="revert_update_success_message">
|
||||
<source>All slug changes of sub pages have been reverted.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="revert_redirects_success_title">
|
||||
<source>Revert successful</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="revert_redirects_success_message">
|
||||
<source>All created redirects have been reverted.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,88 @@
|
||||
<f:if condition="{pagination.numberOfPages} > 1">
|
||||
<nav class="pagination-wrap">
|
||||
<ul class="pagination">
|
||||
<f:if condition="{pagination.hasLessPages}">
|
||||
<f:then>
|
||||
<li class="page-item">
|
||||
<a href="{f:be.uri(route: route, parameters: '{demand: demand.parameters, orderField: demand.orderField, orderDirection: demand.orderDirection, page: 1}')}" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.first')}" class="page-link">
|
||||
<core:icon identifier="actions-view-paging-first" />
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a href="{f:be.uri(route: route, parameters: '{demand: demand.parameters, orderField: demand.orderField, orderDirection: demand.orderDirection, page: pagination.previousPage}')}" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.previous')}" class="page-link">
|
||||
<core:icon identifier="actions-view-paging-previous" />
|
||||
</a>
|
||||
</li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<li class="page-item disabled">
|
||||
<span class="page-link">
|
||||
<core:icon identifier="empty-empty"/>
|
||||
</span>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<span class="page-link">
|
||||
<core:icon identifier="empty-empty"/>
|
||||
</span>
|
||||
</li>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<li class="page-item">
|
||||
<span class="page-link">
|
||||
<f:translate key="title" domain="redirects.module"/>
|
||||
{pagination.startRecord} - {pagination.endRecord}
|
||||
</span>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<span class="page-link">
|
||||
<f:translate extensionName="fluid" key="widget.pagination.page" />
|
||||
<f:variable name="gotToPageUrl">
|
||||
<f:be.uri route="redirects" parameters="{demand: demand.parameters, orderField: demand.orderField, orderDirection: demand.orderDirection, page: 987654322}" />
|
||||
</f:variable>
|
||||
<form data-on-submit="processNavigate" class="form-inline">
|
||||
<input type="number"
|
||||
value="{pagination.current}"
|
||||
name="paginator-target-page"
|
||||
class="form-control form-control-sm paginator-input"
|
||||
min="1"
|
||||
max="{pagination.numberOfPages}"
|
||||
data-number-of-pages="{pagination.numberOfPages}"
|
||||
data-url="{gotToPageUrl}" />
|
||||
</form>
|
||||
/ {pagination.numberOfPages}
|
||||
</span>
|
||||
</li>
|
||||
<f:if condition="{pagination.hasMorePages}">
|
||||
<f:then>
|
||||
<li class="page-item">
|
||||
<a href="{f:be.uri(route: route, parameters: '{demand: demand.parameters, page: pagination.nextPage, orderField: demand.orderField, orderDirection: demand.orderDirection}')}" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.next')}" class="page-link">
|
||||
<core:icon identifier="actions-view-paging-next" />
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a href="{f:be.uri(route: route, parameters: '{demand: demand.parameters, page: pagination.numberOfPages, orderField: demand.orderField, orderDirection: demand.orderDirection}')}" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.last')}" class="page-link">
|
||||
<core:icon identifier="actions-view-paging-last" />
|
||||
</a>
|
||||
</li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<li class="page-item disabled">
|
||||
<span class="page-link">
|
||||
<core:icon identifier="empty-empty"/>
|
||||
</span>
|
||||
</li>
|
||||
<li class="page-item disabled">
|
||||
<span class="page-link">
|
||||
<core:icon identifier="empty-empty"/>
|
||||
</span>
|
||||
</li>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<li class="page-item">
|
||||
<a href="{f:be.uri(route: route, parameters: '{demand: demand.parameters, page: demand.page, orderField: demand.orderField, orderDirection: demand.orderDirection}')}" title="{f:translate(extensionName: 'fluid', key:'widget.pagination.refresh')}" class="page-link">
|
||||
<core:icon identifier="actions-refresh" />
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</f:if>
|
||||
@@ -0,0 +1,499 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:rd="http://typo3.org/ns/TYPO3/CMS/Redirects/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
<f:if condition="{canListRedirects}">
|
||||
<f:then>
|
||||
<f:render section="overview" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}"
|
||||
message="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:noAccessPermissions.message')}"
|
||||
title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:noAccessPermissions.title')}"
|
||||
/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="overview">
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-edit-action.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-delete-action.js"/>
|
||||
<f:asset.module identifier="@typo3/redirects/redirects-module.js"/>
|
||||
|
||||
<h1><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:heading_text"/></h1>
|
||||
<f:if condition="{redirects -> f:count()}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:render section="table" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{demand.constraints}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::NOTICE')}" title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found_with_filter.title')}">
|
||||
<p><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found_with_filter.message"/></p>
|
||||
<a class="btn btn-default" href="{f:be.uri(route:'redirects')}">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_no_filter"/>
|
||||
</a>
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_create"/>
|
||||
</be:link.newRecord>
|
||||
</f:be.infobox>
|
||||
|
||||
<f:variable name="gotToPageUrl"><f:be.uri route="redirects" parameters="{demand: demand.parameters, page: 987654322}" /></f:variable>
|
||||
<form data-on-submit="processNavigate">
|
||||
<input type="hidden" value="1" name="paginator-target-page" data-number-of-pages="1" data-url="{gotToPageUrl}"/>
|
||||
</form>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found.title')}">
|
||||
<p><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found.message"/></p>
|
||||
<f:if condition="{canEditRedirects}">
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_create"/>
|
||||
</be:link.newRecord>
|
||||
</f:if>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
|
||||
<f:section name="table">
|
||||
<f:comment>Partial is used from EXT:backend/Resources/Private/Partials/MultiRecordSelection/redirectss.html</f:comment>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-checkbox" colspan="2">
|
||||
<div class="dropdown">
|
||||
<button type="button" class="dropdown-toggle dropdown-toggle-link t3js-multi-record-selection-check-actions-toggle" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.openSelectionOptions')}" popovertarget="redirects-selection">
|
||||
<core:icon identifier="actions-selection" size="small" />
|
||||
</button>
|
||||
<ul id="redirects-selection" class="dropdown-menu t3js-multi-record-selection-check-actions" popover>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-all" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.checkAll')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-all" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.checkAll" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-none" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.uncheckAll')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-none" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.uncheckAll" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" data-multi-record-selection-check-action="toggle" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.toggleSelection')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-invert" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.toggleSelection" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</th>
|
||||
<th class="col-path">
|
||||
<f:render section="listHeaderSorting" arguments="{field: 'source_host', label: 'sys_redirect.source_host', demand: demand}"/>
|
||||
</th>
|
||||
<th class="col-path">
|
||||
<f:render section="listHeaderSorting" arguments="{field: 'source_path', label: 'sys_redirect.source_path', demand: demand}"/>
|
||||
</th>
|
||||
<th class="col-path"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.target"/></th>
|
||||
<th><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:destination_status_code"/></th>
|
||||
<th><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:overview.tableHead.protected"/></th>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<th><f:render section="listHeaderSorting" arguments="{field: 'hitcount', label: 'sys_redirect.hitcount', demand: demand}"/></th>
|
||||
<th class="col-datetime"><f:render section="listHeaderSorting" arguments="{field: 'lasthiton', label: 'sys_redirect.lasthiton', demand: demand}"/></th>
|
||||
</f:if>
|
||||
<th class="col-control">
|
||||
<span class="visually-hidden"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_"/></span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-multi-record-selection-row-selection="true">
|
||||
<f:for each="{redirects}" key="domainName" as="redirect">
|
||||
<tr
|
||||
class="{f:if(condition: '{redirect.integrity_status} && {redirect.integrity_status} !== {defaultIntegrityStatus}', then: 'danger')}"
|
||||
data-uid="{redirect.uid}"
|
||||
data-multi-record-selection-element="true"
|
||||
>
|
||||
<td class="col-checkbox">
|
||||
<span class="form-check form-check-type-toggle">
|
||||
<input class="form-check-input t3js-multi-record-selection-check" type="checkbox">
|
||||
</span>
|
||||
</td>
|
||||
<td class="col-icon">
|
||||
<f:alias map="{
|
||||
disable: '{f:translate(key: \'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:record_disabled\')}',
|
||||
onlystart: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:start\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')}',
|
||||
onlyend: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:stop\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}',
|
||||
startend: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:start\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')} - {f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:stop\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}'
|
||||
}">
|
||||
<f:if condition="{redirect.disabled}">
|
||||
<f:then><span title="{disable}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:then>
|
||||
<f:else if="{redirect.starttime} && !{redirect.endtime}"><span title="{onlystart}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="!{redirect.starttime} && {redirect.endtime}"><span title="{onlyend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="{redirect.starttime} && {redirect.endtime}"><span title="{startend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else><span><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
</f:if>
|
||||
</f:alias>
|
||||
</td>
|
||||
<td class="col-path">{redirect.source_host}</td>
|
||||
<td class="col-path">
|
||||
<f:if condition="{canEditRedirects}">
|
||||
<f:then>
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
table="sys_redirect"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_path}"
|
||||
>
|
||||
{redirect.source_path}
|
||||
</be:link.editRecord>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{redirect.source_path}
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-path">
|
||||
<f:variable name="targetUri" value="{f:uri.typolink(parameter:redirect.target)}" />
|
||||
<f:link.typolink
|
||||
parameter="{redirect.target}"
|
||||
target="_blank"
|
||||
title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:visit_destination')} {f:if(condition: targetUri, then:targetUri, else:redirect.target)}"
|
||||
>
|
||||
{f:if(condition: targetUri, then:targetUri, else:redirect.target)}
|
||||
</f:link.typolink>
|
||||
<f:variable name="pageRow" value="{rd:targetPageRecord(target:redirect.target)}" />
|
||||
<f:if condition="{pageRow}">(<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:pageID"/>:
|
||||
<be:link.editRecord
|
||||
table="pages"
|
||||
uid="{pageRow.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_path}"
|
||||
><core:iconForRecord table="pages" row="{pageRow}" /> {pageRow.uid}</be:link.editRecord>)</f:if>
|
||||
</td>
|
||||
<td>{redirect.target_statuscode}</td>
|
||||
<td>
|
||||
<f:if condition="{redirect.protected}">
|
||||
<f:then>
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:overview.tableField.protected.yes"/>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:overview.tableField.protected.no"/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<td>
|
||||
<f:if condition="!{redirect.disable_hitcount}">
|
||||
{redirect.hitcount}
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-datetime">
|
||||
<f:if condition="{redirect.lasthiton}">
|
||||
<f:then><f:format.date format="Y-m-d H:i">@{redirect.lasthiton}</f:format.date></f:then>
|
||||
<f:else><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_last_never"/></f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
</f:if>
|
||||
<td class="col-control">
|
||||
<div class="btn-group" role="group">
|
||||
<f:if condition="{canEditRedirects}">
|
||||
<f:then>
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
class="btn btn-default"
|
||||
table="sys_redirect"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</be:link.editRecord>
|
||||
<f:if condition="{redirect.disabled} == 1">
|
||||
<f:then>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=0', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:unHide')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-unhide" />
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:hide')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-hide" />
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'cmd[sys_redirect][{redirect.uid}][delete]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:deleteWarning')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}">
|
||||
<core:icon identifier="actions-delete" />
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="btn-group" role="group">
|
||||
<f:if condition="{redirect.is_regexp} || ({redirect.source_host} === '*')">
|
||||
<f:else>
|
||||
<f:variable name="showPreviewButton" value="1" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{showHitCounter} && !{redirect.disable_hitcount}">
|
||||
<f:variable name="showHitCountResetButton" value="{f:if(condition: '{redirect.hitcount} != 0', then: '1', else: '0')}" />
|
||||
</f:if>
|
||||
<f:if condition="{showPreviewButton} || {showHitCountResetButton}">
|
||||
<f:then>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default dropdown-toggle dropdown-toggle-no-chevron"
|
||||
popovertarget="actions-{redirect.uid}"
|
||||
>
|
||||
<core:icon identifier="actions-menu-alternative" />
|
||||
</button>
|
||||
<ul id="actions-{redirect.uid}" class="dropdown-menu" popover>
|
||||
<f:if condition="{showPreviewButton}">
|
||||
<li>
|
||||
<f:link.external
|
||||
class="dropdown-item"
|
||||
uri="{redirect.source_host}{redirect.source_path}"
|
||||
target="_blank"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-{cacheAction.severity}">
|
||||
<core:icon identifier="actions-view-page" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:view_redirect" />
|
||||
</span>
|
||||
</span>
|
||||
</f:link.external>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{showHitCountResetButton}">
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][hitcount]=0', arguments:'{redirect: returnUrl}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_reset.confirm.title')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_reset.confirm.content')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon">
|
||||
<core:icon identifier="actions-edit-restore" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_reset" />
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:then>
|
||||
<f:else if="{canEditRedirects}">
|
||||
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<f:render partial="Pagination" arguments="{route: 'redirects', demand: demand, pagination: pagination, gotToPageUrl: gotToPageUrl}" />
|
||||
</f:section>
|
||||
|
||||
<f:section name="listHeaderSorting">
|
||||
<div class="dropdown">
|
||||
<button class="dropdown-toggle dropdown-toggle-link" type="button" popovertarget="redirects-selection-sorting-{field}">
|
||||
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:{label}"/>
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:then>
|
||||
<div class="text-primary">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<f:then>
|
||||
<core:icon identifier="actions-sort-amount-up" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<core:icon identifier="actions-sort-amount-down" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div>
|
||||
<core:icon identifier="empty-empty" />
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</button>
|
||||
<ul id="redirects-selection-sorting-{field}" class="dropdown-menu" popover>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'redirects', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.defaultOrderDirection}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'redirects', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.reverseOrderDirection}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === desc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="filter">
|
||||
<form action="{f:be.uri(route:'redirects')}" method="post" enctype="multipart/form-data" name="demand">
|
||||
<input type="hidden" name="orderField" value="{demand.orderField}">
|
||||
<input type="hidden" name="orderDirection" value="{demand.orderDirection}">
|
||||
<input type="hidden" name="redirectType" value="{f:constant(name: '\TYPO3\CMS\Redirects\Repository\Demand::DEFAULT_REDIRECT_TYPE')}">
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="demand-source-host" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.source_host"/></label>
|
||||
<select id="demand-source-host" class="form-select" name="demand[source_host]" data-on-change="submit">
|
||||
<option value=""><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.source_host.showAll"/></option>
|
||||
<f:for each="{hosts}" as="host">
|
||||
<option value="{host.name}" {f:if(condition: '{host.name} == {demand.firstSourceHost}', then: 'selected')}>{host.name}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-source-path" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.source_path"/></label>
|
||||
<input type="text" id="demand-source-path" class="form-control" name="demand[source_path]" value="{demand.sourcePath}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.target"/></label>
|
||||
<input type="text" id="demand-target" class="form-control" name="demand[target]" value="{demand.target}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target-status-code" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.targetStatusCode"/></label>
|
||||
<select id="demand-target-status-code" class="form-select" name="demand[target_statuscode]" data-on-change="submit">
|
||||
<option value=""><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.source_host.showAll"/></option>
|
||||
<f:for each="{statusCodes}" as="statusCode">
|
||||
<option value="{statusCode.code}" {f:if(condition: '{statusCode.code} == {demand.firstStatusCode}', then: 'selected')}>{statusCode.code}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target-automatically-created" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.creationType"/></label>
|
||||
<select id="demand-target-automatically-created" class="form-select" name="demand[creation_type]" data-on-change="submit">
|
||||
<option value="-1"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.creationType.showAll"/></option>
|
||||
<f:for each="{creationTypes}" key="creationType" as="label">
|
||||
<option value="{creationType}" {f:if(condition: '{demand.creationType} == {creationType}', then: 'selected')}>{f:translate(key: label, default: label)}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-integrity-status" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.integrityStatus"/></label>
|
||||
<select id="demand-integrity-status" class="form-select" name="demand[integrity_status]" data-on-change="submit">
|
||||
<option value=""><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.integrityStatus.showAll"/></option>
|
||||
<f:for each="{integrityStatusCodes}" key="integrityStatusCode" as="label">
|
||||
<option value="{integrityStatusCode}" {f:if(condition: '{demand.integrityStatus} == {integrityStatusCode}', then: 'selected')}>{f:translate(key: label, default: label)}</option>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target-protected" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.protected"/></label>
|
||||
<select id="demand-target-protected" class="form-select" name="demand[protected]" data-on-change="submit">
|
||||
<option value="-1"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.protected.showAll"/></option>
|
||||
<option value="0" {f:if(condition: '{demand.protected} == 0', then: 'selected')}><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.protected.unprotected"/></option>
|
||||
<option value="1" {f:if(condition: '{demand.protected} == 1', then: 'selected')}><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.protected.protected"/></option>
|
||||
</select>
|
||||
</div>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<div class="form-group align-self-end">
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input type="checkbox" class="form-check-input" name="demand[max_hits]" id="demand-never-hit" value="1" data-on-change="submit" {f:if(condition: demand.maxHits, then: 'checked="checked"')}>
|
||||
<label class="form-check-label" for="demand-never-hit">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.neverHit"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="form-group align-self-end">
|
||||
<input type="submit" value="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.sendButton')}" class="btn btn-default" />
|
||||
<a href="{f:be.uri(route:'redirects')}" class="btn btn-link"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.resetButton"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
</html>
|
||||
@@ -0,0 +1,403 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:rd="http://typo3.org/ns/TYPO3/CMS/Redirects/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-edit-action.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-delete-action.js"/>
|
||||
<f:asset.module identifier="@typo3/redirects/redirects-module.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/qrcode-modal-button.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/icon-element.js"/>
|
||||
|
||||
<h1><f:translate id="heading_text" domain="redirects.modules.qrcodes"/></h1>
|
||||
<f:if condition="{redirects -> f:count()}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:render section="table" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{demand.constraints}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::NOTICE')}" title="{f:translate(id: 'not_found.title', domain: 'redirects.modules.qrcodes')}">
|
||||
<p><f:translate id="not_found_with_filter.message" domain="redirects.modules.qrcodes"/></p>
|
||||
<a class="btn btn-default" href="{f:be.uri(route:'qrcodes')}">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_no_filter"/>
|
||||
</a>
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect" module="qrcodes" defaultValues="{sys_redirect: {redirect_type: 'qrcode'}}" >
|
||||
<f:translate id="create" domain="redirects.modules.qrcodes"/>
|
||||
</be:link.newRecord>
|
||||
</f:be.infobox>
|
||||
|
||||
<f:variable name="gotToPageUrl"><f:be.uri route="qrcodes" parameters="{demand: demand.parameters, page: 987654322}" /></f:variable>
|
||||
<form data-on-submit="processNavigate">
|
||||
<input type="hidden" value="1" name="paginator-target-page" data-number-of-pages="1" data-url="{gotToPageUrl}"/>
|
||||
</form>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" title="{f:translate(id: 'not_found.title', domain: 'redirects.modules.qrcodes')}">
|
||||
<p>
|
||||
<f:translate id="not_found.message" domain="redirects.modules.qrcodes"/>
|
||||
</p>
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect" module="qrcodes" defaultValues="{'sys_redirect': {'redirect_type': 'qrcode'}}">
|
||||
<f:translate id="create" domain="redirects.modules.qrcodes"/>
|
||||
</be:link.newRecord>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
|
||||
<f:section name="table">
|
||||
<f:comment>Partial is used from EXT:backend/Resources/Private/Partials/MultiRecordSelection/Actions.html</f:comment>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-checkbox" colspan="2">
|
||||
<div class="dropdown">
|
||||
<button type="button" class="dropdown-toggle dropdown-toggle-link t3js-multi-record-selection-check-actions-toggle" aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.openSelectionOptions')}" popovertarget="qrcodes-selection">
|
||||
<core:icon identifier="actions-selection" size="small" />
|
||||
</button>
|
||||
<ul id="qrcodes-selection" class="dropdown-menu t3js-multi-record-selection-check-actions" popover>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-all" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.checkAll')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-all" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.checkAll" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-none" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.uncheckAll')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-none" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.uncheckAll" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" data-multi-record-selection-check-action="toggle" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.toggleSelection')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-invert" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.toggleSelection" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</th>
|
||||
<th class="col-path">
|
||||
<f:render section="listHeaderSorting" arguments="{field: 'source_host', label: 'sys_redirect.source_host', demand: demand}"/>
|
||||
</th>
|
||||
<th class="col-path"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.target"/></th>
|
||||
<th class="col-description">
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.note"/>
|
||||
</th>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<th><f:render section="listHeaderSorting" arguments="{field: 'hitcount', label: 'sys_redirect.hitcount', demand: demand}"/></th>
|
||||
<th class="col-datetime"><f:render section="listHeaderSorting" arguments="{field: 'lasthiton', label: 'sys_redirect.lasthiton', demand: demand}"/></th>
|
||||
</f:if>
|
||||
<th class="col-control">
|
||||
<span class="visually-hidden"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_"/></span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-multi-record-selection-row-selection="true">
|
||||
<f:for each="{redirects}" key="domainName" as="redirect">
|
||||
<tr
|
||||
data-uid="{redirect.uid}"
|
||||
data-multi-record-selection-element="true"
|
||||
>
|
||||
<td class="col-checkbox">
|
||||
<span class="form-check form-check-type-toggle">
|
||||
<input class="form-check-input t3js-multi-record-selection-check" type="checkbox">
|
||||
</span>
|
||||
</td>
|
||||
<td class="col-icon">
|
||||
<f:alias map="{
|
||||
disable: '{f:translate(key: \'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:record_disabled\')}',
|
||||
onlystart: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:start\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')}',
|
||||
onlyend: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:stop\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}',
|
||||
startend: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:start\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')} - {f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:stop\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}'
|
||||
}">
|
||||
<f:if condition="{redirect.disabled}">
|
||||
<f:then><span title="{disable}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:then>
|
||||
<f:else if="{redirect.starttime} && !{redirect.endtime}"><span title="{onlystart}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="!{redirect.starttime} && {redirect.endtime}"><span title="{onlyend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="{redirect.starttime} && {redirect.endtime}"><span title="{startend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else><span><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
</f:if>
|
||||
</f:alias>
|
||||
</td>
|
||||
<td class="col-path">
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
table="sys_redirect"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_host}"
|
||||
>
|
||||
{redirect.source_host}
|
||||
</be:link.editRecord>
|
||||
</td>
|
||||
<td class="col-path">
|
||||
<f:variable name="targetUri" value="{f:uri.typolink(parameter:redirect.target)}" />
|
||||
<f:link.typolink
|
||||
parameter="{redirect.target}"
|
||||
target="_blank"
|
||||
title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:visit_destination')} {f:if(condition: targetUri, then:targetUri, else:redirect.target)}"
|
||||
>
|
||||
{f:if(condition: targetUri, then:targetUri, else:redirect.target)}
|
||||
</f:link.typolink>
|
||||
<f:variable name="pageRow" value="{rd:targetPageRecord(target:redirect.target)}" />
|
||||
<f:if condition="{pageRow}"><br>(<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:pageID"/>:
|
||||
<be:link.editRecord
|
||||
table="pages"
|
||||
uid="{pageRow.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_path}"
|
||||
><core:iconForRecord table="pages" row="{pageRow}" /> {pageRow.uid}</be:link.editRecord>)</f:if>
|
||||
</td>
|
||||
<td class="col-description">
|
||||
{redirect.description}
|
||||
</td>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<td>
|
||||
<f:if condition="!{redirect.disable_hitcount}">
|
||||
{redirect.hitcount}
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-datetime">
|
||||
<f:if condition="{redirect.lasthiton}">
|
||||
<f:then><f:format.date format="Y-m-d H:i">@{redirect.lasthiton}</f:format.date></f:then>
|
||||
<f:else><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_last_never"/></f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
</f:if>
|
||||
<td class="col-control">
|
||||
<div class="btn-group" role="group">
|
||||
<typo3-qrcode-modal-button class="btn btn-default" title="{f:translate(id: 'show', domain: 'redirects.modules.qrcodes')}" modal-title="{f:translate(id: 'sys_redirect.redirect_type.qr_code', domain: 'redirects.db')}" content="https://{redirect.source_host}{redirect.source_path}" show-download>
|
||||
<typo3-backend-icon identifier="actions-qrcode" size="small"></typo3-backend-icon>
|
||||
</typo3-qrcode-modal-button>
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
class="btn btn-default"
|
||||
table="sys_redirect"
|
||||
module="qrcodes"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</be:link.editRecord>
|
||||
<f:if condition="{redirect.disabled} == 1">
|
||||
<f:then>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=0', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:unHide')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-unhide" />
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:hide')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-hide" />
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'cmd[sys_redirect][{redirect.uid}][delete]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:deleteWarning')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}">
|
||||
<core:icon identifier="actions-delete" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group dropdown" role="group">
|
||||
<f:if condition="{redirect.is_regexp} || ({redirect.source_host} === '*')">
|
||||
<f:else>
|
||||
<f:variable name="showPreviewButton" value="1" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{showHitCounter} && !{redirect.disable_hitcount}">
|
||||
<f:variable name="showHitCountResetButton" value="{f:if(condition: '{redirect.hitcount} != 0', then: '1', else: '0')}" />
|
||||
</f:if>
|
||||
<f:if condition="{showPreviewButton} || {showHitCountResetButton}">
|
||||
<f:then>
|
||||
<ul id="actions-{redirect.uid}" class="dropdown-menu">
|
||||
<f:if condition="{showHitCountResetButton}">
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][hitcount]=0', arguments:'{redirect: returnUrl}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_reset.confirm.title')}"
|
||||
data-content="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:hit_reset.confirm.content')}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon">
|
||||
<core:icon identifier="actions-edit-restore" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate id="xlf:hit_reset" domain="redirects.locallang_module_redirect" />
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<f:render partial="Pagination" arguments="{route: 'qrcodes', demand: demand, pagination: pagination, gotToPageUrl: gotToPageUrl}" />
|
||||
</f:section>
|
||||
|
||||
<f:section name="listHeaderSorting">
|
||||
<div class="dropdown">
|
||||
<button class="dropdown-toggle dropdown-toggle-link" type="button" popovertarget="qrcodes-selection-sorting-{field}">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:{label}"/>
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:then>
|
||||
<div class="text-primary">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<f:then>
|
||||
<core:icon identifier="actions-sort-amount-up" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<core:icon identifier="actions-sort-amount-down" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div>
|
||||
<core:icon identifier="empty-empty" />
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</button>
|
||||
<ul id="qrcodes-selection-sorting-{field}" class="dropdown-menu" popover>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'qrcodes', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.defaultOrderDirection}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.asc')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'qrcodes', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.reverseOrderDirection}')}"
|
||||
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === desc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.sorting.desc')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="filter">
|
||||
<form action="{f:be.uri(route:'qrcodes')}" method="post" enctype="multipart/form-data" name="demand">
|
||||
<input type="hidden" name="orderField" value="{demand.orderField}">
|
||||
<input type="hidden" name="orderDirection" value="{demand.orderDirection}">
|
||||
<input type="hidden" name="redirectType" value="{f:constant(name: '\TYPO3\CMS\Redirects\Repository\Demand::QRCODE_REDIRECT_TYPE')}">
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="demand-source-host" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.source_host"/></label>
|
||||
<select id="demand-source-host" class="form-select" name="demand[source_host]" data-on-change="submit">
|
||||
<option value=""><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.source_host.showAll"/></option>
|
||||
<f:for each="{hosts}" as="host">
|
||||
<f:if condition="{host.name} !== '*'">
|
||||
<option value="{host.name}" {f:if(condition: '{host.name} == {demand.firstSourceHost}', then: 'selected')}>{host.name}</option>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target" class="form-label"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.target"/></label>
|
||||
<input type="text" id="demand-target" class="form-control" name="demand[target]" value="{demand.target}"/>
|
||||
</div>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<div class="form-group align-self-end">
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input type="checkbox" class="form-check-input" name="demand[max_hits]" id="demand-never-hit" value="1" data-on-change="submit" {f:if(condition: demand.maxHits, then: 'checked="checked"')}>
|
||||
<label class="form-check-label" for="demand-never-hit">
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.neverHit"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="form-group align-self-end">
|
||||
<input type="submit" value="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.sendButton')}" class="btn btn-default" />
|
||||
<a href="{f:be.uri(route:'qrcodes')}" class="btn btn-link"><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:filter.resetButton"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:if condition="{count} > 0">
|
||||
<p><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_reports.xlf:status.conflictingRedirects.message" /></p>
|
||||
<ul>
|
||||
<f:for each="{reportedConflicts}" as="conflict">
|
||||
<li>
|
||||
<span title="{conflict.uri}">{conflict.uri -> f:format.crop(maxCharacters: '100')}</span><br>
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.source_host" />: {conflict.redirect.source_host}<br>
|
||||
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_db.xlf:sys_redirect.source_path" />: <span title="{conflict.redirect.source_path}">{conflict.redirect.source_path -> f:format.crop(maxCharacters: '100')}</span>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,451 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:rd="http://typo3.org/ns/TYPO3/CMS/Redirects/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Module" />
|
||||
|
||||
<f:section name="Content">
|
||||
|
||||
<f:asset.module identifier="@typo3/backend/modal.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-edit-action.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/multi-record-selection-delete-action.js"/>
|
||||
<f:asset.module identifier="@typo3/redirects/redirects-module.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/element/icon-element.js"/>
|
||||
<f:asset.module identifier="@typo3/backend/copy-to-clipboard.js"/>
|
||||
|
||||
<h1><f:translate id="heading_text" domain="redirects.modules.short_urls"/></h1>
|
||||
<f:if condition="{redirects -> f:count()}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:render section="table" arguments="{_all}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{demand.constraints}">
|
||||
<f:then>
|
||||
<f:render section="filter" arguments="{_all}" />
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::NOTICE')}" title="{f:translate(id: 'not_found.title', domain: 'redirects.modules.short_urls')}">
|
||||
<p><f:translate id="not_found_with_filter.message" domain="redirects.modules.short_urls"/></p>
|
||||
<a class="btn btn-default" href="{f:be.uri(route:'short_urls')}">
|
||||
<f:translate id="redirect_no_filter" domain="redirects.module_redirect" />
|
||||
</a>
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect" module="short_urls" defaultValues="{sys_redirect: {redirect_type: 'short_url'}}" >
|
||||
<f:translate id="create" domain="redirects.modules.short_urls"/>
|
||||
</be:link.newRecord>
|
||||
</f:be.infobox>
|
||||
|
||||
<f:variable name="gotToPageUrl"><f:be.uri route="short_urls" parameters="{demand: demand.parameters, page: 987654322}" /></f:variable>
|
||||
<form data-on-submit="processNavigate">
|
||||
<input type="hidden" value="1" name="paginator-target-page" data-number-of-pages="1" data-url="{gotToPageUrl}"/>
|
||||
</form>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" title="{f:translate(id: 'not_found.title', domain: 'redirects.modules.short_urls')}">
|
||||
<p>
|
||||
<f:translate id="not_found.message" domain="redirects.modules.short_urls"/>
|
||||
</p>
|
||||
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect" module="short_urls" defaultValues="{'sys_redirect': {'redirect_type': 'short_url'}}">
|
||||
<f:translate id="create" domain="redirects.modules.short_urls"/>
|
||||
</be:link.newRecord>
|
||||
</f:be.infobox>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
|
||||
<f:section name="table">
|
||||
<f:comment>Partial is used from EXT:backend/Resources/Private/Partials/MultiRecordSelection/Actions.html</f:comment>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-checkbox" colspan="2">
|
||||
<div class="dropdown">
|
||||
<button type="button" class="dropdown-toggle dropdown-toggle-link t3js-multi-record-selection-check-actions-toggle" aria-label="{f:translate(id: 'labels.openSelectionOptions', domain: 'core.core')}" popovertarget="short-urls-selection">
|
||||
<core:icon identifier="actions-selection" size="small" />
|
||||
</button>
|
||||
<ul id="short-urls-selection" class="dropdown-menu t3js-multi-record-selection-check-actions" popover>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-all" title="{f:translate(id: 'labels.checkAll', domain: 'core.core')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-all" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate id="labels.checkAll" domain="core.core"/>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" disabled="disabled" data-multi-record-selection-check-action="check-none" title="{f:translate(id: 'labels.uncheckAll', domain: 'core.core')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-none" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate id="labels.uncheckAll" domain="core.core"/>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item" data-multi-record-selection-check-action="toggle" title="{f:translate(id: 'labels.toggleSelection', domain: 'core.core')}">
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon" aria-hidden="true">
|
||||
<core:icon identifier="actions-selection-elements-invert" size="small" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
<f:translate id="labels.toggleSelection" domain="core.core"/>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</th>
|
||||
<th class="col-path">
|
||||
<f:render section="listHeaderSorting" arguments="{field: 'source_host', label: 'sys_redirect.short_url', demand: demand}"/>
|
||||
</th>
|
||||
<th class="col-path">
|
||||
<f:translate id="sys_redirect.target" domain="redirects.db"/>
|
||||
</th>
|
||||
<th class="col-description">
|
||||
<f:translate id="LGL.note" domain="core.general"/>
|
||||
</th>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<th><f:render section="listHeaderSorting" arguments="{field: 'hitcount', label: 'sys_redirect.hitcount', demand: demand}"/></th>
|
||||
<th class="col-datetime"><f:render section="listHeaderSorting" arguments="{field: 'lasthiton', label: 'sys_redirect.lasthiton', demand: demand}"/></th>
|
||||
</f:if>
|
||||
<th class="col-control">
|
||||
<span class="visually-hidden">
|
||||
<f:translate id="labels._CONTROL_" domain="core.core"/>
|
||||
</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-multi-record-selection-row-selection="true">
|
||||
<f:for each="{redirects}" key="domainName" as="redirect">
|
||||
<tr
|
||||
data-uid="{redirect.uid}"
|
||||
data-multi-record-selection-element="true"
|
||||
>
|
||||
<td class="col-checkbox">
|
||||
<span class="form-check form-check-type-toggle">
|
||||
<input class="form-check-input t3js-multi-record-selection-check" type="checkbox">
|
||||
</span>
|
||||
</td>
|
||||
<td class="col-icon">
|
||||
<f:alias map="{
|
||||
disable: '{f:translate(id: \'record_disabled\', domain: \'redirects.module_redirect\')}',
|
||||
onlystart: '{f:translate(id: \'start\', domain: \'core.common\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')}',
|
||||
onlyend: '{f:translate(id: \'stop\', domain: \'core.common\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}',
|
||||
startend: '{f:translate(id: \'start\', domain: \'core.common\')}: {f:format.date(date: redirect.starttime, format: \'Y-m-d H:i\')} - {f:translate(id: \'stop\', domain: \'core.common\')}: {f:format.date(date: redirect.endtime, format: \'Y-m-d H:i\')}'
|
||||
}">
|
||||
<f:if condition="{redirect.disabled}">
|
||||
<f:then><span title="{disable}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:then>
|
||||
<f:else if="{redirect.starttime} && !{redirect.endtime}"><span title="{onlystart}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="!{redirect.starttime} && {redirect.endtime}"><span title="{onlyend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else if="{redirect.starttime} && {redirect.endtime}"><span title="{startend}"><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
<f:else><span><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
|
||||
</f:if>
|
||||
</f:alias>
|
||||
</td>
|
||||
<td class="col-path">
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
table="sys_redirect"
|
||||
module="short_urls"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(id: 'edit', domain: 'core.mod_web_list')}: {redirect.source_host}{redirect.source_path}"
|
||||
>
|
||||
{protocol}://{redirect.source_host}{redirect.source_path}
|
||||
</be:link.editRecord>
|
||||
</td>
|
||||
<td class="col-path">
|
||||
<f:variable name="targetUri" value="{f:uri.typolink(parameter:redirect.target)}" />
|
||||
<f:link.typolink
|
||||
parameter="{redirect.target}"
|
||||
target="_blank"
|
||||
title="{f:translate(id: 'visit_destination', domain: 'redirects.module_redirect')} {f:if(condition: targetUri, then:targetUri, else:redirect.target)}"
|
||||
>
|
||||
{f:if(condition: targetUri, then:targetUri, else:redirect.target)}
|
||||
</f:link.typolink>
|
||||
<f:variable name="pageRow" value="{rd:targetPageRecord(target:redirect.target)}" />
|
||||
<f:if condition="{pageRow}"><br>(<f:translate id="pageID" domain="redirects.module_redirect"/>:
|
||||
<be:link.editRecord
|
||||
table="pages"
|
||||
uid="{pageRow.uid}"
|
||||
title="{f:translate(id: 'edit', domain: 'core.mod_web_list')}: {redirect.source_path}"
|
||||
><core:iconForRecord table="pages" row="{pageRow}" /> {pageRow.uid}</be:link.editRecord>)</f:if>
|
||||
</td>
|
||||
<td class="col-description">
|
||||
{redirect.description}
|
||||
</td>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<td>
|
||||
<f:if condition="!{redirect.disable_hitcount}">
|
||||
{redirect.hitcount}
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-datetime">
|
||||
<f:if condition="{redirect.lasthiton}">
|
||||
<f:then><f:format.date format="Y-m-d H:i">@{redirect.lasthiton}</f:format.date></f:then>
|
||||
<f:else><f:translate id="hit_last_never" domain="redirects.module_redirect"/></f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
</f:if>
|
||||
<td class="col-control">
|
||||
<div class="btn-group" role="group">
|
||||
<typo3-copy-to-clipboard
|
||||
text="{protocol}://{redirect.source_host}{redirect.source_path}"
|
||||
class="btn btn-default"
|
||||
title="{f:translate(id: 'short_url.copy', domain: 'redirects.module_redirect')}"
|
||||
>
|
||||
<core:icon identifier="actions-clipboard" />
|
||||
</typo3-copy-to-clipboard>
|
||||
<be:link.editRecord
|
||||
returnUrl="{returnUrl}"
|
||||
class="btn btn-default"
|
||||
table="sys_redirect"
|
||||
module="short_urls"
|
||||
uid="{redirect.uid}"
|
||||
title="{f:translate(id: 'edit', domain: 'core.mod_web_list')}"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</be:link.editRecord>
|
||||
<f:if condition="{redirect.disabled} == 1">
|
||||
<f:then>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=0', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(id: 'unHide', domain: 'core.mod_web_list')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-unhide" />
|
||||
</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<a
|
||||
class="btn btn-default"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][disabled]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(id: 'hide', domain: 'core.mod_web_list')}"
|
||||
>
|
||||
<core:icon identifier="actions-edit-hide" />
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<a class="btn btn-default t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'cmd[sys_redirect][{redirect.uid}][delete]=1', arguments:'{redirect: returnUrl}')}"
|
||||
title="{f:translate(id: 'delete', domain: 'core.mod_web_list')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(id: 'label.confirm.delete_record.title', domain: 'backend.alt_doc')}"
|
||||
data-content="{f:translate(id: 'deleteWarning', domain: 'backend.alt_doc')}"
|
||||
data-button-close-text="{f:translate(id: 'buttons.confirm.delete_record.no', domain: 'backend.alt_doc')}">
|
||||
<core:icon identifier="actions-delete" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group dropdown" role="group">
|
||||
<f:if condition="{redirect.is_regexp} || ({redirect.source_host} === '*')">
|
||||
<f:else>
|
||||
<f:variable name="showPreviewButton" value="1" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{showHitCounter} && !{redirect.disable_hitcount}">
|
||||
<f:variable name="showHitCountResetButton" value="{f:if(condition: '{redirect.hitcount} != 0', then: '1', else: '0')}" />
|
||||
</f:if>
|
||||
<f:if condition="{showPreviewButton} || {showHitCountResetButton}">
|
||||
<f:then>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default dropdown-toggle dropdown-toggle-no-chevron"
|
||||
popovertarget="actions-{redirect.uid}"
|
||||
>
|
||||
<core:icon identifier="actions-menu-alternative" />
|
||||
</button>
|
||||
<ul id="actions-{redirect.uid}" class="dropdown-menu" popover>
|
||||
<f:if condition="{showPreviewButton}">
|
||||
<li>
|
||||
<f:link.external
|
||||
class="dropdown-item"
|
||||
uri="{protocol}://{redirect.source_host}{redirect.source_path}"
|
||||
target="_blank"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-{cacheAction.severity}">
|
||||
<core:icon identifier="actions-view-page" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate id="view_redirect" domain="redirects.module_redirect" />
|
||||
</span>
|
||||
</span>
|
||||
</f:link.external>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{showHitCountResetButton}">
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item t3js-modal-trigger"
|
||||
href="{be:moduleLink(route:'tce_db', query:'data[sys_redirect][{redirect.uid}][hitcount]=0', arguments:'{redirect: returnUrl}')}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(id: 'hit_reset.confirm.title', domain: 'redirects.module_redirect')}"
|
||||
data-content="{f:translate(id: 'hit_reset.confirm.content', domain: 'redirects.module_redirect')}"
|
||||
data-button-close-text="{f:translate(id: 'buttons.confirm.delete_record.no', domain: 'backend.alt_doc')}">
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon">
|
||||
<core:icon identifier="actions-edit-restore" />
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-text">
|
||||
<f:translate id="hit_reset" domain="redirects.module_redirect" />
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:then>
|
||||
<f:else if="{canEditRedirects}">
|
||||
<span class="btn btn-default disabled"><core:icon identifier="empty-empty" /></span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<f:render partial="MultiRecordSelection/Actions" arguments="{actions: actions}"/>
|
||||
<f:render partial="Pagination" arguments="{route: 'short_urls', demand: demand, pagination: pagination, gotToPageUrl: gotToPageUrl}" />
|
||||
</f:section>
|
||||
|
||||
<f:section name="listHeaderSorting">
|
||||
<div class="dropdown">
|
||||
<button class="dropdown-toggle dropdown-toggle-link" type="button" popovertarget="short-urls-selection-sorting-{field}">
|
||||
<f:translate id="{label}" domain="redirects.db" />
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:then>
|
||||
<div class="text-primary">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<f:then>
|
||||
<core:icon identifier="actions-sort-amount-up" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<core:icon identifier="actions-sort-amount-down" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div>
|
||||
<core:icon identifier="empty-empty" />
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</button>
|
||||
<ul id="short-urls-selection-sorting-{field}" class="dropdown-menu" popover>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'short_urls', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.defaultOrderDirection}')}"
|
||||
title="{f:translate(id: 'labels.sorting.asc', domain: 'core.core')}"
|
||||
aria-label="{f:translate(id: 'labels.sorting.asc', domain: 'core.core')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === asc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(id: 'labels.sorting.asc', domain: 'core.core')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class="dropdown-item"
|
||||
href="{f:be.uri(route:'short_urls', parameters: '{demand: demand.parameters, orderField: field, orderDirection: demand.reverseOrderDirection}')}"
|
||||
title="{f:translate(id: 'labels.sorting.desc', domain: 'core.core')}"
|
||||
aria-label="{f:translate(id: 'labels.sorting.desc', domain: 'core.core')}"
|
||||
>
|
||||
<span class="dropdown-item-columns">
|
||||
<span class="dropdown-item-column dropdown-item-column-icon text-primary">
|
||||
<f:if condition="{demand.orderField} === {field}">
|
||||
<f:if condition="{demand.orderDirection} === desc">
|
||||
<core:icon identifier="actions-dot" />
|
||||
</f:if>
|
||||
</f:if>
|
||||
</span>
|
||||
<span class="dropdown-item-column dropdown-item-column-title">
|
||||
{f:translate(id: 'labels.sorting.desc', domain: 'core.core')}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="filter">
|
||||
<form action="{f:be.uri(route:'short_urls')}" method="post" enctype="multipart/form-data" name="demand">
|
||||
<input type="hidden" name="orderField" value="{demand.orderField}">
|
||||
<input type="hidden" name="orderDirection" value="{demand.orderDirection}">
|
||||
<input type="hidden" name="redirectType" value="{f:constant(name: '\TYPO3\CMS\Redirects\Repository\Demand::SHORT_URL_REDIRECT_TYPE')}">
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label for="demand-source-host" class="form-label">
|
||||
<f:translate id="sys_redirect.source_host" domain="redirects.db" />
|
||||
</label>
|
||||
<select id="demand-source-host" class="form-select" name="demand[source_host]" data-on-change="submit">
|
||||
<option value="">
|
||||
<f:translate id="filter.source_host.showAll" domain="redirects.module_redirect" />
|
||||
</option>
|
||||
<f:for each="{hosts}" as="host">
|
||||
<f:if condition="{host.name} !== '*'">
|
||||
<option value="{host.name}" {f:if(condition: '{host.name} == {demand.firstSourceHost}', then: 'selected')}>{host.name}</option>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-source-path" class="form-label">
|
||||
<f:translate id="sys_redirect.source_path" domain="redirects.db" />
|
||||
</label>
|
||||
<input type="text" id="demand-source-path" class="form-control" name="demand[source_path]" value="{demand.sourcePath}"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="demand-target" class="form-label">
|
||||
<f:translate id="sys_redirect.target" domain="redirects.db" />
|
||||
</label>
|
||||
<input type="text" id="demand-target" class="form-control" name="demand[target]" value="{demand.target}"/>
|
||||
</div>
|
||||
<f:if condition="{showHitCounter}">
|
||||
<div class="form-group align-self-end">
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input type="checkbox" class="form-check-input" name="demand[max_hits]" id="demand-never-hit" value="1" data-on-change="submit" {f:if(condition: demand.maxHits, then: 'checked="checked"')}>
|
||||
<label class="form-check-label" for="demand-never-hit">
|
||||
<f:translate id="filter.neverHit" domain="redirects.module_redirect" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="form-group align-self-end">
|
||||
<input type="submit" value="{f:translate(id: 'filter.sendButton', domain: 'redirects.module_redirect')}" class="btn btn-default" />
|
||||
<a href="{f:be.uri(route:'short_urls')}" class="btn btn-link">
|
||||
<f:translate id="filter.resetButton" domain="redirects.module_redirect" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</f:section>
|
||||
</html>
|
||||
Reference in New Issue
Block a user