X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FContact.php;h=769bb82b3160f071bba899514e142c9217c39ec3;hb=6cbfa5b862ce7a241fd4339129749f87dc19760c;hp=0b27f0e4a37d1a20a3d222174778743fbd5f3897;hpb=91b0f0465f350a649b998647b949cfaeb374b577;p=friendica.git diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 0b27f0e4a3..769bb82b31 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -14,13 +14,13 @@ use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Model; +use Friendica\Module\Security\Login; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Network\HTTPException\NotFoundException; -use Friendica\Network\Probe; use Friendica\Util\DateTimeFormat; use Friendica\Util\Proxy as ProxyUtils; use Friendica\Util\Strings; @@ -32,7 +32,7 @@ use Friendica\Util\Strings; */ class Contact extends BaseModule { - private static function batchActions(App $a) + private static function batchActions() { if (empty($_POST['contact_batch']) || !is_array($_POST['contact_batch'])) { return; @@ -72,12 +72,12 @@ class Contact extends BaseModule info(L10n::tt('%d contact edited.', '%d contacts edited.', $count_actions)); } - $a->internalRedirect('contact'); + DI::baseUrl()->redirect('contact'); } - public static function post() + public static function post(array $parameters = []) { - $a = self::getApp(); + $a = DI::app(); if (!local_user()) { return; @@ -85,7 +85,7 @@ class Contact extends BaseModule // @TODO: Replace with parameter from router if ($a->argv[1] === 'batch') { - self::batchActions($a); + self::batchActions(); return; } @@ -97,13 +97,13 @@ class Contact extends BaseModule if (!DBA::exists('contact', ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false])) { notice(L10n::t('Could not access contact record.') . EOL); - $a->internalRedirect('contact'); + DI::baseUrl()->redirect('contact'); return; // NOTREACHED } Hook::callAll('contact_edit_post', $_POST); - $profile_id = intval(defaults($_POST, 'profile-assign', 0)); + $profile_id = intval($_POST['profile-assign'] ?? 0); if ($profile_id) { if (!DBA::exists('profile', ['id' => $profile_id, 'uid' => local_user()])) { notice(L10n::t('Could not locate selected profile.') . EOL); @@ -115,16 +115,16 @@ class Contact extends BaseModule $notify = !empty($_POST['notify']); - $fetch_further_information = intval(defaults($_POST, 'fetch_further_information', 0)); + $fetch_further_information = intval($_POST['fetch_further_information'] ?? 0); - $ffi_keyword_blacklist = Strings::escapeHtml(trim(defaults($_POST, 'ffi_keyword_blacklist', ''))); + $ffi_keyword_blacklist = Strings::escapeHtml(trim($_POST['ffi_keyword_blacklist'] ?? '')); - $priority = intval(defaults($_POST, 'poll', 0)); + $priority = intval($_POST['poll'] ?? 0); if ($priority > 5 || $priority < 0) { $priority = 0; } - $info = Strings::escapeHtml(trim(defaults($_POST, 'info', ''))); + $info = Strings::escapeHtml(trim($_POST['info'] ?? '')); $r = DBA::update('contact', [ 'profile-id' => $profile_id, @@ -188,21 +188,42 @@ class Contact extends BaseModule Model\GContact::updateFromProbe($contact['url']); } + /** + * Toggles the blocked status of a contact identified by id. + * + * @param $contact_id + * @throws \Exception + */ private static function blockContact($contact_id) { $blocked = !Model\Contact::isBlockedByUser($contact_id, local_user()); Model\Contact::setBlockedForUser($contact_id, local_user(), $blocked); } + /** + * Toggles the ignored status of a contact identified by id. + * + * @param $contact_id + * @throws \Exception + */ private static function ignoreContact($contact_id) { $ignored = !Model\Contact::isIgnoredByUser($contact_id, local_user()); Model\Contact::setIgnoredForUser($contact_id, local_user(), $ignored); } + /** + * Toggles the archived status of a contact identified by id. + * If the current status isn't provided, this will always archive the contact. + * + * @param $contact_id + * @param $orig_record + * @return bool + * @throws \Exception + */ private static function archiveContact($contact_id, $orig_record) { - $archived = (defaults($orig_record, 'archive', '') ? 0 : 1); + $archived = empty($orig_record['archive']); $r = DBA::update('contact', ['archive' => $archived], ['id' => $contact_id, 'uid' => local_user()]); return DBA::isResult($r); @@ -219,19 +240,19 @@ class Contact extends BaseModule Model\Contact::remove($orig_record['id']); } - public static function content($update = 0) + public static function content(array $parameters = [], $update = 0) { if (!local_user()) { return Login::form($_SERVER['REQUEST_URI']); } - $a = self::getApp(); + $a = DI::app(); - $nets = defaults($_GET, 'nets', ''); - $rel = defaults($_GET, 'rel' , ''); + $nets = $_GET['nets'] ?? ''; + $rel = $_GET['rel'] ?? ''; - if (empty($a->page['aside'])) { - $a->page['aside'] = ''; + if (empty(DI::page()['aside'])) { + DI::page()['aside'] = ''; } $contact_id = null; @@ -257,9 +278,9 @@ class Contact extends BaseModule if ($contact['self']) { // @TODO: Replace with parameter from router if (($a->argc == 3) && intval($a->argv[1]) && in_array($a->argv[2], ['posts', 'conversations'])) { - $a->internalRedirect('profile/' . $contact['nick']); + DI::baseUrl()->redirect('profile/' . $contact['nick']); } else { - $a->internalRedirect('profile/' . $contact['nick'] . '?tab=profile'); + DI::baseUrl()->redirect('profile/' . $contact['nick'] . '?tab=profile'); } } @@ -290,7 +311,7 @@ class Contact extends BaseModule '$name' => $contact['name'], '$photo' => $contact['photo'], '$url' => Model\Contact::magicLinkByContact($contact, $contact['url']), - '$addr' => defaults($contact, 'addr', ''), + '$addr' => $contact['addr'] ?? '', '$network_link' => $network_link, '$network' => L10n::t('Network:'), '$account_type' => Model\Contact::getAccountType($contact), @@ -325,11 +346,11 @@ class Contact extends BaseModule $groups_widget = null; } - $a->page['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $groups_widget . $networks_widget . $rel_widget; + DI::page()['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $groups_widget . $networks_widget . $rel_widget; $tpl = Renderer::getMarkupTemplate('contacts-head.tpl'); - $a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => $a->getBaseURL(true), + DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ + '$baseurl' => DI::baseUrl()->get(true), ]); $sort_type = 0; @@ -357,13 +378,13 @@ class Contact extends BaseModule if ($cmd === 'update' && ($orig_record['uid'] != 0)) { self::updateContactFromPoll($contact_id); - $a->internalRedirect('contact/' . $contact_id); + DI::baseUrl()->redirect('contact/' . $contact_id); // NOTREACHED } if ($cmd === 'updateprofile' && ($orig_record['uid'] != 0)) { self::updateContactFromProbe($contact_id); - $a->internalRedirect('crepair/' . $contact_id); + DI::baseUrl()->redirect('crepair/' . $contact_id); // NOTREACHED } @@ -373,7 +394,7 @@ class Contact extends BaseModule $blocked = Model\Contact::isBlockedByUser($contact_id, local_user()); info(($blocked ? L10n::t('Contact has been blocked') : L10n::t('Contact has been unblocked')) . EOL); - $a->internalRedirect('contact/' . $contact_id); + DI::baseUrl()->redirect('contact/' . $contact_id); // NOTREACHED } @@ -383,7 +404,7 @@ class Contact extends BaseModule $ignored = Model\Contact::isIgnoredByUser($contact_id, local_user()); info(($ignored ? L10n::t('Contact has been ignored') : L10n::t('Contact has been unignored')) . EOL); - $a->internalRedirect('contact/' . $contact_id); + DI::baseUrl()->redirect('contact/' . $contact_id); // NOTREACHED } @@ -394,7 +415,7 @@ class Contact extends BaseModule info((($archived) ? L10n::t('Contact has been archived') : L10n::t('Contact has been unarchived')) . EOL); } - $a->internalRedirect('contact/' . $contact_id); + DI::baseUrl()->redirect('contact/' . $contact_id); // NOTREACHED } @@ -403,7 +424,7 @@ class Contact extends BaseModule if (!empty($_REQUEST['confirm'])) { //
can't take arguments in its 'action' parameter // so add any arguments as hidden inputs - $query = explode_querystring($a->query_string); + $query = explode_querystring(DI::args()->getQueryString()); $inputs = []; foreach ($query['args'] as $arg) { if (strpos($arg, 'confirm=') === false) { @@ -412,7 +433,7 @@ class Contact extends BaseModule } } - $a->page['aside'] = ''; + DI::page()['aside'] = ''; return Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_drop_confirm.tpl'), [ '$header' => L10n::t('Drop contact'), @@ -428,13 +449,13 @@ class Contact extends BaseModule } // Now check how the user responded to the confirmation query if (!empty($_REQUEST['canceled'])) { - $a->internalRedirect('contact'); + DI::baseUrl()->redirect('contact'); } self::dropContact($orig_record); info(L10n::t('Contact has been removed.') . EOL); - $a->internalRedirect('contact'); + DI::baseUrl()->redirect('contact'); // NOTREACHED } if ($cmd === 'posts') { @@ -445,13 +466,13 @@ class Contact extends BaseModule } } - $_SESSION['return_path'] = $a->query_string; + $_SESSION['return_path'] = DI::args()->getQueryString(); if (!empty($a->data['contact']) && is_array($a->data['contact'])) { $contact = $a->data['contact']; - $a->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_head.tpl'), [ - '$baseurl' => $a->getBaseURL(true), + DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_head.tpl'), [ + '$baseurl' => DI::baseUrl()->get(true), ]); $contact['blocked'] = Model\Contact::isBlockedByUser($contact['id'], local_user()); @@ -507,7 +528,7 @@ class Contact extends BaseModule $poll_enabled = in_array($contact['network'], [Protocol::DFRN, Protocol::OSTATUS, Protocol::FEED, Protocol::MAIL]); - $nettype = L10n::t('Network type: %s', ContactSelector::networkToName($contact['network'], $contact['url'])); + $nettype = L10n::t('Network type: %s', ContactSelector::networkToName($contact['network'], $contact['url'], $contact['protocol'])); // tabs $tab_str = self::getTabsHTML($a, $contact, 3); @@ -625,21 +646,25 @@ class Contact extends BaseModule return $arr['output']; } + $select_uid = local_user(); + // @TODO: Replace with parameter from router - $type = defaults($a->argv, 1, ''); + $type = $a->argv[1] ?? ''; switch ($type) { case 'blocked': - $sql_extra = " AND `blocked`"; + $sql_extra = sprintf(" AND EXISTS(SELECT `id` from `user-contact` WHERE `contact`.`id` = `user-contact`.`cid` and `user-contact`.`uid` = %d and `user-contact`.`blocked`)", intval(local_user())); + $select_uid = 0; break; case 'hidden': - $sql_extra = " AND `hidden` AND NOT `blocked`"; + $sql_extra = " AND `hidden` AND NOT `blocked` AND NOT `pending`"; break; case 'ignored': - $sql_extra = " AND `readonly` AND NOT `blocked`"; + $sql_extra = sprintf(" AND EXISTS(SELECT `id` from `user-contact` WHERE `contact`.`id` = `user-contact`.`cid` and `user-contact`.`uid` = %d and `user-contact`.`ignored`)", intval(local_user())); + $select_uid = 0; break; case 'archived': - $sql_extra = " AND `archive` AND NOT `blocked`"; + $sql_extra = " AND `archive` AND NOT `blocked` AND NOT `pending`"; break; case 'pending': $sql_extra = sprintf(" AND `pending` AND NOT `archive` AND ((`rel` = %d) @@ -651,9 +676,9 @@ class Contact extends BaseModule $sql_extra .= sprintf(" AND `network` != '%s' ", Protocol::PHANTOM); - $search = Strings::escapeTags(trim(defaults($_GET, 'search', ''))); - $nets = Strings::escapeTags(trim(defaults($_GET, 'nets' , ''))); - $rel = Strings::escapeTags(trim(defaults($_GET, 'rel' , ''))); + $search = Strings::escapeTags(trim($_GET['search'] ?? '')); + $nets = Strings::escapeTags(trim($_GET['nets'] ?? '')); + $rel = Strings::escapeTags(trim($_GET['rel'] ?? '')); $tabs = [ [ @@ -741,21 +766,21 @@ class Contact extends BaseModule $sql_extra2 = ((($sort_type > 0) && ($sort_type <= Model\Contact::FRIEND)) ? sprintf(" AND `rel` = %d ", intval($sort_type)) : ''); + $sql_extra3 = Widget::unavailableNetworks(); + $r = q("SELECT COUNT(*) AS `total` FROM `contact` - WHERE `uid` = %d AND `self` = 0 $sql_extra $sql_extra2 ", - intval($_SESSION['uid']) + WHERE `uid` = %d AND `self` = 0 $sql_extra $sql_extra2 $sql_extra3", + intval($select_uid) ); if (DBA::isResult($r)) { $total = $r[0]['total']; } - $pager = new Pager($a->query_string); - - $sql_extra3 = Widget::unavailableNetworks(); + $pager = new Pager(DI::args()->getQueryString()); $contacts = []; $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT %d , %d ", - intval($_SESSION['uid']), + intval($select_uid), $pager->getStart(), $pager->getItemsPerPage() ); @@ -793,7 +818,7 @@ class Contact extends BaseModule '$desc' => L10n::t('Search your contacts'), '$finding' => $searching ? L10n::t('Results for: %s', $search) : '', '$submit' => L10n::t('Find'), - '$cmd' => $a->cmd, + '$cmd' => DI::args()->getCommand(), '$contacts' => $contacts, '$contact_drop_confirm' => L10n::t('Do you really want to delete this contact?'), 'multiselect' => 1, @@ -905,7 +930,7 @@ class Contact extends BaseModule 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => ACL::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML(DI::page(), $a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -921,7 +946,7 @@ class Contact extends BaseModule } if (DBA::isResult($contact)) { - $a->page['aside'] = ''; + DI::page()['aside'] = ''; $profiledata = Model\Contact::getDetailsByURL($contact['url']); @@ -939,12 +964,12 @@ class Contact extends BaseModule $o = self::getTabsHTML($a, $contact, 2); if (DBA::isResult($contact)) { - $a->page['aside'] = ''; + DI::page()['aside'] = ''; $profiledata = Model\Contact::getDetailsByURL($contact['url']); if (local_user() && in_array($profiledata['network'], Protocol::FEDERATED)) { - $profiledata['remoteconnect'] = System::baseUrl() . '/follow?url=' . urlencode($profiledata['url']); + $profiledata['remoteconnect'] = DI::baseUrl() . '/follow?url=' . urlencode($profiledata['url']); } Model\Profile::load($a, '', 0, $profiledata, true); @@ -1016,9 +1041,9 @@ class Contact extends BaseModule 'username' => $rr['name'], 'account_type' => Model\Contact::getAccountType($rr), 'sparkle' => $sparkle, - 'itemurl' => defaults($rr, 'addr', $rr['url']), + 'itemurl' => ($rr['addr'] ?? '') ?: $rr['url'], 'url' => $url, - 'network' => ContactSelector::networkToName($rr['network'], $rr['url']), + 'network' => ContactSelector::networkToName($rr['network'], $rr['url'], $rr['protocol']), 'nick' => $rr['nick'], ]; }