diff --git a/database.sql b/database.sql index 74b7552c3..7305e65d2 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2023.09-dev (Giant Rhubarb) --- DB_UPDATE_VERSION 1524 +-- DB_UPDATE_VERSION 1525 -- ------------------------------------------ @@ -1586,7 +1586,7 @@ CREATE TABLE IF NOT EXISTS `profile` ( `profile-name` varchar(255) COMMENT 'Deprecated', `is-default` boolean COMMENT 'Deprecated', `hide-friends` boolean NOT NULL DEFAULT '0' COMMENT 'Hide friend list from viewers of this profile', - `name` varchar(255) NOT NULL DEFAULT '' COMMENT '', + `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Unused in favor of user.username', `pdesc` varchar(255) COMMENT 'Deprecated', `dob` varchar(32) NOT NULL DEFAULT '0000-00-00' COMMENT 'Day of birth', `address` varchar(255) NOT NULL DEFAULT '' COMMENT '', diff --git a/doc/database/db_profile.md b/doc/database/db_profile.md index ec47b94ec..c4a8b0170 100644 --- a/doc/database/db_profile.md +++ b/doc/database/db_profile.md @@ -13,7 +13,7 @@ Fields | profile-name | Deprecated | varchar(255) | YES | | NULL | | | is-default | Deprecated | boolean | YES | | NULL | | | hide-friends | Hide friend list from viewers of this profile | boolean | NO | | 0 | | -| name | | varchar(255) | NO | | | | +| name | Unused in favor of user.username | varchar(255) | NO | | | | | pdesc | Deprecated | varchar(255) | YES | | NULL | | | dob | Day of birth | varchar(32) | NO | | 0000-00-00 | | | address | | varchar(255) | NO | | | | diff --git a/src/Model/Contact.php b/src/Model/Contact.php index d91abe9bc..35ca4e49e 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -788,10 +788,10 @@ class Contact /** * Updates the self-contact for the provided user id * - * @param int $uid - * @param bool $update_avatar Force the avatar update + * @param int $uid + * @param bool $update_avatar Force the avatar update * @return bool "true" if updated - * @throws HTTPException\InternalServerErrorException + * @throws \Exception */ public static function updateSelfFromUserID(int $uid, bool $update_avatar = false): bool { diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 0602df10a..c1a350673 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -37,6 +37,7 @@ use Friendica\DI; use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPException; +use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Protocol\Activity; use Friendica\Protocol\Diaspora; use Friendica\Security\PermissionSet\Entity\PermissionSet; @@ -93,10 +94,11 @@ class Profile /** * Update a profile entry and distribute the changes if needed * - * @param array $fields Profile fields to update - * @param integer $uid User id + * @param array $fields Profile fields to update + * @param integer $uid User id * * @return boolean Whether update was successful + * @throws \Exception */ public static function update(array $fields, int $uid): bool { @@ -116,10 +118,6 @@ class Profile return false; } - if ($old_owner['name'] != $owner['name']) { - User::update(['username' => $owner['name']], $uid); - } - $profile_fields = ['postal-code', 'dob', 'prv_keywords', 'homepage']; foreach ($profile_fields as $field) { if ($old_owner[$field] != $owner[$field]) { diff --git a/src/Model/User.php b/src/Model/User.php index 18da3e956..af7a81a15 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -37,6 +37,7 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Module; use Friendica\Network\HTTPClient\Client\HttpClientAccept; +use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Security\TwoFactor\Model\AppSpecificPassword; use Friendica\Network\HTTPException; use Friendica\Object\Image; @@ -1328,33 +1329,18 @@ class User /** * Update a user entry and distribute the changes if needed * - * @param array $fields + * @param array $fields * @param integer $uid * @return boolean + * @throws Exception */ public static function update(array $fields, int $uid): bool { - $old_owner = self::getOwnerDataById($uid); - if (empty($old_owner)) { - return false; - } - if (!DBA::update('user', $fields, ['uid' => $uid])) { return false; } - $update = Contact::updateSelfFromUserID($uid); - - $owner = self::getOwnerDataById($uid); - if (empty($owner)) { - return false; - } - - if ($old_owner['name'] != $owner['name']) { - Profile::update(['name' => $owner['name']], $uid); - } - - if ($update) { + if (Contact::updateSelfFromUserID($uid)) { Profile::publishUpdate($uid); } diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php index 1039b92e2..8ff00addb 100644 --- a/src/Module/Settings/Account.php +++ b/src/Module/Settings/Account.php @@ -573,7 +573,7 @@ class Account extends BaseSettings '$delete_openid' => ['delete_openid', DI::l10n()->t('Delete OpenID URL'), false, ''], '$h_basic' => DI::l10n()->t('Basic Settings'), - '$username' => ['username', DI::l10n()->t('Full Name:'), $username, '', false, 'autocomplete="off"'], + '$username' => ['username', DI::l10n()->t('Display name:'), $username, '', false, 'autocomplete="off"'], '$email' => ['email', DI::l10n()->t('Email Address:'), $email, '', '', 'autocomplete="off"', 'email'], '$timezone' => ['timezone_select', DI::l10n()->t('Your Timezone:'), Temporal::getTimezoneSelect($timezone), ''], '$language' => ['language', DI::l10n()->t('Your Language:'), $language, DI::l10n()->t('Set the language we use to show you friendica interface and to send you emails'), $lang_choices], diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index c8b27e394..38d816833 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -21,43 +21,75 @@ namespace Friendica\Module\Settings\Profile; +use Friendica\App; use Friendica\Core\ACL; use Friendica\Core\Hook; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\Theme; use Friendica\Database\DBA; -use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Profile; -use Friendica\Profile\ProfileField\Collection\ProfileFields; -use Friendica\Profile\ProfileField\Entity\ProfileField; +use Friendica\Module\Response; +use Friendica\Navigation\SystemMessages; +use Friendica\Profile\ProfileField; use Friendica\Model\User; use Friendica\Module\BaseSettings; use Friendica\Module\Security\Login; use Friendica\Network\HTTPException; +use Friendica\Security\PermissionSet; +use Friendica\Util\ACLFormatter; use Friendica\Util\DateTimeFormat; +use Friendica\Util\Profiler; use Friendica\Util\Temporal; use Friendica\Core\Worker; +use Psr\Log\LoggerInterface; class Index extends BaseSettings { + /** @var ProfileField\Repository\ProfileField */ + private $profileFieldRepo; + /** @var ProfileField\Factory\ProfileField */ + private $profileFieldFactory; + /** @var SystemMessages */ + private $systemMessages; + /** @var PermissionSet\Repository\PermissionSet */ + private $permissionSetRepo; + /** @var PermissionSet\Factory\PermissionSet */ + private $permissionSetFactory; + /** @var ACLFormatter */ + private $aclFormatter; + + public function __construct(ACLFormatter $aclFormatter, PermissionSet\Factory\PermissionSet $permissionSetFactory, PermissionSet\Repository\PermissionSet $permissionSetRepo, SystemMessages $systemMessages, ProfileField\Factory\ProfileField $profileFieldFactory, ProfileField\Repository\ProfileField $profileFieldRepo, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + { + parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->profileFieldRepo = $profileFieldRepo; + $this->profileFieldFactory = $profileFieldFactory; + $this->systemMessages = $systemMessages; + $this->permissionSetRepo = $permissionSetRepo; + $this->permissionSetFactory = $permissionSetFactory; + $this->aclFormatter = $aclFormatter; + } + protected function post(array $request = []) { - if (!DI::userSession()->getLocalUserId()) { + if (!$this->session->getLocalUserId()) { return; } - $profile = Profile::getByUID(DI::userSession()->getLocalUserId()); - if (!DBA::isResult($profile)) { + $profile = Profile::getByUID($this->session->getLocalUserId()); + if (!$profile) { return; } self::checkFormSecurityTokenRedirectOnError('/settings/profile', 'settings_profile'); - Hook::callAll('profile_post', $_POST); + Hook::callAll('profile_post', $request); - $dob = trim($_POST['dob'] ?? ''); + $dob = trim($request['dob'] ?? ''); if ($dob && !in_array($dob, ['0000-00-00', DBA::NULL_DATE])) { $y = substr($dob, 0, 4); @@ -79,39 +111,40 @@ class Index extends BaseSettings } } - $name = trim($_POST['name'] ?? ''); - if (!strlen($name)) { - DI::sysmsg()->addNotice(DI::l10n()->t('Profile Name is required.')); + $username = trim($request['username'] ?? ''); + if (!$username) { + $this->systemMessages->addNotice($this->t('Display Name is required.')); return; } - $about = trim($_POST['about']); - $address = trim($_POST['address']); - $locality = trim($_POST['locality']); - $region = trim($_POST['region']); - $postal_code = trim($_POST['postal_code']); - $country_name = trim($_POST['country_name']); - $pub_keywords = self::cleanKeywords(trim($_POST['pub_keywords'])); - $prv_keywords = self::cleanKeywords(trim($_POST['prv_keywords'])); - $xmpp = trim($_POST['xmpp']); - $matrix = trim($_POST['matrix']); - $homepage = trim($_POST['homepage']); + $about = trim($request['about']); + $address = trim($request['address']); + $locality = trim($request['locality']); + $region = trim($request['region']); + $postal_code = trim($request['postal_code']); + $country_name = trim($request['country_name']); + $pub_keywords = self::cleanKeywords(trim($request['pub_keywords'])); + $prv_keywords = self::cleanKeywords(trim($request['prv_keywords'])); + $xmpp = trim($request['xmpp']); + $matrix = trim($request['matrix']); + $homepage = trim($request['homepage']); if ((strpos($homepage, 'http') !== 0) && (strlen($homepage))) { // neither http nor https in URL, add them $homepage = 'http://' . $homepage; } - $profileFieldsNew = self::getProfileFieldsFromInput( - DI::userSession()->getLocalUserId(), - $_REQUEST['profile_field'], - $_REQUEST['profile_field_order'] + $profileFieldsNew = $this->getProfileFieldsFromInput( + $this->session->getLocalUserId(), + $request['profile_field'], + $request['profile_field_order'] ); - DI::profileField()->saveCollectionForUser(DI::userSession()->getLocalUserId(), $profileFieldsNew); + $this->profileFieldRepo->saveCollectionForUser($this->session->getLocalUserId(), $profileFieldsNew); + + User::update(['username' => $username], $this->session->getLocalUserId()); $result = Profile::update( [ - 'name' => $name, 'about' => $about, 'dob' => $dob, 'address' => $address, @@ -125,23 +158,23 @@ class Index extends BaseSettings 'pub_keywords' => $pub_keywords, 'prv_keywords' => $prv_keywords, ], - DI::userSession()->getLocalUserId() + $this->session->getLocalUserId() ); - Worker::add(Worker::PRIORITY_MEDIUM, 'CheckRelMeProfileLink', DI::userSession()->getLocalUserId()); + Worker::add(Worker::PRIORITY_MEDIUM, 'CheckRelMeProfileLink', $this->session->getLocalUserId()); if (!$result) { - DI::sysmsg()->addNotice(DI::l10n()->t('Profile couldn\'t be updated.')); + $this->systemMessages->addNotice($this->t("Profile couldn't be updated.")); return; } - DI::baseUrl()->redirect('settings/profile'); + $this->baseUrl->redirect('settings/profile'); } protected function content(array $request = []): string { - if (!DI::userSession()->getLocalUserId()) { - DI::sysmsg()->addNotice(DI::l10n()->t('You must be logged in to use this module')); + if (!$this->session->getLocalUserId()) { + $this->systemMessages->addNotice($this->t('You must be logged in to use this module')); return Login::form(); } @@ -149,147 +182,145 @@ class Index extends BaseSettings $o = ''; - $profile = User::getOwnerDataById(DI::userSession()->getLocalUserId()); - if (!DBA::isResult($profile)) { + $owner = User::getOwnerDataById($this->session->getLocalUserId()); + if (!$owner) { throw new HTTPException\NotFoundException(); } - $a = DI::app(); - - DI::page()->registerFooterScript('view/asset/es-jquery-sortable/source/js/jquery-sortable-min.js'); - DI::page()->registerFooterScript(Theme::getPathForFile('js/module/settings/profile/index.js')); + $this->page->registerFooterScript('view/asset/es-jquery-sortable/source/js/jquery-sortable-min.js'); + $this->page->registerFooterScript(Theme::getPathForFile('js/module/settings/profile/index.js')); $custom_fields = []; - $profileFields = DI::profileField()->selectByUserId(DI::userSession()->getLocalUserId()); + $profileFields = $this->profileFieldRepo->selectByUserId($this->session->getLocalUserId()); foreach ($profileFields as $profileField) { - /** @var ProfileField $profileField */ $defaultPermissions = $profileField->permissionSet->withAllowedContacts( Contact::pruneUnavailable($profileField->permissionSet->allow_cid) ); $custom_fields[] = [ - 'id' => $profileField->id, + 'id' => $profileField->id, 'legend' => $profileField->label, 'fields' => [ - 'label' => ['profile_field[' . $profileField->id . '][label]', DI::l10n()->t('Label:'), $profileField->label], - 'value' => ['profile_field[' . $profileField->id . '][value]', DI::l10n()->t('Value:'), $profileField->value], - 'acl' => ACL::getFullSelectorHTML( - DI::page(), - $a->getLoggedInUserId(), + 'label' => ['profile_field[' . $profileField->id . '][label]', $this->t('Label:'), $profileField->label], + 'value' => ['profile_field[' . $profileField->id . '][value]', $this->t('Value:'), $profileField->value], + 'acl' => ACL::getFullSelectorHTML( + $this->page, + $this->session->getLocalUserId(), false, $defaultPermissions->toArray(), ['network' => Protocol::DFRN], 'profile_field[' . $profileField->id . ']' ), ], - 'permissions' => DI::l10n()->t('Field Permissions'), - 'permdesc' => DI::l10n()->t("(click to open/close)"), + + 'permissions' => $this->t('Field Permissions'), + 'permdesc' => $this->t("(click to open/close)"), ]; - }; + } $custom_fields[] = [ - 'id' => 'new', - 'legend' => DI::l10n()->t('Add a new profile field'), + 'id' => 'new', + 'legend' => $this->t('Add a new profile field'), 'fields' => [ - 'label' => ['profile_field[new][label]', DI::l10n()->t('Label:')], - 'value' => ['profile_field[new][value]', DI::l10n()->t('Value:')], - 'acl' => ACL::getFullSelectorHTML( - DI::page(), - $a->getLoggedInUserId(), + 'label' => ['profile_field[new][label]', $this->t('Label:')], + 'value' => ['profile_field[new][value]', $this->t('Value:')], + 'acl' => ACL::getFullSelectorHTML( + $this->page, + $this->session->getLocalUserId(), false, ['allow_cid' => []], ['network' => Protocol::DFRN], 'profile_field[new]' ), ], - 'permissions' => DI::l10n()->t('Field Permissions'), - 'permdesc' => DI::l10n()->t("(click to open/close)"), + + 'permissions' => $this->t('Field Permissions'), + 'permdesc' => $this->t("(click to open/close)"), ]; - DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('settings/profile/index_head.tpl'), [ - ]); + $this->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('settings/profile/index_head.tpl')); - $personal_account = ($profile['account-type'] != User::ACCOUNT_TYPE_COMMUNITY); + $personal_account = ($owner['account-type'] != User::ACCOUNT_TYPE_COMMUNITY); - if ($profile['homepage_verified']) { - $homepage_help_text = DI::l10n()->t('The homepage is verified. A rel="me" link back to your Friendica profile page was found on the homepage.'); + if ($owner['homepage_verified']) { + $homepage_help_text = $this->t('The homepage is verified. A rel="me" link back to your Friendica profile page was found on the homepage.'); } else { - $homepage_help_text = DI::l10n()->t('To verify your homepage, add a rel="me" link to it, pointing to your profile URL (%s).', $profile['url']); + $homepage_help_text = $this->t('To verify your homepage, add a rel="me" link to it, pointing to your profile URL (%s).', $owner['url']); } $tpl = Renderer::getMarkupTemplate('settings/profile/index.tpl'); $o .= Renderer::replaceMacros($tpl, [ - '$personal_account' => $personal_account, - - '$form_security_token' => self::getFormSecurityToken('settings_profile'), - '$form_security_token_photo' => self::getFormSecurityToken('settings_profile_photo'), - - '$profile_action' => DI::l10n()->t('Profile Actions'), - '$banner' => DI::l10n()->t('Edit Profile Details'), - '$submit' => DI::l10n()->t('Submit'), - '$profpic' => DI::l10n()->t('Change Profile Photo'), - '$profpiclink' => '/profile/' . $profile['nickname'] . '/photos', - '$viewprof' => DI::l10n()->t('View Profile'), - - '$lbl_personal_section' => DI::l10n()->t('Personal'), - '$lbl_picture_section' => DI::l10n()->t('Profile picture'), - '$lbl_location_section' => DI::l10n()->t('Location'), - '$lbl_miscellaneous_section' => DI::l10n()->t('Miscellaneous'), - '$lbl_custom_fields_section' => DI::l10n()->t('Custom Profile Fields'), - - '$lbl_profile_photo' => DI::l10n()->t('Upload Profile Photo'), - - '$baseurl' => DI::baseUrl(), - '$nickname' => $profile['nickname'], - '$name' => ['name', DI::l10n()->t('Display name:'), $profile['name']], - '$about' => ['about', DI::l10n()->t('Description:'), $profile['about']], - '$dob' => Temporal::getDateofBirthField($profile['dob'], $profile['timezone']), - '$address' => ['address', DI::l10n()->t('Street Address:'), $profile['address']], - '$locality' => ['locality', DI::l10n()->t('Locality/City:'), $profile['locality']], - '$region' => ['region', DI::l10n()->t('Region/State:'), $profile['region']], - '$postal_code' => ['postal_code', DI::l10n()->t('Postal/Zip Code:'), $profile['postal-code']], - '$country_name' => ['country_name', DI::l10n()->t('Country:'), $profile['country-name']], - '$age' => ((intval($profile['dob'])) ? '(' . DI::l10n()->t('Age: ') . DI::l10n()->tt('%d year old', '%d years old', Temporal::getAgeByTimezone($profile['dob'], $profile['timezone'])) . ')' : ''), - '$xmpp' => ['xmpp', DI::l10n()->t('XMPP (Jabber) address:'), $profile['xmpp'], DI::l10n()->t('The XMPP address will be published so that people can follow you there.')], - '$matrix' => ['matrix', DI::l10n()->t('Matrix (Element) address:'), $profile['matrix'], DI::l10n()->t('The Matrix address will be published so that people can follow you there.')], - '$homepage' => ['homepage', DI::l10n()->t('Homepage URL:'), $profile['homepage'], $homepage_help_text], - '$pub_keywords' => ['pub_keywords', DI::l10n()->t('Public Keywords:'), $profile['pub_keywords'], DI::l10n()->t('(Used for suggesting potential friends, can be seen by others)')], - '$prv_keywords' => ['prv_keywords', DI::l10n()->t('Private Keywords:'), $profile['prv_keywords'], DI::l10n()->t('(Used for searching profiles, never shown to others)')], - '$custom_fields_description' => DI::l10n()->t("

Custom fields appear on your profile page.

+ '$l10n' => [ + 'profile_action' => $this->t('Profile Actions'), + 'banner' => $this->t('Edit Profile Details'), + 'submit' => $this->t('Submit'), + 'profpic' => $this->t('Change Profile Photo'), + 'viewprof' => $this->t('View Profile'), + 'personal_section' => $this->t('Personal'), + 'picture_section' => $this->t('Profile picture'), + 'location_section' => $this->t('Location'), + 'miscellaneous_section' => $this->t('Miscellaneous'), + 'custom_fields_section' => $this->t('Custom Profile Fields'), + 'profile_photo' => $this->t('Upload Profile Photo'), + 'custom_fields_description' => $this->t('

Custom fields appear on your profile page.

You can use BBCodes in the field values.

Reorder by dragging the field title.

Empty the label field to remove a custom field.

-

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected circles.

", - 'profile/' . $profile['nickname'] . '/profile' - ), +

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected circles.

', + 'profile/' . $owner['nickname'] . '/profile' + ), + ], + + '$personal_account' => $personal_account, + + '$form_security_token' => self::getFormSecurityToken('settings_profile'), + '$form_security_token_photo' => self::getFormSecurityToken('settings_profile_photo'), + + '$profpiclink' => '/profile/' . $owner['nickname'] . '/photos', + + '$nickname' => $owner['nickname'], + '$username' => ['username', $this->t('Display name:'), $owner['name']], + '$about' => ['about', $this->t('Description:'), $owner['about']], + '$dob' => Temporal::getDateofBirthField($owner['dob'], $owner['timezone']), + '$address' => ['address', $this->t('Street Address:'), $owner['address']], + '$locality' => ['locality', $this->t('Locality/City:'), $owner['locality']], + '$region' => ['region', $this->t('Region/State:'), $owner['region']], + '$postal_code' => ['postal_code', $this->t('Postal/Zip Code:'), $owner['postal-code']], + '$country_name' => ['country_name', $this->t('Country:'), $owner['country-name']], + '$age' => ((intval($owner['dob'])) ? '(' . $this->t('Age: ') . $this->tt('%d year old', '%d years old', Temporal::getAgeByTimezone($owner['dob'], $owner['timezone'])) . ')' : ''), + '$xmpp' => ['xmpp', $this->t('XMPP (Jabber) address:'), $owner['xmpp'], $this->t('The XMPP address will be published so that people can follow you there.')], + '$matrix' => ['matrix', $this->t('Matrix (Element) address:'), $owner['matrix'], $this->t('The Matrix address will be published so that people can follow you there.')], + '$homepage' => ['homepage', $this->t('Homepage URL:'), $owner['homepage'], $homepage_help_text], + '$pub_keywords' => ['pub_keywords', $this->t('Public Keywords:'), $owner['pub_keywords'], $this->t('(Used for suggesting potential friends, can be seen by others)')], + '$prv_keywords' => ['prv_keywords', $this->t('Private Keywords:'), $owner['prv_keywords'], $this->t('(Used for searching profiles, never shown to others)')], '$custom_fields' => $custom_fields, ]); - $arr = ['profile' => $profile, 'entry' => $o]; + $arr = ['profile' => $owner, 'entry' => $o]; Hook::callAll('profile_edit', $arr); return $o; } - private static function getProfileFieldsFromInput(int $uid, array $profileFieldInputs, array $profileFieldOrder): ProfileFields + private function getProfileFieldsFromInput(int $uid, array $profileFieldInputs, array $profileFieldOrder): ProfileField\Collection\ProfileFields { - $profileFields = new ProfileFields(); + $profileFields = new ProfileField\Collection\ProfileFields(); // Returns an associative array of id => order values $profileFieldOrder = array_flip($profileFieldOrder); // Creation of the new field if (!empty($profileFieldInputs['new']['label'])) { - $permissionSet = DI::permissionSet()->selectOrCreate(DI::permissionSetFactory()->createFromString( + $permissionSet = $this->permissionSetRepo->selectOrCreate($this->permissionSetFactory->createFromString( $uid, - DI::aclFormatter()->toString($profileFieldInputs['new']['contact_allow'] ?? ''), - DI::aclFormatter()->toString($profileFieldInputs['new']['circle_allow'] ?? ''), - DI::aclFormatter()->toString($profileFieldInputs['new']['contact_deny'] ?? ''), - DI::aclFormatter()->toString($profileFieldInputs['new']['circle_deny'] ?? '') + $this->aclFormatter->toString($profileFieldInputs['new']['contact_allow'] ?? ''), + $this->aclFormatter->toString($profileFieldInputs['new']['circle_allow'] ?? ''), + $this->aclFormatter->toString($profileFieldInputs['new']['contact_deny'] ?? ''), + $this->aclFormatter->toString($profileFieldInputs['new']['circle_deny'] ?? '') )); - $profileFields->append(DI::profileFieldFactory()->createFromValues( + $profileFields->append($this->profileFieldFactory->createFromValues( $uid, $profileFieldOrder['new'], $profileFieldInputs['new']['label'], @@ -302,15 +333,15 @@ class Index extends BaseSettings unset($profileFieldOrder['new']); foreach ($profileFieldInputs as $id => $profileFieldInput) { - $permissionSet = DI::permissionSet()->selectOrCreate(DI::permissionSetFactory()->createFromString( + $permissionSet = $this->permissionSetRepo->selectOrCreate($this->permissionSetFactory->createFromString( $uid, - DI::aclFormatter()->toString($profileFieldInput['contact_allow'] ?? ''), - DI::aclFormatter()->toString($profileFieldInput['circle_allow'] ?? ''), - DI::aclFormatter()->toString($profileFieldInput['contact_deny'] ?? ''), - DI::aclFormatter()->toString($profileFieldInput['circle_deny'] ?? '') + $this->aclFormatter->toString($profileFieldInput['contact_allow'] ?? ''), + $this->aclFormatter->toString($profileFieldInput['circle_allow'] ?? ''), + $this->aclFormatter->toString($profileFieldInput['contact_deny'] ?? ''), + $this->aclFormatter->toString($profileFieldInput['circle_deny'] ?? '') )); - $profileFields->append(DI::profileFieldFactory()->createFromValues( + $profileFields->append($this->profileFieldFactory->createFromValues( $uid, $profileFieldOrder[$id], $profileFieldInput['label'], @@ -322,22 +353,20 @@ class Index extends BaseSettings return $profileFields; } - private static function cleanKeywords($keywords) + private static function cleanKeywords($keywords): string { $keywords = str_replace(',', ' ', $keywords); $keywords = explode(' ', $keywords); $cleaned = []; foreach ($keywords as $keyword) { - $keyword = trim(strtolower($keyword)); + $keyword = trim($keyword); $keyword = trim($keyword, '#'); if ($keyword != '') { $cleaned[] = $keyword; } } - $keywords = implode(', ', $cleaned); - - return $keywords; + return implode(', ', $cleaned); } } diff --git a/src/Security/PermissionSet/Repository/PermissionSet.php b/src/Security/PermissionSet/Repository/PermissionSet.php index 58cf6e42f..5abfb9305 100644 --- a/src/Security/PermissionSet/Repository/PermissionSet.php +++ b/src/Security/PermissionSet/Repository/PermissionSet.php @@ -211,7 +211,7 @@ class PermissionSet extends BaseRepository } /** - * Selects or creates a PermissionSet based on it's fields + * Selects or creates a PermissionSet based on its fields * * @param Entity\PermissionSet $permissionSet * diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 970aeb9cc..c7575528e 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -56,7 +56,7 @@ use Friendica\Database\DBA; // This file is required several times during the test in DbaDefinition which justifies this condition if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1524); + define('DB_UPDATE_VERSION', 1525); } return [ @@ -1583,7 +1583,7 @@ return [ "profile-name" => ["type" => "varchar(255)", "comment" => "Deprecated"], "is-default" => ["type" => "boolean", "comment" => "Deprecated"], "hide-friends" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide friend list from viewers of this profile"], - "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], + "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Unused in favor of user.username"], "pdesc" => ["type" => "varchar(255)", "comment" => "Deprecated"], "dob" => ["type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00", "comment" => "Day of birth"], "address" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], diff --git a/update.php b/update.php index 980ec721a..78295921a 100644 --- a/update.php +++ b/update.php @@ -1349,3 +1349,30 @@ function update_1524(): int return Update::SUCCESS; } + +function update_1525(): int +{ + // Use expected value for user.username + if (!DBA::e('UPDATE `user` u + JOIN `profile` p + ON p.`uid` = u.`uid` + SET u.`username` = p.`name`')) { + return Update::FAILED; + } + + // Blank out deprecated field profile.name to avoid future confusion + if (!DBA::e('UPDATE `profile` p + SET p.`name` = ""')) { + return Update::FAILED; + } + + // Update users' self-contact name if needed + if (!DBA::e('UPDATE `contact` c + JOIN `user` u + ON u.`uid` = c.`uid` AND c.`self` = 1 + SET c.`name` = u.`username`')) { + return Update::FAILED; + } + + return Update::SUCCESS; +} diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 7a49e009d..2d5faec2d 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-08-10 21:16+0000\n" +"POT-Creation-Date: 2023-08-11 01:11+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,13 +38,13 @@ msgstr "" msgid "Empty post discarded." msgstr "" -#: mod/item.php:427 src/Module/Admin/Themes/Details.php:39 +#: mod/item.php:428 src/Module/Admin/Themes/Details.php:39 #: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42 #: src/Module/Debug/ItemBody.php:57 src/Module/Item/Feed.php:80 msgid "Item not found." msgstr "" -#: mod/item.php:451 mod/message.php:67 mod/message.php:113 mod/notes.php:45 +#: mod/item.php:452 mod/message.php:67 mod/message.php:113 mod/notes.php:45 #: mod/photos.php:152 mod/photos.php:670 src/Model/Event.php:520 #: src/Module/Attach.php:55 src/Module/BaseApi.php:99 #: src/Module/BaseNotifications.php:98 src/Module/BaseSettings.php:52 @@ -315,7 +315,7 @@ msgstr "" #: src/Module/Moderation/Report/Create.php:211 #: src/Module/Moderation/Report/Create.php:263 #: src/Module/Profile/Profile.php:274 src/Module/Profile/UnkMail.php:155 -#: src/Module/Settings/Profile/Index.php:230 src/Object/Post.php:1087 +#: src/Module/Settings/Profile/Index.php:257 src/Object/Post.php:1087 #: view/theme/duepuntozero/config.php:85 view/theme/frio/config.php:171 #: view/theme/quattro/config.php:87 view/theme/vier/config.php:135 msgid "Submit" @@ -388,7 +388,7 @@ msgid "Save" msgstr "" #: mod/photos.php:67 mod/photos.php:132 mod/photos.php:578 -#: src/Model/Event.php:512 src/Model/Profile.php:234 +#: src/Model/Event.php:512 src/Model/Profile.php:232 #: src/Module/Calendar/Export.php:74 src/Module/Calendar/Show.php:74 #: src/Module/DFRN/Poll.php:43 src/Module/Feed.php:65 src/Module/HCard.php:51 #: src/Module/Profile/Common.php:62 src/Module/Profile/Common.php:71 @@ -779,17 +779,17 @@ msgstr "" msgid "All contacts" msgstr "" -#: src/BaseModule.php:433 src/Content/Widget.php:243 src/Core/ACL.php:195 +#: src/BaseModule.php:433 src/Content/Widget.php:239 src/Core/ACL.php:195 #: src/Module/Contact.php:415 src/Module/PermissionTooltip.php:127 #: src/Module/PermissionTooltip.php:149 msgid "Followers" msgstr "" -#: src/BaseModule.php:438 src/Content/Widget.php:244 src/Module/Contact.php:418 +#: src/BaseModule.php:438 src/Content/Widget.php:240 src/Module/Contact.php:418 msgid "Following" msgstr "" -#: src/BaseModule.php:443 src/Content/Widget.php:245 src/Module/Contact.php:421 +#: src/BaseModule.php:443 src/Content/Widget.php:241 src/Module/Contact.php:421 msgid "Mutual friends" msgstr "" @@ -943,7 +943,7 @@ msgstr "" msgid "Enter user nickname: " msgstr "" -#: src/Console/User.php:182 src/Model/User.php:692 +#: src/Console/User.php:182 src/Model/User.php:693 #: src/Module/Api/Twitter/ContactEndpoint.php:74 #: src/Module/Moderation/Users/Active.php:71 #: src/Module/Moderation/Users/Blocked.php:71 @@ -1364,7 +1364,7 @@ msgid "Public post" msgstr "" #: src/Content/Conversation.php:417 src/Content/Widget/VCard.php:120 -#: src/Model/Profile.php:469 src/Module/Admin/Logs/View.php:92 +#: src/Model/Profile.php:467 src/Module/Admin/Logs/View.php:92 #: src/Module/Post/Edit.php:181 msgid "Message" msgstr "" @@ -1607,8 +1607,8 @@ msgid "" msgstr "" #: src/Content/GroupManager.php:152 src/Content/Nav.php:276 -#: src/Content/Text/HTML.php:880 src/Content/Widget.php:541 -#: src/Model/User.php:1254 +#: src/Content/Text/HTML.php:880 src/Content/Widget.php:537 +#: src/Model/User.php:1255 msgid "Groups" msgstr "" @@ -1616,12 +1616,12 @@ msgstr "" msgid "External link to group" msgstr "" -#: src/Content/GroupManager.php:158 src/Content/Widget.php:516 +#: src/Content/GroupManager.php:158 src/Content/Widget.php:512 msgid "show less" msgstr "" -#: src/Content/GroupManager.php:159 src/Content/Widget.php:414 -#: src/Content/Widget.php:517 +#: src/Content/GroupManager.php:159 src/Content/Widget.php:410 +#: src/Content/Widget.php:513 msgid "show more" msgstr "" @@ -1629,7 +1629,7 @@ msgstr "" msgid "Create new group" msgstr "" -#: src/Content/Item.php:329 src/Model/Item.php:2993 +#: src/Content/Item.php:329 src/Model/Item.php:2998 msgid "event" msgstr "" @@ -1637,7 +1637,7 @@ msgstr "" msgid "status" msgstr "" -#: src/Content/Item.php:338 src/Model/Item.php:2995 +#: src/Content/Item.php:338 src/Model/Item.php:3000 #: src/Module/Post/Tag/Add.php:123 msgid "photo" msgstr "" @@ -1651,31 +1651,31 @@ msgstr "" msgid "Follow Thread" msgstr "" -#: src/Content/Item.php:422 src/Model/Contact.php:1205 +#: src/Content/Item.php:422 src/Model/Contact.php:1210 msgid "View Status" msgstr "" -#: src/Content/Item.php:423 src/Content/Item.php:443 src/Model/Contact.php:1154 -#: src/Model/Contact.php:1197 src/Model/Contact.php:1206 -#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:233 +#: src/Content/Item.php:423 src/Content/Item.php:443 src/Model/Contact.php:1159 +#: src/Model/Contact.php:1202 src/Model/Contact.php:1211 +#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:259 msgid "View Profile" msgstr "" -#: src/Content/Item.php:424 src/Model/Contact.php:1207 +#: src/Content/Item.php:424 src/Model/Contact.php:1212 msgid "View Photos" msgstr "" -#: src/Content/Item.php:425 src/Model/Contact.php:1198 -#: src/Model/Contact.php:1208 +#: src/Content/Item.php:425 src/Model/Contact.php:1203 +#: src/Model/Contact.php:1213 msgid "Network Posts" msgstr "" -#: src/Content/Item.php:426 src/Model/Contact.php:1199 -#: src/Model/Contact.php:1209 +#: src/Content/Item.php:426 src/Model/Contact.php:1204 +#: src/Model/Contact.php:1214 msgid "View Contact" msgstr "" -#: src/Content/Item.php:427 src/Model/Contact.php:1210 +#: src/Content/Item.php:427 src/Model/Contact.php:1215 msgid "Send PM" msgstr "" @@ -1705,7 +1705,7 @@ msgid "Languages" msgstr "" #: src/Content/Item.php:440 src/Content/Widget.php:80 -#: src/Model/Contact.php:1200 src/Model/Contact.php:1211 +#: src/Model/Contact.php:1205 src/Model/Contact.php:1216 #: src/Module/Contact/Follow.php:167 view/theme/vier/theme.php:195 msgid "Connect/Follow" msgstr "" @@ -2043,8 +2043,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:939 src/Model/Item.php:3735 -#: src/Model/Item.php:3741 src/Model/Item.php:3742 +#: src/Content/Text/BBCode.php:939 src/Model/Item.php:3740 +#: src/Model/Item.php:3746 src/Model/Item.php:3747 msgid "Link to source" msgstr "" @@ -2077,7 +2077,7 @@ msgid "The end" msgstr "" #: src/Content/Text/HTML.php:859 src/Content/Widget/VCard.php:116 -#: src/Model/Profile.php:463 src/Module/Contact/Profile.php:437 +#: src/Model/Profile.php:461 src/Module/Contact/Profile.php:437 msgid "Follow" msgstr "" @@ -2147,80 +2147,80 @@ msgstr "" msgid "Local Directory" msgstr "" -#: src/Content/Widget.php:219 src/Model/Circle.php:600 +#: src/Content/Widget.php:215 src/Model/Circle.php:600 #: src/Module/Contact.php:401 src/Module/Welcome.php:76 msgid "Circles" msgstr "" -#: src/Content/Widget.php:221 +#: src/Content/Widget.php:217 msgid "Everyone" msgstr "" -#: src/Content/Widget.php:246 src/Module/Contact.php:424 +#: src/Content/Widget.php:242 src/Module/Contact.php:424 msgid "No relationship" msgstr "" -#: src/Content/Widget.php:251 +#: src/Content/Widget.php:247 msgid "Relationships" msgstr "" -#: src/Content/Widget.php:253 src/Module/Circle.php:292 +#: src/Content/Widget.php:249 src/Module/Circle.php:292 #: src/Module/Contact.php:345 msgid "All Contacts" msgstr "" -#: src/Content/Widget.php:292 +#: src/Content/Widget.php:288 msgid "Protocols" msgstr "" -#: src/Content/Widget.php:294 +#: src/Content/Widget.php:290 msgid "All Protocols" msgstr "" -#: src/Content/Widget.php:322 +#: src/Content/Widget.php:318 msgid "Saved Folders" msgstr "" -#: src/Content/Widget.php:324 src/Content/Widget.php:355 +#: src/Content/Widget.php:320 src/Content/Widget.php:351 msgid "Everything" msgstr "" -#: src/Content/Widget.php:353 +#: src/Content/Widget.php:349 msgid "Categories" msgstr "" -#: src/Content/Widget.php:410 +#: src/Content/Widget.php:406 #, php-format msgid "%d contact in common" msgid_plural "%d contacts in common" msgstr[0] "" msgstr[1] "" -#: src/Content/Widget.php:510 +#: src/Content/Widget.php:506 msgid "Archives" msgstr "" -#: src/Content/Widget.php:518 +#: src/Content/Widget.php:514 msgid "On this date" msgstr "" -#: src/Content/Widget.php:538 +#: src/Content/Widget.php:534 msgid "Persons" msgstr "" -#: src/Content/Widget.php:539 +#: src/Content/Widget.php:535 msgid "Organisations" msgstr "" -#: src/Content/Widget.php:540 src/Model/Contact.php:1675 +#: src/Content/Widget.php:536 src/Model/Contact.php:1680 msgid "News" msgstr "" -#: src/Content/Widget.php:546 src/Module/Settings/Account.php:454 +#: src/Content/Widget.php:542 src/Module/Settings/Account.php:454 msgid "Account Types" msgstr "" -#: src/Content/Widget.php:548 src/Module/Moderation/BaseUsers.php:69 +#: src/Content/Widget.php:544 src/Module/Moderation/BaseUsers.php:69 msgid "All" msgstr "" @@ -2270,31 +2270,31 @@ msgstr[1] "" msgid "More Trending Tags" msgstr "" -#: src/Content/Widget/VCard.php:109 src/Model/Profile.php:378 +#: src/Content/Widget/VCard.php:109 src/Model/Profile.php:376 #: src/Module/Contact/Profile.php:381 src/Module/Profile/Profile.php:199 msgid "XMPP:" msgstr "" -#: src/Content/Widget/VCard.php:110 src/Model/Profile.php:379 +#: src/Content/Widget/VCard.php:110 src/Model/Profile.php:377 #: src/Module/Contact/Profile.php:383 src/Module/Profile/Profile.php:203 msgid "Matrix:" msgstr "" #: src/Content/Widget/VCard.php:111 src/Model/Event.php:82 #: src/Model/Event.php:109 src/Model/Event.php:471 src/Model/Event.php:963 -#: src/Model/Profile.php:373 src/Module/Contact/Profile.php:379 +#: src/Model/Profile.php:371 src/Module/Contact/Profile.php:379 #: src/Module/Directory.php:147 src/Module/Notifications/Introductions.php:187 #: src/Module/Profile/Profile.php:221 msgid "Location:" msgstr "" -#: src/Content/Widget/VCard.php:114 src/Model/Profile.php:476 +#: src/Content/Widget/VCard.php:114 src/Model/Profile.php:474 #: src/Module/Notifications/Introductions.php:201 msgid "Network:" msgstr "" -#: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1201 -#: src/Model/Contact.php:1212 src/Model/Profile.php:465 +#: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1206 +#: src/Model/Contact.php:1217 src/Model/Profile.php:463 #: src/Module/Contact/Profile.php:429 msgid "Unfollow" msgstr "" @@ -3047,82 +3047,82 @@ msgstr "" msgid "Edit circles" msgstr "" -#: src/Model/Contact.php:1218 src/Module/Moderation/Users/Pending.php:102 +#: src/Model/Contact.php:1223 src/Module/Moderation/Users/Pending.php:102 #: src/Module/Notifications/Introductions.php:132 #: src/Module/Notifications/Introductions.php:204 msgid "Approve" msgstr "" -#: src/Model/Contact.php:1671 +#: src/Model/Contact.php:1676 msgid "Organisation" msgstr "" -#: src/Model/Contact.php:1679 +#: src/Model/Contact.php:1684 msgid "Group" msgstr "" -#: src/Model/Contact.php:2988 +#: src/Model/Contact.php:2993 msgid "Disallowed profile URL." msgstr "" -#: src/Model/Contact.php:2993 src/Module/Friendica.php:102 +#: src/Model/Contact.php:2998 src/Module/Friendica.php:102 msgid "Blocked domain" msgstr "" -#: src/Model/Contact.php:2998 +#: src/Model/Contact.php:3003 msgid "Connect URL missing." msgstr "" -#: src/Model/Contact.php:3007 +#: src/Model/Contact.php:3012 msgid "" "The contact could not be added. Please check the relevant network " "credentials in your Settings -> Social Networks page." msgstr "" -#: src/Model/Contact.php:3025 +#: src/Model/Contact.php:3030 #, php-format msgid "Expected network %s does not match actual network %s" msgstr "" -#: src/Model/Contact.php:3042 +#: src/Model/Contact.php:3047 msgid "The profile address specified does not provide adequate information." msgstr "" -#: src/Model/Contact.php:3044 +#: src/Model/Contact.php:3049 msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: src/Model/Contact.php:3047 +#: src/Model/Contact.php:3052 msgid "An author or name was not found." msgstr "" -#: src/Model/Contact.php:3050 +#: src/Model/Contact.php:3055 msgid "No browser URL could be matched to this address." msgstr "" -#: src/Model/Contact.php:3053 +#: src/Model/Contact.php:3058 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "" -#: src/Model/Contact.php:3054 +#: src/Model/Contact.php:3059 msgid "Use mailto: in front of address to force email check." msgstr "" -#: src/Model/Contact.php:3060 +#: src/Model/Contact.php:3065 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "" -#: src/Model/Contact.php:3065 +#: src/Model/Contact.php:3070 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "" -#: src/Model/Contact.php:3131 +#: src/Model/Contact.php:3136 msgid "Unable to retrieve contact information." msgstr "" @@ -3227,81 +3227,81 @@ msgstr "" msgid "Happy Birthday %s" msgstr "" -#: src/Model/Item.php:2056 +#: src/Model/Item.php:2057 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2997 +#: src/Model/Item.php:3002 msgid "activity" msgstr "" -#: src/Model/Item.php:2999 +#: src/Model/Item.php:3004 msgid "comment" msgstr "" -#: src/Model/Item.php:3002 src/Module/Post/Tag/Add.php:123 +#: src/Model/Item.php:3007 src/Module/Post/Tag/Add.php:123 msgid "post" msgstr "" -#: src/Model/Item.php:3172 +#: src/Model/Item.php:3177 #, php-format msgid "%s is blocked" msgstr "" -#: src/Model/Item.php:3174 +#: src/Model/Item.php:3179 #, php-format msgid "%s is ignored" msgstr "" -#: src/Model/Item.php:3176 +#: src/Model/Item.php:3181 #, php-format msgid "Content from %s is collapsed" msgstr "" -#: src/Model/Item.php:3180 +#: src/Model/Item.php:3185 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3642 +#: src/Model/Item.php:3647 msgid "bytes" msgstr "" -#: src/Model/Item.php:3673 +#: src/Model/Item.php:3678 #, php-format msgid "%2$s (%3$d%%, %1$d vote)" msgid_plural "%2$s (%3$d%%, %1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3675 +#: src/Model/Item.php:3680 #, php-format msgid "%2$s (%1$d vote)" msgid_plural "%2$s (%1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3680 +#: src/Model/Item.php:3685 #, php-format msgid "%d voter. Poll end: %s" msgid_plural "%d voters. Poll end: %s" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3682 +#: src/Model/Item.php:3687 #, php-format msgid "%d voter." msgid_plural "%d voters." msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3684 +#: src/Model/Item.php:3689 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3718 src/Model/Item.php:3719 +#: src/Model/Item.php:3723 src/Model/Item.php:3724 msgid "View on separate page" msgstr "" @@ -3309,295 +3309,295 @@ msgstr "" msgid "[no subject]" msgstr "" -#: src/Model/Photo.php:1184 src/Module/Media/Photo/Upload.php:170 +#: src/Model/Photo.php:1190 src/Module/Media/Photo/Upload.php:170 msgid "Wall Photos" msgstr "" -#: src/Model/Profile.php:361 src/Module/Profile/Profile.php:283 +#: src/Model/Profile.php:359 src/Module/Profile/Profile.php:283 #: src/Module/Profile/Profile.php:285 msgid "Edit profile" msgstr "" -#: src/Model/Profile.php:363 +#: src/Model/Profile.php:361 msgid "Change profile photo" msgstr "" -#: src/Model/Profile.php:376 src/Module/Directory.php:152 +#: src/Model/Profile.php:374 src/Module/Directory.php:152 #: src/Module/Profile/Profile.php:209 msgid "Homepage:" msgstr "" -#: src/Model/Profile.php:377 src/Module/Contact/Profile.php:385 +#: src/Model/Profile.php:375 src/Module/Contact/Profile.php:385 #: src/Module/Notifications/Introductions.php:189 msgid "About:" msgstr "" -#: src/Model/Profile.php:467 +#: src/Model/Profile.php:465 msgid "Atom feed" msgstr "" -#: src/Model/Profile.php:474 +#: src/Model/Profile.php:472 msgid "This website has been verified to belong to the same person." msgstr "" -#: src/Model/Profile.php:511 +#: src/Model/Profile.php:509 msgid "F d" msgstr "" -#: src/Model/Profile.php:575 src/Model/Profile.php:664 +#: src/Model/Profile.php:573 src/Model/Profile.php:662 msgid "[today]" msgstr "" -#: src/Model/Profile.php:584 +#: src/Model/Profile.php:582 msgid "Birthday Reminders" msgstr "" -#: src/Model/Profile.php:585 +#: src/Model/Profile.php:583 msgid "Birthdays this week:" msgstr "" -#: src/Model/Profile.php:613 +#: src/Model/Profile.php:611 msgid "g A l F d" msgstr "" -#: src/Model/Profile.php:651 +#: src/Model/Profile.php:649 msgid "[No description]" msgstr "" -#: src/Model/Profile.php:677 +#: src/Model/Profile.php:675 msgid "Event Reminders" msgstr "" -#: src/Model/Profile.php:678 +#: src/Model/Profile.php:676 msgid "Upcoming events the next 7 days:" msgstr "" -#: src/Model/Profile.php:875 +#: src/Model/Profile.php:873 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "" -#: src/Model/Profile.php:1015 +#: src/Model/Profile.php:1013 msgid "Hometown:" msgstr "" -#: src/Model/Profile.php:1016 +#: src/Model/Profile.php:1014 msgid "Marital Status:" msgstr "" -#: src/Model/Profile.php:1017 +#: src/Model/Profile.php:1015 msgid "With:" msgstr "" -#: src/Model/Profile.php:1018 +#: src/Model/Profile.php:1016 msgid "Since:" msgstr "" -#: src/Model/Profile.php:1019 +#: src/Model/Profile.php:1017 msgid "Sexual Preference:" msgstr "" -#: src/Model/Profile.php:1020 +#: src/Model/Profile.php:1018 msgid "Political Views:" msgstr "" -#: src/Model/Profile.php:1021 +#: src/Model/Profile.php:1019 msgid "Religious Views:" msgstr "" -#: src/Model/Profile.php:1022 +#: src/Model/Profile.php:1020 msgid "Likes:" msgstr "" -#: src/Model/Profile.php:1023 +#: src/Model/Profile.php:1021 msgid "Dislikes:" msgstr "" -#: src/Model/Profile.php:1024 +#: src/Model/Profile.php:1022 msgid "Title/Description:" msgstr "" -#: src/Model/Profile.php:1025 src/Module/Admin/Summary.php:197 +#: src/Model/Profile.php:1023 src/Module/Admin/Summary.php:197 #: src/Module/Moderation/Report/Create.php:280 #: src/Module/Moderation/Summary.php:77 msgid "Summary" msgstr "" -#: src/Model/Profile.php:1026 +#: src/Model/Profile.php:1024 msgid "Musical interests" msgstr "" -#: src/Model/Profile.php:1027 +#: src/Model/Profile.php:1025 msgid "Books, literature" msgstr "" -#: src/Model/Profile.php:1028 +#: src/Model/Profile.php:1026 msgid "Television" msgstr "" -#: src/Model/Profile.php:1029 +#: src/Model/Profile.php:1027 msgid "Film/dance/culture/entertainment" msgstr "" -#: src/Model/Profile.php:1030 +#: src/Model/Profile.php:1028 msgid "Hobbies/Interests" msgstr "" -#: src/Model/Profile.php:1031 +#: src/Model/Profile.php:1029 msgid "Love/romance" msgstr "" -#: src/Model/Profile.php:1032 +#: src/Model/Profile.php:1030 msgid "Work/employment" msgstr "" -#: src/Model/Profile.php:1033 +#: src/Model/Profile.php:1031 msgid "School/education" msgstr "" -#: src/Model/Profile.php:1034 +#: src/Model/Profile.php:1032 msgid "Contact information and Social Networks" msgstr "" -#: src/Model/User.php:225 src/Model/User.php:1167 +#: src/Model/User.php:226 src/Model/User.php:1168 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: src/Model/User.php:601 src/Model/User.php:634 +#: src/Model/User.php:602 src/Model/User.php:635 msgid "Login failed" msgstr "" -#: src/Model/User.php:666 +#: src/Model/User.php:667 msgid "Not enough information to authenticate" msgstr "" -#: src/Model/User.php:787 +#: src/Model/User.php:788 msgid "Password can't be empty" msgstr "" -#: src/Model/User.php:829 +#: src/Model/User.php:830 msgid "Empty passwords are not allowed." msgstr "" -#: src/Model/User.php:833 +#: src/Model/User.php:834 msgid "" "The new password has been exposed in a public data dump, please choose " "another." msgstr "" -#: src/Model/User.php:837 +#: src/Model/User.php:838 msgid "The password length is limited to 72 characters." msgstr "" -#: src/Model/User.php:841 +#: src/Model/User.php:842 msgid "The password can't contain white spaces nor accentuated letters" msgstr "" -#: src/Model/User.php:1050 +#: src/Model/User.php:1051 msgid "Passwords do not match. Password unchanged." msgstr "" -#: src/Model/User.php:1057 +#: src/Model/User.php:1058 msgid "An invitation is required." msgstr "" -#: src/Model/User.php:1061 +#: src/Model/User.php:1062 msgid "Invitation could not be verified." msgstr "" -#: src/Model/User.php:1069 +#: src/Model/User.php:1070 msgid "Invalid OpenID url" msgstr "" -#: src/Model/User.php:1082 src/Security/Authentication.php:241 +#: src/Model/User.php:1083 src/Security/Authentication.php:241 msgid "" "We encountered a problem while logging in with the OpenID you provided. " "Please check the correct spelling of the ID." msgstr "" -#: src/Model/User.php:1082 src/Security/Authentication.php:241 +#: src/Model/User.php:1083 src/Security/Authentication.php:241 msgid "The error message was:" msgstr "" -#: src/Model/User.php:1088 +#: src/Model/User.php:1089 msgid "Please enter the required information." msgstr "" -#: src/Model/User.php:1102 +#: src/Model/User.php:1103 #, php-format msgid "" "system.username_min_length (%s) and system.username_max_length (%s) are " "excluding each other, swapping values." msgstr "" -#: src/Model/User.php:1109 +#: src/Model/User.php:1110 #, php-format msgid "Username should be at least %s character." msgid_plural "Username should be at least %s characters." msgstr[0] "" msgstr[1] "" -#: src/Model/User.php:1113 +#: src/Model/User.php:1114 #, php-format msgid "Username should be at most %s character." msgid_plural "Username should be at most %s characters." msgstr[0] "" msgstr[1] "" -#: src/Model/User.php:1121 +#: src/Model/User.php:1122 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: src/Model/User.php:1126 +#: src/Model/User.php:1127 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: src/Model/User.php:1130 +#: src/Model/User.php:1131 msgid "Not a valid email address." msgstr "" -#: src/Model/User.php:1133 +#: src/Model/User.php:1134 msgid "The nickname was blocked from registration by the nodes admin." msgstr "" -#: src/Model/User.php:1137 src/Model/User.php:1143 +#: src/Model/User.php:1138 src/Model/User.php:1144 msgid "Cannot use that email." msgstr "" -#: src/Model/User.php:1149 +#: src/Model/User.php:1150 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "" -#: src/Model/User.php:1157 src/Model/User.php:1214 +#: src/Model/User.php:1158 src/Model/User.php:1215 msgid "Nickname is already registered. Please choose another." msgstr "" -#: src/Model/User.php:1201 src/Model/User.php:1205 +#: src/Model/User.php:1202 src/Model/User.php:1206 msgid "An error occurred during registration. Please try again." msgstr "" -#: src/Model/User.php:1228 +#: src/Model/User.php:1229 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: src/Model/User.php:1235 +#: src/Model/User.php:1236 msgid "An error occurred creating your self contact. Please try again." msgstr "" -#: src/Model/User.php:1240 +#: src/Model/User.php:1241 msgid "Friends" msgstr "" -#: src/Model/User.php:1244 +#: src/Model/User.php:1245 msgid "" "An error occurred creating your default contact circle. Please try again." msgstr "" -#: src/Model/User.php:1288 +#: src/Model/User.php:1289 msgid "Profile Photos" msgstr "" -#: src/Model/User.php:1483 +#: src/Model/User.php:1469 #, php-format msgid "" "\n" @@ -3605,7 +3605,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: src/Model/User.php:1486 +#: src/Model/User.php:1472 #, php-format msgid "" "\n" @@ -3643,12 +3643,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "" -#: src/Model/User.php:1519 src/Model/User.php:1626 +#: src/Model/User.php:1505 src/Model/User.php:1612 #, php-format msgid "Registration details for %s" msgstr "" -#: src/Model/User.php:1539 +#: src/Model/User.php:1525 #, php-format msgid "" "\n" @@ -3664,12 +3664,12 @@ msgid "" "\t\t" msgstr "" -#: src/Model/User.php:1558 +#: src/Model/User.php:1544 #, php-format msgid "Registration at %s" msgstr "" -#: src/Model/User.php:1582 +#: src/Model/User.php:1568 #, php-format msgid "" "\n" @@ -3678,7 +3678,7 @@ msgid "" "\t\t\t" msgstr "" -#: src/Model/User.php:1590 +#: src/Model/User.php:1576 #, php-format msgid "" "\n" @@ -6564,7 +6564,7 @@ msgid "Sort by post creation date" msgstr "" #: src/Module/Conversation/Network.php:281 -#: src/Module/Settings/Profile/Index.php:235 +#: src/Module/Settings/Profile/Index.php:260 msgid "Personal" msgstr "" @@ -6796,7 +6796,7 @@ msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" #: src/Module/Debug/Feed.php:52 src/Module/Filer/SaveTag.php:47 -#: src/Module/Settings/Profile/Index.php:144 +#: src/Module/Settings/Profile/Index.php:177 msgid "You must be logged in to use this module" msgstr "" @@ -8586,20 +8586,20 @@ msgstr "" #: src/Module/Profile/Conversations.php:106 #: src/Module/Profile/Conversations.php:109 src/Module/Profile/Profile.php:351 -#: src/Module/Profile/Profile.php:354 src/Protocol/Feed.php:1090 +#: src/Module/Profile/Profile.php:354 src/Protocol/Feed.php:1098 #: src/Protocol/OStatus.php:1009 #, php-format msgid "%s's timeline" msgstr "" #: src/Module/Profile/Conversations.php:107 src/Module/Profile/Profile.php:352 -#: src/Protocol/Feed.php:1094 src/Protocol/OStatus.php:1014 +#: src/Protocol/Feed.php:1102 src/Protocol/OStatus.php:1014 #, php-format msgid "%s's posts" msgstr "" #: src/Module/Profile/Conversations.php:108 src/Module/Profile/Profile.php:353 -#: src/Protocol/Feed.php:1097 src/Protocol/OStatus.php:1018 +#: src/Protocol/Feed.php:1105 src/Protocol/OStatus.php:1018 #, php-format msgid "%s's comments" msgstr "" @@ -8644,7 +8644,7 @@ msgid "" "\"btn btn-sm pull-right\">Cancel" msgstr "" -#: src/Module/Profile/Profile.php:167 src/Module/Settings/Account.php:576 +#: src/Module/Profile/Profile.php:167 msgid "Full Name:" msgstr "" @@ -8664,12 +8664,12 @@ msgstr "" msgid "Birthday:" msgstr "" -#: src/Module/Profile/Profile.php:190 src/Module/Settings/Profile/Index.php:253 +#: src/Module/Profile/Profile.php:190 src/Module/Settings/Profile/Index.php:291 #: src/Util/Temporal.php:170 msgid "Age: " msgstr "" -#: src/Module/Profile/Profile.php:190 src/Module/Settings/Profile/Index.php:253 +#: src/Module/Profile/Profile.php:190 src/Module/Settings/Profile/Index.php:291 #: src/Util/Temporal.php:170 #, php-format msgid "%d year old" @@ -8677,7 +8677,7 @@ msgid_plural "%d years old" msgstr[0] "" msgstr[1] "" -#: src/Module/Profile/Profile.php:195 src/Module/Settings/Profile/Index.php:246 +#: src/Module/Profile/Profile.php:195 src/Module/Settings/Profile/Index.php:284 msgid "Description:" msgstr "" @@ -9362,6 +9362,11 @@ msgstr "" msgid "Basic Settings" msgstr "" +#: src/Module/Settings/Account.php:576 +#: src/Module/Settings/Profile/Index.php:283 +msgid "Display name:" +msgstr "" + #: src/Module/Settings/Account.php:577 msgid "Email Address:" msgstr "" @@ -10126,146 +10131,85 @@ msgstr "" msgid "Remove authorization" msgstr "" -#: src/Module/Settings/Profile/Index.php:84 -msgid "Profile Name is required." +#: src/Module/Settings/Profile/Index.php:116 +msgid "Display Name is required." msgstr "" -#: src/Module/Settings/Profile/Index.php:134 +#: src/Module/Settings/Profile/Index.php:167 msgid "Profile couldn't be updated." msgstr "" -#: src/Module/Settings/Profile/Index.php:175 -#: src/Module/Settings/Profile/Index.php:195 +#: src/Module/Settings/Profile/Index.php:205 +#: src/Module/Settings/Profile/Index.php:226 msgid "Label:" msgstr "" -#: src/Module/Settings/Profile/Index.php:176 -#: src/Module/Settings/Profile/Index.php:196 +#: src/Module/Settings/Profile/Index.php:206 +#: src/Module/Settings/Profile/Index.php:227 msgid "Value:" msgstr "" -#: src/Module/Settings/Profile/Index.php:186 -#: src/Module/Settings/Profile/Index.php:206 +#: src/Module/Settings/Profile/Index.php:217 +#: src/Module/Settings/Profile/Index.php:238 msgid "Field Permissions" msgstr "" -#: src/Module/Settings/Profile/Index.php:187 -#: src/Module/Settings/Profile/Index.php:207 +#: src/Module/Settings/Profile/Index.php:218 +#: src/Module/Settings/Profile/Index.php:239 msgid "(click to open/close)" msgstr "" -#: src/Module/Settings/Profile/Index.php:193 +#: src/Module/Settings/Profile/Index.php:224 msgid "Add a new profile field" msgstr "" -#: src/Module/Settings/Profile/Index.php:216 +#: src/Module/Settings/Profile/Index.php:247 msgid "" "The homepage is verified. A rel=\"me\" link back to your Friendica profile " "page was found on the homepage." msgstr "" -#: src/Module/Settings/Profile/Index.php:218 +#: src/Module/Settings/Profile/Index.php:249 #, php-format msgid "" "To verify your homepage, add a rel=\"me\" link to it, pointing to your " "profile URL (%s)." msgstr "" -#: src/Module/Settings/Profile/Index.php:228 +#: src/Module/Settings/Profile/Index.php:255 msgid "Profile Actions" msgstr "" -#: src/Module/Settings/Profile/Index.php:229 +#: src/Module/Settings/Profile/Index.php:256 msgid "Edit Profile Details" msgstr "" -#: src/Module/Settings/Profile/Index.php:231 +#: src/Module/Settings/Profile/Index.php:258 msgid "Change Profile Photo" msgstr "" -#: src/Module/Settings/Profile/Index.php:236 +#: src/Module/Settings/Profile/Index.php:261 msgid "Profile picture" msgstr "" -#: src/Module/Settings/Profile/Index.php:237 +#: src/Module/Settings/Profile/Index.php:262 msgid "Location" msgstr "" -#: src/Module/Settings/Profile/Index.php:238 src/Util/Temporal.php:97 +#: src/Module/Settings/Profile/Index.php:263 src/Util/Temporal.php:97 #: src/Util/Temporal.php:99 msgid "Miscellaneous" msgstr "" -#: src/Module/Settings/Profile/Index.php:239 +#: src/Module/Settings/Profile/Index.php:264 msgid "Custom Profile Fields" msgstr "" -#: src/Module/Settings/Profile/Index.php:241 src/Module/Welcome.php:58 +#: src/Module/Settings/Profile/Index.php:265 src/Module/Welcome.php:58 msgid "Upload Profile Photo" msgstr "" -#: src/Module/Settings/Profile/Index.php:245 -msgid "Display name:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:248 -msgid "Street Address:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:249 -msgid "Locality/City:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:250 -msgid "Region/State:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:251 -msgid "Postal/Zip Code:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:252 -msgid "Country:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:254 -msgid "XMPP (Jabber) address:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:254 -msgid "The XMPP address will be published so that people can follow you there." -msgstr "" - -#: src/Module/Settings/Profile/Index.php:255 -msgid "Matrix (Element) address:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:255 -msgid "" -"The Matrix address will be published so that people can follow you there." -msgstr "" - -#: src/Module/Settings/Profile/Index.php:256 -msgid "Homepage URL:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:257 -msgid "Public Keywords:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:257 -msgid "(Used for suggesting potential friends, can be seen by others)" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:258 -msgid "Private Keywords:" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:258 -msgid "(Used for searching profiles, never shown to others)" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:259 +#: src/Module/Settings/Profile/Index.php:266 #, php-format msgid "" "

Custom fields appear on your profile page.

\n" @@ -10276,6 +10220,63 @@ msgid "" "contacts or the Friendica contacts in the selected circles.

" msgstr "" +#: src/Module/Settings/Profile/Index.php:286 +msgid "Street Address:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:287 +msgid "Locality/City:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:288 +msgid "Region/State:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:289 +msgid "Postal/Zip Code:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:290 +msgid "Country:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:292 +msgid "XMPP (Jabber) address:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:292 +msgid "The XMPP address will be published so that people can follow you there." +msgstr "" + +#: src/Module/Settings/Profile/Index.php:293 +msgid "Matrix (Element) address:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:293 +msgid "" +"The Matrix address will be published so that people can follow you there." +msgstr "" + +#: src/Module/Settings/Profile/Index.php:294 +msgid "Homepage URL:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:295 +msgid "Public Keywords:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:295 +msgid "(Used for suggesting potential friends, can be seen by others)" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:296 +msgid "Private Keywords:" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:296 +msgid "(Used for searching profiles, never shown to others)" +msgstr "" + #: src/Module/Settings/Profile/Photo/Crop.php:107 #: src/Module/Settings/Profile/Photo/Crop.php:125 #: src/Module/Settings/Profile/Photo/Crop.php:143 diff --git a/view/templates/settings/profile/index.tpl b/view/templates/settings/profile/index.tpl index 69812c5a8..64c9daee0 100644 --- a/view/templates/settings/profile/index.tpl +++ b/view/templates/settings/profile/index.tpl @@ -1,121 +1,131 @@ -

{{$banner}}

+ -{{$default nofilter}} +

{{$l10n.banner}}

-
-
+ + + + +
+

{{$l10n.picture_section}} »

+ +
+
+ +
-
- - -
-
-
- - -
-
-
- {{$dob nofilter}} -
-
- {{$hide_friends nofilter}} -
- -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- -
-
-
- - -
-
{{$homepage.3}}
-
-
- - -
-
{{$xmpp.3}}
-
-
- - -
-
{{$matrix.3}}
-
-
- - -
-
{{$pub_keywords.3}}
-
-
- - -
-
{{$prv_keywords.3}}
-
-
- -
-
+ +
+

{{$l10n.personal_section}} »

+ + +
+

{{$l10n.location_section}} »

+ +
+ +
+

{{$l10n.custom_fields_section}} »

+
-
- -

{{$banner}}

- - - - -
-
- - - -
-

{{$lbl_picture_section}} »

- -
-
- -
- - - -
-

{{$lbl_personal_section}} »

- -
- -
-

{{$lbl_location_section}} »

- -
- -
-

{{$lbl_custom_fields_section}} »

- -
-
-
-