<?php
/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
use Friendica\Content\ContactSelector;
use Friendica\Content\Nav;
use Friendica\Content\Pager;
-use Friendica\Content\Text\BBCode;
use Friendica\Content\Widget;
-use Friendica\Core\Hook;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Theme;
use Friendica\Model;
use Friendica\Model\User;
use Friendica\Module\Security\Login;
-use Friendica\Network\HTTPException\BadRequestException;
use Friendica\Network\HTTPException\NotFoundException;
-use Friendica\Util\DateTimeFormat;
-use Friendica\Util\Strings;
/**
* Manages and show Contacts and their content
self::checkFormSecurityTokenRedirectOnError($redirectUrl, 'contact_batch_actions');
- $orig_records = Model\Contact::selectToArray(['id', 'uid'], ['id' => $_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;
}
}
if (!empty($_POST['contacts_batch_block'])) {
- self::toggleBlockContact($cdata['public'], local_user());
+ self::toggleBlockContact($cdata['public'], DI::userSession()->getLocalUserId());
$count_actions++;
}
}
}
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;
}
* @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;
}
}
// 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.
*
*/
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']);
}
$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();
}
+ $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 . $account_widget . $groups_widget . $networks_widget . $rel_widget;
$tpl = Renderer::getMarkupTemplate('contacts-head.tpl');
$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;
$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;
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`";
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;
}
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;
}
$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);
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'])) {
{
$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'];
}
}
- 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');
'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']),