1
0
Fork 0
mirror of synced 2024-09-13 16:07:21 +12:00
appwrite/app/controllers/api/locale.php

219 lines
8.4 KiB
PHP
Raw Normal View History

2019-05-09 18:54:39 +12:00
<?php
2020-08-07 02:49:29 +12:00
use Appwrite\Database\Document;
2020-08-15 09:56:33 +12:00
use Appwrite\Utopia\Response;
2019-05-09 18:54:39 +12:00
use Utopia\App;
use Utopia\Config\Config;
2019-05-09 18:54:39 +12:00
2020-06-29 05:31:21 +12:00
App::get('/v1/locale')
2019-05-09 18:54:39 +12:00
->desc('Get User Locale')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
2019-05-09 18:54:39 +12:00
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
2019-05-09 18:54:39 +12:00
->label('sdk.namespace', 'locale')
2020-01-31 05:18:46 +13:00
->label('sdk.method', 'get')
2019-10-08 20:09:35 +13:00
->label('sdk.description', '/docs/references/locale/get-locale.md')
2020-07-03 08:24:14 +12:00
->action(function ($request, $response, $locale, $geodb) {
2020-08-15 23:39:44 +12:00
/** @var Utopia\Swoole\Request $request */
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-06-30 09:43:34 +12:00
/** @var Utopia\Locale\Locale $locale */
2020-07-03 08:24:14 +12:00
/** @var GeoIp2\Database\Reader $geodb */
2020-06-30 09:43:34 +12:00
$eu = Config::getParam('locale-eu');
$currencies = Config::getParam('locale-currencies');
2020-06-30 09:43:34 +12:00
$output = [];
$ip = $request->getIP();
$time = (60 * 60 * 24 * 45); // 45 days cache
$countries = $locale->getText('countries');
$continents = $locale->getText('continents');
$output['ip'] = $ip;
2019-05-09 18:54:39 +12:00
2020-06-30 09:43:34 +12:00
$currency = null;
2019-05-09 18:54:39 +12:00
2020-06-30 09:43:34 +12:00
try {
2020-07-03 08:24:14 +12:00
$record = $geodb->country($ip);
2020-06-30 09:43:34 +12:00
$output['countryCode'] = $record->country->isoCode;
$output['country'] = (isset($countries[$record->country->isoCode])) ? $countries[$record->country->isoCode] : $locale->getText('locale.country.unknown');
//$output['countryTimeZone'] = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $record->country->isoCode);
$output['continent'] = (isset($continents[$record->continent->code])) ? $continents[$record->continent->code] : $locale->getText('locale.country.unknown');
$output['continentCode'] = $record->continent->code;
$output['eu'] = (\in_array($record->country->isoCode, $eu)) ? true : false;
2019-05-09 18:54:39 +12:00
2020-06-30 09:43:34 +12:00
foreach ($currencies as $code => $element) {
if (isset($element['locations']) && isset($element['code']) && \in_array($record->country->isoCode, $element['locations'])) {
$currency = $element['code'];
2019-05-09 18:54:39 +12:00
}
}
2020-06-30 09:43:34 +12:00
$output['currency'] = $currency;
} catch (\Exception $e) {
$output['countryCode'] = '--';
$output['country'] = $locale->getText('locale.country.unknown');
$output['continent'] = $locale->getText('locale.country.unknown');
$output['continentCode'] = '--';
$output['eu'] = false;
$output['currency'] = $currency;
2019-05-09 18:54:39 +12:00
}
2020-06-30 09:43:34 +12:00
$response
->addHeader('Cache-Control', 'public, max-age='.$time)
->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $time).' GMT') // 45 days cache
2020-08-07 02:49:29 +12:00
;
$response->dynamic(new Document($output), Response::MODEL_LOCALE);
2020-07-03 08:24:14 +12:00
}, ['request', 'response', 'locale', 'geodb']);
2019-05-09 18:54:39 +12:00
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/countries')
2019-05-09 18:54:39 +12:00
->desc('List Countries')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
2019-05-09 18:54:39 +12:00
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
2019-05-09 18:54:39 +12:00
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getCountries')
2019-10-09 21:40:02 +13:00
->label('sdk.description', '/docs/references/locale/get-countries.md')
2020-06-30 09:43:34 +12:00
->action(function ($response, $locale) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-06-30 09:43:34 +12:00
/** @var Utopia\Locale\Locale $locale */
2019-05-09 18:54:39 +12:00
2020-06-30 09:43:34 +12:00
$list = $locale->getText('countries'); /* @var $list array */
2020-09-07 00:32:05 +12:00
$output = [];
\asort($list); // sort by abc per locale
2019-05-09 18:54:39 +12:00
2020-09-07 00:32:05 +12:00
foreach ($list as $key => $value) {
$output[] = new Document([
'name' => $value,
'code' => $key,
]);
}
2020-06-30 09:43:34 +12:00
2020-09-07 00:32:05 +12:00
$response->dynamic(new Document(['countries' => $output, 'sum' => \count($output)]), Response::MODEL_COUNTRY_LIST);
2020-06-30 09:43:34 +12:00
}, ['response', 'locale']);
2019-05-09 18:54:39 +12:00
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/countries/eu')
2019-05-09 18:54:39 +12:00
->desc('List EU Countries')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
2019-05-09 18:54:39 +12:00
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
2019-05-09 18:54:39 +12:00
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getCountriesEU')
2019-10-08 20:09:35 +13:00
->label('sdk.description', '/docs/references/locale/get-countries-eu.md')
2020-06-30 09:43:34 +12:00
->action(function ($response, $locale) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-06-30 09:43:34 +12:00
/** @var Utopia\Locale\Locale $locale */
2019-05-09 18:54:39 +12:00
2020-09-07 00:32:05 +12:00
$list = $locale->getText('countries'); /* @var $countries array */
$eu = Config::getParam('locale-eu');
2020-09-07 00:32:05 +12:00
$output = [];
\asort($list);
2019-05-09 18:54:39 +12:00
2020-06-30 09:43:34 +12:00
foreach ($eu as $code) {
2020-09-07 00:32:05 +12:00
if (\array_key_exists($code, $list)) {
$output[] = new Document([
'name' => $list[$code],
'code' => $code,
]);
2020-06-30 09:43:34 +12:00
}
2019-05-09 18:54:39 +12:00
}
2020-06-30 09:43:34 +12:00
2020-09-07 00:32:05 +12:00
$response->dynamic(new Document(['countries' => $output, 'sum' => \count($output)]), Response::MODEL_COUNTRY_LIST);
2020-06-30 09:43:34 +12:00
}, ['response', 'locale']);
2019-05-09 18:54:39 +12:00
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/countries/phones')
2019-05-09 18:54:39 +12:00
->desc('List Countries Phone Codes')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
2019-05-09 18:54:39 +12:00
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
2019-05-09 18:54:39 +12:00
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getCountriesPhones')
2019-10-08 20:09:35 +13:00
->label('sdk.description', '/docs/references/locale/get-countries-phones.md')
2020-06-30 09:43:34 +12:00
->action(function ($response, $locale) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-06-30 09:43:34 +12:00
/** @var Utopia\Locale\Locale $locale */
2019-05-09 18:54:39 +12:00
$list = Config::getParam('locale-phones'); /* @var $list array */
2020-06-30 09:43:34 +12:00
$countries = $locale->getText('countries'); /* @var $countries array */
2020-09-07 00:32:05 +12:00
$output = [];
\asort($list);
2020-06-30 09:43:34 +12:00
foreach ($list as $code => $name) {
if (\array_key_exists($code, $countries)) {
2020-09-07 00:32:05 +12:00
$output[] = new Document([
'code' => '+'.$list[$code],
'countryCode' => $code,
'countryName' => $countries[$code],
]);
2019-05-09 18:54:39 +12:00
}
2020-06-30 09:43:34 +12:00
}
2019-05-09 18:54:39 +12:00
2020-09-07 00:32:05 +12:00
$response->dynamic(new Document(['phones' => $output, 'sum' => \count($output)]), Response::MODEL_PHONE_LIST);
2020-06-30 09:43:34 +12:00
}, ['response', 'locale']);
2019-08-19 22:31:06 +12:00
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/continents')
2020-04-13 20:18:09 +12:00
->desc('List Continents')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getContinents')
->label('sdk.description', '/docs/references/locale/get-continents.md')
2020-06-30 09:43:34 +12:00
->action(function ($response, $locale) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-06-30 09:43:34 +12:00
/** @var Utopia\Locale\Locale $locale */
2020-06-30 09:43:34 +12:00
$list = $locale->getText('continents'); /* @var $list array */
2020-06-30 09:43:34 +12:00
\asort($list);
2020-09-07 00:32:05 +12:00
foreach ($list as $key => $value) {
$output[] = new Document([
'name' => $value,
'code' => $key,
]);
}
2020-06-30 09:43:34 +12:00
2020-09-07 00:32:05 +12:00
$response->dynamic(new Document(['continents' => $output, 'sum' => \count($output)]), Response::MODEL_CONTINENT_LIST);
2020-06-30 09:43:34 +12:00
}, ['response', 'locale']);
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/currencies')
2019-11-10 18:24:51 +13:00
->desc('List Currencies')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
2019-08-19 22:31:06 +12:00
->label('scope', 'locale.read')
2020-01-27 19:14:14 +13:00
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
2019-08-19 22:31:06 +12:00
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getCurrencies')
2019-10-08 20:09:35 +13:00
->label('sdk.description', '/docs/references/locale/get-currencies.md')
2020-06-30 09:43:34 +12:00
->action(function ($response) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2019-08-19 22:31:06 +12:00
2020-09-06 07:04:35 +12:00
$list = Config::getParam('locale-currencies');
2020-06-30 09:43:34 +12:00
2020-09-07 00:32:05 +12:00
$list = array_map(function($node) {
return new Document($node);
}, $list);
$response->dynamic(new Document(['currencies' => $list, 'sum' => \count($list)]), Response::MODEL_CURRENCY_LIST);
2020-06-30 09:43:34 +12:00
}, ['response']);
2020-06-29 05:31:21 +12:00
App::get('/v1/locale/languages')
->desc('List Languages')
2020-06-26 06:32:12 +12:00
->groups(['api', 'locale'])
->label('scope', 'locale.read')
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
->label('sdk.namespace', 'locale')
->label('sdk.method', 'getLanguages')
->label('sdk.description', '/docs/references/locale/get-languages.md')
2020-06-30 09:43:34 +12:00
->action(function ($response) {
2020-08-15 09:56:33 +12:00
/** @var Appwrite\Utopia\Response $response */
2020-09-06 07:04:35 +12:00
$list = Config::getParam('locale-languages');
2020-06-30 09:43:34 +12:00
2020-09-07 00:32:05 +12:00
$list = array_map(function($node) {
return new Document($node);
}, $list);
$response->dynamic(new Document(['languages' => $list, 'sum' => \count($list)]), Response::MODEL_LANGUAGE_LIST);
2020-06-30 09:43:34 +12:00
}, ['response']);