diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php
index be984d555..93dad904a 100644
--- a/src/Content/Conversation.php
+++ b/src/Content/Conversation.php
@@ -367,6 +367,7 @@ class Conversation
'$eduline' => $this->l10n->t('Underline'),
'$edquote' => $this->l10n->t('Quote'),
'$edemojis' => $this->l10n->t('Add emojis'),
+ '$contentwarn' => $this->l10n->t('Content Warning'),
'$edcode' => $this->l10n->t('Code'),
'$edimg' => $this->l10n->t('Image'),
'$edurl' => $this->l10n->t('Link'),
diff --git a/src/Content/Widget.php b/src/Content/Widget.php
index f0236c00c..c8c0230c6 100644
--- a/src/Content/Widget.php
+++ b/src/Content/Widget.php
@@ -472,6 +472,8 @@ class Widget
// Set the start and end date to the beginning of the month
$cutoffday = $dthen;
$thisday = substr($dnow, 4);
+ $nextday = date('Y-m-d', strtotime($dnow . ' + 1 day'));
+ $nextday = substr($nextday, 4);
$dnow = substr($dnow, 0, 8) . '01';
$dthen = substr($dthen, 0, 8) . '01';
@@ -515,6 +517,7 @@ class Widget
'$showmore' => DI::l10n()->t('show more'),
'$onthisdate' => DI::l10n()->t('On this date'),
'$thisday' => $thisday,
+ '$nextday' => $nextday,
'$cutoffday' => $cutoffday
]);
diff --git a/src/Database/Database.php b/src/Database/Database.php
index 78a534ead..9366f1b31 100644
--- a/src/Database/Database.php
+++ b/src/Database/Database.php
@@ -752,8 +752,8 @@ class Database
@file_put_contents(
$this->config->get('system', 'db_log'),
DateTimeFormat::utcNow() . "\t" . $duration . "\t" .
- basename($backtrace[1]["file"]) . "\t" .
- $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" .
+ basename($backtrace[1]['file']) . "\t" .
+ $backtrace[1]['line'] . "\t" . $backtrace[2]['function'] . "\t" .
substr($this->replaceParameters($sql, $args), 0, 4000) . "\n",
FILE_APPEND
);
diff --git a/src/Model/Contact.php b/src/Model/Contact.php
index 4787eeab9..d079a4ef6 100644
--- a/src/Model/Contact.php
+++ b/src/Model/Contact.php
@@ -2595,7 +2595,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function updateFromProbe(int $id, string $network = '')
+ public static function updateFromProbe(int $id, string $network = ''): bool
{
$contact = DBA::selectFirst('contact', ['uid', 'url'], ['id' => $id]);
if (!DBA::isResult($contact)) {
diff --git a/src/Module/Item/Compose.php b/src/Module/Item/Compose.php
index 6766cb5e5..76a99750a 100644
--- a/src/Module/Item/Compose.php
+++ b/src/Module/Item/Compose.php
@@ -191,7 +191,8 @@ class Compose extends BaseModule
'editalic' => $this->l10n->t('Italic'),
'eduline' => $this->l10n->t('Underline'),
'edquote' => $this->l10n->t('Quote'),
- '$edemojis' => $this->l10n->t('Add emojis'),
+ 'edemojis' => $this->l10n->t('Add emojis'),
+ 'contentwarn' => $this->l10n->t('Content Warning'),
'edcode' => $this->l10n->t('Code'),
'edimg' => $this->l10n->t('Image'),
'edurl' => $this->l10n->t('Link'),
diff --git a/src/Module/Magic.php b/src/Module/Magic.php
index 3000e953c..dc0d4f8ad 100644
--- a/src/Module/Magic.php
+++ b/src/Module/Magic.php
@@ -130,8 +130,8 @@ class Magic extends BaseModule
}
$header = [
- 'Accept' => ['application/x-dfrn+json', 'application/x-zot+json'],
- 'X-Open-Web-Auth' => [Strings::getRandomHex()],
+ 'Accept' => 'application/x-dfrn+json, application/x-zot+json',
+ 'X-Open-Web-Auth' => Strings::getRandomHex()
];
// Create a header that is signed with the local users private key.
diff --git a/src/Network/Probe.php b/src/Network/Probe.php
index c7b6a84e8..2b5cc3cff 100644
--- a/src/Network/Probe.php
+++ b/src/Network/Probe.php
@@ -1180,7 +1180,6 @@ class Probe
$data = self::pollHcard($profile_link, $data, true);
}
- $prof_data = [];
if (empty($data['addr']) || empty($data['nick'])) {
$probe_data = self::uri($profile_link);
@@ -1188,15 +1187,17 @@ class Probe
$data['nick'] = ($data['nick'] ?? '') ?: $probe_data['nick'];
}
- $prof_data['addr'] = $data['addr'];
- $prof_data['nick'] = $data['nick'];
- $prof_data['dfrn-request'] = $data['request'] ?? null;
- $prof_data['dfrn-confirm'] = $data['confirm'] ?? null;
- $prof_data['dfrn-notify'] = $data['notify'] ?? null;
- $prof_data['dfrn-poll'] = $data['poll'] ?? null;
- $prof_data['photo'] = $data['photo'] ?? null;
- $prof_data['fn'] = $data['name'] ?? null;
- $prof_data['key'] = $data['pubkey'] ?? null;
+ $prof_data = [
+ 'addr' => $data['addr'],
+ 'nick' => $data['nick'],
+ 'dfrn-request' => $data['request'] ?? null,
+ 'dfrn-confirm' => $data['confirm'] ?? null,
+ 'dfrn-notify' => $data['notify'] ?? null,
+ 'dfrn-poll' => $data['poll'] ?? null,
+ 'photo' => $data['photo'] ?? null,
+ 'fn' => $data['name'] ?? null,
+ 'key' => $data['pubkey'] ?? null,
+ ];
Logger::debug('Result', ['link' => $profile_link, 'data' => $prof_data]);
diff --git a/src/Object/Post.php b/src/Object/Post.php
index 2f68b1c53..28db23894 100644
--- a/src/Object/Post.php
+++ b/src/Object/Post.php
@@ -1086,6 +1086,7 @@ class Post
'$edbold' => DI::l10n()->t('Bold'),
'$editalic' => DI::l10n()->t('Italic'),
'$eduline' => DI::l10n()->t('Underline'),
+ '$contentwarn' => DI::l10n()->t('Content Warning'),
'$edquote' => DI::l10n()->t('Quote'),
'$edemojis' => DI::l10n()->t('Add emojis'),
'$edcode' => DI::l10n()->t('Code'),
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index affb3cf87..abe56cb9a 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -267,7 +267,7 @@ class Diaspora
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
} else {
@@ -281,7 +281,7 @@ class Diaspora
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
@@ -307,7 +307,7 @@ class Diaspora
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
@@ -322,7 +322,7 @@ class Diaspora
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
@@ -332,7 +332,7 @@ class Diaspora
if ($no_exit) {
return false;
} else {
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
}
@@ -424,7 +424,7 @@ class Diaspora
if (!$base) {
Logger::notice('unable to locate salmon data in xml');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
@@ -444,14 +444,11 @@ class Diaspora
$encoding = $base->encoding;
$alg = $base->alg;
-
$signed_data = $data . '.' . Strings::base64UrlEncode($type) . '.' . Strings::base64UrlEncode($encoding) . '.' . Strings::base64UrlEncode($alg);
-
// decode the data
$data = Strings::base64UrlDecode($data);
-
if ($public) {
$inner_decrypted = $data;
} else {
@@ -467,14 +464,14 @@ class Diaspora
$key = self::key($author);
if (!$key) {
Logger::notice('Could not retrieve author key.');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
$verify = Crypto::rsaVerify($signed_data, $signature, $key);
if (!$verify) {
Logger::notice('Message did not verify. Discarding.');
- throw new \Friendica\Network\HTTPException\BadRequestException();
+ throw new HTTPException\BadRequestException();
}
Logger::info('Message verified.');
@@ -499,8 +496,7 @@ class Diaspora
*/
public static function dispatchPublic(array $msg, int $direction)
{
- $enabled = intval(DI::config()->get('system', 'diaspora_enabled'));
- if (!$enabled) {
+ if (!DI::config()->get('system', 'diaspora_enabled')) {
Logger::notice('Diaspora is disabled');
return false;
}
@@ -940,7 +936,7 @@ class Diaspora
{
$item = Post::selectFirst(['id'], ['uid' => $uid, 'guid' => $guid]);
if (DBA::isResult($item)) {
- Logger::notice('Message ' . $guid . ' already exists for user ' . $uid);
+ Logger::notice('Message already exists.', ['uid' => $uid, 'guid' => $guid, 'id' => $item['id']]);
return $item['id'];
}
@@ -951,6 +947,7 @@ class Diaspora
* Checks for links to posts in a message
*
* @param array $item The item array
+ *
* @return void
*/
private static function fetchGuid(array $item)
@@ -2569,19 +2566,21 @@ class Diaspora
*
* @param int $uriid
* @param object $photo
+ *
* @return void
*/
private static function storePhotoAsMedia(int $uriid, $photo)
{
// @TODO Need to find object type, roland@f.haeder.net
Logger::debug('photo=' . get_class($photo));
- $data = [];
- $data['uri-id'] = $uriid;
- $data['type'] = Post\Media::IMAGE;
- $data['url'] = XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name);
- $data['height'] = (int)XML::unescape($photo->height ?? 0);
- $data['width'] = (int)XML::unescape($photo->width ?? 0);
- $data['description'] = XML::unescape($photo->text ?? '');
+ $data = [
+ 'uri-id' => $uriid,
+ 'type' => Post\Media::IMAGE,
+ 'url' => XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name),
+ 'height' => (int)XML::unescape($photo->height ?? 0),
+ 'width' => (int)XML::unescape($photo->width ?? 0),
+ 'description' => XML::unescape($photo->text ?? ''),
+ ];
Post\Media::insert($data);
}
@@ -2653,7 +2652,25 @@ class Diaspora
$raw_body = $body = Markdown::toBBCode($text);
- $datarray = [];
+ $datarray = [
+ 'guid' => $guid,
+ 'uri-id' => ItemURI::insert(['uri' => $guid, 'guid' => $guid]),
+ 'uid' => $importer['uid'],
+ 'contact-id' => $contact['id'],
+ 'network' => Protocol::DIASPORA,
+ 'author-link' => $contact['url'],
+ 'author-id' => Contact::getIdForURL($contact['url'], 0),
+ 'verb' => Activity::POST,
+ 'gravity' => Item::GRAVITY_PARENT,
+ 'protocol' => Conversation::PARCEL_DIASPORA,
+ 'source' => $xml,
+ 'body' => self::replacePeopleGuid($body, $contact['url']),
+ 'raw-body' => self::replacePeopleGuid($raw_body, $contact['url']),
+ 'private' => (($public == 'false') ? Item::PRIVATE : Item::PUBLIC),
+ // Default is note (aka. comment), later below is being checked the real type
+ 'object-type' => Activity\ObjectType::NOTE,
+ 'post-type' => Item::PT_NOTE,
+ ];
$datarray['guid'] = $guid;
$datarray['uri'] = $datarray['thr-parent'] = self::getUriFromGuid($guid, $author);
@@ -2668,11 +2685,7 @@ class Diaspora
$datarray['object-type'] = Activity\ObjectType::IMAGE;
$datarray['post-type'] = Item::PT_IMAGE;
} elseif ($data->poll) {
- $datarray['object-type'] = Activity\ObjectType::NOTE;
$datarray['post-type'] = Item::PT_POLL;
- } else {
- $datarray['object-type'] = Activity\ObjectType::NOTE;
- $datarray['post-type'] = Item::PT_NOTE;
}
/// @todo enable support for polls
@@ -2684,27 +2697,6 @@ class Diaspora
/// @todo enable support for events
- $datarray['uid'] = $importer['uid'];
- $datarray['contact-id'] = $contact['id'];
- $datarray['network'] = Protocol::DIASPORA;
-
- $datarray['author-link'] = $contact['url'];
- $datarray['author-id'] = Contact::getIdForURL($contact['url'], 0);
-
- $datarray['owner-link'] = $datarray['author-link'];
- $datarray['owner-id'] = $datarray['author-id'];
-
- $datarray['verb'] = Activity::POST;
- $datarray['gravity'] = Item::GRAVITY_PARENT;
-
- $datarray['protocol'] = Conversation::PARCEL_DIASPORA;
- $datarray['source'] = $xml;
-
- $datarray = self::setDirection($datarray, $direction);
-
- $datarray['body'] = self::replacePeopleGuid($body, $contact['url']);
- $datarray['raw-body'] = self::replacePeopleGuid($raw_body, $contact['url']);
-
self::storeMentions($datarray['uri-id'], $text);
Tag::storeRawTagsFromBody($datarray['uri-id'], $datarray['body']);
@@ -2718,7 +2710,6 @@ class Diaspora
}
$datarray['plink'] = self::plink($author, $guid);
- $datarray['private'] = (($public == 'false') ? Item::PRIVATE : Item::PUBLIC);
$datarray['changed'] = $datarray['created'] = $datarray['edited'] = $created_at;
if (isset($address['address'])) {
@@ -2839,7 +2830,7 @@ class Diaspora
public static function buildMagicEnvelope(string $msg, array $user): string
{
$b64url_data = Strings::base64UrlEncode($msg);
- $data = str_replace(["\n", "\r", " ", "\t"], ['', '', '', ''], $b64url_data);
+ $data = str_replace(["\n", "\r", ' ', "\t"], ['', '', '', ''], $b64url_data);
$key_id = Strings::base64UrlEncode(self::myHandle($user));
$type = 'application/xml';
@@ -2857,11 +2848,11 @@ class Diaspora
$xmldata = [
'me:env' => [
- 'me:data' => $data,
- '@attributes' => ['type' => $type],
- 'me:encoding' => $encoding,
- 'me:alg' => $alg,
- 'me:sig' => $sig,
+ 'me:data' => $data,
+ '@attributes' => ['type' => $type],
+ 'me:encoding' => $encoding,
+ 'me:alg' => $alg,
+ 'me:sig' => $sig,
'@attributes2' => ['key_id' => $key_id]
]
];
diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php
index ff8fc3cbe..3d35394b9 100644
--- a/src/Protocol/OStatus.php
+++ b/src/Protocol/OStatus.php
@@ -385,12 +385,14 @@ class OStatus
}
}
- $header = [];
- $header['uid'] = $importer['uid'];
- $header['network'] = Protocol::OSTATUS;
- $header['wall'] = 0;
- $header['origin'] = 0;
- $header['gravity'] = Item::GRAVITY_COMMENT;
+ // Initial header elements
+ $header = [
+ 'uid' => $importer['uid'],
+ 'network' => Protocol::OSTATUS,
+ 'wall' => 0,
+ 'origin' => 0,
+ 'gravity' => Item::GRAVITY_COMMENT,
+ ];
if (!is_object($doc->firstChild) || empty($doc->firstChild->tagName)) {
return false;
diff --git a/src/Security/TwoFactor/Model/AppSpecificPassword.php b/src/Security/TwoFactor/Model/AppSpecificPassword.php
index 5c9cd5ead..affabb346 100644
--- a/src/Security/TwoFactor/Model/AppSpecificPassword.php
+++ b/src/Security/TwoFactor/Model/AppSpecificPassword.php
@@ -32,12 +32,12 @@ use PragmaRX\Random\Random;
*/
class AppSpecificPassword
{
- public static function countForUser($uid)
+ public static function countForUser(int $uid)
{
return DBA::count('2fa_app_specific_password', ['uid' => $uid]);
}
- public static function checkDuplicateForUser($uid, $description)
+ public static function checkDuplicateForUser(int $uid, string $description): bool
{
return DBA::exists('2fa_app_specific_password', ['uid' => $uid, 'description' => $description]);
}
@@ -50,7 +50,7 @@ class AppSpecificPassword
* @return bool
* @throws \Exception
*/
- public static function authenticateUser($uid, $plaintextPassword)
+ public static function authenticateUser(int $uid, string $plaintextPassword): bool
{
$appSpecificPasswords = self::getListForUser($uid);
@@ -79,7 +79,7 @@ class AppSpecificPassword
* @return array
* @throws \Exception
*/
- public static function getListForUser($uid)
+ public static function getListForUser(int $uid): array
{
$appSpecificPasswordsStmt = DBA::select('2fa_app_specific_password', ['id', 'description', 'hashed_password', 'last_used'], ['uid' => $uid]);
@@ -102,7 +102,7 @@ class AppSpecificPassword
* @return array The new app-specific password data structure with the plaintext password added
* @throws \Exception
*/
- public static function generateForUser(int $uid, $description)
+ public static function generateForUser(int $uid, string $description): array
{
$Random = (new Random())->size(40);
@@ -111,10 +111,10 @@ class AppSpecificPassword
$generated = DateTimeFormat::utcNow();
$fields = [
- 'uid' => $uid,
- 'description' => $description,
+ 'uid' => $uid,
+ 'description' => $description,
'hashed_password' => User::hashPassword($plaintextPassword),
- 'generated' => $generated,
+ 'generated' => $generated,
];
DBA::insert('2fa_app_specific_password', $fields);
@@ -125,7 +125,7 @@ class AppSpecificPassword
return $fields;
}
- private static function update($appSpecificPasswordId, $fields)
+ private static function update(int $appSpecificPasswordId, array $fields)
{
return DBA::update('2fa_app_specific_password', $fields, ['id' => $appSpecificPasswordId]);
}
diff --git a/src/Security/TwoFactor/Model/RecoveryCode.php b/src/Security/TwoFactor/Model/RecoveryCode.php
index 2669ae18e..b3c197f98 100644
--- a/src/Security/TwoFactor/Model/RecoveryCode.php
+++ b/src/Security/TwoFactor/Model/RecoveryCode.php
@@ -35,10 +35,11 @@ class RecoveryCode
* Returns the number of code the provided users can still use to replace a TOTP code
*
* @param int $uid User ID
+ *
* @return int
* @throws \Exception
*/
- public static function countValidForUser($uid)
+ public static function countValidForUser(int $uid): int
{
return DBA::count('2fa_recovery_codes', ['uid' => $uid, 'used' => null]);
}
@@ -46,12 +47,13 @@ class RecoveryCode
/**
* Checks the provided code is available to use for login by the provided user
*
- * @param int $uid User ID
+ * @param int $uid User ID
* @param string $code
+ *
* @return bool
* @throws \Exception
*/
- public static function existsForUser($uid, $code)
+ public static function existsForUser(int $uid, string $code): bool
{
return DBA::exists('2fa_recovery_codes', ['uid' => $uid, 'code' => $code, 'used' => null]);
}
@@ -60,10 +62,11 @@ class RecoveryCode
* Returns a complete list of all recovery codes for the provided user, including the used status
*
* @param int $uid User ID
+ *
* @return array
* @throws \Exception
*/
- public static function getListForUser($uid)
+ public static function getListForUser(int $uid): array
{
$codesStmt = DBA::select('2fa_recovery_codes', ['code', 'used'], ['uid' => $uid]);
@@ -76,10 +79,11 @@ class RecoveryCode
*
* @param int $uid User ID
* @param string $code
+ *
* @return bool
* @throws \Exception
*/
- public static function markUsedForUser($uid, $code)
+ public static function markUsedForUser(int $uid, string $code): bool
{
DBA::update('2fa_recovery_codes', ['used' => DateTimeFormat::utcNow()], ['uid' => $uid, 'code' => $code, 'used' => null]);
@@ -91,9 +95,11 @@ class RecoveryCode
* Generates 12 codes constituted of 2 blocks of 6 characters separated by a dash.
*
* @param int $uid User ID
+ * @return void
+ *
* @throws \Exception
*/
- public static function generateForUser($uid)
+ public static function generateForUser(int $uid)
{
$Random = (new Random())->pattern('[a-z0-9]');
@@ -120,9 +126,11 @@ class RecoveryCode
* Deletes all the recovery codes for the provided user.
*
* @param int $uid User ID
+ * @return void
+ *
* @throws \Exception
*/
- public static function deleteForUser($uid)
+ public static function deleteForUser(int $uid)
{
DBA::delete('2fa_recovery_codes', ['uid' => $uid]);
}
@@ -131,9 +139,11 @@ class RecoveryCode
* Replaces the existing recovery codes for the provided user by a freshly generated set.
*
* @param int $uid User ID
+ * @return void
+ *
* @throws \Exception
*/
- public static function regenerateForUser($uid)
+ public static function regenerateForUser(int $uid)
{
self::deleteForUser($uid);
self::generateForUser($uid);
diff --git a/src/Security/TwoFactor/Repository/TrustedBrowser.php b/src/Security/TwoFactor/Repository/TrustedBrowser.php
index a261d92ca..d913be3c9 100644
--- a/src/Security/TwoFactor/Repository/TrustedBrowser.php
+++ b/src/Security/TwoFactor/Repository/TrustedBrowser.php
@@ -143,6 +143,7 @@ class TrustedBrowser
/**
* @param int $local_user
+ *
* @return bool
*/
public function removeAllForUser(int $local_user): bool
diff --git a/tests/src/Util/HTTPSignatureTest.php b/tests/src/Util/HTTPSignatureTest.php
index 03b0033fa..bc54a9318 100644
--- a/tests/src/Util/HTTPSignatureTest.php
+++ b/tests/src/Util/HTTPSignatureTest.php
@@ -124,8 +124,8 @@ G1vVmRgkLDqhc4+r3wDz3qy6JpV7tg==
-----END PRIVATE KEY-----',
'keyId' => 'acct:admin@friendica.local',
'header' => [
- 'Accept' => ['application/x-dfrn+json', 'application/x-zot+json'],
- 'X-Open-Web-Auth' => ['1dde649b855fd1aae542a91c4edd8c3a7a4c59d8eaf3136cdee05dfc16a30bac'],
+ 'Accept' => 'application/x-dfrn+json, application/x-zot+json',
+ 'X-Open-Web-Auth' => '1dde649b855fd1aae542a91c4edd8c3a7a4c59d8eaf3136cdee05dfc16a30bac'
],
'signature' => 'Signature keyId="acct:admin@friendica.local",algorithm="rsa-sha512",headers="accept x-open-web-auth",signature="cb09/wdmRdFhrQUczL0lR6LTkVh8qb/vYh70DFCW40QrzvuUYHzJ+GqqJW6tcCb2rXP4t+aobWKfZ4wFMBtVbejAiCgF01pzEBJfDevdyu7khlfKo+Gtw1CGk4/0so1QmqASeHdlG3ID3GnmuovqZn2v5f5D+1UAJ6Pu6mtAXrGRntoEM/oqYBAsRrMtDSDAE4tnOSDu2YfVJJLfyUX1ZWjUK0ejZXZ0YTDJwU8PqRcRX17NhBaDq82dEHlfhD7I/aOclwVbfKIi5Ud619XCxPq0sAAYso17MhUm40oBCJVze2x4pswJhv9IFYohtR5G/fKkz2eosu3xeRflvGicS4JdclhTRgCGWDy10DV76FiXiS5N2clLXreHItWEXlZKZx6m9zAZoEX92VRnc4BY4jDsRR89Pl88hELaxiNipviyHS7XYZTRnkLM+nvtOcxkHSCbEs7oGw+AX+pLHoU5otNOqy+ZbXQ1cUvFOBYZmYdX3DiWaLfBKraakPkslJuU3yJu95X1qYmQTpOZDR4Ma/yf5fmWJh5D9ywnXxxd6RaupoO6HTtIl6gmsfcsyZNi5hRbbgPI3BiQwGYVGF6qzJpEOMzEyHyAuFeanhicc8b+P+DCwXni5sjM7ntKwShbCBP80KHSdoumORin3/PYgHCmHZVv71N0HNlPZnyVzZw="',
]
diff --git a/view/js/country.js b/view/js/country.js
index 83123e4cb..65497fdbf 100644
--- a/view/js/country.js
+++ b/view/js/country.js
@@ -260,7 +260,7 @@ aStates[233]="|Tuvalu";
aStates[234]="|Adjumani|Apac|Arua|Bugiri|Bundibugyo|Bushenyi|Busia|Gulu|Hoima|Iganga|Jinja|Kabale|Kabarole|Kalangala|Kampala|Kamuli|Kapchorwa|Kasese|Katakwi|Kibale|Kiboga|Kisoro|Kitgum|Kotido|Kumi|Lira|Luwero|Masaka|Masindi|Mbale|Mbarara|Moroto|Moyo|Mpigi|Mubende|Mukono|Nakasongola|Nebbi|Ntungamo|Pallisa|Rakai|Rukungiri|Sembabule|Soroti|Tororo";
aStates[235]="|Avtonomna Respublika Krym (Simferopol')|Cherkas'ka (Cherkasy)|Chernihivs'ka (Chernihiv)|Chernivets'ka (Chernivtsi)|Dnipropetrovs'ka (Dnipropetrovs'k)|Donets'ka (Donets'k)|Ivano-Frankivs'ka (Ivano-Frankivs'k)|Kharkivs'ka (Kharkiv)|Khersons'ka (Kherson)|Khmel'nyts'ka (Khmel'nyts'kyy)|Kirovohrads'ka (Kirovohrad)|Kyyiv|Kyyivs'ka (Kiev)|L'vivs'ka (L'viv)|Luhans'ka (Luhans'k)|Mykolayivs'ka (Mykolayiv)|Odes'ka (Odesa)|Poltavs'ka (Poltava)|Rivnens'ka (Rivne)|Sevastopol'|Sums'ka (Sumy)|Ternopil's'ka (Ternopil')|Vinnyts'ka (Vinnytsya)|Volyns'ka (Luts'k)|Zakarpats'ka (Uzhhorod)|Zaporiz'ka (Zaporizhzhya)|Zhytomyrs'ka (Zhytomyr)"
aStates[236]="|'Ajman|Abu Zaby (Abu Dhabi)|Al Fujayrah|Ash Shariqah (Sharjah)|Dubayy (Dubai)|Ra's al Khaymah|Umm al Qaywayn";
-aStates[237]="|Aberdeen|Aberdeenshire|Anglesey|Angus|Antrim|Argyl|Armagh|Avon|Ayrshire|Banffshire|Bedfordshire|Belfast|Berwickshire|Brecknockshire|Bristol|Buckinghamshire|Bute|Caernarfonshire|Cardiganshire|Caithness|Cambridgeshire|Carmarthenshire|Chesire|Clackmannashire|Cleveland|Clwyd|Cornwall|Cromartyshire|Cumberland|Cumbria|Denbighshire|Derbyshire|Devon|Dfyed|Dorset|Down|Dumfriesshire|Dunbartonshire|Dundee|Durham|East Lothian|East Suffolk|Derry|East Sussex|Edinburgh|Essex|Fermanagh|Fife|Flintshire|Glasgow|Glamorgan|Gloucestershire|Greater London|Greater Manchester|Gwent|Gwynedd|Hampshire|Hereford and Worcester|Herefordshire|Inverness-shire|Hertfordshire|Humberside|Huntingdon and Peterborough|Huntingdonshire|Isle of Ely|Isle of Wight|Kent|Kincardineshire|Kincross-shire|Kirkcudbrightshire|Lanarkshire|Lancashire|Leicestershire|Lincolnshire|London|Londonderry|Merionethshire|Merseyside|Middlesex|Mid Glamorgan|Midlothian|Monmouthshire|Montgomeryshire|Moray|Nairnshire|Norfolk|Northamptonshire|Northumberland|North Humberside|North Yorkshire|Nottinghamshire|Orkney|Oxfordshire|Peeblesshire|Pembrokeshire|Perthshire|Powys|Radnorshire|Renfrewshire|Ross And Cromarty|Ross-shire|Roxburghshire|Selkirkshire|Shetland|Stirlingshire|Sutherland|Soke of Peterborough|Rutland|Shropshire|Somerset|South Glamorgan|South Humberside|South Yorkshire|Staffordshite|Suffolk|Surrey|Sussex|Tyne and Wear|Tyrone|Warwickshire|West Glamorgan|West Lothian|West Midlands|Westmorland|West Suffolk|West Sussex|West Yorkshire|Wigtownshire|Wiltshire|Worcestershire|Yorkshire";
+aStates[237]="|Aberdeen|Aberdeenshire|Anglesey|Angus|Antrim|Argyl|Armagh|Avon|Ayrshire|Banffshire|Bedfordshire|Belfast|Berwickshire|Brecknockshire|Bristol|Buckinghamshire|Bute|Caernarfonshire|Cardiganshire|Caithness|Cambridgeshire|Carmarthenshire|Cheshire|Clackmannashire|Cleveland|Clwyd|Cornwall|Cromartyshire|Cumberland|Cumbria|Denbighshire|Derbyshire|Devon|Dfyed|Dorset|Down|Dumfriesshire|Dunbartonshire|Dundee|Durham|East Lothian|East Suffolk|Derry|East Sussex|Edinburgh|Essex|Fermanagh|Fife|Flintshire|Glasgow|Glamorgan|Gloucestershire|Greater London|Greater Manchester|Gwent|Gwynedd|Hampshire|Hereford and Worcester|Herefordshire|Inverness-shire|Hertfordshire|Humberside|Huntingdon and Peterborough|Huntingdonshire|Isle of Ely|Isle of Wight|Kent|Kincardineshire|Kincross-shire|Kirkcudbrightshire|Lanarkshire|Lancashire|Leicestershire|Lincolnshire|London|Londonderry|Merionethshire|Merseyside|Middlesex|Mid Glamorgan|Midlothian|Monmouthshire|Montgomeryshire|Moray|Nairnshire|Norfolk|Northamptonshire|Northumberland|North Humberside|North Yorkshire|Nottinghamshire|Orkney|Oxfordshire|Peeblesshire|Pembrokeshire|Perthshire|Powys|Radnorshire|Renfrewshire|Ross And Cromarty|Ross-shire|Roxburghshire|Selkirkshire|Shetland|Stirlingshire|Sutherland|Soke of Peterborough|Rutland|Shropshire|Somerset|South Glamorgan|South Humberside|South Yorkshire|Staffordshite|Suffolk|Surrey|Sussex|Tyne and Wear|Tyrone|Warwickshire|West Glamorgan|West Lothian|West Midlands|Westmorland|West Suffolk|West Sussex|West Yorkshire|Wigtownshire|Wiltshire|Worcestershire|Yorkshire";
aStates[238]="|Artigas|Canelones|Cerro Largo|Colonia|Durazno|Flores|Florida|Lavalleja|Maldonado|Montevideo|Paysandu|Rio Negro|Rivera|Rocha|Salto|San Jose|Soriano|Tacuarembo|Treinta y Tres";
aStates[239]="|Alabama|Alaska|Arizona|Arkansas|California|Colorado|Connecticut|Delaware|District of Columbia|Florida|Georgia|Hawaii|Idaho|Illinois|Indiana|Iowa|Kansas|Kentucky|Louisiana|Maine|Maryland|Massachusetts|Michigan|Minnesota|Mississippi|Missouri|Montana|Nebraska|Nevada|New Hampshire|New Jersey|New Mexico|New York|North Carolina|North Dakota|Ohio|Oklahoma|Oregon|Pennsylvania|Rhode Island|South Carolina|South Dakota|Tennessee|Texas|Utah|Vermont|Virginia|Washington|West Virginia|Wisconsin|Wyoming";
aStates[240]="|Andijon Wiloyati|Bukhoro Wiloyati|Farghona Wiloyati|Jizzakh Wiloyati|Khorazm Wiloyati (Urganch)|Namangan Wiloyati|Nawoiy Wiloyati|Qashqadaryo Wiloyati (Qarshi)|Qoraqalpoghiston (Nukus)|Samarqand Wiloyati|Sirdaryo Wiloyati (Guliston)|Surkhondaryo Wiloyati (Termiz)|Toshkent Shahri|Toshkent Wiloyati";
diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po
index 45bc4148c..25e64d481 100644
--- a/view/lang/C/messages.po
+++ b/view/lang/C/messages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2023.09-dev\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-06-18 17:33+0000\n"
+"POT-Creation-Date: 2023-06-18 17:38+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME