]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Contact.php
Merge init() and content()
[friendica.git] / src / Module / Contact.php
index 331da1281664918f1a7d167d0e85d32688344702..48bb9ba310802058e3bf5fc3db1b316539e0a0c3 100644 (file)
@@ -18,6 +18,7 @@ use Friendica\Core\System;
 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;
@@ -75,7 +76,7 @@ class Contact extends BaseModule
                $a->internalRedirect('contact');
        }
 
-       public static function post()
+       public static function post(array $parameters = [])
        {
                $a = self::getApp();
 
@@ -103,7 +104,7 @@ class Contact extends BaseModule
 
                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 +116,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 +189,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,7 +241,7 @@ 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']);
@@ -227,8 +249,8 @@ class Contact extends BaseModule
 
                $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'] = '';
@@ -290,7 +312,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),
@@ -625,25 +647,29 @@ 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 = " AND `pending` AND NOT `archive`
-                                       AND NOT EXISTS (SELECT `id` FROM `intro` WHERE `contact-id` = `contact`.`id` AND `ignore`)";
+                               $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` AND NOT `pending`";
@@ -651,9 +677,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 +767,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();
-
                $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()
                );
@@ -905,7 +931,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($a->page, $a->user, true),
                                        'bang' => '',
                                        'visitor' => 'block',
                                        'profile_uid' => local_user(),
@@ -1016,7 +1042,7 @@ 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']),
                        'nick'      => $rr['nick'],