use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\Model;
+use Friendica\Module\Security\Login;
use Friendica\Network\HTTPException\BadRequestException;
use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Network\Probe;
$a->internalRedirect('contact');
}
- public static function post()
+ public static function post(array $parameters = [])
{
$a = self::getApp();
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);
$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,
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);
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();
- $nets = defaults($_GET, 'nets', '');
- $rel = defaults($_GET, 'rel' , '');
+ $nets = $_GET['nets'] ?? '';
+ $rel = $_GET['rel'] ?? '';
if (empty($a->page['aside'])) {
$a->page['aside'] = '';
'$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),
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)
+ OR EXISTS (SELECT `id` FROM `intro` WHERE `contact-id` = `contact`.`id` AND NOT `ignore`))", Model\Contact::SHARING);
break;
default:
- $sql_extra = " AND NOT `archive` AND NOT `blocked`";
+ $sql_extra = " AND NOT `archive` AND NOT `blocked` AND NOT `pending`";
}
$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 = [
[
'id' => 'showall-tab',
'accesskey' => 'l',
],
+ [
+ 'label' => L10n::t('Pending'),
+ 'url' => 'contact/pending',
+ 'sel' => $type == 'pending' ? 'active' : '',
+ 'title' => L10n::t('Only show pending contacts'),
+ 'id' => 'showpending-tab',
+ 'accesskey' => 'p',
+ ],
[
'label' => L10n::t('Blocked'),
'url' => 'contact/blocked',
$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 AND `pending` = 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();
-
$contacts = [];
- $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT %d , %d ",
- intval($_SESSION['uid']),
+ $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($select_uid),
$pager->getStart(),
$pager->getItemsPerPage()
);
}
switch ($type) {
+ case 'pending': $header .= ' - ' . L10n::t('Pending'); break;
case 'blocked': $header .= ' - ' . L10n::t('Blocked'); break;
case 'hidden': $header .= ' - ' . L10n::t('Hidden'); break;
case 'ignored': $header .= ' - ' . L10n::t('Ignored'); break;
'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($a->page, $a->user, true),
'bang' => '',
'visitor' => 'block',
'profile_uid' => local_user(),
$sparkle = '';
}
+ if ($rr['pending']) {
+ if (in_array($rr['rel'], [Model\Contact::FRIEND, Model\Contact::SHARING])) {
+ $alt_text = L10n::t('Pending outgoing contact request');
+ } else {
+ $alt_text = L10n::t('Pending incoming contact request');
+ }
+ }
+
if ($rr['self']) {
$dir_icon = 'images/larrow.gif';
$alt_text = L10n::t('This is you');
'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']),
'nick' => $rr['nick'],