X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FProfile.php;h=c5652c6f7a2e992f6561acefe799c9bab3f2253c;hb=8d999f54d025cebcaeef9386ae9910def7af52c3;hp=cf9e7c62026c1f3c7e7648e4506066191ece1a57;hpb=efddd248f70c332e3d3c5666dfb219c0480299f3;p=friendica.git diff --git a/src/Model/Profile.php b/src/Model/Profile.php index cf9e7c6202..c5652c6f7a 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -27,7 +27,6 @@ use Friendica\Content\Widget\ContactBlock; use Friendica\Core\Cache\Duration; use Friendica\Core\Hook; use Friendica\Core\Logger; -use Friendica\Network\Probe; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; @@ -167,7 +166,7 @@ class Profile } } - $profile = self::getByNickname($nickname, $user['uid']); + $profile = !empty($user['uid']) ? User::getOwnerDataById($user['uid'], false) : []; if (empty($profile) && empty($profiledata)) { Logger::log('profile error: ' . DI::args()->getQueryString(), Logger::DEBUG); @@ -234,19 +233,7 @@ class Profile */ public static function getByNickname($nickname, $uid = 0) { - $profile = DBA::fetchFirst( - "SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` AS `contact_photo`, - `contact`.`thumb` AS `contact_thumb`, `contact`.`micro` AS `contact_micro`, - `profile`.*, - `contact`.`avatar-date` AS picdate, `contact`.`addr`, `contact`.`url`, `user`.* - FROM `profile` - INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` AND `contact`.`self` - INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` - WHERE `user`.`nickname` = ? AND `profile`.`uid` = ? LIMIT 1", - $nickname, - intval($uid) - ); - + $profile = DBA::selectFirst('owner-view', [], ['nickname' => $nickname, 'uid' => $uid]); return $profile; } @@ -271,7 +258,7 @@ class Profile * @hooks 'profile_sidebar' * array $arr */ - private static function sidebar(App $a, $profile, $block = 0, $show_connect = true) + private static function sidebar(App $a, array $profile, $block = 0, $show_connect = true) { $o = ''; $location = false; @@ -279,7 +266,8 @@ class Profile // This function can also use contact information in $profile $is_contact = !empty($profile['cid']); - if (!is_array($profile) && !count($profile)) { + if (empty($profile['nickname'])) { + Logger::warning('Received profile with no nickname', ['profile' => $profile, 'callstack' => System::callstack(10)]); return $o; } @@ -304,8 +292,6 @@ class Profile $subscribe_feed_link = null; $wallmessage_link = null; - - $visitor_contact = []; if (!empty($profile['uid']) && self::getMyURL()) { $visitor_contact = Contact::selectFirst(['rel'], ['uid' => $profile['uid'], 'nurl' => Strings::normaliseLink(self::getMyURL())]); @@ -318,7 +304,7 @@ class Profile $profile_is_dfrn = $profile['network'] == Protocol::DFRN; $profile_is_native = in_array($profile['network'], Protocol::NATIVE_SUPPORT); - $local_user_is_self = local_user() && local_user() == ($profile['uid'] ?? 0); + $local_user_is_self = self::getMyURL() && ($profile['url'] == self::getMyURL()); $visitor_is_authenticated = (bool)self::getMyURL(); $visitor_is_following = in_array($visitor_contact['rel'] ?? 0, [Contact::FOLLOWER, Contact::FRIEND]) @@ -330,14 +316,15 @@ class Profile if (!$local_user_is_self && $show_connect) { if (!$visitor_is_authenticated) { - if (!empty($profile['nickname'])) { + // Remote follow is only available for local profiles + if (!empty($profile['nickname']) && strpos($profile_url, DI::baseUrl()->get()) === 0) { $follow_link = 'remote_follow/' . $profile['nickname']; } } elseif ($profile_is_native) { if ($visitor_is_following) { - $unfollow_link = $visitor_base_path . '/unfollow?url=' . urlencode($profile_url); + $unfollow_link = $visitor_base_path . '/unfollow?url=' . urlencode($profile_url) . '&auto=1'; } else { - $follow_link = $visitor_base_path .'/follow?url=' . urlencode($profile_url); + $follow_link = $visitor_base_path .'/follow?url=' . urlencode($profile_url) . '&auto=1'; } } @@ -367,13 +354,7 @@ class Profile // Fetch the account type $account_type = Contact::getAccountType($profile); - if (!empty($profile['address']) - || !empty($profile['location']) - || !empty($profile['locality']) - || !empty($profile['region']) - || !empty($profile['postal-code']) - || !empty($profile['country-name']) - ) { + if (!empty($profile['address']) || !empty($profile['location'])) { $location = DI::l10n()->t('Location:'); } @@ -398,9 +379,9 @@ class Profile 'fullname' => $profile['name'], 'firstname' => $firstname, 'lastname' => $lastname, - 'photo300' => $profile['contact_photo'] ?? '', - 'photo100' => $profile['contact_thumb'] ?? '', - 'photo50' => $profile['contact_micro'] ?? '', + 'photo300' => $profile['photo'] ?? '', + 'photo100' => $profile['thumb'] ?? '', + 'photo50' => $profile['micro'] ?? '', ]; } else { $diaspora = false; @@ -409,18 +390,15 @@ class Profile $contact_block = ''; $updated = ''; $contact_count = 0; + + if (!empty($profile['last-item'])) { + $updated = date('c', strtotime($profile['last-item'])); + } + if (!$block) { $contact_block = ContactBlock::getHTML($a->profile); if (is_array($a->profile) && !$a->profile['hide-friends']) { - $r = q( - "SELECT `gcontact`.`updated` FROM `contact` INNER JOIN `gcontact` WHERE `gcontact`.`nurl` = `contact`.`nurl` AND `self` AND `uid` = %d LIMIT 1", - intval($a->profile['uid']) - ); - if (DBA::isResult($r)) { - $updated = date('c', strtotime($r[0]['updated'])); - } - $contact_count = DBA::count('contact', [ 'uid' => $profile['uid'], 'self' => false, @@ -428,6 +406,7 @@ class Profile 'pending' => false, 'hidden' => false, 'archive' => false, + 'failed' => false, 'network' => Protocol::FEDERATED, ]); } @@ -443,10 +422,6 @@ class Profile $p['about'] = BBCode::convert($p['about']); } - if (empty($p['address']) && !empty($p['location'])) { - $p['address'] = $p['location']; - } - if (isset($p['address'])) { $p['address'] = BBCode::convert($p['address']); } @@ -615,7 +590,7 @@ class Profile while ($rr = DBA::fetch($s)) { $condition = ['parent-uri' => $rr['uri'], 'uid' => $rr['uid'], 'author-id' => public_contact(), - 'activity' => [Item::activityToIndex( Activity::ATTEND), Item::activityToIndex(Activity::ATTENDMAYBE)], + 'vid' => [Verb::getID(Activity::ATTEND), Verb::getID(Activity::ATTENDMAYBE)], 'visible' => true, 'deleted' => false]; if (!Item::exists($condition)) { continue; @@ -753,7 +728,7 @@ class Profile $magic_path = $basepath . '/magic' . '?owa=1&dest=' . $dest . '&' . $addr_request; // We have to check if the remote server does understand /magic without invoking something - $serverret = Network::curl($basepath . '/magic'); + $serverret = DI::httpRequest()->get($basepath . '/magic'); if ($serverret->isSuccess()) { Logger::log('Doing magic auth for visitor ' . $my_url . ' to ' . $magic_path, Logger::DEBUG); System::externalRedirect($magic_path); @@ -786,7 +761,7 @@ class Profile $_SESSION['visitor_handle'] = $visitor['addr']; $_SESSION['visitor_home'] = $visitor['url']; $_SESSION['my_url'] = $visitor['url']; - $_SESSION['remote_comment'] = Probe::getRemoteFollowLink($visitor['url']); + $_SESSION['remote_comment'] = $visitor['subscribe']; Session::setVisitorsContacts(); @@ -901,87 +876,37 @@ class Profile */ public static function searchProfiles($start = 0, $count = 100, $search = null) { - $publish = (DI::config()->get('system', 'publish_all') ? '' : "`publish` = 1"); - $total = 0; - if (!empty($search)) { + $publish = (DI::config()->get('system', 'publish_all') ? '' : "AND `publish` "); $searchTerm = '%' . $search . '%'; - $cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total` - FROM `profile` - LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` - WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` - AND ((`profile`.`name` LIKE ?) OR - (`user`.`nickname` LIKE ?) OR - (`profile`.`about` LIKE ?) OR - (`profile`.`locality` LIKE ?) OR - (`profile`.`region` LIKE ?) OR - (`profile`.`country-name` LIKE ?) OR - (`profile`.`pub_keywords` LIKE ?) OR - (`profile`.`prv_keywords` LIKE ?))", - $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, - $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm); + $condition = ["NOT `blocked` AND NOT `account_removed` + $publish + AND ((`name` LIKE ?) OR + (`nickname` LIKE ?) OR + (`about` LIKE ?) OR + (`locality` LIKE ?) OR + (`region` LIKE ?) OR + (`country-name` LIKE ?) OR + (`pub_keywords` LIKE ?) OR + (`prv_keywords` LIKE ?))", + $searchTerm, $searchTerm, $searchTerm, $searchTerm, + $searchTerm, $searchTerm, $searchTerm, $searchTerm]; } else { - $cnt = DBA::fetchFirst("SELECT COUNT(*) AS `total` - FROM `profile` - LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` - WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed`"); - } - - if (DBA::isResult($cnt)) { - $total = $cnt['total']; + $condition = ['blocked' => false, 'account_removed' => false]; + if (!DI::config()->get('system', 'publish_all')) { + $condition['publish'] = true; + } } - $order = " ORDER BY `name` ASC "; - $profiles = []; + $total = DBA::count('owner-view', $condition); // If nothing found, don't try to select details if ($total > 0) { - if (!empty($search)) { - $searchTerm = '%' . $search . '%'; - - $profiles = DBA::p("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, - `contact`.`addr`, `contact`.`url` AS `profile_url` - FROM `profile` - LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` - LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid` - WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `contact`.`self` - AND ((`profile`.`name` LIKE ?) OR - (`user`.`nickname` LIKE ?) OR - (`profile`.`about` LIKE ?) OR - (`profile`.`locality` LIKE ?) OR - (`profile`.`region` LIKE ?) OR - (`profile`.`country-name` LIKE ?) OR - (`profile`.`pub_keywords` LIKE ?) OR - (`profile`.`prv_keywords` LIKE ?)) - $order LIMIT ?,?", - $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, - $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, - $start, $count - ); - } else { - $profiles = DBA::p("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, - `contact`.`addr`, `contact`.`url` AS `profile_url` - FROM `profile` - LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` - LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid` - WHERE $publish AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND `contact`.`self` - $order LIMIT ?,?", - $start, $count - ); - } - } - - if (DBA::isResult($profiles) && $total > 0) { - return [ - 'total' => $total, - 'entries' => DBA::toArray($profiles), - ]; - + $profiles = DBA::selectToArray('owner-view', [], $condition, ['order' => ['name'], 'limit' => [$start, $count]]); } else { - return [ - 'total' => $total, - 'entries' => [], - ]; + $profiles = []; } + + return ['total' => $total, 'entries' => $profiles]; } }