X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FProfile.php;h=b32c58fc9313c97334471e3301cf910e6c08ee11;hb=83d3ce0802d2a2e2717f580f606d1f5211f23edd;hp=4ce5cfcca311f4b9b64e55a092183451e5089fbd;hpb=ceb409dae8f997230f891150ccf638e93633d67f;p=friendica.git diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 4ce5cfcca3..b32c58fc93 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -29,8 +29,10 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Search; use Friendica\Core\Session; use Friendica\Core\System; +use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Protocol\Activity; @@ -84,6 +86,71 @@ class Profile return DBA::selectToArray('profile', $fields, ['uid' => $uid]); } + /** + * Update a profile entry and distribute the changes if needed + * + * @param array $fields + * @param integer $uid + * @return boolean + */ + public static function update(array $fields, int $uid): bool + { + $old_owner = User::getOwnerDataById($uid); + if (empty($old_owner)) { + return false; + } + + if (!DBA::update('profile', $fields, ['uid' => $uid])) { + return false; + } + + $update = Contact::updateSelfFromUserID($uid); + + $owner = User::getOwnerDataById($uid); + if (empty($owner)) { + 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]) { + $update = true; + } + } + + if ($update) { + self::publishUpdate($uid, ($old_owner['net-publish'] != $owner['net-publish'])); + } + + return true; + } + + /** + * Publish a changed profile + * @param int $uid + * @param bool $force Force publishing to the directory + */ + public static function publishUpdate(int $uid, bool $force = false) + { + $owner = User::getOwnerDataById($uid); + if (empty($owner)) { + return; + } + + if ($owner['net-publish'] || $force) { + // Update global directory in background + if (Search::getGlobalDirectory()) { + Worker::add(PRIORITY_LOW, 'Directory', $owner['url']); + } + } + + Worker::add(PRIORITY_LOW, 'ProfileUpdate', $uid); + } + /** * Returns a formatted location string from the given profile array * @@ -216,24 +283,17 @@ class Profile } /** - * Get all profile data of a local user - * - * If the viewer is an authenticated remote viewer, the profile displayed is the - * one that has been configured for his/her viewing in the Contact manager. - * Passing a non-zero profile ID can also allow a preview of a selected profile - * by the owner + * Get the profile for the given nick name * * Includes all available profile data * * @param string $nickname nick - * @param int $uid uid - * @param int $profile_id ID of the profile * @return array * @throws \Exception */ - public static function getByNickname($nickname, $uid = 0) + public static function getByNickname($nickname) { - $profile = DBA::selectFirst('owner-view', [], ['nickname' => $nickname, 'uid' => $uid]); + $profile = DBA::selectFirst('owner-view', [], ['nickname' => $nickname]); return $profile; } @@ -267,14 +327,14 @@ class Profile // value is going to be coming from 'owner-view', which means it's the wrong // contact ID for the user viewing this page. Use 'nurl' to look up the // correct contact table entry for the logged-in user. - $is_contact = !empty($profile['nurl']); $profile_contact = []; - if ($is_contact) { + if (!empty($profile['nurl'] ?? '')) { if (local_user() && ($profile['uid'] ?? '') != local_user()) { $profile_contact = Contact::getById(Contact::getIdForURL($profile['nurl'], local_user())); - } else { - $profile_contact = $profile; + } + if (!empty($profile['cid']) && self::getMyURL()) { + $profile_contact = Contact::selectFirst(['rel'], ['id' => $profile['cid']]); } } @@ -349,8 +409,10 @@ class Profile } } - // show edit profile to yourself - if (!$is_contact && $local_user_is_self) { + // show edit profile to yourself, but only if this is not meant to be + // rendered as a "contact". i.e., if 'self' (a "contact" table column) isn't + // set in $profile. + if (!isset($profile['self']) && $local_user_is_self) { $profile['edit'] = [DI::baseUrl() . '/settings/profile', DI::l10n()->t('Edit profile'), '', DI::l10n()->t('Edit profile')]; $profile['menu'] = [ 'chg_photo' => DI::l10n()->t('Change profile photo'),