From 12a207631b7c504edd1932bceda8283f9be7b98f Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Thu, 25 Sep 2025 14:43:09 +0200 Subject: [PATCH 001/118] First pass --- .../Http/Resources/Admin/MeetingResource.php | 25 +++++++++++++++--- .../Http/Resources/Query/MeetingResource.php | 26 ++++++++++++++++--- src/app/Repositories/MeetingRepository.php | 19 ++++++++------ ...9_25_123352_set_langenum_to_app_locale.php | 22 ++++++++++++++++ src/resources/js/components/LoginForm.svelte | 4 +++ 5 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 src/database/migrations/2025_09_25_123352_set_langenum_to_app_locale.php diff --git a/src/app/Http/Resources/Admin/MeetingResource.php b/src/app/Http/Resources/Admin/MeetingResource.php index 070289e3c..b36bb23b1 100644 --- a/src/app/Http/Resources/Admin/MeetingResource.php +++ b/src/app/Http/Resources/Admin/MeetingResource.php @@ -30,7 +30,16 @@ public static function resetStaticVariables() self::$hiddenFormatIds = null; self::$temporarilyClosedFormatId = null; } - + private function languagePriority($langEnum, $requestedLangEnum) + { + if ($langEnum === $requestedLangEnum) { + return 3; + } + if ($langEnum === config('app.locale')) { + return 2; + } + return 1; + } public function toArray($request) { if (!self::$isRequestInitialized) { @@ -47,9 +56,17 @@ public function toArray($request) self::$hiddenFormatIds = collect([self::$virtualFormatId, self::$hybridFormatId, self::$temporarilyClosedFormatId]); self::$isRequestInitialized = true; } - - $meetingData = $this->data - ->mapWithKeys(fn ($data, $_) => [$data->key => $data->data_string]) + $requestedLangEnum = $request->cookie('lang', config('app.locale')); + $meetingData = collect($this->data->reduce(function ($carry, $item) use ($requestedLangEnum) { + if (!isset($carry[0][$item->key])) { + $carry[0][$item->key] = $item->data_string; + $carry[1][$item->key] = $item->lang_enum; + } elseif ($this->languagePriority($item->lang_enum, $requestedLangEnum) > $this->languagePriority($carry[0][$item->key], $requestedLangEnum)) { + $carry[0][$item->key] = $item->data_string; + $carry[1][$item->key] = $item->lang_enum; + } + return $carry; + }, [[], []])[0]) ->toBase() ->merge( $this->longdata diff --git a/src/app/Http/Resources/Query/MeetingResource.php b/src/app/Http/Resources/Query/MeetingResource.php index b7b3e307e..8748ed755 100644 --- a/src/app/Http/Resources/Query/MeetingResource.php +++ b/src/app/Http/Resources/Query/MeetingResource.php @@ -37,6 +37,16 @@ public static function resetStaticVariables() self::$defaultDurationTime = null; self::$isAggregatorModeEnabled = false; } + private function languagePriority($langEnum, $requestedLangEnum) + { + if ($langEnum === $requestedLangEnum) { + return 3; + } + if ($langEnum === config('app.locale')) { + return 2; + } + return 1; + } /** * Transform the resource into an array. @@ -75,13 +85,21 @@ public function toArray($request) 'format_shared_id_list' => $this->getFormatSharedIdList(), 'root_server_id' => $this->getRootServerId(), ]; - + $requestedLangEnum = $request->cookie('lang', config('app.locale')); // data table keys - $meetingData = $this->data->mapWithKeys(fn ($data, $_) => [$data->key => $data->data_string])->toBase() + $meetingData = collect($this->data->reduce(function ($carry, $item) use ($requestedLangEnum) { + if (!isset($carry[0][$item->key])) { + $carry[0][$item->key] = $item->data_string; + $carry[1][$item->key] = $item->lang_enum; + } elseif ($this->languagePriority($item->lang_enum, $requestedLangEnum) > $this->languagePriority($carry[0][$item->key], $requestedLangEnum)) { + $carry[0][$item->key] = $item->data_string; + $carry[1][$item->key] = $item->lang_enum; + } + return $carry; + }, [[], []])[0])->toBase() ->merge( - $this->longdata->mapWithKeys(fn ($data, $_) => [$data->key => $data->data_blob])->toBase() + $this->longdata->mapWithKeys(fn ($data, $_) => [$data->key.'|'.$data->lang_enum => $data->data_blob])->toBase() ); - foreach (self::$meetingDataTemplates as $meetingDataTemplate) { if (self::$hasDataFieldKeys && !self::$dataFieldKeys->has($meetingDataTemplate->key)) { continue; diff --git a/src/app/Repositories/MeetingRepository.php b/src/app/Repositories/MeetingRepository.php index ebd58c4f7..a65fa98a4 100644 --- a/src/app/Repositories/MeetingRepository.php +++ b/src/app/Repositories/MeetingRepository.php @@ -634,7 +634,7 @@ public function create(array $values): Meeting 'meetingid_bigint' => $meeting->id_bigint, 'key' => $t->key, 'field_prompt' => $t->field_prompt, - 'lang_enum' => $t->lang_enum, + 'lang_enum' => $this->getRequestedLanguage(), 'data_blob' => $fieldValue, 'visibility' => $t->visibility, ]); @@ -643,7 +643,7 @@ public function create(array $values): Meeting 'meetingid_bigint' => $meeting->id_bigint, 'key' => $t->key, 'field_prompt' => $t->field_prompt, - 'lang_enum' => $t->lang_enum, + 'lang_enum' => $this->getRequestedLanguage(), 'data_string' => $fieldValue, 'visibility' => $t->visibility, ]); @@ -655,7 +655,10 @@ public function create(array $values): Meeting return $meeting; }); } - + private function getRequestedLanguage(): string + { + return request()->cookie('lang', config('app.locale')); + } public function update(int $id, array $values): bool { $values = collect($values); @@ -668,7 +671,7 @@ public function update(int $id, array $values): bool $meeting->loadMissing(['data', 'longdata']); if (!is_null($meeting)) { Meeting::query()->where('id_bigint', $id)->update($mainValues); - MeetingData::query()->where('meetingid_bigint', $id)->delete(); + MeetingData::query()->where('meetingid_bigint', $id)->where('lang_enum', $this->getRequestedLanguage())->delete(); MeetingLongData::query()->where('meetingid_bigint', $id)->delete(); foreach ($dataValues as $fieldName => $fieldValue) { $t = $dataTemplates->get($fieldName); @@ -677,7 +680,7 @@ public function update(int $id, array $values): bool 'meetingid_bigint' => $meeting->id_bigint, 'key' => $t->key, 'field_prompt' => $t->field_prompt, - 'lang_enum' => $t->lang_enum, + 'lang_enum' => $this->getRequestedLanguage(), 'data_blob' => $fieldValue, 'visibility' => $t->visibility, ]); @@ -686,7 +689,7 @@ public function update(int $id, array $values): bool 'meetingid_bigint' => $meeting->id_bigint, 'key' => $t->key, 'field_prompt' => $t->field_prompt, - 'lang_enum' => $t->lang_enum, + 'lang_enum' => $this->getRequestedLanguage(), 'data_string' => $fieldValue, 'visibility' => $t->visibility, ]); @@ -858,10 +861,10 @@ public function import(int $rootServerId, Collection $externalObjects): void if (is_null($db)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); - $this->create($values); + $this->create($values,'en'); } else if (!$external->isEqual($db, $serviceBodyIdToSourceIdMap, $formatSharedIdToSourceIdMap)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); - $this->update($db->id_bigint, $values); + $this->update($db->id_bigint, $values, 'en'); } } } diff --git a/src/database/migrations/2025_09_25_123352_set_langenum_to_app_locale.php b/src/database/migrations/2025_09_25_123352_set_langenum_to_app_locale.php new file mode 100644 index 000000000..324488a47 --- /dev/null +++ b/src/database/migrations/2025_09_25_123352_set_langenum_to_app_locale.php @@ -0,0 +1,22 @@ +update(['lang_enum' => config('app.locale')]); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + } +}; diff --git a/src/resources/js/components/LoginForm.svelte b/src/resources/js/components/LoginForm.svelte index 45f283e38..ce333c723 100644 --- a/src/resources/js/components/LoginForm.svelte +++ b/src/resources/js/components/LoginForm.svelte @@ -30,6 +30,10 @@ onSubmit: async (values) => { spinner.show(); await apiCredentials.login(values.username, values.password); + if (globalSettings.isLanguageSelectorEnabled) { + const langCookie = `lang=${selectedLanguage}; expires=Fri, 31 Dec 2037 23:59:59 GMT" Path=/;`!; + document.cookie = langCookie; + } }, onSuccess: () => { spinner.hide(); From 677f82ce79bbf3a0efab82a93e97c6150384a012 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:49:51 +0200 Subject: [PATCH 002/118] Only Translate if specifically asked to --- src/app/Repositories/MeetingRepository.php | 2 +- src/resources/js/components/LoginForm.svelte | 12 ++++++++++-- src/resources/js/lang/da.ts | 1 + src/resources/js/lang/de.ts | 1 + src/resources/js/lang/en.ts | 1 + src/resources/js/lang/es.ts | 1 + src/resources/js/lang/fa.ts | 1 + src/resources/js/lang/fr.ts | 1 + src/resources/js/lang/it.ts | 1 + src/resources/js/lang/pl.ts | 1 + src/resources/js/lang/pt.ts | 1 + src/resources/js/lang/ru.ts | 1 + src/resources/js/lang/sv.ts | 1 + 13 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/app/Repositories/MeetingRepository.php b/src/app/Repositories/MeetingRepository.php index a65fa98a4..12f625d92 100644 --- a/src/app/Repositories/MeetingRepository.php +++ b/src/app/Repositories/MeetingRepository.php @@ -861,7 +861,7 @@ public function import(int $rootServerId, Collection $externalObjects): void if (is_null($db)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); - $this->create($values,'en'); + $this->create($values, 'en'); } else if (!$external->isEqual($db, $serviceBodyIdToSourceIdMap, $formatSharedIdToSourceIdMap)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); $this->update($db->id_bigint, $values, 'en'); diff --git a/src/resources/js/components/LoginForm.svelte b/src/resources/js/components/LoginForm.svelte index ce333c723..d789b9ac0 100644 --- a/src/resources/js/components/LoginForm.svelte +++ b/src/resources/js/components/LoginForm.svelte @@ -21,6 +21,7 @@ const languageOptions = Object.entries(globalSettings.languageMapping).map((lang) => ({ value: lang[0], name: lang[1] })); let selectedLanguage = $state(translations.getLanguage()); let errorMessage: string | undefined = $state(); + let acknowledgeTranslation = $state(false); const { form, errors } = createForm({ initialValues: { @@ -30,8 +31,8 @@ onSubmit: async (values) => { spinner.show(); await apiCredentials.login(values.username, values.password); - if (globalSettings.isLanguageSelectorEnabled) { - const langCookie = `lang=${selectedLanguage}; expires=Fri, 31 Dec 2037 23:59:59 GMT" Path=/;`!; + if (globalSettings.isLanguageSelectorEnabled && acknowledgeTranslation) { + const langCookie = `lang=${selectedLanguage}; Path=/;`!; document.cookie = langCookie; } }, @@ -101,6 +102,13 @@ {$translations.acknowledgeTranslation} + + + {/if} {#if errorMessage}

{errorMessage}

diff --git a/src/resources/js/lang/da.ts b/src/resources/js/lang/da.ts index ed1619932..a74771ec1 100644 --- a/src/resources/js/lang/da.ts +++ b/src/resources/js/lang/da.ts @@ -60,6 +60,7 @@ export const daTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/de.ts b/src/resources/js/lang/de.ts index 8dd73b553..4203ea0e3 100644 --- a/src/resources/js/lang/de.ts +++ b/src/resources/js/lang/de.ts @@ -5,6 +5,7 @@ export const deTranslations = { accountSettingsTitle: 'Account Einstellungen', accountTitle: 'Account', accountTypeTitle: 'AccountTyp', + acknowledgeTranslation: 'Meeting-Daten sollen als spezifisch für die ausgewählte Sprache interpretiert.', addFormat: 'Format hinzufügen', addMeeting: 'Meeting hinzufügen', addServiceBody: 'Service-Body hinzufügen', diff --git a/src/resources/js/lang/en.ts b/src/resources/js/lang/en.ts index 8780ad9a6..1c52489f7 100644 --- a/src/resources/js/lang/en.ts +++ b/src/resources/js/lang/en.ts @@ -60,6 +60,7 @@ export const enTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/es.ts b/src/resources/js/lang/es.ts index a9e697c49..973459c46 100644 --- a/src/resources/js/lang/es.ts +++ b/src/resources/js/lang/es.ts @@ -60,6 +60,7 @@ export const esTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpretar los datos de la reunión como específicos del idioma seleccionado.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/fa.ts b/src/resources/js/lang/fa.ts index 1b234b689..0f2229de4 100644 --- a/src/resources/js/lang/fa.ts +++ b/src/resources/js/lang/fa.ts @@ -60,6 +60,7 @@ export const faTranslations = { accountSettingsTitle: 'تنظیمات حساب', accountTitle: 'حساب', accountTypeTitle: 'نوع حساب', + acknowledgeTranslation: 'داده های جلسه باید به عنوان مختص زبان انتخاب شده تفسیر شوند', addFormat: 'افزودن فرمت', addMeeting: 'افزودن جلسه', addServiceBody: 'افزودن بدنه خدماتی', diff --git a/src/resources/js/lang/fr.ts b/src/resources/js/lang/fr.ts index cef394b3e..bba50930c 100644 --- a/src/resources/js/lang/fr.ts +++ b/src/resources/js/lang/fr.ts @@ -60,6 +60,7 @@ export const frTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Enter language specific translations for meetings I add or edit', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/it.ts b/src/resources/js/lang/it.ts index eee725c13..fc6882798 100644 --- a/src/resources/js/lang/it.ts +++ b/src/resources/js/lang/it.ts @@ -60,6 +60,7 @@ export const itTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/pl.ts b/src/resources/js/lang/pl.ts index 9578f89dc..db772bc83 100644 --- a/src/resources/js/lang/pl.ts +++ b/src/resources/js/lang/pl.ts @@ -60,6 +60,7 @@ export const plTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/pt.ts b/src/resources/js/lang/pt.ts index 1a9cc7a8d..e2d6887ef 100644 --- a/src/resources/js/lang/pt.ts +++ b/src/resources/js/lang/pt.ts @@ -60,6 +60,7 @@ export const ptTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/ru.ts b/src/resources/js/lang/ru.ts index a15263a66..01d576333 100644 --- a/src/resources/js/lang/ru.ts +++ b/src/resources/js/lang/ru.ts @@ -60,6 +60,7 @@ export const ruTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', diff --git a/src/resources/js/lang/sv.ts b/src/resources/js/lang/sv.ts index 7d49d234b..0369b7a77 100644 --- a/src/resources/js/lang/sv.ts +++ b/src/resources/js/lang/sv.ts @@ -60,6 +60,7 @@ export const svTranslations = { accountSettingsTitle: 'Account Settings', accountTitle: 'Account', accountTypeTitle: 'Account Type', + acknowledgeTranslation: 'Interpret meeting data as specific to the selected language.', addFormat: 'Add Format', addMeeting: 'Add Meeting', addServiceBody: 'Add Service Body', From 11bc9b491a36b42f1bff9bbc11178db743c8637b Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:16:25 +0200 Subject: [PATCH 003/118] Erase cookie when not translating --- src/resources/js/components/LoginForm.svelte | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/resources/js/components/LoginForm.svelte b/src/resources/js/components/LoginForm.svelte index d789b9ac0..2cae6a997 100644 --- a/src/resources/js/components/LoginForm.svelte +++ b/src/resources/js/components/LoginForm.svelte @@ -34,6 +34,8 @@ if (globalSettings.isLanguageSelectorEnabled && acknowledgeTranslation) { const langCookie = `lang=${selectedLanguage}; Path=/;`!; document.cookie = langCookie; + } else { + document.cookie = 'lang=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT'; } }, onSuccess: () => { @@ -105,7 +107,7 @@ {#if settings.defaultLanguage != selectedLanguage}
{/if} From 60161ff18e5dee2eabe6e8bee2d8e9aa8db6b3a9 Mon Sep 17 00:00:00 2001 From: Alan B <918773+alanb2718@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:45:41 +0200 Subject: [PATCH 004/118] add check for missing autoconfig file (#1297) --- src/app/LegacyConfig.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/app/LegacyConfig.php b/src/app/LegacyConfig.php index a2b24f9d4..ff2082b20 100644 --- a/src/app/LegacyConfig.php +++ b/src/app/LegacyConfig.php @@ -57,6 +57,15 @@ private static function loadConfig() if (file_exists($legacyConfigFile)) { defined('BMLT_EXEC') or define('BMLT_EXEC', 1); require($legacyConfigFile); + } else { + die('

Configuration Problem

+

The file auto-config.inc.php seems to be missing.

+

If this is a brand new BMLT server installation, please see the installation instructions. The latest version + of the instructions is available at + + https://github.com/bmlt-enabled/bmlt-server/blob/main/installation/README.md. + For other versions, get a copy of the BMLT server source code from github, check out the version you want, + and look in the file installation/README.md.

'); } $config = []; From 76564a62eace4adf33ab8125139dab7b6b14bf3c Mon Sep 17 00:00:00 2001 From: Alan B <918773+alanb2718@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:32:07 +0200 Subject: [PATCH 005/118] update install directions and eliminate need to copy initial starter database - now just done with migrations (#1300) --- installation/README.md | 14 +- installation/initial-database.sql | 1080 ----------------- .../Http/Middleware/DatabaseMigrations.php | 2 +- src/app/LegacyConfig.php | 2 +- ...10_09_160510_add_serveradmin_if_needed.php | 36 + 5 files changed, 42 insertions(+), 1092 deletions(-) delete mode 100644 installation/initial-database.sql create mode 100644 src/database/migrations/2025_10_09_160510_add_serveradmin_if_needed.php diff --git a/installation/README.md b/installation/README.md index 0e77ce8db..f39c14587 100644 --- a/installation/README.md +++ b/installation/README.md @@ -11,21 +11,15 @@ Set up an empty MySQL database, along with a MySQL user that has access to it. ## Uploading the BMLT Server Zip File -Get the latest version of the server from https://github.com/bmlt-enabled/bmlt-server/releases, and upload it to your web hosting provider's server. (The directions for this step in the older tutorial are also still valid.) For this part of the step, upload the zip file *without* unzipping it on your local machine. Then unzip it on your server. You should end up with a directory `main_server` under the directory that holds the files that show up on your website. Thus, if your web hosting server has a directory `public_html` for the files that show up on your website, put `main_server` in that directory, like this: `public_html/main_server`. - -In addition, unzip the file on your laptop or desktop machine -- you'll need to get a couple of files from it in the following steps. But don't try to upload the unzipped file -- that can result in problems with dropped files and such. - -## Initializing the MySQL Database - -This step is different from the old tutorial. - -In the unzipped version of the BMLT Server on your local machine, locate the directory `installation` and find the file `initial-database.sql` in that directory. Import the contents of this file into the empty MySQL database that you set up in the first step. (If you are using cPanel, find the `phpMyAdmin` tool under `Databases`, select your new database, and then click `Import`.) +Get the latest version of the server from https://github.com/bmlt-enabled/bmlt-server/releases using the link labeled `bmlt-server.zip`, and upload it to your web hosting provider's server. (The directions for this step in the older tutorial are also still valid.) For this part of the step, upload `bmlt-server.zip` *without* unzipping it on your local machine. Then unzip it on your server. You should end up with a directory `main_server` under the directory that holds the files that show up on your website. Thus, if your web hosting server has a directory `public_html` for the files that show up on your website, put `main_server` in that directory, like this: `public_html/main_server`. (Again, don't try to upload the unzipped directory from your local machine -- that can result in problems with dropped files and such.) ## Adding the auto-config File This step is also different from the old tutorial. -In the unzipped version of the BMLT Server, look again in the directory `installation` and find the file `initial-auto-config.txt`. Upload this file to your server, put it in the directory that holds your `main_server` directory, and rename it to `auto-config.inc.php`. This file should have the permissions `-rw-r--r--` (`0644` in octal). This means that the owner of the file can read and write it, and the owning group and others can read it. +Download the file `initial-auto-config.txt` from github at https://github.com/bmlt-enabled/bmlt-server/blob/main/installation/initial-auto-config.txt. + +Upload this file to your server, put it in the directory that holds your `main_server` directory, and rename it to `auto-config.inc.php`. This file should have the permissions `-rw-r--r--` (`0644` in octal). This means that the owner of the file can read and write it, and the owning group and others can read it. Note that the file `auto-config.inc.php` is not inside `main_server`, but rather at the same level. This is a little weird, but does have the advantage that you can upload a new version of the server easily without touching the `auto-config.inc.php` file. So your directory structure should look something like this: ``` diff --git a/installation/initial-database.sql b/installation/initial-database.sql deleted file mode 100644 index 5c61fce9b..000000000 --- a/installation/initial-database.sql +++ /dev/null @@ -1,1080 +0,0 @@ -/*M!999999\- enable the sandbox mode */ --- MariaDB dump 10.19-11.6.2-MariaDB, for debian-linux-gnu (aarch64) --- --- Host: localhost Database: rootserver --- ------------------------------------------------------ --- Server version 11.6.2-MariaDB-ubu2404 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*M!100616 SET @OLD_NOTE_VERBOSITY=@@NOTE_VERBOSITY, NOTE_VERBOSITY=0 */; - --- --- Table structure for table `na_comdef_changes` --- - -DROP TABLE IF EXISTS `na_comdef_changes`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_changes` ( - `id_bigint` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_id_bigint` bigint(20) unsigned DEFAULT NULL, - `service_body_id_bigint` bigint(20) unsigned NOT NULL, - `lang_enum` varchar(7) NOT NULL, - `change_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - `object_class_string` varchar(64) NOT NULL, - `change_name_string` varchar(255) DEFAULT NULL, - `change_description_text` text DEFAULT NULL, - `before_id_bigint` bigint(20) unsigned DEFAULT NULL, - `before_lang_enum` varchar(7) DEFAULT NULL, - `after_id_bigint` bigint(20) unsigned DEFAULT NULL, - `after_lang_enum` varchar(7) DEFAULT NULL, - `change_type_enum` varchar(32) NOT NULL, - `before_object` blob DEFAULT NULL, - `after_object` blob DEFAULT NULL, - PRIMARY KEY (`id_bigint`), - KEY `user_id_bigint` (`user_id_bigint`), - KEY `service_body_id_bigint` (`service_body_id_bigint`), - KEY `lang_enum` (`lang_enum`), - KEY `change_type_enum` (`change_type_enum`), - KEY `change_date` (`change_date`), - KEY `before_id_bigint` (`before_id_bigint`), - KEY `after_id_bigint` (`after_id_bigint`), - KEY `before_lang_enum` (`before_lang_enum`), - KEY `after_lang_enum` (`after_lang_enum`), - KEY `object_class_string` (`object_class_string`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_changes` --- - -LOCK TABLES `na_comdef_changes` WRITE; -/*!40000 ALTER TABLE `na_comdef_changes` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_comdef_changes` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_db_version` --- - -DROP TABLE IF EXISTS `na_comdef_db_version`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_db_version` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `version` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_db_version` --- - -LOCK TABLES `na_comdef_db_version` WRITE; -/*!40000 ALTER TABLE `na_comdef_db_version` DISABLE KEYS */; -INSERT INTO `na_comdef_db_version` VALUES -(1,21); -/*!40000 ALTER TABLE `na_comdef_db_version` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_format_types` --- - -DROP TABLE IF EXISTS `na_comdef_format_types`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_format_types` ( - `key_string` varchar(10) NOT NULL, - `api_enum` varchar(256) NOT NULL, - `position_int` int(11) NOT NULL, - UNIQUE KEY `na_comdef_format_types_key_string_unique` (`key_string`), - UNIQUE KEY `na_comdef_format_types_api_enum_unique` (`api_enum`), - KEY `na_comdef_format_types_key_string_index` (`key_string`), - KEY `na_comdef_format_types_api_enum_index` (`api_enum`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_format_types` --- - -LOCK TABLES `na_comdef_format_types` WRITE; -/*!40000 ALTER TABLE `na_comdef_format_types` DISABLE KEYS */; -INSERT INTO `na_comdef_format_types` VALUES -('FC1','MEETING_FORMAT',1), -('FC2','LOCATION',2), -('FC3','COMMON_NEEDS_OR_RESTRICTION',3), -('LANG','LANGUAGE',5), -('O','OPEN_OR_CLOSED',4); -/*!40000 ALTER TABLE `na_comdef_format_types` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_formats` --- - -DROP TABLE IF EXISTS `na_comdef_formats`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_formats` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `shared_id_bigint` bigint(20) unsigned NOT NULL, - `root_server_id` bigint(20) unsigned DEFAULT NULL, - `source_id` bigint(20) unsigned DEFAULT NULL, - `key_string` varchar(255) DEFAULT NULL, - `icon_blob` blob DEFAULT NULL, - `worldid_mixed` varchar(255) DEFAULT NULL, - `lang_enum` varchar(7) NOT NULL DEFAULT 'en', - `name_string` varchar(255) DEFAULT NULL, - `description_string` text DEFAULT NULL, - `format_type_enum` varchar(7) DEFAULT 'FC1', - PRIMARY KEY (`id`), - KEY `shared_id_bigint` (`shared_id_bigint`), - KEY `worldid_mixed` (`worldid_mixed`), - KEY `format_type_enum` (`format_type_enum`), - KEY `lang_enum` (`lang_enum`), - KEY `key_string` (`key_string`), - KEY `root_server_id_source_id` (`root_server_id`,`source_id`), - CONSTRAINT `na_comdef_formats_root_server_id_foreign` FOREIGN KEY (`root_server_id`) REFERENCES `na_root_servers` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=500 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_formats` --- - -LOCK TABLES `na_comdef_formats` WRITE; -/*!40000 ALTER TABLE `na_comdef_formats` DISABLE KEYS */; -INSERT INTO `na_comdef_formats` VALUES -(1,1,NULL,NULL,'B',NULL,'BEG','de','Beginners','This meeting is focused on the needs of new members of NA.','FC3'), -(2,2,NULL,NULL,'BL',NULL,'LANG','de','Bi-Lingual','This Meeting can be attended by speakers of English and another language.','LANG'), -(3,3,NULL,NULL,'BT',NULL,'BT','de','Basic Text','This meeting is focused on discussion of the Basic Text of Narcotics Anonymous.','FC1'), -(4,4,NULL,NULL,'C',NULL,'CLOSED','de','Closed','This meeting is closed to non-addicts. You should attend only if you believe that you may have a problem with substance abuse.','O'), -(5,5,NULL,NULL,'CH',NULL,'CH','de','Closed Holidays','This meeting gathers in a facility that is usually closed on holidays.','FC3'), -(6,6,NULL,NULL,'CL',NULL,'CAN','de','Candlelight','This meeting is held by candlelight.','FC2'), -(7,7,NULL,NULL,'CS',NULL,'','de','Children under Supervision','Well-behaved, supervised children are welcome.','FC3'), -(8,8,NULL,NULL,'D',NULL,'DISC','de','Discussion','This meeting invites participation by all attendees.','FC1'), -(9,9,NULL,NULL,'ES',NULL,'LANG','de','Español','This meeting is conducted in Spanish.','LANG'), -(10,10,NULL,NULL,'GL',NULL,'GL','de','Gay/Lesbian/Transgender','This meeting is focused on the needs of gay, lesbian and transgender members of NA.','FC3'), -(11,11,NULL,NULL,'IL',NULL,NULL,'de','Illness','This meeting is focused on the needs of NA members with chronic illness.','FC1'), -(12,12,NULL,NULL,'IP',NULL,'IP','de','Informational Pamphlet','This meeting is focused on discussion of one or more Informational Pamphlets.','FC1'), -(13,13,NULL,NULL,'IW',NULL,'IW','de','It Works -How and Why','This meeting is focused on discussion of the It Works -How and Why text.','FC1'), -(14,14,NULL,NULL,'JT',NULL,'JFT','de','Just for Today','This meeting is focused on discussion of the Just For Today text.','FC1'), -(15,15,NULL,NULL,'M',NULL,'M','de','Men','This meeting is meant to be attended by men only.','FC3'), -(16,16,NULL,NULL,'NC',NULL,'NC','de','No Children','Please do not bring children to this meeting.','FC3'), -(17,17,NULL,NULL,'O',NULL,'OPEN','de','Open','This meeting is open to addicts and non-addicts alike. All are welcome.','O'), -(18,18,NULL,NULL,'Pi',NULL,NULL,'de','Pitch','This meeting has a format that consists of each person who shares picking the next person.','FC1'), -(19,19,NULL,NULL,'RF',NULL,'VAR','de','Rotating Format','This meeting has a format that changes for each meeting.','FC1'), -(20,20,NULL,NULL,'Rr',NULL,NULL,'de','Round Robin','This meeting has a fixed sharing order (usually a circle.)','FC1'), -(21,21,NULL,NULL,'SC',NULL,NULL,'de','Security Cameras','This meeting is held in a facility that has security cameras.','FC2'), -(22,22,NULL,NULL,'SD',NULL,'S-D','de','Speaker/Discussion','This meeting is lead by a speaker, then opened for participation by attendees.','FC1'), -(23,23,NULL,NULL,'SG',NULL,'SWG','de','Step Working Guide','This meeting is focused on discussion of the Step Working Guide text.','FC1'), -(24,24,NULL,NULL,'SL',NULL,NULL,'de','ASL','This meeting provides an American Sign Language (ASL) interpreter for the deaf.','FC2'), -(25,26,NULL,NULL,'So',NULL,'SPK','de','Speaker Only','This meeting is a speaker-only meeting. Other attendees do not participate in the discussion.','FC1'), -(26,27,NULL,NULL,'St',NULL,'STEP','de','Step','This meeting is focused on discussion of the Twelve Steps of NA.','FC1'), -(27,28,NULL,NULL,'Ti',NULL,NULL,'de','Timer','This meeting has sharing time limited by a timer.','FC1'), -(28,29,NULL,NULL,'To',NULL,'TOP','de','Topic','This meeting is based upon a topic chosen by a speaker or by group conscience.','FC1'), -(29,30,NULL,NULL,'Tr',NULL,'TRAD','de','Tradition','This meeting is focused on discussion of the Twelve Traditions of NA.','FC1'), -(30,31,NULL,NULL,'TW',NULL,'TRAD','de','Traditions Workshop','This meeting engages in detailed discussion of one or more of the Twelve Traditions of N.A.','FC1'), -(31,32,NULL,NULL,'W',NULL,'W','de','Women','This meeting is meant to be attended by women only.','FC3'), -(32,33,NULL,NULL,'WC',NULL,'WCHR','de','Wheelchair','This meeting is wheelchair accessible.','FC2'), -(33,34,NULL,NULL,'YP',NULL,'Y','de','Young People','This meeting is focused on the needs of younger members of NA.','FC3'), -(34,35,NULL,NULL,'OE',NULL,NULL,'de','Open-Ended','No fixed duration. The meeting continues until everyone present has had a chance to share.','FC1'), -(35,36,NULL,NULL,'BK',NULL,'LIT','de','Book Study','Approved N.A. Books','FC1'), -(36,37,NULL,NULL,'NS',NULL,'NS','de','No Smoking','Smoking is not allowed at this meeting.','FC1'), -(37,38,NULL,NULL,'Ag',NULL,NULL,'de','Agnostic','Intended for people with varying degrees of Faith.','FC1'), -(38,39,NULL,NULL,'FD',NULL,NULL,'de','Five and Dime','Discussion of the Fifth Step and the Tenth Step','FC1'), -(39,40,NULL,NULL,'AB',NULL,'QA','de','Ask-It-Basket','A topic is chosen from suggestions placed into a basket.','FC1'), -(40,41,NULL,NULL,'ME',NULL,'MED','de','Meditation','This meeting encourages its participants to engage in quiet meditation.','FC1'), -(41,42,NULL,NULL,'RA',NULL,'RA','de','Restricted Attendance','This facility places restrictions on attendees.','FC3'), -(42,43,NULL,NULL,'QA',NULL,'QA','de','Question and Answer','Attendees may ask questions and expect answers from Group members.','FC1'), -(43,44,NULL,NULL,'CW',NULL,'CW','de','Children Welcome','Children are welcome at this meeting.','FC3'), -(44,45,NULL,NULL,'CP',NULL,'CPT','de','Concepts','This meeting is focused on discussion of the twelve concepts of NA.','FC1'), -(45,46,NULL,NULL,'FIN',NULL,'LANG','de','Finnish','Finnish speaking meeting','LANG'), -(46,47,NULL,NULL,'ENG',NULL,'LANG','de','English speaking','This Meeting can be attended by speakers of English.','LANG'), -(47,48,NULL,NULL,'PER',NULL,'LANG','de','Persian','Persian speaking meeting','LANG'), -(48,49,NULL,NULL,'L/R',NULL,'LANG','de','Lithuanian/Russian','Lithuanian/Russian Speaking Meeting','LANG'), -(49,51,NULL,NULL,'LC',NULL,'LC','de','Living Clean','This is a discussion of the NA book Living Clean -The Journey Continues.','FC1'), -(50,52,NULL,NULL,'GP',NULL,'GP','de','Guiding Principles','This is a discussion of the NA book Guiding Principles - The Spirit of Our Traditions.','FC1'), -(51,54,NULL,NULL,'VM',NULL,'VM','de','Virtual Meeting','Meets Virtually','FC2'), -(52,55,NULL,NULL,'TC',NULL,'TC','de','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(53,56,NULL,NULL,'HY',NULL,'HYBR','de','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(54,57,NULL,NULL,'SPAD',NULL,'SPAD','de','Ein spirituelles Prinzip pro Tag','Lesen aus dem Buch Ein spirituelles Prinzip pro Tag','FC1'), -(55,1,NULL,NULL,'B',NULL,'BEG','dk','Beginners','This meeting is focused on the needs of new members of NA.','FC3'), -(56,2,NULL,NULL,'BL',NULL,'LANG','dk','Bi-Lingual','This Meeting can be attended by speakers of English and another language.','LANG'), -(57,3,NULL,NULL,'BT',NULL,'BT','dk','Basic Text','This meeting is focused on discussion of the Basic Text of Narcotics Anonymous.','FC1'), -(58,4,NULL,NULL,'C',NULL,'CLOSED','dk','Closed','This meeting is closed to non-addicts. You should attend only if you believe that you may have a problem with substance abuse.','O'), -(59,5,NULL,NULL,'CH',NULL,'CH','dk','Closed Holidays','This meeting gathers in a facility that is usually closed on holidays.','FC3'), -(60,6,NULL,NULL,'CL',NULL,'CAN','dk','Candlelight','This meeting is held by candlelight.','FC2'), -(61,7,NULL,NULL,'CS',NULL,'','dk','Children under Supervision','Well-behaved, supervised children are welcome.','FC3'), -(62,8,NULL,NULL,'D',NULL,'DISC','dk','Discussion','This meeting invites participation by all attendees.','FC1'), -(63,9,NULL,NULL,'ES',NULL,'LANG','dk','Español','This meeting is conducted in Spanish.','LANG'), -(64,10,NULL,NULL,'GL',NULL,'GL','dk','Gay/Lesbian/Transgender','This meeting is focused on the needs of gay, lesbian and transgender members of NA.','FC3'), -(65,11,NULL,NULL,'IL',NULL,NULL,'dk','Illness','This meeting is focused on the needs of NA members with chronic illness.','FC1'), -(66,12,NULL,NULL,'IP',NULL,'IP','dk','Informational Pamphlet','This meeting is focused on discussion of one or more Informational Pamphlets.','FC1'), -(67,13,NULL,NULL,'IW',NULL,'IW','dk','It Works -How and Why','This meeting is focused on discussion of the It Works -How and Why text.','FC1'), -(68,14,NULL,NULL,'JT',NULL,'JFT','dk','Just for Today','This meeting is focused on discussion of the Just For Today text.','FC1'), -(69,15,NULL,NULL,'M',NULL,'M','dk','Men','This meeting is meant to be attended by men only.','FC3'), -(70,16,NULL,NULL,'NC',NULL,'NC','dk','No Children','Please do not bring children to this meeting.','FC3'), -(71,17,NULL,NULL,'O',NULL,'OPEN','dk','Open','This meeting is open to addicts and non-addicts alike. All are welcome.','O'), -(72,18,NULL,NULL,'Pi',NULL,NULL,'dk','Pitch','This meeting has a format that consists of each person who shares picking the next person.','FC1'), -(73,19,NULL,NULL,'RF',NULL,'VAR','dk','Rotating Format','This meeting has a format that changes for each meeting.','FC1'), -(74,20,NULL,NULL,'Rr',NULL,NULL,'dk','Round Robin','This meeting has a fixed sharing order (usually a circle.)','FC1'), -(75,21,NULL,NULL,'SC',NULL,NULL,'dk','Security Cameras','This meeting is held in a facility that has security cameras.','FC2'), -(76,22,NULL,NULL,'SD',NULL,'S-D','dk','Speaker/Discussion','This meeting is lead by a speaker, then opened for participation by attendees.','FC1'), -(77,23,NULL,NULL,'SG',NULL,'SWG','dk','Step Working Guide','This meeting is focused on discussion of the Step Working Guide text.','FC1'), -(78,24,NULL,NULL,'SL',NULL,NULL,'dk','ASL','This meeting provides an American Sign Language (ASL) interpreter for the deaf.','FC2'), -(79,26,NULL,NULL,'So',NULL,'SPK','dk','Speaker Only','This meeting is a speaker-only meeting. Other attendees do not participate in the discussion.','FC1'), -(80,27,NULL,NULL,'St',NULL,'STEP','dk','Step','This meeting is focused on discussion of the Twelve Steps of NA.','FC1'), -(81,28,NULL,NULL,'Ti',NULL,NULL,'dk','Timer','This meeting has sharing time limited by a timer.','FC1'), -(82,29,NULL,NULL,'To',NULL,'TOP','dk','Topic','This meeting is based upon a topic chosen by a speaker or by group conscience.','FC1'), -(83,30,NULL,NULL,'Tr',NULL,'TRAD','dk','Tradition','This meeting is focused on discussion of the Twelve Traditions of NA.','FC1'), -(84,31,NULL,NULL,'TW',NULL,'TRAD','dk','Traditions Workshop','This meeting engages in detailed discussion of one or more of the Twelve Traditions of N.A.','FC1'), -(85,32,NULL,NULL,'W',NULL,'W','dk','Women','This meeting is meant to be attended by women only.','FC3'), -(86,33,NULL,NULL,'WC',NULL,'WCHR','dk','Wheelchair','This meeting is wheelchair accessible.','FC2'), -(87,34,NULL,NULL,'YP',NULL,'Y','dk','Young People','This meeting is focused on the needs of younger members of NA.','FC3'), -(88,35,NULL,NULL,'OE',NULL,NULL,'dk','Open-Ended','No fixed duration. The meeting continues until everyone present has had a chance to share.','FC1'), -(89,36,NULL,NULL,'BK',NULL,'LIT','dk','Book Study','Approved N.A. Books','FC1'), -(90,37,NULL,NULL,'NS',NULL,'NS','dk','No Smoking','Smoking is not allowed at this meeting.','FC1'), -(91,38,NULL,NULL,'Ag',NULL,NULL,'dk','Agnostic','Intended for people with varying degrees of Faith.','FC1'), -(92,39,NULL,NULL,'FD',NULL,NULL,'dk','Five and Dime','Discussion of the Fifth Step and the Tenth Step','FC1'), -(93,40,NULL,NULL,'AB',NULL,'QA','dk','Ask-It-Basket','A topic is chosen from suggestions placed into a basket.','FC1'), -(94,41,NULL,NULL,'ME',NULL,'MED','dk','Meditation','This meeting encourages its participants to engage in quiet meditation.','FC1'), -(95,42,NULL,NULL,'RA',NULL,'RA','dk','Restricted Attendance','This facility places restrictions on attendees.','FC3'), -(96,43,NULL,NULL,'QA',NULL,'QA','dk','Question and Answer','Attendees may ask questions and expect answers from Group members.','FC1'), -(97,44,NULL,NULL,'CW',NULL,'CW','dk','Children Welcome','Children are welcome at this meeting.','FC3'), -(98,45,NULL,NULL,'CP',NULL,'CPT','dk','Concepts','This meeting is focused on discussion of the twelve concepts of NA.','FC1'), -(99,46,NULL,NULL,'FIN',NULL,'LANG','dk','Finnish','Finnish speaking meeting','LANG'), -(100,47,NULL,NULL,'ENG',NULL,'LANG','dk','English speaking','This Meeting can be attended by speakers of English.','LANG'), -(101,48,NULL,NULL,'PER',NULL,'LANG','dk','Persian','Persian speaking meeting','LANG'), -(102,49,NULL,NULL,'L/R',NULL,'LANG','dk','Lithuanian/Russian','Lithuanian/Russian Speaking Meeting','LANG'), -(103,51,NULL,NULL,'LC',NULL,'LC','dk','Living Clean','This is a discussion of the NA book Living Clean -The Journey Continues.','FC1'), -(104,52,NULL,NULL,'GP',NULL,'GP','dk','Guiding Principles','This is a discussion of the NA book Guiding Principles - The Spirit of Our Traditions.','FC1'), -(105,54,NULL,NULL,'VM',NULL,'VM','dk','Virtual Meeting','Meets Virtually','FC2'), -(106,55,NULL,NULL,'TC',NULL,'TC','dk','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(107,56,NULL,NULL,'HY',NULL,'HYBR','dk','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(108,1,NULL,NULL,'B',NULL,'BEG','en','Beginners','This meeting is focused on the needs of new members of NA.','FC3'), -(109,2,NULL,NULL,'BL',NULL,'LANG','en','Bi-Lingual','This Meeting can be attended by speakers of English and another language.','LANG'), -(110,3,NULL,NULL,'BT',NULL,'BT','en','Basic Text','This meeting is focused on discussion of the Basic Text of Narcotics Anonymous.','FC1'), -(111,4,NULL,NULL,'C',NULL,'CLOSED','en','Closed','This meeting is closed to non-addicts. You should attend only if you believe that you may have a problem with substance abuse.','O'), -(112,5,NULL,NULL,'CH',NULL,'CH','en','Closed Holidays','This meeting gathers in a facility that is usually closed on holidays.','FC3'), -(113,6,NULL,NULL,'CL',NULL,'CAN','en','Candlelight','This meeting is held by candlelight.','FC2'), -(114,7,NULL,NULL,'CS',NULL,'','en','Children under Supervision','Well-behaved, supervised children are welcome.','FC3'), -(115,8,NULL,NULL,'D',NULL,'DISC','en','Discussion','This meeting invites participation by all attendees.','FC1'), -(116,9,NULL,NULL,'ES',NULL,'LANG','en','Español','This meeting is conducted in Spanish.','LANG'), -(117,10,NULL,NULL,'GL',NULL,'GL','en','Gay/Lesbian/Transgender','This meeting is focused on the needs of gay, lesbian and transgender members of NA.','FC3'), -(118,11,NULL,NULL,'IL',NULL,NULL,'en','Illness','This meeting is focused on the needs of NA members with chronic illness.','FC1'), -(119,12,NULL,NULL,'IP',NULL,'IP','en','Informational Pamphlet','This meeting is focused on discussion of one or more Informational Pamphlets.','FC1'), -(120,13,NULL,NULL,'IW',NULL,'IW','en','It Works -How and Why','This meeting is focused on discussion of the It Works -How and Why text.','FC1'), -(121,14,NULL,NULL,'JT',NULL,'JFT','en','Just for Today','This meeting is focused on discussion of the Just For Today text.','FC1'), -(122,15,NULL,NULL,'M',NULL,'M','en','Men','This meeting is meant to be attended by men only.','FC3'), -(123,16,NULL,NULL,'NC',NULL,'NC','en','No Children','Please do not bring children to this meeting.','FC3'), -(124,17,NULL,NULL,'O',NULL,'OPEN','en','Open','This meeting is open to addicts and non-addicts alike. All are welcome.','O'), -(125,18,NULL,NULL,'Pi',NULL,NULL,'en','Pitch','This meeting has a format that consists of each person who shares picking the next person.','FC1'), -(126,19,NULL,NULL,'RF',NULL,'VAR','en','Rotating Format','This meeting has a format that changes for each meeting.','FC1'), -(127,20,NULL,NULL,'Rr',NULL,NULL,'en','Round Robin','This meeting has a fixed sharing order (usually a circle.)','FC1'), -(128,21,NULL,NULL,'SC',NULL,NULL,'en','Security Cameras','This meeting is held in a facility that has security cameras.','FC2'), -(129,22,NULL,NULL,'SD',NULL,'S-D','en','Speaker/Discussion','This meeting is lead by a speaker, then opened for participation by attendees.','FC1'), -(130,23,NULL,NULL,'SG',NULL,'SWG','en','Step Working Guide','This meeting is focused on discussion of the Step Working Guide text.','FC1'), -(131,24,NULL,NULL,'SL',NULL,NULL,'en','ASL','This meeting provides an American Sign Language (ASL) interpreter for the deaf.','FC2'), -(132,26,NULL,NULL,'So',NULL,'SPK','en','Speaker Only','This meeting is a speaker-only meeting. Other attendees do not participate in the discussion.','FC1'), -(133,27,NULL,NULL,'St',NULL,'STEP','en','Step','This meeting is focused on discussion of the Twelve Steps of NA.','FC1'), -(134,28,NULL,NULL,'Ti',NULL,NULL,'en','Timer','This meeting has sharing time limited by a timer.','FC1'), -(135,29,NULL,NULL,'To',NULL,'TOP','en','Topic','This meeting is based upon a topic chosen by a speaker or by group conscience.','FC1'), -(136,30,NULL,NULL,'Tr',NULL,'TRAD','en','Tradition','This meeting is focused on discussion of the Twelve Traditions of NA.','FC1'), -(137,31,NULL,NULL,'TW',NULL,'TRAD','en','Traditions Workshop','This meeting engages in detailed discussion of one or more of the Twelve Traditions of N.A.','FC1'), -(138,32,NULL,NULL,'W',NULL,'W','en','Women','This meeting is meant to be attended by women only.','FC3'), -(139,33,NULL,NULL,'WC',NULL,'WCHR','en','Wheelchair','This meeting is wheelchair accessible.','FC2'), -(140,34,NULL,NULL,'YP',NULL,'Y','en','Young People','This meeting is focused on the needs of younger members of NA.','FC3'), -(141,35,NULL,NULL,'OE',NULL,NULL,'en','Open-Ended','No fixed duration. The meeting continues until everyone present has had a chance to share.','FC1'), -(142,36,NULL,NULL,'BK',NULL,'LIT','en','Book Study','Approved N.A. Books','FC1'), -(143,37,NULL,NULL,'NS',NULL,'NS','en','No Smoking','Smoking is not allowed at this meeting.','FC1'), -(144,38,NULL,NULL,'Ag',NULL,NULL,'en','Agnostic','Intended for people with varying degrees of Faith.','FC1'), -(145,39,NULL,NULL,'FD',NULL,NULL,'en','Five and Dime','Discussion of the Fifth Step and the Tenth Step','FC1'), -(146,40,NULL,NULL,'AB',NULL,'QA','en','Ask-It-Basket','A topic is chosen from suggestions placed into a basket.','FC1'), -(147,41,NULL,NULL,'ME',NULL,'MED','en','Meditation','This meeting encourages its participants to engage in quiet meditation.','FC1'), -(148,42,NULL,NULL,'RA',NULL,'RA','en','Restricted Attendance','This facility places restrictions on attendees.','FC3'), -(149,43,NULL,NULL,'QA',NULL,'QA','en','Question and Answer','Attendees may ask questions and expect answers from Group members.','FC1'), -(150,44,NULL,NULL,'CW',NULL,'CW','en','Children Welcome','Children are welcome at this meeting.','FC3'), -(151,45,NULL,NULL,'CP',NULL,'CPT','en','Concepts','This meeting is focused on discussion of the twelve concepts of NA.','FC1'), -(152,46,NULL,NULL,'FIN',NULL,'LANG','en','Finnish','Finnish speaking meeting','LANG'), -(153,47,NULL,NULL,'ENG',NULL,'LANG','en','English speaking','This Meeting can be attended by speakers of English.','LANG'), -(154,48,NULL,NULL,'PER',NULL,'LANG','en','Persian','Persian speaking meeting','LANG'), -(155,49,NULL,NULL,'L/R',NULL,'LANG','en','Lithuanian/Russian','Lithuanian/Russian Speaking Meeting','LANG'), -(156,51,NULL,NULL,'LC',NULL,'LC','en','Living Clean','This is a discussion of the NA book Living Clean -The Journey Continues.','FC1'), -(157,52,NULL,NULL,'GP',NULL,'GP','en','Guiding Principles','This is a discussion of the NA book Guiding Principles - The Spirit of Our Traditions.','FC1'), -(158,54,NULL,NULL,'VM',NULL,'VM','en','Virtual Meeting','Meets Virtually','FC2'), -(159,55,NULL,NULL,'TC',NULL,'TC','en','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(160,56,NULL,NULL,'HY',NULL,'HYBR','en','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(161,57,NULL,NULL,'SPAD',NULL,'SPAD','en','A Spiritual Principle a Day','This meeting is focused on discussion of the book A Spiritual Principle a Day.','FC1'), -(162,1,NULL,NULL,'B',NULL,'BEG','es','Para el recién llegado','Esta reunión se centra en las necesidades de los nuevos miembros de NA.','FC3'), -(163,2,NULL,NULL,'BL',NULL,'LANG','es','Bilingüe','Esta reunión se pueden asistir personas de que hablen inglés y otro idioma.','LANG'), -(164,3,NULL,NULL,'BT',NULL,'BT','es','Texto Básico','Esta reunión se centra en la discusión del texto básico de Narcóticos Anónimos.','FC1'), -(165,4,NULL,NULL,'C',NULL,'CLOSED','es','Cerrado','Esta reunión está cerrada a los no adictos. Usted debe asistir solamente si cree que puede tener un problema con abuso de drogas.','O'), -(166,5,NULL,NULL,'CH',NULL,NULL,'es','Cerrado en Días de fiesta','Esta reunión tiene lugar en una localidad que esta generalmente cerrada los días de fiesta.','FC3'), -(167,6,NULL,NULL,'CL',NULL,'CAN','es','Luz de vela','Esta reunión se celebra a luz de vela.','FC2'), -(168,7,NULL,NULL,'CS',NULL,'','es','Niños bajo Supervisión','Los niños de buen comportamiento y supervisados son bienvenidos.','FC3'), -(169,8,NULL,NULL,'D',NULL,'DISC','es','Discusión','Esta reunión invita la participación de todos los asistentes.','FC1'), -(170,10,NULL,NULL,'GL',NULL,'GL','es','Gay/Lesbiana','Esta reunión se centra en las necesidades de miembros gay y lesbianas de NA.','FC3'), -(171,11,NULL,NULL,'IL',NULL,NULL,'es','Enfermedad','Esta reunión se centra en las necesidades de los miembros de NA con enfermedades crónicas.','FC1'), -(172,12,NULL,NULL,'IP',NULL,'IP','es','Folleto Informativo','Esta reunión se centra en la discusión de unos o más folletos informativos.','FC1'), -(173,13,NULL,NULL,'IW',NULL,'IW','es','Functiona - Cómo y Porqué','Esta reunión se centra en la discusión del texto Funciona - Cómo y Porqué.','FC1'), -(174,14,NULL,NULL,'JT',NULL,'JFT','es','Solo por Hoy','Esta reunión se centra en la discusión del texto Solo por Hoy.','FC1'), -(175,15,NULL,NULL,'M',NULL,'M','es','Hombres','A esta reunión se supone que aistan hombres solamente.','FC3'), -(176,16,NULL,NULL,'NC',NULL,NULL,'es','No niños','Por favor no traer niños a esta reunión.','FC3'), -(177,17,NULL,NULL,'O',NULL,'OPEN','es','Abierta','Esta reunión está abierta a los adictos y a los no adictos por igual. Todos son bienvenidos.','O'), -(178,18,NULL,NULL,'Pi',NULL,NULL,'es','Echada','Esta reunión tiene un formato que consiste en que cada persona que comparta escoja a la persona siguiente.','FC1'), -(179,19,NULL,NULL,'RF',NULL,'VAR','es','Formato que Rota','Esta reunión tiene un formato que cambia para cada reunión.','FC1'), -(180,20,NULL,NULL,'Rr',NULL,NULL,'es','Round Robin','Esta reunión tiene un orden fijo de compartir (generalmente un círculo).','FC1'), -(181,21,NULL,NULL,'SC',NULL,NULL,'es','Cámaras de Vigilancia','Esta reunión se celebra en una localidad que tenga cámaras de vigilancia.','FC2'), -(182,22,NULL,NULL,'SD',NULL,'S-D','es','Orador/Discusión','Esta reunión es conducida por un orador, después es abierta para la participación de los asistentes.','FC1'), -(183,23,NULL,NULL,'SG',NULL,'SWG','es','Guia Para Trabajar los Pasos','Esta reunión se centra en la discusión del texto Guia Para Trabajar los Pasos.','FC1'), -(184,24,NULL,NULL,'SL',NULL,NULL,'es','ASL','Esta reunión proporciona intérprete (ASL) para los sordos.','FC2'), -(185,26,NULL,NULL,'So',NULL,'SPK','es','Solamente Orador','Esta reunión es de orador solamente. Otros asistentes no participan en la discusión.','FC1'), -(186,27,NULL,NULL,'St',NULL,'STEP','es','Paso','Esta reunión se centra en la discusión de los doce pasos de NA.','FC1'), -(187,28,NULL,NULL,'Ti',NULL,NULL,'es','Contador de Tiempo','Esta reunión tiene el tiempo de compartir limitado por un contador de tiempo.','FC1'), -(188,29,NULL,NULL,'To',NULL,'TOP','es','Tema','Esta reunión se basa en un tema elegido por el orador o por la conciencia del grupo.','FC1'), -(189,30,NULL,NULL,'Tr',NULL,'TRAD','es','Tradición','Esta reunión se centra en la discusión de las Doce Tradiciones de NA.','FC1'), -(190,31,NULL,NULL,'TW',NULL,'TRAD','es','Taller de las Tradiciones','Esta reunión consiste en la discusión detallada de una o más de las Doce Tradiciones de N.A.','FC1'), -(191,32,NULL,NULL,'W',NULL,'W','es','Mujeres','A esta reunión se supone que asistan mujeres solamente.','FC3'), -(192,33,NULL,NULL,'WC',NULL,'WCHR','es','Silla de Ruedas','Esta reunión es accesible por silla de ruedas.','FC2'), -(193,34,NULL,NULL,'YP',NULL,'Y','es','Jovenes','Esta reunión se centra en las necesidades de los miembros más jóvenes de NA.','FC3'), -(194,35,NULL,NULL,'OE',NULL,NULL,'es','Sin Tiempo Fijo','No tiene tiempo fijo. Esta reunión continua hasta que cada miembro haya tenido la oportunidad de compartir.','FC1'), -(195,54,NULL,NULL,'VM',NULL,'VM','es','Virtual Meeting','Meets Virtually','FC2'), -(196,55,NULL,NULL,'TC',NULL,'TC','es','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(197,56,NULL,NULL,'HY',NULL,'HYBR','es','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(198,54,NULL,NULL,'VM',NULL,'VM','fa','Virtual Meeting','Meets Virtually','FC2'), -(199,55,NULL,NULL,'TC',NULL,'TC','fa','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(200,56,NULL,NULL,'HY',NULL,'HYBR','fa','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(201,1,NULL,NULL,'B',NULL,'BEG','fr','Débutants','Cette réunion est axée sur les besoins des nouveaux membres de NA.','FC3'), -(202,2,NULL,NULL,'BL',NULL,'LANG','fr','bilingue','Cette réunion peut aider les personnes qui parlent l\'anglais et une autre langue.','LANG'), -(203,3,NULL,NULL,'BT',NULL,'BT','fr','Texte de Base','Cette réunion est axée sur la discussion du texte de base de Narcotiques Anonymes.','FC1'), -(204,4,NULL,NULL,'C',NULL,'CLOSED','fr','Fermée','Cette réunion est fermée aux non-toxicomanes. Vous pouvez y assister que si vous pensez que vous pouvez avoir un problème avec l\'abus de drogues.','O'), -(205,5,NULL,NULL,'CH',NULL,NULL,'fr','Fermé durant les jours fériés.','Cette réunion a lieu dans une local qui est généralement fermé durant les jours fériés.','FC3'), -(206,6,NULL,NULL,'CL',NULL,'CAN','fr','Chandelle','Cette réunion se déroule à la chandelle.','FC2'), -(207,7,NULL,NULL,'CS',NULL,'','fr','Enfants sous Supervision','Les enfants bien élevés sont les bienvenus et supervisés.','FC3'), -(208,8,NULL,NULL,'D',NULL,'DISC','fr','Discussion','Cette réunion invite tous les participants à la discussion.','FC1'), -(209,10,NULL,NULL,'GL',NULL,'GL','fr','Gais, lesbiennes, transsexuel(le)s, bisexuel(le)s','Cette réunion est axée sur les besoins des membres gais, lesbiennes, transsexuel(le)s et bisexuel(le)s de NA.','FC3'), -(210,11,NULL,NULL,'IL',NULL,NULL,'fr','Chroniques','Cette réunion est axée sur les besoins des membres de NA comportant des troubles de maladies chroniques.','FC1'), -(211,12,NULL,NULL,'IP',NULL,'IP','fr','Brochures','Cette réunion est axée sur la discussion d\'une ou plusieurs brochures.','FC1'), -(212,13,NULL,NULL,'IW',NULL,'IW','fr','Ça marche, Comment et Pourquoi','Cette session met l\'accent sur la discussion de texte Ça marche, Comment et Pourquoi.','FC1'), -(213,14,NULL,NULL,'JT',NULL,'JFT','fr','Juste pour aujourd\'hui','Cette session met l\'accent sur la discussion du texte Juste pour aujourd\'hui.','FC1'), -(214,15,NULL,NULL,'M',NULL,'M','fr','Hommes','Cette réunion est destinée à être assisté par seulement que des hommes.','FC3'), -(215,16,NULL,NULL,'NC',NULL,NULL,'fr','Pas d\'enfant','S\'il vous plaît, ne pas amener les enfants à cette réunion.','FC3'), -(216,17,NULL,NULL,'O',NULL,'OPEN','fr','Ouvert','Cette réunion est ouverte aux toxicomanes et non-toxicomanes de même. Tous sont les bienvenus.','O'), -(217,18,NULL,NULL,'Pi',NULL,NULL,'fr','À la pige','Cette réunion a un format de discussion est que chaque personne qui discute invite la personne suivante à discuter.','FC1'), -(218,19,NULL,NULL,'RF',NULL,'VAR','fr','Format varié','Cette réunion a un format qui varie à toutes les réunions.','FC1'), -(219,20,NULL,NULL,'Rr',NULL,NULL,'fr','À la ronde','Cette réunion a un ordre de partage fixe (généralement un cercle).','FC1'), -(220,21,NULL,NULL,'SC',NULL,NULL,'fr','Caméra de surveillance','Cette réunion se tient dans un emplacement qui a des caméras de surveillance.','FC2'), -(221,22,NULL,NULL,'SD',NULL,'S-D','fr','Partage et ouvert','Cette réunion a un conférencier, puis ouvert au public.','FC1'), -(222,23,NULL,NULL,'SG',NULL,'SWG','fr','Guides des Étapes','Cette réunion est axée sur la discussion sur le Guide des Étapes.','FC1'), -(223,24,NULL,NULL,'SL',NULL,NULL,'fr','Malentendants','Cette rencontre permet l\'interprète pour les personnes malentendantes.','FC2'), -(224,26,NULL,NULL,'So',NULL,'SPK','fr','Partage seulement','Cette réunion a seulement un conférencier. Les autres participants ne participent pas à la discussion.','FC1'), -(225,27,NULL,NULL,'St',NULL,'STEP','fr','Étapes NA','Cette réunion est axée sur la discussion des Douze Étapes de NA.','FC1'), -(226,28,NULL,NULL,'Ti',NULL,NULL,'fr','Discussion chronométrée','Cette réunion a une durée de discussion limitée par une minuterie pour chaque personne.','FC1'), -(227,29,NULL,NULL,'To',NULL,'TOP','fr','Thématique','Cette réunion est basée sur un thème choisi par la personne qui anime ou la conscience de groupe.','FC1'), -(228,30,NULL,NULL,'Tr',NULL,'TRAD','fr','Traditions','Cette réunion est axée sur la discussion des Douze Traditions de NA.','FC1'), -(229,31,NULL,NULL,'TW',NULL,'TRAD','fr','Atelier sur les traditions','Cette réunion est une discussion détaillée d\'une ou de plusieurs des Douze Traditions de NA','FC1'), -(230,32,NULL,NULL,'W',NULL,'W','fr','Femmes','Seulement les femmes sont admises.','FC3'), -(231,33,NULL,NULL,'WC',NULL,'WCHR','fr','Fauteuil Roulant','Cette réunion est accessible en fauteuil roulant.','FC2'), -(232,34,NULL,NULL,'YP',NULL,'Y','fr','Jeunes','Cette réunion est axée sur les besoins des plus jeunes membres de NA.','FC3'), -(233,35,NULL,NULL,'OE',NULL,NULL,'fr','Marathon','Il n\'y a pas de durée fixe. Cette réunion se poursuit jusqu\'à ce que chaque membre a eu l\'occasion de partager.','FC1'), -(234,36,NULL,NULL,'BK',NULL,'LIT','fr','Études de livres NA','Livres N.A. Approuvés','FC1'), -(235,37,NULL,NULL,'NS',NULL,'NS','fr','Non-fumeurs','Fumer n\'est pas permis à cette réunion.','FC1'), -(236,38,NULL,NULL,'Ag',NULL,NULL,'fr','Agnostique','Destiné aux personnes ayant divers degrés de la foi.','FC1'), -(237,39,NULL,NULL,'FD',NULL,NULL,'fr','Cinq et dix','Discussion de la cinquième étape et la dixième étape.','FC1'), -(238,40,NULL,NULL,'AB',NULL,'QA','fr','Panier','Un sujet est choisi parmi les suggestions placées dans un panier.','FC1'), -(239,41,NULL,NULL,'ME',NULL,'MED','fr','Méditation','Cette réunion encourage ses participants à s\'engager dans la méditation tranquille.','FC1'), -(240,42,NULL,NULL,'RA',NULL,'RA','fr','Accés limités','Cet emplacement impose des restrictions sur les participants.','FC3'), -(241,43,NULL,NULL,'QA',NULL,'QA','fr','Questions et Réponses','Les participants peuvent poser des questions et attendre des réponses des membres du groupe.','FC1'), -(242,44,NULL,NULL,'CW',NULL,'CW','fr','Enfants bienvenus','Les enfants sont les bienvenus à cette réunion.','FC3'), -(243,45,NULL,NULL,'CP',NULL,'CPT','fr','Concepts','Cette réunion est axée sur la discussion des douze concepts de NA.','FC1'), -(244,46,NULL,NULL,'Finlandais',NULL,NULL,'fr','Finlandais','Cette réunion se déroule en langue finlandaisè','FC3'), -(245,47,NULL,NULL,'ENG',NULL,NULL,'fr','Anglais','Cette réunion se déroule de langues anglais.','FC3'), -(246,54,NULL,NULL,'VM',NULL,'VM','fr','Virtual Meeting','Meets Virtually','FC2'), -(247,55,NULL,NULL,'TC',NULL,'TC','fr','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(248,56,NULL,NULL,'HY',NULL,'HYBR','fr','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(249,1,NULL,NULL,'NV',NULL,NULL,'it','Nuovi venuti','Riunione concentrata principalmente sulle necessità dei nuovi membri di NA.','FC3'), -(250,2,NULL,NULL,'BL',NULL,'LANG','it','Bilingue','Questa riunione può essere frequentata da membri che parlano italiano e/o inglese.','LANG'), -(251,3,NULL,NULL,'TB',NULL,NULL,'it','Testo base','Riunione concentrata sulla discussione del testo base di NA.','FC1'), -(252,4,NULL,NULL,'Ch.',NULL,NULL,'it','Chiusa','Riunione chiusa ai non dipendenti. Dovrebbe frequentarla soltanto chi crede di avere un problema con le sostanze d\'abuso.','O'), -(253,5,NULL,NULL,'SF',NULL,NULL,'it','Sospesa nei giorni festivi','Questa riunione si tiene in locali che di solito sono chiusi nei giorni festivi e di vacanza.','FC3'), -(254,6,NULL,NULL,'LC',NULL,NULL,'it','Lume di candela','Questa riunione si tiene a lume di candela per favorire la meditazione.','FC2'), -(255,7,NULL,NULL,'BS',NULL,NULL,'it','Bambini sotto supervisione','Sono ammessi bambini senza problemi di comportamento e sotto supervisione.','FC3'), -(256,8,NULL,NULL,'Disc.',NULL,NULL,'it','Discussione','Tutti i partecipanti sono invitati a condividere.','FC1'), -(257,9,NULL,NULL,'ES',NULL,'LANG','it','Spagnolo','Riunione in lingua spagnolo.','FC3'), -(258,14,NULL,NULL,'SPO',NULL,NULL,'it','Solo per oggi','Riunione in cui si discutono i temi delle meditazioni quotidiane del libro \"Solo per oggi\".','FC1'), -(259,15,NULL,NULL,'U',NULL,NULL,'it','Uomini','Riunioni per soli uomini.','FC3'), -(260,17,NULL,NULL,'Ap.',NULL,NULL,'it','Aperta','Riunione aperta ai non dipendenti. Parenti, amici, professionisti e altri membri della società, sono benvenuti.','O'), -(261,23,NULL,NULL,'GLP',NULL,NULL,'it','Guida al lavoro sui passi','Riunione basata sulla discussione della Guida al lavoro sui Dodici passi di NA.','FC1'), -(262,28,NULL,NULL,'Temp.',NULL,NULL,'it','Condivisioni temporizzate','In queste riunioni il tempo di condivisione è limitato da un cronometro.','FC1'), -(263,27,NULL,NULL,'P',NULL,NULL,'it','Passi','Riunione di discussione sui Dodici passi.','FC1'), -(264,29,NULL,NULL,'Arg.',NULL,NULL,'it','Riunioni a tema','Queste riunioni si basano su un argomento prescelto.','FC1'), -(265,30,NULL,NULL,'T',NULL,NULL,'it','Tradizioni','Riunione di discussione sulle Dodici tradizioni.','FC1'), -(266,31,NULL,NULL,'TW',NULL,NULL,'it','Workshop sulle Dodici tradizioni','Riunioni in cui si discute dettagliatamente su una o più delle Dodici tradizioni.','FC1'), -(267,32,NULL,NULL,'D',NULL,NULL,'it','Donne','Riunione solo donne.','FC3'), -(268,33,NULL,NULL,'SR',NULL,NULL,'it','Sedia a rotelle','Riunione accessibile per chi ha la sedia a rotelle.','FC2'), -(269,35,NULL,NULL,'M',NULL,NULL,'it','Maratona','Durata non prestabilita. La riunione prosegue finché tutti i presenti hanno da condividere.','FC1'), -(270,37,NULL,NULL,'NF',NULL,NULL,'it','Non fumatori','In queste riunioni non è consentito fumare.','FC1'), -(271,40,NULL,NULL,'TS',NULL,NULL,'it','Tema a sorpresa','L\'argomento su cui condividere è scritto su un biglietto o altro supporto (es. un bastoncino di legno) ed estratto a caso da ciascun membro.','FC1'), -(272,42,NULL,NULL,'M',NULL,NULL,'it','Meditazione','In questa riunione sono poste restrizioni alle modalità di partecipazione.','FC3'), -(273,43,NULL,NULL,'D/R',NULL,NULL,'it','Domande e risposteq','I partecipanti possono fare domande e attenderne la risposta dagli altri membri del gruppo.','FC1'), -(274,44,NULL,NULL,'Ba',NULL,NULL,'it','Bambini','I bambini sono benvenuti in queste riunioni.','FC3'), -(275,45,NULL,NULL,'C',NULL,NULL,'it','Concetti di servizio','Riunioni basate sulla discussione dei Dodici concetti per il servizio in NA.','FC1'), -(276,51,NULL,NULL,'VP',NULL,NULL,'it','Vivere puliti','Riunioni di discussione sul libro \"Vivere puliti - Il viaggio continua\".','FC1'), -(277,54,NULL,NULL,'VM',NULL,'VM','it','Virtual Meeting','Meets Virtually','FC2'), -(278,55,NULL,NULL,'TC',NULL,'TC','it','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(279,56,NULL,NULL,'HY',NULL,'HYBR','it','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(280,1,NULL,NULL,'B',NULL,'BEG','pl','Nowoprzybyli','Mityng koncentruje się na potrzebach nowyh członków NA.','FC3'), -(281,2,NULL,NULL,'BL',NULL,'LANG','pl','Wielojęzykowość','Na tym mityngu mogą uczęszczać osoby posługujące się językiem angielskim i innymi.','LANG'), -(282,3,NULL,NULL,'BT',NULL,'BT','pl','Tekst Podstawowy','Mityng koncentruje się na dyskusjach o Tekście Podstawowym Anonimowych Narkomanów.','FC1'), -(283,4,NULL,NULL,'C',NULL,'CLOSED','pl','Mityng zamknięty','Mityng zamknięty. Wyłącznie dla osób uzależnionych i tych, które chcą przestać brać.','O'), -(284,5,NULL,NULL,'CH',NULL,'CH','pl','Zamknięty w święta','Mityng odbywa się w miejscu, które zwykle jest zamknięte w dni wolne od pracy/wakacje.','FC3'), -(285,6,NULL,NULL,'CL',NULL,'CAN','pl','Świeczka','Ten mityng odbywa się przy blasku świecy.','FC2'), -(286,7,NULL,NULL,'CS',NULL,'','pl','Dzieci pod opieką','Dzieci uzależnionych mile widziane pod warunkiem odpowiedniego zachowania.','FC3'), -(287,8,NULL,NULL,'D',NULL,'DISC','pl','Dyskusja','Mityng dla wszystkich chętnych.','FC1'), -(288,9,NULL,NULL,'ES',NULL,'LANG','pl','Hiszpański','Mityng odbywa się w języku hiszpańskim.','LANG'), -(289,10,NULL,NULL,'GL',NULL,'GL','pl','LGBTQ','Mityng koncentruje się na członkach wspólnoty należących do społeczności LGBT.','FC3'), -(290,11,NULL,NULL,'IL',NULL,NULL,'pl','Choroba','Mityng koncentruje się na potrzebach przewlekle chorych członków NA.','FC1'), -(291,12,NULL,NULL,'IP',NULL,'IP','pl','Broszura Informacyjna','Mityng koncentruje się na dyskusji nad jedną z Broszur Międzynarodowych.','FC1'), -(292,13,NULL,NULL,'IW',NULL,'IW','pl','To Działa - Jak i Dlaczego','Mityng koncentruje się na dyskusji nad tekstem z \"To Działa - Jak i Dlaczego\".','FC1'), -(293,14,NULL,NULL,'JT',NULL,'JFT','pl','Właśnie Dzisiaj','Mityng koncentruje się na dyskusji nad tekstem z \"Właśnie dzisiaj\".','FC1'), -(294,15,NULL,NULL,'M',NULL,'M','pl','Mężczyźni','Mityng wyłącznie dla mężczyzn.','FC3'), -(295,16,NULL,NULL,'NC',NULL,'NC','pl','Bez Dzieci','Prosimy, by nie przyprowadzać dzieci na ten mityng.','FC3'), -(296,17,NULL,NULL,'O',NULL,'OPEN','pl','Otwarty','Mityng otwarty dla uzależnionych i nieuzależnionych. Wszyscy są mile widziani.','O'), -(297,18,NULL,NULL,'Pi',NULL,NULL,'pl','Pitch','Na tym mityngu obowiązuje format, w którym osoba, dzieląca się doświadczeniem, wybiera kolejną osobę.','FC1'), -(298,19,NULL,NULL,'RF',NULL,'VAR','pl','Zmienny format','Format tego mityngu zmienia się co mityng.','FC1'), -(299,20,NULL,NULL,'Rr',NULL,NULL,'pl','Round Robin','Na tym mityngu jest ustalona kolejność dzielenia się doświadczeniem (zwykle w koło)','FC1'), -(300,21,NULL,NULL,'SC',NULL,NULL,'pl','Kamery bezpieczeństwa','Mityng odbywa się w miejscu, w którym zamontowane są kamery bezpieczeństwa.','FC2'), -(301,22,NULL,NULL,'SD',NULL,'S-D','pl','Spikerka/dyskusja','Mityng rozpoczynany jest wypowiedzią spikera, a następnie jest otwarty do dzielenia się przez resztę uczestników.','FC1'), -(302,23,NULL,NULL,'SG',NULL,'SWG','pl','Przewodnik pracy nad Krokami','Mityng koncentruje się na dyskusji nad tekstem z \"Przewodnika do pracy nad Krokami\".','FC1'), -(303,24,NULL,NULL,'SL',NULL,NULL,'pl','ASL','W tym mityngu bierze udział tłumacz języka migowego dla osób niesłyszących.','FC2'), -(304,26,NULL,NULL,'So',NULL,'SPK','pl','Tylko spikerka','Mityng składa się tylko z wypowiedzi spikera. Inni uczestnicy nie dzielą się doświadczeniem.','FC1'), -(305,27,NULL,NULL,'St',NULL,'STEP','pl','Kroki','Mityng koncentruje się na dyskusji nad Dwunastoma Krokami Anonimowych Narkomanów.','FC1'), -(306,28,NULL,NULL,'Ti',NULL,NULL,'pl','Licznik czasu','Na tym mitngu czas wypowiedzi jest kontrolowany przez licznik czasu.','FC1'), -(307,29,NULL,NULL,'To',NULL,'TOP','pl','Dowolny temat','Temat tego mityngu jest wybierany przez spikera lub przez sumienie grupy.','FC1'), -(308,30,NULL,NULL,'Tr',NULL,'TRAD','pl','Tradycje','Mityng koncentruje się na dyskusji nad Dwunastoma Tradycjami NA.','FC1'), -(309,31,NULL,NULL,'TW',NULL,'TRAD','pl','Warsztaty z tradycji','Mityng koncentruje się na wnikliwej analizje jednej lub wielu z Dwunastu Tradycji Anonimowych Narkomanów','FC1'), -(310,32,NULL,NULL,'W',NULL,'W','pl','Kobiety','Mityng przeznaczony jedynie dla kobiet.','FC3'), -(311,33,NULL,NULL,'WC',NULL,'WCHR','pl','Wózki inwalidzkie','Mityng wyposażony w łatwy dostęp dla wózków inwalidzkich.','FC2'), -(312,34,NULL,NULL,'YP',NULL,'Y','pl','Młodzi ludzie','Mityng koncentruje się na dyskusjach nad potrzebami najmłodszych członków NA.','FC3'), -(313,35,NULL,NULL,'OE',NULL,NULL,'pl','Bez końca','Mityng bez ustalonej długości. Trwa tak długo, jak długo są na nim uczestnicy.','FC1'), -(314,36,NULL,NULL,'BK',NULL,'LIT','pl','Analiza książek','Analiza oficjalnych książek Anonimowych Narkomanów','FC1'), -(315,37,NULL,NULL,'NS',NULL,'NS','pl','Zakac palenia','Palenie w trakcie tego mityngu jest zabronione.','FC1'), -(316,38,NULL,NULL,'Ag',NULL,NULL,'pl','Agnostycy','Mityng dla ludzi o zróżnicowanych stopniach wiary.','FC1'), -(317,39,NULL,NULL,'FD',NULL,NULL,'pl','Piąty i dziesiąty krok','Dyskusja nad piątym i dziesiątym krokiem Anonimowych Narkomanów','FC1'), -(318,40,NULL,NULL,'AB',NULL,'QA','pl','Temat z koszyka','Temat mityngu wybierany jest spośród zaproponowanych niejawnie przez grupę.','FC1'), -(319,41,NULL,NULL,'ME',NULL,'MED','pl','Medytacja','Uczestnicy tego mityngu zachęcani są do wzięcia udziału w cichej medytacji.','FC1'), -(320,42,NULL,NULL,'RA',NULL,'RA','pl','Ograniczone uczestnictwo','Miejsce odbywania się mityngu nakłada ograniczenia na to, kto może wziąć udział w mityngu.','FC3'), -(321,43,NULL,NULL,'QA',NULL,'QA','pl','Pytania i odpowiedzi','Uczestnicy mogą zadawać pytania i oczekiwać odpowiedzi od innych uczestników.','FC1'), -(322,44,NULL,NULL,'CW',NULL,'CW','pl','Dzieci mile widziane','Dzieci są mile widziane.','FC3'), -(323,45,NULL,NULL,'CP',NULL,'CPT','pl','Koncepcje','Mityng koncentruje się na dyskusji nad Dwunastoma Koncepcjami Anonimowych Narkomanów.','FC1'), -(324,46,NULL,NULL,'FIN',NULL,'LANG','pl','Fiński','Mityng odbywa się w języku fińskim','LANG'), -(325,47,NULL,NULL,'ENG',NULL,'LANG','pl','Anglojęzyczny','Mityng odbywa się w języku angielskim.','LANG'), -(326,48,NULL,NULL,'PER',NULL,'LANG','pl','Perski','Mityng odbywa się w języku perskim','LANG'), -(327,49,NULL,NULL,'L/R',NULL,'LANG','pl','Litewski/rosyjski','Mityng odbywa się w języku litewskim/rosyjskim','LANG'), -(328,51,NULL,NULL,'LC',NULL,'LC','pl','Życie w czystości','Mityng koncentruje się na dyskusji nad tekstem z \"Życie w czystości: Podróż trwa nadal\".','FC1'), -(329,52,NULL,NULL,'GP',NULL,'GP','pl','Guiding Principles','Mityng koncentruje się na dyskusji nad tekstem z \"Guiding Principles - The Spirit of Our Traditions\".','FC1'), -(330,54,NULL,NULL,'VM',NULL,'VM','pl','Virtual Meeting','Meets Virtually','FC2'), -(331,55,NULL,NULL,'TC',NULL,'TC','pl','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(332,56,NULL,NULL,'HY',NULL,'HYBR','pl','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(333,1,NULL,NULL,'RC',NULL,'BEG','pt','Recém-chegados','Esta reunião tem foco nas necessidades de novos membros em NA.','FC3'), -(334,2,NULL,NULL,'BL',NULL,'LANG','pt','Bilíngue','Reunião pode acontecer em duas línguas além de Português.','LANG'), -(335,3,NULL,NULL,'TB',NULL,'BT','pt','Texto Básico','Esta reunião tem foco no debate sobre o Texto Básico de Narcóticos Anônimos.','FC1'), -(336,4,NULL,NULL,'F',NULL,'CLOSED','pt','Fechada','Esta reunião fechada para não adictos. Você deve ir apenas se acredita ter problemas com abuso de substâncias.','O'), -(337,5,NULL,NULL,'FF',NULL,'CH','pt','Fechada em feriados','Esta reunião acontece em local que geralmente é fechado em feirados.','FC3'), -(338,6,NULL,NULL,'VL',NULL,'CAN','pt','Luz de velas','Esta reunião acontece à luz de velas.','FC2'), -(339,7,NULL,NULL,'CA',NULL,'','pt','Criança sob supervisão','Bem-comportadas, crianças sob supervisão são bem-vindas.','FC3'), -(340,8,NULL,NULL,'D',NULL,'DISC','pt','Discussão','Esta reunião convida a participação de todos.','FC1'), -(341,9,NULL,NULL,'ES',NULL,'LANG','pt','Espanhol','Esta reunião acontece em Espanhol.','LANG'), -(342,10,NULL,NULL,'LGBT',NULL,'GL','pt','LGBTQ+','Reunião de interesse LGBTQ+ em NA.','FC3'), -(343,11,NULL,NULL,'DC',NULL,NULL,'pt','Doença Crônica','Esta reunião tem foco nos interesses especiais de pessoas sofrendo de doenças crônicas.','FC1'), -(344,12,NULL,NULL,'IP',NULL,'PI','pt','Panfleto Informativo','Esta reunião tem foco na discussão sobre um ou mais IPs ou Panfletos Informativos.','FC1'), -(345,13,NULL,NULL,'FUN',NULL,'IW','pt','Funciona - Como e Por quê','Esta reunião tem foco na discussão do texto do livro Funciona - Como e Por quê.','FC1'), -(346,14,NULL,NULL,'SPH',NULL,'JFT','pt','Só Por Hoje','Esta reunião tem foco na discussão do texto do livro Só Por Hoje.','FC1'), -(347,15,NULL,NULL,'H',NULL,'M','pt','Homens','Reunião de interesse masculino em NA','FC3'), -(348,16,NULL,NULL,'PC',NULL,'NC','pt','Proibido crianças','Por gentileza não trazer crianças a essa reunião.','FC3'), -(349,17,NULL,NULL,'A',NULL,'OPEN','pt','Aberta','Esta reunião é aberta para adictos e não-adictos. Todos são bem-vindos.','O'), -(350,18,NULL,NULL,'Ind',NULL,NULL,'pt','Indicação','Esta reunião tem um formato que consiste que cada pessoa que partilha escolhe a próxima pessoa a partilhar.','FC1'), -(351,19,NULL,NULL,'FR',NULL,'VAR','pt','Formato Rotativo','Esta reunião muda seu formato a cada reunião.','FC1'), -(352,20,NULL,NULL,'Rr',NULL,NULL,'pt','Round Robin','Esta reunião tem um formato fixo de partilha (geralmente em círculo.)','FC1'), -(353,21,NULL,NULL,'CV',NULL,NULL,'pt','Câmera de vigilância','Esta reunião acontece em ambiente que tem câmeras de vigilância.','FC2'), -(354,22,NULL,NULL,'TD',NULL,'S-D','pt','Temática/Discussão','Esta reunião tem um orador, em seguida é aberta a participação dos membros','FC1'), -(355,23,NULL,NULL,'EP',NULL,'SWG','pt','Estudo de Passos','Esta reunião é de estudo dos passos através do Guia Para Trabalhar os Passos de NA.','FC1'), -(356,24,NULL,NULL,'LS',NULL,NULL,'pt','LSB','Esta reunião acontece com ajuda de intérprete de LIBRAS (Língua Brasileira de Sinais).','FC2'), -(357,26,NULL,NULL,'TM',NULL,'SPK','pt','Temática','Esta reunião é do tipo temática. Não há participação dos membros na discussão.','FC1'), -(358,27,NULL,NULL,'PS',NULL,'STEP','pt','Passos','Esta reunião é de discussão dos 12 Passos de NA.','FC1'), -(359,28,NULL,NULL,'TP',NULL,NULL,'pt','Tempo de Partilha','Esta reunião tem seu tempo de partilha controlado por relógio.','FC1'), -(360,29,NULL,NULL,'To',NULL,'TOP','pt','Tópico','Esta reunião é baseada em tópico escolhida por um orador ou por consciência de grupo.','FC1'), -(361,30,NULL,NULL,'Tr',NULL,'TRAD','pt','Tradições','Esta reunião tem foco em discussão das 12 Tradições de NA.','FC1'), -(362,31,NULL,NULL,'TW',NULL,'TRAD','pt','Workshop de Tradições','Esta reunião envolve uma discussão mais detalhada de uma ou mais das Tradições de N.A.','FC1'), -(363,32,NULL,NULL,'M',NULL,'W','pt','Mulheres','Reunião de interesse feminino em NA.','FC3'), -(364,33,NULL,NULL,'CadT',NULL,'WCHR','pt','Cadeirante Total','Esta reunião tem acesso total a cadeirantes.','FC2'), -(365,34,NULL,NULL,'Jv',NULL,'Y','pt','Jovens','Esta reunião tem foco nos interesses de membros jovens em NA.','FC3'), -(366,35,NULL,NULL,'UP',NULL,NULL,'pt','Último Partilhar','Sem duração fixa. A reunião continua até todos os presentes partilharem.','FC1'), -(367,36,NULL,NULL,'EL',NULL,'LIT','pt','Estudo de Literatura','Reunião de estudo de literaturas aprovadas de NA','FC1'), -(368,37,NULL,NULL,'NF',NULL,'NS','pt','Proibido Fumar','Não é permitido fumar nessa reunião.','FC1'), -(369,38,NULL,NULL,'Ag',NULL,NULL,'pt','Agnóstico','Destinada a pessoas com diferentes graus de fé.','FC1'), -(370,39,NULL,NULL,'QD',NULL,NULL,'pt','Quinto e Décimo','Reunião de discussão sobre o Quinto e Décimo Passos','FC1'), -(371,40,NULL,NULL,'ST',NULL,'QA','pt','Sorteio de Tópico','Um tópico é escolhido através de sugestões sorteadas.','FC1'), -(372,41,NULL,NULL,'ME',NULL,'MED','pt','Meditação','Esta reunião incentiva seus participantes a se envolverem em meditação silenciosa.','FC1'), -(373,42,NULL,NULL,'AR',NULL,'RA','pt','Acesso Restrito','Esta reunião esta em local que impõe restrição de acesso às pessoas.','FC3'), -(374,43,NULL,NULL,'PR',NULL,'QA','pt','Perguntas e Respostas','Os participantes podem fazer perguntas e esperar respostas dos membros do grupo.','FC1'), -(375,44,NULL,NULL,'PC',NULL,'CW','pt','Permitido Crianças','Crianças são bem-vindas a essa reunião.','FC3'), -(376,45,NULL,NULL,'Con',NULL,'CPT','pt','Conceitos','Esta reunião tem foco na discussão dos Doze Conceitos de NA.','FC1'), -(377,46,NULL,NULL,'FIN',NULL,'LANG','pt','Filandês','Reunião em língua filandesa','LANG'), -(378,47,NULL,NULL,'ENG',NULL,'LANG','pt','Inglês','Reunião em língua inglesa.','LANG'), -(379,48,NULL,NULL,'PER',NULL,'LANG','pt','Persa','Reunião em língua persa','LANG'), -(380,49,NULL,NULL,'L/R',NULL,'LANG','pt','Lituano/Russo','Reunião em Lituano/Russo','LANG'), -(381,51,NULL,NULL,'VL',NULL,'LC','pt','Vivendo Limpo','Esta é uma reunião de discussão do livro Vivendo Limpo-A Jornada Continua.','FC1'), -(382,52,NULL,NULL,'GP',NULL,'GP','pt','Guia de Princípios','Esta é uma reunião baseada no livro Guia de Princípios - O Espírito das Nossas Tradições .','FC1'), -(383,53,NULL,NULL,'CadP',NULL,'WCHR','pt','Cadeirante Parcial','Esta reunião tem acesso parcial a cadeirante.','FC2'), -(384,54,NULL,NULL,'VM',NULL,'VM','pt','Virtual Meeting','Meets Virtually','FC2'), -(385,55,NULL,NULL,'TC',NULL,'TC','pt','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(386,56,NULL,NULL,'HY',NULL,'HYBR','pt','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(387,1,NULL,NULL,'B',NULL,'BEG','ru','Начинающие','Эта встреча посвящена потребностям новых членов NA.','FC3'), -(388,2,NULL,NULL,'BL',NULL,'LANG','ru','Двуязычное','На этом совещании могут присутствов Базового Текста Анонимных Наркоманов','LANG'), -(389,4,NULL,NULL,'C',NULL,'CLOSED','ru','Закрытая','Эта встреча закрыта для не наркоманов. Вам следует присутствовать только в том случае, если вы считаете, что у вас могут быть проблемы со злоупотреблением психоактивными веществами.','O'), -(390,5,NULL,NULL,'CH',NULL,'CH','ru','Закрыто по праздникам','Эта встреча собирается в учреждении, которое обычно закрыто в праздничные дни.','FC3'), -(391,6,NULL,NULL,'CL',NULL,'CAN','ru','Искусственное освещение','Эта встреча проводится при свечах.','FC2'), -(392,7,NULL,NULL,'CS',NULL,'','ru','Дети под присмотром','Добро пожаловать, хорошо воспитанные дети приветствуются.','FC3'), -(393,8,NULL,NULL,'D',NULL,'DISC','ru','Обсуждение','Эта встреча приглашает к участию всех участников.','FC1'), -(394,9,NULL,NULL,'ES',NULL,'LANG','ru','Испанский','Эта встреча проводится на испанском языке.','LANG'), -(395,10,NULL,NULL,'GL',NULL,'GL','ru','Геи / Лесбиянки / трансгендеры','Эта встреча посвящена потребностям геев, лесбиянок и транссексуальных членов АН.','FC3'), -(396,11,NULL,NULL,'IL',NULL,NULL,'ru','Болезнь','Эта встреча посвящена потребностям членов АН с хроническим заболеванием.','FC1'), -(397,12,NULL,NULL,'IP',NULL,'IP','ru','Информационная брошюра','Эта встреча посвящена обсуждению одной или нескольких информационных брошюр.','FC1'), -(398,13,NULL,NULL,'IW',NULL,'IW','ru','Это работает - как и почему','Эта встреча посвящена обсуждению текста «Как это работает - как и почему».','FC1'), -(399,14,NULL,NULL,'JT',NULL,'JFT','ru','Только сегодня','Эта встреча посвящена обсуждению текста \"Только Сегодня\"','FC1'), -(400,15,NULL,NULL,'M',NULL,'M','ru','Мужчины','Эта встреча предназначена только для мужчин.','FC3'), -(401,16,NULL,NULL,'NC',NULL,'NC','ru','Без детей','Пожалуйста, не приводите детей на эту встречу.','FC3'), -(402,17,NULL,NULL,'O',NULL,'OPEN','ru','Открытая','Эта встреча открыта как для наркоманов, так и для не наркоманов. Все приветствуются.','O'), -(403,18,NULL,NULL,'Pi',NULL,NULL,'ru','Питч','Эта встреча имеет формат, который состоит из каждого участника, который разделяет выбор следующего участника.','FC1'), -(404,19,NULL,NULL,'RF',NULL,'VAR','ru','Ротация','Эта встреча имеет формат, который изменяется для каждой встречи.','FC1'), -(405,20,NULL,NULL,'Rr',NULL,NULL,'ru','Говорим по кругу','Эта встреча имеет фиксированный порядок обмена опытом (высказывания по кругу.)','FC1'), -(406,21,NULL,NULL,'SC',NULL,NULL,'ru','Камеры наблюдения','Эта встреча проводится в учреждении с камерами наблюдения.','FC2'), -(407,22,NULL,NULL,'SD',NULL,'S-D','ru','Спикерская / Обсуждение','Это спикерская, а затем время для обсуждений.','FC1'), -(408,23,NULL,NULL,'SG',NULL,'SWG','ru','Руководство по Шагам АН','Эта встреча посвящена обсуждению текста руководства по шагам АН.','FC1'), -(409,24,NULL,NULL,'SL',NULL,NULL,'ru','Для глухих','Эта встреча предоставляет переводчика американского языка жестов (ASL) для глухих.','FC2'), -(410,26,NULL,NULL,'So',NULL,'SPK','ru','Только спикерская','Только спикерская. Другие участники не участвуют в обсуждении.','FC1'), -(411,27,NULL,NULL,'St',NULL,'STEP','ru','Шаги','Эта встреча посвящена обсуждению Двенадцати Шагов АН.','FC1'), -(412,28,NULL,NULL,'Ti',NULL,NULL,'ru','Таймер','Время этой встречи ограничено таймером.','FC1'), -(413,29,NULL,NULL,'To',NULL,'TOP','ru','Тема','Эта встреча основана на теме, выбранной ведущим или групповым.','FC1'), -(414,30,NULL,NULL,'Tr',NULL,'TRAD','ru','Традиции','Эта встреча посвящена обсуждению Двенадцати Традиций АН.','FC1'), -(415,31,NULL,NULL,'TW',NULL,'TRAD','ru','Мастерская Традиций','Эта встреча включает в себя подробное обсуждение одной или нескольких из двенадцати традиций А.Н.','FC1'), -(416,32,NULL,NULL,'W',NULL,'W','ru','Женская','Эта встреча предназначена для участия только женщин.','FC3'), -(417,33,NULL,NULL,'WC',NULL,'WCHR','ru','Инвалидное кресло','Эта встреча доступна для инвалидов.','FC2'), -(418,34,NULL,NULL,'YP',NULL,'Y','ru','Молодые люди','Эта встреча ориентирована на потребности молодых членов АН.','FC3'), -(419,35,NULL,NULL,'OE',NULL,NULL,'ru','Неограниченная','Нет фиксированной продолжительности. Встреча продолжается до тех пор, пока все присутствующие не смогут поделиться опытом.','FC1'), -(420,36,NULL,NULL,'BK',NULL,'LIT','ru','Книжное обучение','Утвержденные книги А.Н.','FC1'), -(421,37,NULL,NULL,'NS',NULL,'NS','ru','Не курить','Курение запрещено на этой встрече.','FC1'), -(422,38,NULL,NULL,'Ag',NULL,NULL,'ru','Агностики','Предназначен для людей с разной степенью веры.','FC1'), -(423,39,NULL,NULL,'FD',NULL,NULL,'ru','Пятый и Десятый','Обсуждение пятого шага и десятого шага','FC1'), -(424,40,NULL,NULL,'AB',NULL,'QA','ru','Коробочка','Тема выбирается из предложений, помещенных в коробочку.','FC1'), -(425,41,NULL,NULL,'ME',NULL,'MED','ru','Медитация','Эта встреча поощряет ее участников заниматься тихой медитацией.','FC1'), -(426,42,NULL,NULL,'RA',NULL,'RA','ru','Ограниченная Посещаемость','Эта встреча накладывает ограничения на посетителей.','FC3'), -(427,43,NULL,NULL,'QA',NULL,'QA','ru','Вопрос и ответ','Участники могут задавать вопросы и ожидать ответов от членов группы.','FC1'), -(428,44,NULL,NULL,'CW',NULL,'CW','ru','Дети - добро пожаловать','Дети приветствуются на этой встрече.','FC3'), -(429,45,NULL,NULL,'CP',NULL,'CPT','ru','Концепции','Эта встреча посвящена обсуждению двенадцати концепций А.Н.','FC1'), -(430,46,NULL,NULL,'FIN',NULL,'LANG','ru','Финский','финноязычная встреча','LANG'), -(431,47,NULL,NULL,'ENG',NULL,'LANG','ru','Англогоязычный','На его собрании могут присутствовать носители английского языка.','LANG'), -(432,48,NULL,NULL,'PER',NULL,'LANG','ru','Персидский','Собрание проводится на Персидском языке','LANG'), -(433,49,NULL,NULL,'L/R',NULL,'LANG','ru','Русский\\литовский','Русскоговорящие собрания АН','LANG'), -(434,51,NULL,NULL,'LC',NULL,'LC','ru','Жить Чистыми','Это обсуждение книги АН «Живи чисто - путешествие продолжается».','FC1'), -(435,52,NULL,NULL,'GP',NULL,'GP','ru','Руководящие принципы','Это обсуждение книги АН «Руководящие принципы - дух наших традиций».','FC1'), -(436,54,NULL,NULL,'VM',NULL,'VM','ru','Виртуальная встреча','Собираемся онлайн','FC2'), -(437,55,NULL,NULL,'TC',NULL,'TC','ru','Временно закрыто','Объект временно закрыт','FC2'), -(438,56,NULL,NULL,'HY',NULL,'HYBR','ru','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(439,4,NULL,NULL,'S',NULL,'CLOSED','sv','Slutet möte','Ett slutet NA möte är för de individer som identifierar sig som beroende eller för de som är osäkra och tror att de kanske har drogproblem.','FC3'), -(440,15,NULL,NULL,'M',NULL,'M','sv','Mansmöte','Detta möte är endast öppet för män.','FC3'), -(441,17,NULL,NULL,'Ö',NULL,'OPEN','sv','Öppet möte','Ett öppet möte är ett NA-möte där vem som helst som är intresserad av hur vi har funnit tillfrisknande från beroendesjukdomen kan närvara.','FC3'), -(442,47,NULL,NULL,'ENG',NULL,NULL,'sv','Engelska','Engelsktalande möte','FC3'), -(443,48,NULL,NULL,'PER',NULL,NULL,'sv','Persiskt','Persiskt möte','FC1'), -(444,32,NULL,NULL,'K',NULL,'W','sv','Kvinnomöte','Detta möte är endast öppet för kvinnor.','FC3'), -(445,33,NULL,NULL,'RL',NULL,'WCHR','sv','Rullstolsvänlig lokal','Detta möte är tillgängligt för rullstolsbundna.','FC2'), -(446,47,NULL,NULL,'ENG',NULL,NULL,'sv','Engelska','Engelsktalande möte','FC3'), -(447,54,NULL,NULL,'VM',NULL,'VM','sv','Virtual Meeting','Meets Virtually','FC2'), -(448,55,NULL,NULL,'TC',NULL,'TC','sv','Temporarily Closed Facility','Facility is Temporarily Closed','FC2'), -(449,56,NULL,NULL,'HY',NULL,'HYBR','sv','Hybrid Meeting','Meets Virtually and In-person','FC2'), -(450,1,NULL,NULL,'B',NULL,'BEG','fa','تازه واردان','این جلسه بر روی نیازهای تازه واردان در معتادان گمنام متمرکز میباشد','FC3'), -(451,2,NULL,NULL,'BL',NULL,'LANG','fa','دو زبانه','این جلسه پذیرای شرکت کنندگان انگلیسی زبان و دیگر زبان ها میباشد','LANG'), -(452,3,NULL,NULL,'BT',NULL,'BT','fa','کتاب پایه','این جلسه متمرکز بر روی بحث درباره کتاب پایه معتادان گمنام میباشد','FC1'), -(453,4,NULL,NULL,'C',NULL,'CLOSED','fa','بسته','این جلسه برای افراد غیر معتاد بسته میباشد. شما تنها اگر فکر میکنید با مواد خدر مشکل دارید میتوانید شرکت کنید','O'), -(454,5,NULL,NULL,'CH',NULL,'CH','fa','بسته در روزهای تعطیل','این جلسات در روزهای تعطیل برگزار نمیگردد','FC3'), -(455,6,NULL,NULL,'CL',NULL,'CAN','fa','شمع روشن','این جلسه بهمراه شمع روشن برگزار میگردد','FC2'), -(456,7,NULL,NULL,'CS',NULL,'','fa','کودکان بی سرپرست','خوش رفتاری','FC3'), -(457,8,NULL,NULL,'D',NULL,'DISC','fa','بحث و گفتگو','این جلسه از تمامی شرکت کنندگان دعوت به بحث میکند','FC1'), -(458,9,NULL,NULL,'ES',NULL,'LANG','fa','اسپانیایی','این جلسه به زبان اسپانیایی برگزار میگردد','LANG'), -(459,10,NULL,NULL,'GL',NULL,'GL','fa','مردان همجنس باز/زنان همجنس باز/تغییر جنسیتی ها','این جلسه به نیازهای همجنس بازان/همجنس خواهان میپردازد','FC3'), -(460,11,NULL,NULL,'IL',NULL,NULL,'fa','بیماران','این جلسه به نیازهای اعضا با بیماری های مزمن متمرکز میباشد','FC1'), -(461,12,NULL,NULL,'IP',NULL,'IP','fa','پمفلت های اطلاعاتی','این جلسه به بررسی و بحث در مورد یک یا چند پمفلت متمرکز میباشد','FC1'), -(462,13,NULL,NULL,'IW',NULL,'IW','fa','چگونگی عملکرد','این جلسه با موضوع بحث در مورد کتاب چگونگی عملکرد برگزار میگردد','FC1'), -(463,14,NULL,NULL,'JT',NULL,'JFT','fa','فقط برای امروز','این جلسه با موضوع بحث درمورد کتاب فقط برای امروز متمرکز میباشد','FC1'), -(464,15,NULL,NULL,'M',NULL,'M','fa','مردان','این جلسه فقط مخصوص آقایان مباشد','FC3'), -(465,16,NULL,NULL,'NC',NULL,'NC','fa','ممنوعیت ورود کودکان','لطفاً کودکان را به این جلسه نیاورید','FC3'), -(466,17,NULL,NULL,'O',NULL,'OPEN','fa','باز','این جلسه برای کلیه اعضا معتاد و همچنین غیر معتادان باز میباشد','O'), -(467,18,NULL,NULL,'Pi',NULL,NULL,'fa','انتخابی','فورمت این جلسه بصورتیست که هر مشارکت کننده میتواند نفر بعدی را جهت مشارکت انتخاب نماید','FC1'), -(468,19,NULL,NULL,'RF',NULL,'VAR','fa','فورمت چرخشی','فورمت این جلسه در هر جلسه متغیر میباشد','FC1'), -(469,20,NULL,NULL,'Rr',NULL,NULL,'fa','مشارکت موضوع دار','این جلسه دارای یکسری موضوعات خاص میباشد (معمولاً بصورت چرخشی)','FC1'), -(470,21,NULL,NULL,'SC',NULL,NULL,'fa','دوربین مداربسته','این جلسه در مکانهای مجهز به دوربین مدار بسته برگزار میگردد','FC2'), -(471,22,NULL,NULL,'SD',NULL,'S-D','fa','سخنرانی/بحث','این جلسه توسط یک سخنران گردانندگی میگردد','FC1'), -(472,23,NULL,NULL,'SG',NULL,'SWG','fa','راهنمای کارکرد قدم','این جلسه با موضوع بررسی و بحث در مورد کتاب راهنمای کاکرد قدم برگزار میگردد','FC1'), -(473,24,NULL,NULL,'SL',NULL,NULL,'fa','تفسیر به زبان انگلیسی برای ناشنوایان','این جلسه بهمراه مفسر انگلیسی برای ناشنوایان برگزار میگردد','FC2'), -(474,26,NULL,NULL,'So',NULL,'SPK','fa','فقط سخنرانی','این جلسه فقط یک سخنران دارد. دیگر شرکت کنندگان حق مشارکت ندارند','FC1'), -(475,27,NULL,NULL,'St',NULL,'STEP','fa','قدم','این جلسه با موضوع بحث درمورد قدم های دوازده گانه معتادان گمنام برگزار میگردد','FC1'), -(476,28,NULL,NULL,'Ti',NULL,NULL,'fa','زمان سنج','در این جلسه زمان مشارکت توسط زمان سنج محاسبه و کنترل میگردد','FC1'), -(477,29,NULL,NULL,'To',NULL,'TOP','fa','موضوع','این جلسه برپایه موضوع انتخابی توسط یک سخنران یا وجدان گروهی برگزار میگردد','FC1'), -(478,30,NULL,NULL,'Tr',NULL,'TRAD','fa','سنت ها','این جلسه با موضوع بحث درمورد سنت های دوازده گانه معتادان گمنام برگزار میگردد','FC1'), -(479,31,NULL,NULL,'TW',NULL,'TRAD','fa','کارگاه سنت ها','این جلسه با موضوع بررسی جزئیاتی یک یاچند سنت معتادان گمنام برگزار میگردد','FC1'), -(480,32,NULL,NULL,'W',NULL,'W','fa','بانوان','این جلسه فقط مخصوص خانم ها مباشد','FC3'), -(481,33,NULL,NULL,'WC',NULL,'WCHR','fa','ویلچر','در این جلسه ویلچر در دسترس میباشد','FC2'), -(482,34,NULL,NULL,'YP',NULL,'Y','fa','جوانان','این جلسه بر روی نیازهای اعضا جوان متمرکز میباشد','FC3'), -(483,35,NULL,NULL,'OE',NULL,NULL,'fa','بی پایان','بدون مدت زمان ثابت. این جلسه تا زمانی که تمامی اعضا درخواست کننده مشارکت، مشارکت نکرده باشند به اتمام نمیرسد','FC1'), -(484,36,NULL,NULL,'BK',NULL,'LIT','fa','کتاب خوانی','کتابخوانی نشریات معتادان گمنام','FC1'), -(485,37,NULL,NULL,'NS',NULL,'NS','fa','مصرف دخانیات ممنوع','مصرف دخانیات در این جلسه ممنوع میباشد','FC1'), -(486,38,NULL,NULL,'Ag',NULL,NULL,'fa','بی اعتقادان','جلسه مخصوص اعضا باهر میزان درجه از اعتقاد','FC1'), -(487,39,NULL,NULL,'FD',NULL,NULL,'fa','پنج و ده','جلسه بحث و بررسی قدم های پنج و ده','FC1'), -(488,40,NULL,NULL,'AB',NULL,'QA','fa','انتخاب موضوع از سبد','انتخاب یک موضوع توسط پیشنهادات ارائه شده در سبد','FC1'), -(489,41,NULL,NULL,'ME',NULL,'MED','fa','مراقبه','این جلسه اعضا شرکت کننده را به مراقبه کامل تشویق مینماید','FC1'), -(490,42,NULL,NULL,'RA',NULL,'RA','fa','محدودیت شرکت کننده','این جلسه دارای محدودیت شرکت کنندگان میباشد','FC3'), -(491,43,NULL,NULL,'QA',NULL,'QA','fa','پرسش و پاسخ','اعضا میتوانند سوالات خود را مطرح نموده و منتظر دریافت پاسخ از دیگر اعضا باشند','FC1'), -(492,44,NULL,NULL,'CW',NULL,'CW','fa','با حضور کودکان','حضور کودکان در این جلسه بلامانع میباشد','FC3'), -(493,45,NULL,NULL,'CP',NULL,'CPT','fa','مفاهیم','این جلسه با موضوع بحث درمورد مفاهیم دوازده گانه معتادان گمنام برگزار میگردد','FC1'), -(494,46,NULL,NULL,'FIN',NULL,'LANG','fa','فنلاندی','جلسه به زبان فنلاندی','LANG'), -(495,47,NULL,NULL,'ENG',NULL,'LANG','fa','انگلیسی','این جلسه میتواند با حضور اعضا انگلیسی زبان نیز برگزار گردد','LANG'), -(496,48,NULL,NULL,'PER',NULL,'LANG','fa','فارسی','جلسه به زبان فارسی','LANG'), -(497,49,NULL,NULL,'L/R',NULL,'LANG','fa','لیتوانیایی/روسی','جلسه به زبان های لیتوانیایی/روسی','LANG'), -(498,51,NULL,NULL,'LC',NULL,'LC','fa','پاک زیستن','این جلسه با موضوع بررسی و بحث در مورد کتاب پاک زیستن - سفر ادامه دارد، برگزار میگردد','FC1'), -(499,52,NULL,NULL,'GP',NULL,'GP','fa','روح سنت ها','این جلسه با موضوع بررسی و بحث در مورد کتاب روح سنت ها برگزار میگردد','FC1'); -/*!40000 ALTER TABLE `na_comdef_formats` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_meetings_data` --- - -DROP TABLE IF EXISTS `na_comdef_meetings_data`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_meetings_data` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `meetingid_bigint` bigint(20) unsigned NOT NULL, - `key` varchar(32) NOT NULL, - `field_prompt` varchar(255) DEFAULT NULL, - `lang_enum` varchar(7) DEFAULT NULL, - `visibility` int(11) DEFAULT NULL, - `data_string` varchar(255) DEFAULT NULL, - `data_bigint` bigint(20) DEFAULT NULL, - `data_double` double DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `data_bigint` (`data_bigint`), - KEY `data_double` (`data_double`), - KEY `meetingid_bigint` (`meetingid_bigint`), - KEY `lang_enum` (`lang_enum`), - KEY `key` (`key`), - KEY `visibility` (`visibility`), - FULLTEXT KEY `na_comdef_meetings_data_data_string_fulltext` (`data_string`) -) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_meetings_data` --- - -LOCK TABLES `na_comdef_meetings_data` WRITE; -/*!40000 ALTER TABLE `na_comdef_meetings_data` DISABLE KEYS */; -INSERT INTO `na_comdef_meetings_data` VALUES -(1,0,'meeting_name','Meeting Name','en',0,'Meeting Name',NULL,NULL), -(2,0,'location_text','Location Name','en',0,'Location Name',NULL,NULL), -(3,0,'location_info','Additional Location Information','en',0,'Additional Location Information',NULL,NULL), -(4,0,'location_street','Street Address','en',0,'Street Address',NULL,NULL), -(5,0,'location_city_subsection','Borough','en',0,'Borough',NULL,NULL), -(6,0,'location_neighborhood','Neighborhood','en',0,'Neighborhood',NULL,NULL), -(7,0,'location_municipality','Town','en',0,'Town',NULL,NULL), -(8,0,'location_sub_province','County','en',0,'County',NULL,NULL), -(9,0,'location_province','State','en',0,'State',NULL,NULL), -(10,0,'location_postal_code_1','Zip Code','en',0,NULL,0,NULL), -(11,0,'location_nation','Nation','en',0,'Nation',NULL,NULL), -(12,0,'comments','Comments','en',0,'Comments',NULL,NULL), -(13,0,'train_lines','Train Lines','en',0,NULL,NULL,NULL), -(14,0,'bus_lines','Bus Lines','en',0,NULL,NULL,NULL), -(15,0,'contact_phone_2','Contact 2 Phone','en',1,'Contact 2 Phone',NULL,NULL), -(16,0,'contact_email_2','Contact 2 Email','en',1,'Contact 2 Email',NULL,NULL), -(17,0,'contact_name_2','Contact 2 Name','en',1,'Contact 2 Name',NULL,NULL), -(18,0,'contact_phone_1','Contact 1 Phone','en',1,'Contact 1 Phone',NULL,NULL), -(19,0,'contact_email_1','Contact 1 Email','en',1,'Contact 1 Email',NULL,NULL), -(20,0,'contact_name_1','Contact 1 Name','en',1,'Contact 1 Name',NULL,NULL), -(21,0,'phone_meeting_number','Phone Meeting Dial-in Number','en',0,'Phone Meeting Dial-in Number',NULL,NULL), -(22,0,'virtual_meeting_link','Virtual Meeting Link','en',0,'Virtual Meeting Link',NULL,NULL), -(23,0,'virtual_meeting_additional_info','Virtual Meeting Additional Info','en',0,'Virtual Meeting Additional Info',NULL,NULL); -/*!40000 ALTER TABLE `na_comdef_meetings_data` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_meetings_longdata` --- - -DROP TABLE IF EXISTS `na_comdef_meetings_longdata`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_meetings_longdata` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `meetingid_bigint` bigint(20) unsigned NOT NULL, - `key` varchar(32) NOT NULL, - `field_prompt` varchar(255) DEFAULT NULL, - `lang_enum` varchar(7) DEFAULT NULL, - `visibility` int(11) DEFAULT NULL, - `data_blob` text DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `meetingid_bigint` (`meetingid_bigint`), - KEY `lang_enum` (`lang_enum`), - KEY `field_prompt` (`field_prompt`), - KEY `key` (`key`), - KEY `visibility` (`visibility`), - FULLTEXT KEY `na_comdef_meetings_longdata_data_blob_fulltext` (`data_blob`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_meetings_longdata` --- - -LOCK TABLES `na_comdef_meetings_longdata` WRITE; -/*!40000 ALTER TABLE `na_comdef_meetings_longdata` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_comdef_meetings_longdata` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_meetings_main` --- - -DROP TABLE IF EXISTS `na_comdef_meetings_main`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_meetings_main` ( - `id_bigint` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `root_server_id` bigint(20) unsigned DEFAULT NULL, - `source_id` bigint(20) unsigned DEFAULT NULL, - `worldid_mixed` varchar(255) DEFAULT NULL, - `shared_group_id_bigint` bigint(20) DEFAULT NULL, - `service_body_bigint` bigint(20) unsigned NOT NULL, - `weekday_tinyint` tinyint(3) unsigned DEFAULT NULL, - `venue_type` tinyint(3) unsigned DEFAULT NULL, - `start_time` time DEFAULT NULL, - `duration_time` time DEFAULT NULL, - `time_zone` varchar(40) DEFAULT NULL, - `formats` varchar(255) DEFAULT NULL, - `lang_enum` varchar(7) DEFAULT NULL, - `longitude` double DEFAULT NULL, - `latitude` double DEFAULT NULL, - `published` tinyint(4) NOT NULL DEFAULT 0, - `email_contact` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id_bigint`), - KEY `weekday_tinyint` (`weekday_tinyint`), - KEY `venue_type` (`venue_type`), - KEY `service_body_bigint` (`service_body_bigint`), - KEY `start_time` (`start_time`), - KEY `duration_time` (`duration_time`), - KEY `time_zone` (`time_zone`), - KEY `formats` (`formats`), - KEY `lang_enum` (`lang_enum`), - KEY `worldid_mixed` (`worldid_mixed`), - KEY `shared_group_id_bigint` (`shared_group_id_bigint`), - KEY `longitude` (`longitude`), - KEY `latitude` (`latitude`), - KEY `published` (`published`), - KEY `email_contact` (`email_contact`), - KEY `root_server_id_source_id` (`root_server_id`,`source_id`), - CONSTRAINT `na_comdef_meetings_main_root_server_id_foreign` FOREIGN KEY (`root_server_id`) REFERENCES `na_root_servers` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_meetings_main` --- - -LOCK TABLES `na_comdef_meetings_main` WRITE; -/*!40000 ALTER TABLE `na_comdef_meetings_main` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_comdef_meetings_main` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_service_bodies` --- - -DROP TABLE IF EXISTS `na_comdef_service_bodies`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_service_bodies` ( - `id_bigint` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `root_server_id` bigint(20) unsigned DEFAULT NULL, - `source_id` bigint(20) unsigned DEFAULT NULL, - `name_string` varchar(255) NOT NULL, - `description_string` text NOT NULL, - `lang_enum` varchar(7) NOT NULL DEFAULT 'en', - `worldid_mixed` varchar(255) DEFAULT NULL, - `kml_file_uri_string` varchar(255) DEFAULT NULL, - `principal_user_bigint` bigint(20) unsigned DEFAULT NULL, - `editors_string` varchar(255) DEFAULT NULL, - `uri_string` varchar(255) DEFAULT NULL, - `sb_type` varchar(32) DEFAULT NULL, - `sb_owner` bigint(20) unsigned DEFAULT NULL, - `sb_owner_2` bigint(20) unsigned DEFAULT NULL, - `sb_meeting_email` varchar(255) NOT NULL, - PRIMARY KEY (`id_bigint`), - KEY `worldid_mixed` (`worldid_mixed`), - KEY `kml_file_uri_string` (`kml_file_uri_string`), - KEY `principal_user_bigint` (`principal_user_bigint`), - KEY `editors_string` (`editors_string`), - KEY `lang_enum` (`lang_enum`), - KEY `uri_string` (`uri_string`), - KEY `sb_type` (`sb_type`), - KEY `sb_owner` (`sb_owner`), - KEY `sb_owner_2` (`sb_owner_2`), - KEY `sb_meeting_email` (`sb_meeting_email`), - KEY `root_server_id_source_id` (`root_server_id`,`source_id`), - CONSTRAINT `na_comdef_service_bodies_root_server_id_foreign` FOREIGN KEY (`root_server_id`) REFERENCES `na_root_servers` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_service_bodies` --- - -LOCK TABLES `na_comdef_service_bodies` WRITE; -/*!40000 ALTER TABLE `na_comdef_service_bodies` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_comdef_service_bodies` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_comdef_users` --- - -DROP TABLE IF EXISTS `na_comdef_users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_comdef_users` ( - `id_bigint` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_level_tinyint` tinyint(3) unsigned NOT NULL DEFAULT 0, - `name_string` varchar(255) NOT NULL, - `description_string` text NOT NULL, - `email_address_string` varchar(255) NOT NULL, - `login_string` varchar(255) NOT NULL, - `password_string` varchar(255) NOT NULL, - `last_access_datetime` datetime NOT NULL DEFAULT '1970-01-01 00:00:00', - `lang_enum` varchar(7) NOT NULL DEFAULT 'en', - `owner_id_bigint` bigint(20) NOT NULL DEFAULT -1, - PRIMARY KEY (`id_bigint`), - UNIQUE KEY `login_string` (`login_string`), - KEY `user_level_tinyint` (`user_level_tinyint`), - KEY `email_address_string` (`email_address_string`), - KEY `last_access_datetime` (`last_access_datetime`), - KEY `lang_enum` (`lang_enum`), - KEY `owner_id_bigint` (`owner_id_bigint`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_comdef_users` --- - -LOCK TABLES `na_comdef_users` WRITE; -/*!40000 ALTER TABLE `na_comdef_users` DISABLE KEYS */; -INSERT INTO `na_comdef_users` VALUES -(1,1,'Server Administrator','Main Server Administrator','','serveradmin','$2y$10$wwu/pk1IUY3X3ppzoJvDJ.EWqIgZ1A4qyZHCrFNaN0r9RLHagTZGG','1970-01-01 00:00:00','en',-1); -/*!40000 ALTER TABLE `na_comdef_users` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_migrations` --- - -DROP TABLE IF EXISTS `na_migrations`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_migrations` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `migration` varchar(255) NOT NULL, - `batch` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_migrations` --- - -LOCK TABLES `na_migrations` WRITE; -/*!40000 ALTER TABLE `na_migrations` DISABLE KEYS */; -INSERT INTO `na_migrations` VALUES -(1,'1900_01_01_000000_create_sessions_table',1), -(2,'1901_01_01_000000_legacy_migrations',1), -(3,'1902_01_01_000000_create_initial_schema',1), -(4,'1903_01_01_000000_innodb_db_version',1), -(5,'1904_01_01_000000_innodb_meetings_data',1), -(6,'1905_01_01_000000_innodb_meetings_longdata',1), -(7,'1906_01_01_000000_innodb_formats',1), -(8,'1907_01_01_000000_innodb_meetings_main',1), -(9,'1908_01_01_000000_innodb_service_bodies',1), -(10,'1909_01_01_000000_innodb_users',1), -(11,'1910_01_01_000000_innodb_changes',1), -(12,'1911_01_01_000000_trim_whitespace',1), -(13,'2019_12_14_000001_create_personal_access_tokens_table',1), -(14,'2023_05_16_223943_format_types',1), -(15,'2024_06_12_164303_fix_meeting_lang_enum',1), -(16,'2024_07_20_203802_fix_admin_user_owners',1); -/*!40000 ALTER TABLE `na_migrations` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_personal_access_tokens` --- - -DROP TABLE IF EXISTS `na_personal_access_tokens`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_personal_access_tokens` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `tokenable_type` varchar(255) NOT NULL, - `tokenable_id` bigint(20) unsigned NOT NULL, - `name` varchar(255) NOT NULL, - `token` varchar(64) NOT NULL, - `abilities` text DEFAULT NULL, - `last_used_at` timestamp NULL DEFAULT NULL, - `expires_at` timestamp NULL DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `na_personal_access_tokens_token_unique` (`token`), - KEY `na_personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`,`tokenable_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_personal_access_tokens` --- - -LOCK TABLES `na_personal_access_tokens` WRITE; -/*!40000 ALTER TABLE `na_personal_access_tokens` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_personal_access_tokens` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_root_server_statistics` --- - -DROP TABLE IF EXISTS `na_root_server_statistics`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_root_server_statistics` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `root_server_id` bigint(20) unsigned NOT NULL, - `num_zones` int(10) unsigned NOT NULL, - `num_regions` int(10) unsigned NOT NULL, - `num_areas` int(10) unsigned NOT NULL, - `num_groups` int(10) unsigned NOT NULL, - `num_total_meetings` int(10) unsigned NOT NULL, - `num_in_person_meetings` int(10) unsigned NOT NULL, - `num_virtual_meetings` int(10) unsigned NOT NULL, - `num_hybrid_meetings` int(10) unsigned NOT NULL, - `num_unknown_meetings` int(10) unsigned NOT NULL, - `is_latest` tinyint(1) NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `na_root_server_statistics_root_server_id_foreign` (`root_server_id`), - KEY `is_latest` (`is_latest`), - KEY `is_latest_root_server_id` (`is_latest`,`root_server_id`), - CONSTRAINT `na_root_server_statistics_root_server_id_foreign` FOREIGN KEY (`root_server_id`) REFERENCES `na_root_servers` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_root_server_statistics` --- - -LOCK TABLES `na_root_server_statistics` WRITE; -/*!40000 ALTER TABLE `na_root_server_statistics` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_root_server_statistics` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_root_servers` --- - -DROP TABLE IF EXISTS `na_root_servers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_root_servers` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `source_id` bigint(20) unsigned NOT NULL, - `name` varchar(255) NOT NULL, - `url` varchar(255) NOT NULL, - `server_info` text DEFAULT NULL, - `last_successful_import` datetime DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_root_servers` --- - -LOCK TABLES `na_root_servers` WRITE; -/*!40000 ALTER TABLE `na_root_servers` DISABLE KEYS */; -/*!40000 ALTER TABLE `na_root_servers` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `na_sessions` --- - -DROP TABLE IF EXISTS `na_sessions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `na_sessions` ( - `id` varchar(255) NOT NULL, - `user_id` bigint(20) unsigned DEFAULT NULL, - `ip_address` varchar(45) DEFAULT NULL, - `user_agent` text DEFAULT NULL, - `payload` text NOT NULL, - `last_activity` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `na_sessions_user_id_index` (`user_id`), - KEY `na_sessions_last_activity_index` (`last_activity`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `na_sessions` --- - -LOCK TABLES `na_sessions` WRITE; -/*!40000 ALTER TABLE `na_sessions` DISABLE KEYS */; -INSERT INTO `na_sessions` VALUES -('4lISohRRKEYSvJpxRYMw94j06dw6WNagcbJB9Gmo',NULL,'192.168.65.1','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15','YTo0OntzOjY6Il90b2tlbiI7czo0MDoiVk5Lc1BCUG9pNjJENXUxU0YwQXljYjFZbUJJdzlEajJFZTdNZzhxRyI7czo5OiJsYW5nX2VudW0iO3M6MjoiZW4iO3M6OToiX3ByZXZpb3VzIjthOjE6e3M6MzoidXJsIjtzOjMzOiJodHRwOi8vbG9jYWxob3N0OjgwMDAvbWFpbl9zZXJ2ZXIiO31zOjY6Il9mbGFzaCI7YToyOntzOjM6Im9sZCI7YTowOnt9czozOiJuZXciO2E6MDp7fX19',1732564880); -/*!40000 ALTER TABLE `na_sessions` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*M!100616 SET NOTE_VERBOSITY=@OLD_NOTE_VERBOSITY */; - --- Dump completed on 2024-11-25 20:02:57 diff --git a/src/app/Http/Middleware/DatabaseMigrations.php b/src/app/Http/Middleware/DatabaseMigrations.php index a1da89061..c98b09e33 100644 --- a/src/app/Http/Middleware/DatabaseMigrations.php +++ b/src/app/Http/Middleware/DatabaseMigrations.php @@ -52,7 +52,7 @@ private function migrationsShouldRun(): bool return true; } - if (!$this->migrationRepository->migrationExists('2024_07_20_203802_fix_admin_user_owners')) { + if (!$this->migrationRepository->migrationExists('2025_10_09_160510_add_serveradmin_if_needed.php')) { return true; } diff --git a/src/app/LegacyConfig.php b/src/app/LegacyConfig.php index ff2082b20..fd7a981af 100644 --- a/src/app/LegacyConfig.php +++ b/src/app/LegacyConfig.php @@ -59,7 +59,7 @@ private static function loadConfig() require($legacyConfigFile); } else { die('

Configuration Problem

-

The file auto-config.inc.php seems to be missing.

+

The file auto-config.inc.php was not found.

If this is a brand new BMLT server installation, please see the installation instructions. The latest version of the instructions is available at diff --git a/src/database/migrations/2025_10_09_160510_add_serveradmin_if_needed.php b/src/database/migrations/2025_10_09_160510_add_serveradmin_if_needed.php new file mode 100644 index 000000000..4b7fcab31 --- /dev/null +++ b/src/database/migrations/2025_10_09_160510_add_serveradmin_if_needed.php @@ -0,0 +1,36 @@ +where('user_level_tinyint', 1)->count(); + if ($n == 0) { + DB::table('comdef_users')->insert([ + 'user_level_tinyint' => 1, + 'name_string' => 'Server Administrator', + 'description_string' => 'Main Server Administrator', + 'email_address_string' => '', + 'login_string' => 'serveradmin', + 'password_string' => Hash::make('change-this-password-first-thing') + ]); + }; + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; From a89a5992ca6b8208bea302f8daf5d5cc9a418536 Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Mon, 13 Oct 2025 10:38:09 -0400 Subject: [PATCH 006/118] ensure unqiue slugs (#1301) --- src/app/Http/Resources/Query/TsmlMeetingResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/Http/Resources/Query/TsmlMeetingResource.php b/src/app/Http/Resources/Query/TsmlMeetingResource.php index d1dacf8e8..3ad83e30a 100644 --- a/src/app/Http/Resources/Query/TsmlMeetingResource.php +++ b/src/app/Http/Resources/Query/TsmlMeetingResource.php @@ -94,7 +94,7 @@ public function toArray($request): array 'coordinates' => $this->venue_type == 2 ? null : (($this->latitude && $this->longitude) ? "{$this->latitude},{$this->longitude}" : null), - 'slug' => \Str::slug($allData['meeting_name']), + 'slug' => \Str::slug($allData['meeting_name']) . '-' . $this->id_bigint, 'updated' => $this->updated_at ?? null, 'region' => $this->serviceBody->name_string ?? '', 'regions' => [$this->serviceBody->name_string ?? ''], From c0aba28e526d72d51c9c74bb9e78a48b2fb89ae1 Mon Sep 17 00:00:00 2001 From: jbraswell <10187286+jbraswell@users.noreply.github.com> Date: Mon, 13 Oct 2025 11:29:52 -0400 Subject: [PATCH 007/118] fix migrations check (#1302) --- src/app/Http/Middleware/DatabaseMigrations.php | 4 ++-- src/tests/Feature/DatabaseMigrationsTest.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/tests/Feature/DatabaseMigrationsTest.php diff --git a/src/app/Http/Middleware/DatabaseMigrations.php b/src/app/Http/Middleware/DatabaseMigrations.php index c98b09e33..a69fb0a21 100644 --- a/src/app/Http/Middleware/DatabaseMigrations.php +++ b/src/app/Http/Middleware/DatabaseMigrations.php @@ -46,13 +46,13 @@ public function handle(Request $request, Closure $next) return $next($request); } - private function migrationsShouldRun(): bool + public function migrationsShouldRun(): bool { if (!Schema::hasTable('migrations')) { return true; } - if (!$this->migrationRepository->migrationExists('2025_10_09_160510_add_serveradmin_if_needed.php')) { + if (!$this->migrationRepository->migrationExists('2025_10_09_160510_add_serveradmin_if_needed')) { return true; } diff --git a/src/tests/Feature/DatabaseMigrationsTest.php b/src/tests/Feature/DatabaseMigrationsTest.php new file mode 100644 index 000000000..ae22dc871 --- /dev/null +++ b/src/tests/Feature/DatabaseMigrationsTest.php @@ -0,0 +1,18 @@ +assertFalse($middleware->migrationsShouldRun()); + } +} From 390678f8eab203f0e977a434d304a19e92613a9b Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Mon, 13 Oct 2025 20:56:27 -0400 Subject: [PATCH 008/118] upgrade @googlemaps/js-api-loader to v2 and centralize initialization (#1303) --- src/package-lock.json | 29 +++++-------------- src/package.json | 2 +- .../js/components/MeetingEditForm.svelte | 10 ++++--- src/resources/js/lib/geocoder.ts | 14 ++------- src/resources/js/lib/googleMapsLoader.ts | 17 +++++++++++ 5 files changed, 35 insertions(+), 37 deletions(-) create mode 100644 src/resources/js/lib/googleMapsLoader.ts diff --git a/src/package-lock.json b/src/package-lock.json index 6f8afb047..43d08a718 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -6,7 +6,7 @@ "": { "dependencies": { "@felte/validator-yup": "^1.1.4", - "@googlemaps/js-api-loader": "^1.16.8", + "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", "bmlt-server-client": "^1.3.3", @@ -1403,10 +1403,13 @@ "license": "MIT" }, "node_modules/@googlemaps/js-api-loader": { - "version": "1.16.10", - "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.10.tgz", - "integrity": "sha512-c2erv2k7P2ilYzMmtYcMgAR21AULosQuUHJbStnrvRk2dG93k5cqptDrh9A8p+ZNlyhiqEOgHW7N9PAizdUM7Q==", - "license": "Apache-2.0" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-2.0.1.tgz", + "integrity": "sha512-YUtKJSWH6FiE/6Ii+NP+WfkvoZ55DLwyqthKmVYxZZwn/ny310dvz9Zw3cO1besEhGxA9lW7Ctjmzae1putjXQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/google.maps": "^3.53.1" + } }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -3336,7 +3339,6 @@ "version": "3.58.1", "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/graceful-fs": { @@ -10160,21 +10162,6 @@ "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/src/package.json b/src/package.json index c85ecc46c..b3d76b441 100644 --- a/src/package.json +++ b/src/package.json @@ -54,7 +54,7 @@ }, "dependencies": { "@felte/validator-yup": "^1.1.4", - "@googlemaps/js-api-loader": "^1.16.8", + "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", "bmlt-server-client": "^1.3.3", diff --git a/src/resources/js/components/MeetingEditForm.svelte b/src/resources/js/components/MeetingEditForm.svelte index 9dca25a09..24617d8e9 100644 --- a/src/resources/js/components/MeetingEditForm.svelte +++ b/src/resources/js/components/MeetingEditForm.svelte @@ -19,7 +19,10 @@ import { formIsDirty } from '../lib/utils'; import { timeZones, timeZoneGroups } from '../lib/timeZone/timeZones'; import { tzFind } from '../lib/timeZone/find'; - import { Geocoder, createGoogleMapsLoader } from '../lib/geocoder'; + import { Geocoder } from '../lib/geocoder'; + import { initGoogleMaps } from '../lib/googleMapsLoader'; + import { importLibrary } from '@googlemaps/js-api-loader'; + import type { Format, Meeting, MeetingPartialUpdate, ServiceBody } from 'bmlt-server-client'; import { translations } from '../stores/localization'; import MeetingDeleteModal from './MeetingDeleteModal.svelte'; @@ -610,9 +613,8 @@ if (!mapElement) return; try { - const loader = createGoogleMapsLoader(globalSettings.googleApiKey); - const { Map } = await loader.importLibrary('maps'); - + await initGoogleMaps(globalSettings.googleApiKey); + const [{ Map }] = await Promise.all([importLibrary('maps'), importLibrary('marker')]); map = new Map(mapElement, { center: { lat: latitude, lng: longitude }, zoom: Math.min(Number(globalSettings.centerZoom ?? 18), 15), diff --git a/src/resources/js/lib/geocoder.ts b/src/resources/js/lib/geocoder.ts index 6cfcf27f2..aa37abb7c 100644 --- a/src/resources/js/lib/geocoder.ts +++ b/src/resources/js/lib/geocoder.ts @@ -1,14 +1,6 @@ import type { MeetingPartialUpdate } from 'bmlt-server-client'; import { spinner } from '../stores/spinner'; -import { Loader } from '@googlemaps/js-api-loader'; - -export function createGoogleMapsLoader(apiKey: string): Loader { - return new Loader({ - apiKey, - version: 'beta', - libraries: ['places', 'marker'] - }); -} +import { initGoogleMaps, loadLibraries } from './googleMapsLoader'; export type GeocodeResult = { lat: number; @@ -149,8 +141,8 @@ export class Geocoder { } try { - const loader = createGoogleMapsLoader(settings.googleApiKey); - await loader.importLibrary('maps'); + await initGoogleMaps(settings.googleApiKey); + await loadLibraries('geocoding'); return true; } catch (loadError) { console.error('Failed to load Google Maps:', loadError); diff --git a/src/resources/js/lib/googleMapsLoader.ts b/src/resources/js/lib/googleMapsLoader.ts new file mode 100644 index 000000000..e7b9fd224 --- /dev/null +++ b/src/resources/js/lib/googleMapsLoader.ts @@ -0,0 +1,17 @@ +import { setOptions, importLibrary } from '@googlemaps/js-api-loader'; + +let isInitialized = false; + +export async function initGoogleMaps(apiKey: string) { + if (!isInitialized) { + setOptions({ + key: apiKey, + v: 'weekly' + }); + isInitialized = true; + } +} + +export async function loadLibraries(...libraries: string[]) { + return await Promise.all(libraries.map((lib) => importLibrary(lib))); +} From de6da301202186e575e2a4b182f5b9f5baf3e12d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 21:02:09 -0400 Subject: [PATCH 009/118] Bump vite from 7.1.3 to 7.1.9 in /src (#1304) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.3 to 7.1.9. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.1.9/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.1.9 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/package-lock.json | 80 +++++++++++++++++++++++++++++++++++++------ src/package.json | 2 +- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index 43d08a718..2b7785a0e 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -55,7 +55,7 @@ "tslib": "^2.8.1", "typescript": "^5.8.3", "typescript-eslint": "^8.31.1", - "vite": "^7.1.2", + "vite": "^7.1.9", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.1.2" } @@ -3046,6 +3046,66 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.4.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.4.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.0", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz", @@ -9313,14 +9373,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -9701,9 +9761,9 @@ } }, "node_modules/vite": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", - "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", + "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "dev": true, "license": "MIT", "dependencies": { @@ -9712,7 +9772,7 @@ "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", - "tinyglobby": "^0.2.14" + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" diff --git a/src/package.json b/src/package.json index b3d76b441..79376a81e 100644 --- a/src/package.json +++ b/src/package.json @@ -48,7 +48,7 @@ "tslib": "^2.8.1", "typescript": "^5.8.3", "typescript-eslint": "^8.31.1", - "vite": "^7.1.2", + "vite": "^7.1.9", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.1.2" }, From 8c280b4239a9366a36124e008ff66cd59a24a6da Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Tue, 14 Oct 2025 09:47:31 -0400 Subject: [PATCH 010/118] bump svelte and fix pagination (#1305) --- src/package-lock.json | 12 ++++++------ src/package.json | 2 +- src/resources/js/components/FormatForm.svelte | 4 ++-- src/resources/js/components/MeetingEditForm.svelte | 12 ++++++------ src/resources/js/components/MeetingsList.svelte | 10 +++++++++- src/resources/js/components/ServiceBodyForm.svelte | 10 +++++----- src/resources/js/components/UserForm.svelte | 6 +++--- 7 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index 2b7785a0e..4acd7d7c3 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -47,7 +47,7 @@ "prettier-plugin-svelte": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.11", "sass": "^1.87.0", - "svelte": "5.35.2", + "svelte": "^5.39.12", "svelte-check": "^4.1.6", "svelte-jester": "^5.0.0", "tailwindcss": "^4.0.0", @@ -71,6 +71,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1948,7 +1949,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -9123,12 +9123,12 @@ } }, "node_modules/svelte": { - "version": "5.35.2", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.35.2.tgz", - "integrity": "sha512-uW/rRXYrhZ7Dh4UQNZ0t+oVGL1dEM+95GavCO8afAk1IY2cPq9BcZv9C3um5aLIya2y8lIeLPxLII9ASGg9Dzw==", + "version": "5.39.12", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.39.12.tgz", + "integrity": "sha512-CEzwxFuEycokU8K8CE/OuwVbmei+ivu2HvBGYIdASfMa1hCRSNr4RRkzNSvbAvu6h+BOig2CsZTAEY+WKvwZpA==", "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", + "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", diff --git a/src/package.json b/src/package.json index 79376a81e..c2ef5d55e 100644 --- a/src/package.json +++ b/src/package.json @@ -40,7 +40,7 @@ "prettier-plugin-svelte": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.11", "sass": "^1.87.0", - "svelte": "5.35.2", + "svelte": "^5.39.12", "svelte-check": "^4.1.6", "svelte-jester": "^5.0.0", "tailwindcss": "^4.0.0", diff --git a/src/resources/js/components/FormatForm.svelte b/src/resources/js/components/FormatForm.svelte index ab1071643..eb36538c2 100644 --- a/src/resources/js/components/FormatForm.svelte +++ b/src/resources/js/components/FormatForm.svelte @@ -292,11 +292,11 @@ {/if}

-
-
{#each pagesToShow as pageNumber} - + {/each}
- {#if $errors.adminUserId} {$errors.adminUserId} @@ -180,7 +180,7 @@
- {#if $errors.type} {$errors.type} @@ -189,7 +189,7 @@
- {#if $errors.parentId} {$errors.parentId} diff --git a/src/resources/js/components/UserForm.svelte b/src/resources/js/components/UserForm.svelte index 5ba3ffc91..e2cce50ea 100644 --- a/src/resources/js/components/UserForm.svelte +++ b/src/resources/js/components/UserForm.svelte @@ -21,7 +21,7 @@ const userOwnerItems = users .filter((u) => selectedUser?.id !== u.id) - .map((u) => ({ value: u.id.toString(), name: u.displayName })) + .map((u) => ({ value: u.id, name: u.displayName })) .sort((a, b) => a.name.localeCompare(b.name)); const USER_TYPE_DEACTIVATED = 'deactivated'; const USER_TYPE_OBSERVER = 'observer'; @@ -145,7 +145,7 @@
- {#if $errors.type} {$errors.type} @@ -154,7 +154,7 @@
- {#if $errors.ownerId} {$errors.ownerId} From 2f1f31419908d18d0c63d154568cde8c8f0695f5 Mon Sep 17 00:00:00 2001 From: jbraswell <10187286+jbraswell@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:26:47 -0400 Subject: [PATCH 011/118] fix passing null value to strlen in GetSearchResults (#1310) --- src/app/Http/Controllers/Query/SwitcherController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/Http/Controllers/Query/SwitcherController.php b/src/app/Http/Controllers/Query/SwitcherController.php index f948415b8..82ff4c774 100644 --- a/src/app/Http/Controllers/Query/SwitcherController.php +++ b/src/app/Http/Controllers/Query/SwitcherController.php @@ -195,7 +195,9 @@ private function getSearchResults(Request $request, ?string $dataFormat = null): $searchString = $request->input('SearchString'); $searchString = !is_null($searchString) ? trim($searchString) : null; - $searchString = strlen($searchString) > 2 || is_numeric($searchString) ? $searchString : null; + if (!is_null($searchString)) { + $searchString = strlen($searchString) > 2 || is_numeric($searchString) ? $searchString : null; + } $searchStringIsAddress = !is_null($searchString) && $request->input('StringSearchIsAnAddress') == '1'; if (!is_null($searchString) && $searchStringIsAddress) { $googleApiKey = legacy_config('google_api_key'); From bdffbd96879e6ac8d5bd9a052476846b64cff5f0 Mon Sep 17 00:00:00 2001 From: jbraswell <10187286+jbraswell@users.noreply.github.com> Date: Sat, 18 Oct 2025 11:33:09 -0400 Subject: [PATCH 012/118] change strlen to mb_strlen for SearchString (#1312) --- src/app/Http/Controllers/Query/SwitcherController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/Http/Controllers/Query/SwitcherController.php b/src/app/Http/Controllers/Query/SwitcherController.php index 82ff4c774..ca5e89a8f 100644 --- a/src/app/Http/Controllers/Query/SwitcherController.php +++ b/src/app/Http/Controllers/Query/SwitcherController.php @@ -196,7 +196,7 @@ private function getSearchResults(Request $request, ?string $dataFormat = null): $searchString = $request->input('SearchString'); $searchString = !is_null($searchString) ? trim($searchString) : null; if (!is_null($searchString)) { - $searchString = strlen($searchString) > 2 || is_numeric($searchString) ? $searchString : null; + $searchString = mb_strlen($searchString) > 2 || is_numeric($searchString) ? $searchString : null; } $searchStringIsAddress = !is_null($searchString) && $request->input('StringSearchIsAnAddress') == '1'; if (!is_null($searchString) && $searchStringIsAddress) { From 02422ba33fbea99e6da8a081c2fd0bc50b0ad6ad Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Sat, 18 Oct 2025 12:29:59 -0400 Subject: [PATCH 013/118] mv from legacy url list (#1307) --- src/app/Console/Commands/ImportRootServers.php | 2 +- .../Console/Commands/PrimeDatabaseFromLegacyTomato.php | 2 +- src/app/Repositories/External/ExternalRootServer.php | 2 +- src/config/aggregator.php | 4 ++-- src/tests/Feature/Aggregator/ImportRootServerTest.php | 2 +- src/tests/Unit/ExternalRootServerTest.php | 10 +++++----- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/Console/Commands/ImportRootServers.php b/src/app/Console/Commands/ImportRootServers.php index 322a994b1..33f7e2297 100644 --- a/src/app/Console/Commands/ImportRootServers.php +++ b/src/app/Console/Commands/ImportRootServers.php @@ -27,7 +27,7 @@ class ImportRootServers extends Command { - protected $signature = 'aggregator:ImportRootServers {--list-url=https://raw.githubusercontent.com/bmlt-enabled/aggregator/main/rootServerList.json}'; + protected $signature = 'aggregator:ImportRootServers {--list-url=https://raw.githubusercontent.com/bmlt-enabled/aggregator/main/serverList.json}'; protected $description = 'Import root servers'; diff --git a/src/app/Console/Commands/PrimeDatabaseFromLegacyTomato.php b/src/app/Console/Commands/PrimeDatabaseFromLegacyTomato.php index 338ffcd68..869dcf380 100644 --- a/src/app/Console/Commands/PrimeDatabaseFromLegacyTomato.php +++ b/src/app/Console/Commands/PrimeDatabaseFromLegacyTomato.php @@ -68,7 +68,7 @@ private function importRootServers(RootServerRepositoryInterface $rootServerRepo ->map(fn ($o) => [ 'id' => $o['source_id'], 'name' => $o['name'], - 'rootURL' => rtrim($o['root_server_url']) . '/', + 'url' => rtrim($o['root_server_url']) . '/', ]) ->map(function ($rootServer) { try { diff --git a/src/app/Repositories/External/ExternalRootServer.php b/src/app/Repositories/External/ExternalRootServer.php index 9b90db6ff..181c7db5e 100644 --- a/src/app/Repositories/External/ExternalRootServer.php +++ b/src/app/Repositories/External/ExternalRootServer.php @@ -14,7 +14,7 @@ public function __construct(array $values) { $this->id = $this->validateInt($values, 'id'); $this->name = $this->validateString($values, 'name'); - $this->url = $this->validateUrl($values, 'rootURL'); + $this->url = $this->validateUrl($values, 'url'); } public function isEqual(RootServer $rootServer): bool diff --git a/src/config/aggregator.php b/src/config/aggregator.php index 8ad900296..558fc3160 100644 --- a/src/config/aggregator.php +++ b/src/config/aggregator.php @@ -3,13 +3,13 @@ return [ 'ignore_root_servers' => json_decode(env('AGGREGATOR_IGNORE_ROOT_SERVERS') ?? 'null') ?? [], 'ignore_service_bodies' => json_decode(env('AGGREGATOR_IGNORE_SERVICE_BODIES') ?? 'null') ?? [ - 120 => [ # {"id":"120","name":"NA New Jersey","rootURL":"https://www.narcoticsanonymousnj.org/main_server/"} + 120 => [ # {"id":"120","name":"NA New Jersey","url":"https://www.narcoticsanonymousnj.org/main_server/"} 31, 32, # Duplicated Eastern New York Region 27, 28 # Duplicated Greater Philadelphia Region ], ], 'rate_limit_root_servers' => json_decode(env('AGGREGATOR_RATE_LIMIT_ROOT_SERVERS') ?? 'null') ?? [ - # {"id":"139","name":"NA Argentina","rootURL":"https://www.na.org.ar/main_server/"}, + # {"id":"139","name":"NA Argentina","url":"https://www.na.org.ar/main_server/"}, 139 => ['request_delay' => 10, 'retry_delay' => 300], ], ]; diff --git a/src/tests/Feature/Aggregator/ImportRootServerTest.php b/src/tests/Feature/Aggregator/ImportRootServerTest.php index e0099dea2..0d9e849e5 100644 --- a/src/tests/Feature/Aggregator/ImportRootServerTest.php +++ b/src/tests/Feature/Aggregator/ImportRootServerTest.php @@ -17,7 +17,7 @@ private function externalRootServer(): ExternalRootServer return new ExternalRootServer([ 'id' => 1, 'name' => 'test', - 'rootURL' => 'https://blah.com/blah', + 'url' => 'https://blah.com/blah', ]); } diff --git a/src/tests/Unit/ExternalRootServerTest.php b/src/tests/Unit/ExternalRootServerTest.php index 41f02b712..76459c395 100644 --- a/src/tests/Unit/ExternalRootServerTest.php +++ b/src/tests/Unit/ExternalRootServerTest.php @@ -15,13 +15,13 @@ private function validValues(): array return [ 'id' => 1, 'name' => 'test', - 'rootURL' => 'https://blah.com/blah', + 'url' => 'https://blah.com/blah', ]; } private function getModel(array $validValues): RootServer { - return new RootServer(['source_id' => $validValues['id'], 'name' => $validValues['name'], 'url' => $validValues['rootURL']]); + return new RootServer(['source_id' => $validValues['id'], 'name' => $validValues['name'], 'url' => $validValues['url']]); } public function testValid() @@ -30,7 +30,7 @@ public function testValid() $rootServer = new ExternalRootServer($values); $this->assertEquals($values['id'], $rootServer->id); $this->assertEquals($values['name'], $rootServer->name); - $this->assertEquals($values['rootURL'], $rootServer->url); + $this->assertEquals($values['url'], $rootServer->url); } public function testMissingId() @@ -69,7 +69,7 @@ public function testMissingUrl() { $this->expectException(InvalidRootServerException::class); $values = $this->validValues(); - unset($values['rootURL']); + unset($values['url']); new ExternalRootServer($values); } @@ -77,7 +77,7 @@ public function testInvalidUrl() { $this->expectException(InvalidRootServerException::class); $values = $this->validValues(); - $values['rootURL'] = 'string'; + $values['url'] = 'string'; new ExternalRootServer($values); } From 5c4fe4fd2a56f914f9b40cd9111ad4406cbfd20d Mon Sep 17 00:00:00 2001 From: jbraswell <10187286+jbraswell@users.noreply.github.com> Date: Sun, 19 Oct 2025 21:59:53 -0400 Subject: [PATCH 014/118] log aggregator server list and make invalid root server fatal (#1314) --- src/app/Console/Commands/ImportRootServers.php | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/app/Console/Commands/ImportRootServers.php b/src/app/Console/Commands/ImportRootServers.php index 33f7e2297..89319c435 100644 --- a/src/app/Console/Commands/ImportRootServers.php +++ b/src/app/Console/Commands/ImportRootServers.php @@ -84,16 +84,8 @@ private function importRootServersList(RootServerRepositoryInterface $rootServer { try { $url = $this->option('list-url'); - $response = $this->httpGet($url); - $externalRootServers = collect($response) - ->map(function ($rootServer) { - try { - return new ExternalRootServer($rootServer); - } catch (InvalidObjectException) { - return null; - } - }) - ->reject(fn($e) => is_null($e)); + $response = $this->httpGet($url, true); + $externalRootServers = collect($response)->map(fn ($rs) => new ExternalRootServer($rs)); $rootServerRepository->import($externalRootServers); } catch (\Exception $e) { $this->error($e->getMessage()); @@ -261,13 +253,17 @@ private function analyzeTables(): void } } - private function httpGet(string $url): array + private function httpGet(string $url, bool $shouldLogResponse = false): array { sleep(self::$requestDelaySeconds); $headers = ['User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 +aggregator']; $response = Http::withHeaders($headers)->retry(3, self::$retryDelaySeconds * 1000)->get($url); + if ($shouldLogResponse) { + $this->info("Response from $url: $response"); + } + if (!$response->ok()) { throw new \Exception("Got bad status code {$response->status()} from $url"); } From 1582fd98e3e8bebc1d2b2970380e5a9cc33dad1e Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Sun, 19 Oct 2025 22:00:40 -0400 Subject: [PATCH 015/118] add revision and date to docker builds (#1315) --- .github/workflows/docker-base.yml | 1 + Makefile | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-base.yml b/.github/workflows/docker-base.yml index 9a25b7a61..dbe3a2f78 100644 --- a/.github/workflows/docker-base.yml +++ b/.github/workflows/docker-base.yml @@ -45,6 +45,7 @@ jobs: org.opencontainers.image.vendor=BMLT org.opencontainers.image.created={{date 'YYYY-MM-DDTHH:mm:ssZ'}} org.opencontainers.image.version=${{ matrix.php_version }} + org.opencontainers.image.revision=${{ github.sha }} php.version=${{ matrix.php_version }} - name: Build and push Base diff --git a/Makefile b/Makefile index eb9ee9ef6..e2d105671 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,7 @@ zip: $(ZIP_FILE) ## Builds zip file .PHONY: docker docker: zip ## Builds Docker Image - docker build --pull --build-arg PHP_VERSION=$(BASE_IMAGE_TAG) -f docker/$(DOCKERFILE) . -t $(IMAGE):$(TAG) + docker build --pull --build-arg PHP_VERSION=$(BASE_IMAGE_TAG) --label "org.opencontainers.image.revision=$(COMMIT)" --label "org.opencontainers.image.created=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')" -f docker/$(DOCKERFILE) . -t $(IMAGE):$(TAG) .PHONY: docker-push docker-push: ## Pushes docker image to Dockerhub @@ -169,7 +169,7 @@ phpstan: ## PHP Larastan Code Analysis .PHONY: docker-publish-base docker-publish-base: ## Builds Base Docker Image - docker buildx build --platform linux/amd64,linux/arm64/v8 -f docker/Dockerfile-base docker/ -t $(BASE_IMAGE):$(BASE_IMAGE_TAG) --push + docker buildx build --platform linux/amd64,linux/arm64/v8 --label "org.opencontainers.image.revision=$(COMMIT)" --label "org.opencontainers.image.created=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')" -f docker/Dockerfile-base docker/ -t $(BASE_IMAGE):$(BASE_IMAGE_TAG) --push .PHONY: mysql mysql: ## Runs mysql cli in mysql container From 25c23703415ac661f3fc1b8eb90bdcf3b0b03d61 Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Tue, 21 Oct 2025 14:26:41 -0400 Subject: [PATCH 016/118] add docs for developing typescript client (#1317) --- CONTRIBUTING.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3713f05d9..cf2f8e290 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,6 +86,47 @@ You should now be able to set breakpoints, launch this debug configuration, and This works exactly as described in the [vitest documentation](https://v0.vitest.dev/guide/debugging.html). Set any breakpoints, launch a new JavaScript Debug Terminal, and run `npm run test`. +## Developing with the TypeScript Client + +When developing Admin API features alongside the TypeScript client, you can use [npm link](https://docs.npmjs.com/cli/v11/commands/npm-link/) to work with both repositories locally without publishing to npm. + +### Prerequisites +Clone the BMLT TypeScript client repository: +```bash +git clone https://github.com/bmlt-enabled/bmlt-server-typescript-client.git +``` + +### One-time Setup +1. Link the TypeScript client globally: +```bash +cd /path/to/bmlt-server-typescript-client +npm link +``` + +2. Link the client in the BMLT server frontend: +```bash +cd /path/to/bmlt-server/src +npm link bmlt-server-typescript-client +``` + +### Development Workflow +After making API changes, regenerate the TypeScript client: + +1. Generate updated OpenAPI documentation: +```bash +cd /path/to/bmlt-server +make generate-api-json +``` + +2. Regenerate the TypeScript client: +```bash +cd /path/to/bmlt-server-typescript-client +rm openapi.json +make generate +``` + +This allows you to develop the API without changing your configs or imports. + ## Some useful `make` commands - `make help` Describe all of the make commands. From 419d1328dab79193e0b21c5e2e14ec9a9fefdac0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 14:27:12 -0400 Subject: [PATCH 017/118] Bump vite from 7.1.9 to 7.1.11 in /src (#1316) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.9 to 7.1.11. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.1.11/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.1.11 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/package-lock.json | 8 ++++---- src/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index 4acd7d7c3..e62209788 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -55,7 +55,7 @@ "tslib": "^2.8.1", "typescript": "^5.8.3", "typescript-eslint": "^8.31.1", - "vite": "^7.1.9", + "vite": "^7.1.11", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.1.2" } @@ -9761,9 +9761,9 @@ } }, "node_modules/vite": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/package.json b/src/package.json index c2ef5d55e..e7e846751 100644 --- a/src/package.json +++ b/src/package.json @@ -48,7 +48,7 @@ "tslib": "^2.8.1", "typescript": "^5.8.3", "typescript-eslint": "^8.31.1", - "vite": "^7.1.9", + "vite": "^7.1.11", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.1.2" }, From 4fc37398647f3f1ebe85939615dd90ddd88bb6b3 Mon Sep 17 00:00:00 2001 From: jbraswell <10187286+jbraswell@users.noreply.github.com> Date: Fri, 24 Oct 2025 12:59:45 -0400 Subject: [PATCH 018/118] add logging for aggregator results (#1318) --- .../Console/Commands/ImportRootServers.php | 45 ++++++++++++++----- .../Interfaces/FormatRepositoryInterface.php | 3 +- .../Interfaces/MeetingRepositoryInterface.php | 3 +- .../RootServerRepositoryInterface.php | 3 +- .../ServiceBodyRepositoryInterface.php | 3 +- src/app/Repositories/FormatRepository.php | 13 ++++-- .../Import/FormatImportResult.php | 10 +++++ .../Import/MeetingImportResult.php | 11 +++++ .../Import/RootServerImportResult.php | 10 +++++ .../Import/ServiceBodyImportResult.php | 11 +++++ src/app/Repositories/MeetingRepository.php | 11 ++++- src/app/Repositories/RootServerRepository.php | 10 ++++- .../Repositories/ServiceBodyRepository.php | 12 ++++- 13 files changed, 120 insertions(+), 25 deletions(-) create mode 100644 src/app/Repositories/Import/FormatImportResult.php create mode 100644 src/app/Repositories/Import/MeetingImportResult.php create mode 100644 src/app/Repositories/Import/RootServerImportResult.php create mode 100644 src/app/Repositories/Import/ServiceBodyImportResult.php diff --git a/src/app/Console/Commands/ImportRootServers.php b/src/app/Console/Commands/ImportRootServers.php index 89319c435..fa9564ee1 100644 --- a/src/app/Console/Commands/ImportRootServers.php +++ b/src/app/Console/Commands/ImportRootServers.php @@ -19,6 +19,9 @@ use App\Repositories\External\ExternalRootServer; use App\Repositories\External\ExternalServiceBody; use App\Repositories\External\InvalidObjectException; +use App\Repositories\Import\FormatImportResult; +use App\Repositories\Import\MeetingImportResult; +use App\Repositories\Import\ServiceBodyImportResult; use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Database\Query\Builder; @@ -86,11 +89,14 @@ private function importRootServersList(RootServerRepositoryInterface $rootServer $url = $this->option('list-url'); $response = $this->httpGet($url, true); $externalRootServers = collect($response)->map(fn ($rs) => new ExternalRootServer($rs)); - $rootServerRepository->import($externalRootServers); + $result = $rootServerRepository->import($externalRootServers); } catch (\Exception $e) { $this->error($e->getMessage()); throw $e; } + $this->info("created $result->numCreated"); + $this->info("updated $result->numUpdated"); + $this->info("deleted $result->numDeleted"); } private function importRootServer( @@ -102,9 +108,24 @@ private function importRootServer( ): void { $this->info("importing root server $rootServer->id:$rootServer->url"); $this->importServerInfo($rootServer, $rootServerRepository); - $this->importServiceBodies($rootServer, $serviceBodyRepository); - $this->importFormats($rootServer, $formatRepository); - $this->importMeetings($rootServer, $meetingRepository); + + $serviceBodiesResult = $this->importServiceBodies($rootServer, $serviceBodyRepository); + $this->info(" created $serviceBodiesResult->numCreated"); + $this->info(" updated $serviceBodiesResult->numUpdated"); + $this->info(" reassigned $serviceBodiesResult->numReassigned"); + $this->info(" deleted $serviceBodiesResult->numDeleted"); + + $formatsResult = $this->importFormats($rootServer, $formatRepository); + $this->info(" created $formatsResult->numCreated"); + $this->info(" updated $formatsResult->numUpdated"); + $this->info(" deleted $formatsResult->numDeleted"); + + $meetingsResult = $this->importMeetings($rootServer, $meetingRepository); + $this->info(" created $meetingsResult->numCreated"); + $this->info(" updated $meetingsResult->numUpdated"); + $this->info(" deleted $meetingsResult->numDeleted"); + $this->info(" orphaned and deleted $meetingsResult->numOrphaned"); + $this->updateStatistics($rootServer); $rootServerRepository->update($rootServer->id, ['last_successful_import' => Carbon::now()]); } @@ -118,7 +139,7 @@ private function importServerInfo(RootServer $rootServer, RootServerRepositoryIn $rootServer->refresh(); } - private function importServiceBodies(RootServer $rootServer, ServiceBodyRepositoryInterface $serviceBodyRepository) + private function importServiceBodies(RootServer $rootServer, ServiceBodyRepositoryInterface $serviceBodyRepository): ServiceBodyImportResult { $this->info('importing service bodies'); $url = rtrim($rootServer->url, '/') . '/client_interface/json/?switcher=GetServiceBodies'; @@ -133,10 +154,10 @@ private function importServiceBodies(RootServer $rootServer, ServiceBodyReposito } }) ->reject(fn($e) => is_null($e)); - $serviceBodyRepository->import($rootServer->id, $externalServiceBodies); + return $serviceBodyRepository->import($rootServer->id, $externalServiceBodies); } - private function importFormats(RootServer $rootServer, FormatRepositoryInterface $formatRepository) + private function importFormats(RootServer $rootServer, FormatRepositoryInterface $formatRepository): FormatImportResult { $this->info('importing formats'); $serverInfo = json_decode($rootServer->server_info); @@ -145,7 +166,7 @@ private function importFormats(RootServer $rootServer, FormatRepositoryInterface $url = rtrim($rootServer->url, '/') . '/client_interface/json/?switcher=GetFormats'; $externalFormats = collect([]); foreach ($languages as $language) { - $this->info("importing formats:$language"); + $this->info(" retrieving $language"); $response = $this->httpGet($url . "&lang_enum=$language"); $externalFormats = $externalFormats->concat( collect($response) @@ -162,10 +183,10 @@ private function importFormats(RootServer $rootServer, FormatRepositoryInterface ); } - $formatRepository->import($rootServer->id, $externalFormats); + return $formatRepository->import($rootServer->id, $externalFormats); } - private function importMeetings(RootServer $rootServer, MeetingRepositoryInterface $meetingRepository) + private function importMeetings(RootServer $rootServer, MeetingRepositoryInterface $meetingRepository): MeetingImportResult { $this->info('importing meetings'); $url = rtrim($rootServer->url, '/') . '/client_interface/json/?switcher=GetSearchResults'; @@ -180,7 +201,7 @@ private function importMeetings(RootServer $rootServer, MeetingRepositoryInterfa } }) ->reject(fn($e) => is_null($e)); - $meetingRepository->import($rootServer->id, $externalMeetings); + return $meetingRepository->import($rootServer->id, $externalMeetings); } private function updateStatistics(RootServer $rootServer) @@ -261,7 +282,7 @@ private function httpGet(string $url, bool $shouldLogResponse = false): array $response = Http::withHeaders($headers)->retry(3, self::$retryDelaySeconds * 1000)->get($url); if ($shouldLogResponse) { - $this->info("Response from $url: $response"); + $this->info("response from $url: $response"); } if (!$response->ok()) { diff --git a/src/app/Interfaces/FormatRepositoryInterface.php b/src/app/Interfaces/FormatRepositoryInterface.php index 568b7c2bf..22ee83813 100644 --- a/src/app/Interfaces/FormatRepositoryInterface.php +++ b/src/app/Interfaces/FormatRepositoryInterface.php @@ -3,6 +3,7 @@ namespace App\Interfaces; use App\Models\Format; +use App\Repositories\Import\FormatImportResult; use Illuminate\Support\Collection; interface FormatRepositoryInterface @@ -25,5 +26,5 @@ public function getTemporarilyClosedFormat(): Format; public function create(array $sharedFormatsValues): Format; public function update(int $sharedId, array $sharedFormatsValues): bool; public function delete(int $sharedId): bool; - public function import(int $rootServerId, Collection $externalObjects): void; + public function import(int $rootServerId, Collection $externalObjects): FormatImportResult; } diff --git a/src/app/Interfaces/MeetingRepositoryInterface.php b/src/app/Interfaces/MeetingRepositoryInterface.php index ea7992f04..cfb781bb6 100644 --- a/src/app/Interfaces/MeetingRepositoryInterface.php +++ b/src/app/Interfaces/MeetingRepositoryInterface.php @@ -3,6 +3,7 @@ namespace App\Interfaces; use App\Models\Meeting; +use App\Repositories\Import\MeetingImportResult; use Illuminate\Support\Collection; interface MeetingRepositoryInterface @@ -51,5 +52,5 @@ public function getBoundingBox(): array; public function create(array $values): Meeting; public function update(int $id, array $values): bool; public function delete(int $id): bool; - public function import(int $rootServerId, Collection $externalObjects): void; + public function import(int $rootServerId, Collection $externalObjects): MeetingImportResult; } diff --git a/src/app/Interfaces/RootServerRepositoryInterface.php b/src/app/Interfaces/RootServerRepositoryInterface.php index 58c21d477..eed96277f 100644 --- a/src/app/Interfaces/RootServerRepositoryInterface.php +++ b/src/app/Interfaces/RootServerRepositoryInterface.php @@ -3,6 +3,7 @@ namespace App\Interfaces; use App\Models\RootServer; +use App\Repositories\Import\RootServerImportResult; use Illuminate\Support\Collection; interface RootServerRepositoryInterface @@ -11,5 +12,5 @@ public function search(bool $eagerStatistics = false): Collection; public function create(array $values): RootServer; public function update(int $id, array $values): bool; public function delete(int $id): bool; - public function import(Collection $externalObjects): void; + public function import(Collection $externalObjects): RootServerImportResult; } diff --git a/src/app/Interfaces/ServiceBodyRepositoryInterface.php b/src/app/Interfaces/ServiceBodyRepositoryInterface.php index 2c1a603a4..346730aba 100644 --- a/src/app/Interfaces/ServiceBodyRepositoryInterface.php +++ b/src/app/Interfaces/ServiceBodyRepositoryInterface.php @@ -3,6 +3,7 @@ namespace App\Interfaces; use App\Models\ServiceBody; +use App\Repositories\Import\ServiceBodyImportResult; use Illuminate\Support\Collection; interface ServiceBodyRepositoryInterface @@ -23,5 +24,5 @@ public function getAdminServiceBodyIds(int $userId): Collection; public function getChildren(array $parents): array; public function getParents(array $children): array; public function removeUser(int $userId); - public function import(int $rootServerId, Collection $externalObjects): void; + public function import(int $rootServerId, Collection $externalObjects): ServiceBodyImportResult; } diff --git a/src/app/Repositories/FormatRepository.php b/src/app/Repositories/FormatRepository.php index 18eae92bb..154084502 100644 --- a/src/app/Repositories/FormatRepository.php +++ b/src/app/Repositories/FormatRepository.php @@ -7,6 +7,7 @@ use App\Models\Format; use App\Models\Meeting; use App\Repositories\External\ExternalFormat; +use App\Repositories\Import\FormatImportResult; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; @@ -229,11 +230,13 @@ private function serializeForChange(Format $format): string ]); } - public function import(int $rootServerId, Collection $externalObjects): void + public function import(int $rootServerId, Collection $externalObjects): FormatImportResult { + $result = new FormatImportResult(); + // deleted formats $sourceIds = $externalObjects->pluck('id'); - Format::query() + $result->numDeleted = Format::query() ->where('root_server_id', $rootServerId) ->whereNotIn('source_id', $sourceIds) ->delete(); @@ -242,7 +245,7 @@ public function import(int $rootServerId, Collection $externalObjects): void foreach ($bySourceIdByLanguage as $sourceId => $byLanguage) { // deleted languages $languages = $byLanguage->keys(); - Format::query() + $result->numDeleted += Format::query() ->where('root_server_id', $rootServerId) ->where('source_id', $sourceId) ->whereNotIn('lang_enum', $languages) @@ -258,6 +261,7 @@ public function import(int $rootServerId, Collection $externalObjects): void if ($existingFormats->isEmpty()) { $values = $this->externalFormatToValuesArray($rootServerId, $sourceId, $externalFormats); $this->create($values); + $result->numCreated++; } else { $isDirty = $existingFormats->count() != $externalFormats->count(); if (!$isDirty) { @@ -274,9 +278,12 @@ public function import(int $rootServerId, Collection $externalObjects): void $sharedId = $existingFormats->first()->shared_id_bigint; $values = $this->externalFormatToValuesArray($rootServerId, $sourceId, $externalFormats); $this->update($sharedId, $values); + $result->numUpdated++; } } } + + return $result; } private function externalFormatToValuesArray(int $rootServerId, int $sourceId, Collection $externalFormats): array diff --git a/src/app/Repositories/Import/FormatImportResult.php b/src/app/Repositories/Import/FormatImportResult.php new file mode 100644 index 000000000..f7f63007c --- /dev/null +++ b/src/app/Repositories/Import/FormatImportResult.php @@ -0,0 +1,10 @@ +map(fn (ExternalMeeting $ex) => $ex->id); $meetingIds = Meeting::query() ->where('root_server_id', $rootServerId) ->whereNotIn('source_id', $sourceIds) ->pluck('id_bigint'); - Meeting::query()->whereIn('id_bigint', $meetingIds)->delete(); + $result->numDeleted = Meeting::query()->whereIn('id_bigint', $meetingIds)->delete(); MeetingData::query()->whereIn('meetingid_bigint', $meetingIds)->delete(); MeetingLongData::query()->whereIn('meetingid_bigint', $meetingIds)->delete(); @@ -852,6 +854,7 @@ public function import(int $rootServerId, Collection $externalObjects): void if (is_null($serviceBodyId)) { if (!is_null($db)) { $db->delete(); + $result->numOrphaned++; } continue; } @@ -859,11 +862,15 @@ public function import(int $rootServerId, Collection $externalObjects): void if (is_null($db)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); $this->create($values); + $result->numCreated++; } else if (!$external->isEqual($db, $serviceBodyIdToSourceIdMap, $formatSharedIdToSourceIdMap)) { $values = $this->externalMeetingToValuesArray($rootServerId, $serviceBodyId, $external, $formatSourceIdToSharedIdMap); $this->update($db->id_bigint, $values); + $result->numUpdated++; } } + + return $result; } private function castExternal($obj): ExternalMeeting diff --git a/src/app/Repositories/RootServerRepository.php b/src/app/Repositories/RootServerRepository.php index 9247ad382..c3344de63 100644 --- a/src/app/Repositories/RootServerRepository.php +++ b/src/app/Repositories/RootServerRepository.php @@ -8,6 +8,7 @@ use App\Models\MeetingLongData; use App\Models\RootServer; use App\Repositories\External\ExternalRootServer; +use App\Repositories\Import\RootServerImportResult; use Illuminate\Support\Collection; class RootServerRepository implements RootServerRepositoryInterface @@ -49,13 +50,14 @@ public function delete(int $id): bool return false; } - public function import(Collection $externalObjects): void + public function import(Collection $externalObjects): RootServerImportResult { + $result = new RootServerImportResult(); $ignoreRootServerUrls = config('aggregator.ignore_root_servers'); $externalObjects = $externalObjects->reject(fn (ExternalRootServer $ex) => in_array($ex->url, $ignoreRootServerUrls)); $sourceIds = $externalObjects->map(fn (ExternalRootServer $ex) => $ex->id); - RootServer::query()->whereNotIn('source_id', $sourceIds)->delete(); + $result->numDeleted = RootServer::query()->whereNotIn('source_id', $sourceIds)->delete(); // TODO test these MeetingData::query() @@ -75,10 +77,14 @@ public function import(Collection $externalObjects): void $values = ['source_id' => $externalRoot->id, 'name' => $externalRoot->name, 'url' => $externalRoot->url]; if (is_null($dbRoot)) { $this->create($values); + $result->numCreated++; } else if (!$externalRoot->isEqual($dbRoot)) { $this->update($dbRoot->id, $values); + $result->numUpdated++; } } + + return $result; } private function castExternalRootServer($obj): ExternalRootServer diff --git a/src/app/Repositories/ServiceBodyRepository.php b/src/app/Repositories/ServiceBodyRepository.php index 7c6d2abdc..ba920759c 100644 --- a/src/app/Repositories/ServiceBodyRepository.php +++ b/src/app/Repositories/ServiceBodyRepository.php @@ -7,6 +7,7 @@ use App\Models\RootServer; use App\Models\ServiceBody; use App\Repositories\External\ExternalServiceBody; +use App\Repositories\Import\ServiceBodyImportResult; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\App; @@ -235,14 +236,15 @@ public function removeUser(int $userId) } } - public function import(int $rootServerId, Collection $externalObjects): void + public function import(int $rootServerId, Collection $externalObjects): ServiceBodyImportResult { + $result = new ServiceBodyImportResult(); $rootServer = RootServer::query()->where('id', $rootServerId)->firstOrFail(); $ignoreServiceBodyIds = collect(config('aggregator.ignore_service_bodies'))->get($rootServer->source_id, []); $externalObjects = $externalObjects->reject(fn ($ex) => in_array($ex->id, $ignoreServiceBodyIds)); $sourceIds = $externalObjects->map(fn (ExternalServiceBody $ex) => $ex->id); - ServiceBody::query() + $result->numDeleted = ServiceBody::query() ->where('root_server_id', $rootServerId) ->whereNotIn('source_id', $sourceIds) ->delete(); @@ -258,11 +260,13 @@ public function import(int $rootServerId, Collection $externalObjects): void if (is_null($db)) { $values = $this->externalServiceBodyToValuesArray($rootServerId, $external); $bySourceId->put($external->id, $this->create($values)); + $result->numCreated++; } else if (!$external->isEqual($db)) { $values = $this->externalServiceBodyToValuesArray($rootServerId, $external); $this->update($db->id_bigint, $values); $db->refresh(); $bySourceId->put($external->id, $db); + $result->numUpdated++; } } @@ -276,6 +280,7 @@ public function import(int $rootServerId, Collection $externalObjects): void if ($db->sb_owner !== 0) { $db->sb_owner = 0; $db->save(); + $result->numReassigned++; } continue; } @@ -287,8 +292,11 @@ public function import(int $rootServerId, Collection $externalObjects): void if ($db->sb_owner != $parent->id_bigint) { $db->sb_owner = $parent->id_bigint; $db->save(); + $result->numReassigned++; } } + + return $result; } private function castExternal($obj): ExternalServiceBody From ba0b7b5230433ecd501c15372f9abfd4e88192cb Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Sun, 26 Oct 2025 08:11:21 -0400 Subject: [PATCH 019/118] upgrade to al2023 ecs amis (#1319) --- terraform/data.tf | 152 ++++++++++++++-------------------------------- 1 file changed, 46 insertions(+), 106 deletions(-) diff --git a/terraform/data.tf b/terraform/data.tf index 159207b9d..7c11af6cf 100644 --- a/terraform/data.tf +++ b/terraform/data.tf @@ -64,122 +64,62 @@ data "aws_iam_role" "ec2_assume" { name = "ec2-assume" } +locals { + cloudwatch_config = { + logs = { + logs_collected = { + files = { + collect_list = [ + { + file_path = "/var/log/messages" + log_group_name = "${local.cluster_name}/var/log/messages" + log_stream_name = "{instance_id}" + }, + { + file_path = "/var/log/ecs/ecs-init.log" + log_group_name = "${local.cluster_name}/var/log/ecs/ecs-init.log" + log_stream_name = "{instance_id}" + }, + { + file_path = "/var/log/ecs/ecs-agent.log" + log_group_name = "${local.cluster_name}/var/log/ecs/ecs-agent.log" + log_stream_name = "{instance_id}" + }, + { + file_path = "/var/log/ecs/audit.log" + log_group_name = "${local.cluster_name}/var/log/ecs/audit.log" + log_stream_name = "{instance_id}" + } + ] + } + } + } + } +} + data "cloudinit_config" "cluster" { part { content_type = "text/x-shellscript" content = <> /etc/ecs/ecs.config -# Install awslogs and the jq -yum install -y awslogs jq - -# Inject the CloudWatch Logs configuration file contents -cat > /etc/awslogs/awslogs.conf <<- EOF -[general] -state_file = /var/lib/awslogs/agent-state - -[/var/log/dmesg] -file = /var/log/dmesg -log_group_name = ${local.cluster_name}/var/log/dmesg -log_stream_name = ${local.cluster_name}/{container_instance_id} - -[/var/log/messages] -file = /var/log/messages -log_group_name = ${local.cluster_name}/var/log/messages -log_stream_name = ${local.cluster_name}/{container_instance_id} -datetime_format = %b %d %H:%M:%S - -[/var/log/docker] -file = /var/log/docker -log_group_name = ${local.cluster_name}/var/log/docker -log_stream_name = ${local.cluster_name}/{container_instance_id} -datetime_format = %Y-%m-%dT%H:%M:%S.%f - -[/var/log/ecs/ecs-init.log] -file = /var/log/ecs/ecs-init.log.* -log_group_name = ${local.cluster_name}/var/log/ecs/ecs-init.log -log_stream_name = ${local.cluster_name}/{container_instance_id} -datetime_format = %Y-%m-%dT%H:%M:%SZ - -[/var/log/ecs/ecs-agent.log] -file = /var/log/ecs/ecs-agent.log.* -log_group_name = ${local.cluster_name}/var/log/ecs/ecs-agent.log -log_stream_name = ${local.cluster_name}/{container_instance_id} -datetime_format = %Y-%m-%dT%H:%M:%SZ - -[/var/log/ecs/audit.log] -file = /var/log/ecs/audit.log.* -log_group_name = ${local.cluster_name}/var/log/ecs/audit.log -log_stream_name = ${local.cluster_name}/{container_instance_id} -datetime_format = %Y-%m-%dT%H:%M:%SZ -EOF - } - - part { - content_type = "text/x-shellscript" - content = < /usr/local/bin/bootstrap-awslogs.sh <<- 'EOF' -#!/usr/bin/env bash -exec 2>>/var/log/ecs/cloudwatch-logs-start.log -set -x -until curl -s http://localhost:51678/v1/metadata -do - sleep 1 -done - -# Set the region to send CloudWatch Logs data to (the region where the container instance is located) -cp /etc/awslogs/awscli.conf /etc/awslogs/awscli.conf.bak -region=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region) -sed -i -e "s/region = .*/region = $region/g" /etc/awslogs/awscli.conf - -# Grab the cluster and container ip address of the node -cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster') -container_instance_id=$(curl 169.254.169.254/latest/meta-data/local-ipv4) - -# Replace the cluster name and container instance ID placeholders with the actual values -cp /etc/awslogs/awslogs.conf /etc/awslogs/awslogs.conf.bak -sed -i -e "s/{cluster}/$cluster/g" /etc/awslogs/awslogs.conf -sed -i -e "s/{container_instance_id}/$container_instance_id/g" /etc/awslogs/awslogs.conf -BSEOF - } +dnf install -y amazon-cloudwatch-agent - part { - content_type = "text/x-shellscript" - content = < /etc/systemd/system/bootstrap-awslogs.service <<- EOF -[Unit] -Description=Bootstrap awslogs agent -Requires=ecs.service -After=ecs.service -Before=awslogsd.service -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStart=/usr/local/bin/bootstrap-awslogs.sh -[Install] -WantedBy=awslogsd.service -EOF -LSEOF - } +cat > /opt/aws/amazon-cloudwatch-agent/etc/cloudwatch-config.json <<'CWEOF' +${jsonencode(local.cloudwatch_config)} +CWEOF - part { - content_type = "text/x-shellscript" - content = < Date: Wed, 29 Oct 2025 17:13:20 -0700 Subject: [PATCH 020/118] Force PHP to always check for file mods when debugging. (#1321) --- docker/Dockerfile-debug | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/Dockerfile-debug b/docker/Dockerfile-debug index e54998052..2a670d32b 100644 --- a/docker/Dockerfile-debug +++ b/docker/Dockerfile-debug @@ -6,6 +6,9 @@ ENV PHP_INI_PATH=/etc/php/${PHP_VERSION}/apache2/php.ini ENV PHP_CLI_INI_PATH=/etc/php/${PHP_VERSION}/cli/php.ini ENV PHP_XDEBUG_ENABLED=1 +RUN echo "opcache.revalidate_freq=0" >> ${PHP_INI_PATH} +RUN echo "opcache.revalidate_freq=0" >> ${PHP_CLI_INI_PATH} + RUN echo "zend_extension=$(find /usr/lib/php/ -name xdebug.so)" >> ${PHP_INI_PATH} \ && echo "xdebug.mode=coverage,debug" >> ${PHP_INI_PATH} \ && echo "xdebug.client_port=9003" >> ${PHP_INI_PATH} \ From 01399e4390f2814db9ad21d4d92cb281c0a8d049 Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Thu, 30 Oct 2025 08:51:45 -0400 Subject: [PATCH 021/118] Add last access timestamp to User API resource (#1322) --- .../Admin/Swagger/UserController.php | 1 + src/app/Http/Resources/Admin/UserResource.php | 1 + src/storage/api-docs/api-docs.json | 6 ++ src/tests/Feature/Admin/UserShowTest.php | 56 +++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/src/app/Http/Controllers/Admin/Swagger/UserController.php b/src/app/Http/Controllers/Admin/Swagger/UserController.php index 18b22cf6e..927467df6 100644 --- a/src/app/Http/Controllers/Admin/Swagger/UserController.php +++ b/src/app/Http/Controllers/Admin/Swagger/UserController.php @@ -13,6 +13,7 @@ * ), * @OA\Schema(schema="User", required={"id", "username", "type", "displayName", "description", "email", "ownerId"}, * @OA\Property(property="id", type="integer", example="0"), + * @OA\Property(property="lastAccess", type="string", format="date-time", nullable=true, example="2019-05-02T05:05:00.000000Z"), * allOf={ @OA\Schema(ref="#/components/schemas/UserBase") } * ), * @OA\Schema(schema="UserCreate", required={"username", "password", "type", "displayName"}, diff --git a/src/app/Http/Resources/Admin/UserResource.php b/src/app/Http/Resources/Admin/UserResource.php index 8810031f6..49edacf3f 100644 --- a/src/app/Http/Resources/Admin/UserResource.php +++ b/src/app/Http/Resources/Admin/UserResource.php @@ -24,6 +24,7 @@ public function toArray($request) 'description' => $this->description_string, 'email' => $this->email_address_string, 'ownerId' => $this->owner_id_bigint == -1 ? null : $this->owner_id_bigint, + 'lastAccess' => $this->tokens()->orderByDesc('last_used_at')->first()?->last_used_at, ]; } } diff --git a/src/storage/api-docs/api-docs.json b/src/storage/api-docs/api-docs.json index 3a3342cf7..4b6ebb10a 100644 --- a/src/storage/api-docs/api-docs.json +++ b/src/storage/api-docs/api-docs.json @@ -2928,6 +2928,12 @@ "id": { "type": "integer", "example": "0" + }, + "lastAccess": { + "type": "string", + "format": "date-time", + "example": "2019-05-02T05:05:00.000000Z", + "nullable": true } }, "type": "object" diff --git a/src/tests/Feature/Admin/UserShowTest.php b/src/tests/Feature/Admin/UserShowTest.php index 7cfcb0470..5f6da8809 100644 --- a/src/tests/Feature/Admin/UserShowTest.php +++ b/src/tests/Feature/Admin/UserShowTest.php @@ -117,4 +117,60 @@ public function testShowUserOwnerIdPositiveInt() $this->assertIsInt($data['ownerId']); $this->assertEquals($user->owner_id_bigint, $data['ownerId']); } + + public function testShowUserLastAccessNull() + { + $authUser = $this->createAdminUser(); + $token = $authUser->createToken('test')->plainTextToken; + + $userWithoutTokens = $this->createServiceBodyAdminUser(); + $userWithoutTokens->tokens()->delete(); + + $data = $this->withHeader('Authorization', "Bearer $token") + ->get("/api/v1/users/$userWithoutTokens->id_bigint") + ->assertStatus(200) + ->json(); + + $this->assertNull($data['lastAccess']); + } + + public function testShowUserLastAccessWithToken() + { + $user = $this->createAdminUser(); + $token = $user->createToken('test')->plainTextToken; + + $personalAccessToken = $user->tokens()->first(); + $lastUsedAt = now()->subHours(2); + $personalAccessToken->forceFill(['last_used_at' => $lastUsedAt])->save(); + + $data = $this->withHeader('Authorization', "Bearer $token") + ->get("/api/v1/users/$user->id_bigint") + ->assertStatus(200) + ->json(); + + $this->assertIsString($data['lastAccess']); + $personalAccessToken->refresh(); + $this->assertEquals($personalAccessToken->last_used_at->toJSON(), $data['lastAccess']); + } + + public function testShowUserLastAccessWithMultipleTokens() + { + $user = $this->createAdminUser(); + $token = $user->createToken('test')->plainTextToken; + + $olderToken = $user->createToken('older'); + $olderToken->accessToken->forceFill(['last_used_at' => now()->subDays(5)])->save(); + + $newerToken = $user->createToken('newer'); + $newerToken->accessToken->forceFill(['last_used_at' => now()->subHours(1)])->save(); + + $data = $this->withHeader('Authorization', "Bearer $token") + ->get("/api/v1/users/$user->id_bigint") + ->assertStatus(200) + ->json(); + + $this->assertIsString($data['lastAccess']); + $expectedMostRecent = $user->tokens()->orderByDesc('last_used_at')->first()->last_used_at; + $this->assertEquals($expectedMostRecent->toJSON(), $data['lastAccess']); + } } From 1e4fd820996fd220790b9fff4e6115337ddcb9c4 Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:08:08 -0400 Subject: [PATCH 022/118] Rename to last active at (#1323) --- Makefile | 2 +- .../Admin/Swagger/UserController.php | 2 +- src/app/Http/Resources/Admin/UserResource.php | 2 +- src/storage/api-docs/api-docs.json | 2 +- src/tests/Feature/Admin/UserShowTest.php | 20 +++++++++---------- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index e2d105671..74ddc9d7b 100644 --- a/Makefile +++ b/Makefile @@ -149,7 +149,7 @@ coverage-serve: ## Serves HTML Coverage Report .PHONY: generate-api-json generate-api-json: ## Generates Open API JSON - $(LINT_PREFIX) php artisan l5-swagger:generate + $(TEST_PREFIX) php artisan l5-swagger:generate .PHONY: lint lint: ## PHP Lint diff --git a/src/app/Http/Controllers/Admin/Swagger/UserController.php b/src/app/Http/Controllers/Admin/Swagger/UserController.php index 927467df6..c24613c5a 100644 --- a/src/app/Http/Controllers/Admin/Swagger/UserController.php +++ b/src/app/Http/Controllers/Admin/Swagger/UserController.php @@ -13,7 +13,7 @@ * ), * @OA\Schema(schema="User", required={"id", "username", "type", "displayName", "description", "email", "ownerId"}, * @OA\Property(property="id", type="integer", example="0"), - * @OA\Property(property="lastAccess", type="string", format="date-time", nullable=true, example="2019-05-02T05:05:00.000000Z"), + * @OA\Property(property="lastActiveAt", type="string", format="date-time", nullable=true, example="2019-05-02T05:05:00.000000Z"), * allOf={ @OA\Schema(ref="#/components/schemas/UserBase") } * ), * @OA\Schema(schema="UserCreate", required={"username", "password", "type", "displayName"}, diff --git a/src/app/Http/Resources/Admin/UserResource.php b/src/app/Http/Resources/Admin/UserResource.php index 49edacf3f..36d258748 100644 --- a/src/app/Http/Resources/Admin/UserResource.php +++ b/src/app/Http/Resources/Admin/UserResource.php @@ -24,7 +24,7 @@ public function toArray($request) 'description' => $this->description_string, 'email' => $this->email_address_string, 'ownerId' => $this->owner_id_bigint == -1 ? null : $this->owner_id_bigint, - 'lastAccess' => $this->tokens()->orderByDesc('last_used_at')->first()?->last_used_at, + 'lastActiveAt' => $this->tokens()->orderByDesc('last_used_at')->first()?->last_used_at, ]; } } diff --git a/src/storage/api-docs/api-docs.json b/src/storage/api-docs/api-docs.json index 4b6ebb10a..e22ff3714 100644 --- a/src/storage/api-docs/api-docs.json +++ b/src/storage/api-docs/api-docs.json @@ -2929,7 +2929,7 @@ "type": "integer", "example": "0" }, - "lastAccess": { + "lastActiveAt": { "type": "string", "format": "date-time", "example": "2019-05-02T05:05:00.000000Z", diff --git a/src/tests/Feature/Admin/UserShowTest.php b/src/tests/Feature/Admin/UserShowTest.php index 5f6da8809..821a92e04 100644 --- a/src/tests/Feature/Admin/UserShowTest.php +++ b/src/tests/Feature/Admin/UserShowTest.php @@ -118,7 +118,7 @@ public function testShowUserOwnerIdPositiveInt() $this->assertEquals($user->owner_id_bigint, $data['ownerId']); } - public function testShowUserLastAccessNull() + public function testShowUserLastAccessAtNull() { $authUser = $this->createAdminUser(); $token = $authUser->createToken('test')->plainTextToken; @@ -131,29 +131,29 @@ public function testShowUserLastAccessNull() ->assertStatus(200) ->json(); - $this->assertNull($data['lastAccess']); + $this->assertNull($data['lastActiveAt']); } - public function testShowUserLastAccessWithToken() + public function testShowUserLastAccessAtWithToken() { $user = $this->createAdminUser(); $token = $user->createToken('test')->plainTextToken; $personalAccessToken = $user->tokens()->first(); - $lastUsedAt = now()->subHours(2); - $personalAccessToken->forceFill(['last_used_at' => $lastUsedAt])->save(); + $lastActiveAt = now()->subHours(2); + $personalAccessToken->forceFill(['last_used_at' => $lastActiveAt])->save(); $data = $this->withHeader('Authorization', "Bearer $token") ->get("/api/v1/users/$user->id_bigint") ->assertStatus(200) ->json(); - $this->assertIsString($data['lastAccess']); + $this->assertIsString($data['lastActiveAt']); $personalAccessToken->refresh(); - $this->assertEquals($personalAccessToken->last_used_at->toJSON(), $data['lastAccess']); + $this->assertEquals($personalAccessToken->last_used_at->toJSON(), $data['lastActiveAt']); } - public function testShowUserLastAccessWithMultipleTokens() + public function testShowUserLastAccessAtWithMultipleTokens() { $user = $this->createAdminUser(); $token = $user->createToken('test')->plainTextToken; @@ -169,8 +169,8 @@ public function testShowUserLastAccessWithMultipleTokens() ->assertStatus(200) ->json(); - $this->assertIsString($data['lastAccess']); + $this->assertIsString($data['lastActiveAt']); $expectedMostRecent = $user->tokens()->orderByDesc('last_used_at')->first()->last_used_at; - $this->assertEquals($expectedMostRecent->toJSON(), $data['lastAccess']); + $this->assertEquals($expectedMostRecent->toJSON(), $data['lastActiveAt']); } } From 1cbd1553f06abf72a62a249dc59d704ef87bb19b Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:34:15 -0400 Subject: [PATCH 023/118] show last active at for user in ui (#1324) --- src/package-lock.json | 34 ++++++++++++++++++--- src/package.json | 2 +- src/resources/js/components/UserForm.svelte | 8 +++++ src/resources/js/lang/da.ts | 1 + src/resources/js/lang/de.ts | 1 + src/resources/js/lang/en.ts | 1 + src/resources/js/lang/es.ts | 1 + src/resources/js/lang/fa.ts | 1 + src/resources/js/lang/fr.ts | 1 + src/resources/js/lang/it.ts | 1 + src/resources/js/lang/pl.ts | 1 + src/resources/js/lang/pt.ts | 1 + src/resources/js/lang/ru.ts | 1 + src/resources/js/lang/sv.ts | 1 + 14 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index e62209788..ab7d3ae7d 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -9,7 +9,7 @@ "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", - "bmlt-server-client": "^1.3.3", + "bmlt-server-client": "^1.3.5", "felte": "^1.3.0", "geobuf": "^3.0.2", "leaflet": "^1.9.4", @@ -133,6 +133,7 @@ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -716,6 +717,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -739,6 +741,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2723,6 +2726,7 @@ "integrity": "sha512-3pppgIeIZs6nrQLazzKcdnTJ2IWiui/UucEPXKyFG35TKaHQrfkWBnv6hyJcLxFuR90t+LaoecrqTs8rJKWfSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", @@ -2786,6 +2790,7 @@ "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/Fuzzyma" @@ -2811,6 +2816,7 @@ "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 14.18" }, @@ -3161,6 +3167,7 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3549,6 +3556,7 @@ "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/types": "8.40.0", @@ -3898,6 +3906,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4240,9 +4249,9 @@ "license": "MIT" }, "node_modules/bmlt-server-client": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/bmlt-server-client/-/bmlt-server-client-1.3.3.tgz", - "integrity": "sha512-EuPo8bw0yNeEa9T1wsykP3ca6ZJMaErTEEyiXEp1G6/PDQDBrfSygYx5uI/vhmu7JCOCT5afzMe3uLP3vJP0aw==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/bmlt-server-client/-/bmlt-server-client-1.3.5.tgz", + "integrity": "sha512-QRT1pNqVNjcJv8PxVQ3JBiWbXFZb6wi88DNP2+91eA9Jgrb+lV9hZijlwiONYNXm78cxaPlijw2vHqz+SfbRNg==" }, "node_modules/brace-expansion": { "version": "1.1.12", @@ -4288,6 +4297,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001735", "electron-to-chromium": "^1.5.204", @@ -4922,6 +4932,7 @@ "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -6088,6 +6099,7 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -7029,6 +7041,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -8144,6 +8157,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -8284,6 +8298,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -8300,6 +8315,7 @@ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" @@ -8668,6 +8684,7 @@ "integrity": "sha512-BXHRqK1vyt9XVSEHZ9y7xdYtuYbwVod2mLwOMFP7t/Eqoc1pHRlG/WdV2qNeNvZHRQdLedaFycljaYYM96RqJQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8779,6 +8796,7 @@ "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -9127,6 +9145,7 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.39.12.tgz", "integrity": "sha512-CEzwxFuEycokU8K8CE/OuwVbmei+ivu2HvBGYIdASfMa1hCRSNr4RRkzNSvbAvu6h+BOig2CsZTAEY+WKvwZpA==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -9286,7 +9305,8 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.2.3", @@ -9645,6 +9665,7 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9766,6 +9787,7 @@ "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -9928,6 +9950,7 @@ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", @@ -10269,6 +10292,7 @@ "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz", "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==", "license": "MIT", + "peer": true, "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", diff --git a/src/package.json b/src/package.json index e7e846751..97eb81e5f 100644 --- a/src/package.json +++ b/src/package.json @@ -57,7 +57,7 @@ "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", - "bmlt-server-client": "^1.3.3", + "bmlt-server-client": "^1.3.5", "felte": "^1.3.0", "geobuf": "^3.0.2", "leaflet": "^1.9.4", diff --git a/src/resources/js/components/UserForm.svelte b/src/resources/js/components/UserForm.svelte index e2cce50ea..2502a4116 100644 --- a/src/resources/js/components/UserForm.svelte +++ b/src/resources/js/components/UserForm.svelte @@ -133,6 +133,14 @@
+ {#if selectedUser?.lastActiveAt} +
+ {$translations.lastActiveTitle}: + + {new Date(selectedUser.lastActiveAt).toLocaleString()} + +
+ {/if}
diff --git a/src/resources/js/lang/da.ts b/src/resources/js/lang/da.ts index ed1619932..d7ce42d00 100644 --- a/src/resources/js/lang/da.ts +++ b/src/resources/js/lang/da.ts @@ -148,6 +148,7 @@ export const daTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/de.ts b/src/resources/js/lang/de.ts index 8dd73b553..6b220b763 100644 --- a/src/resources/js/lang/de.ts +++ b/src/resources/js/lang/de.ts @@ -93,6 +93,7 @@ export const deTranslations = { keyIsReserved: 'Schlüssel ist reserviert -- bitte verwende etwas anderes', keyTitle: 'Schlüssel', languageSelectTitle: 'Sprache auswählen', + lastActiveTitle: 'Last Active', latitudeTitle: 'Breitengrad', loadFile: 'Load file', // TODO: translate loading: 'geladen ...', diff --git a/src/resources/js/lang/en.ts b/src/resources/js/lang/en.ts index 8780ad9a6..1d82db153 100644 --- a/src/resources/js/lang/en.ts +++ b/src/resources/js/lang/en.ts @@ -148,6 +148,7 @@ export const enTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/es.ts b/src/resources/js/lang/es.ts index a9e697c49..14ed42183 100644 --- a/src/resources/js/lang/es.ts +++ b/src/resources/js/lang/es.ts @@ -148,6 +148,7 @@ export const esTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/fa.ts b/src/resources/js/lang/fa.ts index 1b234b689..59e707b8b 100644 --- a/src/resources/js/lang/fa.ts +++ b/src/resources/js/lang/fa.ts @@ -148,6 +148,7 @@ export const faTranslations = { keyIsReserved: 'کلید محفوظ است - لطفا از چیز دیگری استفاده کنید', keyTitle: 'کلید', languageSelectTitle: 'انتخاب زبان', + lastActiveTitle: 'Last Active', latitudeTitle: 'عرض جغرافیایی', loadFile: 'بارگیری پرونده', loading: 'بارگیری ...', diff --git a/src/resources/js/lang/fr.ts b/src/resources/js/lang/fr.ts index cef394b3e..ee9dd46c0 100644 --- a/src/resources/js/lang/fr.ts +++ b/src/resources/js/lang/fr.ts @@ -148,6 +148,7 @@ export const frTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/it.ts b/src/resources/js/lang/it.ts index eee725c13..3bdf4d524 100644 --- a/src/resources/js/lang/it.ts +++ b/src/resources/js/lang/it.ts @@ -148,6 +148,7 @@ export const itTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/pl.ts b/src/resources/js/lang/pl.ts index 9578f89dc..a3cba6a89 100644 --- a/src/resources/js/lang/pl.ts +++ b/src/resources/js/lang/pl.ts @@ -148,6 +148,7 @@ export const plTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/pt.ts b/src/resources/js/lang/pt.ts index 1a9cc7a8d..67e3c52bf 100644 --- a/src/resources/js/lang/pt.ts +++ b/src/resources/js/lang/pt.ts @@ -148,6 +148,7 @@ export const ptTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/ru.ts b/src/resources/js/lang/ru.ts index a15263a66..476feb490 100644 --- a/src/resources/js/lang/ru.ts +++ b/src/resources/js/lang/ru.ts @@ -148,6 +148,7 @@ export const ruTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/sv.ts b/src/resources/js/lang/sv.ts index 7d49d234b..501f23a6f 100644 --- a/src/resources/js/lang/sv.ts +++ b/src/resources/js/lang/sv.ts @@ -148,6 +148,7 @@ export const svTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', + lastActiveTitle: 'Last Active', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', From 53f2c35ec65ec7f882dfc8bc6e5098e1f871fa7c Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Thu, 30 Oct 2025 21:01:51 -0400 Subject: [PATCH 024/118] Store user last login time in database instead of computing from tokens (#1327) --- .../Admin/Swagger/UserController.php | 2 +- .../Controllers/Admin/TokenController.php | 7 ++- src/app/Http/Resources/Admin/UserResource.php | 2 +- src/app/Models/User.php | 4 ++ src/package-lock.json | 8 ++-- src/package.json | 2 +- src/resources/js/components/UserForm.svelte | 6 +-- src/resources/js/lang/da.ts | 2 +- src/resources/js/lang/de.ts | 2 +- src/resources/js/lang/en.ts | 2 +- src/resources/js/lang/es.ts | 2 +- src/resources/js/lang/fa.ts | 2 +- src/resources/js/lang/fr.ts | 2 +- src/resources/js/lang/it.ts | 2 +- src/resources/js/lang/pl.ts | 2 +- src/resources/js/lang/pt.ts | 2 +- src/resources/js/lang/ru.ts | 2 +- src/resources/js/lang/sv.ts | 2 +- src/storage/api-docs/api-docs.json | 2 +- src/tests/Feature/Admin/UserShowTest.php | 44 +++++++++---------- 20 files changed, 53 insertions(+), 46 deletions(-) diff --git a/src/app/Http/Controllers/Admin/Swagger/UserController.php b/src/app/Http/Controllers/Admin/Swagger/UserController.php index c24613c5a..10290953d 100644 --- a/src/app/Http/Controllers/Admin/Swagger/UserController.php +++ b/src/app/Http/Controllers/Admin/Swagger/UserController.php @@ -13,7 +13,7 @@ * ), * @OA\Schema(schema="User", required={"id", "username", "type", "displayName", "description", "email", "ownerId"}, * @OA\Property(property="id", type="integer", example="0"), - * @OA\Property(property="lastActiveAt", type="string", format="date-time", nullable=true, example="2019-05-02T05:05:00.000000Z"), + * @OA\Property(property="lastLoginAt", type="string", format="date-time", nullable=true, example="2019-05-02T05:05:00.000000Z"), * allOf={ @OA\Schema(ref="#/components/schemas/UserBase") } * ), * @OA\Schema(schema="UserCreate", required={"username", "password", "type", "displayName"}, diff --git a/src/app/Http/Controllers/Admin/TokenController.php b/src/app/Http/Controllers/Admin/TokenController.php index d08eb77d0..b5db0064c 100644 --- a/src/app/Http/Controllers/Admin/TokenController.php +++ b/src/app/Http/Controllers/Admin/TokenController.php @@ -75,8 +75,13 @@ private function createToken(User $user) $expiresAt = 60 * config('sanctum.expiration', 0); $expiresAt += time(); + $token = $user->createToken(Str::random(20)); + + $user->last_access_datetime = $token->accessToken->created_at; + $user->save(); + return [ - 'access_token' => $user->createToken(Str::random(20))->plainTextToken, + 'access_token' => $token->plainTextToken, 'expires_at' => $expiresAt, 'token_type' => 'bearer', 'user_id' => $user->id_bigint, diff --git a/src/app/Http/Resources/Admin/UserResource.php b/src/app/Http/Resources/Admin/UserResource.php index 36d258748..72c48fdf9 100644 --- a/src/app/Http/Resources/Admin/UserResource.php +++ b/src/app/Http/Resources/Admin/UserResource.php @@ -24,7 +24,7 @@ public function toArray($request) 'description' => $this->description_string, 'email' => $this->email_address_string, 'ownerId' => $this->owner_id_bigint == -1 ? null : $this->owner_id_bigint, - 'lastActiveAt' => $this->tokens()->orderByDesc('last_used_at')->first()?->last_used_at, + 'lastLoginAt' => $this->last_access_datetime?->year > 1970 ? $this->last_access_datetime : null, ]; } } diff --git a/src/app/Models/User.php b/src/app/Models/User.php index 92edbd3d5..d7528dee9 100644 --- a/src/app/Models/User.php +++ b/src/app/Models/User.php @@ -50,6 +50,10 @@ class User extends Model implements AuthenticatableContract public $timestamps = false; protected $fillable = self::FIELDS; + protected $casts = [ + 'last_access_datetime' => 'datetime', + ]; + public function getAuthPassword() { return $this->password_string; diff --git a/src/package-lock.json b/src/package-lock.json index ab7d3ae7d..fd3f4c322 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -9,7 +9,7 @@ "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", - "bmlt-server-client": "^1.3.5", + "bmlt-server-client": "^1.3.6", "felte": "^1.3.0", "geobuf": "^3.0.2", "leaflet": "^1.9.4", @@ -4249,9 +4249,9 @@ "license": "MIT" }, "node_modules/bmlt-server-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/bmlt-server-client/-/bmlt-server-client-1.3.5.tgz", - "integrity": "sha512-QRT1pNqVNjcJv8PxVQ3JBiWbXFZb6wi88DNP2+91eA9Jgrb+lV9hZijlwiONYNXm78cxaPlijw2vHqz+SfbRNg==" + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/bmlt-server-client/-/bmlt-server-client-1.3.6.tgz", + "integrity": "sha512-5uVWC39hrsbjiRDnjCzHJd4tiUqsabYirN/cq9/EkdfsHLA+0EbUj4SZO8Sx8QJjjAjHXuM9sgMiU4Pctt3aJw==" }, "node_modules/brace-expansion": { "version": "1.1.12", diff --git a/src/package.json b/src/package.json index 97eb81e5f..f61138b91 100644 --- a/src/package.json +++ b/src/package.json @@ -57,7 +57,7 @@ "@googlemaps/js-api-loader": "^2.0.1", "@turf/boolean-point-in-polygon": "^7.2.0", "@turf/helpers": "^7.2.0", - "bmlt-server-client": "^1.3.5", + "bmlt-server-client": "^1.3.6", "felte": "^1.3.0", "geobuf": "^3.0.2", "leaflet": "^1.9.4", diff --git a/src/resources/js/components/UserForm.svelte b/src/resources/js/components/UserForm.svelte index 2502a4116..8074787a5 100644 --- a/src/resources/js/components/UserForm.svelte +++ b/src/resources/js/components/UserForm.svelte @@ -133,11 +133,11 @@ - {#if selectedUser?.lastActiveAt} + {#if selectedUser?.lastLoginAt}
- {$translations.lastActiveTitle}: + {$translations.lastLoginTitle}: - {new Date(selectedUser.lastActiveAt).toLocaleString()} + {new Date(selectedUser.lastLoginAt).toLocaleString()}
{/if} diff --git a/src/resources/js/lang/da.ts b/src/resources/js/lang/da.ts index d7ce42d00..54c419120 100644 --- a/src/resources/js/lang/da.ts +++ b/src/resources/js/lang/da.ts @@ -148,7 +148,7 @@ export const daTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/de.ts b/src/resources/js/lang/de.ts index 6b220b763..ae309b42d 100644 --- a/src/resources/js/lang/de.ts +++ b/src/resources/js/lang/de.ts @@ -93,7 +93,7 @@ export const deTranslations = { keyIsReserved: 'Schlüssel ist reserviert -- bitte verwende etwas anderes', keyTitle: 'Schlüssel', languageSelectTitle: 'Sprache auswählen', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Breitengrad', loadFile: 'Load file', // TODO: translate loading: 'geladen ...', diff --git a/src/resources/js/lang/en.ts b/src/resources/js/lang/en.ts index 1d82db153..bd61fb0ec 100644 --- a/src/resources/js/lang/en.ts +++ b/src/resources/js/lang/en.ts @@ -148,7 +148,7 @@ export const enTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/es.ts b/src/resources/js/lang/es.ts index 14ed42183..a0678104e 100644 --- a/src/resources/js/lang/es.ts +++ b/src/resources/js/lang/es.ts @@ -148,7 +148,7 @@ export const esTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/fa.ts b/src/resources/js/lang/fa.ts index 59e707b8b..f7d908b3b 100644 --- a/src/resources/js/lang/fa.ts +++ b/src/resources/js/lang/fa.ts @@ -148,7 +148,7 @@ export const faTranslations = { keyIsReserved: 'کلید محفوظ است - لطفا از چیز دیگری استفاده کنید', keyTitle: 'کلید', languageSelectTitle: 'انتخاب زبان', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'عرض جغرافیایی', loadFile: 'بارگیری پرونده', loading: 'بارگیری ...', diff --git a/src/resources/js/lang/fr.ts b/src/resources/js/lang/fr.ts index ee9dd46c0..ab9aa6c7d 100644 --- a/src/resources/js/lang/fr.ts +++ b/src/resources/js/lang/fr.ts @@ -148,7 +148,7 @@ export const frTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/it.ts b/src/resources/js/lang/it.ts index 3bdf4d524..4436d5b82 100644 --- a/src/resources/js/lang/it.ts +++ b/src/resources/js/lang/it.ts @@ -148,7 +148,7 @@ export const itTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/pl.ts b/src/resources/js/lang/pl.ts index a3cba6a89..0767aa0f6 100644 --- a/src/resources/js/lang/pl.ts +++ b/src/resources/js/lang/pl.ts @@ -148,7 +148,7 @@ export const plTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/pt.ts b/src/resources/js/lang/pt.ts index 67e3c52bf..a79bbc664 100644 --- a/src/resources/js/lang/pt.ts +++ b/src/resources/js/lang/pt.ts @@ -148,7 +148,7 @@ export const ptTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/ru.ts b/src/resources/js/lang/ru.ts index 476feb490..326c7e06c 100644 --- a/src/resources/js/lang/ru.ts +++ b/src/resources/js/lang/ru.ts @@ -148,7 +148,7 @@ export const ruTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/resources/js/lang/sv.ts b/src/resources/js/lang/sv.ts index 501f23a6f..5af5fd77d 100644 --- a/src/resources/js/lang/sv.ts +++ b/src/resources/js/lang/sv.ts @@ -148,7 +148,7 @@ export const svTranslations = { keyIsReserved: 'key is reserved -- please use something else', keyTitle: 'Key', languageSelectTitle: 'Select Language', - lastActiveTitle: 'Last Active', + lastLoginTitle: 'Last Login', latitudeTitle: 'Latitude', loadFile: 'Load file', loading: 'loading ...', diff --git a/src/storage/api-docs/api-docs.json b/src/storage/api-docs/api-docs.json index e22ff3714..73328fc39 100644 --- a/src/storage/api-docs/api-docs.json +++ b/src/storage/api-docs/api-docs.json @@ -2929,7 +2929,7 @@ "type": "integer", "example": "0" }, - "lastActiveAt": { + "lastLoginAt": { "type": "string", "format": "date-time", "example": "2019-05-02T05:05:00.000000Z", diff --git a/src/tests/Feature/Admin/UserShowTest.php b/src/tests/Feature/Admin/UserShowTest.php index 821a92e04..f8c05d9e6 100644 --- a/src/tests/Feature/Admin/UserShowTest.php +++ b/src/tests/Feature/Admin/UserShowTest.php @@ -122,55 +122,53 @@ public function testShowUserLastAccessAtNull() { $authUser = $this->createAdminUser(); $token = $authUser->createToken('test')->plainTextToken; - - $userWithoutTokens = $this->createServiceBodyAdminUser(); - $userWithoutTokens->tokens()->delete(); + $userWithoutAccess = $this->createServiceBodyAdminUser(); $data = $this->withHeader('Authorization', "Bearer $token") - ->get("/api/v1/users/$userWithoutTokens->id_bigint") + ->get("/api/v1/users/$userWithoutAccess->id_bigint") ->assertStatus(200) ->json(); - $this->assertNull($data['lastActiveAt']); + $this->assertNull($data['lastLoginAt']); } public function testShowUserLastAccessAtWithToken() { - $user = $this->createAdminUser(); - $token = $user->createToken('test')->plainTextToken; + $authUser = $this->createAdminUser(); + $token = $authUser->createToken('test')->plainTextToken; - $personalAccessToken = $user->tokens()->first(); - $lastActiveAt = now()->subHours(2); - $personalAccessToken->forceFill(['last_used_at' => $lastActiveAt])->save(); + $user = $this->createServiceBodyAdminUser(); + $lastLoginAt = \Carbon\Carbon::parse('2025-06-15 10:00:00', 'UTC'); + $user->last_access_datetime = $lastLoginAt; + $user->save(); $data = $this->withHeader('Authorization', "Bearer $token") ->get("/api/v1/users/$user->id_bigint") ->assertStatus(200) ->json(); - $this->assertIsString($data['lastActiveAt']); - $personalAccessToken->refresh(); - $this->assertEquals($personalAccessToken->last_used_at->toJSON(), $data['lastActiveAt']); + $this->assertIsString($data['lastLoginAt']); + $user->refresh(); + $this->assertEquals($user->last_access_datetime->toJSON(), $data['lastLoginAt']); } public function testShowUserLastAccessAtWithMultipleTokens() { - $user = $this->createAdminUser(); - $token = $user->createToken('test')->plainTextToken; - - $olderToken = $user->createToken('older'); - $olderToken->accessToken->forceFill(['last_used_at' => now()->subDays(5)])->save(); + $authUser = $this->createAdminUser(); + $token = $authUser->createToken('test')->plainTextToken; - $newerToken = $user->createToken('newer'); - $newerToken->accessToken->forceFill(['last_used_at' => now()->subHours(1)])->save(); + $user = $this->createServiceBodyAdminUser(); + $mostRecentAccess = \Carbon\Carbon::parse('2025-06-15 14:30:00', 'UTC'); + $user->last_access_datetime = $mostRecentAccess; + $user->save(); $data = $this->withHeader('Authorization', "Bearer $token") ->get("/api/v1/users/$user->id_bigint") ->assertStatus(200) ->json(); - $this->assertIsString($data['lastActiveAt']); - $expectedMostRecent = $user->tokens()->orderByDesc('last_used_at')->first()->last_used_at; - $this->assertEquals($expectedMostRecent->toJSON(), $data['lastActiveAt']); + $this->assertIsString($data['lastLoginAt']); + $user->refresh(); + $this->assertEquals($user->last_access_datetime->toJSON(), $data['lastLoginAt']); } } From 8d57c7a9cd67badbf3f885e483d4db7d14fee1fc Mon Sep 17 00:00:00 2001 From: Daniel Brotsky Date: Fri, 31 Oct 2025 14:37:49 -0700 Subject: [PATCH 025/118] Correctly map JS 'da' to database 'dk'. (#1329) --- src/resources/js/routes/Formats.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/js/routes/Formats.svelte b/src/resources/js/routes/Formats.svelte index b9b668999..9de30c69d 100644 --- a/src/resources/js/routes/Formats.svelte +++ b/src/resources/js/routes/Formats.svelte @@ -96,7 +96,7 @@ // English; if no English version, then just pick the first one in the array. If that doesn't exist either then return a blank. // This last case only arises when trying to create a format with no translations; the UI signals an error if that happens. export function getFormatName(format: Format): string { - const n = format.translations.find((t) => t.language === language); + const n = format.translations.find((t) => t.language === (language == 'da' ? 'dk' : language)); if (n) { return `(${n.key}) ${n.name}`; } else { From 5df8ba2aff80bbd3b702289d1e9712ef8a4328ae Mon Sep 17 00:00:00 2001 From: pjaudiomv <34245618+pjaudiomv@users.noreply.github.com> Date: Fri, 31 Oct 2025 18:11:50 -0400 Subject: [PATCH 026/118] disable fields for auto geocoding (#1330) --- docker/write-config.sh | 12 +++++++++++ .../js/components/MeetingEditForm.svelte | 21 +++++++++++++++---- src/resources/js/lang/da.ts | 1 + src/resources/js/lang/de.ts | 1 + src/resources/js/lang/en.ts | 1 + src/resources/js/lang/es.ts | 1 + src/resources/js/lang/fa.ts | 1 + src/resources/js/lang/fr.ts | 1 + src/resources/js/lang/it.ts | 1 + src/resources/js/lang/pl.ts | 1 + src/resources/js/lang/pt.ts | 1 + src/resources/js/lang/ru.ts | 1 + src/resources/js/lang/sv.ts | 1 + 13 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docker/write-config.sh b/docker/write-config.sh index c9b2a282a..7a38bd2b0 100644 --- a/docker/write-config.sh +++ b/docker/write-config.sh @@ -79,3 +79,15 @@ if [ "$ENABLE_LANGUAGE_SELECTOR" == "false" ]; then else echo "\$g_enable_language_selector = true;" >> /var/www/html/auto-config.inc.php fi + +if [ "$COUNTY_AUTO_GEOCODING_ENABLED" == "true" ]; then + echo "\$county_auto_geocoding_enabled = true;" >> /var/www/html/auto-config.inc.php +else + echo "\$county_auto_geocoding_enabled = false;" >> /var/www/html/auto-config.inc.php +fi + +if [ "$ZIP_AUTO_GEOCODING_ENABLED" == "true" ]; then + echo "\$zip_auto_geocoding_enabled = true;" >> /var/www/html/auto-config.inc.php +else + echo "\$zip_auto_geocoding_enabled = false;" >> /var/www/html/auto-config.inc.php +fi diff --git a/src/resources/js/components/MeetingEditForm.svelte b/src/resources/js/components/MeetingEditForm.svelte index 046eaa0e1..ac516cbc9 100644 --- a/src/resources/js/components/MeetingEditForm.svelte +++ b/src/resources/js/components/MeetingEditForm.svelte @@ -2,7 +2,7 @@ import { SvelteSet } from 'svelte/reactivity'; import { validator } from '@felte/validator-yup'; import { createForm } from 'felte'; - import { Button, Checkbox, Hr, Label, Input, Helper, Select, MultiSelect, Badge } from 'flowbite-svelte'; + import { Button, Checkbox, Hr, Label, Input, Helper, Select, MultiSelect, Badge, Tooltip } from 'flowbite-svelte'; import * as yup from 'yup'; import L from 'leaflet'; import { writable } from 'svelte/store'; @@ -1074,9 +1074,19 @@
{#if countiesAndSubProvincesChoices.length > 0} - {:else} - + + {/if} + {#if globalSettings.countyAutoGeocodingEnabled} + {$translations.automaticallyCalculatedOnSave} {/if} {#if $errors.locationSubProvince} @@ -1101,7 +1111,10 @@
- + + {#if globalSettings.zipAutoGeocodingEnabled} + {$translations.automaticallyCalculatedOnSave} + {/if} {#if $errors.locationPostalCode1} {$errors.locationPostalCode1} diff --git a/src/resources/js/lang/da.ts b/src/resources/js/lang/da.ts index 54c419120..3ae275e20 100644 --- a/src/resources/js/lang/da.ts +++ b/src/resources/js/lang/da.ts @@ -69,6 +69,7 @@ export const daTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/de.ts b/src/resources/js/lang/de.ts index ae309b42d..a090768da 100644 --- a/src/resources/js/lang/de.ts +++ b/src/resources/js/lang/de.ts @@ -14,6 +14,7 @@ export const deTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Änderung anwenden', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Stadtviertel', // TODO: check this - English is Borough/City Subsection busLinesTitle: 'Buslinien', by: 'von', diff --git a/src/resources/js/lang/en.ts b/src/resources/js/lang/en.ts index bd61fb0ec..49e6a69dd 100644 --- a/src/resources/js/lang/en.ts +++ b/src/resources/js/lang/en.ts @@ -69,6 +69,7 @@ export const enTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/es.ts b/src/resources/js/lang/es.ts index a0678104e..874496760 100644 --- a/src/resources/js/lang/es.ts +++ b/src/resources/js/lang/es.ts @@ -69,6 +69,7 @@ export const esTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/fa.ts b/src/resources/js/lang/fa.ts index f7d908b3b..03e3ab2d5 100644 --- a/src/resources/js/lang/fa.ts +++ b/src/resources/js/lang/fa.ts @@ -69,6 +69,7 @@ export const faTranslations = { adminTitle: 'ادمین', anteMeridiem: 'ق.ظ', applyChangesTitle: 'ذخیره تغییرات', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'بخش منطقه/شهر', busLinesTitle: 'خطوط اتوبوس', by: 'بوسیله', diff --git a/src/resources/js/lang/fr.ts b/src/resources/js/lang/fr.ts index ab9aa6c7d..8ea54e6aa 100644 --- a/src/resources/js/lang/fr.ts +++ b/src/resources/js/lang/fr.ts @@ -69,6 +69,7 @@ export const frTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/it.ts b/src/resources/js/lang/it.ts index 4436d5b82..58f871739 100644 --- a/src/resources/js/lang/it.ts +++ b/src/resources/js/lang/it.ts @@ -69,6 +69,7 @@ export const itTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/pl.ts b/src/resources/js/lang/pl.ts index 0767aa0f6..5ac616c16 100644 --- a/src/resources/js/lang/pl.ts +++ b/src/resources/js/lang/pl.ts @@ -69,6 +69,7 @@ export const plTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/pt.ts b/src/resources/js/lang/pt.ts index a79bbc664..2bdf822f6 100644 --- a/src/resources/js/lang/pt.ts +++ b/src/resources/js/lang/pt.ts @@ -69,6 +69,7 @@ export const ptTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/ru.ts b/src/resources/js/lang/ru.ts index 326c7e06c..cb1a5cde5 100644 --- a/src/resources/js/lang/ru.ts +++ b/src/resources/js/lang/ru.ts @@ -69,6 +69,7 @@ export const ruTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', diff --git a/src/resources/js/lang/sv.ts b/src/resources/js/lang/sv.ts index 5af5fd77d..c929528cd 100644 --- a/src/resources/js/lang/sv.ts +++ b/src/resources/js/lang/sv.ts @@ -69,6 +69,7 @@ export const svTranslations = { adminTitle: 'Admin', anteMeridiem: 'AM', applyChangesTitle: 'Apply Changes', + automaticallyCalculatedOnSave: 'Automatically calculated on save', boroughTitle: 'Borough/City Subsection', busLinesTitle: 'Bus Lines', by: 'by', From 672b80c05629b004f7503cb57408cfe34c3c3069 Mon Sep 17 00:00:00 2001 From: Daniel Brotsky Date: Fri, 31 Oct 2025 18:50:41 -0700 Subject: [PATCH 027/118] Fix color of labels in FormatForm. (#1331) The FormatForm uses BasicAccordion, which tries to adjust the color of the enclosed labels in a surrounding div class. But this is overridden by the class applies by Label. This change moves the desired label color adjustment into the Label element class override. --- src/resources/js/components/FormatForm.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resources/js/components/FormatForm.svelte b/src/resources/js/components/FormatForm.svelte index eb36538c2..6b781459f 100644 --- a/src/resources/js/components/FormatForm.svelte +++ b/src/resources/js/components/FormatForm.svelte @@ -254,7 +254,7 @@ {#each allLanguages as lang (lang)}
- + {#if $errors[lang + '_key']} @@ -263,7 +263,7 @@
- + {#if $errors[lang + '_name']} @@ -272,7 +272,7 @@
- + {#if $errors[lang + '_description']} From 9e6e0eeae7f51c42e8351b363602113b961a9d3e Mon Sep 17 00:00:00 2001 From: Daniel Brotsky Date: Fri, 31 Oct 2025 18:51:43 -0700 Subject: [PATCH 028/118] Fix color of chevron in BasicAccordion. (#1332) The basic accordion has a dark background, and the open/close chevron was being drawn in the same color. This adjusts the color to be the same as the heading. --- src/resources/js/components/BasicAccordion.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/js/components/BasicAccordion.svelte b/src/resources/js/components/BasicAccordion.svelte index b867a2edf..312e01797 100644 --- a/src/resources/js/components/BasicAccordion.svelte +++ b/src/resources/js/components/BasicAccordion.svelte @@ -25,11 +25,11 @@ {header} {#if open} -
-
{$translations.error} @@ -50,20 +43,13 @@ ${$translations.time}: ${formatTimestamp($errorModal.timestamp)}`;
{#if $errorModal.details} - - - {#if showDetails} -
-

{$translations.technicalDetails}:

- '; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['user_editor_account_email_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= $this->return_user_editor_button_panel(); - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a user selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_user_popup($users) - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a user level popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_user_level_popup() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $disabled = $this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN ? '' : ' disabled'; - $ret = ''; - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a user owner selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_user_owner_popup($users) - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $disabled = $this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN ? '' : ' disabled'; - $ret = ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the User editor buttons as a div. - \returns The HTML and JavaScript for the button panel. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_user_editor_button_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['user_save_button']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - $ret .= ''; - $delete_button_href = $this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN ? 'javascript:admin_handler_object.deleteUser();' : 'javascript:void(0);'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['user_delete_button']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - $delete_perm_checkbox_disabled = $this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN ? '' : 'disabled '; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['user_cancel_button']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the Service body editor panel. Only Server Admins and Service Body Admins get this one. - \returns The HTML and JavaScript for the "Service Body Administration" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_service_body_admin_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - $full_editors = $this->get_full_editor_users(); - - if (count($full_editors)) { // Have to have at least one Service body admin - $ret = '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''; - $ret .= htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_disclosure']); - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['need_refresh_message_fader_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_success_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_fail_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_create_success_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_create_fail_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_delete_success_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_change_fader_delete_fail_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= '
'; - - $ret .= $this->return_single_service_body_editor_panel(); - $ret .= '
'; - $ret .= ''; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a window for the Service Body administrator. - \returns The HTML and JavaScript for the "Service Body Administration" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_service_body_editor_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - if (!($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) && count($this->my_editable_service_bodies) == 1) { - $ret .= ''.htmlspecialchars($this->my_editable_service_bodies[0]->GetLocalName()).''; - } else { - $ret .= $this->create_service_body_popup(); - } - - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_id_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_user_label']).''; - - if ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) { - $ret .= ''; - $ret .= $this->create_service_body_user_popup(); - $ret .= ''; - } else { - $ret .= ''; - } - $ret .= '
'; - $ret .= '
'; - if ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) { - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_type_label']).''; - $ret .= ''; - $ret .= $this->create_service_body_type_popup(); - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_parent_popup_label']).''; - $ret .= ''; - $ret .= $this->create_service_body_parent_popup(); - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - // This is the part of the form that allows us to import a list of IDs from NAWS, and replace them in our database. - if (defined('__NAWS_IMPORT__')) { - $ret .= '
'; - $ret .= '
'; - } - } - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_name_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_description_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_email_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_uri_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_world_cc_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_helpline_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - $full_editors = $this->get_full_editor_users(); - $basic_editors = $this->get_basic_editor_users(); - $observers = $this->get_observer_users(); - - if (count($full_editors)) { - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_full_editor_label']).''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_full_editor_desc']).''; - $ret .= '
'; - - foreach ($full_editors as $user) { - $ret .= ''; - $ret .= ''; - $ret .= '
'; - } - - $ret .= '
'; - $ret .= '
'; - } - - if (count($observers)) { - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_observer_label']).''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_editor_screen_sb_admin_observer_desc']).''; - $ret .= '
'; - - foreach ($observers as $user) { - $ret .= ''; - $ret .= ''; - $ret .= '
'; - } - $ret .= '
'; - $ret .= '
'; - } - - $ret .= '
'; - $ret .= $this->return_service_body_editor_button_panel(); - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This gets just the Service Body Admin Users, and returns their objects in an array. - \returns An array with the user objects (instances of c_comdef_user) - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_full_editor_users() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = array (); - - for ($c = 0; $c < count($this->my_users); $c++) { - $user = $this->my_users[$c]; - if ($user->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) { - array_push($ret, $user); - } - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This gets just the Service Body Editor (Trainee) Users, and returns their objects in an array. - \returns An array with the user objects (instances of c_comdef_user) - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_basic_editor_users() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = array (); - - for ($c = 0; $c < count($this->my_users); $c++) { - $user = $this->my_users[$c]; - if ($user->GetUserLevel() == _USER_LEVEL_EDITOR) { - array_push($ret, $user); - } - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This gets just the Observer Users, and returns their objects in an array. - \returns An array with the user objects (instances of c_comdef_user) - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_observer_users() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = array (); - - for ($c = 0; $c < count($this->my_users); $c++) { - $user = $this->my_users[$c]; - if ($user->GetUserLevel() == _USER_LEVEL_OBSERVER) { - array_push($ret, $user); - } - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a Service body parent selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_service_body_parent_popup() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a Service body selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_service_body_popup() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a Service body selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_service_body_type_popup() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - return $ret; - } - - /********************************************************************************************************//** - \brief This returns the user name for a given user ID. - \returns a string, containing the name. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_user_name_from_id( - $in_user_id ///< The ID to look up. - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - - for ($index = 0; $index < count($this->my_users); $index++) { - $user = $this->my_users[$index]; - if ($user->GetID() == $in_user_id) { - $ret = $user->GetLocalName(); - break; - } - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This creates the HTML for a Service body selection popup menu. - \returns The HTML and JavaScript for the popup menu (select element). - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function create_service_body_user_popup() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the Service body editor buttons as a div. - \returns The HTML and JavaScript for the button panel. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_service_body_editor_button_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_save_button']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - if ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) { - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_delete_button']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - } - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['service_body_cancel_button']).''; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the meeting editor section of the console. Most user levels (not observers) have it. - \returns The HTML and JavaScript for the "Edit Meetings" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_editor_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - $can_edit = false; - - for ($c = 0; $c < count($this->my_service_bodies); $c++) { - if ($this->my_service_bodies[$c]->UserCanEditMeetings()) { - $can_edit = true; - } - } - - if ($can_edit) { - $ret = ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['need_refresh_message_fader_text']).''; - $ret .= '
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_success_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_success_delete_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_success_add_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_fail_delete_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_failure_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_change_fader_fail_add_text']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .='
'; - $ret .= $this->return_meeting_editor_tab_div(); - $ret .= '
'; - $ret .='
'; - $ret .= $this->return_meeting_specification_panel(); - $ret .= $this->return_meeting_editor_meetings_panel(); - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the tab div that allows the user to select between a search and results. - \returns The HTML and JavaScript for the Meeting Editor Tabs - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_editor_tab_div() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret =''; - $ret .=''; - $ret .= '
'; - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the meeting search specification panel of the meeting editor. - \returns The HTML and JavaScript for the Edit Meetings Search Specifier section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_specification_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_text_input_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_search_weekdays_label']).''; - $ret .= '
'; - for ($c = 0; $c < 8; $c++) { - $ret .= ''; - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''.(defined('__DEBUG_MODE__') ? "\n" : ''); - $ret .= ''; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= $this->return_meeting_start_time_selection_panel(); - if (count($this->my_service_bodies) > 1) { - $ret .= $this->return_meeting_service_body_selection_panel(); - } - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_publish_search_prompt']).''; - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ' '; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_tab_specifier_text']).''; - $ret .= ''; - $ret .= 'AJAX Throbber'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a panel that displays a choice of Service bodies for the user to choose. - \returns The HTML and JavaScript for the Edit Meetings Search Specifier section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_start_time_selection_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_search_start_time_label']).''; - $ret .= '
'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a panel that displays a choice of Service bodies for the user to choose. - \returns The HTML and JavaScript for the Edit Meetings Search Specifier section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_service_body_selection_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = 'NOT AUTHORIZED'; - - if (count($this->my_service_bodies)) { - $ret = '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_search_service_bodies_label']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= $this->populate_service_bodies(0); - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - } - - return $ret; - } - - /************************************************************************************//** - \brief Build the content for the Advanced Service Bodies section. - ****************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function populate_service_bodies( - $in_id ///< The ID of the Service body. - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $service_body_content = ''; - $child_content = ''; - - foreach ($this->my_all_service_bodies as $service_body) { - if ($in_id == $service_body->GetID()) { - if ($service_body->UserCanEditMeetings()) { - $service_body_content = ''; - $service_body_content .= ''; - $service_body_content .= ''; - $service_body_content .= ''; - } - } elseif ($in_id == $service_body->GetOwnerID()) { - $child_content .= $this->populate_service_bodies($service_body->GetID()); - } - } - - // At this point, we have the main Service body, as well as any child content. - - if ($service_body_content) { - $service_body_content = '
'.$service_body_content.'
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - } - - if ($child_content) { - $child_content = '
'.$child_content.'
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - } - - $ret = ''; - - if ($service_body_content || $child_content) { - $ret = '
'.(defined('__DEBUG_MODE__') ? "\n" : '').$service_body_content.(defined('__DEBUG_MODE__') ? "\n" : '').$child_content.'
'.(defined('__DEBUG_MODE__') ? "\n" : ''); - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the combined new meetings/search results panel. - \returns The HTML and JavaScript for the Edit Meetings Search Results section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_editor_meetings_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - if (($this->my_user->GetUserLevel() == _USER_LEVEL_EDITOR) || ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) || ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN)) { - $ret = '
'; - $ret .= '
'; - $ret .= $this->return_single_meeting_editor_template(); - $ret .= $this->return_new_meeting_panel(); - $ret .= $this->return_meeting_results_panel(); - $ret .= '
'; - $ret .= '
'; - } else { - die('THIS USER NOT AUTHORIZED TO EDIT MEETINGS'); - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a panel for creating new meetings that goes above the results. - \returns The HTML and JavaScript for the New Meetings section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_new_meeting_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the meeting search results panel of the meeting editor. - \returns The HTML and JavaScript for the Search Results section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_results_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a template to be filled in for a single meeting that will be edited. - \returns The HTML and JavaScript for the "Edit Meetings" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_editor_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''; - $ret .= $this->return_meeting_editor_button_panel(); - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the meeting editor buttons as a div. - \returns The HTML and JavaScript for the button panel. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_meeting_editor_button_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_save_buttonName']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_delete_button']).''; - $ret .= 'AJAX Throbber'; - $ret .= ''; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_cancel_button']).''; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a template to be filled in for the basic options tab. - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_basic_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - if (($this->my_user->GetUserLevel() == _USER_LEVEL_EDITOR) || ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) || ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN)) { - $ret = '
'; - - if ($this->my_user->GetUserLevel() != _USER_LEVEL_EDITOR) { - $ret .= '
'; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - $ret .= '
'; - $ret .= ' '; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_unpublished_note']).''; - $ret .= '
'; - $ret .= '
'; - } - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_id_label']).''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_name_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_name_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_weekday_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_start_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ':'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_duration_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ':'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - if ($this->my_localized_strings['meeting_time_zones_enabled']) { - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_time_zone_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - } - - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_cc_label']).''; - $ret .= '
' . '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_cc_advice']).''; - $ret .= '
'; - $ret .= '
'; - - if (count($this->my_service_bodies) > 1) { - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_sb_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - } - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_contact_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_contact_prompt']) . '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_visibility_advice']).''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs a template to be filled in for the location options tab. - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_location_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_venue_type']).''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_longitude_label']).''; - $ret .= 'my_localized_strings['auto_geocoding_enabled'] ? 'readonly' : '') . '/>
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_longitude_prompt']) . '
'; - if ($this->my_localized_strings['auto_geocoding_enabled']) { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['automatically_calculated_on_save']).''; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_latitude_label']).''; - $ret .= 'my_localized_strings['auto_geocoding_enabled'] ? 'readonly' : '') . ' />
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_latitude_prompt']) . '
'; - if ($this->my_localized_strings['auto_geocoding_enabled']) { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['automatically_calculated_on_save']).''; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_location_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_location_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_info_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_info_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_street_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_street_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_neighborhood_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_neighborhood_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_borough_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_borough_prompt']). '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_city_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_city_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_county_label']).''; - $ret .= ''; - if ((!$this->my_localized_strings['auto_geocoding_enabled'] || !$this->my_localized_strings['county_auto_geocoding_enabled']) && is_array($this->my_localized_strings['meeting_counties_and_sub_provinces']) && count($this->my_localized_strings['meeting_counties_and_sub_provinces'])) { - $ret .= ''; - } else { - $ret .= 'my_localized_strings['auto_geocoding_enabled'] && $this->my_localized_strings['county_auto_geocoding_enabled'] ? 'readonly' : '') . ' />'; - } - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_county_prompt']) . '
'; - if ($this->my_localized_strings['auto_geocoding_enabled'] && $this->my_localized_strings['county_auto_geocoding_enabled']) { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['automatically_calculated_on_save']).''; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_state_label']).''; - $ret .= ''; - if (is_array($this->my_localized_strings['meeting_states_and_provinces']) && count($this->my_localized_strings['meeting_states_and_provinces'])) { - $ret .= ''; - } else { - $ret .= ''; - } - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_state_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_zip_label']).''; - $ret .= 'my_localized_strings['auto_geocoding_enabled'] && $this->my_localized_strings['zip_auto_geocoding_enabled'] ? 'readonly' : '') . '/>
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_zip_prompt']) . '
'; - if ($this->my_localized_strings['auto_geocoding_enabled'] && $this->my_localized_strings['zip_auto_geocoding_enabled']) { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['automatically_calculated_on_save']).''; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_nation_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_nation_prompt']).'
'; - $ret .= '
'; - $ret .= '
'; - - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_phone_meeting_number_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_phone_meeting_number_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_virtual_meeting_link_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_virtual_meeting_link_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_virtual_meeting_additional_info_label']).''; - $ret .= '
' . htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt']) . '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - public function getDisplayTextForFormatTypeKey($type) - { - if (isset($this->my_localized_strings['comdef_server_admin_strings']['format_type_codes'][$type->getKey()])) { - return $this->my_localized_strings['comdef_server_admin_strings']['format_type_codes'][$type->GetKey()]; - } - return $this->my_localized_strings['comdef_server_admin_strings']['unknown_format_type']. - $type->GetApiEnum(); - } - /********************************************************************************************************//** - \brief - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_format_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
'; - $f_array = $this->my_server->GetFormatsArray(); - $f_array = $f_array[$this->my_server->GetLocalLang()]; - if ($this->my_localized_strings['sort_formats']) { - usort($f_array, function ($a, $b) { - return strnatcasecmp($a->GetKey(), $b->GetKey()); - }); - } - $formats_by_formattype = array(); - foreach ($f_array as $format) { - $type = $format->GetFormatType(); - if (is_null($type)) { - $type = ''; - } else if (strpos($type, '-')>0) { - $type = substr($type, 0, strpos($type, '-')); - } - if (!isset($formats_by_formattype[$type])) { - $formats_by_formattype[$type] = array(); - } - $formats_by_formattype[$type][] = $format; - } - foreach ($this->my_format_types as $format_type) { - if (isset($formats_by_formattype[$format_type->getKey()])) { - $ret .= '
'; - $ret .= '
'.$this->getDisplayTextForFormatTypeKey($format_type).'
'; - $ret .= $this->format_type_section_checkboxes($formats_by_formattype[$format_type->getKey()]); - unset($formats_by_formattype[$format_type->getKey()]); - $ret .= '
'; - } - } - if (count($formats_by_formattype) > 0) { - $ret .= '
'; - $ret .= '
'.$this->my_localized_strings['comdef_server_admin_strings']['other_or_empty_format_type'].'
'; - - foreach ($formats_by_formattype as $format_array) { - $ret .= $this->format_type_section_checkboxes($format_array); - } - $ret .= '
'; - } - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - return $ret; - } - /********************************************************************************************************//** - \brief - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - private function format_type_section_checkboxes($formats) - { - $ret = ''; - foreach ($formats as $format) { - $ret .= '
'; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - } - return $ret; - } - /********************************************************************************************************//** - \brief - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_other_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - foreach ($this->my_data_field_templates as $data_field) { - $key = $data_field['key']; - $prompt = $data_field['field_prompt']; - switch ($key) { - case 'id_bigint': // All of these are ignored, as they are taken care of in other option sheets. - case 'worldid_mixed': - case 'shared_group_id_bigint': - case 'service_body_bigint': - case 'weekday_tinyint': - case 'venue_type': - case 'start_time': - case 'formats': - case 'lang_enum': - case 'longitude': - case 'latitude': - case 'email_contact': - case 'meeting_name': - case 'location_text': - case 'location_info': - case 'location_street': - case 'location_neighborhood': - case 'location_city_subsection': - case 'location_municipality': - case 'location_sub_province': - case 'location_province': - case 'location_postal_code_1': - case 'location_nation': - case 'phone_meeting_number': - case 'virtual_meeting_link': - case 'virtual_meeting_additional_info': - break; - - default: // We display these ones. - if (array_key_exists('meeting_editor_screen_meeting_' . $key . '_label', $this->my_localized_strings['comdef_server_admin_strings'])) { - $prompt = $this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_' . $key . '_label']; - } - $ret .= '
'; - $ret .= ''.htmlspecialchars($prompt).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - if ($data_field['visibility'] == _VISIBILITY_NONE_) { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['meeting_editor_screen_meeting_visibility_advice']).''; - } - $ret .= '
'; - $ret .= '
'; - break; - } - } - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief - \returns The HTML and JavaScript for the option sheet. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_single_meeting_history_template() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '
'; - $ret .= '
AJAX Throbber
'; - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the "Server Administration" section of the console. Server Admins and Service Body admins can see this. - \returns The HTML and JavaScript for the "Server Administration" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_server_admin_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - - - $ret .= '
'; - $ret .= '
'; - $ret .= ''; - // Put the select menu, or "popup", here - if ($this->my_user->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) { - $ret .= ''; - } else { - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['update_world_ids_from_spreadsheet_dropdown_text']).''; - } - $ret .= ''; - - // World IDs update - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['server_admin_naws_spreadsheet_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - // NAWS Import - $ret .= '
'; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['server_admin_naws_import_spreadsheet_label']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - $ret .= ''.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['server_admin_naws_import_initially_publish']).''; - $ret .= ''; - $ret .= ''; - $ret .= ''; - $ret .= '  '.htmlspecialchars($this->my_localized_strings['comdef_server_admin_strings']['server_admin_naws_import_explanation']).''; - $ret .= '
'; - $ret .= ''; - $ret .= '
'; - $ret .= '
'; - - - - $ret .= '
'; - $ret .= '
'; - - $ret .= '
'; - - return $ret; - } - - /********************************************************************************************************//** - \brief This constructs the "My Account" section of the console. All user levels will have this. - \returns The HTML and JavaScript for the "My Account" section. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function return_user_account_settings_panel() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - $ret .= ''; - - return $ret; - } - - /************************************************************************************//** - \brief Used to sort users and service body names. - ****************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function compare_names($a, $b) - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - return strnatcasecmp($a->GetLocalName(), $b->GetLocalName()); - } -} diff --git a/src/legacy/local_server/server_admin/c_comdef_admin_xml_handler.class.php b/src/legacy/local_server/server_admin/c_comdef_admin_xml_handler.class.php deleted file mode 100644 index 0346d8011..000000000 --- a/src/legacy/local_server/server_admin/c_comdef_admin_xml_handler.class.php +++ /dev/null @@ -1,1880 +0,0 @@ -. -*/ -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. -/***********************************************************************************************************//** - \class c_comdef_admin_xml_handler - \brief Controls handling of the admin semantic interface. - - This class should not even be instantiated unless the user has been authorized, and an authorized seesion - is in progress. -***************************************************************************************************************/ -// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace -// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps -class c_comdef_admin_xml_handler -// phpcs:enable PSR1.Classes.ClassDeclaration.MissingNamespace -// phpcs:enable Squiz.Classes.ValidClassName.NotCamelCaps -{ - public $http_vars; ///< This will hold the combined GET and POST parameters for this call. - public $server; ///< The BMLT server model instance. - public $my_localized_strings; ///< An array of localized strings. - public $handled_service_body_ids; ///< This is used to ensure that we respect the hierarchy when doing a hierarchical Service body request. - - /********************************************************************************************************//** - \brief The class constructor. - ************************************************************************************************************/ - public function __construct( - $in_http_vars, ///< The combined GET and POST parameters. - $in_server ///< The BMLT server instance. - ) { - $this->http_vars = $in_http_vars; - $this->server = $in_server; - $this->my_localized_strings = c_comdef_server::GetLocalStrings(); - $this->handled_service_body_ids = array(); - } - - /********************************************************************************************************//** - \brief This returns the URL to the main server. It needs extra stripping, because we're depper than usual. - - \returns the URL. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function getMainURL() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - return dirname(dirname(GetURLToMainServerDirectory(false))).'/'; - } - - /********************************************************************************************************//** - \brief This extracts a meeting's essential data as XML. - - \returns the XML for the meeting data. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_meeting_data($meeting_id) - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - $meeting_object = c_comdef_server::GetOneMeeting($meeting_id); - - if (($meeting_object instanceof c_comdef_meeting) && (intval($meeting_object->GetID()) == intval($meeting_id))) { - $localized_strings = c_comdef_server::GetLocalStrings(); - $meeting_id = $meeting_object->GetID(); - $weekday_tinyint = intval($meeting_object->GetMeetingDataValue('weekday_tinyint')); - $weekday_name = $localized_strings["comdef_server_admin_strings"]["meeting_search_weekdays_names"][$weekday_tinyint]; - $start_time = $meeting_object->GetMeetingDataValue('start_time'); - $meeting_name = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $meeting_object->GetMeetingDataValue('meeting_name')))); - $meeting_borough = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $meeting_object->GetMeetingDataValue('location_city_subsection')))); - $meeting_town = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $meeting_object->GetMeetingDataValue('location_municipality')))); - $meeting_state = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $meeting_object->GetMeetingDataValue('location_province')))); - - $ret = '"meeting_id","meeting_name","weekday_tinyint","weekday_name","start_time","location_city_subsection","location_municipality","location_province"'."\n"; - - if ($meeting_id) { - $change_line['meeting_id'] = $meeting_id; - } else { - $change_line['meeting_id'] = 0; - } - - if ($meeting_name) { - $change_line['meeting_name'] = $meeting_name; - } else { - $change_line['meeting_name'] = ''; - } - - if ($weekday_tinyint) { - $change_line['weekday_tinyint'] = $weekday_tinyint; - } else { - $change_line['weekday_tinyint'] = ''; - } - - if ($weekday_name) { - $change_line['weekday_name'] = $weekday_name; - } else { - $change_line['weekday_name'] = ''; - } - - if ($start_time) { - $change_line['start_time'] = $start_time; - } else { - $change_line['start_time'] = ''; - } - - if ($meeting_borough) { - $change_line['location_city_subsection'] = $meeting_borough; - } else { - $change_line['location_city_subsection'] = ''; - } - - if ($meeting_town) { - $change_line['location_municipality'] = $meeting_town; - } else { - $change_line['location_municipality'] = ''; - } - - if ($meeting_state) { - $change_line['location_province'] = $meeting_state; - } else { - $change_line['location_province'] = ''; - } - - $ret .= '"'.implode('","', $change_line).'"'."\n"; - $ret = $this->TranslateCSVToXML($ret); - $ret = "\ngetMainURL()."client_interface/xsd/RestoreDeletedMeeting.php\">$ret"; - } else { - $ret = '

PROGRAM ERROR (MEETING FETCH FAILED)

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This is called to process the input and generate the output. It is the "heart" of the class. - - \returns XML to be returned. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_commands() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - // We make sure that we are allowed to access this level of functionality. - // This is "belt and suspenders." We will constantly check user credentials. - if ($this->basic_user_validation()) { - if (isset($this->http_vars['admin_action']) && trim($this->http_vars['admin_action'])) { - set_time_limit(120); // Some requests can take a loooong time... - switch (strtolower(trim($this->http_vars['admin_action']))) { - case 'get_permissions': - $ret = $this->process_capabilities_request(); - break; - - case 'get_service_body_info': - $ret = $this->process_service_bodies_info_request(); - break; - - case 'get_format_info': - $ret = $this->process_format_info(); - break; - - case 'get_field_templates': - $ret = $this->process_get_field_templates(); - break; - - case 'get_meetings': - $ret = $this->process_meeting_search(); - break; - - case 'get_deleted_meetings': - $ret = $this->process_deleted_meetings(); - break; - - case 'get_changes': - $ret = $this->process_changes(); - break; - - case 'add_meeting': - $this->http_vars['meeting_id'] = 0; - unset($this->http_vars['meeting_id']); // Make sure that we have no meeting ID. This forces an add. - $ret = $this->process_meeting_modify(); - break; - - case 'rollback_meeting_to_before_change': - if (intval($this->http_vars['meeting_id']) && intval($this->http_vars['change_id'])) { // Make sure that we are referring to a meeting and a change. - $ret = $this->process_rollback_meeting(); - } else { - $ret = '

BAD ADMIN ACTION

'; - } - break; - - case 'restore_deleted_meeting': - if (intval($this->http_vars['meeting_id'])) { // Make sure that we are referring to a meeting - $ret = $this->process_restore_deleted_meeting(); - } else { - $ret = '

BAD ADMIN ACTION

'; - } - break; - - case 'modify_meeting': - if (intval($this->http_vars['meeting_id'])) { // Make sure that we are referring to a meeting. - $ret = $this->process_meeting_modify(); - } else { - $ret = '

BAD ADMIN ACTION

'; - } - break; - - case 'delete_meeting': - if (intval($this->http_vars['meeting_id'])) { // Make sure that we are referring to a meeting - $ret = $this->process_meeting_delete(); - } else { - $ret = '

BAD ADMIN ACTION

'; - } - break; - - case 'get_user_info': - $ret = $this->process_user_info(); - break; - - default: - $ret = '

BAD ADMIN ACTION

'; - break; - } - - set_time_limit(30); // Probably unnecessary... - } else { - $ret = '

BAD ADMIN ACTION

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This is a basic funtion that tests the current user, to see if they are basically valid. - - \returns TRUE, if the user is valid. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function basic_user_validation() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = false; - - $user_obj = $this->server->GetCurrentUserObj(); - // First, make sure the use is of the correct general type. - if (isset($user_obj) && ($user_obj instanceof c_comdef_user) && ($user_obj->GetUserLevel() != _USER_LEVEL_DEACTIVATED) && ($user_obj->GetUserLevel() != _USER_LEVEL_SERVER_ADMIN) && ($user_obj->GetID() > 1)) { - $ret = true; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to get change records. - - \returns the XML for the change data. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_changes() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '

NOT AUTHORIZED

'; - - // First, make sure the use is of the correct general type. - if ($this->basic_user_validation()) { - $start_date = (isset($this->http_vars['from_date']) && $this->http_vars['from_date']) ? strtotime($this->http_vars['from_date']) : (isset($this->http_vars['start_date']) && intval($this->http_vars['start_date']) ? intval($this->http_vars['start_date']) : null); - $end_date = (isset($this->http_vars['to_date']) && $this->http_vars['to_date']) ? strtotime($this->http_vars['to_date']) : (isset($this->http_vars['end_date']) && intval($this->http_vars['end_date']) ? intval($this->http_vars['end_date']) : null); - $meeting_id = isset($this->http_vars['meeting_id']) && intval($this->http_vars['meeting_id']) ? intval($this->http_vars['meeting_id']) : null; - $user_id = isset($this->http_vars['user_id']) && intval($this->http_vars['user_id']) ? intval($this->http_vars['user_id']) : null; - $service_body_id = null; - - if (isset($this->http_vars['service_body_id'])) { - $service_body_array = explode(",", $this->http_vars['service_body_id']); - - foreach ($service_body_array as $sb) { - $sb_int = intval($sb); - - if ($sb_int > 0) { - $sb_obj = c_comdef_server::GetServiceBodyByIDObj($sb_int); - - if ($sb_obj instanceof c_comdef_service_body) { - if ($sb_obj->UserCanObserve()) { - if (!isset($service_body_id)) { - $service_body_id = $sb_int; - } elseif (!is_array($service_body_id)) { - $service_body_id = array ( $service_body_id, $sb_int ); - } else { - $service_body_id[] = $sb_int; - } - } - } - } - } - } - - // We get the changes as CSV, then immediately turn them into XML. - $ret = $this->TranslateCSVToXML($this->get_changes_as_csv($start_date, $end_date, $meeting_id, $user_id, $service_body_id)); - $ret = "\ngetMainURL()."client_interface/xsd/GetChanges.php\">$ret"; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to restore a single deleted meeting. - - \returns the current meeting XML, if the rollback was successful. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_rollback_meeting() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = '

NOT AUTHORIZED

'; - - // First, make sure the user is of the correct general type. - if ($this->basic_user_validation()) { - $ret = '

PROGRAM ERROR (ROLLBACK FAILED)

'; - - $meeting_id = isset($this->http_vars['meeting_id']) && intval($this->http_vars['meeting_id']) ? intval($this->http_vars['meeting_id']) : null; - $change_id = isset($this->http_vars['change_id']) && intval($this->http_vars['change_id']) ? intval($this->http_vars['change_id']) : null; - - if ($meeting_id && $change_id) { - $change_objects = c_comdef_server::GetChangesFromIDAndType('c_comdef_meeting', $meeting_id); - - if ($change_objects instanceof c_comdef_changes) { - $obj_array = $change_objects->GetChangesObjects(); - - if (is_array($obj_array) && count($obj_array)) { - foreach ($obj_array as $change) { - if ($change->GetID() == $change_id) { - $beforeMeetingObject = $change->GetBeforeObject(); - if ($beforeMeetingObject) { - $currentMeetingObject = c_comdef_server::GetOneMeeting($meeting_id); - - if (($beforeMeetingObject instanceof c_comdef_meeting) && ($currentMeetingObject instanceof c_comdef_meeting)) { - if ($currentMeetingObject->UserCanEdit() && $beforeMeetingObject->UserCanEdit()) { - if ($change->Rollback()) { - $meeting_object = c_comdef_server::GetOneMeeting($meeting_id); - - $ret = $this->get_meeting_data($meeting_id); - } - } - } - } - - break; - } - } - } - } - } - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to restore a single deleted meeting. - - \returns the XML for the meeting data. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_restore_deleted_meeting() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - // First, make sure the user is of the correct general type. - if ($this->basic_user_validation()) { - $meeting_id = isset($this->http_vars['meeting_id']) && intval($this->http_vars['meeting_id']) ? intval($this->http_vars['meeting_id']) : null; - - if ($meeting_id) { - $change_objects = c_comdef_server::GetChangesFromIDAndType('c_comdef_meeting', $meeting_id); - - if ($change_objects instanceof c_comdef_changes) { - $obj_array = $change_objects->GetChangesObjects(); - - if (is_array($obj_array) && count($obj_array)) { - foreach ($obj_array as $change) { - if ($change instanceof c_comdef_change) { - if ($change->GetAfterObject()) { - continue; - } - - $unrestored_meeting_object = $change->GetBeforeObject(); - - if ($unrestored_meeting_object->UserCanEdit()) { - $unrestored_meeting_object->SetPublished(false); // Newly restored meetings are always unpublished. - $unrestored_meeting_object->UpdateToDB(); - $ret = $this->get_meeting_data($meeting_id); - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

PROGRAM ERROR (NO VALID CHANGE RECORD)

'; - } - } - } else { - $ret = '

NO MEETING AVAILABLE

'; - } - } else { - $ret = '

NO MEETING AVAILABLE

'; - } - } else { - $ret = '

NO MEETING SPECIFIED

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to delete a meeting. - - \returns the XML for the meeting data. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_deleted_meetings() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - // First, make sure the user is of the correct general type. - if ($this->basic_user_validation()) { - $start_date = (isset($this->http_vars['from_date']) && $this->http_vars['from_date']) ? strtotime($this->http_vars['from_date']) : (isset($this->http_vars['start_date']) && intval($this->http_vars['start_date']) ? intval($this->http_vars['start_date']) : null); - $end_date = (isset($this->http_vars['to_date']) && $this->http_vars['to_date']) ? strtotime($this->http_vars['to_date']) : (isset($this->http_vars['end_date']) && intval($this->http_vars['end_date']) ? intval($this->http_vars['end_date']) : null); - $meeting_id = isset($this->http_vars['meeting_id']) && intval($this->http_vars['meeting_id']) ? intval($this->http_vars['meeting_id']) : null; - $user_id = isset($this->http_vars['user_id']) && intval($this->http_vars['user_id']) ? intval($this->http_vars['user_id']) : null; - $service_body_id = null; - - if (isset($this->http_vars['service_body_id'])) { - $service_body_array = explode(",", $this->http_vars['service_body_id']); - - foreach ($service_body_array as $sb) { - $sb_int = intval($sb); - - if ($sb_int > 0) { - $sb_obj = c_comdef_server::GetServiceBodyByIDObj($sb_int); - - if ($sb_obj instanceof c_comdef_service_body) { - if ($sb_obj->UserCanObserve()) { - if (!isset($service_body_id)) { - $service_body_id = $sb_int; - } elseif (!is_array($service_body_id)) { - $service_body_id = array ( $service_body_id, $sb_int ); - } else { - $service_body_id[] = $sb_int; - } - } - } - } - } - } - - // We get the deleted meetings as CSV, then immediately turn them into XML. - $ret = $this->get_deleted_meetings_as_csv($start_date, $end_date, $meeting_id, $user_id, $service_body_id); - $ret = $this->TranslateCSVToXML($ret); - $ret = "\ngetMainURL()."client_interface/xsd/GetDeletedMeetings.php\">$ret"; - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /*******************************************************************/ - /** - \brief This returns deleted meeting records in CSV form (which we turn into XML). - - \returns CSV data, with the first row a key header. - */ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_deleted_meetings_as_csv( - $in_start_date = null, ///< Optional. A start date (In PHP time() format). If supplied, then only deletions on, or after this date will be returned. - $in_end_date = null, ///< Optional. An end date (In PHP time() format). If supplied, then only deletions that occurred on, or before this date will be returned. - $in_meeting_id = null, ///< Optional. If supplied, an ID for a particular meeting. Only deletion for that meeting will be returned. - $in_user_id = null, ///< Optional. If supplied, an ID for a particular user. Only deletions made by that user will be returned. - $in_sb_id = null ///< Optional. If supplied, an ID for a particular Service body. Only deletions for meetings in that Service body will be returned. If this is an array, then multiple Service bodies will be searched. - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - try { - $change_objects = c_comdef_server::GetChangesFromIDAndType('c_comdef_meeting', null, $in_start_date, $in_end_date); - if ($change_objects instanceof c_comdef_changes) { - $obj_array = $change_objects->GetChangesObjects(); - - if (is_array($obj_array) && count($obj_array)) { - set_time_limit(max(30, intval(count($obj_array) / 20))); // Change requests can take a loooong time... - $localized_strings = c_comdef_server::GetLocalStrings(); - require_once(dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'); - // These are our columns. This will be our header line. - $ret = '"deletion_date_int","deletion_date_string","user_id","user_name","service_body_id","service_body_name","meeting_id","meeting_name","weekday_tinyint","weekday_name","start_time","location_city_subsection","location_municipality","location_province"'."\n"; - - // If they specify a Service body, we also look in "child" Service bodies, so we need to produce a flat array of IDs. - if (isset($in_sb_id) && $in_sb_id) { - // If this is not an array, then we check for children. If it is an array, then we just do exactly what is in the array, regardless of children. - if (!is_array($in_sb_id) || !count($in_sb_id)) { - global $bmlt_array_gather; - - $bmlt_array_gather = array(); - - /************************************************//** - * This little internal function will simply fill * - * the $bmlt_array_gather array with a linear set of * - * Service body IDs that can be used for a quick * - * comparison, later on. It is a callback function. * - ****************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - function bmlt_at_at( - $in_value, - $in_key - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - global $bmlt_array_gather; - - if ($in_value instanceof c_comdef_service_body) { - array_push($bmlt_array_gather, $in_value->GetID()); - } - } - - $array_to_walk = c_comdef_server::GetServer()->GetNestedServiceBodyArray($in_sb_id); - array_walk_recursive($array_to_walk, 'bmlt_at_at'); - - if (is_array($bmlt_array_gather) && count($bmlt_array_gather)) { - $in_sb_id = $bmlt_array_gather; - } else { - $in_sb_id = array ( $in_sb_id ); - } - } - } - - $fetched_ids_array = array(); - - foreach ($obj_array as $change) { - $date_int = intval($change->GetChangeDate()); - $date_string = date("Y-m-d H:m:s", $date_int); - - if ($change instanceof c_comdef_change) { - $b_obj = $change->GetBeforeObject(); - - if ($change->GetAfterObject()) { // We are only interested in deleted meetings. If After exists, it was not a deletion. - continue; - } - - $meeting_id = intval($change->GetBeforeObjectID()); // By default, we get the meeting ID from the "before" object. - $sb_b = intval(($b_obj instanceof c_comdef_meeting) ? $b_obj->GetServiceBodyID() : 0); - - $sb_obj = c_comdef_server::GetServiceBodyByIDObj($sb_b); - if (($sb_obj instanceof c_comdef_service_body) && $sb_obj->UserCanObserve()) { - $sb_c = intval($change->GetServiceBodyID()); - - if (in_array($meeting_id, $fetched_ids_array)) { - continue; - } - - // If this meeting currently exists, then it doesn't qualify. - if (c_comdef_server::GetMeetingsByID(array ( $meeting_id ))) { - continue; - } - - $fetched_ids_array[] = $meeting_id; - - // If we are looking for a particular meeting, and this is it, or we don't care, then go ahead. - if ((intval($in_meeting_id) && intval($in_meeting_id) == intval($meeting_id)) || !intval($in_meeting_id)) { - $meeting_name = ''; - $user_name = ''; - $meeting_town = ''; - $meeting_state = ''; - - // If we are looking for a particular Service body, and this is it, or we don't caer about the Service body, then go ahead. - if (!is_array($in_sb_id) || !count($in_sb_id) || in_array($sb_b, $in_sb_id) || in_array($sb_c, $in_sb_id)) { - $sb_id = (intval($sb_c) ? $sb_c : $sb_b); - - $user_id = intval($change->GetUserID()); - - // If the user was specified, we look for changes by that user only. Otherwise, we don't care. - if ((isset($in_user_id) && $in_user_id && ($in_user_id == $user_id)) || !isset($in_user_id) || !$in_user_id) { - // Get the user that created this change. - $user = c_comdef_server::GetUserByIDObj($user_id); - - if ($user instanceof c_comdef_user) { - $user_name = $user->GetLocalName(); - } else { - $user_name = '????'; // Otherwise, it's a mystery. - } - - // Using str_replace, because preg_replace is pretty expensive. However, I don't think this buys us much. - if ($b_obj instanceof c_comdef_meeting) { - $meeting_name = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $b_obj->GetMeetingDataValue('meeting_name')))); - $meeting_borough = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $b_obj->GetMeetingDataValue('location_city_subsection')))); - $meeting_town = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $b_obj->GetMeetingDataValue('location_municipality')))); - $meeting_state = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $b_obj->GetMeetingDataValue('location_province')))); - } - - $weekday_tinyint = intval($b_obj->GetMeetingDataValue('weekday_tinyint')); - $weekday_name = $localized_strings["comdef_server_admin_strings"]["meeting_search_weekdays_names"][$weekday_tinyint]; - - $start_time = $b_obj->GetMeetingDataValue('start_time'); - - $sb = c_comdef_server::GetServiceBodyByIDObj($sb_id); - - if ($sb instanceof c_comdef_service_body) { - $sb_name = $sb->GetLocalName(); - } else { - $sb_name = '????'; - } - - // We create an array, which we'll implode after we're done. Easy way to create a CSV row. - $change_line = array(); - - // Create each column for this row. - if ($date_int) { - $change_line['deletion_date_int'] = $date_int; - } else { - $change_line['deletion_date_int'] = 0; - } - - if ($date_string) { - $change_line['deletion_date_string'] = $date_string; - } else { - $change_line['deletion_date_string'] = ''; - } - - if ($user_id) { - $change_line['user_id'] = $user_id; - } else { - $change_line['user_id'] = 0; - } - - if ($user_name) { - $change_line['user_name'] = $user_name; - } else { - $change_line['user_name'] = ''; - } - - if ($sb_id) { - $change_line['service_body_id'] = $sb_id; - } else { - $change_line['service_body_id'] = ''; - } - - if ($sb_name) { - $change_line['service_body_name'] = $sb_name; - } else { - $change_line['service_body_name'] = ''; - } - - if ($meeting_id) { - $change_line['meeting_id'] = $meeting_id; - } else { - $change_line['meeting_id'] = 0; - } - - if ($meeting_name) { - $change_line['meeting_name'] = $meeting_name; - } else { - $change_line['meeting_name'] = ''; - } - - if ($weekday_tinyint) { - $change_line['weekday_tinyint'] = $weekday_tinyint; - } else { - $change_line['weekday_tinyint'] = ''; - } - - if ($weekday_name) { - $change_line['weekday_name'] = $weekday_name; - } else { - $change_line['weekday_name'] = ''; - } - - if ($start_time) { - $change_line['start_time'] = $start_time; - } else { - $change_line['start_time'] = ''; - } - - if ($meeting_borough) { - $change_line['location_city_subsection'] = $meeting_borough; - } else { - $change_line['location_city_subsection'] = ''; - } - - if ($meeting_town) { - $change_line['location_municipality'] = $meeting_town; - } else { - $change_line['location_municipality'] = ''; - } - - if ($meeting_state) { - $change_line['location_province'] = $meeting_state; - } else { - $change_line['location_province'] = ''; - } - - $ret .= '"'.implode('","', $change_line).'"'."\n"; - } - } - } - } - } - } - } - } - } catch (Exception $e) { - $ret = '

ERROR

'; - } - - return $ret; - } - - /*******************************************************************/ - /** - \brief This returns change records in CSV form (which we turn into XML). - - \returns CSV data, with the first row a key header. - */ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function get_changes_as_csv( - $in_start_date = null, ///< Optional. A start date (In PHP time() format). If supplied, then only changes on, or after this date will be returned. - $in_end_date = null, ///< Optional. An end date (In PHP time() format). If supplied, then only changes that occurred on, or before this date will be returned. - $in_meeting_id = null, ///< Optional. If supplied, an ID for a particular meeting. Only changes for that meeting will be returned. - $in_user_id = null, ///< Optional. If supplied, an ID for a particular user. Only changes made by that user will be returned. - $in_sb_id = null, ///< Optional. If supplied, an ID for a particular Service body. Only changes for that Service body will be returned. - $in_change_type = 'c_comdef_meeting' ///< This is the change type. Default is meeting change (NOTE: This function needs work to handle other types, but I figured I'd put in a hook for later). - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - try { - // Start by getting every meeting change between the given dates. - $change_objects = c_comdef_server::GetChangesFromIDAndType($in_change_type, null, $in_start_date, $in_end_date); - if ($change_objects instanceof c_comdef_changes) { - $obj_array = $change_objects->GetChangesObjects(); - - if (is_array($obj_array) && count($obj_array)) { - set_time_limit(max(30, intval(count($obj_array) / 20))); // Change requests can take a loooong time... - $localized_strings = c_comdef_server::GetLocalStrings(); - require_once(dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'); - // These are our columns. This will be our header line. - $ret = '"new_meeting","change_id","date_int","date_string","change_type","meeting_id","meeting_name","user_id","user_name","service_body_id","service_body_name","meeting_exists","details"'."\n"; - - // If they specify a Service body, we also look in "child" Service bodies, so we need to produce a flat array of IDs. - if (isset($in_sb_id) && $in_sb_id) { - // If this is not an array, then we check for children. If it is an array, then we just do exactly what is in the array, regardless of children. - if (!is_array($in_sb_id) || !count($in_sb_id)) { - global $bmlt_array_gather; - - $bmlt_array_gather = array(); - - /************************************************//** - * This little internal function will simply fill * - * the $bmlt_array_gather array with a linear set of * - * Service body IDs that can be used for a quick * - * comparison, later on. It is a callback function. * - ****************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - function bmlt_at_at( - $in_value, - $in_key - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - global $bmlt_array_gather; - - if ($in_value instanceof c_comdef_service_body) { - array_push($bmlt_array_gather, $in_value->GetID()); - } - } - - $array_to_walk = c_comdef_server::GetServer()->GetNestedServiceBodyArray($in_sb_id); - array_walk_recursive($array_to_walk, 'bmlt_at_at'); - - if (is_array($bmlt_array_gather) && count($bmlt_array_gather)) { - $in_sb_id = $bmlt_array_gather; - } else { - $in_sb_id = array ( $in_sb_id ); - } - } - } - - foreach ($obj_array as $change) { - $change_type = $change->GetChangeType(); - $date_int = intval($change->GetChangeDate()); - $date_string = date("Y-m-d H:m:s", $date_int); - - if ($change instanceof c_comdef_change) { - $b_obj = $change->GetBeforeObject(); - $a_obj = $change->GetAfterObject(); - $meeting_id = intval($change->GetBeforeObjectID()); // By default, we get the meeting ID from the "before" object. - $sb_a = intval(($a_obj instanceof c_comdef_meeting) ? $a_obj->GetServiceBodyID() : 0); - $sb_b = intval(($b_obj instanceof c_comdef_meeting) ? $b_obj->GetServiceBodyID() : 0); - $sb_c = intval($change->GetServiceBodyID()); - - // If the meeting was newly created, then we get the ID from the "after" object. - if (!$meeting_id) { - $meeting_id = intval($change->GetAfterObjectID()); - } - - // If we are looking for a particular meeting, and this is it, or we don't care, then go ahead. - if ((intval($in_meeting_id) && intval($in_meeting_id) == intval($meeting_id)) || !intval($in_meeting_id)) { - $meeting_name = ''; - $user_name = ''; - - // If we are looking for a particular Service body, and this is it, or we don't caer about the Service body, then go ahead. - if (!is_array($in_sb_id) || !count($in_sb_id) || in_array($sb_a, $in_sb_id) || in_array($sb_b, $in_sb_id) || in_array($sb_c, $in_sb_id)) { - $sb_id = (intval($sb_c) ? $sb_c : (intval($sb_b) ? $sb_b : $sb_a)); - - $user_id = intval($change->GetUserID()); - - // If the user was specified, we look for changes by that user only. Otherwise, we don't care. - if ((isset($in_user_id) && $in_user_id && ($in_user_id == $user_id)) || !isset($in_user_id) || !$in_user_id) { - // Get the user that created this change. - $user = c_comdef_server::GetUserByIDObj($user_id); - - if ($user instanceof c_comdef_user) { - $user_name = $user->GetLocalName(); - } else { - $user_name = '????'; // Otherwise, it's a mystery. - } - - // Using str_replace, because preg_replace is pretty expensive. However, I don't think this buys us much. - if ($b_obj instanceof c_comdef_meeting) { - $meeting_name = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $b_obj->GetMeetingDataValue('meeting_name')))); - } elseif ($a_obj instanceof c_comdef_meeting) { - $meeting_name = str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $a_obj->GetMeetingDataValue('meeting_name')))); - } - - $sb = c_comdef_server::GetServiceBodyByIDObj($sb_id); - - if ($sb instanceof c_comdef_service_body) { - $sb_name = $sb->GetLocalName(); - } else { - $sb_name = '????'; - } - - // We see if the meeting currently exists. - $meeting_exists = 0; - - if (c_comdef_server::GetOneMeeting($meeting_id, true)) { - $meeting_exists = 1; - } - - // Get the details of the change. - $details = ''; - $desc = $change->DetailedChangeDescription(); - - if ($desc && isset($desc['details']) && is_array($desc['details'])) { - // We need to prevent double-quotes, as they are the string delimiters, so we replace them with single-quotes. - $details = htmlspecialchars_decode(str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", implode(" ", $desc['details'])))), ENT_COMPAT); - } elseif ($desc && isset($desc['details'])) { - // We need to prevent double-quotes, as they are the string delimiters, so we replace them with single-quotes. - $details = htmlspecialchars_decode(str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $desc['details']))), ENT_COMPAT); - } else { - $details = htmlspecialchars_decode(str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $desc['overall']))), ENT_COMPAT); - } - - // We create an array, which we'll implode after we're done. Easy way to create a CSV row. - $change_line = array(); - - // Create each column for this row. - $change_line["new_meeting"] = ($b_obj instanceof c_comdef_meeting) ? 0 : 1; - - $change_line['change_id'] = $change->GetID(); - - if ($date_int) { - $change_line['date_int'] = $date_int; - } else { - $change_line['date_int'] = 0; - } - - if ($date_string) { - $change_line['date_string'] = $date_string; - } else { - $change_line['date_string'] = ''; - } - - if ($change_type) { - $change_line['change_type'] = $change_type; - } else { - $change_line['change_type'] = ''; - } - - if ($meeting_id) { - $change_line['meeting_id'] = $meeting_id; - } else { - $change_line['meeting_id'] = 0; - } - - if ($meeting_name) { - $change_line['meeting_name'] = $meeting_name; - } else { - $change_line['meeting_name'] = ''; - } - - if ($user_id) { - $change_line['user_id'] = $user_id; - } else { - $change_line['user_id'] = 0; - } - - if ($user_name) { - $change_line['user_name'] = $user_name; - } else { - $change_line['user_name'] = ''; - } - - if ($sb_id) { - $change_line['service_body_id'] = $sb_id; - } else { - $change_line['service_body_id'] = ''; - } - - if ($sb_name) { - $change_line['service_body_name'] = $sb_name; - } else { - $change_line['service_body_name'] = ''; - } - - $change_line['meeting_exists'] = $meeting_exists; - - if ($details) { - $change_line['details'] = $details; - } else { - $change_line['details'] = ''; - } - - $ret .= '"'.implode('","', $change_line).'"'."\n"; - } - } - } - } - } - } - } - } catch (Exception $e) { - $ret = '

ERROR

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to get all the available fields for adding/modifying meeting data. - - \returns the XML for the template data. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_get_field_templates() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - // First, make sure the use is of the correct general type. - if ($this->basic_user_validation()) { - // Get the template data from the database. - $template_data = array_merge(c_comdef_meeting::GetMainDataTemplate(), c_comdef_meeting::GetDataTableTemplate()); - $template_longdata = c_comdef_meeting::GetLongDataTableTemplate(); - - // We merge the two tables (data and longdata). - if (is_array($template_data) && count($template_data) && is_array($template_longdata) && count($template_longdata)) { - $template_data = array_merge($template_data, $template_longdata); - } - - // $template_data now contains the templates for the meeting data. These are the available "slots" for new values. We need to convert to XML. - - foreach ($template_data as $template) { - $ret .= ''; - $ret .= ''.c_comdef_htmlspecialchars($template['key']).''; - $ret .= ''.c_comdef_htmlspecialchars($template['field_prompt']).''; - $ret .= ''.c_comdef_htmlspecialchars($template['lang_enum']).''; - $ret .= ''.intval($template['visibility']).''; - - if (isset($template['data_string'])) { - $ret .= ''.c_comdef_htmlspecialchars($template['data_string']).''; - } - - if (isset($template['data_bigint'])) { - $ret .= ''.intval($template['data_bigint']).''; - } - - if (isset($template['data_double'])) { - $ret .= ''.intval($template['data_double']).''; - } - - if (isset($template['data_longtext'])) { - $ret .= ''.c_comdef_htmlspecialchars($template['data_longtext']).''; - } - - if (isset($template['data_blob'])) { - $ret .= ''.c_comdef_htmlspecialchars(base64_encode($template['data_blob'])).''; - } - $ret .= ''; - } - - $ret = "\ngetMainURL()."client_interface/xsd/FieldTemplates.php\">$ret"; - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to delete an existing meeting. $this->http_vars['meeting_id'] must be set to the meeting ID. - - \returns A very simple XML Report. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_meeting_delete() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - - // First, make sure the use is of the correct general type. - if ($this->basic_user_validation()) { - $meeting_obj = $this->server->GetOneMeeting(intval($this->http_vars['meeting_id'])); - if ($meeting_obj instanceof c_comdef_meeting) { // Make sure we got a meeting. - if ($meeting_obj->UserCanEdit($this->server->GetCurrentUserObj())) { // Make sure that we are allowed to edit this meeting. - // Before we say goodbye, we take down the relevant details for the next of kin... - $id = intval($meeting_obj->GetID()); - $service_body_id = intval($meeting_obj->GetServiceBodyID()); - $name = c_comdef_htmlspecialchars(str_replace('"', "'", str_replace("\n", " ", str_replace("\r", " ", $meeting_obj->GetMeetingDataValue('meeting_name'))))); - $weekday = intval($meeting_obj->GetMeetingDataValue('weekday_tinyint')); - $start_time = c_comdef_htmlspecialchars($meeting_obj->GetMeetingDataValue('start_time')); - - $meeting_obj->DeleteFromDB(); // Delete the meeting. - - // Write out the death certificate. - $ret = ''.$id.''.$id.''.$name.''.$service_body_id.''.$start_time.''.$weekday.''; - $ret = "\ngetMainURL()."client_interface/xsd/DeletedMeeting.php\" id=\"$id\">$ret"; - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

ERROR

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to modify fields in a meeting (or create a new meeting). - This requires that the following HTTP parameters be set: - - meeting_id This is an integer that is the BMLT ID of the meeting being modified (the user must have edit rights to this meeting). If this is 0 (or unset), then we will be creating a new meeting. - If we are creating a new meeting, the new meeting will start at 8:30PM on Sunday, unless new values for the 'weekday' and 'start_time' fields are provided. - Once the meeting is created, we can set any of its fields as given. - - meeting_field This is a string, or array of string, with the field name in the meeting search response. - - new_value This is a string, or array of string, with the new value for the field. If the meeting_field parameter is an array, then each value here needs to be specified to correspond with the field. - - \returns XML, containing the fields modified. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_meeting_modify() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = null; - - $user_obj = $this->server->GetCurrentUserObj(); - // First, make sure the use is of the correct general type. - if ($this->basic_user_validation()) { - $closing_tag = ''; // We will usually be changing existing meetings. - $my_editable_service_bodies = array(); - $thisIsANewMeeting = false; // Set to true for new meetings. - - $service_bodies = $this->server->GetServiceBodyArray(); - - if ($user_obj->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) { // Must be a Service Body Admin. - // We cycle through all the Service bodies, and look for ones in which we have permissions. - // We use the Service body IDs to key them in associative arrays. - foreach ($service_bodies as $service_body) { - if ($service_body->UserCanEditMeetings()) { // We are a full Service body editor, with rights to edit the Service body itself (as well as all its meetings). - $my_editable_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } - } - } - - $new_meeting_id = 0; - // Get the meeting object, itself. - if (!intval($this->http_vars['meeting_id'])) { // Will we be creating a new meeting? - $service_bodies = $this->server->GetServiceBodyArray(); - - if ($user_obj->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) { // Must be a Service Body Admin. - if (isset($my_editable_service_bodies) && is_array($my_editable_service_bodies) && count($my_editable_service_bodies)) { - $service_body_id = 0; - - // If we are allowed to edit more than one Service body, then we are given a choice. We must supply an ID for the new meeting. - if (count($my_editable_service_bodies) > 1) { - if (isset($this->http_vars['service_body_id']) && intval($this->http_vars['service_body_id'])) { - $service_body_id = intval($this->http_vars['service_body_id']); - } else { - $meeting_fields = $this->http_vars['meeting_field']; - - foreach ($meeting_fields as $field) { - list ( $key, $value ) = explode(',', $field); - - if ($key == 'service_body_bigint') { - $service_body_id = intval($value); - break; - } - } - } - } else // Otherwise, it is picked for us. - { - // We have to do this odd dance, because it's an associative array. - $keys_1 = array_keys($my_editable_service_bodies); - - $service_body = $my_editable_service_bodies[$keys_1[0]]; - - if ($service_body instanceof c_comdef_service_body) { - $service_body_id = $service_body->GetID(); - } - } - - $weekday = 1; // Default is Sunday - $start_time = '20:30:00'; // Default is 8:30 PM - $lang = c_comdef_server::GetServer()->GetLocalLang(); // We use whatever the server language is. - if ($service_body_id) { // Can't create a new meeting without a Service body. - $service_body = c_comdef_server::GetServer()->GetServiceBodyByIDObj($service_body_id); - - if ($service_body instanceof c_comdef_service_body) { - if ($service_body->UserCanEditMeetings($user_obj)) { - $new_meeting_id = c_comdef_server::AddNewMeeting($service_body_id, $weekday, $start_time, $lang); - $meeting_obj = $this->server->GetOneMeeting(intval($new_meeting_id)); - $meeting_obj->SetPublished(false); // New meetings are always unpublished. - $meeting_id = $new_meeting_id; - $ret = ''; - $thisIsANewMeeting = true; - $closing_tag = ''; - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

ERROR

'; - } - } else { - $ret = '

ERROR

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $meeting_obj = $this->server->GetOneMeeting(intval($this->http_vars['meeting_id'])); - $ret = ''; - } - - if ($meeting_obj instanceof c_comdef_meeting) { - if ($meeting_obj->UserCanEdit($user_obj)) { // We next make sure that we are allowed to make changes to this meeting. - $keys = c_comdef_meeting::GetAllMeetingKeys(); // Get all the available keys. The one passed in needs to match one of these. - $localized_strings = c_comdef_server::GetLocalStrings(); - - // In case we need to add a new field, we get the meeting data template. - $template_data = c_comdef_meeting::GetDataTableTemplate(); - $template_longdata = c_comdef_meeting::GetLongDataTableTemplate(); - - // We merge the two tables (data and longdata). - if (is_array($template_data) && count($template_data) && is_array($template_longdata) && count($template_longdata)) { - $template_data = array_merge($template_data, $template_longdata); - } - - // If so, we take the field, and tweak its value. - $meeting_fields = $this->http_vars['meeting_field']; - - if (!is_array($meeting_fields)) { - $meeting_fields = array ( $meeting_fields ); - } - - // We change each of the fields passed in to the new values passed in. - foreach ($meeting_fields as $field) { - list ( $meeting_field, $value ) = explode(',', $field, 2); - if (strpos($value, "##-##")) { // Look for our special flagged items. - $temp = explode("##-##", $value); - $value = $temp[count($temp) - 1]; - } - - if (isset($meeting_field) && in_array($meeting_field, $keys)) { - switch ($meeting_field) { - case 'id_bigint': // We don't currently let these get changed. - case 'lang_enum': - $value = null; - $old_value = null; - break; - - case 'service_body_bigint': - if (isset($my_editable_service_bodies) && is_array($my_editable_service_bodies) && count($my_editable_service_bodies)) { - $before_id = intval($meeting_obj->GetServiceBodyID()); - $after_id = intval($value); - - // Have to be allowed to edit both. - if ($my_editable_service_bodies['sb_'.$before_id] && $my_editable_service_bodies['sb_'.$after_id]) { - $old_value = $meeting_obj->GetServiceBodyID(); - $meeting_obj->SetServiceBodyID(intval($value)); - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - break; - - case 'email_contact': - $old_value = $meeting_obj->GetEmailContact(); - $meeting_obj->SetEmailContact(intval($value)); - break; - - case 'published': - if (!$new_meeting_id) { // New meetings are always unpublished. - $old_value = $meeting_obj->IsPublished(); - $meeting_obj->SetPublished(intval($value) != 0 ? true : false); - } else { - $old_value = 0; - $value = 0; - } - break; - - case 'weekday_tinyint': - if ((intval($value) > 0) && (intval($value) < 8)) { - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - $data =& $meeting_obj->GetMeetingData(); - $data[$meeting_field] = intval($value); - } - break; - - case 'longitude': - case 'latitude': - if (floatval($value) != 0.0) { - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - $data =& $meeting_obj->GetMeetingData(); - $data[$meeting_field] = floatval($value); - } - break; - - case 'start_time': - case 'duration_time': - case 'time_zone': - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - $data =& $meeting_obj->GetMeetingData(); - $data[$meeting_field] = $value; - break; - - case 'formats': - // Formats take some extra work, because we store them in the meeting as individual objects, so we create, sort and apply those objects. - $old_value_array = $meeting_obj->GetMeetingDataValue($meeting_field); - $lang = $this->server->GetLocalLang(); - $vals = array(); - - foreach ($old_value_array as $format) { - if ($format) { - $vals[$format->GetSharedID()] = $format; - } - } - - uksort($vals, array ( 'c_comdef_meeting','format_sorter_simple' )); - - $keys_2 = array(); - foreach ($vals as $format) { - $keys_2[] = $format->GetKey(); - } - - $old_value = implode(",", $keys_2); - - $formats = explode(",", $value); - $formats_object = $this->server->GetFormatsObj(); - - $newVals = array(); - foreach ($formats as $key) { - $object = $formats_object->GetFormatByKeyAndLanguage($key, $lang); - if ($object instanceof c_comdef_format) { - $newVals[$object->GetSharedID()] = $object; - } - } - - uksort($newVals, array ( 'c_comdef_meeting','format_sorter_simple' )); - $data =& $meeting_obj->GetMeetingData(); - $data[$meeting_field] = $newVals; - break; - - case 'worldid_mixed': - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - $data =& $meeting_obj->GetMeetingData(); - $data[$meeting_field] = $value; - break; - - case 'meeting_name': - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - if (!isset($value) || !$value) { - $value = $localized_strings["comdef_server_admin_strings"]["Value_Prompts"]["generic"]; - } - // Assuming fallthrough is intentional here, due to lack of break statement? - - default: - $old_value = $meeting_obj->GetMeetingDataValue($meeting_field); - $data =& $meeting_obj->GetMeetingData(); - $prompt = isset($data[$meeting_field]['field_prompt']) ? $data[$meeting_field]['field_prompt'] : $template_data[$meeting_field]['field_prompt']; - $visibility = intval(isset($data[$meeting_field]['visibility']) ? $data[$meeting_field]['visibility'] : $template_data[$meeting_field]['visibility']); - $meeting_obj->AddDataField($meeting_field, $prompt, $value, null, $visibility, true); - break; - } - - // We only indicate changes. - if (isset($meeting_field) && $meeting_field && !($thisIsANewMeeting && !(isset($value) && $value)) && ((isset($old_value) && $old_value) || (isset($value) && $value)) && ($old_value != $value)) { - $ret_temp = ''; - $ret_temp_internal = ''; - // New meetings have no old data. - if (!$thisIsANewMeeting && isset($old_value) && $old_value) { - $ret_temp_internal .= ''.c_comdef_htmlspecialchars($old_value).''; - } - - if (isset($value) && $value) { - $ret_temp_internal .= ''.c_comdef_htmlspecialchars($value).''; - } - - $ret_temp .= ''.$ret_temp_internal.''; - - // We only send back changes that were actually made. This reduces empty response data. - if ($ret_temp_internal) { - $ret .= $ret_temp; - } - } - - $meeting_field = null; - } - } - - // This can short-circuit the operation. - if ($ret != '

NOT AUTHORIZED

') { - $meeting_obj->UpdateToDB(); // Save the new data. After this, the meeting has been changed. - - $ret .= $closing_tag; - - $ret = "\ngetMainURL()."client_interface/xsd/ChangeResponse.php\">$ret"; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - } else { - $ret = '

ERROR

'; - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to return meeting information from a search. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_meeting_search() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - if (!( isset($this->http_vars['geo_width']) && $this->http_vars['geo_width'] ) && isset($this->http_vars['bmlt_search_type']) && ($this->http_vars['bmlt_search_type'] == 'advanced') && isset($this->http_vars['advanced_radius']) && isset($this->http_vars['advanced_mapmode']) && $this->http_vars['advanced_mapmode'] && ( floatval($this->http_vars['advanced_radius'] != 0.0) ) && isset($this->http_vars['lat_val']) && isset($this->http_vars['long_val']) && ( (floatval($this->http_vars['lat_val']) != 0.0) || (floatval($this->http_vars['long_val']) != 0.0) )) { - $this->http_vars['geo_width'] = $this->http_vars['advanced_radius']; - } elseif (!( isset($this->http_vars['geo_width']) && $this->http_vars['geo_width'] ) && isset($this->http_vars['bmlt_search_type']) && ($this->http_vars['bmlt_search_type'] == 'advanced')) { - $this->http_vars['lat_val'] = null; - $this->http_vars['long_val'] = null; - } elseif (!isset($this->http_vars['geo_loc']) || $this->http_vars['geo_loc'] != 'yes') { - if (!isset($this->http_vars['geo_width'])) { - $this->http_vars['geo_width'] = 0; - } - } - - require_once(dirname(dirname(dirname(__FILE__))).'/client_interface/csv/search_results_csv.php'); - - $geocode_results = null; - $ignore_me = null; - $meeting_objects = array(); - $formats_ar = array (); - $result2 = DisplaySearchResultsCSV($this->http_vars, $ignore_me, $geocode_results, $meeting_objects); - - if (is_array($meeting_objects) && count($meeting_objects) && is_array($formats_ar)) { - foreach ($meeting_objects as $one_meeting) { - $formats = $one_meeting->GetMeetingDataValue('formats'); - - foreach ($formats as $format) { - if ($format && ($format instanceof c_comdef_format)) { - $format_shared_id = $format->GetSharedID(); - $formats_ar[$format_shared_id] = $format; - } - } - } - } - - if (isset($this->http_vars['data_field_key']) && $this->http_vars['data_field_key']) { - // At this point, we have everything in a CSV. We separate out just the field we want. - $temp_keyed_array = array(); - $result = explode("\n", $result); - $keys = array_shift($result); - $keys = explode("\",\"", trim($keys, '"')); - $the_keys = explode(',', $this->http_vars['data_field_key']); - - $result = array(); - foreach ($result2 as $row) { - if ($row) { - $index = 0; - $row = explode('","', trim($row, '",')); - $row_columns = array(); - foreach ($row as $column) { - if (!$column) { - $column = ' '; - } - if (in_array($keys[$index++], $the_keys)) { - array_push($row_columns, $column); - } - } - $result[$row[0]] = '"'.implode('","', $row_columns).'"'; - } - } - - $the_keys = array_intersect($keys, $the_keys); - $result2 = '"'.implode('","', $the_keys)."\"\n".implode("\n", $result); - } - - - $result = "\ngetMainURL()."client_interface/xsd/GetSearchResults.php\">"; - $result .= $this->TranslateCSVToXML($result2); - if ((isset($http_vars['get_used_formats']) || isset($http_vars['get_formats_only'])) && $formats_ar && is_array($formats_ar) && count($formats_ar)) { - if (isset($http_vars['get_formats_only'])) { - $result = "\ngetMainURL()."client_interface/xsd/GetFormats.php\">"; - } else { - $result .= ""; - } - $result3 = GetFormats($server, $langs, null, $formats_ar); - $result .= TranslateToXML($result3); - - $result .= ""; - } - - $result .= isset($http_vars['get_formats_only']) ? "" : ""; - - return $result; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to return format information. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_format_info() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - if ($this->basic_user_validation()) { - $format_ids = array(); - - // See if we are receiving a request for just specific formats, or if we are being asked for all of them. - if (isset($this->http_vars['format_id']) && intval(trim($this->http_vars['format_id']))) { - $format_ids[] = intval(trim($this->http_vars['format_id'])); - } elseif (isset($this->http_vars['format_id']) && is_array($this->http_vars['format_id']) && count($this->http_vars['format_id'])) { - foreach ($this->http_vars['format_id'] as $format) { - $format_ids[] = intval(trim($format)); - } - } else { - $format_ids = null; - } - - $lang = $this->server->GetLocalLang(); - if (isset($this->http_vars['lang']) && trim($this->http_vars['lang'])) { - $lang = strtolower(trim($this->http_vars['lang'])); - } - - $returned_formats = array(); // We will be returning our formats in this. - $format_objects = $this->server->GetFormatsObj()->GetFormatsByLanguage($lang); // Get all the formats (not just the ones used, but ALL of them). - - // Filter for requested formats in the requested language. - foreach ($format_objects as $format) { - if (!$format_ids || in_array(intval($format->GetSharedID()), $format_ids)) { - $returned_formats[] = $format; - } - } - - // At this point, we have a complete array of just the format[s] that will be returned. Time to make some XML... - $index = 0; - - // We will find out which formats actually appear, somewhere in the DB, and indicate that when we give the info. - $used_formats = $this->server->GetUsedFormatsArray(); - $used_ids = array(); - - foreach ($used_formats as $format) { - $used_ids[] = intval($format->GetSharedID()); - } - - foreach ($returned_formats as $format) { - $ret .= ''; - $id = intval($format->GetSharedID()); - $ret.= ''.c_comdef_htmlspecialchars($format->GetKey()).''; - $ret.= ''.c_comdef_htmlspecialchars($format->GetLocalName()).''; - $ret.= ''.c_comdef_htmlspecialchars($format->GetLocalDescription()).''; - $ret.= ''.c_comdef_htmlspecialchars($lang).''; - $ret.= ''.$id.''; - $world_id = trim($format->GetWorldID()); - if (isset($world_id) && $world_id) { - $ret.= ''.c_comdef_htmlspecialchars($world_id).''; - } - - // If this is used somewehere, we indicate it here. - if (in_array($id, $used_ids)) { - $ret.= '1'; - } - - $ret .= ''; - } - $ret = "\ngetMainURL()."client_interface/xsd/GetFormats.php\">$ret"; - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to return Service Body information for multiple Service bodies. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_service_bodies_info_request() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - - if ($this->basic_user_validation()) { - $service_body_ids = array(); - - // Look to see if the caller is asking for particular Service bodies. - if (isset($this->http_vars['sb_id']) && $this->http_vars['sb_id']) { - if (!is_array($this->http_vars['sb_id'])) { - $service_body_ids[] = intval(trim($this->http_vars['sb_id'])); - } else { - foreach ($this->http_vars['sb_id'] as $id) { - if (intval(trim($id))) { - $service_body_ids[] = intval(trim($id)); - } - } - } - } - - // If we have a request for individual Service bodies, then we just return those ones. - if (isset($service_body_ids) && is_array($service_body_ids) && count($service_body_ids)) { - foreach ($service_body_ids as $id) { - $ret .= $this->process_service_body_info_request($id); - } - } else // If they are not looking for particular bodies, then we return the whole kit & kaboodle. - { - $service_bodies = $this->server->GetServiceBodyArray(); - - foreach ($service_bodies as $service_body) { - if (isset($this->http_vars['flat']) || !$service_body->GetOwnerIDObject()) { // We automatically include top-level Service bodies here, and let ones with parents sort themselves out. - $ret .= $this->process_service_body_info_request($service_body->GetID()); - } - } - } - - $ret = "\ngetMainURL()."client_interface/xsd/HierServiceBodies.php\">$ret"; - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to return Service Body information. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_service_body_info_request( - $in_service_body_id ///< The ID of the Service body being requested. - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - // Belt and suspenders. We need to make sure the user is authorized. - if ($this->basic_user_validation()) { - if (!in_array($in_service_body_id, $this->handled_service_body_ids)) { - $this->handled_service_body_ids[] = $in_service_body_id; - $service_body = $this->server->GetServiceBodyByIDObj($in_service_body_id); - - if (isset($service_body) && ($service_body instanceof c_comdef_service_body)) { - // Everyone gets the type, URI, name, description and parent Service body. - $name = $service_body->GetLocalName(); - $description = $service_body->GetLocalDescription(); - $uri = $service_body->GetURI(); - $helpline = $service_body->GetHelpline(); - $type = $service_body->GetSBType(); - - $parent_service_body_id = 0; - $parent_service_body_name = ""; - $parent_service_body_type = ""; - - $parent_service_body = $service_body->GetOwnerIDObject(); - - if (isset($parent_service_body) && $parent_service_body) { - $parent_service_body_id = intval($parent_service_body->GetID()); - $parent_service_body_name = $parent_service_body->GetLocalName(); - $parent_service_body_type = $parent_service_body->GetSBType(); - } - - $principal_user = $service_body->GetPrincipalUserObj(); - $principal_user_id = intval($principal_user->GetID()); - - // Scan for our various editors. - $guest_editors = $this->server->GetUsersByLevelObj(_USER_LEVEL_OBSERVER, true); // Observer or greater. - $service_body_editors = array(); - $meeting_list_editors = array(); - $observers = array(); - - foreach ($guest_editors as $editor) { - if ($service_body->UserCanEdit($editor)) { // We will have at least one of these, as the principal user needs to be listed. - array_push($service_body_editors, $editor); - } elseif ($service_body->UserCanEditMeetings($editor)) { - array_push($meeting_list_editors, $editor); - } elseif ($service_body->UserCanObserve($editor)) { - array_push($observers, $editor); - } - } - - // Scan for direct descendant child Service bodies. - $children = array(); - $service_bodies = $this->server->GetServiceBodyArray(); - - foreach ($service_bodies as $child) { - if ($child->IsOwnedBy($in_service_body_id, true)) { - $children[] = $child; - } - } - - // We check to see which editors are mentioned in this Service body. - $guest_editors = $service_body->GetEditors(); - - // See if we have rights to edit this Service body. Just for the heck of it, we check the user level (not really necessary, but belt and suspenders). - $this_user_can_edit_the_body = ($this->server->GetCurrentUserObj()->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) && $service_body->UserCanEdit(); - - $contact_email = null; - - // Service Body Admins (with permission for the body) get more info. - if ($this_user_can_edit_the_body) { - $contact_email = $service_body->GetContactEmail(); - } - - // At this point, we have all the information we need to build the response XML. - $ret = ''; - $ret .= ''.c_comdef_htmlspecialchars($this->my_localized_strings['service_body_types'][$type]).''; - if (isset($description) && $description) { - $ret .= ''.c_comdef_htmlspecialchars($description).''; - } - if (isset($uri) && $uri) { - $ret .= ''.c_comdef_htmlspecialchars($uri).''; - } - if (isset($helpline) && $helpline) { - $ret .= ''.c_comdef_htmlspecialchars($helpline).''; - } - if (isset($parent_service_body) && $parent_service_body) { - $ret .= ''.c_comdef_htmlspecialchars($parent_service_body_name).''; - } - if ($this_user_can_edit_the_body && isset($contact_email) && $contact_email) { - $ret .= ''.c_comdef_htmlspecialchars($contact_email).''; - } - - $ret .= ''; - if (isset($service_body_editors) && is_array($service_body_editors) && count($service_body_editors)) { - // We will have at least one of these (the principal user). - // These are the users that can directly manipulate the Service body. - $ret .= ''; - foreach ($service_body_editors as $editor) { - $editor_id = intval($editor->GetID()); - $ret .= ''; - } - $ret .= ''; - } - - // These are users that can't manipulate the Service body, but can edit meetings. - if (isset($meeting_list_editors) && is_array($meeting_list_editors) && count($meeting_list_editors)) { - $ret .= ''; - foreach ($meeting_list_editors as $editor) { - $editor_id = intval($editor->GetID()); - $ret .= ''; - } - $ret .= ''; - } - - // These are users that can only see hidden fields in meetings. - if (isset($observers) && is_array($observers) && count($observers)) { - $ret .= ''; - foreach ($observers as $editor) { - $editor_id = intval($editor->GetID()); - $ret .= ''; - } - $ret .= ''; - } - $ret .= ''; - - // If this is a hierarchical response, we embed the children as XML service_body elements. Otherwise, we list them as simple catalog elements. - if (!isset($this->http_vars['flat']) && isset($children) && is_array($children) && count($children)) { - $ret .= ""; - foreach ($children as $child) { - $ret .= $this->process_service_body_info_request($child->GetID()); - } - $ret .= ""; - } elseif (isset($children) && is_array($children) && count($children)) { - $ret .= ''; - foreach ($children as $child) { - $ret .= ''.c_comdef_htmlspecialchars($child->GetLocalName()).''; - } - $ret .= ''; - } - - $ret .= ''; - } - } - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to report the rights for the logged-in user. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_capabilities_request() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - $service_bodies = $this->server->GetServiceBodyArray(); - - // We will fill these three arrays, depending on the users' rights for a given Service body. - $my_meeting_observer_service_bodies = array(); - $my_meeting_editor_service_bodies = array(); - $my_editable_service_bodies = array(); - - $user_obj = $this->server->GetCurrentUserObj(); - if ($this->basic_user_validation()) { - // We cycle through all the Service bodies, and look for ones in which we have permissions. - // We use the Service body IDs to key them in associative arrays. - foreach ($service_bodies as $service_body) { - if (($user_obj->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) && $service_body->UserCanEdit()) { // We are a full Service body editor, with rights to edit the Service body itself (as well as all its meetings). - $my_editable_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } elseif ((($user_obj->GetUserLevel() == _USER_LEVEL_SERVICE_BODY_ADMIN) || ($user_obj->GetUserLevel() == _USER_LEVEL_OBSERVER)) && $service_body->UserCanObserve()) { // We are a "guest" editor, or an observer (depends on our user level). - // Again, we keep checking credentials, over and over again. - if ($user_obj->GetUserLevel() == _USER_LEVEL_OBSERVER) { - $my_meeting_observer_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } elseif ($service_body->UserCanEditMeetings()) { - $my_meeting_editor_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } - } - } - // Now, we grant rights to Service bodies that are implicit from other rights (for example, a Service Body Admin can also observe and edit meetings). - - // A full Service Body Admin can edit meetings in that Service body. - foreach ($my_editable_service_bodies as $service_body) { - $my_meeting_editor_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } - - // An editor (whether an admin or a "guest") also has observe rights. - foreach ($my_meeting_editor_service_bodies as $service_body) { - $my_meeting_observer_service_bodies['sb_'.$service_body->GetID()] = $service_body; - } - - // At this point, we have 3 arrays (or fewer), filled with Service bodies that we have rights on. It is entirely possible that only one of them could be filled, and it may only have one member. - - // We start to construct the XML filler. - foreach ($service_bodies as $service_body) { - // If we can observe, then we have at least one permission for this Service body. - if (isset($my_meeting_observer_service_bodies['sb_'.$service_body->GetID()]) && $my_meeting_observer_service_bodies['sb_'.$service_body->GetID()]) { - $ret .= ''; - } - } - // Create a proper XML wrapper for the response data. - $ret = "\ngetMainURL()."client_interface/xsd/AdminPermissions.php\">$ret"; - // We now have XML that states the current user's permission levels in all Service bodies. - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /********************************************************************************************************//** - \brief This fulfills a user request to return the current users info. - - \returns XML, containing the answer. - ************************************************************************************************************/ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function process_user_info() - { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - $ret = ''; - $user_obj = $this->server->GetCurrentUserObj(); - - if ($this->basic_user_validation()) { - $ret = ''; - // Create a proper XML wrapper for the response data. - $ret = "\ngetMainURL()."client_interface/xsd/UserInfo.php\">$ret"; - // We now have XML that states the current user's permission levels in all Service bodies. - } else { - $ret = '

NOT AUTHORIZED

'; - } - - return $ret; - } - - /*******************************************************************/ - /** - \brief Translates CSV to XML. - - \returns an XML string, with all the data in the CSV. - */ - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - public function TranslateCSVToXML( - $in_csv_data ///< An array of CSV data, with the first element being the field names. - ) { - // phpcs:enable PSR1.Methods.CamelCapsMethodName.NotCamelCaps - require_once(dirname(dirname(dirname(__FILE__))).'/server/shared/Array2XML.php'); - $temp_keyed_array = array(); - $in_csv_data = explode("\n", $in_csv_data); - $keys = array_shift($in_csv_data); - $keys = rtrim(ltrim($keys, '"'), '",'); - $keys = preg_split('/","/', $keys); - - foreach ($in_csv_data as $row) { - if ($row) { - $line = null; - $index = 0; - $row_t = rtrim(ltrim($row, '"'), '",'); - $row_t = preg_split('/","/', $row_t); - foreach ($row_t as $column) { - if (isset($column)) { - $line[$keys[$index++]] = trim($column); - } - } - array_push($temp_keyed_array, $line); - } - } - - $out_xml_data = array2xml($temp_keyed_array, 'not_used', false); - - return $out_xml_data; - } -} diff --git a/src/legacy/local_server/server_admin/c_comdef_login.php b/src/legacy/local_server/server_admin/c_comdef_login.php deleted file mode 100755 index aa0a459ce..000000000 --- a/src/legacy/local_server/server_admin/c_comdef_login.php +++ /dev/null @@ -1,270 +0,0 @@ -. -*/ -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -require_once(dirname(dirname(dirname(__FILE__)))."/server/c_comdef_server.class.php"); -require_once(dirname(dirname(dirname(__FILE__)))."/server/shared/classes/comdef_utilityclasses.inc.php"); - -include(dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'); - -$t_server = c_comdef_server::MakeServer(); // We initialize the server. - -$lang_enum = $t_server->GetServer()->GetLocalLang(); - -// We use a cookie to store the language pref. -$lang_enum = request()->cookie('bmlt_admin_lang_pref', $lang_enum); - -if (isset($http_vars['lang_enum']) && $http_vars['lang_enum']) { - $lang_enum = $http_vars['lang_enum']; -} - -if (isset($g_enable_language_selector) && $g_enable_language_selector) { - cookie()->queue('bmlt_admin_lang_pref', $lang_enum, 60 * 24 * 365); -} - -if (isset($_GET['bad_login_form'])) { - $localized_strings = c_comdef_server::GetLocalStrings(); - die('

'.c_comdef_htmlspecialchars($localized_strings['comdef_server_admin_strings']['not_auth_3']).'

'.c_comdef_LoginForm($server).''); -} - -$user_obj = $t_server->GetCurrentUserObj(); -if (is_null($user_obj)) { - echo c_comdef_LoginForm($t_server); -} elseif (!($user_obj instanceof c_comdef_user) || ($user_obj->GetUserLevel() == _USER_LEVEL_DEACTIVATED)) { - // If the login is invalid, we terminate the whole kit and kaboodle, and inform the user they are persona non grata. - $localized_strings = c_comdef_server::GetLocalStrings(); - die('

'.c_comdef_htmlspecialchars($localized_strings['comdef_server_admin_strings']['not_auth_1']).'

'.c_comdef_htmlspecialchars($localized_strings['comdef_server_admin_strings']['not_auth_2']).'

'); -} else { - // Get the display strings. - $localized_strings = c_comdef_server::GetLocalStrings(); - - if (!isset($supress_header) || !$supress_header) { - echo ''; - echo '

'; - } -} - - -$t_server = null; - -/***********************************************************************/ -/** \brief Copied verbatim from here: http://stackoverflow.com/questions/6768793/get-the-full-url-in-php -\returns a string, with the full URI. -*/ -function url_origin($s, $use_forwarded_host = false) -{ - $ssl = ( !empty($s['HTTPS']) && $s['HTTPS'] == 'on' ) ? true:false; - $sp = strtolower($s['SERVER_PROTOCOL']); - $protocol = substr($sp, 0, strpos($sp, '/')) . ( ( $ssl ) ? 's' : '' ); - $port = $s['SERVER_PORT']; - $port = ( (!$ssl && $port=='80') || ($ssl && $port=='443') ) ? '' : ':'.$port; - $host = ( $use_forwarded_host && isset($s['HTTP_X_FORWARDED_HOST']) ) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null); - $host = isset($host) ? $host : $s['SERVER_NAME'] . $port; - return $protocol . '://' . $host; -} - -/***********************************************************************/ -/** \brief Copied verbatim from here: http://stackoverflow.com/questions/6768793/get-the-full-url-in-php -\returns a string, with the full URI. -*/ -function full_url($s, $use_forwarded_host = false) -{ - return url_origin($s, $use_forwarded_host) . $s['REQUEST_URI']; -} - -/********************************************************************************************************//** -\brief This function parses the main server version from the XML file. -\returns a string, containing the version info and banner. -************************************************************************************************************/ -function GetServerInfo() -{ - $ret = null; - - $ret['version'] = config()->get('app.version'); - - $config_file_path = dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'; - - if (file_exists($config_file_path)) { - include($config_file_path); - $localized_strings = c_comdef_server::GetLocalStrings(); - if (isset($bmlt_title) && trim($bmlt_title)) { - $ret['title'] = trim($bmlt_title); - } else { - $ret['title'] = $localized_strings['comdef_server_admin_strings']['login_banner']; - } - if (isset($banner_text) && trim($banner_text)) { - $ret['banner_text'] = trim($banner_text); - } else { - $ret['banner_text'] = $localized_strings['comdef_server_admin_strings']['login_underbanner']; - } - } - - return $ret; -} - -/*******************************************************************/ -/** \brief Returns HTML for the login form. If the user is not logged - in, then they get the form. Otherwise, the login is processed, or - the user is vetted. - - \returns a string, containing the form HTML. -*/ -function c_comdef_LoginForm( - &$in_server ///< A reference to an instance of c_comdef_server -) { - include(dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'); - - $http_vars = array_merge($_GET, $_POST); - - $localized_strings = c_comdef_server::GetLocalStrings(); - $server_info = GetServerInfo(); - - global $comdef_global_language; - - if (isset($http_vars) && is_array($http_vars) && count($http_vars) && isset($http_vars['lang_enum'])) { - $lang_name = $http_vars['lang_enum']; - - if (file_exists(dirname(__FILE__)."/lang/".$lang_name."/name.txt")) { - $comdef_global_language = $lang_name; - } - } elseif (session('lang_enum')) { - $lang_name = session('lang_enum'); - - if (file_exists(dirname(__FILE__)."/lang/".$lang_name."/name.txt")) { - $comdef_global_language = $lang_name; - } - } - - session()->put('lang_enum', $comdef_global_language); - - $ret = ''; - - return $ret; -} diff --git a/src/legacy/local_server/server_admin/index.htm b/src/legacy/local_server/server_admin/index.htm deleted file mode 100755 index e69de29bb..000000000 diff --git a/src/legacy/local_server/server_admin/jquery.slim.min.js b/src/legacy/local_server/server_admin/jquery.slim.min.js deleted file mode 100644 index 36b4e1a13..000000000 --- a/src/legacy/local_server/server_admin/jquery.slim.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,v=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),m={},b=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},w=g.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||w).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",E=function(e,t){return new E.fn.init(e,t)};function d(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!b(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function Le(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function je(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n
",2===ft.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Fe(m.pixelPosition,function(e,t){if(t)return t=We(e,n),Ie.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 element (don't - specify a "type" attribute), and give it a GET parameter of filename, - which will equal the file path to the JavaScript file. - - For security purposes, the file must always be a ".js" file, and you can't - go out of the directory in which this file is located. - - This file is part of the Basic Meeting List Toolbox (BMLT). - - Find out more at: https://bmlt.app - - BMLT is free software: you can redistribute it and/or modify - it under the terms of the MIT License. - - BMLT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - MIT License for more details. - - You should have received a copy of the MIT License along with this code. - If not, see . -*/ -//define ( '__DEBUG_MODE__', 1 ); // Uncomment to make the CSS and JavaScript easier to trace (and less efficient). - $pathname = $_GET['filename']; -if (!preg_match("|/|", $pathname)) { - if (preg_match("|.*?\.js$|", $pathname)) { - $pathname = dirname(__FILE__)."/$pathname"; - $opt = file_get_contents($pathname); - if (!defined('__DEBUG_MODE__')) { - $opt = preg_replace("|\/\*.*?\*\/|s", "", $opt); - $opt = preg_replace('#(?. -*/ -defined('BMLT_EXEC') or define('BMLT_EXEC', 1); -require_once(dirname(dirname(dirname(__FILE__))).'/server/config/get-config.php'); - -// We only do this if the capability has been enabled in the auto-config file. -if (isset($g_enable_semantic_admin) && ($g_enable_semantic_admin == true)) { - require_once(dirname(dirname(dirname(__FILE__))).'/server/c_comdef_server.class.php'); - - /*************************************************************************************************************** - ************************************************* MAIN CONTEXT ************************************************* - ***************************************************************************************************************/ - - $http_vars = array_merge($_GET, $_POST); - - // Create an HTTP path to our XML file. We build it manually, in case this file is being used elsewhere, or we have a redirect in the domain. - // We allow it to be used as HTTPS. - $url_path = GetURLToMainServerDirectory().'local_server/server_admin/json.php'; - $lang_enum = ''; - $login_call = false; // We only allow login with the login call. That's to prevent users constantly sending cleartext login info. - - // We use a cookie to store the language pref. - $lang_enum = request()->cookie('bmlt_admin_lang_pref', $lang_enum); - - if (isset($http_vars['lang_enum']) && $http_vars['lang_enum']) { - $lang_enum = $http_vars['lang_enum']; - } - - $http_vars['lang_enum'] = $lang_enum; // Quick and dirty way to ensure that this gets properly propagated. - - if ($lang_enum) { - cookie()->queue('bmlt_admin_lang_pref', $lang_enum, 60 * 24 * 365); - } - - require_once(dirname(dirname(dirname(__FILE__))).'/server/shared/classes/comdef_utilityclasses.inc.php'); - require_once(dirname(dirname(dirname(__FILE__))).'/server/shared/Array2Json.php'); - require_once(dirname(dirname(__FILE__)).'/db_connect.php'); - - DB_Connect_and_Upgrade(); - - $server = c_comdef_server::MakeServer(); - - if ($server instanceof c_comdef_server) { - $user_obj = $server->GetCurrentUserObj(); - if (!($user_obj instanceof c_comdef_user) || ($user_obj->GetUserLevel() == _USER_LEVEL_DEACTIVATED) || ($user_obj->GetUserLevel() == _USER_LEVEL_SERVER_ADMIN) || ($user_obj->GetID() == 1)) { - c_comdef_LogoutUser(); - die('NOT AUTHORIZED'); - } - - if (isset($http_vars['admin_action']) && $http_vars['admin_action']) { // Must have an admin_action. - require_once(dirname(__FILE__).'/c_comdef_admin_xml_handler.class.php'); - - $handler = new c_comdef_admin_xml_handler($http_vars, $server); - - if ($handler instanceof c_comdef_admin_xml_handler) { - $ret = $handler->process_commands(); - $ret = simplexml_load_string($ret); - $json = json_encode((Array)$ret, JSON_NUMERIC_CHECK); - - $pattern = '/\{\"\@attributes\"\:\{(.*?)\}\}/'; // Replace attribute objects with direct objects, to remove the extra layer. - $replacement = '{\1}'; - do { - $old_json = $json; - $json = preg_replace($pattern, $replacement, $json); - } while ($json && ($old_json != $json)); - - $pattern = '/\"\@attributes\"\:\{(\"sequence_index\"\:(\d+?))\}\,/'; - $replacement = ''; - do { - $old_json = $json; - $json = preg_replace($pattern, $replacement, $json); - } while ($json && ($old_json != $json)); - - $pattern = '/\"row\"\:\{\"sequence_index\"\:(\d*?)\}\,/'; // Replace sequence index object, to remove the extra layer. - do { - $old_json = $json; - $json = preg_replace($pattern, "", $json); - } while ($json && ($old_json != $json)); - - if (isset($json) && $json) { - header('Content-Type:application/json; charset=UTF-8'); - if (zlib_get_coding_type() === false) { - ob_start("ob_gzhandler"); - } else { - ob_start(); - } - echo ( $json ); - ob_end_flush(); - } else { - $ret = 'ERROR'; - } - - // Just making sure... - unset($handler); - unset($server); - unset($http_vars); - } else { - $ret = 'ERROR'; - } - } else { - die('BAD ADMIN ACTION'); - } - } else { - die('NO SERVER!'); - } -} diff --git a/src/legacy/local_server/server_admin/json2.js b/src/legacy/local_server/server_admin/json2.js deleted file mode 100755 index 7479fbea3..000000000 --- a/src/legacy/local_server/server_admin/json2.js +++ /dev/null @@ -1,485 +0,0 @@ -/* - json2.js - 2012-10-08 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== 'object') { - JSON = {}; -} - -(function () { - 'use strict'; - - function f(n) - { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' - : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) - { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) - { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - - // JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - - // If the value is a boolean or null, convert it to a string. Note: - // typeof null does not produce 'null'. The case is included here in - // the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - - // Due to a specification blunder in ECMAScript, typeof null is 'object', - // so watch out for that case. - - if (!value) { - return 'null'; - } - - // Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - - // Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - // The value is an array. Stringify every element. Use null as a placeholder - // for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - - // Join all of the elements together, separated with commas, and wrap them in - // brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - - // If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - // Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - - // Join all of the member texts together, separated with commas, - // and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) - { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' - ? walk({'': j}, '') - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); diff --git a/src/legacy/local_server/server_admin/lang/de/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/de/data_transfer_strings.php deleted file mode 100755 index 6fa2303ec..000000000 --- a/src/legacy/local_server/server_admin/lang/de/data_transfer_strings.php +++ /dev/null @@ -1,22 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array (); diff --git a/src/legacy/local_server/server_admin/lang/de/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/de/install_wizard_strings.php deleted file mode 100644 index 70e33865b..000000000 --- a/src/legacy/local_server/server_admin/lang/de/install_wizard_strings.php +++ /dev/null @@ -1,139 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API', - 'Page_2_Heading' => 'Set The Initial Location For Meetings', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => 'The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'Due to security concerns (Yeah, we\'re fairly paranoid -go figure), this program will not attempt to create or modify the settings file. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Export Spreadsheet (Optional): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/de/name.txt b/src/legacy/local_server/server_admin/lang/de/name.txt deleted file mode 100644 index 176e5370b..000000000 --- a/src/legacy/local_server/server_admin/lang/de/name.txt +++ /dev/null @@ -1 +0,0 @@ -Deutsch \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/de/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/de/server_admin_strings.inc.php deleted file mode 100644 index 25a7140d5..000000000 --- a/src/legacy/local_server/server_admin/lang/de/server_admin_strings.inc.php +++ /dev/null @@ -1,489 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Mein Account', - 'account_name_label' => 'Mein Account Name:', - 'account_login_label' => 'Mein Login:', - 'account_type_label' => 'Ich bin ein:', - 'account_type_1' => 'Server Administrator', - 'account_type_2' => 'Service Body Administrator', - 'ServerMapsURL' => 'http://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Service Body Observer', - 'change_password_label' => 'Mein Passwort ändern in:', - 'change_password_default_text' => 'Leave This Alone If You Don\'t Want To Change Your Password', - 'account_email_label' => 'Meine E-Mailadresse:', - 'email_address_default_text' => 'Trage eine E-Mailadresse ein', - 'account_description_label' => 'Meine Beschreibung:', - 'account_description_default_text' => 'Trage eine Beschreibung ein', - 'account_change_button_text' => 'Account Einstellungen ändern', - 'account_change_fader_success_text' => 'Die Account Information wurde erfolgreich geändert', - 'account_change_fader_failure_text' => 'Die Account Information wurde nicht geändert', - 'meeting_editor_disclosure' => 'Meetings bearbeiten', - 'meeting_editor_already_editing_confirm' => 'Du bearbeitest gerade ein anderes Meeting. Möchtest du alle Änderungen in diesem Meeting verlieren?', - 'meeting_change_fader_success_text' => 'Das Meeting wurde erfolgreich geändert', - 'meeting_change_fader_failure_text' => 'Das Meeting wurde nicht geändert', - 'meeting_change_fader_success_delete_text' => 'Das Meeting wurde erfolgreich gelöscht', - 'meeting_change_fader_fail_delete_text' => 'Das Meeting wurde nicht gelöscht', - 'meeting_change_fader_success_add_text' => 'Das neue Meeting wurde erfolgreich hinzugefügt', - 'meeting_change_fader_fail_add_text' => 'Das neue Meeting wurde nicht hinzugefügt', - 'meeting_text_input_label' => 'Suche nach Text:', - 'access_service_body_label' => 'Ich habe Zugriff zu:', - 'meeting_text_input_default_text' => 'Füge Suchtext ein', - 'meeting_text_location_label' => 'Dies ist ein Ort oder eine PLZ', - 'meeting_search_weekdays_label' => 'Suche nach ausgewählten Wochentagen:', - 'meeting_search_weekdays_names' => array('Alle', 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'), - 'meeting_search_service_bodies_label' => 'Suche nach ausgewählten Service Bodies:', - 'meeting_search_start_time_label' => 'Suche nach Meetings-Anfangszeit:', - 'meeting_search_start_time_all_label' => 'Jede Zeit', - 'meeting_search_start_time_morn_label' => 'Morgen', - 'meeting_search_start_time_aft_label' => 'Nachmittag', - 'meeting_search_start_time_eve_label' => 'Abend', - 'meeting_search_no_results_text' => 'Keine Meetings gefunden', - 'meeting_editor_tab_specifier_text' => 'Suche nach Meetings', - 'meeting_editor_tab_editor_text' => 'Meetings bearbeiten oder erstellen', - 'meeting_editor_create_new_text' => 'Erstelle ein neues Meeting', - 'meeting_editor_location_map_link' => 'Ort auf Karte', - 'meeting_editor_screen_match_ll_button' => 'Setze Koordinaten der Karte auf diese Adresse', - 'meeting_editor_screen_default_text_prompt' => 'Trage einen Text oder eine Zahl ein', - 'meeting_is_published' => 'Meeting ist veröffentlicht', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Meetings-Name:', - 'meeting_editor_screen_meeting_name_prompt' => 'Trage einen Meetings-Namen ein', - 'meeting_editor_screen_meeting_weekday_label' => 'Wochentag:', - 'meeting_editor_screen_meeting_start_label' => 'Meetings-Anfangszeit:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => '12:00 Uhr', - 'meeting_editor_screen_meeting_midnight_label' => '24:00 Uhr', - 'meeting_editor_screen_meeting_duration_label' => 'Dauer:', - 'meeting_editor_screen_meeting_oe_label' => 'Ende offen', - 'meeting_editor_screen_meeting_cc_label' => 'World Service Committee Code:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Meetings E-Mail Kontakt:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Trage eine E-Mail for einen Kontakt nur für dieses Meeting ein', - 'meeting_editor_screen_meeting_sb_label' => 'Service Body:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Kein Service Body ausgewählt', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Trage einen Längengrad ein', - 'meeting_editor_screen_meeting_latitude_label' => 'Breitengrad:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Trage einen Breitengrad ein', - 'meeting_editor_screen_meeting_location_label' => 'Institution:', - 'meeting_editor_screen_meeting_location_prompt' => 'Trage einen Institutions-Namen ein (Wie einen Gebäudenamen)', - 'meeting_editor_screen_meeting_info_label' => 'Zusätzliche Informationen:', - 'meeting_editor_screen_meeting_info_prompt' => 'Trage zusätzliche Location Informationen ein', - 'meeting_editor_screen_meeting_street_label' => 'Straße:', - 'meeting_editor_screen_meeting_street_prompt' => 'Trage eine Straße ein', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Nachbarschaft:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Trage eine Nachbarschaft ein (keinen Stadtteil oder Stadtbezirk)', - 'meeting_editor_screen_meeting_borough_label' => 'Stadtteil:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Trage einen Stadtteil oder Stadtbezirk ein (keine Nachbarschaft)', - 'meeting_editor_screen_meeting_city_label' => 'Stadt:', - 'meeting_editor_screen_meeting_city_prompt' => 'Trage eine Stadt ein (Keine Nation oder Stadtbezirk)', - 'meeting_editor_screen_meeting_county_label' => 'Land:', - 'meeting_editor_screen_meeting_county_prompt' => 'Trage ein Land ein', - 'meeting_editor_screen_meeting_state_label' => 'Bundesstaat/Bundesland:', - 'meeting_editor_screen_meeting_state_prompt' => 'Trage ein Bundesstaat/Bundesland ein', - 'meeting_editor_screen_meeting_zip_label' => 'Postleitzahl:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Trage eine Postleitzahl ein', - 'meeting_editor_screen_meeting_nation_label' => 'Nation:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Trage eine Nation ein', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtuelles Meeting - zusätzliche Informationen:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Suche nach:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'nur veröfentlichte Meetings', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'nur unveröfentlichte Meetings', - 'meeting_editor_screen_meeting_visibility_advice' => 'Dies wird in normalen Suchen nie angezeigt.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Alle Meetings', - 'meeting_editor_screen_meeting_create_button' => 'Erstelle ein neues Meeting', - 'meeting_editor_screen_delete_button' => 'Lösche dieses Meeting', - 'meeting_editor_screen_delete_button_confirm' => 'Bist du sicher, dass du dieses Meeting löschen möchtest?', - 'meeting_editor_screen_cancel_button' => 'abbrechen', - 'logout' => 'Abmelden', - 'meeting_editor_screen_cancel_confirm' => 'Bist du sicher, dass du die Bearbeitung abbrechen möchtest und alle Änderungen verlieren möchtest?', - 'meeting_lookup_failed' => 'Die Suche nach der Adresse schlug fehl.', - 'meeting_lookup_failed_not_enough_address_info' => 'Dies ist keine gültige Adresse für eine Suche.', - 'meeting_create_button_name' => 'Speichere dies als ein neues Meeting', - 'meeting_saved_as_a_copy' => 'Speichere dies als eine Kopie (erstellt ein neues Meeting)', - 'meeting_save_buttonName' => 'Speichere die Änderungen an diesem Meeting', - 'meeting_editor_tab_bar_basic_tab_text' => 'Basic', - 'meeting_editor_tab_bar_location_tab_text' => 'Institution', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Sonstiges', - 'meeting_editor_tab_bar_history_tab_text' => 'History', - 'meeting_editor_result_count_format' => '%d Meetings gefunden', - 'meeting_id_label' => 'Meeting ID:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administration Console', - 'login' => 'Login ID', - 'password' => 'Passwort', - 'button' => 'Log In', - 'cookie' => 'Man muss Cookies erlauben um diesen Server zu verwalten.', - 'noscript' => 'Man kann diese Seite nicht ohne JavaScript verwalten.', - 'title' => 'Bitte zum Verwalten des Servers einloggen.', - 'edit_Meeting_object_not_found' => 'ERROR: Dieses Meeting wurde nicht gefunden.', - 'edit_Meeting_object_not_changed' => 'ERROR: Dieses Meeting wurde nicht geändert.', - 'edit_Meeting_auth_failure' => 'Du hast keine Berechtigung, dieses Meeting zu bearbeiten.', - 'not_auth_1' => 'NOT AUTHORIZED', - 'not_auth_2' => 'Du hast keine Berechtigung, diesen Server zu verwalten.', - 'not_auth_3' => 'Es gab ein Problem mit Benutzernamen oder Passwort.', - 'email_format_bad' => 'Das Format der eingefügten E-Mailadresse ist nicht richtig.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

No History Available For This Meeting

', - 'service_body_editor_disclosure' => 'Service Body Administration', - 'service_body_change_fader_success_text' => 'Der Service Body wurde erfolgreich geändert', - 'service_body_change_fader_fail_text' => 'Die Änderung des Service Body schlug fehl', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Name:', - 'service_body_name_default_prompt_text' => 'Trage den Namen dieses Service Body ein', - 'service_body_parent_popup_label' => 'Service Body Parent:', - 'service_body_parent_popup_no_parent_option' => 'No Parent (Top-Level)', - 'service_body_editor_screen_sb_admin_user_label' => 'Primary Admin:', - 'service_body_editor_screen_sb_admin_description_label' => 'Beschreibung:', - 'service_body_description_default_prompt_text' => 'Trage eine Beschreibung dieses Service Body ein', - 'service_body_editor_screen_sb_admin_email_label' => 'Contact Email:', - 'service_body_email_default_prompt_text' => 'Trage eine Kontakt-E-Mailadresse für deisen Service Body ein', - 'service_body_editor_screen_sb_admin_uri_label' => 'Web Site URL:', - 'service_body_uri_default_prompt_text' => 'Trage eine Web Site URL für diesen Service Body ein', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Volle Meetingslisten Bearbeiter:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Diese Benutzer können alle Meetings in diesem Service Body bearbeiten.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Basic Meeting List Bearbeiter:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Diese Benutzer können alle Meetings in diesem Service Body bearbeiten, aber nur, wenn sie unveröffentlicht sind.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Beobachter:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Diese Benutzer können versteckte Informationen sehen (wie E-Mailadressen), aber können nichts bearbeiten.', - 'service_body_dirty_confirm_text' => 'Du hast den Service Body verändert. möchtest due diese Änderungen verlieren?', - 'service_body_save_button' => 'Speichere diese Änderungen am Service Body', - 'service_body_create_button' => 'Erstelle diesen Service Body', - 'service_body_delete_button' => 'Lösche diesen Service Body', - 'service_body_delete_perm_checkbox' => 'Lösche diesen Service Body dauerhaft', - 'service_body_delete_button_confirm' => 'Are you sure that you want to delete this Service body? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'Dieser Service Body wird dauerhaft gelöscht werden!', - 'service_body_change_fader_create_success_text' => 'Der Service Body wurde erfolgreich erstellt', - 'service_body_change_fader_create_fail_text' => 'Das Erstellen des Serice Body schlug fehl', - 'service_body_change_fader_delete_success_text' => 'Der Service Body wurde erfolgreich gelöscht', - 'service_body_change_fader_delete_fail_text' => 'Das Löschen des Serice Body schlug fehl', - 'service_body_change_fader_fail_no_data_text' => 'Das Ändern des Serice Body schlug fehl, weil keine Daten geliefert wurden', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Das Ändern des Serice Body schlug fehl, weil der Service Body nicht gefunden wurde', - 'service_body_change_fader_fail_cant_update_text' => 'Das Ändern des Serice Body schlug fehl, weil der Service Body nicht upgedatet wurde', - 'service_body_change_fader_fail_bad_hierarchy' => 'Das Ändern des Serice Body schlug fehl, weil der gewählte Eigentümer Service Body unter diesem Service Body ist, und nicht benutzt werden kann', - 'service_body_cancel_button' => 'Zurücksetzen auf Ursprung', - 'service_body_editor_type_label' => 'Service Body Type:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Gruppe', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Gebiets Service Kommitee', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Regionale Service Konferenz', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'World Service Conference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zonal Forum', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Enter The Helpline Telephone Number', - 'service_body_editor_uri_naws_format_text' => 'Get The Meetings For This Service Body As A NAWS-Compatible File', - 'edit_Meeting_meeting_id' => 'Meeting ID:', - 'service_body_editor_create_new_sb_option' => 'Erstelle einen neuen Service Body', - 'service_body_editor_screen_world_cc_label' => 'World Service Committee Code:', - 'service_body_editor_screen_world_cc_prompt' => 'Trage einen Service Committee Code ein', - 'user_editor_disclosure' => 'Benutzerverwaltung', - 'user_editor_create_new_user_option' => 'CErstelle einen neuen Benutzer', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Benutzer Login:', - 'user_editor_login_default_text' => 'Trage den Benutzer Login ein', - 'user_editor_account_type_label' => 'Benutzer ist ein:', - 'user_editor_user_owner_label' => 'Owned By: ', // TODO translate - 'user_editor_account_type_1' => 'Server Administrator', - 'user_editor_account_type_2' => 'Service Body Administrator', - 'user_editor_account_type_3' => 'Service Body Editor', - 'user_editor_account_type_5' => 'Service Body Observer', - 'user_editor_account_type_4' => 'Deaktivierter Benutzer', - 'user_editor_account_name_label' => 'Benutzername:', - 'user_editor_name_default_text' => 'Trage den Benutzernamen ein', - 'user_editor_account_description_label' => 'Beschreibung:', - 'user_editor_description_default_text' => 'Trage eine Benutzerbeschreibung ein', - 'user_editor_account_email_label' => 'E-Mailadresse:', - 'user_editor_email_default_text' => 'Trage die Benutzer-E-Mailadresse ein', - 'user_change_fader_success_text' => 'Der Benutzer wurde erfolgreich geändert', - 'user_change_fader_fail_text' => 'Das Ändern des Benutzers schlug fehl', - 'user_change_fader_create_success_text' => 'Der Benutzer wurde erfolgreich erstellt', - 'user_change_fader_create_fail_text' => 'Das Erstellen des Benutzers schlug fehl', - 'user_change_fader_delete_success_text' => 'Der Benutzer wurde erfolgreich gelöscht', - 'user_change_fader_delete_fail_text' => 'Das Löschen des Benutzers schlug fehl', - 'user_save_button' => 'Änderungen an diesem Benutzer speichern', - 'user_create_button' => 'Erstelle diesen neuen Benutzer', - 'user_cancel_button' => 'Zurücksetzen auf Ursprung', - 'user_delete_button' => 'Lösche diesen Benutzer', - 'user_delete_perm_checkbox' => 'Lösche diesen Benutzer dauerhaft', - 'user_password_label' => 'Ändere das Passwort zu:', - 'user_new_password_label' => 'Setze das Passwort zu:', - 'user_password_default_text' => 'Lass das frei, wenn du das Psswort nicht ändern willst', - 'user_new_password_default_text' => 'Du must ein Passwort für einen neuen Benutzer eintragen', - 'user_dirty_confirm_text' => 'Du hast den Benutzer verändert. möchtest due diese Änderungen verlieren?', - 'user_delete_button_confirm' => 'Bist du sicher, dass du diesen Benutzer löschen möchtest?', - 'user_delete_button_confirm_perm' => 'Dieser Benutzer wird dauerhaft gelöscht werden!', - 'user_create_password_alert_text' => 'Neue Benutzer brauchen ein Passwort. Du hast noch kein Passwort eingetragen.', - 'user_change_fader_fail_cant_find_sb_text' => 'Das Ändern des Benutzers schlug fehl, weil der Benutzer nicht gefunden wurde', - 'user_change_fader_fail_cant_update_text' => 'Das Ändern des Benutzers schlug fehl, weil der Benutzer nicht upgedatet wurde', - 'format_editor_disclosure' => 'Format Verwaltung', - 'format_change_fader_change_success_text' => 'Das Format wurde erfolgreich geändert', - 'format_change_fader_change_fail_text' => 'Das Ändern des Formats schlug fehl', - 'format_change_fader_create_success_text' => 'Das Format wurde erfolgreich erstellt', - 'format_change_fader_create_fail_text' => 'Das Erstellen des Formats schlug fehl', - 'format_change_fader_delete_success_text' => 'Das Format wurde erfolgreich gelöscht', - 'format_change_fader_delete_fail_text' => 'Das Löschen des Formats schlug fehl', - 'format_change_fader_fail_no_data_text' => 'Das Ändern des Formats schlug fehl, weil keine Daten geliefert wurden', - 'format_change_fader_fail_cant_find_sb_text' => 'Das Ändern des Formatss schlug fehl, weil das Format nicht gefunden wurde', - 'format_change_fader_fail_cant_update_text' => 'Das Ändern des Formats schlug fehl, weil deas Format nicht upgedatet wurde', - 'format_editor_name_default_text' => 'Trage eine kurze Beschreibung ein', - 'format_editor_description_default_text' => 'Trage eine detailiertere Beschreibung ein', - 'format_editor_create_format_button_text' => 'Erstelle ein neues Format', - 'format_editor_cancel_create_format_button_text' => 'abbrechen', - 'format_editor_create_this_format_button_text' => 'Erstelle dieses Format', - 'format_editor_change_format_button_text' => 'Ändere dieses Format', - 'format_editor_delete_format_button_text' => 'Lösche dieses Format', - 'format_editor_reset_format_button_text' => 'Zurücksetzen auf Ursprung', - 'need_refresh_message_fader_text' => 'Vor Benutzung dieses Bereiches sollte diese Seite neu geladen werden', - 'need_refresh_message_alert_text' => 'Weil Änderungen in der Service Body Verwaltung, Benutzerverwaltung oder Format Verwaltung vorgenommen wurden, ist die Information, die in diesem Bereich dargestellt wird, nicht mehr akkurat, also muss die Seite neu geladen werden. Der einfachste Weg dies zu tun ist sich abzumelden und sich wieder anzumelden.', - 'format_editor_delete_button_confirm' => 'Bist du sicher, dass du dieses Format löschen willst?', - 'format_editor_delete_button_confirm_perm' => 'Dieses Format wird dauerhaft gelöscht werden!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Das Passwort ist zu kurz! Es muss mindestens %d zeichen betragen!', - 'AJAX_Auth_Failure' => 'Authorisation fehlgeschlagen für diese Operation. Es kann sein, dass ein Problem mit der Serverkonfiguration besteht.', - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', // TODO translate - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'http://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Cannot Display Data -Unauthorized', - 'Value_Prompts' => array( - 'id_bigint' => 'Meeting ID', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Service Body', - 'service_bodies' => 'Service Bodies', - 'weekdays' => 'Weekdays', - 'weekday' => 'Meeting Gathers Every', - 'start_time' => 'Meeting Starts at', - 'duration_time' => 'Meeting Lasts', - 'location' => 'Location', - 'duration_time_hour' => 'Hour', - 'duration_time_hours' => 'Hours', - 'duration_time_minute' => 'Minute', - 'duration_time_minutes' => 'Minutes', - 'lang_enum' => 'Language', - 'formats' => 'Formats', - 'distance' => 'Distance from Center', - 'generic' => 'NA Meeting', - 'close_title' => 'Close This Meeting Detail Window', - 'close_text' => 'Close Window', - 'map_alt' => 'Map to Meeting', - 'map' => 'Follow This Link for A Map', - 'title_checkbox_unpub_meeting' => 'This meeting is unpublished. It cannot be seen by regular searches.', - 'title_checkbox_copy_meeting' => 'This meeting is a duplicate of another meeting. It is also unpublished. It cannot be seen by regular searches.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'Keine', - 'OPEN' => 'Offen', - 'CLOSED' => 'Geschlossen', - 'WCHR' => 'Rollstuhlzugang', - 'BEG' => 'Neuankömmling/Newcomer', - 'BT' => 'Basic Text', - 'CAN' => 'Kerzenlicht', - 'CPT' => '12 Konzepte', - 'CW' => 'Kinder willkommen', - 'DISC' => 'Diskussion/Teilen', - 'GL' => 'Schwul/Lesbisch', - 'IP' => 'Thema Faltblätter', - 'IW' => 'Es funktioniert', - 'JFT' => 'Nur für Heute', - 'LC' => 'Thema Living Clean', - 'LIT' => 'Literaturmeeting', - 'M' => 'Männer', - 'MED' => 'Meditation', - 'NS' => 'Non-Smoking', - 'QA' => 'Frage & Antwort', - 'RA' => 'Eingeschränkter Zutritt', - 'S-D' => 'Sprecher / Diskussion', - 'SMOK' => 'Raucher', - 'SPK' => 'Sprecher', - 'STEP' => 'Schritte', - 'SWG' => 'Schritteleitfaden', - 'TOP' => 'Themenmeeting', - 'TRAD' => 'Traditionenmeeting', - 'VAR' => 'Format variatiiert', - 'W' => 'Frauen', - 'Y' => 'Junge Menschen', - 'LANG' => 'Fremdsprache', - 'GP' => 'Guiding Principles', // TODO translate - 'NC' => 'No Children', // TODO translate - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Ein spirituelles Prinzip pro Tag', - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'None', - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', - 'O' => 'Attendance by non-addicts (Open, Closed)', - 'LANG' => 'Language', - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)', - ), - - 'cookie_monster' => 'Diese Website benutzt ein Cookie, um Ihre bevorzugte Sprache zu speichern.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Wochentag', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Zeit', - 'duration_time' => 'Dauer', - 'time_zone' => 'Time Zone', - 'formats' => 'Formate', - 'lang_enum' => 'Sprache', - 'longitude' => 'Längengrad', - 'latitude' => 'Breitengrad', - 'published' => 'veröffentlicht', - 'email_contact' => 'E-Mail Kontakt', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nDiese Nachricht betrifft das Meeting namens\"%s\", dzss sich trifft um %s, immer %s.\nBrowser Link: %s\nEdit Link: %s\nEs wurde direkt vom Webserver der Meetingliste gesendet, und der Absender kennt Ihre E-Mail-Adresse nicht.\nBitte beachten Sie, dass Ihre E-Mail-Adresse beim Antworten angezeigt wird.\nWenn Sie \"Reply All\" verwenden, Wenn es mehrere E-Mail-Empfänger gibt, könnten Sie die E-Mail-Adressen anderer Personen anzeigen.\nBitte respektieren Sie die Privatsphäre und Anonymität der Menschen einschließlich des ursprünglichen Absenders dieser Nachricht." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'Das Meeting wurde geändert.', - '__THE_MEETING_WAS_CREATED__' => 'Das Meeting wurde erstellt.', - '__THE_MEETING_WAS_DELETED__' => 'Das Meeting wurde gelöscht.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'Das Meeting wurde auf die vorherige Version zurück gesetzt.', - - '__THE_FORMAT_WAS_CHANGED__' => 'Das Format wurde geändert.', - '__THE_FORMAT_WAS_CREATED__' => 'Das Format wurde erstellt.', - '__THE_FORMAT_WAS_DELETED__' => 'Das Format wurde gelöscht.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Das Format wurde auf die vorherige Version zurück gesetzt.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'Der service body wurde geändert.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'Der service body wurde erstellt.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'Der service body wurde gelöscht.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'Der service body wurde auf die vorherige Version zurück gesetzt.', - - '__THE_USER_WAS_CHANGED__' => 'Der Benutzer wurde geändert.', - '__THE_USER_WAS_CREATED__' => 'Der Benutzer wurde erstellt.', - '__THE_USER_WAS_DELETED__' => 'Der Benutzer wurde gelöscht.', - '__THE_USER_WAS_ROLLED_BACK__' => 'Der Benutzer wurde auf die vorherige Version zurück gesetzt.', - - '__BY__' => 'by', - '__FOR__' => 'for' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'was changed from', - 'to' => 'to', - 'was_changed' => 'wurde geändert', - 'was_added_as' => 'wurde hinzugefügt als', - 'was_deleted' => 'wurde gelöscht', - 'was_published' => 'Das Meeting wurde veröffentlicht', - 'was_unpublished' => 'Das Meeting wurde deaktiviert', - 'formats_prompt' => 'Das Meetings-Format', - 'duration_time' => 'Die Meetings-Dauer', - 'start_time' => 'Die Meetings Start-Zeit', - 'longitude' => 'Der Meetings-Längengrad', - 'latitude' => 'Der Meetings-Breitengrad', - 'sb_prompt' => 'Das Meeting änderte seinen Service Body von', - 'id_bigint' => 'Die Meetings-ID', - 'lang_enum' => 'Die Meetings-Sprache', - 'worldid_mixed' => 'Die gemeinsame Group ID', // TODO: translate The World Committee Code - 'weekday_tinyint' => 'Der Tag der Woche, an dem das Meeting stattfindet', - 'non_existent_service_body' => 'Dieser Service Body existiert nicht mehr', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/dk/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/dk/data_transfer_strings.php deleted file mode 100644 index aedc985c6..000000000 --- a/src/legacy/local_server/server_admin/lang/dk/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Søndag', - 'Mandag', - 'Tirsdag', - 'Onsdag', - 'Torsdag', - 'Fredag', - 'Lørdag' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/dk/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/dk/install_wizard_strings.php deleted file mode 100644 index b34b87e15..000000000 --- a/src/legacy/local_server/server_admin/lang/dk/install_wizard_strings.php +++ /dev/null @@ -1,155 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'FEJL: Du skal have PHP Version 5.6 eller nyere installeret på denne server!', - 'Database_PDO_Error' => 'FEJL: Du har ikke PHP PDO installeret!', - 'Database_Type_Error' => 'FEJL: Selvom du har PDO, har du ikke installeret databasedrivere!', - 'Database_Type_MySQL_Error' => 'FEJL: Selvom du har PDO, og du har installeret database drivere, er ingen af MySQL (den eneste understøttede driver)!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'Databaseforbindelsen var vellykket.', - 'Database_TestButton_Fail' => 'Databaseforbindelsen mislykkedes: ', - 'Database_TestButton_Fail2' => 'Databaseforbindelsen mislykkedes, fordi der allerede er en initialiseret database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'Databaseforbindelsen mislykkedes! Sørg for, at databasen eksisterer, ER HELT TOM, brugeren er oprettet, og den bruger har fuld tilladelse på den tomme database.', - 'AJAX_Handler_DB_Established_Error' => 'Databasen eksisterer allerede, og er blevet oprettet! Du kan ikke bruge denne opsætning til at overskrive en eksisterende database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'Der er ikke nok information til at initialisere databasen!', - - 'NoDatabase_Note_AlreadySet' => 'Der er allerede en eksisterende database, så du kan ikke initialisere en ny.', - 'NoDatabase_Note_PasswordIssue' => 'Du skal oprette en serveradministratorkonto, før databasen kan initialiseres.', - 'NoServerAdmin_Note_AlreadySet' => 'Der findes allerede en eksisterende database, så du kan ikke oprette en serveradministratorkonto (der eksisterer allerede en).', - 'NeedLongerPasswordNote' => 'Denne adgangskode er for kort. Det skal være mindst %d tegn langt.', - - 'Prev_Button' => 'FORRIGE', - 'Next_Button' => 'NÆSTE', - - 'Page_1_Tab' => 'TRIN 1: Database', - 'Page_1_Heading' => 'Indstillinger Database Forbindelse', - 'Page_1_Text' => 'Inden du kan anvende indstillingerne på denne side, skal du oprette en ny FULDSTÆNDIG TOM database og oprette en database bruger, der har fuld brugerrettigheder på den pågældende database.', - - 'Database_Name' => 'Database Navn:', - 'Database_Name_Default_Text' => 'Indsæt et Database Navn', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Indsæt en Database Host', - 'Database_Host_Additional_Text' => 'Dette er normalt "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Indsæt et Table Prefix', - 'Table_Prefix_Additional_Text' => 'Kun for flere root-servere, der deler en database.', - 'Database_User' => 'Database Bruger:', - 'Database_User_Default_Text' => 'Indsæt et Database Bruger Navn', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Indsæt et Database Password', - 'Database_PW_Additional_Text' => 'Opret dette som et svært, vanskelig adgangskode. Det har en masse magt, og du behøver aldrig at huske det.', - - 'Maps_API_Key_Warning' => 'ADVARSEL: Der er et problem med API-nøglen til Google Maps.', - 'Maps_API_Key_Not_Set' => 'ADVARSEL: Google Maps API-nøglen er ikke angivet.', - 'Maps_API_Key_Valid' => 'Google Maps API nøgle er gyldig.', - - 'Page_2_Tab' => 'Trin 2: Indstillinger for Google Maps API', - 'Page_2_Heading' => 'Indstillinger for Google Maps API', - 'Page_2_API_Key_Prompt' => 'Enter the Google API Key for Geocoding:', - 'Page_2_API_Key_Set_Button' => 'TESTSØGLE', - 'Page_2_API_Key_Not_Set_Prompt' => 'SÆT API KEY FØRST', - 'Page_2_Text' => 'Når du gemmer et møde, bruger BMLT Root Server API en til Google Maps til at bestemme bredde og længdegrad for mødeadressen. Disse indstillinger er nødvendige for at tillade, at BMLT Root Server kommunikerer med Google Maps API.', - - 'Page_3_Tab' => 'TRIN 3: Serverindstillinger', - 'Page_3_Heading' => 'Indstil forskellige globale serverindstillinger', - 'Page_3_Text' => 'Dette er nogle få indstillinger, der påvirker administrationen og den generelle konfiguration af denne server. De fleste serverindstillinger udføres på selve serveren.', - 'Admin_Login' => 'Login til serveradministrator:', - 'Admin_Login_Default_Text' => 'Indsæt et serveradministrator login', - 'Admin_Login_Additional_Text' => 'Dette er login-streng for serveradministratoren.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Indsæt en serveradministratoradgangskode', - 'Admin_Password_Additional_Text' => 'Sørg for, at dette er et ikke-trivielt kodeord! Det har en masse betydning! (Og Glem det ikke).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Standard server sprog:', - 'DistanceUnitsLabel' => 'Afstandsenheder:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometer', - 'SearchDepthLabel' => 'Tæthed af møder ved automatisk søgning:', - 'SearchDepthText' => 'Dette er en tilnærmelse af, hvor mange møder der skal findes i det automatiske radiusvalg. Flere møder betyder en større radius.', - 'HistoryDepthLabel' => 'Hvor mange møder ændringer skal gemmes:', - 'HistoryDepthText' => ' Jo længere historie, desto større bliver databasen.', - 'TitleTextLabel' => 'Titel på administrations Knappen:', - 'TitleTextDefaultText' => 'Indsæt en kort titel for redigerings login siden', - 'BannerTextLabel' => 'Hurtig administrator login:', - 'BannerTextDefaultText' => 'Indsæt en kort forespørgsel til login side', - 'RegionBiasLabel' => 'Favorit Region:', - 'PasswordLengthLabel' => 'Minimum adgangskode længde:', - 'PasswordLengthExtraText' => 'Dette vil også påvirke Server Administrator adgangskode, ovenfor.', - 'DefaultClosedStatus' => 'Møder betragtes som "LUKKET" som Udgangspunkt:', - 'DefaultClosedStatusExtraText' => 'Dette påvirker primært eksporten til NAWS.', - 'DurationLabel' => 'Standard Møde Varighed:', - 'DurationHourLabel' => 'Timer', - 'DurationMinutesLabel' => 'Minutter', - 'LanguageSelectorEnableLabel' => 'Vis sprogvalg ved login:', - 'LanguageSelectorEnableExtraText' => 'Hvis du vælger dette, vises en pop op-menu på login-skærmen, så administratorer kan vælge deres sprog.', - 'SemanticAdminLabel' => 'Aktivér semantisk administration:', - 'SemanticAdminExtraText' => 'Hvis ikke markeret, skal al administration ske via Root Server login (Ingen apps).', - 'EmailContactEnableLabel' => 'Tillad e-mail-kontakter fra møder:', - 'EmailContactEnableExtraText' => 'Hvis du vælger dette, vil besøgende kunne sende e-mails fra møde optegnelser.', - 'EmailContactAdminEnableLabel' => 'Inkluder Service Enhed Administrator på disse e-mails:', - 'EmailContactAdminEnableExtraText' => 'Sender kopier af disse e-mails til service enhedens administrator (hvis de ikke er den primære modtager).', - 'EmailContactAllAdminEnableLabel' => 'Medtag alle service enhedsadministratorer på disse e-mails:', - 'EmailContactAllAdminEnableExtraText' => 'Send kopier af disse e-mails til alle relevante Service Enheds Administrators.', - - 'Page_4_Tab' => 'TRIN 4: Gem indstillingerne', - 'Page_4_Heading' => 'Opret indstillingsfilen', - 'Page_4_Text' => 'På grund af sikkerhedsproblemer (Ja, vi er ret paranoid -go figur), vil dette program ikke forsøge at oprette eller ændre indstillingsfilen. I stedet beder vi dig om at oprette det selv, via FTP eller en kontrolpanel filhåndtering, navngiv det "auto-config.inc.php" og indsæt følgende tekst i filen:', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Møder er normalt 60 minutter lange (en time), medmindre andet er angivet.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'Længdegrad' => -118.563659, 'Højdegrad' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'Denne installationsguiden fører dig gennem processen med oprettelse af en startdatabase samt en konfigurationsfil. I det sidste trin opretter vi en indstillingsfil og initialiserer en tom database.', - 'Explanatory_Text_1_DB_Intro' => 'Den første ting, du skal gøre, er at oprette en ny, TOM database og en database bruger, der har fuld adgang til databasen. Dette gøres normalt via dit websted Kontrolpanel. Når du har oprettet databasen, skal du indtaste oplysningerne om den pågældende database i tekstelementerne på denne side.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'Den "Region Bias" er en kode, der er sendt til Google, når en placering søgningen er færdig, og kan hjælpe Google til at få mening ud af tvetydige søgeforespørgsler.', - 'Explanatory_Text_2_API_key_Intro' => '"API-nøgle" er en nøgle, som you need to register with Google in order to be able to use their mapping service.', - 'Explanatory_Text_2_API_key_2_Intro' => 'Du skal angive en gyldig API-nøgle for at oprette nye møder i Rootserveren.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'Serveradministratoren er hovedbrugeren til serveren. Det er den eneste konto, der kan skabe nye brugere og serviceorganer, og er meget kraftfuld. Du skal oprette et login-id og en ikke-triviel adgangskode til denne konto. Du kan ændre de øvrige aspekter af kontoen på hovedserveren, når databasen er oprettet.', - 'Explanatory_Text_3_Misc_Intro' => 'Disse er forskellige indstillinger, der påvirker hvordan rodserveren opfører sig og vises.', - - 'Explanatory_Text_4_Main_Intro' => 'Hvis du har indtastet database oplysningerne, og hvis du har angivet loginoplysningerne til serveradministratoren, kan du initialisere databasen her. Husk at databasen skal være HELT TOM for BMLT Root Server tabeller for denne server (Det kan have tabeller til andre servere eller tjenester).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'Teksten i boksen nedenfor er PHP kildekoden for hovedindstillingsfilen. Du skal oprette en fil på serveren med denne tekst i den. Filen er på samme niveau som hovedservermappen for rodserveren.', - 'Explanatory_Text_4_File_Extra' => 'Du skal også sikre dig, at filtilladelserne er begrænset (chmod 0644). Dette forhindrer filen i at blive skrevet, og rodserveren kører ikke, medmindre filen har de korrekte tilladelser.', - 'Page_4_PathInfo' => 'Filen skal placeres som %s/auto-config.inc.php, hvor din% s-mappe er. Når filen er oprettet, og du har lagt ovenstående tekst i den, skal du udføre følgende kommando for at sikre, at tilladelserne er korrekte:', - 'Page_4_Final' => 'Når alt dette er færdig, opdatere denne side, og du bør kunne se root serveren login siden.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - - ); diff --git a/src/legacy/local_server/server_admin/lang/dk/name.txt b/src/legacy/local_server/server_admin/lang/dk/name.txt deleted file mode 100644 index 4ddab201f..000000000 --- a/src/legacy/local_server/server_admin/lang/dk/name.txt +++ /dev/null @@ -1 +0,0 @@ -Dansk \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/dk/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/dk/server_admin_strings.inc.php deleted file mode 100644 index b2a0a5ca7..000000000 --- a/src/legacy/local_server/server_admin/lang/dk/server_admin_strings.inc.php +++ /dev/null @@ -1,493 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Min konto', - 'account_name_label' => 'Min Kontonavn:', - 'account_login_label' => 'Mit Login:', - 'account_type_label' => 'Jeg er en:', - 'account_type_1' => 'Server Administrator', - 'account_type_2' => 'Service Body Administrator', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'hacker? tilsyneladende ikke', - 'account_type_5' => 'Service enhed overvåger', - 'change_password_label' => 'Ændre kodeord Til:', - 'change_password_default_text' => 'Efterlad tomt, hvis du ikke vil ændre dit kodeord', - 'account_email_label' => 'Min Mail Adresse:', - 'email_address_default_text' => 'Indsæt en Mail Aderesse', - 'account_description_label' => 'My Description:', - 'account_description_default_text' => 'Lav en beskrivelse', - 'account_change_button_text' => 'Skift mine kontoindstillinger', - 'account_change_fader_success_text' => 'Kontooplysningerne blev ændret succesfuldt', - 'account_change_fader_failure_text' => 'Kontooplysningerne blev ikke ændret', - 'meeting_editor_disclosure' => 'Møde Editor', - 'meeting_editor_already_editing_confirm' => 'Du redigerer for øjeblikket et andet møde. Ønsker du at miste alle ændringer i det møde?', - 'meeting_change_fader_success_text' => 'Mødet blev succesfuldt ændret', - 'meeting_change_fader_failure_text' => 'Mødet blev ikke ændret', - 'meeting_change_fader_success_delete_text' => 'Mødet blev slettet med succes', - 'meeting_change_fader_fail_delete_text' => 'Mødet blev ikke slettet', - 'meeting_change_fader_success_add_text' => 'Det nye møde blev tilføjet succesfuldt', - 'meeting_change_fader_fail_add_text' => 'Det nye møde blev ikke tilføjet', - 'meeting_text_input_label' => 'Søg efter tekst:', - 'access_service_body_label' => 'Jeg har adgang til:', - 'meeting_text_input_default_text' => 'Indtast nogle søgeord', - 'meeting_text_location_label' => 'Dette er en placering eller postkode', - 'meeting_search_weekdays_label' => 'Søg efter udvalgte hverdage:', - 'meeting_search_weekdays_names' => array('Alle', 'Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'), - 'meeting_search_service_bodies_label' => 'Søg i valgte service Enhed:', - 'meeting_search_start_time_label' => 'Søg efter møde Starttid:', - 'meeting_search_start_time_all_label' => 'Enhver tid', - 'meeting_search_start_time_morn_label' => 'Morgen', - 'meeting_search_start_time_aft_label' => 'Eftermiddag', - 'meeting_search_start_time_eve_label' => 'Aften', - 'meeting_search_no_results_text' => 'Ingen møder fundet', - 'meeting_editor_tab_specifier_text' => 'Søg efter møder', - 'meeting_editor_tab_editor_text' => 'Rediger møder', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Opret et nyt møde', - 'meeting_editor_location_map_link' => 'Placerings kort', - 'meeting_editor_screen_match_map_button' => 'Indstil kort til adresse', - 'meeting_editor_screen_match_ll_button' => 'Indstil længdegrad og breddegrad til adresse', - 'meeting_editor_screen_default_text_prompt' => 'Indtast noget tekst eller et nummer', - 'meeting_is_published' => 'Møde er offentliggjort', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Møde navn:', - 'meeting_editor_screen_meeting_name_prompt' => 'Indtast et mødenavn', - 'meeting_editor_screen_meeting_weekday_label' => 'Ugedag:', - 'meeting_editor_screen_meeting_start_label' => 'Møde Starttid:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Middag', - 'meeting_editor_screen_meeting_midnight_label' => 'Midnat', - 'meeting_editor_screen_meeting_duration_label' => 'Varighed:', - 'meeting_editor_screen_meeting_oe_label' => 'Åben-Sluttede', - 'meeting_editor_screen_meeting_cc_label' => 'Verdens Komite Kode:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Møde Email Kontakt:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Indtast en e-mail for kun en kontakt til dette møde', - 'meeting_editor_screen_meeting_sb_label' => 'Service enhed:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Ingen Service Body Selected', - 'meeting_editor_screen_meeting_longitude_label' => 'Længdegrad:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Indtast en længdegrad', - 'meeting_editor_screen_meeting_latitude_label' => 'Højdegrad:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Indtast en Højdegrad', - 'meeting_editor_screen_meeting_location_label' => 'Længdegrad:', - 'meeting_editor_screen_meeting_location_prompt' => 'Indtast et stednavn (som et bygningsnavn)', - 'meeting_editor_screen_meeting_info_label' => 'Ekstra Info:', - 'meeting_editor_screen_meeting_info_prompt' => 'Indtast eventuelle yderligere placeringsoplysninger', - 'meeting_editor_screen_meeting_street_label' => 'Gade Adresse:', - 'meeting_editor_screen_meeting_street_prompt' => 'Indtast et gadenavn', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Naboskab:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Indtast et naboskab(ikke bydel eller byunderafdeling)', - 'meeting_editor_screen_meeting_borough_label' => 'Bydel / By område:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Indtast en by eller område(ikke naboskab)', - 'meeting_editor_screen_meeting_city_label' => 'By:', - 'meeting_editor_screen_meeting_city_prompt' => 'Indtast et by eller bynavn(ikke amt eller by)', - 'meeting_editor_screen_meeting_county_label' => 'Amt /provinsen afdeling:', - 'meeting_editor_screen_meeting_county_prompt' => 'Indtast et navn på amt eller provinsens afdeling navn', - 'meeting_editor_screen_meeting_state_label' => 'Amt / Provins:', - 'meeting_editor_screen_meeting_state_prompt' => 'Indtast et amt eller provinsnavn', - 'meeting_editor_screen_meeting_zip_label' => 'Postnr:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Indtast et postnummer', - 'meeting_editor_screen_meeting_nation_label' => 'Nation:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Indtast nationens navn', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Se efter:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Kun offentliggjorte møder', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Kun ikke offentliggjorte møder', - 'meeting_editor_screen_meeting_visibility_advice' => 'Dette vises aldrig i normale mødesøgninger.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Alle møder', - 'meeting_editor_screen_meeting_create_button' => 'Opret et nyt møde', - 'meeting_editor_screen_delete_button' => 'Slet dette møde', - 'meeting_editor_screen_delete_button_confirm' => 'Er du sikker på, at du vil slette dette møde?', - 'meeting_editor_screen_cancel_button' => 'Annulerer', - 'logout' => 'Log ud', - 'meeting_editor_screen_cancel_confirm' => 'Er du sikker på at du vil annullere redigering af dette møde og miste alle ændringer?', - 'meeting_lookup_failed' => 'Adressesøgningen mislykkedes.', - 'meeting_lookup_failed_not_enough_address_info' => 'Der er ikke nok gyldige adresseoplysninger til at foretage en søgning.', - 'meeting_create_button_name' => 'Gem dette som nyt møde', - 'meeting_saved_as_a_copy' => 'Gem dette møde som en kopi(opretter et nyt møde)', - 'meeting_save_buttonName' => 'Gem ændringerne til dette møde ', - 'meeting_editor_tab_bar_basic_tab_text' => 'Grundlæggende', - 'meeting_editor_tab_bar_location_tab_text' => 'Beliggenhed', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Andet', - 'meeting_editor_tab_bar_history_tab_text' => 'Historie', - 'meeting_editor_result_count_format' => '%d Møder fundet', - 'meeting_id_label' => 'Møde ID:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'meeting_editor_default_duration' => '01:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administration Console', - 'login' => 'Login ID', - 'password' => 'Kodeord', - 'button' => 'Log Ind', - 'cookie' => 'Du skal aktivere cookies for at administrere denne server.', - 'noscript' => 'Du kan ikke administrere denne side uden JavaScript.', - 'title' => 'Log venligst ind for at administrere serveren.', - 'edit_Meeting_object_not_found' => 'FEJL: Mødet blev ikke fundet.', - 'edit_Meeting_object_not_changed' => 'FEJL: Mødet blev ikke ændret.', - 'edit_Meeting_auth_failure' => 'Du har ikke tilladelse til at redigere dette møde.', - 'not_auth_1' => 'IKKE AUTORISERET', - 'not_auth_2' => 'Du har ikke tilladelse til at administrere denne server.', - 'not_auth_3' => 'Der opstod et problem med brugernavnet eller adgangskoden, du indtastede.', - 'email_format_bad' => 'Den email-adresse, du indtastede, blev ikke formateret korrekt.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

Ingen historie tilgængelig til dette møde

', - 'service_body_editor_disclosure' => 'Service enhed Administration', - 'service_body_change_fader_success_text' => 'Service enheden blev succesfuldt ændret', - 'service_body_change_fader_fail_text' => 'Services enhedens ændring mislykkedes', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Navn:', - 'service_body_name_default_prompt_text' => 'Indtast navnet på denne service enhed', - 'service_body_parent_popup_label' => 'Service Enhedens forældre:', - 'service_body_parent_popup_no_parent_option' => 'Ingen forælder (øverste niveau)', - 'service_body_editor_screen_sb_admin_user_label' => 'Primær Administrator:', - 'service_body_editor_screen_sb_admin_description_label' => 'Beskrivelse:', - 'service_body_description_default_prompt_text' => 'Indtast en beskrivelse af denne service enhed', - 'service_body_editor_screen_sb_admin_email_label' => 'Kontakt Email:', - 'service_body_email_default_prompt_text' => 'Indtast en kontakt-e-mail-adresse for denne service enhed', - 'service_body_editor_screen_sb_admin_uri_label' => 'Web Side URL:', - 'service_body_uri_default_prompt_text' => 'Indsæt en Web Side URL for denne Service Enhed', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Fuld møde liste redaktører:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Disse brugere kan redigere eventuelle møder i denne service enhed.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Grundlæggende møde liste redaktører:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Disse brugere kan redigere eventuelle møder i denne service enhed, men kun hvis de er upubliceret.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observatører:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Disse brugere kan se skjult info (som e-mail-adresser), men kan ikke redigere noget.', - 'service_body_dirty_confirm_text' => 'Du har foretaget ændringer til denne service enhed. Ønsker du at miste dine ændringer?', - 'service_body_save_button' => 'Gem disse ændringer for Service Enheden', - 'service_body_create_button' => 'Opret denne service Enhed', - 'service_body_delete_button' => 'Slet denne service Enhed', - 'service_body_delete_perm_checkbox' => 'Slet Denne Service Enhed Permanent', - 'service_body_delete_button_confirm' => 'Er du sikker på, at du vil slette denne service Enhed? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'Denne service enhed vil blive slettet permanent!', - 'service_body_change_fader_create_success_text' => 'Denne Service Enhed Blev Oprettet Succesfuld ', - 'service_body_change_fader_create_fail_text' => 'Oprettelse Service Enheden Mislykkedes', - 'service_body_change_fader_delete_success_text' => 'Service Enheden Blev Slettet', - 'service_body_change_fader_delete_fail_text' => 'Slettelse Af Service Enheden Mislykkedes', - 'service_body_change_fader_fail_no_data_text' => 'Ændring Af Service Enheden Mislykkedes, Fordi Der Ikke Var Nogen Data Leveret', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Ændring Af Service Enheden Mislykkedes, Fordi Service Enheden Ikke Blev Fundet', - 'service_body_change_fader_fail_cant_update_text' => 'Ændring Af Service Enheden Mislykkedes, Fordi Service Enheden Ikke Blev Opdateret', - 'service_body_change_fader_fail_bad_hierarchy' => 'Ændring Af Service Enheden Mislykkedes, Fordi Den Udvalgte Ejerens Service Enhed Er Under Denne Service Enhed Og Kan Ikke Bruges', - 'service_body_cancel_button' => 'Gendan til original', - 'service_body_editor_type_label' => 'Service Enhed Type:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Gruppe', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Samarbejde', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Område Service Komite ', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Regionale service konference', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Verdens Service Konference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metroområde', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zone', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Gruppe Service Enhed', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Lokal Service Enhed', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Indtast Telefonnummeret Til Helpline', - 'service_body_editor_uri_naws_format_text' => 'Få Møder Til Denne service Enhed Som En NAWS-Kompatibel Fil', - 'edit_Meeting_meeting_id' => 'Møde ID:', - 'service_body_editor_create_new_sb_option' => 'Opret En Ny Service Enhed', - 'service_body_editor_screen_world_cc_label' => 'Verdens Komite Kode:', - 'service_body_editor_screen_world_cc_prompt' => 'Indtast En Verdens Komite Kode', - 'user_editor_disclosure' => 'Bruger Administration', - 'user_editor_create_new_user_option' => 'Opret En Ny Bruger', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Bruger Login:', - 'user_editor_login_default_text' => 'Indtast Et Bruger Login', - 'user_editor_account_type_label' => 'Bruger Er En:', - 'user_editor_user_owner_label' => 'Ejet Af: ', - 'user_editor_account_type_1' => 'Server Administrator', - 'user_editor_account_type_2' => 'Service Enheds Administrator', - 'user_editor_account_type_3' => 'Service Enheds Redaktør', - 'user_editor_account_type_5' => 'Service Enheds Observant', - 'user_editor_account_type_4' => 'Deaktiveret bruger', - 'user_editor_account_name_label' => 'Bruger Navn:', - 'user_editor_name_default_text' => 'Indsæt Et Bruger Navn', - 'user_editor_account_description_label' => 'Beskrivelse:', - 'user_editor_description_default_text' => 'Indsæt En Bruger Beskrivelse', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'Indsæt En Bruger Email', - 'user_change_fader_success_text' => 'Brugeren blev ændret succesfuldt', - 'user_change_fader_fail_text' => 'Brugerændringen mislykkedes', - 'user_change_fader_create_success_text' => 'Brugeren blev oprettet', - 'user_change_fader_create_fail_text' => 'Oprettelse Af Bruger Mislykkedes', - 'user_change_fader_create_fail_already_exists' => 'En login til den bruger, du forsøger at oprette, eksisterer allerede.', - 'user_change_fader_delete_success_text' => 'Brugeren blev slettet', - 'user_change_fader_delete_fail_text' => 'Sletningen Brugen Mislykkedes', - 'user_save_button' => 'Gem Ændringer Til Denne Bruger', - 'user_create_button' => 'Opret Denne Nye Bruger', - 'user_cancel_button' => 'Gendan til original', - 'user_delete_button' => 'Slet Denne Bruger', - 'user_delete_perm_checkbox' => 'Slet Denne Bruger Permanent', - 'user_password_label' => 'Skift Adgangskode Til:', - 'user_new_password_label' => 'Angiv Adgangskode Til:', - 'user_password_default_text' => 'Forlad dette alene, medmindre du vil ændre adgangskoden', - 'user_new_password_default_text' => 'Du skal indtaste et kodeord for en ny bruger', - 'user_dirty_confirm_text' => 'Du har foretaget ændringer til denne bruger. Ønsker du at miste dine ændringer?', - 'user_delete_button_confirm' => 'Er Du Sikker På, At Du Vil Slette Denne Bruger?', - 'user_delete_button_confirm_perm' => 'Denne Bruger Bliver Slettet Permanent!', - 'user_create_password_alert_text' => 'Nye Brugere Skal Have Adgangskode. Du Har Ikke Angivet En Adgangskode Til Denne Bruger.', - 'user_change_fader_fail_no_data_text' => 'Brugerændringen Mislykkedes, Fordi Der Ikke Var Nogen Data Leveret', - 'user_change_fader_fail_cant_find_sb_text' => 'Brugerændringen Mislykkedes, Fordi Brugeren Ikke Blev Fundet', - 'user_change_fader_fail_cant_update_text' => 'Brugerændringen Mislykkedes, Fordi Brugeren Ikke Blev Opdateret', - 'format_editor_disclosure' => 'Format Administration', - 'format_change_fader_change_success_text' => 'Formatet Blev Ændret Succesfuldt', - 'format_change_fader_change_fail_text' => 'Format Ændringen Mislykkedes', - 'format_change_fader_create_success_text' => 'Formatet Blev Oprettet Succesfuldt', - 'format_change_fader_create_fail_text' => 'Oprettelse Af Formatet Mislykkes', - 'format_change_fader_delete_success_text' => 'Formatet Blev Slettet', - 'format_change_fader_delete_fail_text' => 'Sletning Af Format Mislykkedes', - 'format_change_fader_fail_no_data_text' => 'Format Ændring Mislykkedes, Fordi Der Ikke Var Data Leveret', - 'format_change_fader_fail_cant_find_sb_text' => 'Format Ændring Mislykkes, Fordi Formatet Ikke Blev Fundet', - 'format_change_fader_fail_cant_update_text' => 'Format Ændring Mislykkes, Fordi Formatet Ikke Blev Opdateret', - 'format_editor_name_default_text' => 'Indsæt En Meget Kort Beskrivelse', - 'format_editor_description_default_text' => 'Indsæt En Mere Detaljeret Beskrivelse', - 'format_editor_create_format_button_text' => 'Opret Nyt Format', - 'format_editor_cancel_create_format_button_text' => 'Annullere', - 'format_editor_create_this_format_button_text' => 'Opret Dette Format', - 'format_editor_change_format_button_text' => 'Skift Dette Format', - 'format_editor_delete_format_button_text' => 'Slet Dette Format', - 'format_editor_reset_format_button_text' => 'Gendan Til Original', - 'need_refresh_message_fader_text' => 'Du bør opdatere denne side, før du bruger denne sektion', - 'need_refresh_message_alert_text' => 'Hvis du har foretaget ændringer i Service Body Administration, User Administration eller Format Administration, kan oplysningerne, der vises i dette afsnit, ikke længere være korrekte, så siden skal opdateres. Den nemmeste måde at gøre dette på er at logge ud og derefter logge på igen.', - 'format_editor_delete_button_confirm' => 'Er du sikker på, at du vil slette dette format?', - 'format_editor_delete_button_confirm_perm' => 'Dette format slettes permanent!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Adgangskoden er for kort! Det skal være mindst% d tegn langt!', - 'AJAX_Auth_Failure' => 'Autorisation mislykkedes for denne operation. Der kan være et problem med serverkonfigurationen.', - 'Maps_API_Key_Warning' => 'ADVARSEL: Der er et problem med API-nøglen til Google Maps.', - 'Maps_API_Key_Not_Set' => 'ADVARSEL: Google Maps API-nøglen er ikke angivet.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Importer mødedata (ADVARSEL: Erstatter nuværende data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Kan ikke vise data - Uautoriseret', - 'Value_Prompts' => array( - 'id_bigint' => 'Møde ID', - 'worldid_mixed' => 'Verdens Services ID', - 'service_body' => 'Service Enhed', - 'service_bodies' => 'Service Enheder', - 'weekdays' => 'Ugedage', - 'weekday' => 'Møde samles hver', - 'start_time' => 'Møde begynder kl', - 'duration_time' => 'Møde vare', - 'location' => 'Beliggenhed', - 'duration_time_hour' => 'Time', - 'duration_time_hours' => 'Timer', - 'duration_time_minute' => 'Minut', - 'duration_time_minutes' => 'Minutter', - 'lang_enum' => 'Sprog', - 'formats' => 'Struktur', - 'distance' => 'Afstand fra Centrum', - 'generic' => 'NA Møde', - 'close_title' => 'Luk Dette Mødestruktur Vindue', - 'close_text' => 'Luk Vindue', - 'map_alt' => 'Kort til møde', - 'map' => 'Følg denne link til et kort', - 'title_checkbox_unpub_meeting' => 'Dette møde er ikke udgivet. Det kan ikke ses ved regelmæssige søgninger.', - 'title_checkbox_copy_meeting' => 'Dette møde er et duplikat af et andet møde. Det er ikke udgivet. Det kan ikke ses ved regelmæssige søgninger.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'None', - 'OPEN' => 'Åben', - 'CLOSED' => 'Lukket', - 'WCHR' => 'Kørestolsvenligt', - 'BEG' => 'Begynder / Nykommer', - 'BT' => 'Basis Tekst', - 'CAN' => 'Lysmøde', - 'CPT' => '12 koncepter', - 'CW' => 'Børn Er Velkommen', - 'DISC' => 'Diskussion / Deltagelse', - 'GL' => 'Homoseksuel / lesbisk', - 'IP' => 'IP Møde', - 'IW' => 'Det Virker Møde', - 'JFT' => 'Bare For I Dag Møde', - 'LC' => 'Living Clean', - 'LIT' => 'Litteratur Møde', - 'M' => 'Mandemøde', - 'MED' => 'Meditation', - 'NS' => 'Ikke Ryger', - 'QA' => 'Spørgsmål & Svar', - 'RA' => 'Restriktiv Møde', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Ryger', - 'SPK' => 'Speaker', - 'STEP' => 'Trin', - 'SWG' => 'Step Working Guide Møde', - 'TOP' => 'Emne', - 'TRAD' => 'Tradition', - 'VAR' => 'Skiftende Struktur', - 'W' => 'Kvinde', - 'Y' => 'Ungdoms Møde', - 'LANG' => 'Alternativt sprog', - 'GP' => 'Guiding Principles', // TODO translate - 'NC' => 'No Children', // TODO translate - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', // TODO: Translate - 'format_type_codes' => array( - '' => 'None', // TODO: Translate - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', // TODO: Translate - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', // TODO: Translate - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', // TODO: Translate - 'O' => 'Attendance by non-addicts (Open, Closed)', // TODO: Translate - 'LANG' => 'Language', // TODO: TRANSLATE - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)',// TODO: Translate - ), - 'cookie_monster' => 'Dette websted bruger en cookie til at gemme dit foretrukne sprog.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'Verdens ID', - 'shared_group_id_bigint' => 'Ubrugt', - 'service_body_bigint' => 'Service Enhed ID', - 'weekday_tinyint' => 'Ugedag', - 'venue_type' => 'Venue Type', - 'start_time' => 'Starttidspunkt', - 'duration_time' => 'Retning', - 'time_zone' => 'Time Zone', - 'formats' => 'Struktur', - 'lang_enum' => 'Sprog', - 'longitude' => 'Længdegrad', - 'latitude' => 'Højdergrad', - 'published' => 'Udgivet', - 'email_contact' => 'Email Kontakt', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MØDE LISTE KONTAKT] %s", - 'meeting_contact_message_format' => "%s\n--\nDenne meddelelse vedrører mødet navngivet \"%s\", der mødes %s, on %s.\nBrowser Link: %s\nRedigere Link: %s\nDen blev sendt direkte fra mødelisten webserver, og afsenderen er ikke bekendt med din e-mail-adresse.\nVær opmærksom på, at svaret vil afsløre din e-mail-adresse.\nHvis du bruger \"Svar alle\", og der er flere e-mailmodtagere, kan du udsætte andres e-mailadresser.\nVær venlig at respektere folks privatliv og anonymitet; herunder den oprindelige afsender af denne meddelelse." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'Mødet blev ændret.', - '__THE_MEETING_WAS_CREATED__' => 'Mødet blev oprettet.', - '__THE_MEETING_WAS_DELETED__' => 'Mødet blev slettet.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'Mødet blev rullet tilbage til en tidligere version.', - - '__THE_FORMAT_WAS_CHANGED__' => 'Strukturen Blev Ændret.', - '__THE_FORMAT_WAS_CREATED__' => 'Strukturen Blev Oprettet.', - '__THE_FORMAT_WAS_DELETED__' => 'Strukturen Blev Slettet.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Strukturen blev rullet tilbage til en tidligere version.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'Service enheden blev ændret.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'Service enheden blev Oprettet.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'Service enheden blev Slettet.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'Service Enheden blev rullet tilbage til en tidligere version.', - - '__THE_USER_WAS_CHANGED__' => 'Brugeren Blev Ændret.', - '__THE_USER_WAS_CREATED__' => 'Brugeren Blev Oprettet.', - '__THE_USER_WAS_DELETED__' => 'Brugeren Blev Slettet.', - '__THE_USER_WAS_ROLLED_BACK__' => 'Brugeren Blev Ruller Tilbage Til En Tidligere Version.', - - '__BY__' => 'fra', - '__FOR__' => 'til' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'blev ændret fra', - 'to' => 'Til', - 'was_changed' => 'blev ændret', - 'was_added_as' => 'blev tilføjet som', - 'was_deleted' => 'Blev Slettet', - 'was_published' => 'Mødet Blev Udhivet', - 'was_unpublished' => 'Mødet Blev Ikke Udgivet', - 'formats_prompt' => 'Møde Strukturen', - 'duration_time' => 'Møde varigheden', - 'start_time' => 'Mødetidspunktet', - 'longitude' => 'Mødets Længdegrad', - 'latitude' => 'Mødets Højdegrad', - 'sb_prompt' => 'Mødet ændrede sin service enhed fra', - 'id_bigint' => 'Møde ID', - 'lang_enum' => 'Møde sproget', - 'worldid_mixed' => 'Den delte gruppe ID', // TODO: translate The World Committee Code - 'weekday_tinyint' => 'Den dag i ugen, hvor mødet holdes', - 'non_existent_service_body' => 'Service enheden findes ikke længere', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/en/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/en/data_transfer_strings.php deleted file mode 100755 index 624c60e08..000000000 --- a/src/legacy/local_server/server_admin/lang/en/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/en/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/en/install_wizard_strings.php deleted file mode 100755 index 787540565..000000000 --- a/src/legacy/local_server/server_admin/lang/en/install_wizard_strings.php +++ /dev/null @@ -1,164 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_Type_MySQL_Error' => 'ERROR: Even though you have PDO and you have database drivers installed, none of the are MySQL (the only supported driver)!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_GenericError' => 'There is an error connecting to the database. Please check your database settings.', - 'NoDatabase_Note_ClickHere' => 'Click here to go back to the database set up page.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoDatabase_Note_ServerSettings_ClickHere' => 'Click here to go back to the server settings page.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Maps_API_Key_Valid' => 'Google Maps API Key is valid.', - 'Maps_API_Key_ClickHere' => 'Click here to go back to the Google Maps API Key set up page.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API Settings', - 'Page_2_Heading' => 'Google Maps API Settings', - 'Page_2_API_Key_Prompt' => 'Enter the Google API Key for Geocoding:', - 'Page_2_API_Key_Set_Button' => 'TEST KEY', - 'Page_2_API_Key_Not_Set_Prompt' => 'SET API KEY FIRST', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => ' The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DefaultClosedStatus' => 'Meetings Are Considerd "CLOSED" by Default:', - 'DefaultClosedStatusExtraText' => 'This primarily affects the export to NAWS.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'SemanticAdminLabel' => 'Enable Semantic Administration:', - 'SemanticAdminExtraText' => 'If not checked, then all administration must be done via the Root Server login (No apps).', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - 'EmailContactAdminEnableLabel' => 'Include Service Body Administrator On These Emails:', - 'EmailContactAdminEnableExtraText' => 'Sends copies of these emails to the Service Body Administrator (if they are not the primary recipient).', - 'EmailContactAllAdminEnableLabel' => 'Include All Service Body Administrators On These Emails:', - 'EmailContactAllAdminEnableExtraText' => 'Sends copies of these emails to all of the relevant Service Body Administrators.', - - 'Page_4_Initialize_Root_Server_Heading' => 'Initialize the Root Server', - 'Page_4_Initialize_Root_Server_Text' => 'The button below will initialize the Root Server with an empty database and a Server Administrator user.', - 'Page_4_Initialize_Root_Server_Button' => 'Initialize Root Server', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Export Spreadsheet (Optional): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - 'Explanatory_Text_2_API_key_Intro' => 'The "API Key" is a key that you need to register with Google in order to be able to use their mapping service.', - 'Explanatory_Text_2_API_key_2_Intro' => 'You will need to provide a valid API Key in order to create new meetings in the Root Server.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/en/name.txt b/src/legacy/local_server/server_admin/lang/en/name.txt deleted file mode 100755 index 3d38949de..000000000 --- a/src/legacy/local_server/server_admin/lang/en/name.txt +++ /dev/null @@ -1 +0,0 @@ -English \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/en/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/en/server_admin_strings.inc.php deleted file mode 100755 index bdc1f66f0..000000000 --- a/src/legacy/local_server/server_admin/lang/en/server_admin_strings.inc.php +++ /dev/null @@ -1,494 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet:', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet: ', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'My Account', - 'account_name_label' => 'My Account Name:', - 'account_login_label' => 'My Login:', - 'account_type_label' => 'I Am A:', - 'account_type_1' => 'Server Administrator', - 'account_type_2' => 'Service Body Administrator', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Service Body Observer', - 'change_password_label' => 'Change My Password To:', - 'change_password_default_text' => 'Leave This Alone If You Don\'t Want To Change Your Password', - 'account_email_label' => 'My Email Address:', - 'email_address_default_text' => 'Enter An Email Address', - 'account_description_label' => 'My Description:', - 'account_description_default_text' => 'Enter A Description', - 'account_change_button_text' => 'Change My Account Settings', - 'account_change_fader_success_text' => 'The Account Information Was Successfully Changed', - 'account_change_fader_failure_text' => 'The Account Information Was Not Changed', - 'meeting_editor_disclosure' => 'Meeting Editor', - 'meeting_editor_already_editing_confirm' => 'You are currently editing another meeting. Do you want to lose all changes in that meeting?', - 'meeting_change_fader_success_text' => 'The Meeting Was Successfully Changed', - 'meeting_change_fader_failure_text' => 'The Meeting Was Not Changed', - 'meeting_change_fader_success_delete_text' => 'The Meeting Was Successfully Deleted', - 'meeting_change_fader_fail_delete_text' => 'The Meeting Was Not Deleted', - 'meeting_change_fader_success_add_text' => 'The New Meeting Was Successfully Added', - 'meeting_change_fader_fail_add_text' => 'The New Meeting Was Not Added', - 'meeting_text_input_label' => 'Search For Text:', - 'access_service_body_label' => 'I Have Access to:', - 'meeting_text_input_default_text' => 'Enter Some Search Text', - 'meeting_text_location_label' => 'This is a Location or PostCode', - 'meeting_search_weekdays_label' => 'Search For Selected Weekdays:', - 'meeting_search_weekdays_names' => array('All', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), - 'meeting_search_service_bodies_label' => 'Search In Selected Service Bodies:', - 'meeting_search_start_time_label' => 'Search By Meeting Start Time:', - 'meeting_search_start_time_all_label' => 'Any Time', - 'meeting_search_start_time_morn_label' => 'Morning', - 'meeting_search_start_time_aft_label' => 'Afternoon', - 'meeting_search_start_time_eve_label' => 'Evening', - 'meeting_search_no_results_text' => 'No Meetings Found', - 'meeting_editor_tab_specifier_text' => 'Search For Meetings', - 'meeting_editor_tab_editor_text' => 'Edit Or Create Meetings', - 'meeting_editor_create_new_text' => 'Create A New Meeting', - 'meeting_editor_location_map_link' => 'Location Map', - 'meeting_editor_screen_match_ll_button' => 'Set Longitude and Latitude to Address', - 'meeting_editor_screen_default_text_prompt' => 'Enter Some Text or a Number', - 'meeting_is_published' => 'Meeting is Published', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Meeting Name:', - 'meeting_editor_screen_meeting_name_prompt' => 'Enter A Meeting Name', - 'meeting_editor_screen_meeting_weekday_label' => 'Weekday:', - 'meeting_editor_screen_meeting_start_label' => 'Meeting Start Time:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Noon', - 'meeting_editor_screen_meeting_midnight_label' => 'Midnight', - 'meeting_editor_screen_meeting_duration_label' => 'Duration:', - 'meeting_editor_screen_meeting_oe_label' => 'Open-Ended', - 'meeting_editor_screen_meeting_cc_label' => 'World Committee Code:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', - 'meeting_editor_screen_meeting_contact_label' => 'Meeting Email Contact:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Enter An Email for A Contact Specific Only to This Meeting', - 'meeting_editor_screen_meeting_sb_label' => 'Service Body:', - 'meeting_editor_screen_meeting_sb_default_value' => 'No Service Body Selected', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Enter A Longitude', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitude:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Enter A Latitude', - 'meeting_editor_screen_meeting_location_label' => 'Location:', - 'meeting_editor_screen_meeting_location_prompt' => 'Enter A Location Name (Like a Building Name)', - 'meeting_editor_screen_meeting_info_label' => 'Extra Info:', - 'meeting_editor_screen_meeting_info_prompt' => 'Enter Any Additional Location Information', - 'meeting_editor_screen_meeting_street_label' => 'Street Address:', - 'meeting_editor_screen_meeting_street_prompt' => 'Enter A Street Address', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Neighborhood:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Enter A Neighborhood (Not Borough or City Subsection)', - 'meeting_editor_screen_meeting_borough_label' => 'Borough/City Subsection:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Enter A Borough or City Subsection (Not Neighborhood)', - 'meeting_editor_screen_meeting_city_label' => 'City/Town:', - 'meeting_editor_screen_meeting_city_prompt' => 'Enter A City or Town Name (Not County or Borough)', - 'meeting_editor_screen_meeting_county_label' => 'County/Sub-Province:', - 'meeting_editor_screen_meeting_county_prompt' => 'Enter A County or Sub-Province Name', - 'meeting_editor_screen_meeting_state_label' => 'State/Province:', - 'meeting_editor_screen_meeting_state_prompt' => 'Enter A State or Province Name', - 'meeting_editor_screen_meeting_zip_label' => 'Zip Code/Postal Code:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Enter A Postal Code', - 'meeting_editor_screen_meeting_nation_label' => 'Nation:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Enter The Nation Name', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_format_radio_not_selected' => 'You must select one format from the group ${radioDescription}.', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Look For:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Published Meetings Only', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Unpublished Meetings Only', - 'meeting_editor_screen_meeting_visibility_advice' => 'This is never displayed in normal meeting searches.', - 'meeting_editor_screen_meeting_publish_search_all' => 'All Meetings', - 'meeting_editor_screen_meeting_create_button' => 'Create A New Meeting', - 'meeting_editor_screen_delete_button' => 'Delete This Meeting', - 'meeting_editor_screen_delete_button_confirm' => 'Are you sure that you want to delete this meeting?', - 'meeting_editor_screen_cancel_button' => 'Cancel', - 'logout' => 'Sign Out', - 'meeting_editor_screen_cancel_confirm' => 'Are you sure that you want to cancel editing this meeting, and lose all changes?', - 'meeting_lookup_failed' => 'The address lookup failed.', - 'meeting_lookup_failed_not_enough_address_info' => 'There is not enough valid address information to do a lookup.', - 'meeting_create_button_name' => 'Save This As A New Meeting', - 'meeting_saved_as_a_copy' => 'Save This Meeting As A Copy (Creates A New Meeting)', - 'meeting_save_buttonName' => 'Save the Changes to This Meeting', - 'meeting_editor_tab_bar_basic_tab_text' => 'Basic', - 'meeting_editor_tab_bar_location_tab_text' => 'Location', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Other', - 'meeting_editor_tab_bar_history_tab_text' => 'History', - 'meeting_editor_result_count_format' => '%d Meetings Found', - 'meeting_id_label' => 'Meeting ID:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administration Console', - 'login' => 'Login ID', - 'password' => 'Password', - 'button' => 'Log In', - 'cookie' => 'You must enable cookies in order to administer this server.', - 'noscript' => 'You cannot administer this site without JavaScript.', - 'title' => 'Please log in to administer the server.', - 'edit_Meeting_object_not_found' => 'ERROR: The meeting was not found.', - 'edit_Meeting_object_not_changed' => 'ERROR: The meeting was not changed.', - 'edit_Meeting_auth_failure' => 'You are not authorized to edit this meeting.', - 'not_auth_1' => 'NOT AUTHORIZED', - 'not_auth_2' => 'You are not authorized to administer this server.', - 'not_auth_3' => 'There was a problem with the user name or password that you entered.', - 'email_format_bad' => 'The email address that you entered was not formatted correctly.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

No History Available For This Meeting

', - 'service_body_editor_disclosure' => 'Service Body Administration', - 'service_body_change_fader_success_text' => 'The Service Body Was Successfully Changed', - 'service_body_change_fader_fail_text' => 'The Service Body Change Failed', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Name:', - 'service_body_name_default_prompt_text' => 'Enter the Name of This Service Body', - 'service_body_parent_popup_label' => 'Service Body Parent:', - 'service_body_parent_popup_no_parent_option' => 'No Parent (Top-Level)', - 'service_body_editor_screen_sb_admin_user_label' => 'Primary Admin:', - 'service_body_editor_screen_sb_admin_description_label' => 'Description:', - 'service_body_description_default_prompt_text' => 'Enter A Description of This Service Body', - 'service_body_editor_screen_sb_admin_email_label' => 'Contact Email:', - 'service_body_email_default_prompt_text' => 'Enter A Contact Email Address for This Service Body', - 'service_body_editor_screen_sb_admin_uri_label' => 'Web Site URL:', - 'service_body_uri_default_prompt_text' => 'Enter A Web Site URL for This Service Body', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Full Meeting List Editors:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'These Users Can Edit Any Meetings In This Service Body.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Basic Meeting List Editors:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'These Users Can Edit Any Meetings In This Service Body, But Only If They Are Unpublished.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observers:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'These Users Can See Hidden Info (Like Email Addresses), But Cannot Edit Anything.', - 'service_body_dirty_confirm_text' => 'You have made changes to this Service Body. Do you want to lose your changes?', - 'service_body_save_button' => 'Save These Service Body Changes', - 'service_body_create_button' => 'Create This Service Body', - 'service_body_delete_button' => 'Delete This Service Body', - 'service_body_delete_perm_checkbox' => 'Delete This Service Body Permanently', - 'service_body_delete_button_confirm' => 'Are you sure that you want to delete this Service body? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'This Service body will be deleted permanently!', - 'service_body_change_fader_create_success_text' => 'The Service Body Was Successfully Created', - 'service_body_change_fader_create_fail_text' => 'The Service Body Create Failed', - 'service_body_change_fader_delete_success_text' => 'The Service Body Was Successfully Deleted', - 'service_body_change_fader_delete_fail_text' => 'The Service Body Delete Failed', - 'service_body_change_fader_fail_no_data_text' => 'The Service Body Change Failed, Because There Was No Data Supplied', - 'service_body_change_fader_fail_cant_find_sb_text' => 'The Service Body Change Failed, Because The Service Body Was Not Found', - 'service_body_change_fader_fail_cant_update_text' => 'The Service Body Change Failed, Because The Service Body Was Not Updated', - 'service_body_change_fader_fail_bad_hierarchy' => 'The Service Body Change Failed, Because The Selected Owner Service Body Is Under This Service Body, And Cannot Be Used', - 'service_body_cancel_button' => 'Restore To Original', - 'service_body_editor_type_label' => 'Service Body Type:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Group', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Area Service Committee', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Regional Service Conference', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'World Service Conference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zonal Forum', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Enter The Helpline Telephone Number', - 'service_body_editor_uri_naws_format_text' => 'Get The Meetings For This Service Body As A NAWS-Compatible File', - 'edit_Meeting_meeting_id' => 'Meeting ID:', - 'service_body_editor_create_new_sb_option' => 'Create A New Service Body', - 'service_body_editor_screen_world_cc_label' => 'World Committee Code:', - 'service_body_editor_screen_world_cc_prompt' => 'Enter A World Committee Code', - 'user_editor_disclosure' => 'User Administration', - 'user_editor_create_new_user_option' => 'Create A New User', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'User Login:', - 'user_editor_login_default_text' => 'Enter the User Login', - 'user_editor_account_type_label' => 'User Is A:', - 'user_editor_user_owner_label' => 'Owned By: ', - 'user_editor_account_type_1' => 'Server Administrator', - 'user_editor_account_type_2' => 'Service Body Administrator', - 'user_editor_account_type_3' => 'Service Body Editor', - 'user_editor_account_type_5' => 'Service Body Observer', - 'user_editor_account_type_4' => 'Disabled User', - 'user_editor_account_name_label' => 'User Name:', - 'user_editor_name_default_text' => 'Enter the User Name', - 'user_editor_account_description_label' => 'Description:', - 'user_editor_description_default_text' => 'Enter the User Description', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'Enter the User Email', - 'user_change_fader_success_text' => 'The User Was Successfully Changed', - 'user_change_fader_fail_text' => 'The User Change Failed', - 'user_change_fader_create_success_text' => 'The User Was Successfully Created', - 'user_change_fader_create_fail_text' => 'The User Create Failed', - 'user_change_fader_create_fail_already_exists' => 'A Login For The User That You Are Trying To Create Already Exists.', - 'user_change_fader_delete_success_text' => 'The User Was Successfully Deleted', - 'user_change_fader_delete_fail_text' => 'The User Delete Failed', - 'user_save_button' => 'Save the Changes to This User', - 'user_create_button' => 'Create This New User', - 'user_cancel_button' => 'Restore To Original', - 'user_delete_button' => 'Delete This User', - 'user_delete_perm_checkbox' => 'Delete This User Permanently', - 'user_password_label' => 'Change Password To:', - 'user_new_password_label' => 'Set Password To:', - 'user_password_default_text' => 'Leave This Alone, Unless You Want To Change The Password', - 'user_new_password_default_text' => 'You Must Enter A Password For A new User', - 'user_dirty_confirm_text' => 'You have made changes to this User. Do you want to lose your changes?', - 'user_delete_button_confirm' => 'Are you sure that you want to delete this user?', - 'user_delete_button_confirm_perm' => 'This user will be deleted permanently!', - 'user_create_password_alert_text' => 'New users must have a password. You have not supplied a password for this user.', - 'user_change_fader_fail_no_data_text' => 'The User Change Failed, Because There Was No Data Supplied', - 'user_change_fader_fail_cant_find_sb_text' => 'The User Change Failed, Because The User Was Not Found', - 'user_change_fader_fail_cant_update_text' => 'The User Change Failed, Because The User Was Not Updated', - 'format_editor_disclosure' => 'Format Administration', - 'format_change_fader_change_success_text' => 'The Format Was Successfully Changed', - 'format_change_fader_change_fail_text' => 'The Format Change Failed', - 'format_change_fader_create_success_text' => 'The Format Was Successfully Created', - 'format_change_fader_create_fail_text' => 'The Format Create Failed', - 'format_change_fader_delete_success_text' => 'The Format Was Successfully Deleted', - 'format_change_fader_delete_fail_text' => 'The Format Delete Failed', - 'format_change_fader_fail_no_data_text' => 'The Format Change Failed, Because There Was No Data Supplied', - 'format_change_fader_fail_cant_find_sb_text' => 'The Format Change Failed, Because The Format Was Not Found', - 'format_change_fader_fail_cant_update_text' => 'The Format Change Failed, Because The Format Was Not Updated', - 'format_editor_name_default_text' => 'Enter A Very Short Description', - 'format_editor_description_default_text' => 'Enter A More Detailed Description', - 'format_editor_create_format_button_text' => 'Create New Format', - 'format_editor_cancel_create_format_button_text' => 'Cancel', - 'format_editor_create_this_format_button_text' => 'Create This Format', - 'format_editor_change_format_button_text' => 'Change This Format', - 'format_editor_delete_format_button_text' => 'Delete This Format', - 'format_editor_reset_format_button_text' => 'Restore To Original', - 'need_refresh_message_fader_text' => 'You Should Refresh This Page Before Using This Section', - 'need_refresh_message_alert_text' => 'Because you have made changes in the Server Administration, Service Body Administration, User Administration, or Format Administration, the information displayed in this section may no longer be accurate, so the page needs to be refreshed. The easiest way to do this, is to Sign Out, then Log In again.', - 'format_editor_delete_button_confirm' => 'Are you sure that you want to delete this format?', - 'format_editor_delete_button_confirm_perm' => 'This format will be deleted permanently!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', - 'min_password_length_string' => 'The password is too short! It must be at least %d characters long!', - 'AJAX_Auth_Failure' => 'Authorization failed for this operation. There may be a problem with the server configuration.', - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Cannot Display Data -Unauthorized', - 'Value_Prompts' => array( - 'id_bigint' => 'Meeting ID', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Service Body', - 'service_bodies' => 'Service Bodies', - 'weekdays' => 'Weekdays', - 'weekday' => 'Meeting Gathers Every', - 'start_time' => 'Meeting Starts at', - 'duration_time' => 'Meeting Lasts', - 'location' => 'Location', - 'duration_time_hour' => 'Hour', - 'duration_time_hours' => 'Hours', - 'duration_time_minute' => 'Minute', - 'duration_time_minutes' => 'Minutes', - 'lang_enum' => 'Language', - 'formats' => 'Formats', - 'distance' => 'Distance from Center', - 'generic' => 'NA Meeting', - 'close_title' => 'Close This Meeting Detail Window', - 'close_text' => 'Close Window', - 'map_alt' => 'Map to Meeting', - 'map' => 'Follow This Link for A Map', - 'title_checkbox_unpub_meeting' => 'This meeting is unpublished. It cannot be seen by regular searches.', - 'title_checkbox_copy_meeting' => 'This meeting is a duplicate of another meeting. It is also unpublished. It cannot be seen by regular searches.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'None', - 'OPEN' => 'Open', - 'CLOSED' => 'Closed', - 'WCHR' => 'Wheelchair-Accessible', - 'BEG' => 'Beginner/Newcomer', - 'BT' => 'Basic Text', - 'CAN' => 'Candlelight', - 'CPT' => '12 Concepts', - 'CW' => 'Children Welcome', - 'DISC' => 'Discussion/Participation', - 'GL' => 'Gay/Lesbian', - 'IP' => 'IP Study', - 'IW' => 'It Works Study', - 'JFT' => 'Just For Today Study', - 'LC' => 'Living Clean', - 'LIT' => 'Literature Study', - 'M' => 'Men', - 'MED' => 'Meditation', - 'NS' => 'Non-Smoking', - 'QA' => 'Questions & Answers', - 'RA' => 'Restricted Access', - 'S-D' => 'Speaker/Discussion', - 'SMOK' => 'Smoking', - 'SPK' => 'Speaker', - 'STEP' => 'Step', - 'SWG' => 'Step Working Guide Study', - 'TOP' => 'Topic', - 'TRAD' => 'Tradition', - 'VAR' => 'Format Varies', - 'W' => 'Women', - 'Y' => 'Young People', - 'LANG' => 'Alternate Language', - 'GP' => 'Guiding Principles', - 'NC' => 'No Children', - 'CH' => 'Closed Holidays', - 'VM' => 'Virtual', - 'HYBR' => 'Virtual and In-Person', - 'TC' => 'Temporarily Closed Facility', - 'SPAD' => 'Spiritual Principle a Day', - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'None', - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', - 'O' => 'Attendance by non-addicts (Open, Closed)', - 'LANG' => 'Language', - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)', - ), - 'unknown_format_type' => 'Format Type: ', - 'other_or_empty_format_type' => 'Other or empty format type', - 'cookie_monster' => 'This site uses a cookie to store your preferred language.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Time', - 'duration_time' => 'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formats', - 'lang_enum' => 'Language', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Published', - 'email_contact' => 'Email Contact', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'The meeting was changed.', - '__THE_MEETING_WAS_CREATED__' => 'The meeting was created.', - '__THE_MEETING_WAS_DELETED__' => 'The meeting was deleted.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'The meeting was rolled back to a previous version.', - - '__THE_FORMAT_WAS_CHANGED__' => 'The format was changed.', - '__THE_FORMAT_WAS_CREATED__' => 'The format was created.', - '__THE_FORMAT_WAS_DELETED__' => 'The format was deleted.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'The format was rolled back to a previous version.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'The service body was changed.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'The service body was created.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'The service body was deleted.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'The service body was rolled back to a previous version.', - - '__THE_USER_WAS_CHANGED__' => 'The user was changed.', - '__THE_USER_WAS_CREATED__' => 'The user was created.', - '__THE_USER_WAS_DELETED__' => 'The user was deleted.', - '__THE_USER_WAS_ROLLED_BACK__' => 'The user was rolled back to a previous version.', - - '__BY__' => 'by', - '__FOR__' => 'for' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'was changed from', - 'to' => 'to', - 'was_changed' => 'was changed', - 'was_added_as' => 'was added as', - 'was_deleted' => 'was deleted', - 'was_published' => 'The meeting was published', - 'was_unpublished' => 'The meeting was unpublished', - 'formats_prompt' => 'The meeting format', - 'duration_time' => 'The meeting duration', - 'start_time' => 'The meeting start time', - 'longitude' => 'The meeting longitude', - 'latitude' => 'The meeting latitude', - 'sb_prompt' => 'The meeting changed its Service Body from', - 'id_bigint' => 'The meeting ID', - 'lang_enum' => 'The meeting language', - 'worldid_mixed' => 'The World Committee Code', - 'weekday_tinyint' => 'The day of the week on which the meeting gathers', - 'non_existent_service_body' => 'Service Body No Longer Exists', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/es/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/es/data_transfer_strings.php deleted file mode 100755 index 6fa2303ec..000000000 --- a/src/legacy/local_server/server_admin/lang/es/data_transfer_strings.php +++ /dev/null @@ -1,22 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array (); diff --git a/src/legacy/local_server/server_admin/lang/es/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/es/install_wizard_strings.php deleted file mode 100755 index 6f2840948..000000000 --- a/src/legacy/local_server/server_admin/lang/es/install_wizard_strings.php +++ /dev/null @@ -1,139 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API', - 'Page_2_Heading' => 'Set The Initial Location For Meetings', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => 'The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - - ); diff --git a/src/legacy/local_server/server_admin/lang/es/name.txt b/src/legacy/local_server/server_admin/lang/es/name.txt deleted file mode 100755 index d236fc3b6..000000000 --- a/src/legacy/local_server/server_admin/lang/es/name.txt +++ /dev/null @@ -1 +0,0 @@ -Español \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/es/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/es/server_admin_strings.inc.php deleted file mode 100755 index 0787e82af..000000000 --- a/src/legacy/local_server/server_admin/lang/es/server_admin_strings.inc.php +++ /dev/null @@ -1,489 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array('server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Mi cuenta', - 'account_name_label' => 'Nombre de cuenta:', - 'account_login_label' => 'Mi nombre de usuario:', - 'account_type_label' => 'Soy:', - 'account_type_1' => 'Administrador de servidor', - 'account_type_2' => 'Administrador de cuerpo de servicio', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Observador de cuerpo de servicio', - 'change_password_label' => 'Cambiar mi contraseña para:', - 'change_password_default_text' => 'Deja eso si usted no desea cambiar su contraseña', - 'account_email_label' => 'Mi dirección de correo electrónico:', - 'email_address_default_text' => 'Introduzca una dirección de correo', - 'account_description_label' => 'Mi descripción:', - 'account_description_default_text' => 'Escriba una descripción', - 'account_change_button_text' => 'Cambiar configuración de mi cuenta', - 'account_change_fader_success_text' => 'La información de la cuenta se cambió con éxito', - 'account_change_fader_failure_text' => 'La información de la cuenta no se ha modificado', - 'meeting_editor_disclosure' => 'Editor de reuniones', - 'meeting_editor_already_editing_confirm' => 'En este momento está editando una nueva reunión. ¿Quieres perder todos los cambios en esa reunión?', - 'meeting_change_fader_success_text' => 'La reunión se cambió con éxito', - 'meeting_change_fader_failure_text' => 'La reunión no se ha modificado', - 'meeting_change_fader_success_delete_text' => 'La reunión se ha eliminado correctamente', - 'meeting_change_fader_fail_delete_text' => 'La reunión no se ha eliminado', - 'meeting_change_fader_success_add_text' => 'La nueva reunión se agregó con exito', - 'meeting_change_fader_fail_add_text' => 'La nueva reunión no fue añadida', - 'meeting_text_input_label' => 'Buscar texto:', - 'access_service_body_label' => 'Tengo acceso a:', - 'meeting_text_input_default_text' => 'Introduzca algun texto de búsqueda', - 'meeting_text_location_label' => 'Se trata de una localidad o código postal', - 'meeting_search_weekdays_label' => 'Búsqueda para los días laborables seleccionados:', - 'meeting_search_weekdays_names' => array('Todos', 'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'), - 'meeting_search_service_bodies_label' => 'Buscar en los cuerpos de servicio seleccionados:', - 'meeting_search_start_time_label' => 'Buscar reuniónes por hora de inicio:', - 'meeting_search_start_time_all_label' => 'Cualquier horario', - 'meeting_search_start_time_morn_label' => 'Por la mañana', - 'meeting_search_start_time_aft_label' => 'Por la tarde', - 'meeting_search_start_time_eve_label' => 'Por la noche', - 'meeting_search_no_results_text' => 'No hay reuniones encontradas', - 'meeting_editor_tab_specifier_text' => 'Buscar por reuniones', - 'meeting_editor_tab_editor_text' => 'Editar reuniones', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Crear una nueva reunión', - 'meeting_editor_location_map_link' => 'Mapa de localización', - 'meeting_editor_screen_match_ll_button' => 'Establezca longitud y la latitud a dirección', - 'meeting_editor_screen_default_text_prompt' => 'Escriba un texto o un número', - 'meeting_is_published' => 'Reunión es publicado', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Nombre de la reunión:', - 'meeting_editor_screen_meeting_name_prompt' => 'Introduzca un nombre de reunión', - 'meeting_editor_screen_meeting_weekday_label' => 'Día de semana:', - 'meeting_editor_screen_meeting_start_label' => 'Hora de inicio de reunion:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Mediodía', - 'meeting_editor_screen_meeting_midnight_label' => 'Medianoche', - 'meeting_editor_screen_meeting_duration_label' => 'Duración:', - 'meeting_editor_screen_meeting_oe_label' => 'De composición abierta', - 'meeting_editor_screen_meeting_cc_label' => 'Código Comité Mundial:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Contacto correo electonico de reunion:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Escriba un correo electrónico de un contacto específico sólo a esta reunión', - 'meeting_editor_screen_meeting_sb_label' => 'Cuerpo de Servicio:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Ningún cuerpo de servicio seleccionado', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitud:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Escriba una Longitud', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitud:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Introduzca Un Latitud', - 'meeting_editor_screen_meeting_location_label' => 'Ubicación:', - 'meeting_editor_screen_meeting_location_prompt' => 'Introduzca un Nombre de ubicación (como un nombre del edificio)', - 'meeting_editor_screen_meeting_info_label' => 'Información complementaria:', - 'meeting_editor_screen_meeting_info_prompt' => 'Introduzca cualquier información adicional sobre la ubicación', - 'meeting_editor_screen_meeting_street_label' => 'Dirección:', - 'meeting_editor_screen_meeting_street_prompt' => 'Introduzca una Dirección', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Barrio:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Introduzca un Barrio (No municipio o ciudad subsección)', - 'meeting_editor_screen_meeting_borough_label' => 'Municipio/Ciudad Subsección:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Ingresa una ciudad o ciudad subsección (No Barrio)', - 'meeting_editor_screen_meeting_city_label' => 'Ciudad/Pueblo:', - 'meeting_editor_screen_meeting_city_prompt' => 'Ingresa la ciudad o nombre del pueblo (no condado o municipal)', - 'meeting_editor_screen_meeting_county_label' => 'Condado/Sub-Provincia:', - 'meeting_editor_screen_meeting_county_prompt' => 'Introduzca un condado o nombre Sub-Provincia', - 'meeting_editor_screen_meeting_state_label' => 'Estado/Provincia:', - 'meeting_editor_screen_meeting_state_prompt' => 'Entrar un nombre de estado o provincia', - 'meeting_editor_screen_meeting_zip_label' => 'Código Postal:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Ingrese un Código Postal', - 'meeting_editor_screen_meeting_nation_label' => 'Nación:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Introduzca el nombre de la nación', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Buscar:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Solo Reuniones Publicado', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Solo Reuniones inéditas', - 'meeting_editor_screen_meeting_visibility_advice' => 'Esto nunca se muestra en las búsquedas normales de reuniones.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Todas las reuniones', - 'meeting_editor_screen_meeting_create_button' => 'Crear una nueva reunión', - 'meeting_editor_screen_delete_button' => 'Eliminar esta Reunión', - 'meeting_editor_screen_delete_button_confirm' => '¿Está seguro de que desea eliminar esta reunión?', - 'meeting_editor_screen_cancel_button' => 'Cancelar', - 'logout' => 'Salir', - 'meeting_editor_screen_cancel_confirm' => '¿Está seguro de que desea cancelar la edición de este encuentro y perder todos los cambios?', - 'meeting_lookup_failed' => 'La búsqueda de direcciones falló.', - 'meeting_lookup_failed_not_enough_address_info' => 'No hay suficiente información sobre la dirección válida para realizar una búsqueda.', - 'meeting_create_button_name' => 'Salva esto como una nueva reunión', - 'meeting_saved_as_a_copy' => 'Guardar esta reunión como una copia (Crea una nueva reunión)', - 'meeting_save_buttonName' => 'Guarde los cambios a esta reunión', - 'meeting_editor_tab_bar_basic_tab_text' => 'Básico', - 'meeting_editor_tab_bar_location_tab_text' => 'Ubicación', - 'meeting_editor_tab_bar_format_tab_text' => 'Formato', - 'meeting_editor_tab_bar_other_tab_text' => 'Otro', - 'meeting_editor_tab_bar_history_tab_text' => 'Historia', - 'meeting_editor_result_count_format' => '%d Reuniones Encontrados', - 'meeting_id_label' => 'ID de la reunión:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Reuniones básica Listado de herramientas', - 'login_underbanner' => 'Raíz de la consola de administración del servid', - 'login' => 'Nombre de usuario ID', - 'password' => 'Contraseña', - 'button' => 'Acceder', - 'cookie' => 'Debe habilitar las cookies para poder administrar este servidor.', - 'noscript' => 'No se puede administrar este sitio sin JavaScript.', - 'title' => 'Por favor, inicie sesión para administrar el servidor.', - 'edit_Meeting_object_not_found' => 'ERROR: No se encontró la reunión.', - 'edit_Meeting_object_not_changed' => 'ERROR: La reunión no fue cambiada.', - 'edit_Meeting_auth_failure' => 'No tiene permisos para editar esta reunión.', - 'not_auth_1' => 'NO AUTORIZADO', - 'not_auth_2' => 'You are not authorized to administer this server.', - 'not_auth_3' => 'Había un problema con el nombre de usuario o la contraseña que ha introducido.', - 'email_format_bad' => 'La dirección de correo electrónico que has introducido no se ha formateado correctamente.', - 'history_header_format' => '
%spor %s
', - 'history_no_history_available_text' => '

No historia disponible para esta reunión

', - 'service_body_editor_disclosure' => 'Órgano de Administración del Servicio', - 'service_body_change_fader_success_text' => 'El organismo de servicio se cambió con éxito.', - 'service_body_change_fader_fail_text' => 'El cambio del cuerpo de servicio Error.', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Nombre:', - 'service_body_name_default_prompt_text' => 'Introduzca el nombre de este organismo de servicio', - 'service_body_parent_popup_label' => 'Padres de cuerpo de servicio:', - 'service_body_parent_popup_no_parent_option' => 'Ningún padre (de nivel superior)', - 'service_body_editor_screen_sb_admin_user_label' => 'Administrador Principal:', - 'service_body_editor_screen_sb_admin_description_label' => 'Descripción:', - 'service_body_description_default_prompt_text' => 'Enter A Description of This Service Body', - 'service_body_editor_screen_sb_admin_email_label' => 'Dirección electrónica de contacto:', - 'service_body_email_default_prompt_text' => 'Introduzca una dirección electrónica de contacto para este organismo de servicio', - 'service_body_editor_screen_sb_admin_uri_label' => 'URL del sitio web:', - 'service_body_uri_default_prompt_text' => 'Ingrese una URL del sitio web para este organismo de servicio', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Editores de reuniones listas completa:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Estos usuarios pueden editar cualquier reuniones dentro este cuerpo de servicio.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Editores de reuniones basico de la lista:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Estos usuarios pueden editar cualquier Reuniones dentro Este cuerpo de servicio, pero sólo si las reuniones son sin publicar.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observadores:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Estos usuarios pueden ver los oculta información (como direcciones de correo electrónico), pero no se puede editar cualquier cosa.', - 'service_body_dirty_confirm_text' => 'Ha realizado cambios a este organismo de servicio. ¿Quieres perder los cambios?', - 'service_body_save_button' => 'Guardar estos cambios al cuerpo de servicio', - 'service_body_create_button' => 'Crear este cuerpo de servicio', - 'service_body_delete_button' => 'Eliminar este cuerpo de servicio', - 'service_body_delete_perm_checkbox' => 'Eliminar este cuerpo de servicio en forma permanente', - 'service_body_delete_button_confirm' => '¿Estas seguro que quieres eliminar este cuerpo de servicio? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'Este cuerpo de servicio será borrada para siempre!', - 'service_body_change_fader_create_success_text' => 'El cuerpo de servicio se creó correctamente', - 'service_body_change_fader_create_fail_text' => 'El Cuerpo de servicios creada no se cumplio', - 'service_body_change_fader_delete_success_text' => 'El cuerpo de servicio se ha eliminado correctamente', - 'service_body_change_fader_delete_fail_text' => 'No se cumplio eliminar el cuerpo de servicio', - 'service_body_change_fader_fail_no_data_text' => 'El cambio del cuerpo de servicio Error, porque no había aportado datos', - 'service_body_change_fader_fail_cant_find_sb_text' => 'El cambio del cuerpo de servicio Error, porque el cuerpo de servicio no se encontró', - 'service_body_change_fader_fail_cant_update_text' => 'The Service Body Change Failed, Because The Service Body Was Not Updated', - 'service_body_change_fader_fail_bad_hierarchy' => 'El cambio del cuerpo de servicio Error, ya que el seleccionado propietario de cuerpo de servicio está bajo este cuerpo de servicio, y no puede ser usad', - 'service_body_cancel_button' => 'Restaurar a original', - 'service_body_editor_type_label' => 'Tipo de cuerpo servicio:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Grupo', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Comité de Servicio de Área', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Conferencia de Servicio Regional', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'World Service Conference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Foro Zonal', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Enter The Helpline Telephone Number', - 'service_body_editor_uri_naws_format_text' => 'Obtener las reuniones de este órgano de servicio como un archivo NAWS-Compatible', - 'edit_Meeting_meeting_id' => 'ID de la reunión:', - 'service_body_editor_create_new_sb_option' => 'Crear un cuerpo nuevo de servicio', - 'service_body_editor_screen_world_cc_label' => 'Código Mundial de Comité:', - 'service_body_editor_screen_world_cc_prompt' => 'Introduzca un código de Comité Mundial', - 'user_editor_disclosure' => 'Administración de usuarios', - 'user_editor_create_new_user_option' => 'Crear un nuevo usuario', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Registro de usuarios:', - 'user_editor_login_default_text' => 'Introduzca el nombre de usuario', - 'user_editor_account_type_label' => 'User Is A:', - 'user_editor_user_owner_label' => 'Controlado Por: ', - 'user_editor_account_type_1' => 'Administrador de Servicio', - 'user_editor_account_type_2' => 'Administrador de cuerpo de servicior', - 'user_editor_account_type_3' => 'Editor cuerpo de servicio', - 'user_editor_account_type_5' => 'Observadores de cuerpo de servicio', - 'user_editor_account_type_4' => 'Usario discapacitado', - 'user_editor_account_name_label' => 'Nombre de usuario:', - 'user_editor_name_default_text' => 'Introduzca el nombre de usuario', - 'user_editor_account_description_label' => 'Descripción:', - 'user_editor_description_default_text' => 'Introduzca la descripción del usuario', - 'user_editor_account_email_label' => 'Correo electrónica:', - 'user_editor_email_default_text' => 'Introduzca el user correo electrónico', - 'user_change_fader_success_text' => 'El usuario se cambió con éxito', - 'user_change_fader_fail_text' => 'El cambio de usuario error', - 'user_change_fader_create_success_text' => 'The User Was Successfully Created', - 'user_change_fader_create_fail_text' => 'El usuario crear error', - 'user_change_fader_create_fail_already_exists' => 'Un inicio de sesión del usuario que está intentando crear ya existe.', - 'user_change_fader_delete_success_text' => 'El usuario se ha eliminado correctamente', - 'user_change_fader_delete_fail_text' => 'El usuario borrar error', - 'user_save_button' => 'Guarde los cambios para este usuario', - 'user_create_button' => 'Crear este nuevo usuario', - 'user_cancel_button' => 'Restaurar a original', - 'user_delete_button' => 'Elimine este usuario', - 'user_delete_perm_checkbox' => 'Elimine este usuario forma permanente', - 'user_password_label' => 'Cambiar contraseña para:', - 'user_new_password_label' => 'Establecer contraseña a:', - 'user_password_default_text' => 'Deja eso, a menos que quiera cambiar la contraseña', - 'user_new_password_default_text' => 'Debe introducir una contraseña para un usuario nuevo', - 'user_dirty_confirm_text' => 'Ha realizado cambios a este usuario. ¿Quieres perder los cambios?', - 'user_delete_button_confirm' => '¿Estas seguro que quieres eliminar este usuario?', - 'user_delete_button_confirm_perm' => 'This user will be deleted permanently!', - 'user_create_password_alert_text' => 'Los nuevos usuarios deben tener una contraseña. Usted no ha suministrado una contraseña para este usuario.', - 'user_change_fader_fail_no_data_text' => 'El Cambiar usuario falló, porque no había aportado datos', - 'user_change_fader_fail_cant_find_sb_text' => 'El Cambiar usuario falló, porque el usuario no se encontró', - 'user_change_fader_fail_cant_update_text' => 'El Cambiar usuario falló, porque el usuario no se actualizaba', - 'format_editor_disclosure' => 'Formato de administración', - 'format_change_fader_change_success_text' => 'El formato fue creadó correctamente', - 'format_change_fader_change_fail_text' => 'Error en cambio de formato', - 'format_change_fader_create_success_text' => 'The Format Was Successfully Created', - 'format_change_fader_create_fail_text' => 'Error en crear formato', - 'format_change_fader_delete_success_text' => 'El formato se ha eliminado correctamente', - 'format_change_fader_delete_fail_text' => 'El formato eliminado con error', - 'format_change_fader_fail_no_data_text' => 'El cambio de formato con error, porque no había aportado datos', - 'format_change_fader_fail_cant_find_sb_text' => 'El cambio de formato con error, porque el formato no se encontró', - 'format_change_fader_fail_cant_update_text' => 'El cambio de formato con error, porque el formato no se actualizaba', - 'format_editor_name_default_text' => 'Escriba una descripción muy corta', - 'format_editor_description_default_text' => 'Escriba una descripción más detallada', - 'format_editor_create_format_button_text' => 'Crear nuevo formato', - 'format_editor_cancel_create_format_button_text' => 'Cancelar', - 'format_editor_create_this_format_button_text' => 'Crear este formato', - 'format_editor_change_format_button_text' => 'Cambiar este formato', - 'format_editor_delete_format_button_text' => 'Eliminar este formato', - 'format_editor_reset_format_button_text' => 'Restaurar al original', - 'need_refresh_message_fader_text' => 'Usted debe cargar esta página antes de utilizar esta sección', - 'need_refresh_message_alert_text' => 'Because you have made changes in the Server Administration, Service Body Administration, User Administration, or Format Administration, the information displayed in this section may no longer be accurate, so the page needs to be refreshed. The easiest way to do this, is to Sign Out, then Log In again.', - 'format_editor_delete_button_confirm' => '¿Estas seguro que quieres eliminar este formato?', - 'format_editor_delete_button_confirm_perm' => 'Este formato se eliminará para siempre!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'El contraseña es demasiado corta! Debe ser al menos %d caracteres!', - 'AJAX_Auth_Failure' => 'Error en la autorización para esta operación. Puede haber un problema con la configuración del servidor.', - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'No se puede mostrar datos-no autorizada', - 'Value_Prompts' => array( - 'id_bigint' => 'ID de reunion', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Cuerpo de servicio', - 'service_bodies' => 'Cuerpos de servicio', - 'weekdays' => 'Días de la semana', - 'weekday' => 'Reunión recolecta cada', - 'start_time' => 'Comienza la reunión', - 'duration_time' => 'Reunión Dura', - 'location' => 'Ubicación', - 'duration_time_hour' => 'Hora', - 'duration_time_hours' => 'Horas', - 'duration_time_minute' => 'Minuto', - 'duration_time_minutes' => 'Minutos', - 'lang_enum' => 'Idioma', - 'formats' => 'Formatos', - 'distance' => 'Distancia del Centro', - 'generic' => 'Reunion de NA', - 'close_title' => 'Cierre esta ventana detalle de reuniones', - 'close_text' => 'Cierar ventana', - 'map_alt' => 'Mapa a reunión', - 'map' => 'Sigue este enlace para ver un mapa', - 'title_checkbox_unpub_meeting' => 'Esta reunión es inédito. No puede ser visto por búsquedas regulares.', - 'title_checkbox_copy_meeting' => 'Esta reunión es un duplicado de otra reunión. También es inédito. No puede ser visto por búsquedas regulares.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'Ninguno', - 'OPEN' => 'Abierto', - 'CLOSED' => 'Cerrado', - 'WCHR' => 'Accesible silla de ruedas', - 'BEG' => 'Principiantes', - 'BT' => 'Texto Basico', - 'CAN' => 'Las Velas', - 'CPT' => '12 Conceptos', - 'CW' => 'Niños son bienvenidos', - 'DISC' => 'Discusión/Participación', - 'GL' => 'Gay/Lesbiana', - 'IP' => 'Estudio IP', - 'IW' => 'Estudio funciona', - 'JFT' => 'Estudio Solo Por Hoy', - 'LC' => 'Vivir Limpios', - 'LIT' => 'Estudio de Literatura', - 'M' => 'Hombres', - 'MED' => 'Meditación', - 'NS' => 'Non-Smoking', - 'QA' => 'Preguntas y Respuestas', - 'RA' => 'Acceso Restringido', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Fumar', - 'SPK' => 'Orador', - 'STEP' => 'Pasos', - 'SWG' => 'Estudio de Guía de Pasos', - 'TOP' => 'Topico', - 'TRAD' => 'Tradicion', - 'VAR' => 'Formato Varía', - 'W' => 'Mujeres', - 'Y' => 'Jovenes', - 'LANG' => 'Idioma alternativo', - 'GP' => 'Guiding Principles', // TODO translate - 'NC' => 'No Children', // TODO translate - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'None', - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', - 'O' => 'Attendance by non-addicts (Open, Closed)', - 'LANG' => 'Language', - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)', - ), - 'cookie_monster' => 'Este sitio utiliza cookies para almacenar su idioma preferido.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Time', - 'duration_time' => 'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formats', - 'lang_enum' => 'Language', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Published', - 'email_contact' => 'Email Contact', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[Contactos de Listado de Reuniones] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'La reunion fue cambiada.', - '__THE_MEETING_WAS_CREATED__' => 'La reunion fue creada.', - '__THE_MEETING_WAS_DELETED__' => 'La reunion fue eliminada.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'La reunión se ha retrotraído a una versión anterior.', - - '__THE_FORMAT_WAS_CHANGED__' => 'El formato ha cambiado.', - '__THE_FORMAT_WAS_CREATED__' => 'El formato fue creado.', - '__THE_FORMAT_WAS_DELETED__' => 'Formato fue eliminad.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'El formato se ha retrotraído a una versión anterior.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'El cuerpo de servicio se ha cambiado.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'El cuerpo de servicio fue creado.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'El cuerpo de servicio fue eliminado.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'El cuerpo de servicio se ha retrotraído a una versión anterior.', - - '__THE_USER_WAS_CHANGED__' => 'El usuario ha cambiado.', - '__THE_USER_WAS_CREATED__' => 'Se creó el usuario.', - '__THE_USER_WAS_DELETED__' => 'El usuario se ha eliminado.', - '__THE_USER_WAS_ROLLED_BACK__' => 'El usuario se ha retrotraído a una versión anterior.', - - '__BY__' => 'por', - '__FOR__' => 'para' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'fue cambiado de', - 'to' => 'a', - 'was_changed' => 'cambiado', - 'was_added_as' => 'fue introducido como', - 'was_deleted' => 'fue elimanado', - 'was_published' => 'La reunión se publicó', - 'was_unpublished' => 'El reunión fue inédito', - 'formats_prompt' => 'Formato de reunion', - 'duration_time' => 'La duración de reunión', - 'start_time' => 'Hora de inicio de la reunion', - 'longitude' => 'La longitud de reunión', - 'latitude' => 'El latitud de reunión', - 'sb_prompt' => 'La reunión cambió su cuerpo de servicio de', - 'id_bigint' => 'ID de la reunion', - 'lang_enum' => 'Idioma de la reunion', - 'worldid_mixed' => 'El ID de grupo compartida', // TODO: translate The World Committee Code - 'weekday_tinyint' => 'El día de la semana en que se reúne la reunión', - 'non_existent_service_body' => 'Cuerpo de Servicio ya no existe', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/fa/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/fa/data_transfer_strings.php deleted file mode 100755 index 1ebd15a51..000000000 --- a/src/legacy/local_server/server_admin/lang/fa/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/fa/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/fa/install_wizard_strings.php deleted file mode 100755 index 8ca9805bd..000000000 --- a/src/legacy/local_server/server_admin/lang/fa/install_wizard_strings.php +++ /dev/null @@ -1,165 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_Type_MySQL_Error' => 'ERROR: Even though you have PDO and you have database drivers installed, none of the are MySQL (the only supported driver)!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_GenericError' => 'There is an error connecting to the database. Please check your database settings.', - 'NoDatabase_Note_ClickHere' => 'Click here to go back to the database set up page.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoDatabase_Note_ServerSettings_ClickHere' => 'Click here to go back to the server settings page.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Maps_API_Key_Valid' => 'Google Maps API Key is valid.', - 'Maps_API_Key_ClickHere' => 'Click here to go back to the Google Maps API Key set up page.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API Settings', - 'Page_2_Heading' => 'Google Maps API Settings', - 'Page_2_API_Key_Prompt' => 'Enter the Google API Key for Geocoding:', - 'Page_2_API_Key_Set_Button' => 'TEST KEY', - 'Page_2_API_Key_Not_Set_Prompt' => 'SET API KEY FIRST', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => ' The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DefaultClosedStatus' => 'Meetings Are Considerd "CLOSED" by Default:', - 'DefaultClosedStatusExtraText' => 'This primarily affects the export to NAWS.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'SemanticAdminLabel' => 'Enable Semantic Administration:', - 'SemanticAdminExtraText' => 'If not checked, then all administration must be done via the Root Server login (No apps).', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - 'EmailContactAdminEnableLabel' => 'Include Service Body Administrator On These Emails:', - 'EmailContactAdminEnableExtraText' => 'Sends copies of these emails to the Service Body Administrator (if they are not the primary recipient).', - 'EmailContactAllAdminEnableLabel' => 'Include All Service Body Administrators On These Emails:', - 'EmailContactAllAdminEnableExtraText' => 'Sends copies of these emails to all of the relevant Service Body Administrators.', - - 'Page_4_Initialize_Root_Server_Heading' => 'Initialize the Root Server', - 'Page_4_Initialize_Root_Server_Text' => 'The button below will initialize the Root Server with an empty database and a Server Administrator user.', - 'Page_4_Initialize_Root_Server_Button' => 'Initialize Root Server', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Export Spreadsheet (Optional): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - 'Explanatory_Text_2_API_key_Intro' => 'The "API Key" is a key that you need to register with Google in order to be able to use their mapping service.', - 'Explanatory_Text_2_API_key_2_Intro' => 'You will need to provide a valid API Key in order to create new meetings in the Root Server.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/fa/name.txt b/src/legacy/local_server/server_admin/lang/fa/name.txt deleted file mode 100755 index 159b8f2e4..000000000 --- a/src/legacy/local_server/server_admin/lang/fa/name.txt +++ /dev/null @@ -1 +0,0 @@ -فارسی \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/fa/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/fa/server_admin_strings.inc.php deleted file mode 100755 index af3fc46df..000000000 --- a/src/legacy/local_server/server_admin/lang/fa/server_admin_strings.inc.php +++ /dev/null @@ -1,491 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array('server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'My Account', - 'account_name_label' => 'My Account Name:', - 'account_login_label' => 'My Login:', - 'account_type_label' => 'I Am A:', - 'account_type_1' => 'Server Administrator', - 'account_type_2' => 'Service Body Administrator', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Service Body Observer', - 'change_password_label' => 'Change My Password To:', - 'change_password_default_text' => 'Leave This Alone If You Don\'t Want To Change Your Password', - 'account_email_label' => 'My Email Address:', - 'email_address_default_text' => 'Enter An Email Address', - 'account_description_label' => 'My Description:', - 'account_description_default_text' => 'Enter A Description', - 'account_change_button_text' => 'Change My Account Settings', - 'account_change_fader_success_text' => 'The Account Information Was Successfully Changed', - 'account_change_fader_failure_text' => 'The Account Information Was Not Changed', - 'meeting_editor_disclosure' => 'Meeting Editor', - 'meeting_editor_already_editing_confirm' => 'You are currently editing another meeting. Do you want to lose all changes in that meeting?', - 'meeting_change_fader_success_text' => 'The Meeting Was Successfully Changed', - 'meeting_change_fader_failure_text' => 'The Meeting Was Not Changed', - 'meeting_change_fader_success_delete_text' => 'The Meeting Was Successfully Deleted', - 'meeting_change_fader_fail_delete_text' => 'The Meeting Was Not Deleted', - 'meeting_change_fader_success_add_text' => 'The New Meeting Was Successfully Added', - 'meeting_change_fader_fail_add_text' => 'The New Meeting Was Not Added', - 'meeting_text_input_label' => 'Search For Text:', - 'access_service_body_label' => 'I Have Access to:', - 'meeting_text_input_default_text' => 'Enter Some Search Text', - 'meeting_text_location_label' => 'This is a Location or PostCode', - 'meeting_search_weekdays_label' => 'Search For Selected Weekdays:', - 'meeting_search_weekdays_names' => array('All', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), - 'meeting_search_service_bodies_label' => 'Search In Selected Service Bodies:', - 'meeting_search_start_time_label' => 'Search By Meeting Start Time:', - 'meeting_search_start_time_all_label' => 'Any Time', - 'meeting_search_start_time_morn_label' => 'Morning', - 'meeting_search_start_time_aft_label' => 'Afternoon', - 'meeting_search_start_time_eve_label' => 'Evening', - 'meeting_search_no_results_text' => 'No Meetings Found', - 'meeting_editor_tab_specifier_text' => 'Search For Meetings', - 'meeting_editor_tab_editor_text' => 'Edit Or Create Meetings', - 'meeting_editor_create_new_text' => 'Create A New Meeting', - 'meeting_editor_location_map_link' => 'Location Map', - 'meeting_editor_screen_match_ll_button' => 'Set Longitude and Latitude to Address', - 'meeting_editor_screen_default_text_prompt' => 'Enter Some Text or a Number', - 'meeting_is_published' => 'Meeting is Published', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Meeting Name:', - 'meeting_editor_screen_meeting_name_prompt' => 'Enter A Meeting Name', - 'meeting_editor_screen_meeting_weekday_label' => 'Weekday:', - 'meeting_editor_screen_meeting_start_label' => 'Meeting Start Time:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Noon', - 'meeting_editor_screen_meeting_midnight_label' => 'Midnight', - 'meeting_editor_screen_meeting_duration_label' => 'Duration:', - 'meeting_editor_screen_meeting_oe_label' => 'Open-Ended', - 'meeting_editor_screen_meeting_cc_label' => 'World Committee Code:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Meeting Email Contact:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Enter An Email for A Contact Specific Only to This Meeting', - 'meeting_editor_screen_meeting_sb_label' => 'Service Body:', - 'meeting_editor_screen_meeting_sb_default_value' => 'No Service Body Selected', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Enter A Longitude', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitude:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Enter A Latitude', - 'meeting_editor_screen_meeting_location_label' => 'Location:', - 'meeting_editor_screen_meeting_location_prompt' => 'Enter A Location Name (Like a Building Name)', - 'meeting_editor_screen_meeting_info_label' => 'Extra Info:', - 'meeting_editor_screen_meeting_info_prompt' => 'Enter Any Additional Location Information', - 'meeting_editor_screen_meeting_street_label' => 'Street Address:', - 'meeting_editor_screen_meeting_street_prompt' => 'Enter A Street Address', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Neighborhood:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Enter A Neighborhood (Not Borough or City Subsection)', - 'meeting_editor_screen_meeting_borough_label' => 'Borough/City Subsection:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Enter A Borough or City Subsection (Not Neighborhood)', - 'meeting_editor_screen_meeting_city_label' => 'City/Town:', - 'meeting_editor_screen_meeting_city_prompt' => 'Enter A City or Town Name (Not County or Borough)', - 'meeting_editor_screen_meeting_county_label' => 'County/Sub-Province:', - 'meeting_editor_screen_meeting_county_prompt' => 'Enter A County or Sub-Province Name', - 'meeting_editor_screen_meeting_state_label' => 'State/Province:', - 'meeting_editor_screen_meeting_state_prompt' => 'Enter A State or Province Name', - 'meeting_editor_screen_meeting_zip_label' => 'Zip Code/Postal Code:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Enter A Postal Code', - 'meeting_editor_screen_meeting_nation_label' => 'Nation:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Enter The Nation Name', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Look For:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Published Meetings Only', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Unpublished Meetings Only', - 'meeting_editor_screen_meeting_visibility_advice' => 'This is never displayed in normal meeting searches.', - 'meeting_editor_screen_meeting_publish_search_all' => 'All Meetings', - 'meeting_editor_screen_meeting_create_button' => 'Create A New Meeting', - 'meeting_editor_screen_delete_button' => 'Delete This Meeting', - 'meeting_editor_screen_delete_button_confirm' => 'Are you sure that you want to delete this meeting?', - 'meeting_editor_screen_cancel_button' => 'Cancel', - 'logout' => 'Sign Out', - 'meeting_editor_screen_cancel_confirm' => 'Are you sure that you want to cancel editing this meeting, and lose all changes?', - 'meeting_lookup_failed' => 'The address lookup failed.', - 'meeting_lookup_failed_not_enough_address_info' => 'There is not enough valid address information to do a lookup.', - 'meeting_create_button_name' => 'Save This As A New Meeting', - 'meeting_saved_as_a_copy' => 'Save This Meeting As A Copy (Creates A New Meeting)', - 'meeting_save_buttonName' => 'Save the Changes to This Meeting', - 'meeting_editor_tab_bar_basic_tab_text' => 'Basic', - 'meeting_editor_tab_bar_location_tab_text' => 'Location', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Other', - 'meeting_editor_tab_bar_history_tab_text' => 'History', - 'meeting_editor_result_count_format' => '%d Meetings Found', - 'meeting_id_label' => 'Meeting ID:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administration Console', - 'login' => 'Login ID', - 'password' => 'Password', - 'button' => 'Log In', - 'cookie' => 'You must enable cookies in order to administer this server.', - 'noscript' => 'You cannot administer this site without JavaScript.', - 'title' => 'Please log in to administer the server.', - 'edit_Meeting_object_not_found' => 'ERROR: The meeting was not found.', - 'edit_Meeting_object_not_changed' => 'ERROR: The meeting was not changed.', - 'edit_Meeting_auth_failure' => 'You are not authorized to edit this meeting.', - 'not_auth_1' => 'NOT AUTHORIZED', - 'not_auth_2' => 'You are not authorized to administer this server.', - 'not_auth_3' => 'There was a problem with the user name or password that you entered.', - 'email_format_bad' => 'The email address that you entered was not formatted correctly.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

No History Available For This Meeting

', - 'service_body_editor_disclosure' => 'Service Body Administration', - 'service_body_change_fader_success_text' => 'The Service Body Was Successfully Changed', - 'service_body_change_fader_fail_text' => 'The Service Body Change Failed', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Name:', - 'service_body_name_default_prompt_text' => 'Enter the Name of This Service Body', - 'service_body_parent_popup_label' => 'Service Body Parent:', - 'service_body_parent_popup_no_parent_option' => 'No Parent (Top-Level)', - 'service_body_editor_screen_sb_admin_user_label' => 'Primary Admin:', - 'service_body_editor_screen_sb_admin_description_label' => 'Description:', - 'service_body_description_default_prompt_text' => 'Enter A Description of This Service Body', - 'service_body_editor_screen_sb_admin_email_label' => 'Contact Email:', - 'service_body_email_default_prompt_text' => 'Enter A Contact Email Address for This Service Body', - 'service_body_editor_screen_sb_admin_uri_label' => 'Web Site URL:', - 'service_body_uri_default_prompt_text' => 'Enter A Web Site URL for This Service Body', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Full Meeting List Editors:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'These Users Can Edit Any Meetings In This Service Body.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Basic Meeting List Editors:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'These Users Can Edit Any Meetings In This Service Body, But Only If They Are Unpublished.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observers:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'These Users Can See Hidden Info (Like Email Addresses), But Cannot Edit Anything.', - 'service_body_dirty_confirm_text' => 'You have made changes to this Service Body. Do you want to lose your changes?', - 'service_body_save_button' => 'Save These Service Body Changes', - 'service_body_create_button' => 'Create This Service Body', - 'service_body_delete_button' => 'Delete This Service Body', - 'service_body_delete_perm_checkbox' => 'Delete This Service Body Permanently', - 'service_body_delete_button_confirm' => 'Are you sure that you want to delete this Service body? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'This Service body will be deleted permanently!', - 'service_body_change_fader_create_success_text' => 'The Service Body Was Successfully Created', - 'service_body_change_fader_create_fail_text' => 'The Service Body Create Failed', - 'service_body_change_fader_delete_success_text' => 'The Service Body Was Successfully Deleted', - 'service_body_change_fader_delete_fail_text' => 'The Service Body Delete Failed', - 'service_body_change_fader_fail_no_data_text' => 'The Service Body Change Failed, Because There Was No Data Supplied', - 'service_body_change_fader_fail_cant_find_sb_text' => 'The Service Body Change Failed, Because The Service Body Was Not Found', - 'service_body_change_fader_fail_cant_update_text' => 'The Service Body Change Failed, Because The Service Body Was Not Updated', - 'service_body_change_fader_fail_bad_hierarchy' => 'The Service Body Change Failed, Because The Selected Owner Service Body Is Under This Service Body, And Cannot Be Used', - 'service_body_cancel_button' => 'Restore To Original', - 'service_body_editor_type_label' => 'Service Body Type:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Group', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Area Service Committee', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Regional Service Conference', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'World Service Conference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zonal Forum', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Enter The Helpline Telephone Number', - 'service_body_editor_uri_naws_format_text' => 'Get The Meetings For This Service Body As A NAWS-Compatible File', - 'edit_Meeting_meeting_id' => 'Meeting ID:', - 'service_body_editor_create_new_sb_option' => 'Create A New Service Body', - 'service_body_editor_screen_world_cc_label' => 'World Committee Code:', - 'service_body_editor_screen_world_cc_prompt' => 'Enter A World Committee Code', - 'user_editor_disclosure' => 'User Administration', - 'user_editor_create_new_user_option' => 'Create A New User', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'User Login:', - 'user_editor_login_default_text' => 'Enter the User Login', - 'user_editor_account_type_label' => 'User Is A:', - 'user_editor_user_owner_label' => 'Owned By: ', - 'user_editor_account_type_1' => 'Server Administrator', - 'user_editor_account_type_2' => 'Service Body Administrator', - 'user_editor_account_type_3' => 'Service Body Editor', - 'user_editor_account_type_5' => 'Service Body Observer', - 'user_editor_account_type_4' => 'Disabled User', - 'user_editor_account_name_label' => 'User Name:', - 'user_editor_name_default_text' => 'Enter the User Name', - 'user_editor_account_description_label' => 'Description:', - 'user_editor_description_default_text' => 'Enter the User Description', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'Enter the User Email', - 'user_change_fader_success_text' => 'The User Was Successfully Changed', - 'user_change_fader_fail_text' => 'The User Change Failed', - 'user_change_fader_create_success_text' => 'The User Was Successfully Created', - 'user_change_fader_create_fail_text' => 'The User Create Failed', - 'user_change_fader_create_fail_already_exists' => 'A Login For The User That You Are Trying To Create Already Exists.', - 'user_change_fader_delete_success_text' => 'The User Was Successfully Deleted', - 'user_change_fader_delete_fail_text' => 'The User Delete Failed', - 'user_save_button' => 'Save the Changes to This User', - 'user_create_button' => 'Create This New User', - 'user_cancel_button' => 'Restore To Original', - 'user_delete_button' => 'Delete This User', - 'user_delete_perm_checkbox' => 'Delete This User Permanently', - 'user_password_label' => 'Change Password To:', - 'user_new_password_label' => 'Set Password To:', - 'user_password_default_text' => 'Leave This Alone, Unless You Want To Change The Password', - 'user_new_password_default_text' => 'You Must Enter A Password For A new User', - 'user_dirty_confirm_text' => 'You have made changes to this User. Do you want to lose your changes?', - 'user_delete_button_confirm' => 'Are you sure that you want to delete this user?', - 'user_delete_button_confirm_perm' => 'This user will be deleted permanently!', - 'user_create_password_alert_text' => 'New users must have a password. You have not supplied a password for this user.', - 'user_change_fader_fail_no_data_text' => 'The User Change Failed, Because There Was No Data Supplied', - 'user_change_fader_fail_cant_find_sb_text' => 'The User Change Failed, Because The User Was Not Found', - 'user_change_fader_fail_cant_update_text' => 'The User Change Failed, Because The User Was Not Updated', - 'format_editor_disclosure' => 'Format Administration', - 'format_change_fader_change_success_text' => 'The Format Was Successfully Changed', - 'format_change_fader_change_fail_text' => 'The Format Change Failed', - 'format_change_fader_create_success_text' => 'The Format Was Successfully Created', - 'format_change_fader_create_fail_text' => 'The Format Create Failed', - 'format_change_fader_delete_success_text' => 'The Format Was Successfully Deleted', - 'format_change_fader_delete_fail_text' => 'The Format Delete Failed', - 'format_change_fader_fail_no_data_text' => 'The Format Change Failed, Because There Was No Data Supplied', - 'format_change_fader_fail_cant_find_sb_text' => 'The Format Change Failed, Because The Format Was Not Found', - 'format_change_fader_fail_cant_update_text' => 'The Format Change Failed, Because The Format Was Not Updated', - 'format_editor_name_default_text' => 'Enter A Very Short Description', - 'format_editor_description_default_text' => 'Enter A More Detailed Description', - 'format_editor_create_format_button_text' => 'Create New Format', - 'format_editor_cancel_create_format_button_text' => 'Cancel', - 'format_editor_create_this_format_button_text' => 'Create This Format', - 'format_editor_change_format_button_text' => 'Change This Format', - 'format_editor_delete_format_button_text' => 'Delete This Format', - 'format_editor_reset_format_button_text' => 'Restore To Original', - 'need_refresh_message_fader_text' => 'You Should Refresh This Page Before Using This Section', - 'need_refresh_message_alert_text' => 'Because you have made changes in the Server Administration, Service Body Administration, User Administration, or Format Administration, the information displayed in this section may no longer be accurate, so the page needs to be refreshed. The easiest way to do this, is to Sign Out, then Log In again.', - 'format_editor_delete_button_confirm' => 'Are you sure that you want to delete this format?', - 'format_editor_delete_button_confirm_perm' => 'This format will be deleted permanently!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'The password is too short! It must be at least %d characters long!', - 'AJAX_Auth_Failure' => 'Authorization failed for this operation. There may be a problem with the server configuration.', - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Cannot Display Data -Unauthorized', - 'Value_Prompts' => array( - 'id_bigint' => 'Meeting ID', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Service Body', - 'service_bodies' => 'Service Bodies', - 'weekdays' => 'Weekdays', - 'weekday' => 'Meeting Gathers Every', - 'start_time' => 'Meeting Starts at', - 'duration_time' => 'Meeting Lasts', - 'location' => 'Location', - 'duration_time_hour' => 'Hour', - 'duration_time_hours' => 'Hours', - 'duration_time_minute' => 'Minute', - 'duration_time_minutes' => 'Minutes', - 'lang_enum' => 'Language', - 'formats' => 'Formats', - 'distance' => 'Distance from Center', - 'generic' => 'NA Meeting', - 'close_title' => 'Close This Meeting Detail Window', - 'close_text' => 'Close Window', - 'map_alt' => 'Map to Meeting', - 'map' => 'Follow This Link for A Map', - 'title_checkbox_unpub_meeting' => 'This meeting is unpublished. It cannot be seen by regular searches.', - 'title_checkbox_copy_meeting' => 'This meeting is a duplicate of another meeting. It is also unpublished. It cannot be seen by regular searches.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'None', - 'OPEN' => 'Open', - 'CLOSED' => 'Closed', - 'WCHR' => 'Wheelchair-Accessible', - 'BEG' => 'Beginner/Newcomer', - 'BT' => 'Basic Text', - 'CAN' => 'Candlelight', - 'CPT' => '12 Concepts', - 'CW' => 'Children Welcome', - 'DISC' => 'Discussion/Participation', - 'GL' => 'Gay/Lesbian', - 'IP' => 'IP Study', - 'IW' => 'It Works Study', - 'JFT' => 'Just For Today Study', - 'LC' => 'Living Clean', - 'LIT' => 'Literature Study', - 'M' => 'Men', - 'MED' => 'Meditation', - 'NS' => 'Non-Smoking', - 'QA' => 'Questions & Answers', - 'RA' => 'Restricted Access', - 'S-D' => 'Speaker/Discussion', - 'SMOK' => 'Smoking', - 'SPK' => 'Speaker', - 'STEP' => 'Step', - 'SWG' => 'Step Working Guide Study', - 'TOP' => 'Topic', - 'TRAD' => 'Tradition', - 'VAR' => 'Format Varies', - 'W' => 'Women', - 'Y' => 'Young People', - 'LANG' => 'Alternate Language', - 'GP' => 'Guiding Principles', - 'NC' => 'No Children', - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'None', - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', - 'O' => 'Attendance by non-addicts (Open, Closed)', - 'LANG' => 'Language', - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)', - ), - - 'cookie_monster' => 'This site uses a cookie to store your preferred language.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Time', - 'duration_time' => 'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formats', - 'lang_enum' => 'Language', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Published', - 'email_contact' => 'Email Contact', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'The meeting was changed.', - '__THE_MEETING_WAS_CREATED__' => 'The meeting was created.', - '__THE_MEETING_WAS_DELETED__' => 'The meeting was deleted.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'The meeting was rolled back to a previous version.', - - '__THE_FORMAT_WAS_CHANGED__' => 'The format was changed.', - '__THE_FORMAT_WAS_CREATED__' => 'The format was created.', - '__THE_FORMAT_WAS_DELETED__' => 'The format was deleted.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'The format was rolled back to a previous version.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'The service body was changed.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'The service body was created.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'The service body was deleted.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'The service body was rolled back to a previous version.', - - '__THE_USER_WAS_CHANGED__' => 'The user was changed.', - '__THE_USER_WAS_CREATED__' => 'The user was created.', - '__THE_USER_WAS_DELETED__' => 'The user was deleted.', - '__THE_USER_WAS_ROLLED_BACK__' => 'The user was rolled back to a previous version.', - - '__BY__' => 'by', - '__FOR__' => 'for' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'was changed from', - 'to' => 'to', - 'was_changed' => 'was changed', - 'was_added_as' => 'was added as', - 'was_deleted' => 'was deleted', - 'was_published' => 'The meeting was published', - 'was_unpublished' => 'The meeting was unpublished', - 'formats_prompt' => 'The meeting format', - 'duration_time' => 'The meeting duration', - 'start_time' => 'The meeting start time', - 'longitude' => 'The meeting longitude', - 'latitude' => 'The meeting latitude', - 'sb_prompt' => 'The meeting changed its Service Body from', - 'id_bigint' => 'The meeting ID', - 'lang_enum' => 'The meeting language', - 'worldid_mixed' => 'The World Committee Code', - 'weekday_tinyint' => 'The day of the week on which the meeting gathers', - 'non_existent_service_body' => 'Service Body No Longer Exists', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/fr/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/fr/data_transfer_strings.php deleted file mode 100755 index 6fa2303ec..000000000 --- a/src/legacy/local_server/server_admin/lang/fr/data_transfer_strings.php +++ /dev/null @@ -1,22 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array (); diff --git a/src/legacy/local_server/server_admin/lang/fr/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/fr/install_wizard_strings.php deleted file mode 100644 index 80ed92be9..000000000 --- a/src/legacy/local_server/server_admin/lang/fr/install_wizard_strings.php +++ /dev/null @@ -1,138 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Ne peut pas s\exécuter directement'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERREUR: Vous devez avoir la version de PHP 5.6 ou superieur installe sur ce serveur!', - 'Database_PDO_Error' => 'ERREUR: Vous n\'avez pas installé PHP PDO!', - 'Database_Type_Error' => 'ERREUR: Vous n\'avez pas Installe PHP PDO!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'La connexion de base de données a reussi.', - 'Database_TestButton_Fail' => 'La connexion de base de données a echoue:', - 'Database_TestButton_Fail2' => 'La connexion de base de données a echoue car il existe deja une base de donnees initialisee.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'La connexion de base de données a échoué! S\'il vous plaît assurez-vous que la base de données existe, est complètement vide, l\'utilisateur est créé, et que l\'utilisateur dispose des autorisations complètes sur la base de données vide.', - 'AJAX_Handler_DB_Established_Error' => 'La base de données esists déjà, et a été mis en place! Vous ne pouvez pas utiliser cette configuration pour écraser une base existante!', - 'AJAX_Handler_DB_Incomplete_Error' => 'Il n\'y a pas assez d\'informations pour initialiser la base de données!', - - 'NoDatabase_Note_AlreadySet' => 'Il existe déjà une base de données existante, de sorte que vous ne peut pas initialiser de nouveau.', - 'NoDatabase_Note_PasswordIssue' => 'Vous devez créer un compte d\'administrateur du serveur avant que la base de données peut être initialisé.', - 'NoServerAdmin_Note_AlreadySet' => 'Il existe déjà une base de données existante, donc vous ne pouvez pas configurer un compte d\'administrateur de serveur (Il en existe un déjà).', - 'NeedLongerPasswordNote' => 'Ce mot de passe est trop court. Il doit être au moins de %d caractères.', - - 'Prev_Button' => 'PRÉCÉDENT', - 'Next_Button' => 'SUIVANT', - - 'Page_1_Tab' => 'ÉTAPE 1: Basse de donnée', - 'Page_1_Heading' => 'Réglages de base de données de connexion', - 'Page_1_Text' => 'Avant de pouvoir appliquer les paramètres de cette page, vous devez mettre en place une nouvelle base de données complètement vide, et d\'établir une base de données utilisateur disposant de droits d\'accès complets sur cette base de données.', - - 'Database_Name' => 'Nom de la base de donnée:', - 'Database_Name_Default_Text' => 'Entrer le Nom de la base de donnée', - 'Database_Type' => 'Type de la base de données:', - 'Database_Host' => 'Hôte de la base de données:', - 'Database_Host_Default_Text' => 'Entrer Hôte de la base de données:', - 'Database_Host_Additional_Text' => 'Normalement c\'est "localhost."', - 'Table_Prefix' => 'Préfixe de la Table:', - 'Table_Prefix_Default_Text' => 'Entrer un Préfixe de la Table:', - 'Table_Prefix_Additional_Text' => 'Seulement pour les serveurs racines multiples partageant une base de données.', - 'Database_User' => 'nom d\'utilisateur la base de données:', - 'Database_User_Default_Text' => 'Entrer le nom d\'utilisateur la base de données', - 'Database_PW' => 'Mot de Passe de la Base de Données:', - 'Database_PW_Default_Text' => 'Entrer le Mot de Passe de la Base de Données', - 'Database_PW_Additional_Text' => 'Faite à ce qu\'il en soit vraiment sécuritaire.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - - 'Page_2_Tab' => 'ÉTAPE 2: Localisation par défaut', - 'Page_2_Heading' => 'Regler la localisation innitiale pour les Réunions', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'ÉTAPE 3: Paramètres du serveur', - 'Page_3_Heading' => 'Définissez les paramètres généraux du serveur', - 'Page_3_Text' => 'Ce sont quelques paramètres qui affectent l\'administration et la configuration générale de ce serveur. La plupart des paramètres du serveur sont effectuées sur le serveur lui-même.', - 'Admin_Login' => 'Compte Administraterur du Serveur:', - 'Admin_Login_Default_Text' => 'Entrer le Compte Administraterur du Serveur', - 'Admin_Login_Additional_Text' => 'Il s\'agit de la chaîne de connexion de l\'administrateur du serveur.', - 'Admin_Password' => 'Mot de passe administrateur du serveur:', - 'Admin_Password_Default_Text' => 'Entrer le Mot de passe administrateur du serveur', - 'Admin_Password_Additional_Text' => 'Assurez-vous qu\'il s\'agit d\'un mot de passe non négligeable! Il a beaucoup de puissance! (Aussi, ne l\'oubliez pas).', - 'ServerAdminName' => 'SAdministrateur du serveur', - 'ServerAdminDesc' => 'Principale Administrateur du serveur', - 'ServerLangLabel' => 'Langue du Serveur par défaut:', - 'DistanceUnitsLabel' => 'Unités de distance:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilomètres', - 'SearchDepthLabel' => 'Densité des réunions pour la recherche automatique:', - 'SearchDepthText' => 'Il s\'agit d\'une approximation du nombre de rencontres qui devront être trouvée dans la sélection automatique du rayon. Plus de réunions est signifie un plus grand rayon.', - 'HistoryDepthLabel' => 'Nombre de sauvegardes de changements pour une réunion:', - 'HistoryDepthText' => 'Le plus l\'historique est, plus la base de données en deviendra.', - 'TitleTextLabel' => 'Le titre de l\'écran d\'administration:', - 'TitleTextDefaultText' => 'Saisissez un titre court de l\'édition Page de Connexion', - 'BannerTextLabel' => 'Invite de la Connexion pour l\'administration:', - 'BannerTextDefaultText' => 'Entrez une invite courte pour la page de connexion', - 'RegionBiasLabel' => 'Biais de région:', - 'PasswordLengthLabel' => 'Longueur Minimale de Mot de passe:', - 'PasswordLengthExtraText' => 'Cela affectera également le mot de passe de l\'administrateur du serveur, ci-dessus.', - 'DurationLabel' => 'Durée par défaut de la réunion:', - 'DurationHourLabel' => 'Heures', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - - 'Page_4_Tab' => 'Étape 4: Enregistrer les paramètres', - 'Page_4_Heading' => 'Créer le fichier de paramètres', - 'Page_4_Text' => 'Pour des raisons de sécurité (Oui, nous sommes assez paranoïaque - allez figure donc..), ce programme ne tentera pas de créer ou modifier le fichier de paramètres. Au lieu de cela, nous vous demandons de créer vous-même, via FTP ou un gestionnaire de fichiers panneau de contrôle, le nommer "auto-config.inc.php", et collez le texte suivant dans le fichier:', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'Les Réunions de NA durent généralement de 90 minutes (une heure et demie), sauf indication contraire.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Connexion administration', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'Cet assistant d\'installation vous guidera à travers le processus de création d\'une base de données initiale, ainsi que d\'un fichier de configuration. Dans la dernière étape, nous allons créer un fichier de paramètres, et initialiser une base de données vide.', - 'Explanatory_Text_1_DB_Intro' => 'La première chose que vous devez faire, c\'est de créer une nouvelle base de données vide, et un utilisateur de base de données qui a accès à cette base de données. Cela se fait habituellement par l\'intermédiaire de votre site Web Panneau de configuration. Une fois que vous avez créé la base de données, vous devez saisir les informations relatives à cette base de données dans les éléments de texte sur cette page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'L\'administrateur du serveur est le principal utilisateur pour le serveur. Il est le seul compte qui peut créer de nouveaux utilisateurs et les structures de service, et est très puissant. Vous devez créer un identifiant et un mot de passe non négligeable pour ce compte. Vous serez en mesure de modifier les autres aspects du compte sur le serveur principal, une fois la base de données a été mis en place.', - 'Explanatory_Text_3_Misc_Intro' => 'Ce sont les différents paramètres qui influent sur la façon dont le serveur racine se comporte et apparaît.', - - 'Explanatory_Text_4_Main_Intro' => 'Si vous avez entré les informations de base de données, et si vous avez spécifié les informations de connexion de l\'administrateur du serveur, vous pouvez initialiser la base de données ici. Rappelez-vous que la base de données doit être complètement vide de tables pour le Serveur BMLT racine. (Il peut avoir des tables pour d\'autres serveurs ou services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'Le texte ci-dessous est le code source de PHP pour le fichier de paramètres principaux. Vous aurez besoin de créer un fichier sur le serveur avec ce texte dedans. Le fichier est au même niveau que le répertoire du serveur principal pour le serveur racine.', - 'Explanatory_Text_4_File_Extra' => 'Vous devez également vous assurer que les autorisations de fichiers sont limités (chmod 0644). Cela empêche le fichier d\'être écrite, et le serveur racine ne fonctionnera que si le fichier dispose des autorisations nécessaires.', - 'Page_4_PathInfo' => 'Le fichier doit être placé comme %s/auto-config.inc.php, ce qui est l\'endroit où le répertoire de votre %s est. Une fois le fichier a été créé et vous avez mis le texte ci-dessus dedans, vous devez exécuter la commande suivante pour vous assurer que les autorisations sont correctes:', - 'Page_4_Final' => 'Une fois tout cela terminé, actualisez cette page, et vous devriez voir la page de connexion du serveur racine.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/fr/name.txt b/src/legacy/local_server/server_admin/lang/fr/name.txt deleted file mode 100644 index 51b49cf3d..000000000 --- a/src/legacy/local_server/server_admin/lang/fr/name.txt +++ /dev/null @@ -1 +0,0 @@ -Français \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/fr/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/fr/server_admin_strings.inc.php deleted file mode 100755 index 5c4c60fdb..000000000 --- a/src/legacy/local_server/server_admin/lang/fr/server_admin_strings.inc.php +++ /dev/null @@ -1,488 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array('server_admin_disclosure' => 'Administration Serveur', - 'server_admin_naws_spreadsheet_label' => 'Mise à jour de la feuille de calcul des codes du comité mondial', - 'update_world_ids_button_text' => 'Mise à jour des codes du comité mondial ', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Mise à jour des codes du comité mondial (IDs de groupe de NAWS) à partir de la feuille de calcul de NAWS', - 'server_admin_error_no_world_ids_updated' => 'Aucun ID mondial n\'a été mis à jour. Cela peut être dû au fait que votre utilisateur n\'a pas l\'autorisation de mettre à jour les réunions soumises.', - 'server_admin_error_required_spreadsheet_column' => 'La colonne requise n\'existe pas dans la feuille de calcul:', - 'server_admin_error_bmlt_id_not_integer' => 'Le bmlt_id fourni n\'est pas un nombre entier: ', - 'server_admin_error_could_not_create_reader' => 'Impossible de créer un lecteur pour le fichier: ', - 'server_admin_error_no_files_uploaded' => 'Aucun fichier n\'a été téléchargé.', - 'server_admin_error_service_bodies_already_exist' => 'Les structures de service avec les ID mondiaux suivants existent déjà: ', - 'server_admin_error_meetings_already_exist' => 'Des réunions avec les identifiants mondiaux suivants existent déjà: ', - 'server_admin_ui_num_meetings_updated' => 'Nombre de réunions mises à jour: ', - 'server_admin_ui_num_meetings_not_updated' => 'Nombre de réunions qui n\'ont pas besoin d\'être mises à jour: ', - 'server_admin_ui_warning' => 'ATTENTION', - 'server_admin_ui_errors' => 'Erreur(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Nombre de réunions supprimées, marquées de manière à ce qu\'elles n\'apparaissent pas dans les futures exportations des NAWS', - 'server_admin_ui_problem_meetings' => 'Des réunions ont été trouvées dans la feuille de calcul qui n\'ont pas pu être mises à jour. ID des réunions problématiques: ', - 'server_admin_ui_service_bodies_created' => 'Structures de service créées: ', - 'server_admin_ui_meetings_created' => 'Réunions créées: ', - 'server_admin_ui_users_created' => 'Utilisateurs créés: ', - 'server_admin_ui_refresh_ui_text' => 'Déconnectez-vous, puis reconnectez-vous pour voir les nouvelles structures de service, utilisateurs et réunions.', - 'import_service_bodies_and_meetings_button_text' => 'Importer les structures de service et les réunions', - 'import_service_bodies_and_meetings_dropdown_text' => 'Importer les structures de service et les réunions depuis l\'export NAWS', - 'server_admin_naws_import_spreadsheet_label' => 'Import de la feuille de calcul NAWS :', - 'server_admin_naws_import_initially_publish' => 'Initialiser les réunions importées à \'publiée\': ', - 'server_admin_naws_import_explanation' => 'Décochez la case pour initialiser les réunions importées à \'non publiée\'. (Cette fonction est utile si un grand nombre de nouvelles réunions doivent être modifiées ou supprimées et que vous ne voulez pas qu\'elles apparaissent entre-temps.)', - 'account_disclosure' => 'Mon compte', - 'account_name_label' => 'Mon nom de compte:', - 'account_login_label' => 'Mon Login:', - 'account_type_label' => 'Je suis un:', - 'account_type_1' => 'Administrateur du Serveur', - 'account_type_2' => 'Administrateur d\'une structure de service', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Observateur', - 'change_password_label' => 'Changer mon mot de passe pour:', - 'change_password_default_text' => 'Laissez libre si vous ne voulez pas changer votre mot de passe', - 'account_email_label' => 'Mon adresse e-mail:', - 'email_address_default_text' => 'Saisissez une adresse e-mail', - 'account_description_label' => 'ma description:', - 'account_description_default_text' => 'Entrez une description', - 'account_change_button_text' => 'Modifier mes paramètres de compte', - 'account_change_fader_success_text' => 'L\'information du compte a été changé avec succès', - 'account_change_fader_failure_text' => 'L\'information du compte n\'a pas été modifié', - 'meeting_editor_disclosure' => 'Éditeur de réunion', - 'meeting_editor_already_editing_confirm' => 'Vous êtes en train d\'éditer une autre réunion. Voulez-vous perdre tous les changements de cette réunion?', - 'meeting_change_fader_success_text' => 'La réunion a été changé avec succès', - 'meeting_change_fader_failure_text' => 'La réunion n\'a pas été modifié', - 'meeting_change_fader_success_delete_text' => 'La réunion a été supprimé avec succès', - 'meeting_change_fader_fail_delete_text' => 'La réunion n\'a pas été supprimé', - 'meeting_change_fader_success_add_text' => 'La nouvelle réunion a été ajouté avec succès', - 'meeting_change_fader_fail_add_text' => 'La nouvelle réunion n\'a pas été ajouté', - 'meeting_text_input_label' => 'Recherche contextuelle:', - 'access_service_body_label' => 'J\'ai accès à:', - 'meeting_text_input_default_text' => 'Saisissez un mot-clé pour la recherche contextuelle', - 'meeting_text_location_label' => 'Il s\'agit d\'une Ville ou code postal', - 'meeting_search_weekdays_label' => 'Recherche par jour de semaine:', - 'meeting_search_weekdays_names' => array('Tous', 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'), - 'meeting_search_service_bodies_label' => 'Choisir parmi les comités:', - 'meeting_search_start_time_label' => 'Recherche par réunion Heure de début:', - 'meeting_search_start_time_all_label' => 'N\'importe quand', - 'meeting_search_start_time_morn_label' => 'Matin', - 'meeting_search_start_time_aft_label' => 'Après-midi', - 'meeting_search_start_time_eve_label' => 'Soir', - 'meeting_search_no_results_text' => 'Pas de réunions trouvés', - 'meeting_editor_tab_specifier_text' => 'Rechercher des Réunions', - 'meeting_editor_tab_editor_text' => 'Modifier Réunions', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Créer une nouvelle réunion', - 'meeting_editor_location_map_link' => 'Carte de localisation', - 'meeting_editor_screen_match_ll_button' => 'Optimiser la longitude et la latitude par rapport cette adresse', - 'meeting_editor_screen_default_text_prompt' => 'Entrez du texte ou un nombre', - 'meeting_is_published' => 'La réunion est publiée', - 'meeting_unpublished_note' => 'Note: La dépublication d\'une réunion indique une fermeture temporaire. Si cette réunion est définitivement fermée, veuillez la supprimer.', - 'meeting_editor_screen_meeting_name_label' => 'Nom de réunion:', - 'meeting_editor_screen_meeting_name_prompt' => 'Entrer un nom de réunion', - 'meeting_editor_screen_meeting_weekday_label' => 'jour de la semaine:', - 'meeting_editor_screen_meeting_start_label' => 'Réunion Heure de début:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Fuseau horaire de la réunion:', - 'meeting_editor_screen_meeting_am_label' => 'Matin', - 'meeting_editor_screen_meeting_pm_label' => 'Après-midi', - 'meeting_editor_screen_meeting_noon_label' => 'Midi', - 'meeting_editor_screen_meeting_midnight_label' => 'Minuit', - 'meeting_editor_screen_meeting_duration_label' => 'Durée:', - 'meeting_editor_screen_meeting_oe_label' => 'À composition non limitée:', - 'meeting_editor_screen_meeting_cc_label' => 'Code Comité mondial:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normalement, ne touchez pas à ce champ (voir la documentation).', - 'meeting_editor_screen_meeting_contact_label' => 'Contact E-mail de la réunion:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Entrez un E-mail pour un contact spécifique uniquement de cette réunion', - 'meeting_editor_screen_meeting_sb_label' => 'composante de structure de service:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Sans sélection de composante de structure de service', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Entrer la Longitude', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitude:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Entrer la Latitude', - 'meeting_editor_screen_meeting_location_label' => 'Emplacement:', - 'meeting_editor_screen_meeting_location_prompt' => 'Entrez le nom de l\'emplacement nom (comme un nom d\'édifice)', - 'meeting_editor_screen_meeting_info_label' => 'Détails:', - 'meeting_editor_screen_meeting_info_prompt' => 'Entrer infomations additionels de l\'emplacement', - 'meeting_editor_screen_meeting_street_label' => 'Adresse:', - 'meeting_editor_screen_meeting_street_prompt' => 'Entrer l\'adresse', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Quartier:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Entrer le nom du quartier (Pas d\'arrondissement ni de secteur)', - 'meeting_editor_screen_meeting_borough_label' => 'L\'arrondissement de la ville ou secteur:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Entrer un nom d\'arrondissement ou de secteur (Pas de quartier)', - 'meeting_editor_screen_meeting_city_label' => 'Ville / Municipalité:', - 'meeting_editor_screen_meeting_city_prompt' => 'Entrer le nom d\'une ville ou Municipalité (Pas de compté ni d\'arrondissement)', - 'meeting_editor_screen_meeting_county_label' => 'Compté / Région:', - 'meeting_editor_screen_meeting_county_prompt' => 'Entrer le nom de Compté ou de Région', - 'meeting_editor_screen_meeting_state_label' => 'Province:', - 'meeting_editor_screen_meeting_state_prompt' => 'Entrer le mom de la Province', - 'meeting_editor_screen_meeting_zip_label' => 'Code Postal:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Entrer le Code Postal', - 'meeting_editor_screen_meeting_nation_label' => 'Pays:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Entrer le nom de Pays', - 'meeting_editor_screen_meeting_comments_label' => 'Commentaires:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Lignes de train:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Ligne de bus:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Numéro d\'appel de la réunion téléphonique:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Entrez le numéro d\'appel pour une réunion téléphonique ou virtuelle.', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Lien vers la réunion virtuelle', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Entrer le lien de la réunion virtuelle', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Informations supplémentaires de la réunion virtuelle:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Saisissez toute information supplémentaire pour rejoindre la réunion virtuelle, y compris directement depuis l\'application. Par exemple, si la réunion utilise Zoom, "Zoom ID : 456 033 8613, Mot de passe : 1953" serait approprié.', - 'meeting_editor_screen_meeting_venue_type' => 'Type de réunion:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'Physique', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtuelle', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtuelle (remplace temporairement une réunion physique)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybride (À la fois physique et virtuelle)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'Vous devez sélectionner un type de réunion.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Les réunions virtuelles ou hybrides doivent avoir un lien de réunion, un numéro d\'appel de réunion ou des informations supplémentaires sur la réunion virtuelle.', - 'meeting_editor_screen_meeting_location_warning' => 'La réunion doit avoir un lieu (au moins une ville et un état/province, ou un code postal).', - 'meeting_editor_screen_meeting_address_warning' => 'Les réunions physiques ou hybrides doivent avoir une adresse.', - 'meeting_editor_screen_meeting_url_validation' => 'Le lien pour la réunion virtuelle n\'est pas une URL valide', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Les réunions virtuelles ou hybrides doivent comporter soit un lien vers une réunion virtuelle, soit un numéro d\'appel pour une réunion téléphonique.', - 'meeting_editor_screen_meeting_additional_warning' => 'Veuillez également remplir le formulaire Informations supplémentaires sur la réunion virtuelle s\'il existe un lien vers une réunion virtuelle.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'Les réunions physiques ne devraient pas avoir d\'informations sur les réunions virtuelles.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Les réunions virtuelles ne devraient pas avoir de nom ou d\'adresse de lieu.', - 'meeting_editor_screen_meeting_validation_warning' => 'Il y a des avertissements. Êtes-vous sûr de vouloir quand même enregistrer ? Si non, appuyez sur "Annuler" et allez dans l\'onglet Emplacement pour voir les avertissements et les traiter.', - 'meeting_editor_screen_meeting_validation_failed' => 'Impossible d\'enregistrer en raison d\'erreurs de saisie. Veuillez vous rendre dans l\'onglet Emplacement pour les corriger, puis réessayer d\'enregistrer. Erreurs: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Avertissements de saisie affichés dans l\'onglet Emplacement: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Nom:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Téléphone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Nom:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Téléphone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Rechercher:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Réunions publiées seulement', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Réunions non-publiées seulement', - 'meeting_editor_screen_meeting_visibility_advice' => 'Ce n\'est jamais affiché dans les recherches de réunion normales.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Toutes les réunions', - 'meeting_editor_screen_meeting_create_button' => 'Créer une nouvelle réunion', - 'meeting_editor_screen_delete_button' => 'Supprimer cette réunion', - 'meeting_editor_screen_delete_button_confirm' => 'Etes-vous sûr que vous voulez supprimer cette rencontre?', - 'meeting_editor_screen_cancel_button' => 'Annuler', - 'logout' => 'Déconnexion', - 'meeting_editor_screen_cancel_confirm' => 'Etes-vous sûr que vous voulez annuler l\'édition de cette réunion, et perdre tous les changements?', - 'meeting_lookup_failed' => 'La recherche d\'adresse a échoué.', - 'meeting_lookup_failed_not_enough_address_info' => 'Il n\'y a pas assez d\'informations d\'adresse valide pour en faire une recherche.', - 'meeting_create_button_name' => 'L\'enregistrer comme une nouvelle réunion', - 'meeting_saved_as_a_copy' => 'Sauvegarder cette réunion comme une copie (crée une nouvelle réunion)', - 'meeting_save_buttonName' => 'Enregistrez les modifications à cette réunion', - 'meeting_editor_tab_bar_basic_tab_text' => 'de Base', - 'meeting_editor_tab_bar_location_tab_text' => 'Localisation', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Autre', - 'meeting_editor_tab_bar_history_tab_text' => 'Historique', - 'meeting_editor_result_count_format' => '%d de réunions trouvées', - 'meeting_id_label' => 'ID de réunions:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Console d\'Administration de serveur racine', - 'login' => 'ID de connexion', - 'password' => 'Mot de passe', - 'button' => 'Connexion', - 'cookie' => 'Vous devez activer les cookies dans le but d\'administrer ce serveur.', - 'noscript' => 'Vous ne pouvez pas administrer ce site sans JavaScript.', - 'title' => 'S\'il vous plaît vous identifier pour administrer le serveur.', - 'edit_Meeting_object_not_found' => 'ERREUR: La réunion n\'a pas été trouvée.', - 'edit_Meeting_object_not_changed' => 'ERREUR: La réunion n\'a pas été modifiée.', - 'edit_Meeting_auth_failure' => 'Vous n\'êtes pas autorisé à modifier cette réunion.', - 'not_auth_1' => 'NON AUTHORISÉ', - 'not_auth_2' => 'Vous n\'êtes pas autorisé à administrer ce serveur.', - 'not_auth_3' => 'Il y avait un problème avec le nom d\'utilisateur ou mot de passe que vous avez entré.', - 'email_format_bad' => 'L\'adresse e-mail que vous avez entré n\'a pas été formaté correctement.', - 'history_header_format' => '
%spar %s
', - 'history_no_history_available_text' => '

Aucune Historique disponible pour cette réuniong

', - 'service_body_editor_disclosure' => 'Administration du composante de structure de service', - 'service_body_change_fader_success_text' => 'Le composante de structure de service a été changé avec succès', - 'service_body_change_fader_fail_text' => 'Le changement du composante de structure de service a échoué', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Nom:', - 'service_body_name_default_prompt_text' => 'Entrer le nom de ce composante de structure de service', - 'service_body_parent_popup_label' => 'composante de structure de service parent:', - 'service_body_parent_popup_no_parent_option' => 'Aucun Parent (Top-Niveau)', - 'service_body_editor_screen_sb_admin_user_label' => 'Administrateur principal:', - 'service_body_editor_screen_sb_admin_description_label' => 'Description:', - 'service_body_description_default_prompt_text' => 'Entrer une description de ce composante de structure de service', - 'service_body_editor_screen_sb_admin_email_label' => 'Contact E-mail:', - 'service_body_email_default_prompt_text' => 'Entrer un adresse de Contact E-mail pour le composante de structure de service', - 'service_body_editor_screen_sb_admin_uri_label' => 'URL du site Web:', - 'service_body_uri_default_prompt_text' => 'Entrer l\'URL du site Web pour ce composante de structure de service', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Éditeurs de liste complète de réunions:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Ces utilisateurs peuvent modifier toutes les réunions de ce composante de structure de service.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Éditeurs de base de liste de réunions:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Ces utilisateurs peuvent modifier toutes les réunions de cet composante de structure de service, mais seulement si elles ne sont pas publiées.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observateurs:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Ces utilisateurs peuvent voir des informations cachés (comme les adresses courriel), mais ne peut rien modifier.', - 'service_body_dirty_confirm_text' => 'Vous avez apporté des modifications à cet composante de structure de service. Voulez-vous perdre vos modifications?', - 'service_body_save_button' => 'Sauvegarder les changements de ces composantes de structure de service', - 'service_body_create_button' => 'Créer une composante de structure de service', - 'service_body_delete_button' => 'Supprimer cette composante de structure de service', - 'service_body_delete_perm_checkbox' => 'Supprimer cette composante de structure de service Permanently', - 'service_body_delete_button_confirm' => 'Are you sure that you want to delete this composante de structure de service? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'Cette composante de structure de service sera supprimée de façon permanante!', - 'service_body_change_fader_create_success_text' => 'The composante de structure de service a été créée avec succès', - 'service_body_change_fader_create_fail_text' => 'La création de composante de structure de service a échouée', - 'service_body_change_fader_delete_success_text' => 'La composante de structure de service a été supprimée avec succès', - 'service_body_change_fader_delete_fail_text' => 'La suppression de composante de structure de service a échouée', - 'service_body_change_fader_fail_no_data_text' => 'La modification de la composante de structure de service a échouée, parce que il n\'y avait pas de données fournis', - 'service_body_change_fader_fail_cant_find_sb_text' => 'La modification de la composante de structure de service a échouée, parce que la Composante de la structure de service est introuvable', - 'service_body_change_fader_fail_cant_update_text' => 'La modification de la composante de structure de service a échouée, parce que la Composante de la structure de service n\'a pas été mise à jour', - 'service_body_change_fader_fail_bad_hierarchy' => 'La modification de la composante de structure de service a échouée, parce que le propriétaire de la structure Composante de service sélectionné est sous cette Composante de la structure de service et ne peut être utilisé', - 'service_body_cancel_button' => 'Restaurer l\'original', - 'service_body_editor_type_label' => 'Type de composante de structure de service', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Groupe', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Comité de service local', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Comité de Service Regional', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Conférence Service mondial', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Métro Local', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Forum Zonal', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Entrer le numéro de téléphone de la Helpline', - 'service_body_editor_uri_naws_format_text' => 'Obtenez les réunions pour cet composante de structure de service de services sous forme de fichier compatible SMNA', - 'edit_Meeting_meeting_id' => 'ID de réunion:', - 'service_body_editor_create_new_sb_option' => 'Créer une nouvelle composante de structure de service', - 'service_body_editor_screen_world_cc_label' => 'Code mondial de comité:', - 'service_body_editor_screen_world_cc_prompt' => 'Entrer un code mondial de Comité', - 'user_editor_disclosure' => 'Utilisateur d\'administration', - 'user_editor_create_new_user_option' => 'Créer un nouvel utilisateur', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Login utlisateur:', - 'user_editor_login_default_text' => 'Entrer mon login', - 'user_editor_account_type_label' => 'Je suis un:', - 'user_editor_user_owner_label' => 'Appartient à: ', // TODO translate // Done - 'user_editor_account_type_1' => 'Administrateur du serveur', - 'user_editor_account_type_2' => 'Administrateur de la composante de structure de service ', - 'user_editor_account_type_3' => 'Editeur de la composante de structure de service', - 'user_editor_account_type_5' => 'Observateur de la composante de structure de service', - 'user_editor_account_type_4' => 'Désactiver utilisateur', - 'user_editor_account_name_label' => 'Nom d\'utilisateur:', - 'user_editor_name_default_text' => "Entrez le nom d\'utilisateur", - 'user_editor_account_description_label' => 'Description:', - 'user_editor_description_default_text' => "Entrez la description de l\'utilisateur", - 'user_editor_account_email_label' => 'E-mail:', - 'user_editor_email_default_text' => "Entrez le E-mail de l\'Utilisateur", - 'user_change_fader_success_text' => 'L\'utilisateur a été changé avec succès', - 'user_change_fader_fail_text' => 'Le changement de l\'utilisateur a échoué', - 'user_change_fader_create_success_text' => 'L\'utilisateur a été créé avec succès', - 'user_change_fader_create_fail_text' => 'Échec de création de l\'utilisateur', - 'user_change_fader_create_fail_already_exists' => 'Une connexion de l\'utilisateur que vous essayez de créer existe déjà.', - 'user_change_fader_delete_success_text' => 'L\'utilisateur a été supprimé avec succès', - 'user_change_fader_delete_fail_text' => 'Échec de suppression de l\'utilisateur', - 'user_save_button' => 'Enregistrez les modifications à cet utilisateur', - 'user_create_button' => 'Créer ce nouvel utilisateur', - 'user_cancel_button' => 'Restaurer la modification', - 'user_delete_button' => 'Supprimer cet utilisateur', - 'user_delete_perm_checkbox' => 'Supprimer cet utilisateur de façon permanente', - 'user_password_label' => 'Changer mot de passe pour:', - 'user_new_password_label' => 'Définir mot de passe à:', - 'user_password_default_text' => 'Ne rien changer, sauf si vous voulez changer le mot de passe', - 'user_new_password_default_text' => 'Vous devez entrer un mot de passe d\'un nouvel utilisateur', - 'user_dirty_confirm_text' => 'Vous avez apporté des modifications à l\'utilisateur. Voulez-vous perdre vos modifications?', - 'user_delete_button_confirm' => 'Etes-vous sûr que vous voulez supprimer cet utilisateur?', - 'user_delete_button_confirm_perm' => 'Cet utilisateur sera définitivement supprimé!', - 'user_create_password_alert_text' => 'Les nouveaux utilisateurs doivent avoir un mot de passe. Vous n\'avez pas fourni un mot de passe pour cet utilisateur.', - 'user_change_fader_fail_no_data_text' => 'Échec de suppression de l\'utilisateur, parce que il n\'y avait pas de données fournis', - 'user_change_fader_fail_cant_find_sb_text' => 'Échec de suppression de l\'utilisateur, parce que l\'utilisateur n\'a pas été trouvé', - 'user_change_fader_fail_cant_update_text' => 'Échec de suppression de l\'utilisateur, parce que l\'utilisateur n\'a pas été mise à jour', - 'format_editor_disclosure' => 'Administration de format', - 'format_change_fader_change_success_text' => 'Le format a été changé avec succès', - 'format_change_fader_change_fail_text' => 'Le Changement de format a échoué', - 'format_change_fader_create_success_text' => 'Le format a été créé avec succès', - 'format_change_fader_create_fail_text' => 'La création du format a échoué', - 'format_change_fader_delete_success_text' => 'Le format a été supprimé avec succès', - 'format_change_fader_delete_fail_text' => 'La suppréssion du format a échoué', - 'format_change_fader_fail_no_data_text' => 'Le changement du format a échoué, parce que il n\'y avait pas de données fournis', - 'format_change_fader_fail_cant_find_sb_text' => 'Le changement du format a échoué, parce que le format n\'a pas été trouvé', - 'format_change_fader_fail_cant_update_text' => 'Le changement du format a échoué, parce que le format n\'a pas été mise à jour', - 'format_editor_name_default_text' => 'Entrez une description très courte', - 'format_editor_description_default_text' => 'Entrez une description plus détaillée', - 'format_editor_create_format_button_text' => 'Créer un nouveau format', - 'format_editor_cancel_create_format_button_text' => 'Annuler', - 'format_editor_create_this_format_button_text' => 'Créer ce format', - 'format_editor_change_format_button_text' => 'Modifier ce format', - 'format_editor_delete_format_button_text' => 'Supprimer ce format', - 'format_editor_reset_format_button_text' => 'Restaurer la modification', - 'need_refresh_message_fader_text' => 'Vous devez actualiser cette page avant d\'utiliser cette section', - 'need_refresh_message_alert_text' => 'Parce que vous avez fait des changements dd l\'administration de la structure de composante de service, gestion des utilisateurs ou d\'administration de format, les informations affichées dans cette section peuvent ne plus être exactes même si la page doit être rafraîchie. La meilleure façon de le faire est de vous déconnecter, puis vous connecter à nouveau.', - 'format_editor_delete_button_confirm' => 'Etes-vous sûr que vous voulez supprimer ce format?', - 'format_editor_delete_button_confirm_perm' => 'Ce format sera définitivement supprimé!', - 'format_editor_reserved_key' => 'Cette clé est réservée à un format de type "lieu" - veuillez utiliser quelque chose de différent.', - 'min_password_length_string' => 'Le mot de passe est trop court! Il doit être au moins contenir au moins %d caractères!', - 'AJAX_Auth_Failure' => 'Échec de l\'autorisation pour cette opération. Il peut y avoir un problème avec la configuration du serveur.', - 'Maps_API_Key_Warning' => 'Il y a un problème avec API Key Google maps.', - 'Observer_Link_Text' => 'Navigateur pour les réunions', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Cannot Display Data -Unauthorized', - 'Value_Prompts' => array( - 'id_bigint' => 'ID de Réuniom', - 'worldid_mixed' => 'ID de Services Mondiaux', - 'service_body' => 'Composante de structure de service', - 'service_bodies' => 'Composantes de structure de service', - 'weekdays' => 'Jours de la semaine', - 'weekday' => 'Cette réunion a lieu à tous les', - 'start_time' => 'Laréunion débute à', - 'duration_time' => 'La réunion dure', - 'location' => 'Ville', - 'duration_time_hour' => 'Heure', - 'duration_time_hours' => 'Heures', - 'duration_time_minute' => 'Minute', - 'duration_time_minutes' => 'Minutes', - 'lang_enum' => 'Language', - 'formats' => 'Formats', - 'distance' => 'Distance du Centre', - 'generic' => 'Réunion NA', - 'close_title' => 'Fermez cette fenêtre Détail de Réunion', - 'close_text' => 'Fermer la fenêtre', - 'map_alt' => 'Carte de la réunion', - 'map' => 'Suivez ce lien pour la carte', - 'title_checkbox_unpub_meeting' => 'Cette rencontre n\'est pas publiée. Il ne peut pas être vu par des recherches régulières.', - 'title_checkbox_copy_meeting' => 'Cette réunion est une copie d\'une autre réunion. Il est également non publié. Elle ne peut être vue par recherches régulières.' - ), - 'world_format_codes_prompt' => 'Format SMNA:', - 'world_format_codes' => array( - '' => 'Aucun', - 'OPEN' => 'Ouvert', - 'CLOSED' => 'Fermée', - 'WCHR' => 'Fauteuil Roulant', - 'BEG' => 'Débutant/Nouveau', - 'BT' => 'Texte de base', - 'CAN' => 'À la Chandelle', - 'CPT' => '12 Concepts', - 'CW' => 'Enfants bienvenus', - 'DISC' => 'Discussion', - 'GL' => 'Gays/Lesbiennes', - 'IP' => 'Étude de pamphlet IP', - 'IW' => 'Étude du livre « Ça marche »', - 'JFT' => 'Étude du livre « Juste pour aujourd’hui »', - 'LC' => 'Étude du livre « Vivre abstinent »', - 'LIT' => 'Étude de littérature', - 'M' => 'Hommes', - 'MED' => 'Méditation', - 'NS' => 'Non-Smoking', - 'QA' => 'Questions et réponses', - 'RA' => 'Accès limité', - 'S-D' => 'Speaker/Discussion', // Same in french - 'SMOK' => 'Fumeurs', - 'SPK' => 'Partage', - 'STEP' => 'Étapes', - 'SWG' => 'Étude du « Guide de travail sur les étapes »', - 'TOP' => 'Thématique', - 'TRAD' => 'Traditions', - 'VAR' => 'Formats variés', - 'W' => 'Femmes', - 'Y' => 'Jeunes', - 'LANG' => 'Langue étrangère', - 'GP' => 'Principes de base', - 'NC' => 'Pas d\'enfants', - 'CH' => 'Fermé pour les vacances', - 'VM' => 'virtuelle', - 'HYBR' => 'virtuelle et physique', - 'TC' => 'Temporairement fermée', - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'Aucun', - 'FC1' => 'Format de la réunion (Speaker, Étude de la littérature, etc.)', - 'FC2' => 'Code d\'emplacement (Accessible en fauteuil roulant, Parking limité, etc.)', - 'FC3' => 'Common Needs and Restrictions (Réunion hommes, LGBTQI+, Pas d\'enfants, etc.)', - 'O' => 'Présence de non-dépendants (Ouvert, Fermé)', - 'LANG' => 'Langue', - 'ALERT' => 'Le format doit être particulièrement mis en évidence (Nécéssité d\'être clean, etc.)', - ), - 'cookie_monster' => 'Ce site contient un cookie pour emmagasiner l\'information de votre langue de préférée.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Time', - 'duration_time' => 'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formats', - 'lang_enum' => 'Language', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Published', - 'email_contact' => 'Email Contact', - ), - 'check_all' => 'Tout cocher', - 'uncheck_all' => 'Tout décocher', - 'automatically_calculated_on_save' => 'Calculé automatiquement lors de la sauvegarde.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'La réunion a été changé.', - '__THE_MEETING_WAS_CREATED__' => 'La réunion a été créé.', - '__THE_MEETING_WAS_DELETED__' => 'La réunion a été supprimée.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'La réunion a été restaurée pour une version précédente.', - - '__THE_FORMAT_WAS_CHANGED__' => 'Le format a été changé.', - '__THE_FORMAT_WAS_CREATED__' => 'Le format a été créé.', - '__THE_FORMAT_WAS_DELETED__' => 'Le format a été supprimé.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Le format a été restauré pour une version précédente.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'La composante de structure de service a été modifiée.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'La composante de structure a été créée.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'La composante de structure a été supprimée.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'La composante de structure a été restaurée pour une version précédente.', - - '__THE_USER_WAS_CHANGED__' => 'L\'Utilisateur a été changé.', - '__THE_USER_WAS_CREATED__' => 'L\'Utilisateur a été créé.', - '__THE_USER_WAS_DELETED__' => 'L\'Utilisateur a été supprimé.', - '__THE_USER_WAS_ROLLED_BACK__' => 'L\'Utilisateur a été restauré pour une version précédente.', - - '__BY__' => 'par', - '__FOR__' => 'pour' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'a été modifié à partir de', - 'to' => 'à', - 'was_changed' => 'a été changé', - 'was_added_as' => 'a été ajouté en tant que', - 'was_deleted' => 'a été supprimée', - 'was_published' => 'La réunion a été publiée', - 'was_unpublished' => 'La réunion n\'a pas été publiée', - 'formats_prompt' => 'Le format de la réunion', - 'duration_time' => 'La durée de la réunion', - 'start_time' => 'Début de la réuniob', - 'longitude' => 'Longitude de la réunion', - 'latitude' => 'Latitude de la réunion', - 'sb_prompt' => 'La réunion a changé sa composante de structure de service de', - 'id_bigint' => 'ID de réunion', - 'lang_enum' => 'Langue de réunion', - 'worldid_mixed' => 'ID mondial du groupe', // TODO: translate The World Committee Code // Done - 'weekday_tinyint' => 'Le jour de la semaine où la réunion se rassemble', - 'non_existent_service_body' => 'La composante de structure de service n\'existe plus', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/index.htm b/src/legacy/local_server/server_admin/lang/index.htm deleted file mode 100755 index e69de29bb..000000000 diff --git a/src/legacy/local_server/server_admin/lang/it/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/it/data_transfer_strings.php deleted file mode 100755 index 624c60e08..000000000 --- a/src/legacy/local_server/server_admin/lang/it/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/it/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/it/install_wizard_strings.php deleted file mode 100755 index 4c0bf128f..000000000 --- a/src/legacy/local_server/server_admin/lang/it/install_wizard_strings.php +++ /dev/null @@ -1,138 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API', - 'Page_2_Heading' => 'Set The Initial Location For Meetings', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => 'The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/it/name.txt b/src/legacy/local_server/server_admin/lang/it/name.txt deleted file mode 100755 index c90c67343..000000000 --- a/src/legacy/local_server/server_admin/lang/it/name.txt +++ /dev/null @@ -1 +0,0 @@ -Italiano \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/it/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/it/server_admin_strings.inc.php deleted file mode 100644 index 1fccdd298..000000000 --- a/src/legacy/local_server/server_admin/lang/it/server_admin_strings.inc.php +++ /dev/null @@ -1,488 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Il mio account',//'My Account', - 'account_name_label' => 'Nome del mio account:',//'My Account Name:', - 'account_login_label' => 'Il mio login:',//'My Login:', - 'account_type_label' => 'Io sono un:',//'I Am A:', - 'account_type_1' => 'Amministratore del server',//'Server Administrator', - 'account_type_2' => 'Amministratore della struttura di servizio',//'Service Body Administrator', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Patetico perdente che non dovrebbe neanche aver accesso a questa pagina - L\'Autore del software ha miseramente fallito!',//'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Osservatore nella struttura di servizio',//'Service Body Observer', - 'change_password_label' => 'Cambia la mia password in:',//'Change My Password To:', - 'change_password_default_text' => 'Ignoralo se non vuoi cambiare la tua password',//'Leave This Alone If You Don\'t Want To Change Your Password', - 'account_email_label' => 'Il mio indirizzo email:',//'My Email Address:', - 'email_address_default_text' => 'Inserisci un indirizzo email',//'Enter An Email Address', - 'account_description_label' => 'La mia descrizione:',//'My Description:', - 'account_description_default_text' => 'Inserisci una descrizione',//'Enter A Description', - 'account_change_button_text' => 'Modifica le impostazioni del mio account',//'Change My Account Settings', - 'account_change_fader_success_text' => 'Le informazioni dell\'account sono state modificate con successo',//'The Account Information Was Successfully Changed', - 'account_change_fader_failure_text' => 'Le informazioni dell\'account non sono state modificate',//'The Account Information Was Not Changed', - 'meeting_editor_disclosure' => 'Editor delle riunioni',//'Meeting Editor', - 'meeting_editor_already_editing_confirm' => 'Stai modificando un\'altra riunione. Vuoi perdere tutte le modifiche fatte in quella riunione?',//'You are currently editing another meeting. Do you want to lose all changes in that meeting?', - 'meeting_change_fader_success_text' => 'La riunione è stata modificata con successo',//'The Meeting Was Successfully Changed', - 'meeting_change_fader_failure_text' => 'La riunione non è stata modificata',//'The Meeting Was Not Changed', - 'meeting_change_fader_success_delete_text' => 'La riunione è stata cancellata con successo',//'The Meeting Was Successfully Deleted', - 'meeting_change_fader_fail_delete_text' => 'La riunione non è stata cancellata',//'The Meeting Was Not Deleted', - 'meeting_change_fader_success_add_text' => 'La nuova riunione è stata aggiunta con successo',//'The New Meeting Was Successfully Added', - 'meeting_change_fader_fail_add_text' => 'La nuova riunione non è stata aggiunta',//'The New Meeting Was Not Added', - 'meeting_text_input_label' => 'Ricerca testuale:',//'Search For Text:', - 'access_service_body_label' => 'Ho accesso a:',//'I Have Access to:', - 'meeting_text_input_default_text' => 'Inserisci il testo da cercare',//'Enter Some Search Text', - 'meeting_text_location_label' => 'Questa è una località o un codice di avviamento postale',//'This is a Location or PostCode', - 'meeting_search_weekdays_label' => 'Cerca nei giorni selezionati:',//'Search For Selected Weekdays:', - 'meeting_search_weekdays_names' => array('Tutti', 'Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'),//( 'All', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ), - 'meeting_search_service_bodies_label' => 'Cerca nelle strutture di servizio selezionate:',//'Search In Selected Service Bodies:', - 'meeting_search_start_time_label' => 'Cerca per orario di inizio riunione:',//'Search By Meeting Start Time:', - 'meeting_search_start_time_all_label' => 'In ogni momento',//'Any Time', - 'meeting_search_start_time_morn_label' => 'Mattina',//'Morning', - 'meeting_search_start_time_aft_label' => 'Pomeriggio',//'Afternoon', - 'meeting_search_start_time_eve_label' => 'Sera',//'Evening', - 'meeting_search_no_results_text' => 'Nessuna riunione trovata',//'No Meetings Found', - 'meeting_editor_tab_specifier_text' => 'Cerca per riunione',//'Search For Meetings', - 'meeting_editor_tab_editor_text' => 'Modifica riunione', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Crea una nuova riunione',//'Create A New Meeting', - 'meeting_editor_location_map_link' => 'Mappa delle località',//'Location Map', - 'meeting_editor_screen_match_ll_button' => 'Imposta longitudine e latitudine sull\'indirizzo',//'Set Longitude and Latitude to Address', - 'meeting_editor_screen_default_text_prompt' => 'Inserisci del testo o un numero',//'Enter Some Text or a Number', - 'meeting_is_published' => 'La riunione è pubblicata',//'Meeting is Published', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Nome della riunione:',//'Meeting Name:', - 'meeting_editor_screen_meeting_name_prompt' => 'Inserisci un nome per la riunione',//'Enter A Meeting Name', - 'meeting_editor_screen_meeting_weekday_label' => 'Giorno della settimana:',//'Weekday:', - 'meeting_editor_screen_meeting_start_label' => 'Orario di inizio della riunione:',//'Meeting Start Time:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:',//'Meeting Time Zone:`, - 'meeting_editor_screen_meeting_am_label' => 'AM',//'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM',//'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Mezzogiorno',//'Noon', - 'meeting_editor_screen_meeting_midnight_label' => 'Mezzanotte',//Midnight', - 'meeting_editor_screen_meeting_duration_label' => 'Durata:',//'Duration:', - 'meeting_editor_screen_meeting_oe_label' => 'Senza orario di fine',//'Open-Ended', - 'meeting_editor_screen_meeting_cc_label' => 'Codice del comitato mondiale:',//'World Committee Code:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Contatto email della riunione:',//'Meeting Email Contact:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Inserisci un email di contatto specifica solo per questa riunione',//'Enter An Email for A Contact Specific Only to This Meeting', - 'meeting_editor_screen_meeting_sb_label' => 'Struttura di servizio:',//'Service Body:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Nessuna struttura di servizio selezionata',//'No Service Body Selected', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitudine:',//'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Inserisci una longitudine',//'Enter A Longitude', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitudine:',//'Latitude:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Inserisci una latitudine',//'Enter A Latitude', - 'meeting_editor_screen_meeting_location_label' => 'Luogo:',//'Location:', - 'meeting_editor_screen_meeting_location_prompt' => 'Inserisci un nome per il luogo della riunione (come il nome dell\'edificio)',//Enter A Location Name (Like a Building Name)',//Enter A Location Name (Like a Building Name)', - 'meeting_editor_screen_meeting_info_label' => 'Informazioni extra:',//'Extra Info:', - 'meeting_editor_screen_meeting_info_prompt' => 'Inserisci ogni altra informazione aggiuntiva sul luogo',//'Enter Any Additional Location Information', - 'meeting_editor_screen_meeting_street_label' => 'Indirizzo:',//'Street Address:', - 'meeting_editor_screen_meeting_street_prompt' => 'Inserisci un indirizzo',//'Enter A Street Address', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Zona, rione:',//'Neighborhood:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Inserisci una zona o un rione (non un quartiere o altro distretto cittadino)',//'Enter A Neighborhood (Not Borough or City Subsection)', - 'meeting_editor_screen_meeting_borough_label' => 'Quartiere/Frazione:',//'Borough/City Subsection:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Inserisci un quartiere o una frazione (non zona o rione)',//'Enter A Borough or City Subsection (Not Neighborhood)', - 'meeting_editor_screen_meeting_city_label' => 'Città:',//'City/Town:', - 'meeting_editor_screen_meeting_city_prompt' => 'Inserisci il nome della città (non di provincia o quartiere)',//'Enter A City or Town Name (Not County or Borough)', - 'meeting_editor_screen_meeting_county_label' => 'Provincia:',//'County/Sub-Province:', - 'meeting_editor_screen_meeting_county_prompt' => 'Inserisci il nome della provincia',//'Enter A County or Sub-Province Name', - 'meeting_editor_screen_meeting_state_label' => 'Regione:',//'State/Province:', - 'meeting_editor_screen_meeting_state_prompt' => 'Inserisci il nome della regione',//'Enter A State or Province Name', - 'meeting_editor_screen_meeting_zip_label' => 'Codice di avviamento postale (CAP):',//'Zip Code/Postal Code:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Inserisci il CAP',//'Enter A Postal Code', - 'meeting_editor_screen_meeting_nation_label' => 'Nazione:',//'Nation:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Inserisci il nome della nazione',//'Enter The Nation Name', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Cerca:',//'Look For:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Solo riunioni pubblicate',//'Published Meetings Only', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Solo riunioni non pubblicate',//'Unpublished Meetings Only', - 'meeting_editor_screen_meeting_visibility_advice' => 'Questo non è mai visualizzato nelle normali ricerche delle riunioni.',//'This is never displayed in normal meeting searches.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Tutte le riunioni',//'All Meetings', - 'meeting_editor_screen_meeting_create_button' => 'Crea una nuova riunione',//'Create A New Meeting', - 'meeting_editor_screen_delete_button' => 'Elimina questa riunione',//'Delete This Meeting', - 'meeting_editor_screen_delete_button_confirm' => 'Sei sicuro di voler eliminare questa riunione?',//'Are you sure that you want to delete this meeting?', - 'meeting_editor_screen_cancel_button' => 'Cancella',//'Cancel', - 'logout' => 'Esci',//'Sign Out', - 'meeting_editor_screen_cancel_confirm' => 'Sei sicuro di voler annullare la modifica di questa riunione e perdere tutte le variazioni apportate?',//'Are you sure that you want to cancel editing this meeting, and lose all changes?', - 'meeting_lookup_failed' => 'Ricerca dell\'indirizzo non riuscita.',//'The address lookup failed.', - 'meeting_lookup_failed_not_enough_address_info' => 'Nell\'indirizzo non ci sono elementi sufficienti per fare la ricerca.',//'There is not enough valid address information to do a lookup.', - 'meeting_create_button_name' => 'Salva come nuova riunione',//'Save This As A New Meeting', - 'meeting_saved_as_a_copy' => 'Salva questa riunione come copia (crea una nuova riunione)',//'Save This Meeting As A Copy (Creates A New Meeting)', - 'meeting_save_buttonName' => 'Salva le modifiche a questa riunione',//'Save the Changes to This Meeting', - 'meeting_editor_tab_bar_basic_tab_text' => 'Base',//'Basic', - 'meeting_editor_tab_bar_location_tab_text' => 'Località',//'Location', - 'meeting_editor_tab_bar_format_tab_text' => 'Formato',//'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Altro',//'Other', - 'meeting_editor_tab_bar_history_tab_text' => 'Cronologia',//'History', - 'meeting_editor_result_count_format' => '%d riunioni trovate',//'%d Meetings Found', - 'meeting_id_label' => 'ID della riunione:',//'Meeting ID:', - 'meeting_editor_default_zoom' => '13',//'13', - 'meeting_editor_default_weekday' => '2',//'2', - 'meeting_editor_default_start_time' => '20:30:00',//'20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox (BMLT)',//'Basic Meeting List Toolbox', - 'login_underbanner' => 'Console di amministrazione del Root Server',//'Root Server Administration Console', - 'login' => 'ID di autenticazione',//'Login ID', - 'password' => 'Password',//'Password', - 'button' => 'Entra',//'Log In', - 'cookie' => 'Devi abilitare i cookie per amministrare questo server.',//'You must enable cookies in order to administer this server.', - 'noscript' => 'Non puoi amministrare questo sito senza JavaScript.',//'You cannot administer this site without JavaScript.', - 'title' => 'Per favore, autenticati per amministrare il server.',//'Please log in to administer the server.', - 'edit_Meeting_object_not_found' => 'ERRORE. La riunione non è stata trovata.',//'ERROR: The meeting was not found.', - 'edit_Meeting_object_not_changed' => 'ERRORE. La riunione non è stata modificata.',//'ERROR: The meeting was not changed.', - 'edit_Meeting_auth_failure' => 'Non sei autorizzato a modificare questa riunione.',//'You are not authorized to edit this meeting.', - 'not_auth_1' => 'NON AUTORIZZATO',//'NOT AUTHORIZED', - 'not_auth_2' => 'Non sei autorizzato ad amministrare questo server.',//'You are not authorized to administer this server.', - 'not_auth_3' => 'C\'è stato un problema con il nome utente o la password che hai inserito.',//'There was a problem with the user name or password that you entered.', - 'email_format_bad' => 'L\'indirizzo email che hai immesso non era formattato correttamente.',//'The email address that you entered was not formatted correctly.', - 'history_header_format' => '
%sda %s
', - 'history_no_history_available_text' => '

Nessuna cronologia disponibile per questa riunione

', /// No History Available For This Meeting - 'service_body_editor_disclosure' => 'Amministrazione della struttura di servizio',//'Service Body Administration', - 'service_body_change_fader_success_text' => 'La struttura di servizio è stata modificata con successo',//'The Service Body Was Successfully Changed', - 'service_body_change_fader_fail_text' => 'Modifica alla struttura di servizio non riuscita',//'The Service Body Change Failed', - 'service_body_editor_screen_sb_id_label' => 'ID:',//'ID:', - 'service_body_editor_screen_sb_name_label' => 'Nome:',//'Name:', - 'service_body_name_default_prompt_text' => 'Inserisci il nome di questa struttura di servizio',//'Enter the Name of This Service Body', - 'service_body_parent_popup_label' => 'Struttura di servizio genitore:',//'Service Body Parent:', - 'service_body_parent_popup_no_parent_option' => 'Nessun genitore (primo livello)',//'No Parent (Top-Level)', - 'service_body_editor_screen_sb_admin_user_label' => 'Amministratore primario:',//'Primary Admin:', - 'service_body_editor_screen_sb_admin_description_label' => 'Descrizione:',//'Description:', - 'service_body_description_default_prompt_text' => 'Inserisci la descrizione di questa struttura di servizio',//'Enter A Description of This Service Body', - 'service_body_editor_screen_sb_admin_email_label' => 'Contatto email:',//'Contact Email:', - 'service_body_email_default_prompt_text' => 'Inserisci il contatto email di questa struttura di servizio',//'Enter A Contact Email Address for This Service Body', - 'service_body_editor_screen_sb_admin_uri_label' => 'Indirizzo (URL) del sito web:',//'Web Site URL:', - 'service_body_uri_default_prompt_text' => 'Inserisci l\'indirizzo (URL) del sito web di questa struttura di servizio',//'Enter A Web Site URL for This Service Body', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Lista completa delle riunioni:',//'Full Meeting List Editors:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Questi utenti possono modificare tutte le riunioni di questa struttura di servizio.',//'These Users Can Edit Any Meetings In This Service Body.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Editor del BMLT:',//'Basic Meeting List Editors:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Questi utenti possono modificare tutte le riunioni di questa struttura di servizio, ma solo se non sono ancora state pubblicate.',//'These Users Can Edit Any Meetings In This Service Body, But Only If They Are Unpublished.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Osservatori:',//'Observers:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Questi utenti possono vedere informazioni nascoste (come gli indirizzi email), ma non possono modificare niente.',//'These Users Can See Hidden Info (Like Email Addresses), But Cannot Edit Anything.', - 'service_body_dirty_confirm_text' => 'Hai fatto delle modifiche a questa struttura di servizio. Vuoi perdere queste variazioni?',//'You have made changes to this Service Body. Do you want to lose your changes?', - 'service_body_save_button' => 'Salva queste modifiche alla struttura di servizio',//'Save These Service Body Changes', - 'service_body_create_button' => 'Crea questa struttura di servizio',//'Create This Service Body', - 'service_body_delete_button' => 'Cancella questa struttura di servizio',//'Delete This Service Body', - 'service_body_delete_perm_checkbox' => 'Cancella definitivamente questa struttura di servizio',//'Delete This Service Body Permanently', - 'service_body_delete_button_confirm' => 'Sei sicuro di voler cancellare questa struttura di servizio? Make sure that all meetings are either removed or transferred to another service body before performing this function.',//'Are you sure that you want to delete this Service body?', - 'service_body_delete_button_confirm_perm' => 'Questa struttura di servizio sarà cancellata definitivamente!',//'This Service body will be deleted permanently!', - 'service_body_change_fader_create_success_text' => 'Struttura di servizio creata con successo',//'The Service Body Was Successfully Created', - 'service_body_change_fader_create_fail_text' => 'Creazione della struttura di servizio non riuscita',//'The Service Body Create Failed', - 'service_body_change_fader_delete_success_text' => 'Struttura di servizio cancellata con successo',//'The Service Body Was Successfully Deleted', - 'service_body_change_fader_delete_fail_text' => 'Creazione della struttura di servizio non riuscita',//'The Service Body Delete Failed', - 'service_body_change_fader_fail_no_data_text' => 'Modifica alla struttura di servizio non riuscita per mancanza di dati',//'The Service Body Change Failed, Because There Was No Data Supplied', - 'service_body_change_fader_fail_cant_find_sb_text' => 'La modifica alla struttura di servizio non è riuscita perché la struttura non è stata trovata',//'The Service Body Change Failed, Because The Service Body Was Not Found', - 'service_body_change_fader_fail_cant_update_text' => 'La modifica alla struttura di servizio non è riuscita perché la struttura non era aggiornata',//'The Service Body Change Failed, Because The Service Body Was Not Updated', - 'service_body_change_fader_fail_bad_hierarchy' => 'La modifica alla struttura di servizio non è riuscita perché il proprietario della struttura di servizio selezionato è sotto questa struttura di servizio e non può essere usato',//'The Service Body Change Failed, Because The Selected Owner Service Body Is Under This Service Body, And Cannot Be Used', - 'service_body_cancel_button' => 'Ripristina l\'originale',//'Restore To Original', - 'service_body_editor_type_label' => 'Tipo di struttura di servizio:',//'Service Body Type:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Gruppo',//'Group', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op',//'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Comitato di servizio d\'area',//'Area Service Committee', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Conferenza dei servizi di regione',//'Regional Service Conference', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Conferenza dei servizi mondiali',//'World Service Conference', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Area metropolitana',//'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Forum zonale',//'Zonal Forum', - 'service_body_editor_screen_helpline_label' => 'Telefono:', - 'service_body_editor_screen_helpline_prompt' => 'Inserisci il numero di telefono', - 'service_body_editor_uri_naws_format_text' => 'Scarica le riunioni di questa struttura di servizio come file compatibile con i Servizi Mondiali di NA',//'Get The Meetings For This Service Body As A NAWS-Compatible File', - 'edit_Meeting_meeting_id' => 'ID della riunione:',//'Meeting ID:', - 'service_body_editor_create_new_sb_option' => 'Crea una nuova struttura di servizio',//'Create A New Service Body', - 'service_body_editor_screen_world_cc_label' => 'Codice del comitato mondiale:',//'World Committee Code:', - 'service_body_editor_screen_world_cc_prompt' => 'Inserisci un codice per il comitato mondiale',//'Enter A World Committee Code', - 'user_editor_disclosure' => 'Amministrazione dell\'utente',//'User Administration', - 'user_editor_create_new_user_option' => 'Crea un nuovo utente',//'Create A New User', - 'user_editor_screen_sb_id_label' => 'ID:',//'ID:', - 'user_editor_account_login_label' => 'Autenticazione dell\'utente:',//'User Login:', - 'user_editor_login_default_text' => 'Inserisci l\'autenticazione dell\'utente',//'Enter the User Login', - 'user_editor_account_type_label' => 'L\'utente è un:',//'User Is A:', - 'user_editor_user_owner_label' => 'Owned By: ', // TODO translate - 'user_editor_account_type_1' => 'Amministratore del server',//'Server Administrator', - 'user_editor_account_type_2' => 'Amministratore della struttura di servizio',//'Service Body Administrator', - 'user_editor_account_type_3' => 'Editor nella struttura di servizio',//'Service Body Editor', - 'user_editor_account_type_5' => 'Osservatore nella struttura di servizio',//'Service Body Observer', - 'user_editor_account_type_4' => 'Disattiva utente',//'Disabled User', - 'user_editor_account_name_label' => 'Nome utente:',//'User Name:', - 'user_editor_name_default_text' => 'Inserisci il nome utente',//'Enter the User Name', - 'user_editor_account_description_label' => 'Descrizione:',//'Description:', - 'user_editor_description_default_text' => 'Inserisci la descrizione dell\'utente',//'Enter the User Description', - 'user_editor_account_email_label' => 'Email:',//'Email:', - 'user_editor_email_default_text' => ' l\'email dell\'utente',//'Enter the User Email', - 'user_change_fader_success_text' => 'L\'utente è stato modificato con successo',//'The User Was Successfully Changed', - 'user_change_fader_fail_text' => 'La modifica all\'utente è fallita',//'The User Change Failed', - 'user_change_fader_create_success_text' => 'L\'utente è stato creato con successo',//'The User Was Successfully Created', - 'user_change_fader_create_fail_text' => 'La creazione dell\'utente è fallita',//'The User Create Failed', - 'user_change_fader_create_fail_already_exists' => 'Esiste già un profilo per l\'utente che stai cercando di creare.',//'A Login For The User That You Are Trying To Create Already Exists.', - 'user_change_fader_delete_success_text' => 'L\'utente è stato eliminato con successo',//'The User Was Successfully Deleted', - 'user_change_fader_delete_fail_text' => 'L\'eliminazione dell\'utente è fallita',//'The User Delete Failed', - 'user_save_button' => 'Salva le modifiche per questo utente',//'Save the Changes to This User', - 'user_create_button' => 'Crea nuovo utente', - 'user_cancel_button' => 'Ripristina l\'originale', - 'user_delete_button' => 'Cancella questo utente', - 'user_delete_perm_checkbox' => 'Cancella definitivamente questo utente', - 'user_password_label' => 'Cambia password per:', - 'user_new_password_label' => 'Imposta password per:', - 'user_password_default_text' => 'Lascialo così a meno che non voglia cambiare la password', /// 'Leave This Alone, Unless You Want To Change The Password' - 'user_new_password_default_text' => 'Devi inserire un password per il nuovo utente', /// 'You Must Enter A Password For A new User', - 'user_dirty_confirm_text' => 'Hai fatto delle modifiche a questo utente. Vuoi perdere queste modifiche?', /// 'You have made changes to this User. Do you want to lose your changes?', - 'user_delete_button_confirm' => 'Sei sicuro di voler cancellare questo utente?', /// 'Are you sure that you want to delete this user?', - 'user_delete_button_confirm_perm' => 'Questo utente sarà cancellato definitivamente!', /// 'This user will be deleted permanently!', - 'user_create_password_alert_text' => 'I nuovi utenti devono avere una password. Non hai fornito una password per questo utente.', /// 'New users must have a password. You have not supplied a password for this user.', - 'user_change_fader_fail_no_data_text' => 'Modifica utente non riuscita per mancanza di dati', /// 'The User Change Failed, Because There Was No Data Supplied' - 'user_change_fader_fail_cant_find_sb_text' => 'La modifica dell\'utente non è riuscita perché l\'utente non è stato trovato', /// 'The User Change Failed, Because The User Was Not Found' - 'user_change_fader_fail_cant_update_text' => 'La modifica dell\'utente non è riuscita perché l\'utente non era aggiornato', /// 'The User Change Failed, Because The User Was Not Updated' - 'format_editor_disclosure' => 'Formato amministrazione', /// 'Format Administration' - 'format_change_fader_change_success_text' => 'Formato cambiato con successo', /// 'The Format Was Successfully Changed' - 'format_change_fader_change_fail_text' => 'Modifica al formato non riuscita', /// 'The Format Change Failed' - 'format_change_fader_create_success_text' => 'Formato creato con successo', /// 'The Format Was Successfully Created' - 'format_change_fader_create_fail_text' => 'Creazione del formato non riuscita', /// 'The Format Create Failed' - 'format_change_fader_delete_success_text' => 'Il formato è stato cancellato con successo', /// 'The Format Was Successfully Deleted' - 'format_change_fader_delete_fail_text' => 'Cancellazione del formato non riuscita', /// 'The Format Delete Failed' - 'format_change_fader_fail_no_data_text' => 'Modifica del formato non riuscita per mancanza di dati', /// 'The Format Change Failed, Because There Was No Data Supplied' - 'format_change_fader_fail_cant_find_sb_text' => 'La modifica del formato non è riuscita perché il formato non è stato trovato', /// 'The Format Change Failed, Because The Format Was Not Found' - 'format_change_fader_fail_cant_update_text' => 'La modifica del formato non è riuscita perché il formato non era aggiornato', /// 'The Format Change Failed, Because The Format Was Not Updated' - 'format_editor_name_default_text' => 'Inserisci una descrizione molto breve', /// 'Enter A Very Short Description' - 'format_editor_description_default_text' => 'Inserisci una descrizione più dettagliata', /// 'Enter A More Detailed Description' - 'format_editor_create_format_button_text' => 'Crea un nuovo formato', /// 'Create New Format' - 'format_editor_cancel_create_format_button_text' => 'Cancella', /// 'Cancel' - 'format_editor_create_this_format_button_text' => 'Crea questo formato', /// 'Create This Format' - 'format_editor_change_format_button_text' => 'Modifica questo formato', /// 'Change This Format' - 'format_editor_delete_format_button_text' => 'Cancella questo formato', /// 'Delete This Format' - 'format_editor_reset_format_button_text' => 'Ripristina l\'originale', /// 'Restore To Original' - 'need_refresh_message_fader_text' => 'Dovresti aggiornare questa pagina prima di usare questa sezione', /// 'You Should Refresh This Page Before Using This Section' - 'need_refresh_message_alert_text' => 'Siccome hai fatto delle modifiche all\'amministrazione di questa struttura di servizio, di questo utente o di questo formato, le informazioni visualizzate in questa sezione potrebbero non esser più accurate; per questo la pagina deve essere aggiornata. Il modo più facile di farlo è disconnettersi e rifare nuovamente l\'accesso.', /// 'Because you have made changes in the Service Body Administration, User Administration or Format Administration, the information displayed in this section may no longer be accurate, so the page needs to be refreshed. The easiest way to do this, is to Sign Out, then Log In again.' - 'format_editor_delete_button_confirm' => 'Sei sicuro di voler cancellare questo formato?', /// 'Are you sure that you want to delete this format?' - 'format_editor_delete_button_confirm_perm' => 'Questo formato sarà cancellato definitivamente!', /// 'This format will be deleted permanently!' - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'La password è troppo corta! Deve essere lunga almeno %d caratteri!', /// 'The password is too short! It must be at least %d characters long!' - 'AJAX_Auth_Failure' => 'Autorizzazione fallita per questa operazione. Ci potrebbe essere un problema con la configurazione del server.', /// 'Authorization failed for this operation. There may be a problem with the server configuration.' - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Importazione dati delle riunioni (ATTENZIONE: i dati correnti saranno sostituiti!)', /// 'Import Meeting Data (WARNING: Replaces Current Data!)' - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Non è possibile mostrare dati (manca l\'autorizzazione)', /// 'Cannot Display Data -Unauthorized' - 'Value_Prompts' => array( - 'id_bigint' => 'ID riunione', /// 'Meeting ID' - 'worldid_mixed' => 'ID dei Servizi Mondiali di NA', /// 'World Services ID', - 'service_body' => 'Struttura di servizio', /// 'Service Body', - 'service_bodies' => 'Strutture di servizio', /// 'Service Bodies', - 'weekdays' => 'Giorni della settimana', /// 'Weekdays', - 'weekday' => 'La riunione si tiene ogni', /// 'Meeting Gathers Every', - 'start_time' => 'La riunione inizia alle ore', /// 'Meeting Starts at', - 'duration_time' => 'La riunione dura', /// 'Meeting Lasts', - 'location' => 'Località', /// 'Location', - 'duration_time_hour' => 'Ora', /// 'Hour', - 'duration_time_hours' => 'Ore', /// 'Hours', - 'duration_time_minute' => 'Minuto', /// 'Minute', - 'duration_time_minutes' => 'Minuti', /// 'Minutes', - 'lang_enum' => 'Lingua', /// 'Language', - 'formats' => 'Formato', /// 'Formats', - 'distance' => 'Distanza dal centro', /// 'Distance from Center', - 'generic' => 'Riunione NA', /// 'NA Meeting', - 'close_title' => 'Chiudi questa finestra di dettaglio della riunione', /// 'Close This Meeting Detail Window', - 'close_text' => 'Chiudi finestra', /// 'Close Window', - 'map_alt' => 'Mappa della riunione', /// 'Map to Meeting', - 'map' => 'Segui questo link per la mappa', /// 'Follow This Link for A Map', - 'title_checkbox_unpub_meeting' => 'Questa riunione non è pubblicata e non può essere vista nelle normali ricerche.', /// 'This meeting is unpublished. It cannot be seen by regular searches.', - 'title_checkbox_copy_meeting' => 'Questa riunione è il duplicato di un\'altra ed è anche non pubblicata; inoltre, non può essere vista nelle normali ricerche.' /// 'This meeting is a duplicate of another meeting. It is also unpublished. It cannot be seen by regular searches.' - ), - 'world_format_codes_prompt' => 'NAWS Format:', - 'world_format_codes' => array( - '' => 'Nessuno', - 'OPEN' => 'Aperta', - 'CLOSED' => 'Chiusa', - 'WCHR' => 'Accessibile ai disabili', - 'BEG' => 'Principianti/Nuovi venuti', - 'BT' => 'Testo base', - 'CAN' => 'Lume di candela', - 'CPT' => 'Dodici Concetti', - 'CW' => 'Ammessi i bambini', - 'DISC' => 'Discussione/Participazione', - 'GL' => 'Gay/Lesbiche', - 'IP' => 'Studio dei pamphlet', - 'IW' => 'Studio di Funziona: come e perché', - 'JFT' => 'Studio del Solo per oggi', - 'LC' => 'Vivere puliti', - 'LIT' => 'Studio della letteratura', - 'M' => 'Uomini', - 'MED' => 'Meditazione', - 'NS' => 'Non-Smoking', // TODO translate - 'QA' => 'Domande e risposte', - 'RA' => 'Accesso limitato', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Fumatori', - 'SPK' => 'Oratore (sedia)', - 'STEP' => 'Passi', - 'SWG' => 'Studio della Guida al lavoro sui passi', - 'TOP' => 'Argomento', - 'TRAD' => 'Tradizioni', - 'VAR' => 'Formato variabile', - 'W' => 'Donne', - 'Y' => 'Giovani', - 'LANG' => 'Lingue alternate', - 'GP' => 'Guiding Principles', // TODO translate - 'NC' => 'No Children', // TODO translate - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', // TODO: Translate - 'format_type_codes' => array( - '' => 'None', // TODO: Translate - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', // TODO: Translate - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', // TODO: Translate - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', // TODO: Translate - 'O' => 'Attendance by non-addicts (Open, Closed)', // TODO: Translate - 'LANG' => 'Language', // TRANSLATE - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)',// TODO: Translate - ), - 'cookie_monster' => 'Questo sito usa dei cookie per conservare le impostazioni della tua lingua preferita.',//'This site uses a cookie to store your preferred language.', - 'main_prompts' => array( - 'id_bigint' => 'ID',//'ID', - 'worldid_mixed' => 'ID mondiale',//'World ID', - 'shared_group_id_bigint' => 'Inutilizzato',//'Unused', - 'service_body_bigint' => 'ID della struttura di servizio',//'Service Body ID', - 'weekday_tinyint' => 'Giorno della settimana',//'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Ora d\'inizio',//'Start Time', - 'duration_time' => 'Durata',//'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formati',//Formats', - 'lang_enum' => 'Lingua',//'Language', - 'longitude' => 'Longitudine',//'Longitude', - 'latitude' => 'Latitudine',//'Latitude', - 'published' => 'Pubblicato',//'Published', - 'email_contact' => 'Contatto email',//'Email Contact', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'La riunione è stata modificata.',//'The meeting was changed.', THEN: created, deleted rolled back... - '__THE_MEETING_WAS_CREATED__' => 'La riunione è stata creata.', - '__THE_MEETING_WAS_DELETED__' => 'La riunione è stata cancellata.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'La riunione è stata riportata a una versione precedente.', - - '__THE_FORMAT_WAS_CHANGED__' => 'Il formato è stato modificato.',//'The format was changed.', THEN: created, deleted rolled back... - '__THE_FORMAT_WAS_CREATED__' => 'Il formato è stato creato.', - '__THE_FORMAT_WAS_DELETED__' => 'Il formato è stato cancellato.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Il formato è stato riportato a una versione precedente.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'La struttura di servizio è stata modificata.',//'The service body was changed.', THEN: created, deleted rolled back... - '__THE_SERVICE_BODY_WAS_CREATED__' => 'La struttura di servizio è stata creata.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'La struttura di servizio è stata cancellata.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'La struttura di servizio è stata riportata a una versione precedente.', - - '__THE_USER_WAS_CHANGED__' => 'L\'utente è stato modificato.',//'The user was changed.', THEN: created, deleted rolled back... - '__THE_USER_WAS_CREATED__' => 'L\'utente è stato creato.', - '__THE_USER_WAS_DELETED__' => 'L\'utente è stato cancellato.', - '__THE_USER_WAS_ROLLED_BACK__' => 'L\'utente è stato riportato a una versione precedente.', - - '__BY__' => 'da',//'by', - '__FOR__' => 'per'//'for' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'è stato modificato da',//was changed from', - 'to' => 'a',//'to', - 'was_changed' => 'è stato modificato',//'was changed', - 'was_added_as' => 'è stato aggiunto come',//'was added as', - 'was_deleted' => 'è stato cancellato',//'was deleted', - 'was_published' => 'La riunione è stata pubblicata',//'The meeting was published', - 'was_unpublished' => 'La riunione non è più pubblicata',//'The meeting was unpublished', - 'formats_prompt' => 'Il formato della riunione',//'The meeting format', - 'duration_time' => 'La durata della riunione',//'The meeting duration', - 'start_time' => 'L\'ora di inizio della riunione',//'The meeting start time', - 'longitude' => 'La longitudine della riunione', - 'latitude' => 'La latitudine della riunione', - 'sb_prompt' => 'La riunione ha modificato la sua struttura di servizio da',//'The meeting changed its Service Body from', - 'id_bigint' => 'ID della riunione',//'The meeting ID', - 'lang_enum' => 'Lingua della riunione',//'The meeting language', - 'worldid_mixed' => 'ID del gruppo condiviso',//'The World Committee Code', - 'weekday_tinyint' => 'Il giorno della settimana in cui si tiene la riunione',//'The day of the week on which the meeting gathers', - 'non_existent_service_body' => 'La struttura di servizio non esiste più',//'Service Body No Longer Exists', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/pl/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/pl/data_transfer_strings.php deleted file mode 100755 index 624c60e08..000000000 --- a/src/legacy/local_server/server_admin/lang/pl/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/pl/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/pl/install_wizard_strings.php deleted file mode 100755 index 8ca9805bd..000000000 --- a/src/legacy/local_server/server_admin/lang/pl/install_wizard_strings.php +++ /dev/null @@ -1,165 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_Type_MySQL_Error' => 'ERROR: Even though you have PDO and you have database drivers installed, none of the are MySQL (the only supported driver)!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_GenericError' => 'There is an error connecting to the database. Please check your database settings.', - 'NoDatabase_Note_ClickHere' => 'Click here to go back to the database set up page.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoDatabase_Note_ServerSettings_ClickHere' => 'Click here to go back to the server settings page.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Maps_API_Key_Valid' => 'Google Maps API Key is valid.', - 'Maps_API_Key_ClickHere' => 'Click here to go back to the Google Maps API Key set up page.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API Settings', - 'Page_2_Heading' => 'Google Maps API Settings', - 'Page_2_API_Key_Prompt' => 'Enter the Google API Key for Geocoding:', - 'Page_2_API_Key_Set_Button' => 'TEST KEY', - 'Page_2_API_Key_Not_Set_Prompt' => 'SET API KEY FIRST', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => ' The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DefaultClosedStatus' => 'Meetings Are Considerd "CLOSED" by Default:', - 'DefaultClosedStatusExtraText' => 'This primarily affects the export to NAWS.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'SemanticAdminLabel' => 'Enable Semantic Administration:', - 'SemanticAdminExtraText' => 'If not checked, then all administration must be done via the Root Server login (No apps).', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - 'EmailContactAdminEnableLabel' => 'Include Service Body Administrator On These Emails:', - 'EmailContactAdminEnableExtraText' => 'Sends copies of these emails to the Service Body Administrator (if they are not the primary recipient).', - 'EmailContactAllAdminEnableLabel' => 'Include All Service Body Administrators On These Emails:', - 'EmailContactAllAdminEnableExtraText' => 'Sends copies of these emails to all of the relevant Service Body Administrators.', - - 'Page_4_Initialize_Root_Server_Heading' => 'Initialize the Root Server', - 'Page_4_Initialize_Root_Server_Text' => 'The button below will initialize the Root Server with an empty database and a Server Administrator user.', - 'Page_4_Initialize_Root_Server_Button' => 'Initialize Root Server', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Export Spreadsheet (Optional): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - 'Explanatory_Text_2_API_key_Intro' => 'The "API Key" is a key that you need to register with Google in order to be able to use their mapping service.', - 'Explanatory_Text_2_API_key_2_Intro' => 'You will need to provide a valid API Key in order to create new meetings in the Root Server.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/pl/name.txt b/src/legacy/local_server/server_admin/lang/pl/name.txt deleted file mode 100755 index 98a292b48..000000000 --- a/src/legacy/local_server/server_admin/lang/pl/name.txt +++ /dev/null @@ -1 +0,0 @@ -Polskie \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/pl/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/pl/server_admin_strings.inc.php deleted file mode 100644 index 1be54fb01..000000000 --- a/src/legacy/local_server/server_admin/lang/pl/server_admin_strings.inc.php +++ /dev/null @@ -1,491 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Administracja serwera', - 'server_admin_naws_spreadsheet_label' => 'Zaktualizowano arkusz światowych ID:', // TODO: was changed to "Updated World Committee Codes Spreadsheet" - 'update_world_ids_button_text' => 'Zaktualizuj ID mityngów światowych z arkusza', // TODO: was changed to "'Update World Committee Codes" - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'Nie zaktualizowano światowych ID. Przyczyną może być brak uprawnień na Twoim koncie do aktualizacji przesłanych mityngów.', - 'server_admin_error_required_spreadsheet_column' => 'Wymagana kolumna nie istnieje w arkuszu ', - 'server_admin_error_bmlt_id_not_integer' => 'Dostarczone bmlt_id nie jest liczbą całkowitą: ', - 'server_admin_error_could_not_create_reader' => 'Nie udało się stworzyć readera dla pliku: ', - 'server_admin_error_no_files_uploaded' => 'Nie zuploadowano plików.', - 'server_admin_ui_num_meetings_updated' => 'Liczba zaktualizowanych mityngów: ', - 'server_admin_ui_num_meetings_not_updated' => 'Liczba mityngów nie potrzebujących aktualizacji: ', - 'server_admin_ui_errors' => 'Błędy', - 'server_admin_ui_warning' => 'OSTRZEŻENIE', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - // TODO: re-translate this string (English version has been updated) - // 'server_admin_ui_problem_meetings' => 'znaleziono mityngi w arkuszu, które nie istnieją w bazie danych. Może się to zdarzyć, gdy mityng jest usunięty lub niepubliczny. ID brakujących mityngów to: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Utworzone organy służb: ', - 'server_admin_ui_meetings_created' => 'Utworzone mityngi: ', - 'server_admin_ui_users_created' => 'Utworzeni użytkownicy: ', - 'server_admin_ui_refresh_ui_text' => 'Wyloguj i zaloguj się ponownie by zobaczyć nowe organy służb, użytkowników i mityngi.', - 'import_service_bodies_and_meetings_button_text' => 'Zaimportuj organy służb i mityngi', - 'import_service_bodies_and_meetings_dropdown_text' => 'Zaimportuj organy służb i mityngi z NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'Arkusz NAWS Import', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Moje konto', - 'account_name_label' => 'Moja nazwa konta:', - 'account_login_label' => 'Mój login:', - 'account_type_label' => 'Jestem:', - 'account_type_1' => 'Administrator serwera', - 'account_type_2' => 'Administrator organu służb', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Żałosny przegryw, który nie powinien mieć dostępu do tej strony - autor oprogramowania dał ciała!', - 'account_type_5' => 'Obserwator z organu służb', - 'change_password_label' => 'Zmień moje hasło na:', - 'change_password_default_text' => 'Nie ruszaj tego, jeśli nie chcesz zmienić hasła', - 'account_email_label' => 'Mój adres e-mail:', - 'email_address_default_text' => 'Podaj adres e-mail', - 'account_description_label' => 'Mój opis:', - 'account_description_default_text' => 'Podaj opis', - 'account_change_button_text' => 'Zmień ustawienia konta', - 'account_change_fader_success_text' => 'Informacje o koncie pomyślnie zmienione', - 'account_change_fader_failure_text' => 'Informacje o koncie nie zostały zmienione', - 'meeting_editor_disclosure' => 'Edytor mityngu', - 'meeting_editor_already_editing_confirm' => 'Aktualnie edytujesz inny mityng. Czy chcesz utracić wszystkie zmiany w tamtym mityngu?', - 'meeting_change_fader_success_text' => 'Pomyślnie zmieniono mityng', - 'meeting_change_fader_failure_text' => 'Mityng nie został zmieniony', - 'meeting_change_fader_success_delete_text' => 'Pomyślnie usunięto mityng', - 'meeting_change_fader_fail_delete_text' => 'Mityng nie został usunięty', - 'meeting_change_fader_success_add_text' => 'Nowy mityng pomyślnie dodany', - 'meeting_change_fader_fail_add_text' => 'Nowy mityng nie został dodany', - 'meeting_text_input_label' => 'Wyszukaj tekst:', - 'access_service_body_label' => 'Mam dostęp do:', - 'meeting_text_input_default_text' => 'Podaj tekst do wyszukania', - 'meeting_text_location_label' => 'To jest lokalizacja lub kod pocztowy', - 'meeting_search_weekdays_label' => 'Wyszukaj wybrane dni tygodnia:', - 'meeting_search_weekdays_names' => array('Wszystkie', 'Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'), - 'meeting_search_service_bodies_label' => 'Szukaj w wybranych organach służb:', - 'meeting_search_start_time_label' => 'Szukaj według czasu rozpoczęcia mityngu:', - 'meeting_search_start_time_all_label' => 'Kiedykolwiek', - 'meeting_search_start_time_morn_label' => 'Ranek', - 'meeting_search_start_time_aft_label' => 'Popołudnie', - 'meeting_search_start_time_eve_label' => 'Wieczór', - 'meeting_search_no_results_text' => 'Nie znaleziono mityngów', - 'meeting_editor_tab_specifier_text' => 'Szukaj mityngów', - 'meeting_editor_tab_editor_text' => 'Edytuj mityngi', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Stwórz nowy mityng', - 'meeting_editor_location_map_link' => 'Mapa lokalizacji', - 'meeting_editor_screen_match_ll_button' => 'Ustaw długość i szerokość geograficzną na adres:', - 'meeting_editor_screen_default_text_prompt' => 'Wpisz jakiś tekst lub liczbę', - 'meeting_is_published' => 'Mityng opublikowany', - 'meeting_unpublished_note' => 'Uwaga: Cofnięcie publikacji mityngu sugeruje tymczasowe zamknięcie. Jeśli mityng jest zamknięty na stałe - usuń go.', - 'meeting_editor_screen_meeting_name_label' => 'Nazwa mityngu:', - 'meeting_editor_screen_meeting_name_prompt' => 'Podaj nazwę mityngu', - 'meeting_editor_screen_meeting_weekday_label' => 'Dzień tygodnia:', - 'meeting_editor_screen_meeting_start_label' => 'Czas rozpoczęcia mityngu:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Południe', - 'meeting_editor_screen_meeting_midnight_label' => 'Północ', - 'meeting_editor_screen_meeting_duration_label' => 'Czas trwania:', - 'meeting_editor_screen_meeting_oe_label' => 'Otwarty', - 'meeting_editor_screen_meeting_cc_label' => 'Kod Komitetu Światowego:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'E-mail kontaktowy mityngu:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Podaj e-mail kontaktowy dla tego konkretnego mityngu', - 'meeting_editor_screen_meeting_sb_label' => 'Organ służb:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Nie wybrano organu służb', - 'meeting_editor_screen_meeting_longitude_label' => 'Długość geograficzna:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Podaj długość geograficzną', - 'meeting_editor_screen_meeting_latitude_label' => 'Szerokość geograficzna:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Podaj szerokość geograficzną', - 'meeting_editor_screen_meeting_location_label' => 'Położenie:', - 'meeting_editor_screen_meeting_location_prompt' => 'Podaj nazwę miejsca (np. nazwa budynku)', - 'meeting_editor_screen_meeting_info_label' => 'Dodatkowe informacje:', - 'meeting_editor_screen_meeting_info_prompt' => 'Podaj jakiekolwiek dodatkowe informacje odnośnie lokalizacji', - 'meeting_editor_screen_meeting_street_label' => 'Ulica:', - 'meeting_editor_screen_meeting_street_prompt' => 'Podaj adres ulicy', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Okolica:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Podaj okolicę (nie dzielnicę)', - 'meeting_editor_screen_meeting_borough_label' => 'Dzielnica:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Podaj dzielnicę (nie okolicę)', - 'meeting_editor_screen_meeting_city_label' => 'Miasto/miejscowość:', - 'meeting_editor_screen_meeting_city_prompt' => 'Podaj miasto lub miejscowość', - 'meeting_editor_screen_meeting_county_label' => 'Powiat:', - 'meeting_editor_screen_meeting_county_prompt' => 'Podaj powiat', - 'meeting_editor_screen_meeting_state_label' => 'Województwo:', - 'meeting_editor_screen_meeting_state_prompt' => 'Podaj województwo', - 'meeting_editor_screen_meeting_zip_label' => 'Kod pocztowy:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Podaj kod pocztowy', - 'meeting_editor_screen_meeting_nation_label' => 'Państwo:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Podaj państwo', - 'meeting_editor_screen_meeting_comments_label' => 'Komentarze:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Linie pociągowe:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Linie autobusowe:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Imię osoby kontaktowej:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Email kontaktowy:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Telefon kontaktowy:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Imię drugiej osoby kontaktowej:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Drugi email kontaktowy:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Drugi telefon kontaktowy:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Szukam:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Tylko opublikowane mityngi', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Tylko nieopublikowane mityngi', - 'meeting_editor_screen_meeting_visibility_advice' => 'To nie powinno się wyświetlić przy normalnym wyszukiwaniu mityngów.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Wszystkie mityngi', - 'meeting_editor_screen_meeting_create_button' => 'Dodaj nowy mityng', - 'meeting_editor_screen_delete_button' => 'Usuń ten mityng', - 'meeting_editor_screen_delete_button_confirm' => 'Jesteś pewien, że chcesz usunąć ten mityng?', - 'meeting_editor_screen_cancel_button' => 'Anuluj', - 'logout' => 'Wyloguj', - 'meeting_editor_screen_cancel_confirm' => 'Jesteś pewien, że chcesz przestać edytować ten mityng i utracić wszystkie zmiany?', - 'meeting_lookup_failed' => 'Wyszukiwanie adresu nie powiodło się.', - 'meeting_lookup_failed_not_enough_address_info' => 'Nie ma wystarczającej ilości informacji adresowych by wyszukać.', - 'meeting_create_button_name' => 'Zapisz jako nowy mityng', - 'meeting_saved_as_a_copy' => 'Zapisz ten mityng jako kopię (tworzy nowy mityng)', - 'meeting_save_buttonName' => 'Zapisz zmiany w tym mityngu', - 'meeting_editor_tab_bar_basic_tab_text' => 'Podstawy', - 'meeting_editor_tab_bar_location_tab_text' => 'Położenie', - 'meeting_editor_tab_bar_format_tab_text' => 'Format', - 'meeting_editor_tab_bar_other_tab_text' => 'Inne', - 'meeting_editor_tab_bar_history_tab_text' => 'Historia', - 'meeting_editor_result_count_format' => '%d mityngów znaleziono', - 'meeting_id_label' => 'ID: mityngu', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administration Console', - 'login' => 'Login ID', - 'password' => 'Hasło', - 'button' => 'Zaloguj się', - 'cookie' => 'Musisz włączyć obsługę cookies by zarządzać tym serwerem.', - 'noscript' => 'Nie możesz zarządzać tą stroną bez JavaScriptu.', - 'title' => 'Zaloguj się, by zarządzać serwerem.', - 'edit_Meeting_object_not_found' => 'BŁĄD: Mityng nie został znaleziony.', - 'edit_Meeting_object_not_changed' => 'BŁAD: Mityng nie został zmieniony.', - 'edit_Meeting_auth_failure' => 'Nie masz uprawnień do edytowania tego mityngu.', - 'not_auth_1' => 'NIEAUTORYZOWANY', - 'not_auth_2' => 'Nie masz uprawnień do zarządzania tym serwerem.', - 'not_auth_3' => 'Wystąpił problem z podaną nazwą użytkownika lub hasłem.', - 'email_format_bad' => 'Podany adres e-mail ma błędny format.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

Brak historii dostępnej dla tego mityngu

', - 'service_body_editor_disclosure' => 'Zarządzanie organem służb', - 'service_body_change_fader_success_text' => 'Organ służb został pomyślnie zmieniony', - 'service_body_change_fader_fail_text' => 'Nieudana próba zmiany organu służb', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Nazwa:', - 'service_body_name_default_prompt_text' => 'Podaj nazwę tego organu służb', - 'service_body_parent_popup_label' => 'Organ nadrzędny organu służb:', - 'service_body_parent_popup_no_parent_option' => 'Brak organu nadrzędnego (najwyższy poziom)', - 'service_body_editor_screen_sb_admin_user_label' => 'Główny administrator:', - 'service_body_editor_screen_sb_admin_description_label' => 'Opis:', - 'service_body_description_default_prompt_text' => 'Podaj opis tego organu służb', - 'service_body_editor_screen_sb_admin_email_label' => 'E-mail kontaktowy:', - 'service_body_email_default_prompt_text' => 'Podaj e-mail kontaktowy tego organu służb', - 'service_body_editor_screen_sb_admin_uri_label' => 'URL strony internetowej:', - 'service_body_uri_default_prompt_text' => 'Podaj URL strony internetowej tego organu służb', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Pełni edytorzy listy mityngów:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Użytkownicy mogący edytować dowolny mityng w tym organie służb', - 'service_body_editor_screen_sb_admin_editor_label' => 'Podstawowi edytorzy listy mityngów:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Użytkownicy mogący edytować jedynie nieopublikowane mityngi w tym organie służb.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Obserwatorzy:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Użytkownicy mogący zobaczyć ukryte informacje (np. adres e-mail), ale bez możliwości edycji.', - 'service_body_dirty_confirm_text' => 'Wprowadziłeś zmiany dla tego organu służb. Chcesz utracić wprowadzone zmiany?', - 'service_body_save_button' => 'Zapisz zmiany tego organu służb', - 'service_body_create_button' => 'Stwórz organ służb', - 'service_body_delete_button' => 'Usuń ten organ służb', - 'service_body_delete_perm_checkbox' => 'Usuń trwale ten organ służb', - 'service_body_delete_button_confirm' => 'Jesteś pewien, że chcesz usunąć ten organ służb? Upewnij się, że wszystkie mityngi są usunięte lub przeniesione do innego organu służb przed wykonaniem tej akcji.', - 'service_body_delete_button_confirm_perm' => 'Ten organ służb zostanie usunięty trwale!', - 'service_body_change_fader_create_success_text' => 'Organ służb został pomyślnie utworzony', - 'service_body_change_fader_create_fail_text' => 'Tworzenie organu służb nie powiodło się', - 'service_body_change_fader_delete_success_text' => 'Organ służb został pomyślnie usunięty', - 'service_body_change_fader_delete_fail_text' => 'Usuwanie organu służb nie powiodło się', - 'service_body_change_fader_fail_no_data_text' => 'Zmiana organu służb nie powiodła się, ponieważ nie dostarczono żadnych danych', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Zmiana organu służb nie powiodła się, ponieważ nie odnaleziono tego organu służb', - 'service_body_change_fader_fail_cant_update_text' => 'Zmiana organu służb nie powiodła się, ponieważ organ służb nie był zaktualizowany', - 'service_body_change_fader_fail_bad_hierarchy' => 'Zmiana organu służb nie powiodła się, ponieważ wybrany właściciel organu służb jest poniżej tego organu i nie może być użyty', - 'service_body_cancel_button' => 'Przywróć do oryginału', - 'service_body_editor_type_label' => 'Rodzaj organu służb:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Grupa', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Współpraca', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Okręgowy Komitet Służebnych', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Konferencja Służb Regionalnych', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Konferencja Służb Światowych', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro Area', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zonal Forum', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Grupowa jednostka służby', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Lokalna jednostka służby', - 'service_body_editor_screen_helpline_label' => 'Linia pomocy:', - 'service_body_editor_screen_helpline_prompt' => 'Podaj numer telefonu dla linii pomocy', - 'service_body_editor_uri_naws_format_text' => 'Zbierz mityngi z tego organu służb jako plik zgodny z NAWS', - 'edit_Meeting_meeting_id' => 'ID mityngu:', - 'service_body_editor_create_new_sb_option' => 'Stwórz nowy organ służb', - 'service_body_editor_screen_world_cc_label' => 'Kod Komitetu Światowego:', - 'service_body_editor_screen_world_cc_prompt' => 'Podaj kod Komitetu Światowego', - 'user_editor_disclosure' => 'Zarządzanie użytkownika', - 'user_editor_create_new_user_option' => 'Utwórz nowego użytkownika', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Login:', - 'user_editor_login_default_text' => 'Wpisz Login', - 'user_editor_account_type_label' => 'Użytkownik:', - 'user_editor_user_owner_label' => 'Właściciel: ', - 'user_editor_account_type_1' => 'Administrator serwera', - 'user_editor_account_type_2' => 'Służebny administrator', - 'user_editor_account_type_3' => 'Służebny edytor', - 'user_editor_account_type_5' => 'Służebny obserwator', - 'user_editor_account_type_4' => 'Dezaktywowany użytkownik', - 'user_editor_account_name_label' => 'Nazwa użytkownika:', - 'user_editor_name_default_text' => 'Wpisz nazwę użytkownika', - 'user_editor_account_description_label' => 'Opis:', - 'user_editor_description_default_text' => 'Wprowadź opis użytkownika', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'Wprowadź adres e-mail', - 'user_change_fader_success_text' => 'Użytkownik zmieniony pomyślnie', - 'user_change_fader_fail_text' => 'Nie udało się zmienić użytkwonika', - 'user_change_fader_create_success_text' => 'Użytkownik utworzony pomyślnie', - 'user_change_fader_create_fail_text' => 'Nie udało się utworzyć użytkownika', - 'user_change_fader_create_fail_already_exists' => 'Nazwa użytkownika istnieje już w bazie.', - 'user_change_fader_delete_success_text' => 'Użytkownik usunięty pomyślnie', - 'user_change_fader_delete_fail_text' => 'Nie udało się usunąć użytkownika', - 'user_save_button' => 'Zapisz zmiany dla tego użytkownika', - 'user_create_button' => 'Utwórz tego nowego użytkownika', - 'user_cancel_button' => 'Przywróć domyślne', - 'user_delete_button' => 'Usuń tego użytkownika', - 'user_delete_perm_checkbox' => 'Usuń tego użytkownika nieodwracalnie', - 'user_password_label' => 'Zmień hasło dla:', - 'user_new_password_label' => 'Ustaw hasło:', - 'user_password_default_text' => 'Nie zmieniaj tego pola, chyba, że chcesz zmienić hasło', - 'user_new_password_default_text' => 'Musisz wpisać hasło dla nowego użytkownika', - 'user_dirty_confirm_text' => 'Wprowadzono zmiany dla użytkownika. Czy chcesz utracić te zmiany?', - 'user_delete_button_confirm' => 'Czy na pewno chcesz usunąć tego użytkownika?', - 'user_delete_button_confirm_perm' => 'Użytkownik zostanie nieodwracalnie usunięty!', - 'user_create_password_alert_text' => 'Nowy użytkownik musi posiadać hasło. Nie wprowadzono hasła dla użytkownika.', - 'user_change_fader_fail_no_data_text' => 'Nie udało się wprowadzić zmian dla użytkownika. Nie wprowadzono wszystkich danych', - 'user_change_fader_fail_cant_find_sb_text' => 'Nie udało się wprowadzić zmian dla użytkownika.Nie znaleziono użytkownika', - 'user_change_fader_fail_cant_update_text' => 'Nie udało się wprowadzić zmian dla użytkownika', - 'format_editor_disclosure' => 'Administracja formatu', - 'format_change_fader_change_success_text' => 'Format zmieniony pomyślnie', - 'format_change_fader_change_fail_text' => 'Nie udało się zmienić formatu', - 'format_change_fader_create_success_text' => 'Format utworzony pomyślnie', - 'format_change_fader_create_fail_text' => 'Nie udało się utworzyć formatu', - 'format_change_fader_delete_success_text' => 'Format usunięty pomyślnie', - 'format_change_fader_delete_fail_text' => 'Nie udało się usunąć formatu', - 'format_change_fader_fail_no_data_text' => 'Nie udało się usunąć formatu z powodu brakujących danych', - 'format_change_fader_fail_cant_find_sb_text' => 'Nie udało się usunąć formatu, nie znaleziono formatu', - 'format_change_fader_fail_cant_update_text' => 'Nie udało się usunąć formatu, nie zaktualizowano formatu', - 'format_editor_name_default_text' => 'Podaj krótką nazwę', - 'format_editor_description_default_text' => 'Podaj bardziej szczegółowy opis', - 'format_editor_create_format_button_text' => 'Utwórz format', - 'format_editor_cancel_create_format_button_text' => 'Anuluj', - 'format_editor_create_this_format_button_text' => 'Utwórz ten format', - 'format_editor_change_format_button_text' => 'Zmień ten format', - 'format_editor_delete_format_button_text' => 'Usuń ten format', - 'format_editor_reset_format_button_text' => 'Przywróć do oryginału', - 'need_refresh_message_fader_text' => 'Odśwież stronę przed użyciem tej sekcji', - 'need_refresh_message_alert_text' => 'Ponieważ wprowadziłeś zmiany w Administracji Serwera, Administracji Organów Służb, Administracji Użytkowników lub Administracji Formatów, informacje zawarte w tej sekcji mogą już nie być aktualne. Proszę odświeżyć stronę poprzez wylogowanie się i zalogowanie się ponownie.', - 'format_editor_delete_button_confirm' => 'Czy na pewno chcesz usunąć ten format?', - 'format_editor_delete_button_confirm_perm' => 'Ten format zostanie usunięty nieodwracalnie!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Hasło jest za krótkie! Hasło powinno posiadać minimum %d znaków!', - 'AJAX_Auth_Failure' => 'Nie udało się autoryzować operacji. Możliwe, że istnieje problem z konfiguracją serwera.', - 'Maps_API_Key_Warning' => 'Wystąpił problem z kluczem Google Maps API.', - 'Maps_API_Key_Not_Set' => 'Nie ustalono klucza Google Maps API.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Importuj dane mityngu (UWAGA: istniejące dane zostaną nadpisane!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Nie można wyświetlić danych - brak autoryzacji', - 'Value_Prompts' => array( - 'id_bigint' => 'ID Mityngu', - 'worldid_mixed' => 'ID Służb Światowych', - 'service_body' => 'Organ służb', - 'service_bodies' => 'Organy służb', - 'weekdays' => 'Dni powszednie', - 'weekday' => 'Mityng spotyka się w każdy', - 'start_time' => 'Mityng rozpoczyna się o', - 'duration_time' => 'Mityng trwa', - 'location' => 'Lokalizacja', - 'duration_time_hour' => 'Godzina', - 'duration_time_hours' => 'Godziny', - 'duration_time_minute' => 'Minuta', - 'duration_time_minutes' => 'Minuty', - 'lang_enum' => 'Język', - 'formats' => 'Formaty', - 'distance' => 'Odległość od centrum miasta', - 'generic' => 'Mityng NA', - 'close_title' => 'Zamknij okno ze szczegółami mityngu', - 'close_text' => 'Zamknij okno', - 'map_alt' => 'Mapa dojazdu do mityngu', - 'map' => 'Podążaj za linkiem by wyświetlić mapę', - 'title_checkbox_unpub_meeting' => 'Ten mityng nie został opublikowany. Nie będzie dostępny w wynikach wyszukiwania.', - 'title_checkbox_copy_meeting' => 'Ten mityng jest duplikatem istniejącego mityngu. Nie został opublikowany. Nie będzie widoczny w wynikach wyszukiwania' - ), - 'world_format_codes_prompt' => 'Format NAWS:', - 'world_format_codes' => array( - '' => 'Brak', - 'OPEN' => 'Otwarty', - 'CLOSED' => 'Zamknięty', - 'WCHR' => 'Wózki inwalidzkie', - 'BEG' => 'Nowoprzybili', - 'BT' => 'Tekst podstawowe', - 'CAN' => 'Świeczka', - 'CPT' => '12 Tradycji', - 'CW' => 'Dzieci mile widziane', - 'DISC' => 'Dyskusja', - 'GL' => 'LGBTQ', - 'IP' => 'Broszura Informacyjna', - 'IW' => 'To Działa - Jak i Dlaczego', - 'JFT' => 'Właśnie Dzisiaj', - 'LC' => 'Życie w czystości', - 'LIT' => 'Analiza książek', - 'M' => 'Mężczyźni', - 'MED' => 'Medytacja', - 'NS' => 'Zakaz palenia', - 'QA' => 'Pytania i ODpowiedzi', - 'RA' => 'Ograniczone uczestnicwo', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Palenie', - 'SPK' => 'Spiker', - 'STEP' => 'Krok', - 'SWG' => 'Przewodnik pracy nad Krokami', - 'TOP' => 'Temat', - 'TRAD' => 'Tradycja', - 'VAR' => 'Zmienny format', - 'W' => 'Kobiety', - 'Y' => 'Młodzi ludzie', - 'LANG' => 'Alternatywny język', - 'GP' => 'Guiding Principles', - 'NC' => 'Bez dzieci', - 'CH' => 'Zamknięty w święta', - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Typ formatu:', - 'format_type_codes' => array( - '' => 'Brak', - 'FC1' => 'Format mityngu (spiker, analiza literatury etc.)', - 'FC2' => 'Kod lokalizacji (dostęp dla wózków inwalidzkich, ograniczony parking, etc.)', - 'FC3' => 'Potrzeby i ograniczenia (mityng mężczyzn, LGBTQ, zakaz dzieci etc.)', - 'O' => 'Dostępność dla nieuzależnionych (Otwarty, Zamknięty)', - 'LANG' => 'Język', - 'ALERT' => 'Format powinien być łatwo widoczny (Wymagania dot. czasu czystości, etc.)', - ), - - 'cookie_monster' => 'Ta strona używa ciasteczek do przechowywania Twoich preferencji językowych.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'Światowe ID', - 'shared_group_id_bigint' => 'Nieużywane', - 'service_body_bigint' => 'ID komitetu', - 'weekday_tinyint' => 'Dzień powszedni', - 'venue_type' => 'Venue Type', - 'start_time' => 'Czas rozpoczęcia', - 'duration_time' => 'Czas trwania', - 'time_zone' => 'Time Zone', - 'formats' => 'Formaty', - 'lang_enum' => 'Język', - 'longitude' => 'Długość geograficzna', - 'latitude' => 'Szerokość geograficzna', - 'published' => 'Opublikowany', - 'email_contact' => 'Kontakt e-mail', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nTa wiadomość dotyczy mityngu o nazwie \"%s\", który odbywa się %s, %s.\nBrowser Link: %s\nLink do edycji: %s\nZostał wysłany z serwera z listą mityngów, a nadawca nie zna Twojego adresu e-mail.\nPamiętaj, że, odpowiadając na tę wiadomość, ujawnisz swój adres e-mail.\nJeśli użyjesz \"Odpowiedz wszystkim\", a jest więcej niż jeden odbiorca, możesz ujawnić adresy e-mail innych użytkowników.\nUszanuj, proszę, anonimowość użytkowników; włączając w to oryginalnego nadawcę tego e-maila." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'Mityng został zmieniony.', - '__THE_MEETING_WAS_CREATED__' => 'Mityng został utworzony.', - '__THE_MEETING_WAS_DELETED__' => 'Mityng został usunięty.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'Mityng został przywrócony do poprzedniej wersji', - - '__THE_FORMAT_WAS_CHANGED__' => 'Format został zmieniony.', - '__THE_FORMAT_WAS_CREATED__' => 'Format został utworzonty.', - '__THE_FORMAT_WAS_DELETED__' => 'Format został usunięty.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Format został przywrócony do poprzedniej wersji.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'Organ służb został zmieniony.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'Organ służb został utworzony.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'Organ służb został usunięty.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'Organ służb został przywrócony do poprzedniej wersji.', - - '__THE_USER_WAS_CHANGED__' => 'Użytkownik został zmieniony.', - '__THE_USER_WAS_CREATED__' => 'Użytkownik został utworzony.', - '__THE_USER_WAS_DELETED__' => 'Użytkownik został usunięty.', - '__THE_USER_WAS_ROLLED_BACK__' => 'Użytkownik został przywrócony do poprzedniej wersji.', - - '__BY__' => 'przez', - '__FOR__' => 'dla' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'został zmieniony z', - 'to' => 'na', - 'was_changed' => 'został zmieniony', - 'was_added_as' => 'został dodany jako', - 'was_deleted' => 'został usunięty', - 'was_published' => 'Mityng został opublikowany', - 'was_unpublished' => 'Mityng był nieopublikowany', - 'formats_prompt' => 'Format mityngu', - 'duration_time' => 'Czas trwania mityngu', - 'start_time' => 'Czas rozpoczęcia mityngu', - 'longitude' => 'Długość geograficzna mityngu', - 'latitude' => 'Szerokość geograficzna mityngu', - 'sb_prompt' => 'Mityng zmienił swój organ służb z', - 'id_bigint' => 'ID mityngu', - 'lang_enum' => 'Język mityngu', - 'worldid_mixed' => 'Udostępnione ID grupy', // TODO: translate The World Committee Code - 'weekday_tinyint' => 'Dzień tygodnia, w którym odbywa się mityng', - 'non_existent_service_body' => 'Organ służb już nie istnieje', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/pt/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/pt/data_transfer_strings.php deleted file mode 100755 index 624c60e08..000000000 --- a/src/legacy/local_server/server_admin/lang/pt/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/pt/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/pt/install_wizard_strings.php deleted file mode 100755 index 8ca9805bd..000000000 --- a/src/legacy/local_server/server_admin/lang/pt/install_wizard_strings.php +++ /dev/null @@ -1,165 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_Type_MySQL_Error' => 'ERROR: Even though you have PDO and you have database drivers installed, none of the are MySQL (the only supported driver)!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_GenericError' => 'There is an error connecting to the database. Please check your database settings.', - 'NoDatabase_Note_ClickHere' => 'Click here to go back to the database set up page.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoDatabase_Note_ServerSettings_ClickHere' => 'Click here to go back to the server settings page.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Maps_API_Key_Not_Set' => 'The Google Maps API key is not set.', - 'Maps_API_Key_Valid' => 'Google Maps API Key is valid.', - 'Maps_API_Key_ClickHere' => 'Click here to go back to the Google Maps API Key set up page.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API Settings', - 'Page_2_Heading' => 'Google Maps API Settings', - 'Page_2_API_Key_Prompt' => 'Enter the Google API Key for Geocoding:', - 'Page_2_API_Key_Set_Button' => 'TEST KEY', - 'Page_2_API_Key_Not_Set_Prompt' => 'SET API KEY FIRST', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => ' The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DefaultClosedStatus' => 'Meetings Are Considerd "CLOSED" by Default:', - 'DefaultClosedStatusExtraText' => 'This primarily affects the export to NAWS.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'SemanticAdminLabel' => 'Enable Semantic Administration:', - 'SemanticAdminExtraText' => 'If not checked, then all administration must be done via the Root Server login (No apps).', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - 'EmailContactAdminEnableLabel' => 'Include Service Body Administrator On These Emails:', - 'EmailContactAdminEnableExtraText' => 'Sends copies of these emails to the Service Body Administrator (if they are not the primary recipient).', - 'EmailContactAllAdminEnableLabel' => 'Include All Service Body Administrators On These Emails:', - 'EmailContactAllAdminEnableExtraText' => 'Sends copies of these emails to all of the relevant Service Body Administrators.', - - 'Page_4_Initialize_Root_Server_Heading' => 'Initialize the Root Server', - 'Page_4_Initialize_Root_Server_Text' => 'The button below will initialize the Root Server with an empty database and a Server Administrator user.', - 'Page_4_Initialize_Root_Server_Button' => 'Initialize Root Server', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Export Spreadsheet (Optional): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - 'Explanatory_Text_2_API_key_Intro' => 'The "API Key" is a key that you need to register with Google in order to be able to use their mapping service.', - 'Explanatory_Text_2_API_key_2_Intro' => 'You will need to provide a valid API Key in order to create new meetings in the Root Server.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/pt/name.txt b/src/legacy/local_server/server_admin/lang/pt/name.txt deleted file mode 100755 index 811b10b44..000000000 --- a/src/legacy/local_server/server_admin/lang/pt/name.txt +++ /dev/null @@ -1 +0,0 @@ -Português \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/pt/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/pt/server_admin_strings.inc.php deleted file mode 100644 index a499afa88..000000000 --- a/src/legacy/local_server/server_admin/lang/pt/server_admin_strings.inc.php +++ /dev/null @@ -1,488 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Certifique-se que este arquivo esteja no contexto correto. - -$comdef_server_admin_strings = array('server_admin_disclosure' => 'Administração do Servidor', - 'server_admin_naws_spreadsheet_label' => 'Planilha atualizada de IDs Mundiais:', // TODO: was changed to "Updated World Committee Codes Spreadsheet" - 'update_world_ids_button_text' => 'Atualizar IDs Mundiais de reunião', // TODO: was changed to "Update World Committee Codes" - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Atualizar IDs Mundiais de reunião pela planilha do NAWS', // TODO: was changed to "Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet" - 'server_admin_error_no_world_ids_updated' => 'Nenhum ID mundial foi atualizado. Isso pode ser por seu usuário não ter permissão para essas reuniões', - 'server_admin_error_required_spreadsheet_column' => 'Coluna requerida no existe na planilha: ', - 'server_admin_error_bmlt_id_not_integer' => 'O ID BMLT provido não é do tipo integer: ', - 'server_admin_error_could_not_create_reader' => 'Não foi possível criar um leitor para o arquivo: ', - 'server_admin_error_no_files_uploaded' => 'Nenhum arquivo foi enviado.', - 'server_admin_error_service_bodies_already_exist' => 'Corpos de Serviço com os seguintes IDs Mundiais já existem: ', - 'server_admin_error_meetings_already_exist' => 'Reuniões com os seguintes IDs Mundiais já existem: ', - 'server_admin_ui_num_meetings_updated' => 'Numero de reuniões atualizadas: ', - 'server_admin_ui_num_meetings_not_updated' => 'Numero de reuniões que não precisam de atualização: ', - 'server_admin_ui_warning' => 'AVISO', - 'server_admin_ui_errors' => 'Erro(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - // TODO: re-translate this string (English version has been updated) - // 'server_admin_ui_problem_meetings' => 'reuniões foram encontradas na planilha que não existiam na base de dados. Isso pode acontecer quando uma reunião é apagada ou não publicada. Os IDs de reunião são: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Corpos de serviço criados: ', - 'server_admin_ui_meetings_created' => 'Reuniões criadas: ', - 'server_admin_ui_users_created' => 'Usuários criados: ', - 'server_admin_ui_refresh_ui_text' => 'Saia e faça novo login para ver os novos corpos de serviço, usuarios, e reuniões.', - 'import_service_bodies_and_meetings_button_text' => 'Importar corpo de serviço e reuniões', - 'import_service_bodies_and_meetings_dropdown_text' => 'Importar corpo de serviço e reuniões da exportação do NAWS (NAWS Export)', - 'server_admin_naws_import_spreadsheet_label' => 'Planilha Importada do NAWS:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Minha conta', - 'account_name_label' => 'Nome da minha conta:', - 'account_login_label' => 'Meu login:', - 'account_type_label' => 'Eu sou:', - 'account_type_1' => 'Administrador do Servidor', - 'account_type_2' => 'Administrador de corpo de serviço', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Pathetic Luser Who Shouldn\'t Even Have Access to This Page -The Author of the Software Pooched it BAD!', - 'account_type_5' => 'Observador', - 'change_password_label' => 'Mude minha senha para:', - 'change_password_default_text' => 'Deixe sem preencher se não pretende mudar a senha', - 'account_email_label' => 'Meu endereço de e-mail:', - 'email_address_default_text' => 'Coloque seu e-mail', - 'account_description_label' => 'Descrição:', - 'account_description_default_text' => 'Coloque uma Descrição', - 'account_change_button_text' => 'Mude meus dados da conta', - 'account_change_fader_success_text' => 'Os dados da conta foram alterados com sucesso', - 'account_change_fader_failure_text' => 'Os dados da conta NÃO foram alterados', - 'meeting_editor_disclosure' => 'Editor de Reuniões', - 'meeting_editor_already_editing_confirm' => 'Você está atualmente editando uma reunião. Você realmente quer PERDER todas as alterações?', - 'meeting_change_fader_success_text' => 'Os dados da reunião foram alterados com sucesso', - 'meeting_change_fader_failure_text' => 'Os dados da reunião não foram alterados', - 'meeting_change_fader_success_delete_text' => 'A reunião foi removida com sucesso', - 'meeting_change_fader_fail_delete_text' => 'A reunião não foi apagada', - 'meeting_change_fader_success_add_text' => 'A nova reunião foi criada com sucesso!', - 'meeting_change_fader_fail_add_text' => 'A nova reunião NÃO foi criada...', - 'meeting_text_input_label' => 'Busque pelo texto:', - 'access_service_body_label' => 'Eu tenho acesso a:', - 'meeting_text_input_default_text' => 'Digite o texto para buscar', - 'meeting_text_location_label' => 'Isso é um local ou CEP', - 'meeting_search_weekdays_label' => 'Busca por dia da semana selecionado:', - 'meeting_search_weekdays_names' => array('Todos', 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'), - 'meeting_search_service_bodies_label' => 'Busca pelo corpo de serviço selecionado:', - 'meeting_search_start_time_label' => 'Busca pelo horário da reunião:', - 'meeting_search_start_time_all_label' => 'Qualquer horário', - 'meeting_search_start_time_morn_label' => 'Manhã', - 'meeting_search_start_time_aft_label' => 'Tarde', - 'meeting_search_start_time_eve_label' => 'Noite', - 'meeting_search_no_results_text' => 'Nenhuma reunião encontrada', - 'meeting_editor_tab_specifier_text' => 'Busca por reuniões', - 'meeting_editor_tab_editor_text' => 'Editar Reuniões', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Criar Nova Reunião', - 'meeting_editor_location_map_link' => 'Localização no Mapa', - 'meeting_editor_screen_match_ll_button' => 'Configure Longitude e Latitude do Endereço', - 'meeting_editor_screen_default_text_prompt' => 'Coloque um texto ou numero', - 'meeting_is_published' => 'Reunião está publicada', - 'meeting_unpublished_note' => 'Nota: Despublicar uam reunião indica que estátemporariamente fechada. Se ela está permanentemente fechada, por favor a delete.', - 'meeting_editor_screen_meeting_name_label' => 'Nome da Reunião:', - 'meeting_editor_screen_meeting_name_prompt' => 'Coloque o nome da reunião', - 'meeting_editor_screen_meeting_weekday_label' => 'Dia da Semana:', - 'meeting_editor_screen_meeting_start_label' => 'Horário de ínicio da Reunião:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Meio-Dia', - 'meeting_editor_screen_meeting_midnight_label' => 'Meia-Noite', - 'meeting_editor_screen_meeting_duration_label' => 'Duration:', - 'meeting_editor_screen_meeting_oe_label' => 'Aberta até o final', - 'meeting_editor_screen_meeting_cc_label' => 'Código do Comitê Mundial:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Contato por e-mail:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Contato por e-mail apenas para essa reunião', - 'meeting_editor_screen_meeting_sb_label' => 'Corpo de Serviço:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Nenhum Corpo de Serviço selecionado', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitude:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Coloque a Longitude', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitude:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Coloque a Latitude', - 'meeting_editor_screen_meeting_location_label' => 'Referência:', - 'meeting_editor_screen_meeting_location_prompt' => 'Coloque uma referência (exemplo: nome do prédio)', - 'meeting_editor_screen_meeting_info_label' => 'Informação Extra:', - 'meeting_editor_screen_meeting_info_prompt' => 'Coloque aqui informações como Carimbo para beneficiários da Justiça ou outras informaçẽos relevantes', - 'meeting_editor_screen_meeting_street_label' => 'Nome da Rua ou Avenida:', - 'meeting_editor_screen_meeting_street_prompt' => 'Coloque aqui o endereço da entrada do grupo', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Bairro:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Coloque aqui o nome do Bairro', - 'meeting_editor_screen_meeting_borough_label' => 'região da cidade(por exemplo zona leste ou centro)', - 'meeting_editor_screen_meeting_borough_prompt' => 'Coloque aqui a região (não é obrigatório)', - 'meeting_editor_screen_meeting_city_label' => 'Nome da Cidade:', - 'meeting_editor_screen_meeting_city_prompt' => 'Nome da Cidade', - 'meeting_editor_screen_meeting_county_label' => 'Região do País:', - 'meeting_editor_screen_meeting_county_prompt' => 'Coloque aqui a região do país (exemplo Região Norte, Nordeste, Sudeste, etc)', - 'meeting_editor_screen_meeting_state_label' => 'Estado:', - 'meeting_editor_screen_meeting_state_prompt' => 'Coloque aqui o nome do Estado', - 'meeting_editor_screen_meeting_zip_label' => 'CEP:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Coloque aqui o CEP sem hífen (exemplo 9876500)', - 'meeting_editor_screen_meeting_nation_label' => 'País:', - 'meeting_editor_screen_meeting_nation_prompt' => 'nome do país', - 'meeting_editor_screen_meeting_comments_label' => 'Comentários:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Linhas de trêm ou metrô:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Linhas de ônibus:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Nome para contato:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'E-mail de contato:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Telefone de contato:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Nome para contato:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'E-mail de contato:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Telefone de contato:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Busque por:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Apenas reuniões publicadas', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Apenas reuniões não publicadas', - 'meeting_editor_screen_meeting_visibility_advice' => 'Isso não aparecera na pesquisa .', - 'meeting_editor_screen_meeting_publish_search_all' => 'Todas as reuniões', - 'meeting_editor_screen_meeting_create_button' => 'Criar nova Reunião', - 'meeting_editor_screen_delete_button' => 'Apagar essa reunião', - 'meeting_editor_screen_delete_button_confirm' => 'Tem certeza que quer apagar essa reunião?', - 'meeting_editor_screen_cancel_button' => 'Cancelar', - 'logout' => 'SAIR', - 'meeting_editor_screen_cancel_confirm' => 'Tem certeza que vai cancelar essa edição de reunião? Todas as alterações serão perdidas?', - 'meeting_lookup_failed' => 'A localização do endereço falhou', - 'meeting_lookup_failed_not_enough_address_info' => 'Não há informações suficientes para buscar o endereço.', - 'meeting_create_button_name' => 'Salvar como uma nova reunião', - 'meeting_saved_as_a_copy' => 'Salvar uma CÓPIA dessa reunião (Criando como uma nova reunião)', - 'meeting_save_buttonName' => 'Salvar as alterações dessa reunião', - 'meeting_editor_tab_bar_basic_tab_text' => 'Básico', - 'meeting_editor_tab_bar_location_tab_text' => 'Localização', - 'meeting_editor_tab_bar_format_tab_text' => 'Formato', - 'meeting_editor_tab_bar_other_tab_text' => 'Outros', - 'meeting_editor_tab_bar_history_tab_text' => 'Histórico', - 'meeting_editor_result_count_format' => '%d Reuniões encontradas', - 'meeting_id_label' => 'ID da reunião:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Ferramenta Básica de Lista de Reuniões BMLT', - 'login_underbanner' => 'Console de Administração do servidor', - 'login' => 'ID de acesso', - 'password' => 'Senha', - 'button' => 'ENTRAR', - 'cookie' => 'Ativar os cookies do navegador para administrar esse servidor.', - 'noscript' => 'Você não vai conseguir administrar esse servidor sem JavaScript.', - 'title' => 'Por favor fazer login para administrar o servidor.', - 'edit_Meeting_object_not_found' => 'ERRO: A Reunião não foi encontrada.', - 'edit_Meeting_object_not_changed' => 'ERRO: A Reunião não foi alterada.', - 'edit_Meeting_auth_failure' => 'Você não tem permissão para editar essa reunião.', - 'not_auth_1' => 'NÃO ALTORIZADO', - 'not_auth_2' => 'Você não tem permissão para editar esse servidor.', - 'not_auth_3' => 'Problema com usuário ou senha usado.', - 'email_format_bad' => 'Verifique se o e-mail está correto.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

No History Available For This Meeting

', - 'service_body_editor_disclosure' => 'Administração de Corpo de Serviço', - 'service_body_change_fader_success_text' => 'As configurações de Corpo de Serviço foram alteradas com sucesso', - 'service_body_change_fader_fail_text' => 'Falha na configuração de Corpo de Serviço', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Nome:', - 'service_body_name_default_prompt_text' => 'Coloque aqui o nome da estrutura de serviço', - 'service_body_parent_popup_label' => 'Estrutura de Serviço Responsável:', - 'service_body_parent_popup_no_parent_option' => 'Estrutura de Serviço Líder', - 'service_body_editor_screen_sb_admin_user_label' => 'Administrador Primário:', - 'service_body_editor_screen_sb_admin_description_label' => 'Descrição:', - 'service_body_description_default_prompt_text' => 'Coloque aqui a descrição da estrutura de serviço', - 'service_body_editor_screen_sb_admin_email_label' => 'Email de contato:', - 'service_body_email_default_prompt_text' => 'E-mail de contato da estrutura', - 'service_body_editor_screen_sb_admin_uri_label' => 'site da estrutura:', - 'service_body_uri_default_prompt_text' => 'Coloque aqui o site da estrutura de serviço', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Lista de editores da estrutura:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Esses usuários tem acesso completo a edição das reuniões da estrutura.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Editores básicos da lista:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Esses usuários podem acessar somente reuniões não publicadas.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observadores:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Esses usuários só podem ver os dados, não edita-los.', - 'service_body_dirty_confirm_text' => 'Você alterou os dados dessa estrutura. Saindo perderá todas as mudanças. Tem certeza?', - 'service_body_save_button' => 'Salvar alterações', - 'service_body_create_button' => 'Criar esse corpo de serviço', - 'service_body_delete_button' => 'Apagar esse corpo de serviço', - 'service_body_delete_perm_checkbox' => 'Apagar esse corpo de serviço permanentemente.', - 'service_body_delete_button_confirm' => 'Tem certeza que quer apagar esse corpo de serviço? Tenha certeza de apagar as reuniões ou transferi-las para outro corpo de serviço antes de continuar.', - 'service_body_delete_button_confirm_perm' => 'Este corpo de serviço será apagado permanentemente!', - 'service_body_change_fader_create_success_text' => 'A estrutura de serviço foi criada com sucesso', - 'service_body_change_fader_create_fail_text' => 'Houve falha na criação da estrutura de serviço', - 'service_body_change_fader_delete_success_text' => 'A estrutura de serviço foi apagada', - 'service_body_change_fader_delete_fail_text' => 'Houve falha ao apagar a estrutura de serviço', - 'service_body_change_fader_fail_no_data_text' => 'A alteração da estrutura de serviço falhou, Por não haver dados fornecidos', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Falha na alteração da estrutura de serviço, Estrutura de serviço não encontrada', - 'service_body_change_fader_fail_cant_update_text' => 'Falha na alteração da estrutura de serviço, Estrutura de serviço não atualizada', - 'service_body_change_fader_fail_bad_hierarchy' => 'Falha na alteração da estrutura de serviço', - 'service_body_cancel_button' => 'Restaurar ao original', - 'service_body_editor_type_label' => 'Tipo de Estrutura de Serviço:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Grupo', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Operador', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'CSA Comitê de Serviço de Área', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'CSR Comitê de Serviço da Região', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Conferẽncia Mundial de Serviço', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Área Metropolitana', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Forum Zonal', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Grupo de Unidade de Serviço', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Unidade de Serviço Local', - 'service_body_editor_screen_helpline_label' => 'Linha de Ajuda:', - 'service_body_editor_screen_helpline_prompt' => 'Coloque aqui o numero do Linha de Ajuda', - 'service_body_editor_uri_naws_format_text' => 'Busque as reuniões dessa estrutura de serviço em arquivo no formato compatível com o NAWS', - 'edit_Meeting_meeting_id' => 'ID da Reunião:', - 'service_body_editor_create_new_sb_option' => 'Criar uma nova estrutura de serviço', - 'service_body_editor_screen_world_cc_label' => 'Código do Comitê Mundial:', - 'service_body_editor_screen_world_cc_prompt' => 'Coloque aqui o código do Comitê Mundial', - 'user_editor_disclosure' => 'Usuário Administrador', - 'user_editor_create_new_user_option' => 'Criar um novo usuário', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Login:', - 'user_editor_login_default_text' => 'nome de usuário', - 'user_editor_account_type_label' => 'O usuário é:', - 'user_editor_user_owner_label' => 'Pertence a: ', - 'user_editor_account_type_1' => 'Administrador do servidor', - 'user_editor_account_type_2' => 'Administrador da estrutura de serviço', - 'user_editor_account_type_3' => 'Editor de Estrutura de Serviço', - 'user_editor_account_type_5' => 'Observador', - 'user_editor_account_type_4' => 'Usuário desativado', - 'user_editor_account_name_label' => 'Nome de usuário:', - 'user_editor_name_default_text' => 'Coloque o usuário aqui', - 'user_editor_account_description_label' => 'Descrição:', - 'user_editor_description_default_text' => 'Coloque aqui a descrição do usuário', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'coloque aqui o e-mail', - 'user_change_fader_success_text' => 'Alteração do usuário realizada com sucesso', - 'user_change_fader_fail_text' => 'Falha na alteração do usuário', - 'user_change_fader_create_success_text' => 'Usuário criado com sucesso!', - 'user_change_fader_create_fail_text' => 'Falha na criação do usuário', - 'user_change_fader_create_fail_already_exists' => 'Você está tentando criar um usuário que já existe.', - 'user_change_fader_delete_success_text' => 'Usuário apagado com sucesso', - 'user_change_fader_delete_fail_text' => 'Falha ao apagar usuário', - 'user_save_button' => 'Salvar alterações para esse usuário', - 'user_create_button' => 'Criar novo usuário', - 'user_cancel_button' => 'Restaurar ao Original', - 'user_delete_button' => 'Apagar esse usuário', - 'user_delete_perm_checkbox' => 'Apagar permanentemente o usuário', - 'user_password_label' => 'Mudar Senha para:', - 'user_new_password_label' => 'Senha alterada:', - 'user_password_default_text' => 'Deixe em branco, a não ser que queira mudar a senha', - 'user_new_password_default_text' => 'Você deve configurar uma senha para o novo usuário', - 'user_dirty_confirm_text' => 'Você fez alterações para esse uusuário. Tem certeza que quer perder as alteraçẽos feitas?', - 'user_delete_button_confirm' => 'Tem certeza que vai apagar o usuário?', - 'user_delete_button_confirm_perm' => 'Esse usuário vai ser apagado permanentemente!', - 'user_create_password_alert_text' => 'Novos usuários devem ter uma senha. Você não digitou uma senha ainda.', - 'user_change_fader_fail_no_data_text' => 'Falha na alteração de usuário, Não há dados fornecidos', - 'user_change_fader_fail_cant_find_sb_text' => 'Falha na alteração do usuário, Usuario não existe', - 'user_change_fader_fail_cant_update_text' => 'Falha na alteração do usuário, Usuário não atualizado', - 'format_editor_disclosure' => 'Administração do Formato de Reunião', - 'format_change_fader_change_success_text' => 'Formato de Reunião atualizado', - 'format_change_fader_change_fail_text' => 'Falha na atualização de formato', - 'format_change_fader_create_success_text' => 'Formato de Reunião criado com sucesso', - 'format_change_fader_create_fail_text' => 'Falha na criação de Formato de Reunião', - 'format_change_fader_delete_success_text' => 'Formato apagado com sucesso', - 'format_change_fader_delete_fail_text' => 'Falha ao apagar formato', - 'format_change_fader_fail_no_data_text' => 'Falha na alteração de formato, falta de dados fornecidos', - 'format_change_fader_fail_cant_find_sb_text' => 'Falha na alteração de formato, formato não encontrado', - 'format_change_fader_fail_cant_update_text' => 'Falha na alteração de formato, formato não atualizado', - 'format_editor_name_default_text' => 'Coloque uma breve descrição', - 'format_editor_description_default_text' => 'Coloque aqui uma descrição mais detalhada', - 'format_editor_create_format_button_text' => 'Criar novo formato', - 'format_editor_cancel_create_format_button_text' => 'Cancelar', - 'format_editor_create_this_format_button_text' => 'Criar formato', - 'format_editor_change_format_button_text' => 'Alterar formato', - 'format_editor_delete_format_button_text' => 'Apagar formato', - 'format_editor_reset_format_button_text' => 'Restaurar ao Original', - 'need_refresh_message_fader_text' => 'Você deve atualizar essa pagina antes de fazer novas alterações (F5)', - 'need_refresh_message_alert_text' => 'Pelas alterações feitas na Administração do Servidor, Administração de Estrutura de Serviço, Administração de Usuário, ou Administração de Formato de Reunião, as informações demonstradas nessa sessão não são mais precisas, então essa pagina precisa ser ATUALIZADA. Para isso basta teclar a tecla de função F5 ou sair e logar novamente.', - 'format_editor_delete_button_confirm' => 'Tem certeza que deseja apagar esse Formato de Reunião?', - 'format_editor_delete_button_confirm_perm' => 'Esse formato será apagado permanentemente!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Senha muito curta! Ela tem que ter no mínimo %d caracteres!', - 'AJAX_Auth_Failure' => 'Falha de autorização para essa ação. Falha de configuração do servidor.', - 'Maps_API_Key_Warning' => 'Há um problema com a chave da API do Google Maps.', - 'Maps_API_Key_Not_Set' => 'A chave da API do Google Maps não foi configurada.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Importar Dados de Reuniões (AVISO: Isso vai sobreescrever os dados atuais!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Não pode mostrar dados -não autorizado', - 'Value_Prompts' => array( - 'id_bigint' => 'Meeting ID', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Estrutura de Serviço', - 'service_bodies' => 'Service Bodies', - 'weekdays' => 'Dia da Semana', - 'weekday' => 'Reunião acontece a cada', - 'start_time' => 'Horário de ínicio', - 'duration_time' => 'Duração da Reunião', - 'location' => 'Localidade', - 'duration_time_hour' => 'Hora', - 'duration_time_hours' => 'Horas', - 'duration_time_minute' => 'Minuto', - 'duration_time_minutes' => 'Minutos', - 'lang_enum' => 'Língua', - 'formats' => 'Formato', - 'distance' => 'Distancia do Centro', - 'generic' => 'Reunião de NA', - 'close_title' => 'Fechar detalhes da Reunião', - 'close_text' => 'Fechar janela', - 'map_alt' => 'Mapa de reuniões', - 'map' => 'Clique aqui para abrir o mapa', - 'title_checkbox_unpub_meeting' => 'Essa Reunião não foi publicada. Não pode ser pesquisada.', - 'title_checkbox_copy_meeting' => 'Esta reunião é uma duplicata e também não foi publicada. Não pode ser encontrada numa pesquisa.' - ), - 'world_format_codes_prompt' => 'Formato NAWS:', - 'world_format_codes' => array( - '' => 'Nenhum', - 'OPEN' => 'Aberta', - 'CLOSED' => 'Fechada', - 'WCHR' => 'Acessivel à Cadeirante', - 'BEG' => 'Recém-Chegados', - 'BT' => 'Texto Básico', - 'CAN' => 'Luz de Velas', - 'CPT' => '12 Conceitos', - 'CW' => 'Crianças bem vindas', - 'DISC' => 'Partilha', - 'GL' => 'LGBTQ+', - 'IP' => 'Estudo de IPs', - 'IW' => 'Estudo Isto Resulta', - 'JFT' => 'Estudo do Só Por Hoje', - 'LC' => 'Estudo Vivendo Limpo', - 'LIT' => 'Estudo de Literatura', - 'M' => 'Só Homens', - 'MED' => 'Meditação', - 'NS' => 'Proibido Fumar', - 'QA' => 'Perguntas e Respostas', - 'RA' => 'Acesso Restrito', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Permitido Fumar', - 'SPK' => 'Temática', - 'STEP' => 'Passos', - 'SWG' => 'Estudo Guia de Passos', - 'TOP' => 'Tema', - 'TRAD' => 'Tradições', - 'VAR' => 'Formato Variável', - 'W' => 'Só Mulheres', - 'Y' => 'Só Jovens', - 'LANG' => 'Lingua Estrangeira', - 'GP' => 'Guia de Principios', - 'NC' => 'Não permite crianças', - 'CH' => 'Fechado em feriados', - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', - 'format_type_codes' => array( - '' => 'Nenhum', - 'FC1' => 'Formato de Reunião (Estudo de literatura, Temática, etc.)', - 'FC2' => 'Caracteristica do local (Acessivel a Cadeirante, Estacionamento limitado, etc.)', - 'FC3' => 'Necessidades e Restrições (Só Mulheres, LGTBQ+, Crianças não permitidas, etc.)', - 'O' => 'Atenção não membros (Abertas ou Fechadas)', - 'LANG' => 'Lingua', - 'ALERT' => 'Formato ()', - ), - - 'cookie_monster' => 'Este site usa cookies para ajudar na escolha da sua lingua padrão.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'ID Mundial', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'ID Estrutura de Serviço', - 'weekday_tinyint' => 'Dia da Semana', - 'venue_type' => 'Venue Type', - 'start_time' => 'Horário', - 'duration_time' => 'Duração', - 'time_zone' => 'Time Zone', - 'formats' => 'Formatos', - 'lang_enum' => 'Lingua', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Publicada', - 'email_contact' => 'Contato Email', - ), - 'check_all' => 'Marque Todas', - 'uncheck_all' => 'Desmarque Todas', - 'automatically_calculated_on_save' => 'Calcular automaticamente ao salvar.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'Reunião Alterada.', - '__THE_MEETING_WAS_CREATED__' => 'Reunião foi criada.', - '__THE_MEETING_WAS_DELETED__' => 'Reunião foi apagada.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'Restaurada a versão anterior da reunião.', - - '__THE_FORMAT_WAS_CHANGED__' => 'O Formato foi alterado.', - '__THE_FORMAT_WAS_CREATED__' => 'O Formato foi criado.', - '__THE_FORMAT_WAS_DELETED__' => 'O formato foi apagado.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Restaurado o formato anterior da reunião.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'A estrutura de serviço foi alterada.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'A estrutura de serviço foi criada.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'A estrutura de serviço foi apagada.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'Restaurada a estrutura de serviço anterior.', - - '__THE_USER_WAS_CHANGED__' => 'O usuário foi alterado.', - '__THE_USER_WAS_CREATED__' => 'O usuário foi criado.', - '__THE_USER_WAS_DELETED__' => 'O usuário foi apagado.', - '__THE_USER_WAS_ROLLED_BACK__' => 'Restaurado o usuário para versão anterior.', - - '__BY__' => 'por', - '__FOR__' => 'para' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'mudou de', - 'to' => 'para', - 'was_changed' => 'foi alterado', - 'was_added_as' => 'adicionado como', - 'was_deleted' => 'foi apagado', - 'was_published' => 'A Reunião foi publicada', - 'was_unpublished' => 'A Reunião foi tirada do ar', - 'formats_prompt' => 'O Formato da Reunião', - 'duration_time' => 'Duração da Reunião', - 'start_time' => 'Inicio da Reunião', - 'longitude' => 'Longitude da Reunião', - 'latitude' => 'Latitude da Reunião', - 'sb_prompt' => 'A reunião alterou sua estrutura de serviço de', - 'id_bigint' => 'ID da reunião', - 'lang_enum' => 'Idioma da Reunião', - 'worldid_mixed' => 'The World Committee Code', - 'weekday_tinyint' => 'The day of the week on which the meeting gathers', - 'non_existent_service_body' => 'Estrutura de Serviço não existe mais', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/ru/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/ru/data_transfer_strings.php deleted file mode 100644 index c78bf7dc4..000000000 --- a/src/legacy/local_server/server_admin/lang/ru/data_transfer_strings.php +++ /dev/null @@ -1,45 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array ( 'key_strings' => array ( 'id_bigint' => 1, - 'worldid_mixed' => 1, - 'shared_group_id_bigint' => 1, - 'service_body_bigint' => 1, - 'weekday_tinyint' => 1, - 'start_time' => 1, - 'duration_time' => 1, - 'formats' => 1, - 'lang_enum' => 1, - 'longitude' => 1, - 'latitude' => 1, - 'published' => 1, - 'email_contact' => 1 - ), - - 'days' => array ( 'Воскресенье', - 'Понедельник', - 'Вторник', - 'Среда', - 'Четверг', - 'Пятница', - 'Суббота' - ), - ); diff --git a/src/legacy/local_server/server_admin/lang/ru/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/ru/install_wizard_strings.php deleted file mode 100644 index e23847b23..000000000 --- a/src/legacy/local_server/server_admin/lang/ru/install_wizard_strings.php +++ /dev/null @@ -1,161 +0,0 @@ -.*/ -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -global $comdef_install_wizard_strings; - -$comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ОШИБКА: на этом сервере должен быть установлен PHP версии 5.6 или выше!', - 'Database_PDO_Error' => 'ОШИБКА: у вас не установлен PHP PDO!', - 'Database_Type_Error' => 'ОШИБКА: даже если у вас есть PDO, у вас не установлены драйверы базы данных!', - 'Database_Type_MySQL_Error' => 'ОШИБКА: Даже если у вас есть PDO и у вас установлены драйверы баз данных, ни один из них не является MySQL (единственный поддерживаемый драйвер)!', - 'Database_TestButton_Text' => 'ТЕСТ', - 'Database_TestButton_Success' => 'Соединение с базой данных прошло успешно.', - 'Database_TestButton_Fail' => 'Ошибка подключения к базе данных: ', - 'Database_TestButton_Fail2' => 'Не удалось подключиться к базе данных, поскольку уже существует инициализированная база данных.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'Ошибка подключения к базе данных! Убедитесь, что база данных существует, ПОЛНОСТЬЮ ПУСТАЯ, пользователь создан, и этот пользователь имеет полные права доступа к пустой базе данных.', - 'AJAX_Handler_DB_Established_Error' => 'База данных уже существует и была настроена! Вы не можете использовать эту настройку, чтобы перезаписать существующую базу данных!', - 'AJAX_Handler_DB_Incomplete_Error' => 'Не достаточно информации для инициализации базы!', - - 'NoDatabase_Note_AlreadySet' => 'База данных уже инициализирована с указанным префиксом таблицы. Пожалуйста, выберите новую.', - 'NoDatabase_Note_GenericError' => 'При подключении к базе данных произошла ошибка. Пожалуйста, проверьте настройки вашей базы данных.', - 'NoDatabase_Note_ClickHere' => 'Нажмите здесь, чтобы вернуться на страницу настройки базы данных.', - 'NoDatabase_Note_PasswordIssue' => 'Вы должны выбрать имя пользователя и пароль для пользователя Администратора сервера.', - 'NoDatabase_Note_ServerSettings_ClickHere' => 'Нажмите здесь, чтобы вернуться на страницу настроек сервера.', - 'NoServerAdmin_Note_AlreadySet' => 'База данных уже существует, поэтому вы не можете настроить учетную запись администратора сервера (одна из них уже существует).', - 'NeedLongerPasswordNote' => 'Этот пароль слишком короткий. Этот пароль должен быть не менее % символов.', - - 'Prev_Button' => 'Предыдущий', - 'Next_Button' => 'Следущий', - - 'Page_1_Tab' => 'ШАГ 1: База данных', - 'Page_1_Heading' => 'Настройки подключения к базе данных', - 'Page_1_Text' => 'Прежде чем вы сможете применить настройки на этой странице, вы должны настроить новую ПОЛНОСТЬЮ ПУСТУЮ базу данных и создать пользователя базы данных, который имеет полные права пользователя в этой базе данных.', - - 'Database_Name' => 'Имя базы данных:', - 'Database_Name_Default_Text' => 'Введите имя базы данных', - 'Database_Type' => 'Тип базы данных:', - 'Database_Host' => 'Хост базы данных:', - 'Database_Host_Default_Text' => 'Введите хост базы данных', - 'Database_Host_Additional_Text' => 'Это обычно "localhost."', - 'Table_Prefix' => 'Префикс таблицы:', - 'Table_Prefix_Default_Text' => 'Введите префикс таблицы', - 'Table_Prefix_Additional_Text' => 'Только для нескольких root серверов, совместно использующих базу данных.', - 'Database_User' => 'Пользователь базы данных:', - 'Database_User_Default_Text' => 'Введите имя пользователя базы данных', - 'Database_PW' => 'Пароль базы данных:', - 'Database_PW_Default_Text' => 'Введите пароль базы данных', - 'Database_PW_Additional_Text' => 'Сделайте самый уродливый, сложный пароль. Он обладает огромной силой, потому что вы не сможете его запомнить.', - - 'Maps_API_Key_Warning' => 'Возникла проблема с ключом API Карт Google.', - 'Maps_API_Key_Not_Set' => 'Ключ API Карт Google не задан.', - 'Maps_API_Key_Valid' => 'Ключ API Карт Google действителен.', - 'Maps_API_Key_ClickHere' => 'Нажмите здесь, чтобы вернуться на страницу настройки ключа API Карт Google.', - - 'Page_2_Tab' => 'ШАГ 2: Настройки API Карт Google', - 'Page_2_Heading' => 'Настройки API Карт Google', - 'Page_2_API_Key_Prompt' => 'Введите ключ API Google для геокодирования:', - 'Page_2_API_Key_Set_Button' => 'ТЕСТОВЫЙ КЛЮЧ', - 'Page_2_API_Key_Not_Set_Prompt' => 'Сначала установите API ключ', - 'Page_2_Text' => 'При сохранении собрания корневой сервер BMLT использует API Карт Google для определения широты и долготы для адреса встречи. Эти настройки необходимы для того, чтобы корневой сервер BMLT мог взаимодействовать с API Карт Google.', - - 'Page_3_Tab' => 'ШАГ 3: Настройки сервера', - 'Page_3_Heading' => 'Установить различные глобальные настройки сервера', - 'Page_3_Text' => 'Это несколько параметров, которые влияют на администрирование и общую конфигурацию этого сервера. Большинство настроек сервера выполняются на самом сервере.', - 'Admin_Login' => 'Логин администратора сервера:', - 'Admin_Login_Default_Text' => 'Введите логин администратора сервера', - 'Admin_Login_Additional_Text' => 'Это строка логина для Администратора Сервера.', - 'Admin_Password' => 'Пароль администратора сервера:', - 'Admin_Password_Default_Text' => 'Введите пароль администратора сервера', - 'Admin_Password_Additional_Text' => 'Убедитесь, что это нетривиальный пароль! У этого есть большая сила! (Вы никогда не сможете его запомнить).', - 'ServerAdminName' => 'Администратор Сервера', - 'ServerAdminDesc' => 'Главный администратор сервера', - 'ServerLangLabel' => 'Язык сервера по умолчанию:', - 'DistanceUnitsLabel' => 'Единицы расстояния:', - 'DistanceUnitsMiles' => 'Мили', - 'DistanceUnitsKM' => 'Километры', - 'SearchDepthLabel' => 'Плотность встреч для автоматического поиска:', - 'SearchDepthText' => 'Это приблизительное количество встреч, которые необходимо найти при автоматическом выборе радиуса. Больше встреч означает больший радиус.', - 'HistoryDepthLabel' => 'Сколько изменений на собраниях сохранять:', - 'HistoryDepthText' => 'Чем дольше история, тем больше будет база данных.', - 'TitleTextLabel' => 'Название экрана администрирования:', - 'TitleTextDefaultText' => 'Введите краткое название для редактирования страницы входа', - 'BannerTextLabel' => 'Подсказка для логина администратора:', - 'BannerTextDefaultText' => 'Введите короткую подсказку для страницы входа', - 'RegionBiasLabel' => 'Регион смещения:', - 'PasswordLengthLabel' => 'Минимальная длина пароля:', - 'PasswordLengthExtraText' => 'Это также повлияет на пароль администратора сервера, указанный выше.', - 'DefaultClosedStatus' => 'Встречи считаются закрытыми по умолчанию:', - 'DefaultClosedStatusExtraText' => 'Это в первую очередь влияет на экспорт в NAWS.', - 'DurationLabel' => 'Продолжительность встречи по умолчанию:', - 'DurationHourLabel' => 'Часы', - 'DurationMinutesLabel' => 'Минуты', - 'LanguageSelectorEnableLabel' => 'Выбор языка отображения при входе в систему:', - 'LanguageSelectorEnableExtraText' => 'Если вы нажмёте это, на экране входа появится всплывающее меню, чтобы администраторы могли выбрать свой язык.', - 'SemanticAdminLabel' => 'Включить семантическое администрирование:', - 'SemanticAdminExtraText' => 'Если этот флажок не установлен, все администрирование должно выполняться через логин корневого сервера (без приложения) (No Apps)).', - 'EmailContactEnableLabel' => 'Разрешить контакты электронной почты встреч:', - 'EmailContactEnableExtraText' => 'Если вы выберете это, посетители сайта смогут отправлять электронные письма с записями собраний.', - 'EmailContactAdminEnableLabel' => 'Включить администратора службы поддержки на эти электронные письма:', - 'EmailContactAdminEnableExtraText' => 'Отправляет копии этих писем администратору сервисного органа (если они не являются основным получателем)).', - 'EmailContactAllAdminEnableLabel' => 'Включить всех администраторов сервисных органов в эти электронные письма:', - 'EmailContactAllAdminEnableExtraText' => 'Отправляет копии этих писем всем соответствующим администраторам сервисных органов.', - - 'Page_4_Initialize_Root_Server_Heading' => 'Инициализировать root сервер', - 'Page_4_Initialize_Root_Server_Text' => 'Кнопка ниже инициализирует root server с пустой базой данных и администратора сервера.', - 'Page_4_Initialize_Root_Server_Button' => 'Инициализация root server', - - 'Page_4_Tab' => 'ШАГ 4: Сохранить настройки', - 'Page_4_Heading' => 'Создать файл настроек', - 'Page_4_Text' => 'Root Server не смог создать файл настроек для вас. Вместо этого мы просим вас создать его самостоятельно через FTP или файловый менеджер панели управления, назовите его «auto-config.inc.php» и вставьте в файл следующий текст:', - - 'NAWS_Export_Spreadsheet_Optional' => 'NAWS Экспорт электронных таблиц (необязательно): ', - 'NAWS_Export_Spreadsheet_Initially_Publish' => 'Initialize imported meetings to \'published\': ', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Собрания, как правило, продолжительностью 90 минут (полтора часа), если не указано иное.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Логин Администратора :', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Администрирование ', - 'DefaultRegionBias' => 'мы', - 'search_spec_map_center' => array ( 'долгота' => -118.563659, 'широта' => 34.235918, 'приближенность' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'Этот мастер установки проведет вас через процесс создания исходной базы данных, а также файла конфигурации. На последнем шаге мы создадим файл настроек и инициализируем пустую базу данных.', - 'Explanatory_Text_1_DB_Intro' => 'Первое, что вам нужно сделать, это создать новую, пустую базу данных и пользователя базы данных, который имеет полный доступ к этой базе данных. Обычно это делается через панель управления вашего веб-сайта. После того, как вы создали базу данных, вам необходимо ввести информацию об этой базе данных в текстовые элементы на этой странице..', - - 'Explanatory_Text_2_Region_Bias_Intro' => '«Регион смещения» - это код, который отправляется в Google по завершении поиска местоположения и может помочь Google разобраться в неоднозначных поисковых запросах.', - 'Explanatory_Text_2_API_key_Intro' => '«Ключ API» - это ключ, который you need to register with Google чтобы иметь возможность использовать их картографический сервис.', - 'Explanatory_Text_2_API_key_2_Intro' => 'Вам потребуется предоставить действительный ключ API для создания новых собраний на корневом сервере.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'Администратор сервера является основным пользователем сервера. Это единственная учетная запись, которая может создавать новых пользователей и службы и является очень мощной. Вы должны создать идентификатор входа в систему и нетривиальный пароль для этой учетной записи. Вы сможете изменить другие аспекты учетной записи на главном сервере после настройки базы данных.', - 'Explanatory_Text_3_Misc_Intro' => 'Это различные настройки, которые влияют на поведение и внешний вид корневого сервера.', - - 'Explanatory_Text_4_Main_Intro' => 'Если вы ввели информацию базы данных, предоставили действительный ключ API Карт Google и указали регистрационную информацию для Администратора сервера, тогда вы можете инициализировать корневой сервер здесь. Помните, что база данных должна быть ПОЛНОСТЬЮ ПУСТО из таблиц корневого сервера BMLT для этого сервера (в ней могут быть таблицы для других серверов или служб).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'Текст в поле ниже - это исходный код PHP для основного файла настроек. Вам нужно будет создать файл на сервере с этим текстом. Файл находится на том же уровне, что и каталог основного сервера для корневого сервера.', - 'Explanatory_Text_4_File_Extra' => 'Вы также должны убедиться, что права доступа к файлам ограничены (chmod 0644). Это предотвращает запись файла, и корневой сервер не будет работать, если файл не имеет правильных разрешений.', - 'Page_4_PathInfo' => 'Файл должен быть размещен как %s/auto-config.inc.php, где ваш %s каталог. После того, как файл был создан и вы поместили в него вышеуказанный текст, вы должны выполнить следующую команду, чтобы убедиться, что права доступа правильные:', - 'Page_4_Final' => 'Как только все это будет завершено, обновите эту страницу, и вы должны увидеть страницу входа на корневой сервер.', - 'FormatLangNamesLabel' => 'Введите дополнительные языки в формате code1:name1 (Например "fa:farsi ru:russian"):', -); diff --git a/src/legacy/local_server/server_admin/lang/ru/name.txt b/src/legacy/local_server/server_admin/lang/ru/name.txt deleted file mode 100644 index db514675c..000000000 --- a/src/legacy/local_server/server_admin/lang/ru/name.txt +++ /dev/null @@ -1 +0,0 @@ -Русский \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/ru/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/ru/server_admin_strings.inc.php deleted file mode 100644 index c0fbbbcb5..000000000 --- a/src/legacy/local_server/server_admin/lang/ru/server_admin_strings.inc.php +++ /dev/null @@ -1,493 +0,0 @@ -. */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array('server_admin_disclosure' => 'Администрирование сервера', - 'server_admin_naws_spreadsheet_label' => 'Обновленный список World ID:', // TODO: was changed to "Updated World Committee Codes Spreadsheet" - 'update_world_ids_button_text' => 'Обновление World ID собраний', // TODO: was changed to "'Update World Committee Codes" - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Обновление World ID из таблицы NAWS', // TODO: was changed to "Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet" - 'server_admin_error_no_world_ids_updated' => 'Не найдено обновлений World ID . Это может быть связано с тем, что у вашего пользователя нет прав на обновление отправленных собраний.', - 'server_admin_error_required_spreadsheet_column' => 'Обязательный столбец не существует в электронной таблице: ', - 'server_admin_error_bmlt_id_not_integer' => 'Предоставленный bmlt_id не является целым числом: ', - 'server_admin_error_could_not_create_reader' => 'Не удалось создать reader для файла: ', - 'server_admin_error_no_files_uploaded' => 'Файлы не были загружены.', - 'server_admin_error_service_bodies_already_exist' => 'Сервисные органы со следующими World ID уже существуют: ', - 'server_admin_error_meetings_already_exist' => 'Собрания со следующими World ID уже существуют: ', - 'server_admin_ui_num_meetings_updated' => 'Количество обновленных собраний: ', - 'server_admin_ui_num_meetings_not_updated' => 'Номера собраний, которые не нуждались в обновлении: ', - 'server_admin_ui_warning' => 'ПРЕДУПРЕЖДЕНИЕ', - 'server_admin_ui_errors' => 'Ошибка(и)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - // TODO: re-translate this string (English version has been updated) - // 'server_admin_ui_problem_meetings' => 'Собрания были найдены в таблице, которой не было в базе данных. Это могло произойти, если собрание удалено или не опубликовано. Не достающие ID собраний : ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Созданы сервисные органы: ', - 'server_admin_ui_meetings_created' => 'Собрания созданы: ', - 'server_admin_ui_users_created' => 'Пользователи создали: ', - 'server_admin_ui_refresh_ui_text' => 'Выйдите, а затем войдите снова, чтобы увидеть новые сервисные органы, пользователей и собрания.', - 'import_service_bodies_and_meetings_button_text' => 'Импорт собраний и органов обслуживания', - 'import_service_bodies_and_meetings_dropdown_text' => 'Импорт органов обслуживания и собраний из экспорта NAWS', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS импортированные таблицы :', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Мой аккаунт', - 'account_name_label' => 'Имя аккаунта:', - 'account_login_label' => 'Мой логин:', - 'account_type_label' => 'Меня зовут:', - 'account_type_1' => 'Администратор сервера', - 'account_type_2' => 'Администратор орагана обслуживания', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'Жалкий Неудачник который даже не должен был иметь доступ к этой странице - Автор этого программного обеспечения - упырь!', - 'account_type_5' => 'Наблюдатель органа обслуживания:', - 'change_password_label' => 'Изменить мой пароль на:', - 'change_password_default_text' => 'Оставь это в покое, если не хочешь менять свой пароль', - 'account_email_label' => 'Мой электронный адрес:', - 'email_address_default_text' => 'Введите адрес электронной почты', - 'account_description_label' => 'Мое описание:', - 'account_description_default_text' => 'Введите описание', - 'account_change_button_text' => 'Изменить настройки моей учетной записи', - 'account_change_fader_success_text' => 'Информация об учетной записи была успешно изменена', - 'account_change_fader_failure_text' => 'Информация об учетной записи не была изменена', - 'meeting_editor_disclosure' => 'Редактор собраний', - 'meeting_editor_already_editing_confirm' => 'Вы в настоящее время редактируете другое собрание. Вы хотите потерять все изменения в этом собрании?', - 'meeting_change_fader_success_text' => 'Собрание успешно изменено', - 'meeting_change_fader_failure_text' => 'Собрание не было изменено', - 'meeting_change_fader_success_delete_text' => 'Собрание успешно удалено', - 'meeting_change_fader_fail_delete_text' => 'Собрание не было удалено', - 'meeting_change_fader_success_add_text' => 'Новое собрание успешно добавлено', - 'meeting_change_fader_fail_add_text' => 'Новое собрание не было добавлено', - 'meeting_text_input_label' => 'Поиск текста:', - 'access_service_body_label' => 'У меня есть доступ к:', - 'meeting_text_input_default_text' => 'Введите текст для поиска', - 'meeting_text_location_label' => 'Это местоположение или почтовый индекс', - 'meeting_search_weekdays_label' => 'Поиск выбранных будней:', - 'meeting_search_weekdays_names' => array('ВСЕ', 'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'), - 'meeting_search_service_bodies_label' => 'Поиск в выбранных органах обслуживания:', - 'meeting_search_start_time_label' => 'Поиск по времени начала собрания:', - 'meeting_search_start_time_all_label' => 'Любое время', - 'meeting_search_start_time_morn_label' => 'Утро', - 'meeting_search_start_time_aft_label' => 'Днем', - 'meeting_search_start_time_eve_label' => 'Вечер', - 'meeting_search_no_results_text' => 'Собрания не найдены', - 'meeting_editor_tab_specifier_text' => 'Поиск собраний', - 'meeting_editor_tab_editor_text' => 'Редактировать собрания', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Создать новое собрание', - 'meeting_editor_location_map_link' => 'Карта местности', - 'meeting_editor_screen_match_ll_button' => 'Установите долготу и широту в адрес', - 'meeting_editor_screen_default_text_prompt' => 'Введите текст или число', - 'meeting_is_published' => 'Собрание опубликовано', - 'meeting_unpublished_note' => 'Примечание. Отмена публикации собрания означает временное закрытие. Если эта встреча закрыта навсегда, пожалуйста, удалите ее.', - 'meeting_editor_screen_meeting_name_label' => 'Название Собрания:', - 'meeting_editor_screen_meeting_name_prompt' => 'Введите название собрания', - 'meeting_editor_screen_meeting_weekday_label' => 'Будни:', - 'meeting_editor_screen_meeting_start_label' => 'Начало времени собрания:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => '00:00 - 12:00', - 'meeting_editor_screen_meeting_pm_label' => '12:00 - 00:00', - 'meeting_editor_screen_meeting_noon_label' => 'Полдень', - 'meeting_editor_screen_meeting_midnight_label' => 'полночь', - 'meeting_editor_screen_meeting_duration_label' => 'Продолжительность:', - 'meeting_editor_screen_meeting_oe_label' => 'Открыто-закрыто', - 'meeting_editor_screen_meeting_cc_label' => 'Код мирового комитета:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Контактный E-mail собрания', - 'meeting_editor_screen_meeting_contact_prompt' => 'Введите адрес электронной почты для контакта только для этого собрания', - 'meeting_editor_screen_meeting_sb_label' => 'Орган обслуживания:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Нет выбранного органа обслуживания', - 'meeting_editor_screen_meeting_longitude_label' => 'Долгота:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Введите долготу', - 'meeting_editor_screen_meeting_latitude_label' => 'Широта', - 'meeting_editor_screen_meeting_latitude_prompt' => 'Введите широту', - 'meeting_editor_screen_meeting_location_label' => 'Расположение:', - 'meeting_editor_screen_meeting_location_prompt' => 'Введите название местоположения (например, название здания)', - 'meeting_editor_screen_meeting_info_label' => 'Дополнительная информация:', - 'meeting_editor_screen_meeting_info_prompt' => 'Введите любую дополнительную информацию о местоположении', - 'meeting_editor_screen_meeting_street_label' => 'Адрес улицы:', - 'meeting_editor_screen_meeting_street_prompt' => 'Введите адрес улицы', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Окрестности:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Войдите в Район (Не Город или Подраздел Города)', - 'meeting_editor_screen_meeting_borough_label' => 'Район / Город Подраздел:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Введите район или городской край (не соседний)', - 'meeting_editor_screen_meeting_city_label' => 'Город:', - 'meeting_editor_screen_meeting_city_prompt' => 'Название города (Не округ или городской округ)', - 'meeting_editor_screen_meeting_county_label' => 'Страна\республика:', - 'meeting_editor_screen_meeting_county_prompt' => 'Введите название страны или республики', - 'meeting_editor_screen_meeting_state_label' => 'Край\область', - 'meeting_editor_screen_meeting_state_prompt' => 'Введите название края или области', - 'meeting_editor_screen_meeting_zip_label' => 'Индекс / Почтовый индекс:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Почтовый индекс', - 'meeting_editor_screen_meeting_nation_label' => 'Нация:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Введите название нации', - 'meeting_editor_screen_meeting_comments_label' => 'Комментарии:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Линии поезда:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Автобусные линии:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Телефонный номер для набора номера:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Введите телефонный номер для телефона или виртуального собрания', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Ссылка на виртуальную встречу:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Введите ссылку для виртуальной встречи', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Имя Контакта 1 :', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Электронная почта Контакта 1 :', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Телефон Контакта 1 :', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Имя Контакта 2 :', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Электронная почта Контакта 2:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Телефон Контакта 2:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Искать:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Только опубликованные Собрания', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Только неопубликованные Собрания', - 'meeting_editor_screen_meeting_visibility_advice' => 'Собрания которые не отображаются в обычном поиске.', - 'meeting_editor_screen_meeting_publish_search_all' => 'Все Собрания', - 'meeting_editor_screen_meeting_create_button' => 'Создать новое Собрание', - 'meeting_editor_screen_delete_button' => 'Удалить это Собрание', - 'meeting_editor_screen_delete_button_confirm' => 'Вы уверены, что хотите удалить это Собрание?', - 'meeting_editor_screen_cancel_button' => 'Отменить', - 'logout' => 'Выход', - 'meeting_editor_screen_cancel_confirm' => 'Вы уверены, что хотите отменить редактирование этого Собрания и потерять все изменения??', - 'meeting_lookup_failed' => 'Не удалось найти адрес.', - 'meeting_lookup_failed_not_enough_address_info' => 'Недостаточно информации действительного адреса для поиска.', - 'meeting_create_button_name' => 'Сохранить это как новое Собрание', - 'meeting_saved_as_a_copy' => 'Сохранить это Собрание как копию (Создает новое собрание)', - 'meeting_save_buttonName' => 'Сохранить изменения для этого Собрания', - 'meeting_editor_tab_bar_basic_tab_text' => 'Основной', - 'meeting_editor_tab_bar_location_tab_text' => 'Локация', - 'meeting_editor_tab_bar_format_tab_text' => 'Формат', - 'meeting_editor_tab_bar_other_tab_text' => 'Другое', - 'meeting_editor_tab_bar_history_tab_text' => 'История', - 'meeting_editor_result_count_format' => '%% Собраний найдено', - 'meeting_id_label' => 'ID Собрания:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '20:30:00', - 'login_banner' => 'Панель инструментов основного списка Собраний', - 'login_underbanner' => 'Консоль администрирования корневого сервера', - 'login' => 'Login ID', - 'password' => 'Пароль', - 'button' => 'Логин', - 'cookie' => 'Вы должны включить куки для администрирования этого сервера.', - 'noscript' => 'Вы не можете администрировать этот сайт без JavaScript.', - 'title' => 'Пожалуйста, войдите, чтобы администрировать сервер.', - 'edit_Meeting_object_not_found' => 'ОШИБКА: Собрание не найдено.', - 'edit_Meeting_object_not_changed' => 'ОШИБКА: Собрание не изменилось.', - 'edit_Meeting_auth_failure' => 'Вы не авторизованы для редактирования этого Собрания.', - 'not_auth_1' => 'НЕ РАЗРЕШЕНО', - 'not_auth_2' => 'Вы не авторизованы для администрирования этого сервера.', - 'not_auth_3' => 'Возникла проблема с именем пользователя или паролем, которые вы ввели.', - 'email_format_bad' => 'Введенный вами адрес электронной почты был отформатирован неправильно.', - 'history_header_format' => '
%sby %s
', - 'history_no_history_available_text' => '

Нет истории для этой встречи

', - 'service_body_editor_disclosure' => 'Администрация органа обслуживания', - 'service_body_change_fader_success_text' => 'Орган ослуживания был успешно изменен', - 'service_body_change_fader_fail_text' => 'Не удалось изменить орган обслуживания', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Имя:', - 'service_body_name_default_prompt_text' => 'Введите название этого органа обслуживания', - 'service_body_parent_popup_label' => 'Локальный комитет обслуживания:', - 'service_body_parent_popup_no_parent_option' => 'Без родителей (Верхний уровень)', - 'service_body_editor_screen_sb_admin_user_label' => 'Основной администратор:', - 'service_body_editor_screen_sb_admin_description_label' => 'Описание:', - 'service_body_description_default_prompt_text' => 'Введите описание этого органа обслуживания', - 'service_body_editor_screen_sb_admin_email_label' => 'Contact Email:', - 'service_body_email_default_prompt_text' => 'Введите контактный адрес электронной почты для этого органа обслуживания', - 'service_body_editor_screen_sb_admin_uri_label' => 'URL веб сайта:', - 'service_body_uri_default_prompt_text' => 'Введите URL веб-сайта для этого Органа обслуживания', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Редактирование полного списка собраний:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Эти пользователи могут редактировать любые собрания в этом Органе обслуживания.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Редактор основного списка собраний:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Эти пользователи могут редактировать любые собрания в этом Органе обслуживания, но только если они не опубликованы.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Наблюдатели:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Эти пользователи могут видеть скрытую информацию (например, адреса электронной почты), но не могут ничего редактировать.', - 'service_body_dirty_confirm_text' => 'Вы внесли изменения в этот Органа обслуживания. Вы хотите потерять свои изменения?', - 'service_body_save_button' => 'Сохранить эти изменения Органа обслуживания', - 'service_body_create_button' => 'Создать Орган обслуживания', - 'service_body_delete_button' => 'Удалить Орган обслуживания', - 'service_body_delete_perm_checkbox' => 'Удалить этот Орган обслуживания навсегда', - 'service_body_delete_button_confirm' => 'Вы уверены, что хотите удалить этот Орган обслуживания? Перед выполнением этой функции убедитесь, что все собрания удалены или переданы другому органу обслуживания.', - 'service_body_delete_button_confirm_perm' => 'Этот Орган обслуживания будет удален навсегда!', - 'service_body_change_fader_create_success_text' => 'Орган обслуживания был успешно создан', - 'service_body_change_fader_create_fail_text' => 'Не удалось создать Орган обслуживания', - 'service_body_change_fader_delete_success_text' => 'Орган обслуживания успешно удален', - 'service_body_change_fader_delete_fail_text' => 'Не удалось удалить Орган обслуживания', - 'service_body_change_fader_fail_no_data_text' => 'Не удалось изменить Орган обслуживания, Потому что не было предоставлено данных', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Не удалось изменить Орган обслуживания, так как он небыли найден', - 'service_body_change_fader_fail_cant_update_text' => 'Не удалось изменить Орган обслуживания, Поскольку он не был обновлен', - 'service_body_change_fader_fail_bad_hierarchy' => 'Не удалось изменить Орган обслуживания, Поскольку выбранный владелец Органа обслуживания находится под этим сервисным органом, And Cannot Be Used', - 'service_body_cancel_button' => 'Восстановить в оригинал', - 'service_body_editor_type_label' => 'Тип Органа обслуживания:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Группа', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Комитет по территориальному обслуживанию', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Конференция по Региональному обслуживанию', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'Всемирная Конференция по обслуживанию', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Метро Площадь', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Зональный форум', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Групповое подразделение обслуживания', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Локальная служба', - 'service_body_editor_screen_helpline_label' => 'Телефон доверия:', - 'service_body_editor_screen_helpline_prompt' => 'Введите номер телефона горячей линии', - 'service_body_editor_uri_naws_format_text' => 'Получить собрания для этого органа обслуживания в NAWS-Совместимом файле', - 'edit_Meeting_meeting_id' => 'ID Собрания:', - 'service_body_editor_create_new_sb_option' => 'Создать новый Орган обслуживания', - 'service_body_editor_screen_world_cc_label' => 'Код Мирового Комитета:', - 'service_body_editor_screen_world_cc_prompt' => 'Введите код Мирового комитета', - 'user_editor_disclosure' => 'Администрирование пользователя', - 'user_editor_create_new_user_option' => 'Создать нового пользователя', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Логин пользователя:', - 'user_editor_login_default_text' => 'Ввести Логин пользователя', - 'user_editor_account_type_label' => 'Пользователь это:', - 'user_editor_user_owner_label' => 'Принадлежит: ', - 'user_editor_account_type_1' => 'Администраторский сервер', - 'user_editor_account_type_2' => 'Админ Органа обслуживания', - 'user_editor_account_type_3' => 'Редактор Органа обслуживания', - 'user_editor_account_type_5' => 'Наблюдатель органа обслуживания', - 'user_editor_account_type_4' => 'Инвалидный пользователь', - 'user_editor_account_name_label' => 'Имя пользователя:', - 'user_editor_name_default_text' => 'Введите имя пользователя', - 'user_editor_account_description_label' => 'Описание:', - 'user_editor_description_default_text' => 'Введите описание пользователя', - 'user_editor_account_email_label' => 'Email:', - 'user_editor_email_default_text' => 'Введите Email пользователя', - 'user_change_fader_success_text' => 'Пользователь был успешно изменен', - 'user_change_fader_fail_text' => 'Не удалось изменить пользователя', - 'user_change_fader_create_success_text' => 'Пользователь был успешно создан', - 'user_change_fader_create_fail_text' => 'Не удалось создать пользователя', - 'user_change_fader_create_fail_already_exists' => 'Логин для пользователя, которого вы пытаетесь создать, уже существует.', - 'user_change_fader_delete_success_text' => 'Пользователь был успешно удален', - 'user_change_fader_delete_fail_text' => 'Ошибка удаления пользователя', - 'user_save_button' => 'Сохранить изменения для этого пользователя', - 'user_create_button' => 'Создать нового пользователя', - 'user_cancel_button' => 'Восстановить оригинал', - 'user_delete_button' => 'Удалить пользователя', - 'user_delete_perm_checkbox' => 'Удалить этого пользователя навсегда', - 'user_password_label' => 'Изменить пароль:', - 'user_new_password_label' => 'Установить пароль:', - 'user_password_default_text' => 'Оставьте это, если вы не хотите сменить пароль', - 'user_new_password_default_text' => 'Вы должны ввести пароль для нового пользователя', - 'user_dirty_confirm_text' => 'Вы внесли изменения в этого пользователя. Хотите потерять свои изменения?', - 'user_delete_button_confirm' => 'Вы уверены, что хотите удалить этого пользователя?', - 'user_delete_button_confirm_perm' => 'Этот пользователь будет удален навсегда!', - 'user_create_password_alert_text' => 'Новые пользователи должны иметь пароль. Вы не указали пароль для этого пользователя.', - 'user_change_fader_fail_no_data_text' => 'Не удалось изменить пользователя, поскольку данные не были предоставлены', - 'user_change_fader_fail_cant_find_sb_text' => 'Не удалось изменить пользователя, поскольку пользователь не найден', - 'user_change_fader_fail_cant_update_text' => 'Не удалось изменить пользователя, поскольку пользователь не был обновлен', - 'format_editor_disclosure' => 'Формат администрирования', - 'format_change_fader_change_success_text' => 'Формат был успешно изменен', - 'format_change_fader_change_fail_text' => 'Ошибка изменения формата', - 'format_change_fader_create_success_text' => 'Формат был успешно создан', - 'format_change_fader_create_fail_text' => 'Формат Создать не удалось', - 'format_change_fader_delete_success_text' => 'Формат был успешно удален', - 'format_change_fader_delete_fail_text' => 'Ошибка удаления формата', - 'format_change_fader_fail_no_data_text' => 'Не удалось изменить формат, поскольку не было предоставлено данных', - 'format_change_fader_fail_cant_find_sb_text' => 'Ошибка изменения формата, поскольку формат не найден', - 'format_change_fader_fail_cant_update_text' => 'Ошибка изменения формата, поскольку формат не был обновлен', - 'format_editor_name_default_text' => 'Введите очень краткое описание', - 'format_editor_description_default_text' => 'Введите более подробное описание', - 'format_editor_create_format_button_text' => 'Создать новый формат', - 'format_editor_cancel_create_format_button_text' => 'Отменить', - 'format_editor_create_this_format_button_text' => 'Создать формат', - 'format_editor_change_format_button_text' => 'Изменить формат', - 'format_editor_delete_format_button_text' => 'Удалить формат', - 'format_editor_reset_format_button_text' => 'Восстановить оригинал', - 'need_refresh_message_fader_text' => 'Вы должны обновить эту страницу перед использованием этого раздела', - 'need_refresh_message_alert_text' => 'Поскольку вы внесли изменения в Администрирование сервера, Администрирование тела службы, Администрирование пользователей или Администрирование формата, информация, отображаемая в этом разделе, может быть более неточной, поэтому необходимо обновить страницу. Самый простой способ сделать это - выйти, а затем снова войти.', - 'format_editor_delete_button_confirm' => 'Вы уверены, что хотите удалить этот формат?', - 'format_editor_delete_button_confirm_perm' => 'Этот формат будет удален навсегда!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Пароль слишком короткий! Длина должна быть не менее % d символов!', - 'AJAX_Auth_Failure' => 'Авторизация не удалась для этой операции. Может быть проблема с конфигурацией сервера.', - 'Maps_API_Key_Warning' => 'Возникла проблема с ключом API Google Maps.', - 'Maps_API_Key_Not_Set' => 'Ключ API Google Maps не установлен.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Импорт данных собрания (ПРЕДУПРЕЖДЕНИЕ: заменяет текущие данные!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Невозможно отобразить данные - Несанкционированно', - 'Value_Prompts' => array( - 'id_bigint' => 'ID собрания', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Орган обслуживания', - 'service_bodies' => 'Органы обслуживания', - 'weekdays' => 'Будние дни', - 'weekday' => 'Собрание собирается каждый', - 'start_time' => 'Собрание начинается в', - 'duration_time' => 'Встреча длится', - 'location' => 'Местоположение', - 'duration_time_hour' => 'Час', - 'duration_time_hours' => 'Часы', - 'duration_time_minute' => 'Минута', - 'duration_time_minutes' => 'Минуты', - 'lang_enum' => 'Язык', - 'formats' => 'Форматы', - 'distance' => 'Расстояние от центра', - 'generic' => 'Собрание НА', - 'close_title' => 'Закрыть это окно сведений о собрании', - 'close_text' => 'Закрыть окно', - 'map_alt' => 'Собрание на карте', - 'map' => 'Посмотреть карту', - 'title_checkbox_unpub_meeting' => 'Эта встреча не опубликована. Это не видно при регулярных поисках.', - 'title_checkbox_copy_meeting' => 'Эта встреча является дубликатом другой встречи. Это также не опубликовано. Её не видно при регулярных поисках.' - ), - 'world_format_codes_prompt' => 'NAWS формат:', - 'world_format_codes' => array( - '' => 'Нет', - 'OPEN' => 'Открыть', - 'CLOSED' => 'Закрыть', - 'WCHR' => 'Доступно для инвалидов', - 'BEG' => 'Новичок', - 'BT' => 'Основной текст', - 'CAN' => 'искусственное освещение', - 'CPT' => '12 Концепций', - 'CW' => 'Добро пожаловать детям', - 'DISC' => 'Обсуждение/Участие', - 'GL' => 'Гей / Лесбиянка', - 'IP' => 'IP Обучение', - 'IW' => 'Это работает как и почему', - 'JFT' => 'Только сегодня', - 'LC' => 'Жить чистым', - 'LIT' => 'Изучение литературы', - 'M' => 'Мужчины', - 'MED' => 'Медитация', - 'NS' => 'Не курить', - 'QA' => 'Вопросы и ответы', - 'RA' => 'Ограниченный доступ', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Курение', - 'SPK' => 'Спикер', - 'STEP' => 'Шаг', - 'SWG' => 'Изучение работы по шагам', - 'TOP' => 'Тема', - 'TRAD' => 'Традиции', - 'VAR' => 'Формат Варьируется', - 'W' => 'Женщины', - 'Y' => 'Молодые люди', - 'LANG' => 'Альтернативные языки', - 'GP' => 'Руководящие принципы', - 'NC' => 'Без детей', - 'CH' => 'Закрытые праздники', - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Тип формата:', - 'format_type_codes' => array( - '' => 'нет', - 'FC1' => 'Формат собрания (Спикерская, Изучение БТ, И так далее.)', - 'FC2' => 'Код местоположения (Доступно для инвалидов, Ограниченная парковка, и т.д.)', - 'FC3' => 'Общие потребности и ограничения (Мужское собрание, ЛГБТ, Без детей и т. Д.)', - 'O' => 'Посещаемость независимыми (Открыто, Закрыто)', - 'LANG' => 'Язык', - 'ALERT' => 'Формат должен быть особенно заметным (чистота и т. Д.)', - ), - - 'cookie_monster' => 'Этот сайт использует куки для хранения вашего предпочтительного языка.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'неиспользуемый', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Время начала', - 'duration_time' => 'Продолжительность', - 'time_zone' => 'Time Zone', - 'formats' => 'Форматы', - 'lang_enum' => 'Язык', - 'longitude' => 'Долгота', - 'latitude' => 'Широта', - 'published' => 'Опубликовано', - 'email_contact' => 'e-mail контакт', - ), - 'check_all' => 'проверить все', - 'uncheck_all' => 'Снять все', - 'automatically_calculated_on_save' => 'Автоматически рассчитывается при сохранении.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[Список контактов собраний] %", - 'meeting_contact_message_format' => "%s\n--\nЭто сообщение касается встречи, названной \"%s\", которые встречаются в %s, on %s.\nСсылка браузера: %s\nEdit Link: %s\nIt было отправлено непосредственно с веб-сервера списка собраний, а отправитель не знает ваш адрес электронной почты.\nПожалуйста, имейте в виду, что ответ откроет ваш адрес электронной почты.\nЕсли вы используете \"Ответить всем\", и есть несколько получателей электронной почты, вы можете выставлять адреса электронной почты других людей.\nПожалуйста, уважайте конфиденциальность и анонимность людей; включая оригинального отправителя этого сообщения." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'Собрание изменено.', - '__THE_MEETING_WAS_CREATED__' => 'Собрание создано.', - '__THE_MEETING_WAS_DELETED__' => 'Собрание удалено.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'Собрание откатилось до прошлой версии.', - - '__THE_FORMAT_WAS_CHANGED__' => 'Формат был изменен.', - '__THE_FORMAT_WAS_CREATED__' => 'Формат был создан.', - '__THE_FORMAT_WAS_DELETED__' => 'Формат был удален.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'Формат откатился до прошлой версии.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'Сервисное обслуживание изменено.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'Сервисное обслуживание создано.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'Сервисное обслуживание удалено.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'Сервисное обслуживание откатилось до прошлой версии.', - - '__THE_USER_WAS_CHANGED__' => 'Пользователь изменен.', - '__THE_USER_WAS_CREATED__' => 'Пользователь создан.', - '__THE_USER_WAS_DELETED__' => 'Пользователь удален.', - '__THE_USER_WAS_ROLLED_BACK__' => 'Пользователь откатился до предыдущей версии.', - - '__BY__' => 'от', - '__FOR__' => 'для' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'был изменен с', - 'to' => 'to', - 'was_changed' => 'был изменен', - 'was_added_as' => 'был добавлен как', - 'was_deleted' => 'был удален', - 'was_published' => 'Собрание было опубликовано', - 'was_unpublished' => 'Собрание было неопубликовано', - 'formats_prompt' => 'Формат собрания', - 'duration_time' => 'Продолжительность встречи', - 'start_time' => 'Время начала встречи', - 'longitude' => 'Долгота собрания', - 'latitude' => 'Широта собрания', - 'sb_prompt' => 'Собрания изменено следующим органом обслуживания', - 'id_bigint' => 'ID собрания', - 'lang_enum' => 'Язык собрания', - 'worldid_mixed' => 'Общий Group ID', // TODO: translate The World Committee Code - 'weekday_tinyint' => 'День недели, в которую собирается собрание', - 'non_existent_service_body' => 'Сервисный орган больше не существует', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/lang/sv/data_transfer_strings.php b/src/legacy/local_server/server_admin/lang/sv/data_transfer_strings.php deleted file mode 100755 index 6fa2303ec..000000000 --- a/src/legacy/local_server/server_admin/lang/sv/data_transfer_strings.php +++ /dev/null @@ -1,22 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - $comdef_data_transfer_strings = array (); diff --git a/src/legacy/local_server/server_admin/lang/sv/install_wizard_strings.php b/src/legacy/local_server/server_admin/lang/sv/install_wizard_strings.php deleted file mode 100755 index 4c0bf128f..000000000 --- a/src/legacy/local_server/server_admin/lang/sv/install_wizard_strings.php +++ /dev/null @@ -1,138 +0,0 @@ -.*/ - defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - - global $comdef_install_wizard_strings; - - $comdef_install_wizard_strings = array ( - 'Database_Version_Error' => 'ERROR: You must have PHP Version 5.6 or greater installed on this server!', - 'Database_PDO_Error' => 'ERROR: You do not have PHP PDO installed!', - 'Database_Type_Error' => 'ERROR: Even though you have PDO, you have no database drivers installed!', - 'Database_TestButton_Text' => 'TEST', - 'Database_TestButton_Success' => 'The database connection was successful.', - 'Database_TestButton_Fail' => 'The database connection failed: ', - 'Database_TestButton_Fail2' => 'The database connection failed because there is already an initialized database.', - 'Database_Whitespace_Note' => 'Warning: %s has whitespace at the beginning or end.', - - 'AJAX_Handler_DB_Connect_Error' => 'The database connection failed! Please make sure that the database exists, IS COMPLETELY EMPTY, the user is created, and that user has full permissions on the empty database.', - 'AJAX_Handler_DB_Established_Error' => 'The database already exists, and has been set up! You cannot use this setup to overwrite an existing database!', - 'AJAX_Handler_DB_Incomplete_Error' => 'There is not enough information to initialize the database!', - - 'NoDatabase_Note_AlreadySet' => 'The database has already been initialized with the provided table prefix. Please choose a new one.', - 'NoDatabase_Note_PasswordIssue' => 'You must choose a username and password for the Server Administrator user.', - 'NoServerAdmin_Note_AlreadySet' => 'There is already an existing database, so you cannot set up a Server Administrator account (One already exists).', - 'NeedLongerPasswordNote' => 'This password is too short. It must be at least %d characters long.', - - 'Prev_Button' => 'PREVIOUS', - 'Next_Button' => 'NEXT', - - 'Page_1_Tab' => 'STEP 1: Database', - 'Page_1_Heading' => 'Database Connection Settings', - 'Page_1_Text' => 'Before you can apply the settings on this page, you must set up a new COMPLETELY EMPTY database, and create a database user that has full user rights on that database.', - - 'Database_Name' => 'Database Name:', - 'Database_Name_Default_Text' => 'Enter A Database Name', - 'Database_Type' => 'Database Type:', - 'Database_Host' => 'Database Host:', - 'Database_Host_Default_Text' => 'Enter A Database Host', - 'Database_Host_Additional_Text' => 'This is usually "localhost."', - 'Table_Prefix' => 'Table Prefix:', - 'Table_Prefix_Default_Text' => 'Enter A Table Prefix', - 'Table_Prefix_Additional_Text' => 'Only for multiple root servers sharing a database.', - 'Database_User' => 'Database User:', - 'Database_User_Default_Text' => 'Enter A Database User Name', - 'Database_PW' => 'Database Password:', - 'Database_PW_Default_Text' => 'Enter A Database Password', - 'Database_PW_Additional_Text' => 'Make this an ugly, difficult password. It has a great deal of power, and you will never need to remember it.', - - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - - 'Page_2_Tab' => 'STEP 2: Google Maps API', - 'Page_2_Heading' => 'Set The Initial Location For Meetings', - 'Page_2_Text' => 'When saving a meeting, the BMLT Root Server uses the Google Maps API to determine the latitude and longitude for the meeting address. These settings are required to allow the BMLT Root Server to communicate with the Google Maps API.', - - 'Page_3_Tab' => 'STEP 3: Server Settings', - 'Page_3_Heading' => 'Set Various Global Server Settings', - 'Page_3_Text' => 'These are a few settings that affect the administration and general configuration of this server. Most server settings are done in the server itself.', - 'Admin_Login' => 'Server Administrator Login:', - 'Admin_Login_Default_Text' => 'Enter A Server Administrator Login', - 'Admin_Login_Additional_Text' => 'This is the login string for the Server Administrator.', - 'Admin_Password' => 'Server Administrator Password:', - 'Admin_Password_Default_Text' => 'Enter A Server Administrator Password', - 'Admin_Password_Additional_Text' => 'Make sure that this is a non-trivial password! It has a great deal of power! (Also, don\'t forget it).', - 'ServerAdminName' => 'Server Administrator', - 'ServerAdminDesc' => 'Main Server Administrator', - 'ServerLangLabel' => 'Default Server Language:', - 'DistanceUnitsLabel' => 'Distance Units:', - 'DistanceUnitsMiles' => 'Miles', - 'DistanceUnitsKM' => 'Kilometres', - 'SearchDepthLabel' => 'Density of Meetings For Automatic Search:', - 'SearchDepthText' => 'This is an approximation of how many meetings need to be found in the automatic radius selection. More meetings means a bigger radius.', - 'HistoryDepthLabel' => 'How Many Meeting Changes To Save:', - 'HistoryDepthText' => 'The longer the history, the larger the database will become.', - 'TitleTextLabel' => 'The Title Of The Administration Screen:', - 'TitleTextDefaultText' => 'Enter A Short Title For the Editing Login Page', - 'BannerTextLabel' => 'Prompt For Administration Login:', - 'BannerTextDefaultText' => 'Enter A Short Prompt For The Login Page', - 'RegionBiasLabel' => 'Region Bias:', - 'PasswordLengthLabel' => 'Minimum Password Length:', - 'PasswordLengthExtraText' => 'This will also affect the Server Administrator password, above.', - 'DurationLabel' => 'Default Meeting Duration:', - 'DurationHourLabel' => 'Hours', - 'DurationMinutesLabel' => 'Minutes', - 'LanguageSelectorEnableLabel' => 'Display Language Selector On Login:', - 'LanguageSelectorEnableExtraText' => 'If you select this, a popup menu will appear in the login screen, so administrators can select their language.', - 'EmailContactEnableLabel' => 'Allow Email Contacts From Meetings:', - 'EmailContactEnableExtraText' => 'If you select this, site visitors will be able to send emails from meeting records.', - - 'Page_4_Tab' => 'STEP 4: Save The Settings', - 'Page_4_Heading' => 'Create the Settings File', - 'Page_4_Text' => 'The root server was unable to create the settings file for you. Instead, we ask you to create it yourself, via FTP or a control panel file manager, name it "auto-config.inc.php", and paste the following text into the file:', - - 'DefaultPasswordLength' => 10, - 'DefaultMeetingCount' => 10, - 'DefaultChangeDepth' => 5, - 'DefaultDistanceUnits' => 'mi', - 'DefaultDurationTime' => '01:30:00', - 'DurationTextInitialText' => 'N.A. Meetings are usually 90 minutes long (an hour and a half), unless otherwise indicated.', - 'time_format' => 'g:i A', - 'change_date_format' => 'g:i A, n/j/Y', - 'BannerTextInitialText' => 'Administration Login', - 'TitleTextInitialText' => 'Basic Meeting List Toolbox Administration', - 'DefaultRegionBias' => 'us', - 'search_spec_map_center' => array ( 'longitude' => -118.563659, 'latitude' => 34.235918, 'zoom' => 6 ), - 'DistanceChoices' => array ( 2, 5, 10, 20, 50 ), - 'HistoryChoices' => array ( 1, 2, 3, 5, 8, 10, 15 ), - 'PW_LengthChices' => array ( 6, 8, 10, 12, 16 ), - 'ServerAdminDefaultLogin' => 'serveradmin', - - 'Explanatory_Text_1_Initial_Intro' => 'This install wizard will guide you through the process of creating an initial database, as well as a configuration file. In the final step, we will create a settings file, and initialize an empty database.', - 'Explanatory_Text_1_DB_Intro' => 'The first thing that you need to do, is create a new, EMPTY database, and a database user that has full access to that database. This is usually done via your Web site Control Panel. Once you have created the database, you need to enter the information about that database into the text items on this page.', - - 'Explanatory_Text_2_Region_Bias_Intro' => 'The "Region Bias" is a code that is sent to Google when a location search is done, and can help Google to make sense of ambiguous search queries.', - - 'Explanatory_Text_3_Server_Admin_Intro' => 'The Server Administrator is the main user for the server. It is the only account that can create new users and Service bodies, and is very powerful. You should create a login ID and a non-trivial password for this account. You\'ll be able to modify the other aspects of the account on the main server, once the database has been set up.', - 'Explanatory_Text_3_Misc_Intro' => 'These are various settings that affect how the root server behaves and appears.', - - 'Explanatory_Text_4_Main_Intro' => 'If you have entered the database information, provided a valid Google Maps API Key, and specified the login information for the Server Administrator, then you can initialize the root server here. Remember that the database must be COMPLETELY EMPTY of BMLT Root Server tables for this server (It can have tables for other servers or services).', - 'Explanatory_Text_4_NAWS_Export' => 'Optionally, you can import the meetings from a NAWS export spreadsheet. Uncheck the box to initialize them to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'Explanatory_Text_4_File_Intro' => 'The text in the box below is the PHP source code for the main settings file. You will need to create a file on the server with this text in it. The file is at the same level as the main server directory for the root server.', - 'Explanatory_Text_4_File_Extra' => 'You also need to make sure that the file permissions are restricted (chmod 0644). This prevents the file from being written, and the root server will not run unless the file has the correct permissions.', - 'Page_4_PathInfo' => 'The file needs to be placed as %s/auto-config.inc.php, which is where your %s directory is. After the file has been created and you have put the above text into it, you should execute the following command to make sure that the permissions are correct:', - 'Page_4_Final' => 'Once all this is complete, refresh this page, and you should see the root server login page.', - 'FormatLangNamesLabel' => 'Enter extra languages in format code1:name1 (example "fa:farsi ru:russian"):', - ); diff --git a/src/legacy/local_server/server_admin/lang/sv/name.txt b/src/legacy/local_server/server_admin/lang/sv/name.txt deleted file mode 100755 index 838494360..000000000 --- a/src/legacy/local_server/server_admin/lang/sv/name.txt +++ /dev/null @@ -1 +0,0 @@ -Svenska \ No newline at end of file diff --git a/src/legacy/local_server/server_admin/lang/sv/server_admin_strings.inc.php b/src/legacy/local_server/server_admin/lang/sv/server_admin_strings.inc.php deleted file mode 100755 index 4e26f243c..000000000 --- a/src/legacy/local_server/server_admin/lang/sv/server_admin_strings.inc.php +++ /dev/null @@ -1,491 +0,0 @@ -. - * Swedish translator webmaster2@nasverige.org Magnus */ - -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. - -$comdef_server_admin_strings = array( - 'server_admin_disclosure' => 'Server Administration', - 'server_admin_naws_spreadsheet_label' => 'Updated World Committee Codes Spreadsheet', - 'update_world_ids_button_text' => 'Update World Committee Codes', - 'update_world_ids_from_spreadsheet_dropdown_text' => 'Update World Committee Codes (Group IDs from NAWS) from NAWS Spreadsheet', - 'server_admin_error_no_world_ids_updated' => 'No World IDs were updated. This could be because your user does not have permission to update the submitted meetings.', - 'server_admin_error_required_spreadsheet_column' => 'Required column does not exist in the spreadsheet: ', - 'server_admin_error_bmlt_id_not_integer' => 'The provided bmlt_id is not an integer: ', - 'server_admin_error_could_not_create_reader' => 'Could not create reader for file: ', - 'server_admin_error_no_files_uploaded' => 'No files were uploaded.', - 'server_admin_error_service_bodies_already_exist' => 'Service bodies with the following World IDs already exist: ', - 'server_admin_error_meetings_already_exist' => 'Meetings with the following World IDs already exist: ', - 'server_admin_ui_num_meetings_updated' => 'Number of meetings updated: ', - 'server_admin_ui_num_meetings_not_updated' => 'Number of meetings that did not need updating: ', - 'server_admin_ui_warning' => 'WARNING', - 'server_admin_ui_errors' => 'Error(s)', - 'server_admin_ui_deleted_meetings_marked' => 'Number of deleted meetings marked so that they won\'t appear in future NAWS exports: ', - 'server_admin_ui_problem_meetings' => 'meetings were found in the spreadsheet that couldn\'t be updated. Problem meeting IDs: ', - 'server_admin_ui_service_bodies_created' => 'Service bodies created: ', - 'server_admin_ui_meetings_created' => 'Meetings created: ', - 'server_admin_ui_users_created' => 'Users created: ', - 'server_admin_ui_refresh_ui_text' => 'Sign out and then sign in again to see the new service bodies, users, and meetings.', - 'import_service_bodies_and_meetings_button_text' => 'Import Service Bodies and Meetings', - 'import_service_bodies_and_meetings_dropdown_text' => 'Import Service Bodies and Meetings from NAWS Export', - 'server_admin_naws_import_spreadsheet_label' => 'NAWS Import Spreadsheet:', - 'server_admin_naws_import_initially_publish' => 'Initialize imported meetings to \'published\': ', - 'server_admin_naws_import_explanation' => 'Uncheck the box to initialize imported meetings to \'unpublished\'. (This is useful if many of the new meetings will need to be edited or deleted, and you don\'t want them showing up in the meantime.)', - 'account_disclosure' => 'Mitt konto', - 'account_name_label' => 'Kontonamn:', - 'account_login_label' => 'Min inloggning:', - 'account_type_label' => 'Jag är en:', - 'account_type_1' => 'Server Administratör', - 'account_type_2' => 'Serviceenhet Administratör', - 'ServerMapsURL' => 'https://maps.googleapis.com/maps/api/geocode/xml?address=##SEARCH_STRING##&sensor=false', - 'account_type_4' => 'hacker? tydligen inte...', - 'account_type_5' => 'Serviceenhet övervakare', - 'change_password_label' => 'Ändra mitt lösenord till:', - 'change_password_default_text' => 'Låt denna vara såvida du inte vill byta lösenord', - 'account_email_label' => 'Min Epostadress:', - 'email_address_default_text' => 'Fyll i en Epostadress', - 'account_description_label' => 'Om mig:', - 'account_description_default_text' => 'Fyll i en "om mig" text', - 'account_change_button_text' => 'Ändra mina kontoinställningar', - 'account_change_fader_success_text' => 'Kontoinställningarna ändrades framgångsrikt.', - 'account_change_fader_failure_text' => 'Kontoinställningarna ändrades inte!', - 'meeting_editor_disclosure' => 'Ändra möten', - 'meeting_editor_already_editing_confirm' => 'Du arbetar med ett annat möte. Vill du fortsätta och tappa ev ändringar?', - 'meeting_change_fader_success_text' => 'Mötet ändrades framgångsrikt', - 'meeting_change_fader_failure_text' => 'Mötet ändrades inte!', - 'meeting_change_fader_success_delete_text' => 'Mötet kasserat', - 'meeting_change_fader_fail_delete_text' => 'Mötet kasserades inte!', - 'meeting_change_fader_success_add_text' => 'Nytt möte registrerat', - 'meeting_change_fader_fail_add_text' => 'Det nya mötet registrerades inte!', - 'meeting_text_input_label' => 'Sök efter text:', - 'access_service_body_label' => 'Jag har tillgång till:', - 'meeting_text_input_default_text' => 'Fyll i någon söktext', - 'meeting_text_location_label' => 'Sök efter närmaste möte till en plats', - 'meeting_search_weekdays_label' => 'Sök möten utvalda dagar:', - 'meeting_search_weekdays_names' => array('Alla', 'Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'), - 'meeting_search_service_bodies_label' => 'Sök i utvalda servicenheter:', - 'meeting_search_start_time_label' => 'Sök efter mötets starttid:', - 'meeting_search_start_time_all_label' => 'Valfri tid', - 'meeting_search_start_time_morn_label' => 'Morgon', - 'meeting_search_start_time_aft_label' => 'Eftermiddag', - 'meeting_search_start_time_eve_label' => 'Kväll', - 'meeting_search_no_results_text' => 'Inga möten funna.', - 'meeting_editor_tab_specifier_text' => 'Sök efter möten', - 'meeting_editor_tab_editor_text' => 'Ändra möten', // TODO: change to 'Edit Or Create Meetings' - 'meeting_editor_create_new_text' => 'Skapa ett nytt möte', - 'meeting_editor_location_map_link' => 'Karta', - 'meeting_editor_screen_match_ll_button' => 'Ange longitude och latitud för adressen', - 'meeting_editor_screen_default_text_prompt' => 'Fyll i text eller nummer', - 'meeting_is_published' => 'Mötet är nu publicerat', - 'meeting_unpublished_note' => 'Note: Unpublishing a meeting indicates a temporary closure. If this meeting has closed permanently, please delete it.', - 'meeting_editor_screen_meeting_name_label' => 'Mötets namn:', - 'meeting_editor_screen_meeting_name_prompt' => 'Fyll i mötets namn', - 'meeting_editor_screen_meeting_weekday_label' => 'Veckodag:', - 'meeting_editor_screen_meeting_start_label' => 'Mötets starttid:', - 'meeting_editor_screen_meeting_time_zone_label' => 'Meeting Time Zone:', - 'meeting_editor_screen_meeting_am_label' => 'AM', - 'meeting_editor_screen_meeting_pm_label' => 'PM', - 'meeting_editor_screen_meeting_noon_label' => 'Middag', - 'meeting_editor_screen_meeting_midnight_label' => 'Midnatt', - 'meeting_editor_screen_meeting_duration_label' => 'Varaktighet:', - 'meeting_editor_screen_meeting_oe_label' => 'Osatt sluttid', - 'meeting_editor_screen_meeting_cc_label' => 'Världsservice kod:', - 'meeting_editor_screen_meeting_cc_advice' => 'Normally leave this field alone (see documentation).', // TODO: translate - 'meeting_editor_screen_meeting_contact_label' => 'Mötets epostkontakt:', - 'meeting_editor_screen_meeting_contact_prompt' => 'Fyll i en epostadress för kontakt and detta möte', - 'meeting_editor_screen_meeting_sb_label' => 'Serviceenhet:', - 'meeting_editor_screen_meeting_sb_default_value' => 'Ingen serviceenhet vald', - 'meeting_editor_screen_meeting_longitude_label' => 'Longitud:', - 'meeting_editor_screen_meeting_longitude_prompt' => 'Fyll i en longitud', - 'meeting_editor_screen_meeting_latitude_label' => 'Latitud:', - 'meeting_editor_screen_meeting_latitude_prompt' => 'fyll i en latitud', - 'meeting_editor_screen_meeting_location_label' => 'plats:', - 'meeting_editor_screen_meeting_location_prompt' => 'Fyll i en plats(ex byggnadens namn)', - 'meeting_editor_screen_meeting_info_label' => 'Extra Info:', - 'meeting_editor_screen_meeting_info_prompt' => 'Fyll i vidare platsinformation', - 'meeting_editor_screen_meeting_street_label' => 'GatuAdress:', - 'meeting_editor_screen_meeting_street_prompt' => 'Fyll i en gatuadress', - 'meeting_editor_screen_meeting_neighborhood_label' => 'Närområde:', - 'meeting_editor_screen_meeting_neighborhood_prompt' => 'Fyll i närområde', - 'meeting_editor_screen_meeting_borough_label' => 'Stadsdel:', - 'meeting_editor_screen_meeting_borough_prompt' => 'Fyll i en stadsdel)', - 'meeting_editor_screen_meeting_city_label' => 'Stad:', - 'meeting_editor_screen_meeting_city_prompt' => 'Fyll i en stad', - 'meeting_editor_screen_meeting_county_label' => 'Land:', - 'meeting_editor_screen_meeting_county_prompt' => 'Fyll i ett land', - 'meeting_editor_screen_meeting_state_label' => 'Län:', - 'meeting_editor_screen_meeting_state_prompt' => 'Fyll i ett län', - 'meeting_editor_screen_meeting_zip_label' => 'Postnummer:', - 'meeting_editor_screen_meeting_zip_prompt' => 'Fyll i postnummer', - 'meeting_editor_screen_meeting_nation_label' => 'Världsdel:', - 'meeting_editor_screen_meeting_nation_prompt' => 'Fyll i en världsdel', - 'meeting_editor_screen_meeting_comments_label' => 'Comments:', - 'meeting_editor_screen_meeting_train_lines_label' => 'Train Lines:', - 'meeting_editor_screen_meeting_bus_lines_label' => 'Bus Lines:', - 'meeting_editor_screen_meeting_phone_meeting_number_label' => 'Phone Meeting Dial-in Number:', - 'meeting_editor_screen_meeting_phone_meeting_number_prompt' => 'Enter the dial-in number for a phone or virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_link_label' => 'Virtual Meeting Link:', - 'meeting_editor_screen_meeting_virtual_meeting_link_prompt' => 'Enter the link for a virtual meeting', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_label' => 'Virtual Meeting Additional Information:', - 'meeting_editor_screen_meeting_virtual_meeting_additional_info_prompt' => 'Enter any additional information for joining the virtual meeting, including directly from the app. For example, if the meeting uses Zoom, "Zoom ID: 456 033 8613, Passcode: 1953" would be appropriate.', - 'meeting_editor_screen_meeting_venue_type' => 'Venue Type:', - 'meeting_editor_screen_meeting_venue_type_inperson' => 'In-Person', - 'meeting_editor_screen_meeting_venue_type_virtual' => 'Virtual', - 'meeting_editor_screen_meeting_venue_type_virtualTC' => 'Virtual (temporarily replacing an in-person)', - 'meeting_editor_screen_meeting_venue_type_hybrid' => 'Hybrid (both in-person and virtual)', - 'meeting_editor_screen_meeting_venue_type_validation' => 'You must select a venue type.', - 'meeting_editor_screen_meeting_virtual_info_missing' => 'Virtual or hybrid meetings must have a Virtual Meeting Link, a Phone Meeting Dial-in Number, or Virtual Meeting Additional Information', - 'meeting_editor_screen_meeting_location_warning' => 'Meeting should have a location (at least a city/town and state/province, or a zip/postal code).', - 'meeting_editor_screen_meeting_address_warning' => 'In-person or hybrid meetings should have a street address.', - 'meeting_editor_screen_meeting_url_validation' => 'Virtual Meeting Link is not a valid URL.', - 'meeting_editor_screen_meeting_url_or_phone_warning' => 'Virtual or hybrid meetings should have either a Virtual Meeting Link or a Phone Meeting Dial-in Number', - 'meeting_editor_screen_meeting_additional_warning' => 'Please also fill in Virtual Meeting Additional Information if there is a Virtual Meeting Link.', - 'meeting_editor_screen_in_person_virtual_info_warning' => 'In-person meetings shouldn\'t have any virtual meeting information.', - 'meeting_editor_screen_meeting_virtual_location_info_warning' => 'Virtual meetings shouldn\'t have a location name or address.', - 'meeting_editor_screen_meeting_validation_warning' => 'There are warnings. Are you sure you want to save anyway? If not, press \'cancel\' and go to the Location tab to see the warnings in place and address them.', - 'meeting_editor_screen_meeting_validation_failed' => 'Unable to save due to input errors. Please go to the Location tab to address them, and then retry saving. Errors: ', - 'meeting_editor_screen_meeting_validation_warnings' => 'Input warnings shown on the Location tab: ', - 'meeting_editor_screen_meeting_contact_name_1_label' => 'Contact 1 Name:', - 'meeting_editor_screen_meeting_contact_email_1_label' => 'Contact 1 Email:', - 'meeting_editor_screen_meeting_contact_phone_1_label' => 'Contact 1 Phone:', - 'meeting_editor_screen_meeting_contact_name_2_label' => 'Contact 2 Name:', - 'meeting_editor_screen_meeting_contact_email_2_label' => 'Contact 2 Email:', - 'meeting_editor_screen_meeting_contact_phone_2_label' => 'Contact 2 Phone:', - 'meeting_editor_screen_meeting_publish_search_prompt' => 'Leta efter:', - 'meeting_editor_screen_meeting_publish_search_pub' => 'Publiserade möten', - 'meeting_editor_screen_meeting_publish_search_unpub' => 'Opubliserade möten', - 'meeting_editor_screen_meeting_visibility_advice' => 'Detta syns inte vid normal mötessökning', - 'meeting_editor_screen_meeting_publish_search_all' => 'Alla möten', - 'meeting_editor_screen_meeting_create_button' => 'Skapa nytt möte', - 'meeting_editor_screen_delete_button' => 'Kassera detta möte', - 'meeting_editor_screen_delete_button_confirm' => 'Är du säker på att du vill kasta detta möte?', - 'meeting_editor_screen_cancel_button' => 'Ångra', - 'logout' => 'Logga ut (och ta en nypa luft)', - 'meeting_editor_screen_cancel_confirm' => 'Säker på att du vill avsluta? du kommer förlora ev ändringar!', - 'meeting_lookup_failed' => 'Adressökningen misslyckades.', - 'meeting_lookup_failed_not_enough_address_info' => 'Det behövs mer adressinformation', - 'meeting_create_button_name' => 'Spara detta som ett nytt möte', - 'meeting_saved_as_a_copy' => 'Spara en kopia på detta möte', - 'meeting_save_buttonName' => 'Spara ändringar', - 'meeting_editor_tab_bar_basic_tab_text' => 'Grundläggnade', - 'meeting_editor_tab_bar_location_tab_text' => 'Plats', - 'meeting_editor_tab_bar_format_tab_text' => 'MötesFormat', - 'meeting_editor_tab_bar_other_tab_text' => 'Annat', - 'meeting_editor_tab_bar_history_tab_text' => 'Historik', - 'meeting_editor_result_count_format' => '%d Möten funna', - 'meeting_id_label' => 'Mötes ID:', - 'meeting_editor_default_zoom' => '13', - 'meeting_editor_default_weekday' => '2', - 'meeting_editor_default_start_time' => '19:00:00', - 'login_banner' => 'Basic Meeting List Toolbox', - 'login_underbanner' => 'Root Server Administrationssida', - 'login' => 'Användarnamn', - 'password' => 'Lösenord', - 'button' => 'Logga in', - 'cookie' => 'Du måste aktivera "cookies" för att de ska fungera.', - 'noscript' => 'Du måste aktivera javascript!', - 'title' => 'Logga in för att göra ändringar', - 'edit_Meeting_object_not_found' => 'FEL: mötet fanns inte.', - 'edit_Meeting_object_not_changed' => 'FEL: mötet ändrades inte', - 'edit_Meeting_auth_failure' => 'Du har inte rättigheter till att ändra detta möte', - 'not_auth_1' => 'DU SAKNAR RÄTTIGHETER', - 'not_auth_2' => 'Du saknar rättigheter till att adminitrera servern', - 'not_auth_3' => 'Problem med dina uppgifter... Capslock eller slarvpelle?', - 'email_format_bad' => 'Epostadressen du angav var felformaterad. (inge snabelsnok eller liknande)', - 'history_header_format' => '
%sav %s
', - 'history_no_history_available_text' => '

Ingen historik för detta möte

', - 'service_body_editor_disclosure' => 'Serviceenhet Administratör', - 'service_body_change_fader_success_text' => 'Serviceenheten ändrad framgångsrikt.', - 'service_body_change_fader_fail_text' => 'Lyckades inte ändra Serviceenheten ', - 'service_body_editor_screen_sb_id_label' => 'ID:', - 'service_body_editor_screen_sb_name_label' => 'Namn:', - 'service_body_name_default_prompt_text' => 'Fyll i Serviceenhetens namn', - 'service_body_parent_popup_label' => 'Serviceenhetens förälder:', - 'service_body_parent_popup_no_parent_option' => 'Ingen förälder (Top-nivå)', - 'service_body_editor_screen_sb_admin_user_label' => 'Primär Administratör:', - 'service_body_editor_screen_sb_admin_description_label' => 'Beskrivning:', - 'service_body_description_default_prompt_text' => 'Fyll i en beskrivning för serviceenheten', - 'service_body_editor_screen_sb_admin_email_label' => 'Kontakt Serviceenhet (Epost):', - 'service_body_email_default_prompt_text' => 'Fyll i en Epostadress för serviceenheten.', - 'service_body_editor_screen_sb_admin_uri_label' => 'web-adress', - 'service_body_uri_default_prompt_text' => 'Fyll i en web-adress för serviceenheten', - 'service_body_editor_screen_sb_admin_full_editor_label' => 'Redaktörer för hela möteslistan:', - 'service_body_editor_screen_sb_admin_full_editor_desc' => 'Dessa redaktörer kan ändra samtliga möten i möteslistan.', - 'service_body_editor_screen_sb_admin_editor_label' => 'Grundläggande redaktörer:', - 'service_body_editor_screen_sb_admin_editor_desc' => 'Dessa redaktörer kan endast ändringar i en specifik serviceenhet. Bara i opubliserade möten.', - 'service_body_editor_screen_sb_admin_observer_label' => 'Observatörer:', - 'service_body_editor_screen_sb_admin_observer_desc' => 'Dessa kan inte ändra något. Men kan se dold information', - 'service_body_dirty_confirm_text' => 'Du har gjort ändringar i serviceenheten. Vill du lämna och förlora dina ändringar?', - 'service_body_save_button' => 'Spara ändringar i serviceenheten', - 'service_body_create_button' => 'Skapa serviceenhet', - 'service_body_delete_button' => 'Kassera serviceenhet', - 'service_body_delete_perm_checkbox' => 'Kassera serviceenhet permanent', - 'service_body_delete_button_confirm' => 'Säker på att du vill kassera serviceenheten? Make sure that all meetings are either removed or transferred to another service body before performing this function.', - 'service_body_delete_button_confirm_perm' => 'Serviceenheten kasseras nu för gott!', - 'service_body_change_fader_create_success_text' => 'Serviceenhet skapad', - 'service_body_change_fader_create_fail_text' => 'Serviceenheten skapades inte!', - 'service_body_change_fader_delete_success_text' => 'Serviceenheten är nu kasserad', - 'service_body_change_fader_delete_fail_text' => 'Serviceenheten kasserades inte!', - 'service_body_change_fader_fail_no_data_text' => 'Serviceenheten ändrades inte, Eftersom du inte fyllt i någon data!', - 'service_body_change_fader_fail_cant_find_sb_text' => 'Serviceenheten ändrades inte, Eftersom serviceenheten saknas', - 'service_body_change_fader_fail_cant_update_text' => 'Serviceenheten ändrades inte, Eftersom serviceenheten inte uppdaterades', - 'service_body_change_fader_fail_bad_hierarchy' => 'Serviceenheten ändrades inte, För föräldraserviceenheten är under denna Serviceenhet, och kan inte användas', - 'service_body_cancel_button' => 'återställ', - 'service_body_editor_type_label' => 'Serviceenhet typ:', - 'service_body_editor_type_c_comdef_service_body__GRP__' => 'Grupp', - 'service_body_editor_type_c_comdef_service_body__COP__' => 'Co-Op', - 'service_body_editor_type_c_comdef_service_body__ASC__' => 'Distrikt', - 'service_body_editor_type_c_comdef_service_body__RSC__' => 'Region', - 'service_body_editor_type_c_comdef_service_body__WSC__' => 'World Service', - 'service_body_editor_type_c_comdef_service_body__MAS__' => 'Metro', - 'service_body_editor_type_c_comdef_service_body__ZFM__' => 'Zon', - 'service_body_editor_type_c_comdef_service_body__GSU__' => 'Group Service Unit', - 'service_body_editor_type_c_comdef_service_body__LSU__' => 'Local Service Unit', - 'service_body_editor_screen_helpline_label' => 'Helpline:', - 'service_body_editor_screen_helpline_prompt' => 'Enter The Helpline Telephone Number', - 'service_body_editor_uri_naws_format_text' => 'Ladda ner mötesinfo från denna serviceenhet i en NAWS kompatibel fil ', - 'edit_Meeting_meeting_id' => 'Mötes ID:', - 'service_body_editor_create_new_sb_option' => 'Skapa en ny serviceenhet', - 'service_body_editor_screen_world_cc_label' => 'NAWS kod:', - 'service_body_editor_screen_world_cc_prompt' => 'Fyll i NAWS kod', - 'user_editor_disclosure' => 'Användar Administration', - 'user_editor_create_new_user_option' => 'Skapa en användare', - 'user_editor_screen_sb_id_label' => 'ID:', - 'user_editor_account_login_label' => 'Användarnamn:', - 'user_editor_login_default_text' => 'Fyll i användarnamn', - 'user_editor_account_type_label' => 'Användaren är en:', - 'user_editor_user_owner_label' => 'Owned By: ', // TODO translate - 'user_editor_account_type_1' => 'Server Administratör', - 'user_editor_account_type_2' => 'Serviceenhets Administratör', - 'user_editor_account_type_3' => 'Serviceenhet Redaktör', - 'user_editor_account_type_5' => 'Serviceenhet observatör', - 'user_editor_account_type_4' => 'Inaktivera användare', - 'user_editor_account_name_label' => 'Användarnamn:', - 'user_editor_name_default_text' => 'Fyll i användarnamn', - 'user_editor_account_description_label' => 'Beskrivning:', - 'user_editor_description_default_text' => 'Fyll i beskrivning för användare', - 'user_editor_account_email_label' => 'E-post:', - 'user_editor_email_default_text' => 'Fyll i E-post för användaren:', - 'user_change_fader_success_text' => 'Användaren ändrad', - 'user_change_fader_fail_text' => 'Användaren ändrades inte!', - 'user_change_fader_create_success_text' => 'Användaren skapades', - 'user_change_fader_create_fail_text' => 'Användaren skapades inte!', - 'user_change_fader_create_fail_already_exists' => 'A Login For The User That You Are Trying To Create Already Exists.', - 'user_change_fader_delete_success_text' => 'Användaren kasserad', - 'user_change_fader_delete_fail_text' => 'Användaren kasserades inte!', - 'user_save_button' => 'Spara ändringar för användaren', - 'user_create_button' => 'Skapa ny användare', - 'user_cancel_button' => 'återställ', - 'user_delete_button' => 'Kassera denna användare', - 'user_delete_perm_checkbox' => 'Kassera denna användare permanent', - 'user_password_label' => 'ändra lösenord till:', - 'user_new_password_label' => 'lösenord:', - 'user_password_default_text' => 'Låt denna vara såvida du inte önskar ändra lösenordet', - 'user_new_password_default_text' => 'Ange lösenord för den nya användaren!', - 'user_dirty_confirm_text' => 'Du har gjort ändringar för användaren, vill du lämna och bli av med ändringarna?', - 'user_delete_button_confirm' => 'Vill du kassera användaren?', - 'user_delete_button_confirm_perm' => 'Användaren kasseras nu permanent!', - 'user_create_password_alert_text' => 'Ange ett lösenord', - 'user_change_fader_fail_no_data_text' => 'Användaren ändrades inte, Ingen data angavs', - 'user_change_fader_fail_cant_find_sb_text' => 'Användaren ändrades inte, Användaren finns inte', - 'user_change_fader_fail_cant_update_text' => 'Användaren ändrades inte, Användaren uppdaterades inte', - 'format_editor_disclosure' => 'MötesFormat Administration', - 'format_change_fader_change_success_text' => 'Mötesformatet ändrades', - 'format_change_fader_change_fail_text' => 'Mötesformatet ändrades inte!', - 'format_change_fader_create_success_text' => 'Mötesformat skapat', - 'format_change_fader_create_fail_text' => 'Mötesformatet skapades inte!', - 'format_change_fader_delete_success_text' => 'Mötesformatet kasserades', - 'format_change_fader_delete_fail_text' => 'Mötesformatet kasserades inte!', - 'format_change_fader_fail_no_data_text' => 'Mötesformatet ändrades inte, Inge data angivet', - 'format_change_fader_fail_cant_find_sb_text' => 'Mötesformatet ändrades inte, Mötesformatet hittades inte', - 'format_change_fader_fail_cant_update_text' => 'Mötesformatet ändrades inte, För mötesformatet uppdaterades inte', - 'format_editor_name_default_text' => 'Ange en kort beskrivning', - 'format_editor_description_default_text' => 'Ange en utförlig beskrivning', - 'format_editor_create_format_button_text' => 'skapa nytt mötesformat', - 'format_editor_cancel_create_format_button_text' => 'ångra', - 'format_editor_create_this_format_button_text' => 'Skapa mötesformat', - 'format_editor_change_format_button_text' => 'ändra mötesformat', - 'format_editor_delete_format_button_text' => 'Kassera mötesformat', - 'format_editor_reset_format_button_text' => 'återställ', - 'need_refresh_message_fader_text' => 'Du bör uppdatera sidan innan du använder denna sektion', - 'need_refresh_message_alert_text' => 'Eftersom du gjort ändringar i serviceenhets administrationen, användar administrationen eller mötesformat administrationen, är det möjligt att information i denna sektion är felaktig, Så logga in och ut så blir allt fint', - 'format_editor_delete_button_confirm' => 'är du säker på att du vill kassera detta mötesformat?', - 'format_editor_delete_button_confirm_perm' => 'Mötesformatet kommer kasseras permanent!', - 'format_editor_missing_key' => 'This format should have an entry for every language (at least a key).', // TODO: translate - 'format_editor_reserved_key' => 'This key is reserved for a venue type format - please use something different.', // TODO: translate - 'min_password_length_string' => 'Lösenordet måste vara minst %d tecken långt!', - 'AJAX_Auth_Failure' => 'Tillträde nekas. Det kan vara problem med serverinställningar.', - 'Maps_API_Key_Warning' => 'There is a problem with the Google Maps API Key.', - 'Observer_Link_Text' => 'Meeting Browser', - 'Data_Transfer_Link_Text' => 'Import Meeting Data (WARNING: Replaces Current Data!)', - 'MapsURL' => 'https://maps.google.com/maps?q=##LAT##,##LONG##+(##NAME##)&ll=##LAT##,##LONG##', - 'hidden_value' => 'Cannot Display Data -Unauthorized', - 'Value_Prompts' => array( - 'id_bigint' => 'Meeting ID', - 'worldid_mixed' => 'World Services ID', - 'service_body' => 'Service Body', - 'service_bodies' => 'Service Bodies', - 'weekdays' => 'Weekdays', - 'weekday' => 'Meeting Gathers Every', - 'start_time' => 'Meeting Starts at', - 'duration_time' => 'Meeting Lasts', - 'location' => 'Location', - 'duration_time_hour' => 'Hour', - 'duration_time_hours' => 'Hours', - 'duration_time_minute' => 'Minute', - 'duration_time_minutes' => 'Minutes', - 'lang_enum' => 'Language', - 'formats' => 'Formats', - 'distance' => 'Distance from Center', - 'generic' => 'NA Meeting', - 'close_title' => 'Close This Meeting Detail Window', - 'close_text' => 'Close Window', - 'map_alt' => 'Map to Meeting', - 'map' => 'Follow This Link for A Map', - 'title_checkbox_unpub_meeting' => 'This meeting is unpublished. It cannot be seen by regular searches.', - 'title_checkbox_copy_meeting' => 'This meeting is a duplicate of another meeting. It is also unpublished. It cannot be seen by regular searches.' - ), - 'world_format_codes_prompt' => 'Naws mötesformat:', - 'world_format_codes' => array( - '' => 'Ingen', - 'OPEN' => 'Öppet möte', - 'CLOSED' => 'Slutet möte', - 'WCHR' => 'Rullstolsvänlig lokal', - 'BEG' => 'Nykomling', - 'BT' => 'Basic Text möte', - 'CAN' => 'Ljusmöte', - 'CPT' => '12 Konsept möte', - 'CW' => 'Barn välkomna', - 'DISC' => 'Diskutionsmöte', - 'GL' => 'Gay/Lesbiskt', - 'IP' => 'IP Studie', - 'IW' => 'Det fungerar Studie', - 'JFT' => 'Bara för idag Studie', - 'LC' => 'Living Clean Studie', - 'LIT' => 'Literatur Studie', - 'M' => 'Mansmöte', - 'MED' => 'Meditationsmöte', - 'QA' => 'Frågor och svar', - 'RA' => 'Ej publikt möte', - 'NS' => 'Non-Smoking', - 'S-D' => 'Speaker/Discussion', // TODO translate - 'SMOK' => 'Rökare', - 'SPK' => 'Talarmöte', - 'STEP' => 'Stegmöte', - 'SWG' => 'Stegarnetsguiden studie', - 'TOP' => 'Temamöte', - 'TRAD' => 'Traditionsmöte', - 'VAR' => 'Blandad mötesform', - 'W' => 'Kvinnomöte', - 'Y' => 'Ungdomsmöte', - 'LANG' => 'Alternativt språk', - 'GP' => 'Guiding Principles', // TODO translate - 'NC' => 'No Children', // TODO translate - 'CH' => 'Closed Holidays', // TODO translate - 'VM' => 'Virtual', // TODO translate - 'HYBR' => 'Virtual and In-Person', // TODO translate - 'TC' => 'Temporarily Closed Facility', // TODO translate - 'SPAD' => 'Spiritual Principle a Day', // TODO translate - ), - 'format_type_prompt' => 'Format Type:', // TODO: Translate - 'format_type_codes' => array( - '' => 'None', // TODO: Translate - 'FC1' => 'Meeting Format (Speaker, Book Study, etc.)', // TODO: Translate - 'FC2' => 'Location Code (Wheelchair Accessible, Limited Parking, etc.)', // TODO: Translate - 'FC3' => 'Common Needs and Restrictions (Mens Meeting, LGTBQ, No Children, etc.)', // TODO: Translate - 'O' => 'Attendance by non-addicts (Open, Closed)', // TODO: Translate - 'LANG' => 'Language', // TODO: TRANSLATE - 'ALERT' => 'Format should be especially prominent (Clean requirement, etc.)',// TODO: Translate - ), - 'cookie_monster' => 'Denna sida använder cookies för att minnas ditt språkval.', - 'main_prompts' => array( - 'id_bigint' => 'ID', - 'worldid_mixed' => 'World ID', - 'shared_group_id_bigint' => 'Unused', - 'service_body_bigint' => 'Service Body ID', - 'weekday_tinyint' => 'Weekday', - 'venue_type' => 'Venue Type', - 'start_time' => 'Start Time', - 'duration_time' => 'Duration', - 'time_zone' => 'Time Zone', - 'formats' => 'Formats', - 'lang_enum' => 'Language', - 'longitude' => 'Longitude', - 'latitude' => 'Latitude', - 'published' => 'Published', - 'email_contact' => 'Email Contact', - ), - 'check_all' => 'Check All', - 'uncheck_all' => 'Uncheck All', - 'automatically_calculated_on_save' => 'Automatically calculated on save.' -); - -$email_contact_strings = array( - 'meeting_contact_form_subject_format' => "[MEETING LIST CONTACT] %s", - 'meeting_contact_message_format' => "%s\n--\nThis message concerns the meeting named \"%s\", which meets at %s, on %s.\nBrowser Link: %s\nEdit Link: %s\nIt was sent directly from the meeting list web server, and the sender is not aware of your email address.\nPlease be aware that replying will expose your email address.\nIf you use \"Reply All\", and there are multiple email recipients, you may expose other people's email addresses.\nPlease respect people's privacy and anonymity; including the original sender of this message." -); - -$change_type_strings = array( - '__THE_MEETING_WAS_CHANGED__' => 'The meeting was changed.', - '__THE_MEETING_WAS_CREATED__' => 'The meeting was created.', - '__THE_MEETING_WAS_DELETED__' => 'The meeting was deleted.', - '__THE_MEETING_WAS_ROLLED_BACK__' => 'The meeting was rolled back to a previous version.', - - '__THE_FORMAT_WAS_CHANGED__' => 'The format was changed.', - '__THE_FORMAT_WAS_CREATED__' => 'The format was created.', - '__THE_FORMAT_WAS_DELETED__' => 'The format was deleted.', - '__THE_FORMAT_WAS_ROLLED_BACK__' => 'The format was rolled back to a previous version.', - - '__THE_SERVICE_BODY_WAS_CHANGED__' => 'The service body was changed.', - '__THE_SERVICE_BODY_WAS_CREATED__' => 'The service body was created.', - '__THE_SERVICE_BODY_WAS_DELETED__' => 'The service body was deleted.', - '__THE_SERVICE_BODY_WAS_ROLLED_BACK__' => 'The service body was rolled back to a previous version.', - - '__THE_USER_WAS_CHANGED__' => 'The user was changed.', - '__THE_USER_WAS_CREATED__' => 'The user was created.', - '__THE_USER_WAS_DELETED__' => 'The user was deleted.', - '__THE_USER_WAS_ROLLED_BACK__' => 'The user was rolled back to a previous version.', - - '__BY__' => 'by', - '__FOR__' => 'for' -); - -$detailed_change_strings = array( - 'was_changed_from' => 'was changed from', - 'to' => 'to', - 'was_changed' => 'was changed', - 'was_added_as' => 'was added as', - 'was_deleted' => 'was deleted', - 'was_published' => 'The meeting was published', - 'was_unpublished' => 'The meeting was unpublished', - 'formats_prompt' => 'The meeting format', - 'duration_time' => 'The meeting duration', - 'start_time' => 'The meeting start time', - 'longitude' => 'The meeting longitude', - 'latitude' => 'The meeting latitude', - 'sb_prompt' => 'The meeting changed its Service Body from', - 'id_bigint' => 'The meeting ID', - 'lang_enum' => 'The meeting language', - 'worldid_mixed' => 'The World Committee Code', - 'weekday_tinyint' => 'The day of the week on which the meeting gathers', - 'non_existent_service_body' => 'Service Body No Longer Exists', -); - -defined('_END_CHANGE_REPORT') or define('_END_CHANGE_REPORT', '.'); diff --git a/src/legacy/local_server/server_admin/main_console.php b/src/legacy/local_server/server_admin/main_console.php deleted file mode 100644 index d1ee87a61..000000000 --- a/src/legacy/local_server/server_admin/main_console.php +++ /dev/null @@ -1,22 +0,0 @@ -. -*/ -defined('BMLT_EXEC') or die('Cannot Execute Directly'); // Makes sure that this file is in the correct context. -require_once(dirname(__FILE__).'/c_comdef_admin_main_console.class.php'); - -$console_object = new c_comdef_admin_main_console($http_vars); -echo $console_object instanceof c_comdef_admin_main_console ? $console_object->return_main_console_html() : 'ERROR'; diff --git a/src/legacy/local_server/server_admin/server_admin_javascript.js b/src/legacy/local_server/server_admin/server_admin_javascript.js deleted file mode 100644 index bcc2eefd7..000000000 --- a/src/legacy/local_server/server_admin/server_admin_javascript.js +++ /dev/null @@ -1,6202 +0,0 @@ -/* - This file is part of the Basic Meeting List Toolbox (BMLT). - - Find out more at: https://bmlt.app - - BMLT is free software: you can redistribute it and/or modify - it under the terms of the MIT License. - - BMLT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - MIT License for more details. - - You should have received a copy of the MIT License along with this code. - If not, see . -*/ -/******************************************************************************************** -*######################################### MAIN CODE #######################################* -********************************************************************************************/ - -function BMLT_Server_Admin() -{ - // #mark - - // #mark ########## Class Declaration ########## - // #mark - - - /************************************************************************************//** - * DATA MEMBERS * - ****************************************************************************************/ - var m_server_admin_panel_shown = null; ///< This will be true if the "Server Administration" panel is exposed. - var m_account_panel_shown = null; ///< This will be true if the "My Account" panel is exposed. - var m_search_specifier_shown = null; ///< This is true, if the meeting search specifier form is shown. - var m_meeting_editor_panel_shown = null; ///< This will be true if the "Edit Meetings" panel is exposed. - var m_service_body_editor_panel_shown = null; ///< This is true, if the Service Body Editor is shown. - var m_ajax_request_in_progress = null; ///< This is any AJAX request currently under way. - var m_success_fade_duration = null; ///< Number of milliseconds for a success fader. - var m_failure_fade_duration = null; ///< Number of milliseconds for a failure fader. - var m_search_results = null; ///< This will contain any meeting search results. - var m_meeting_results_container_div = null; ///< This will hold any search result display elements (allows easy disposal) - var m_editing_window_open = null; ///< If there is a meeting editor open, it is recorded here. There can only be one... - var m_user_editor_panel_shown = null; ///< Set to true, if the user editor is open. - var m_warn_user_to_refresh = null; ///< If this is true, then a warning alert will be shown to the user. - var m_format_editor_table_rows = null; ///< This is used to track the number of rows in the format editor table. - - this.validationMessageTypes = { - "ERROR": "error", - "WARN": "warn" - } - - /************************************************************************************//** - * METHODS * - ****************************************************************************************/ - - // #mark - - // #mark Affects All Sections - // #mark - - - /************************************************************************************//** - * \brief If one of the upper sections has been edited, it can affect the Account, * - * Meeting or Service Body sections. In this case, the user needs to log out, * - * then back in again (or refresh the page, but signing out is easier to * - * explain). This sets an orange fader in each affected section, and also sets * - * the trigger for an alert that explains it. * - ****************************************************************************************/ - this.setWarningFaders = function () { - if ( document.getElementById('bmlt_admin_fader_service_body_editor_warn_div') ) { - document.getElementById('bmlt_admin_fader_service_body_editor_warn_div').className = 'bmlt_admin_fader_div'; - }; - - if ( document.getElementById('bmlt_admin_fader_meeting_editor_warn_div') ) { - document.getElementById('bmlt_admin_fader_meeting_editor_warn_div').className = 'bmlt_admin_fader_div'; - }; - - if ( document.getElementById('bmlt_admin_fader_account_warn_div') ) { - document.getElementById('bmlt_admin_fader_account_warn_div').className = 'bmlt_admin_fader_div'; - }; - - this.m_warn_user_to_refresh = true; - }; - - /************************************************************************************//** - * \brief This displays that alert. * - ****************************************************************************************/ - this.showWarningAlert = function () { - if ( this.m_warn_user_to_refresh ) { // Only if needed. - alert(g_need_refresh_message_alert_text); - this.m_warn_user_to_refresh = false; - }; - }; - - // #mark - - // #mark Text Item Handlers - // #mark - - - /************************************************************************************//** - * \brief When a text input (either or