X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FContact.php;h=db71ab00cc5ed73aeb20481b346476cb3137ca97;hb=40777d08c198ed5f435a7b029e25ea139de62c16;hp=8969b1610eaf9a5166f89c7ff121780c38c98864;hpb=974b750d6d6c921c2bcb6b5991976639bca9907e;p=friendica.git diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 8969b1610e..db71ab00cc 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -1,6 +1,6 @@ $_POST['contact_batch'], 'uid' => [0, local_user()], 'self' => false, 'deleted' => false]); + $orig_records = Model\Contact::selectToArray(['id', 'uid'], ['id' => $_POST['contact_batch'], 'uid' => [0, DI::userSession()->getLocalUserId()], 'self' => false, 'deleted' => false]); $count_actions = 0; foreach ($orig_records as $orig_record) { - $cdata = Model\Contact::getPublicAndUserContactID($orig_record['id'], local_user()); - if (empty($cdata) || public_contact() === $cdata['public']) { + $cdata = Model\Contact::getPublicAndUserContactID($orig_record['id'], DI::userSession()->getLocalUserId()); + if (empty($cdata) || DI::userSession()->getPublicContactId() === $cdata['public']) { // No action available on your own contact continue; } @@ -80,7 +75,7 @@ class Contact extends BaseModule } if (!empty($_POST['contacts_batch_block'])) { - self::toggleBlockContact($cdata['public'], local_user()); + self::toggleBlockContact($cdata['public'], DI::userSession()->getLocalUserId()); $count_actions++; } @@ -90,15 +85,15 @@ class Contact extends BaseModule } } if ($count_actions > 0) { - info(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions)); + DI::sysmsg()->addInfo(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions)); } DI::baseUrl()->redirect($redirectUrl); } - public function post() + protected function post(array $request = []) { - if (!local_user()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -116,9 +111,9 @@ class Contact extends BaseModule * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function updateContactFromPoll(int $contact_id) + public static function updateContactFromPoll(int $contact_id) { - $contact = DBA::selectFirst('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false]); + $contact = DBA::selectFirst('contact', ['uid', 'url', 'network'], ['id' => $contact_id, 'uid' => DI::userSession()->getLocalUserId(), 'deleted' => false]); if (!DBA::isResult($contact)) { return; } @@ -131,28 +126,12 @@ class Contact extends BaseModule } // pull feed and consume it, which should subscribe to the hub. - Worker::add(PRIORITY_HIGH, 'OnePoll', $contact_id, 'force'); + Worker::add(Worker::PRIORITY_HIGH, 'OnePoll', $contact_id, 'force'); } else { - Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id); + Worker::add(Worker::PRIORITY_HIGH, 'UpdateContact', $contact_id); } } - /** - * @param int $contact_id Id of the contact with uid != 0 - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - * @throws \ImagickException - */ - private static function updateContactFromProbe(int $contact_id) - { - $contact = DBA::selectFirst('contact', ['url'], ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false]); - if (!DBA::isResult($contact)) { - return; - } - - // Update the entry in the contact table - Model\Contact::updateFromProbe($contact_id); - } - /** * Toggles the blocked status of a contact identified by id. * @@ -174,13 +153,13 @@ class Contact extends BaseModule */ private static function toggleIgnoreContact(int $contact_id) { - $ignored = !Model\Contact\User::isIgnored($contact_id, local_user()); - Model\Contact\User::setIgnored($contact_id, local_user(), $ignored); + $ignored = !Model\Contact\User::isIgnored($contact_id, DI::userSession()->getLocalUserId()); + Model\Contact\User::setIgnored($contact_id, DI::userSession()->getLocalUserId(), $ignored); } - public function content($update = 0): string + protected function content(array $request = []): string { - if (!local_user()) { + if (!DI::userSession()->getLocalUserId()) { return Login::form($_SERVER['REQUEST_URI']); } @@ -199,65 +178,20 @@ class Contact extends BaseModule $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); $page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); - $contact = null; - // @TODO: Replace with parameter from router - if (DI::args()->getArgc() == 2 && intval(DI::args()->getArgv()[1])) { - $contact_id = intval(DI::args()->getArgv()[1]); - - // Ensure to use the user contact when the public contact was provided - $data = Model\Contact::getPublicAndUserContactID($contact_id, local_user()); - if (!empty($data['user']) && ($contact_id == $data['public'])) { - $contact_id = $data['user']; - } - - if (!empty($data)) { - $contact = DBA::selectFirst('contact', [], [ - 'id' => $contact_id, - 'uid' => [0, local_user()], - 'deleted' => false - ]); - - // Don't display contacts that are about to be deleted - if (DBA::isResult($contact) && !empty($contact['network']) && $contact['network'] == Protocol::PHANTOM) { - $contact = false; - } - } - } - - if (DBA::isResult($contact)) { - if ($contact['self']) { - DI::baseUrl()->redirect('profile/' . $contact['nick'] . '/profile'); - } - - $vcard_widget = Widget\VCard::getHTML($contact); - - $findpeople_widget = ''; - $follow_widget = ''; - $account_widget = ''; - $networks_widget = ''; - $rel_widget = ''; - - if ($contact['uid'] != 0) { - $groups_widget = Model\Group::sidebarWidget('contact', 'group', 'full', 'everyone', $contact_id); - } else { - $groups_widget = ''; - } + $vcard_widget = ''; + $findpeople_widget = Widget::findPeople(); + if (isset($_GET['add'])) { + $follow_widget = Widget::follow($_GET['add']); } else { - $vcard_widget = ''; - $findpeople_widget = Widget::findPeople(); - if (isset($_GET['add'])) { - $follow_widget = Widget::follow($_GET['add']); - } else { - $follow_widget = Widget::follow(); - } - - $account_widget = Widget::accounttypes($_SERVER['REQUEST_URI'], $accounttype); - $networks_widget = Widget::networks($_SERVER['REQUEST_URI'], $nets); - $rel_widget = Widget::contactRels($_SERVER['REQUEST_URI'], $rel); - $groups_widget = Widget::groups($_SERVER['REQUEST_URI'], $group); + $follow_widget = Widget::follow(); } - DI::page()['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $account_widget . $groups_widget . $networks_widget . $rel_widget; + $account_widget = Widget::accountTypes($_SERVER['REQUEST_URI'], $accounttype); + $networks_widget = Widget::networks($_SERVER['REQUEST_URI'], $nets); + $rel_widget = Widget::contactRels($_SERVER['REQUEST_URI'], $rel); + $groups_widget = Widget::groups($_SERVER['REQUEST_URI'], $group); + + DI::page()['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $rel_widget . $groups_widget . $networks_widget . $account_widget; $tpl = Renderer::getMarkupTemplate('contacts-head.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ @@ -267,71 +201,16 @@ class Contact extends BaseModule $o = ''; Nav::setSelected('contact'); - if (DI::args()->getArgc() == 3) { - $contact_id = intval(DI::args()->getArgv()[1]); - if (!$contact_id) { - throw new BadRequestException(); - } - - // @TODO: Replace with parameter from router - $cmd = DI::args()->getArgv()[2]; - - $orig_record = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => [0, local_user()], 'self' => false, 'deleted' => false]); - if (!DBA::isResult($orig_record)) { - throw new NotFoundException(DI::l10n()->t('Contact not found')); - } - - self::checkFormSecurityTokenRedirectOnError('contact/' . $contact_id, 'contact_action', 't'); - - $cdata = Model\Contact::getPublicAndUserContactID($orig_record['id'], local_user()); - if (empty($cdata)) { - throw new NotFoundException(DI::l10n()->t('Contact not found')); - } - - if ($cmd === 'update' && $cdata['user']) { - self::updateContactFromPoll($cdata['user']); - } - - if ($cmd === 'updateprofile' && $cdata['user']) { - self::updateContactFromProbe($cdata['user']); - } - - if ($cmd === 'block') { - if (public_contact() === $cdata['public']) { - throw new BadRequestException(DI::l10n()->t('You can\'t block yourself')); - } - - self::toggleBlockContact($cdata['public'], local_user()); - - $blocked = Model\Contact\User::isBlocked($contact_id, local_user()); - info(($blocked ? DI::l10n()->t('Contact has been blocked') : DI::l10n()->t('Contact has been unblocked'))); - } - - if ($cmd === 'ignore') { - if (public_contact() === $cdata['public']) { - throw new BadRequestException(DI::l10n()->t('You can\'t ignore yourself')); - } - - self::toggleIgnoreContact($cdata['public']); - - $ignored = Model\Contact\User::isIgnored($cdata['public'], local_user()); - info(($ignored ? DI::l10n()->t('Contact has been ignored') : DI::l10n()->t('Contact has been unignored'))); - } - - DI::baseUrl()->redirect('contact/' . $contact_id); - // NOTREACHED - } - $_SESSION['return_path'] = DI::args()->getQueryString(); - $sql_values = [local_user()]; + $sql_values = [DI::userSession()->getLocalUserId()]; // @TODO: Replace with parameter from router $type = DI::args()->getArgv()[1] ?? ''; switch ($type) { case 'blocked': - $sql_extra = " AND EXISTS(SELECT `id` from `user-contact` WHERE `contact`.`id` = `user-contact`.`cid` and `user-contact`.`uid` = ? and `user-contact`.`blocked`)"; + $sql_extra = " AND `id` IN (SELECT `cid` FROM `user-contact` WHERE `user-contact`.`uid` = ? AND `user-contact`.`blocked`)"; // This makes the query look for contact.uid = 0 array_unshift($sql_values, 0); break; @@ -339,7 +218,7 @@ class Contact extends BaseModule $sql_extra = " AND `hidden` AND NOT `blocked` AND NOT `pending`"; break; case 'ignored': - $sql_extra = " AND EXISTS(SELECT `id` from `user-contact` WHERE `contact`.`id` = `user-contact`.`cid` and `user-contact`.`uid` = ? and `user-contact`.`ignored`)"; + $sql_extra = " AND `id` IN (SELECT `cid` FROM `user-contact` WHERE `user-contact`.`uid` = ? AND `user-contact`.`ignored`)"; // This makes the query look for contact.uid = 0 array_unshift($sql_values, 0); break; @@ -348,8 +227,9 @@ class Contact extends BaseModule break; case 'pending': $sql_extra = " AND `pending` AND NOT `archive` AND NOT `failed` AND ((`rel` = ?) - OR EXISTS (SELECT `id` FROM `intro` WHERE `contact-id` = `contact`.`id` AND NOT `ignore`))"; + OR `id` IN (SELECT `contact-id` FROM `intro` WHERE `intro`.`uid` = ? AND NOT `ignore`))"; $sql_values[] = Model\Contact::SHARING; + $sql_values[] = DI::userSession()->getLocalUserId(); break; default: $sql_extra = " AND NOT `archive` AND NOT `blocked` AND NOT `pending`"; @@ -366,8 +246,10 @@ class Contact extends BaseModule if ($search) { $searching = true; $search_hdr = $search; - $search_txt = preg_quote($search); - $sql_extra .= " AND (name REGEXP ? OR url REGEXP ? OR nick REGEXP ?)"; + $search_txt = preg_quote(trim($search, ' @!')); + $sql_extra .= " AND (`name` REGEXP ? OR `url` REGEXP ? OR `nick` REGEXP ? OR `addr` REGEXP ? OR `alias` REGEXP ?)"; + $sql_values[] = $search_txt; + $sql_values[] = $search_txt; $sql_values[] = $search_txt; $sql_values[] = $search_txt; $sql_values[] = $search_txt; @@ -396,7 +278,7 @@ class Contact extends BaseModule } if ($group) { - $sql_extra .= " AND EXISTS(SELECT `id` FROM `group_member` WHERE `gid` = ? AND `contact`.`id` = `contact-id`)"; + $sql_extra .= " AND `id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)"; $sql_values[] = $group; } @@ -416,8 +298,8 @@ class Contact extends BaseModule $stmt = DBA::select('contact', [], $condition, ['order' => ['name'], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]]); while ($contact = DBA::fetch($stmt)) { - $contact['blocked'] = Model\Contact\User::isBlocked($contact['id'], local_user()); - $contact['readonly'] = Model\Contact\User::isIgnored($contact['id'], local_user()); + $contact['blocked'] = Model\Contact\User::isBlocked($contact['id'], DI::userSession()->getLocalUserId()); + $contact['readonly'] = Model\Contact\User::isIgnored($contact['id'], DI::userSession()->getLocalUserId()); $contacts[] = self::getContactTemplateVars($contact); } DBA::close($stmt); @@ -541,7 +423,7 @@ class Contact extends BaseModule public static function getTabsHTML(array $contact, int $active_tab) { $cid = $pcid = $contact['id']; - $data = Model\Contact::getPublicAndUserContactID($contact['id'], local_user()); + $data = Model\Contact::getPublicAndUserContactID($contact['id'], DI::userSession()->getLocalUserId()); if (!empty($data['user']) && ($contact['id'] == $data['public'])) { $cid = $data['user']; } elseif (!empty($data['public'])) { @@ -617,8 +499,8 @@ class Contact extends BaseModule { $alt_text = ''; - if (!empty($contact['url']) && isset($contact['uid']) && ($contact['uid'] == 0) && local_user()) { - $personal = Model\Contact::getByURL($contact['url'], false, ['uid', 'rel', 'self'], local_user()); + if (!empty($contact['url']) && isset($contact['uid']) && ($contact['uid'] == 0) && DI::userSession()->getLocalUserId()) { + $personal = Model\Contact::getByURL($contact['url'], false, ['uid', 'rel', 'self'], DI::userSession()->getLocalUserId()); if (!empty($personal)) { $contact['uid'] = $personal['uid']; $contact['rel'] = $personal['rel']; @@ -626,7 +508,7 @@ class Contact extends BaseModule } } - if (!empty($contact['uid']) && !empty($contact['rel']) && local_user() == $contact['uid']) { + if (!empty($contact['uid']) && !empty($contact['rel']) && DI::userSession()->getLocalUserId() == $contact['uid']) { switch ($contact['rel']) { case Model\Contact::FRIEND: $alt_text = DI::l10n()->t('Mutual Friendship'); @@ -647,7 +529,7 @@ class Contact extends BaseModule $url = Model\Contact::magicLinkByContact($contact); - if (strpos($url, 'redir/') === 0) { + if (strpos($url, 'contact/redir/') === 0) { $sparkle = ' class="sparkle" '; } else { $sparkle = ''; @@ -679,7 +561,7 @@ class Contact extends BaseModule 'details' => $contact['location'], 'tags' => $contact['keywords'], 'about' => $contact['about'], - 'account_type' => Model\Contact::getAccountType($contact), + 'account_type' => Model\Contact::getAccountType($contact['contact-type']), 'sparkle' => $sparkle, 'itemurl' => ($contact['addr'] ?? '') ?: $contact['url'], 'network' => ContactSelector::networkToName($contact['network'], $contact['url'], $contact['protocol'], $contact['gsid']),