X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FProfile.php;h=9bbec24e63031e7c031229a90a41fb52dd7fca89;hb=2e05dac7dae0a3d028b442a2d5afbd4176a32e99;hp=361f1a7e4b20305fbb73180a010e4dfb352a1577;hpb=caa1a5aeacaf617c2f852b45e2ed891dd8be358c;p=friendica.git diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 361f1a7e4b..9bbec24e63 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -24,7 +24,7 @@ namespace Friendica\Model; use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Widget\ContactBlock; -use Friendica\Core\Cache\Duration; +use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; @@ -38,10 +38,11 @@ use Friendica\DI; use Friendica\Network\HTTPException; use Friendica\Protocol\Activity; use Friendica\Protocol\Diaspora; +use Friendica\Security\PermissionSet\Entity\PermissionSet; use Friendica\Util\DateTimeFormat; use Friendica\Util\HTTPSignature; use Friendica\Util\Network; -use Friendica\Util\Proxy as ProxyUtils; +use Friendica\Util\Proxy; use Friendica\Util\Strings; class Profile @@ -218,7 +219,7 @@ class Profile { $profile = User::getOwnerDataByNick($nickname); if (empty($profile)) { - Logger::log('profile error: ' . DI::args()->getQueryString(), Logger::DEBUG); + Logger::info('profile error: ' . DI::args()->getQueryString()); return []; } @@ -441,7 +442,7 @@ class Profile $p['address'] = BBCode::convertForUriId($profile['uri-id'] ?? 0, $p['address']); } - $p['photo'] = Contact::getAvatarUrlForId($cid, ProxyUtils::SIZE_SMALL); + $p['photo'] = Contact::getAvatarUrlForId($cid, Proxy::SIZE_SMALL); $p['url'] = Contact::magicLinkById($cid, $profile['url']); @@ -705,27 +706,27 @@ class Profile // Try to find the public contact entry of the visitor. $cid = Contact::getIdForURL($my_url); if (!$cid) { - Logger::log('No contact record found for ' . $my_url, Logger::DEBUG); + Logger::info('No contact record found for ' . $my_url); return; } $contact = DBA::selectFirst('contact',['id', 'url'], ['id' => $cid]); if (DBA::isResult($contact) && remote_user() && remote_user() == $contact['id']) { - Logger::log('The visitor ' . $my_url . ' is already authenticated', Logger::DEBUG); + Logger::info('The visitor ' . $my_url . ' is already authenticated'); return; } // Avoid endless loops $cachekey = 'zrlInit:' . $my_url; if (DI::cache()->get($cachekey)) { - Logger::log('URL ' . $my_url . ' already tried to authenticate.', Logger::DEBUG); + Logger::info('URL ' . $my_url . ' already tried to authenticate.'); return; } else { DI::cache()->set($cachekey, true, Duration::MINUTE); } - Logger::log('Not authenticated. Invoking reverse magic-auth for ' . $my_url, Logger::DEBUG); + Logger::info('Not authenticated. Invoking reverse magic-auth for ' . $my_url); // Remove the "addr" parameter from the destination. It is later added as separate parameter again. $addr_request = 'addr=' . urlencode($addr); @@ -744,7 +745,7 @@ class Profile // We have to check if the remote server does understand /magic without invoking something $serverret = DI::httpClient()->get($basepath . '/magic'); if ($serverret->isSuccess()) { - Logger::log('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path, Logger::DEBUG); + Logger::info('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path); System::externalRedirect($magic_path); } } @@ -844,7 +845,7 @@ class Profile info(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHostname(), $visitor['name'])); - Logger::log('OpenWebAuth: auth success from ' . $visitor['addr'], Logger::DEBUG); + Logger::info('OpenWebAuth: auth success from ' . $visitor['addr']); } public static function zrl($s, $force = false) @@ -936,4 +937,86 @@ class Profile return ['total' => $total, 'entries' => $profiles]; } + + /** + * Migrates a legacy profile to the new slimmer profile with extra custom fields. + * Multi profiles are converted to ACl-protected custom fields and deleted. + * + * @param array $profile One profile array + * @throws \Exception + */ + public static function migrate(array $profile) + { + // Already processed, aborting + if ($profile['is-default'] === null) { + return; + } + + $contacts = []; + + if (!$profile['is-default']) { + $contacts = Contact::selectToArray(['id'], [ + 'uid' => $profile['uid'], + 'profile-id' => $profile['id'] + ]); + if (!count($contacts)) { + // No contact visibility selected defaults to user-only permission + $contacts = Contact::selectToArray(['id'], ['uid' => $profile['uid'], 'self' => true]); + } + } + + $permissionSet = DI::permissionSet()->selectOrCreate( + new PermissionSet( + $profile['uid'], + array_column($contacts, 'id') ?? [] + ) + ); + + $order = 1; + + $custom_fields = [ + 'hometown' => DI::l10n()->t('Hometown:'), + 'marital' => DI::l10n()->t('Marital Status:'), + 'with' => DI::l10n()->t('With:'), + 'howlong' => DI::l10n()->t('Since:'), + 'sexual' => DI::l10n()->t('Sexual Preference:'), + 'politic' => DI::l10n()->t('Political Views:'), + 'religion' => DI::l10n()->t('Religious Views:'), + 'likes' => DI::l10n()->t('Likes:'), + 'dislikes' => DI::l10n()->t('Dislikes:'), + 'pdesc' => DI::l10n()->t('Title/Description:'), + 'summary' => DI::l10n()->t('Summary'), + 'music' => DI::l10n()->t('Musical interests'), + 'book' => DI::l10n()->t('Books, literature'), + 'tv' => DI::l10n()->t('Television'), + 'film' => DI::l10n()->t('Film/dance/culture/entertainment'), + 'interest' => DI::l10n()->t('Hobbies/Interests'), + 'romance' => DI::l10n()->t('Love/romance'), + 'work' => DI::l10n()->t('Work/employment'), + 'education' => DI::l10n()->t('School/education'), + 'contact' => DI::l10n()->t('Contact information and Social Networks'), + ]; + + foreach ($custom_fields as $field => $label) { + if (!empty($profile[$field]) && $profile[$field] > DBA::NULL_DATE && $profile[$field] > DBA::NULL_DATETIME) { + DI::profileField()->save(DI::profileFieldFactory()->createFromValues( + $profile['uid'], + $order, + trim($label, ':'), + $profile[$field], + $permissionSet + )); + } + + $profile[$field] = null; + } + + if ($profile['is-default']) { + $profile['profile-name'] = null; + $profile['is-default'] = null; + DBA::update('profile', $profile, ['id' => $profile['id']]); + } else if (!empty($profile['id'])) { + DBA::delete('profile', ['id' => $profile['id']]); + } + } }