Files
nextcloud-docs/go.php/index.html
skjnldsv 1b94fcc958 fix: apply fixes from reviews
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2026-04-02 08:55:53 +02:00

174 lines
9.5 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documentation Redirect</title>
</head>
<body>
<h1>Redirecting to documentation...</h1>
<p>If you are not redirected automatically, enable JavaScript in your browser.</p>
<script>
// Mapping from the original PHP file
const mapping = {
'admin': '/admin_manual',
'admin-2fa': '/admin_manual/configuration_user/two_factor-auth.html',
'admin-antivirus-configuration': '/admin_manual/configuration_server/antivirus_configuration.html',
'admin-background-jobs': '/admin_manual/configuration_server/background_jobs_configuration.html',
'admin-backup': '/admin_manual/maintenance/backup.html',
'admin-big-file-upload': '/admin_manual/configuration_files/big_file_upload_configuration.html',
'admin-bigint-conversion': '/admin_manual/configuration_database/bigint_identifiers.html',
'admin-cache': '/admin_manual/configuration_server/caching_configuration.html',
'admin-code-integrity': '/admin_manual/issues/code_signing.html',
'admin-config': '/admin_manual/configuration_server/config_sample_php_parameters.html',
'admin-db-configuration': '/admin_manual/configuration_database/linux_database_configuration.html',
'admin-db-conversion': '/admin_manual/configuration_database/db_conversion.html',
'admin-db-transaction': '/admin_manual/configuration_database/linux_database_configuration.html#database-read-committed-transaction-isolation-level',
'admin-delegation': '/admin_manual/configuration_server/admin_delegation_configuration.html',
'admin-deploy-options': '/admin_manual/exapps_management/AdvancedDeployOptions.html',
'admin-email': '/admin_manual/configuration_server/email_configuration.html',
'admin-encryption': '/admin_manual/configuration_files/encryption_configuration.html',
'admin-external-storage': '/admin_manual/configuration_files/external_storage_configuration_gui.html',
'admin-files-access-control': '/admin_manual/file_workflows/access_control.html',
'admin-files-automated-tagging': '/admin_manual/file_workflows/automated_tagging.html',
'admin-files-retention': '/admin_manual/file_workflows/retention.html',
'admin-groupware-oauth-microsoft': '/admin_manual/groupware/mail.html#xoauth2-authentication-with-microsoft-azure-ad',
'admin-install': '/admin_manual/installation/index.html',
'admin-ldap': '/admin_manual/configuration_user/user_auth_ldap.html',
'admin-logging': '/admin_manual/configuration_server/logging_configuration.html',
'admin-long-running-migration-steps': '/admin_manual/maintenance/upgrade.html#long-running-migration-steps',
'admin-mysql-utf8mb4': '/admin_manual/configuration_database/mysql_4byte_support.html',
'admin-nginx': '/admin_manual/installation/nginx.html',
'admin-oauth2': '/admin_manual/configuration_server/oauth2.html',
'admin-performance': '/admin_manual/installation/server_tuning.html',
'admin-php-fpm': '/admin_manual/installation/source_installation.html#php-fpm-tips-label',
'admin-php-modules': '/admin_manual/installation/php_configuration.html#required-php-modules',
'admin-php-opcache': '/admin_manual/installation/server_tuning.html#enable-php-opcache',
'admin-provisioning-api': '/admin_manual/configuration_user/user_provisioning_api.html',
'admin-reverse-proxy': '/admin_manual/configuration_server/reverse_proxy_configuration.html',
'admin-security': '/admin_manual/installation/harden_server.html',
'admin-setup-well-known-URL': '/admin_manual/issues/general_troubleshooting.html#service-discovery',
'admin-sharing': '/admin_manual/configuration_files/file_sharing_configuration.html',
'admin-sharing-federated': '/admin_manual/configuration_files/federated_cloud_sharing_configuration.html',
'admin-source_install': '/admin_manual/installation/source_installation.html',
'admin-sse-legacy-format': '/admin_manual/configuration_files/encryption_migration.html',
'admin-sso': '/admin_manual/configuration_server/sso_configuration.html',
'admin-system-requirements': '/admin_manual/installation/system_requirements.html',
'admin-theming': '/admin_manual/configuration_server/theming.html',
'admin-theming-icons': '/admin_manual/configuration_server/theming.html#theming-of-icons',
'admin-transactional-locking': '/admin_manual/configuration_files/files_locking_transactional.html',
'admin-trusted-domains': '/admin_manual/installation/installation_wizard.html#trusted-domains',
'admin-update': '/admin_manual/maintenance/update.html',
'admin-warnings': '/admin_manual/configuration_server/security_setup_warnings.html',
'admin-windows-compatible-filenames': '/admin_manual/configuration_files/windows_compatible_filenames.html',
'admin-workflowengine': '/admin_manual/file_workflows/index.html',
'admin-android-deep-link-handling': '/admin_manual/configuration_server/android_deep_link_handling.html',
'developer-manual': '/developer_manual',
'developer-backports': '/developer_manual/getting_started/development_process.html#bugfixes',
'developer-code-integrity': '/developer_manual/app_publishing_maintenance/code_signing.html',
'developer-css': '/developer_manual/html_css_design/css.html',
'developer-theming': '/developer_manual/basics/front-end/theming.html',
// Please always include the en language code in the URL
'user': '/user_manual',
'user-2fa': '/user_manual/en/user_2fa.html',
'user-encryption': '/user_manual/en/files/encrypting_files.html',
'user-files': '/user_manual/en/files/index.html',
'user-manual': '/user_manual/en',
'user-sharing-federated': '/user_manual/en/files/federated_cloud_sharing.html',
'user-sync-calendars': '/user_manual/en/groupware/calendar.html',
'user-sync-contacts': '/user_manual/en/groupware/contacts.html',
'user-trashbin': '/user_manual/en/files/deleted_file_management.html',
'user-versions': '/user_manual/en/files/version_control.html',
'user-webdav': '/user_manual/en/files/access_webdav.html'
}
function getQueryParam(param) {
const urlParams = new URLSearchParams(window.location.search)
return urlParams.get(param)
}
function getPreferredLanguage() {
const languages = navigator.languages || [navigator.language]
const supportedLanguages = [
'af', 'br', 'cs', 'de', 'el_GR', 'es', 'fi_FI', 'ga', 'hr', 'hu_HU', 'it',
'ko', 'nb_NO', 'nn', 'pt_BR', 'ro', 'si', 'sr', 'ta', 'tr', 'uz', 'zh_CN',
'zh_TW', 'ar', 'ca', 'da', 'el', 'eo', 'eu', 'fr', 'gl', 'hu', 'id', 'ja_JP',
'mn', 'nl', 'pl', 'pt_PT', 'ru', 'sk_SK', 'sq', 'sv', 'th', 'uk', 'vi', 'zh_HK',
]
// Build a lowercase lookup map to canonical form for case-insensitive matching
const supportedLower = supportedLanguages.map(l => l.toLowerCase())
for (const lang of languages) {
const fullLang = lang.replace('-', '_'); // Normalize e.g. en-US → en_US
const lowerFullLang = fullLang.toLowerCase()
// Try full language code (e.g., en_US) — return canonical directory name
const fullIdx = supportedLower.indexOf(lowerFullLang)
if (fullIdx !== -1) {
return supportedLanguages[fullIdx]
}
// Try base language code (e.g., en) — return canonical directory name
const baseLang = lowerFullLang.split('_')[0]
const baseIdx = supportedLower.indexOf(baseLang)
if (baseIdx !== -1) {
return supportedLanguages[baseIdx]
}
}
return 'en'; // Default to English
}
function performRedirect() {
const from = getQueryParam('to')
const currentLocation = window.location
const basePath = currentLocation.pathname.replace(/\/go\.php(\/.*)?$/, '')
let subPath
if (mapping[from]) {
subPath = mapping[from]
} else {
// Prefix-based fallback to preserve legacy PHP redirect behavior
if (from && from.startsWith('admin-')) {
subPath = '/admin_manual'
} else if (from && from.startsWith('developer-')) {
subPath = '/developer_manual'
} else {
subPath = '/user_manual'
}
}
// Handle user manual language detection
if (subPath.startsWith('/user_manual')) {
const preferredLang = getPreferredLanguage()
const subPathParts = subPath.split('/')
if (subPathParts.length >= 2 && subPathParts[1] === 'user_manual') {
// Replace the language part with the preferred language
subPathParts[2] = preferredLang
}
// Join the parts back together
if (subPathParts.length > 2) {
subPath = subPathParts.join('/')
}
}
const redirectUrl = `${currentLocation.protocol}//${currentLocation.host}${basePath}${subPath}`
// Perform the redirect
window.location.href = redirectUrl
}
// Perform redirect when page loads
window.onload = performRedirect
</script>
</body>
</html>