]> git.mxchange.org Git - friendica.git/commitdiff
"Contact\User" class created
authorMichael <heluecht@pirati.ca>
Tue, 4 Aug 2020 04:47:02 +0000 (04:47 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 4 Aug 2020 04:47:02 +0000 (04:47 +0000)
mod/suggest.php
src/Core/Session.php
src/Model/Contact.php
src/Model/Contact/Relation.php
src/Model/Contact/User.php [new file with mode: 0644]
src/Model/Item.php
src/Module/Contact.php
update.php
view/theme/vier/theme.php

index 192f59d910af4792084126140f096dcf79e3363e..0965978ce04babda9db242f531a480a03db82be4 100644 (file)
@@ -39,7 +39,7 @@ function suggest_content(App $a)
        DI::page()['aside'] .= Widget::findPeople();
        DI::page()['aside'] .= Widget::follow();
 
-       $contacts = Contact::getSuggestions(local_user());
+       $contacts = Contact\Relation::getSuggestions(local_user());
        if (!DBA::isResult($contacts)) {
                return DI::l10n()->t('No suggestions available. If this is a new site, please try again in 24 hours.');
        }
index f08c68ed0829f2de24643ddcbffc2f8b0e1b98e7..767dcb513ff267584cd252f5cdce5e031c1a5e7b 100644 (file)
@@ -111,7 +111,7 @@ class Session
 
                $remote_contacts = DBA::select('contact', ['id', 'uid'], ['nurl' => Strings::normaliseLink($session->get('my_url')), 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'self' => false]);
                while ($contact = DBA::fetch($remote_contacts)) {
-                       if (($contact['uid'] == 0) || Contact::isBlockedByUser($contact['id'], $contact['uid'])) {
+                       if (($contact['uid'] == 0) || Contact\User::isBlocked($contact['id'], $contact['uid'])) {
                                continue;
                        }
 
index 3bd826945f87815cda558976612b6e8ae3b23c96..08cde31eeb16614ec0937495792a8cb36bfee746 100644 (file)
@@ -306,7 +306,7 @@ class Contact
         */
        public static function isFollower($cid, $uid)
        {
-               if (self::isBlockedByUser($cid, $uid)) {
+               if (Contact\User::isBlocked($cid, $uid)) {
                        return false;
                }
 
@@ -352,7 +352,7 @@ class Contact
         */
        public static function isSharing($cid, $uid)
        {
-               if (self::isBlockedByUser($cid, $uid)) {
+               if (Contact\User::isBlocked($cid, $uid)) {
                        return false;
                }
 
@@ -537,179 +537,6 @@ class Contact
                }
        }
 
-       /**
-        * Block contact id for user id
-        *
-        * @param int     $cid     Either public contact id or user's contact id
-        * @param int     $uid     User ID
-        * @param boolean $blocked Is the contact blocked or unblocked?
-        * @throws \Exception
-        */
-       public static function setBlockedForUser($cid, $uid, $blocked)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               if ($cdata['user'] != 0) {
-                       DBA::update('contact', ['blocked' => $blocked], ['id' => $cdata['user'], 'pending' => false]);
-               }
-
-               DBA::update('user-contact', ['blocked' => $blocked], ['cid' => $cdata['public'], 'uid' => $uid], true);
-       }
-
-       /**
-        * Returns "block" state for contact id and user id
-        *
-        * @param int $cid Either public contact id or user's contact id
-        * @param int $uid User ID
-        *
-        * @return boolean is the contact id blocked for the given user?
-        * @throws \Exception
-        */
-       public static function isBlockedByUser($cid, $uid)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               $public_blocked = false;
-
-               if (!empty($cdata['public'])) {
-                       $public_contact = DBA::selectFirst('user-contact', ['blocked'], ['cid' => $cdata['public'], 'uid' => $uid]);
-                       if (DBA::isResult($public_contact)) {
-                               $public_blocked = $public_contact['blocked'];
-                       }
-               }
-
-               $user_blocked = $public_blocked;
-
-               if (!empty($cdata['user'])) {
-                       $user_contact = DBA::selectFirst('contact', ['blocked'], ['id' => $cdata['user'], 'pending' => false]);
-                       if (DBA::isResult($user_contact)) {
-                               $user_blocked = $user_contact['blocked'];
-                       }
-               }
-
-               if ($user_blocked != $public_blocked) {
-                       DBA::update('user-contact', ['blocked' => $user_blocked], ['cid' => $cdata['public'], 'uid' => $uid], true);
-               }
-
-               return $user_blocked;
-       }
-
-       /**
-        * Ignore contact id for user id
-        *
-        * @param int     $cid     Either public contact id or user's contact id
-        * @param int     $uid     User ID
-        * @param boolean $ignored Is the contact ignored or unignored?
-        * @throws \Exception
-        */
-       public static function setIgnoredForUser($cid, $uid, $ignored)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               if ($cdata['user'] != 0) {
-                       DBA::update('contact', ['readonly' => $ignored], ['id' => $cdata['user'], 'pending' => false]);
-               }
-
-               DBA::update('user-contact', ['ignored' => $ignored], ['cid' => $cdata['public'], 'uid' => $uid], true);
-       }
-
-       /**
-        * Returns "ignore" state for contact id and user id
-        *
-        * @param int $cid Either public contact id or user's contact id
-        * @param int $uid User ID
-        *
-        * @return boolean is the contact id ignored for the given user?
-        * @throws \Exception
-        */
-       public static function isIgnoredByUser($cid, $uid)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               $public_ignored = false;
-
-               if (!empty($cdata['public'])) {
-                       $public_contact = DBA::selectFirst('user-contact', ['ignored'], ['cid' => $cdata['public'], 'uid' => $uid]);
-                       if (DBA::isResult($public_contact)) {
-                               $public_ignored = $public_contact['ignored'];
-                       }
-               }
-
-               $user_ignored = $public_ignored;
-
-               if (!empty($cdata['user'])) {
-                       $user_contact = DBA::selectFirst('contact', ['readonly'], ['id' => $cdata['user'], 'pending' => false]);
-                       if (DBA::isResult($user_contact)) {
-                               $user_ignored = $user_contact['readonly'];
-                       }
-               }
-
-               if ($user_ignored != $public_ignored) {
-                       DBA::update('user-contact', ['ignored' => $user_ignored], ['cid' => $cdata['public'], 'uid' => $uid], true);
-               }
-
-               return $user_ignored;
-       }
-
-       /**
-        * Set "collapsed" for contact id and user id
-        *
-        * @param int     $cid       Either public contact id or user's contact id
-        * @param int     $uid       User ID
-        * @param boolean $collapsed are the contact's posts collapsed or uncollapsed?
-        * @throws \Exception
-        */
-       public static function setCollapsedForUser($cid, $uid, $collapsed)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               DBA::update('user-contact', ['collapsed' => $collapsed], ['cid' => $cdata['public'], 'uid' => $uid], true);
-       }
-
-       /**
-        * Returns "collapsed" state for contact id and user id
-        *
-        * @param int $cid Either public contact id or user's contact id
-        * @param int $uid User ID
-        *
-        * @return boolean is the contact id blocked for the given user?
-        * @throws HTTPException\InternalServerErrorException
-        * @throws \ImagickException
-        */
-       public static function isCollapsedByUser($cid, $uid)
-       {
-               $cdata = self::getPublicAndUserContacID($cid, $uid);
-               if (empty($cdata)) {
-                       return;
-               }
-
-               $collapsed = false;
-
-               if (!empty($cdata['public'])) {
-                       $public_contact = DBA::selectFirst('user-contact', ['collapsed'], ['cid' => $cdata['public'], 'uid' => $uid]);
-                       if (DBA::isResult($public_contact)) {
-                               $collapsed = $public_contact['collapsed'];
-                       }
-               }
-
-               return $collapsed;
-       }
-
        /**
         * Returns a list of contacts belonging in a group
         *
@@ -2588,7 +2415,7 @@ class Contact
 
                        // Contact is blocked at user-level
                        if (!empty($contact['id']) && !empty($importer['id']) &&
-                               self::isBlockedByUser($contact['id'], $importer['id'])) {
+                               Contact\User::isBlocked($contact['id'], $importer['id'])) {
                                return false;
                        }
 
@@ -2952,110 +2779,6 @@ class Contact
                return $contacts;
        }
 
-       /**
-        * @param int $uid   user
-        * @param int $start optional, default 0
-        * @param int $limit optional, default 80
-        * @return array
-        */
-       static public function getSuggestions(int $uid, int $start = 0, int $limit = 80)
-       {
-               $cid = self::getPublicIdByUserId($uid);
-               $totallimit = $start + $limit;
-               $contacts = [];
-
-               Logger::info('Collecting suggestions', ['uid' => $uid, 'cid' => $cid, 'start' => $start, 'limit' => $limit]);
-
-               $diaspora = DI::config()->get('system', 'diaspora_enabled') ? Protocol::DIASPORA : Protocol::ACTIVITYPUB;
-               $ostatus = !DI::config()->get('system', 'ostatus_disabled') ? Protocol::OSTATUS : Protocol::ACTIVITYPUB;
-
-               // The query returns contacts where contacts interacted with whom the given user follows.
-               // Contacts who already are in the user's contact table are ignored.
-               $results = DBA::select('contact', [],
-                       ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
-                               (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ?)
-                                       AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
-                                               (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
-                       AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
-                       $cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
-                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
-                       ['order' => ['last-item' => true], 'limit' => $totallimit]
-               );
-
-               while ($contact = DBA::fetch($results)) {
-                       $contacts[$contact['id']] = $contact;
-               }
-               DBA::close($results);
-
-               Logger::info('Contacts of contacts who are followed by the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
-
-               if (count($contacts) >= $totallimit) {
-                       return array_slice($contacts, $start, $limit);
-               }
-
-               // The query returns contacts where contacts interacted with whom also interacted with the given user.
-               // Contacts who already are in the user's contact table are ignored.
-               $results = DBA::select('contact', [],
-                       ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
-                               (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ?)
-                                       AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
-                                               (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
-                       AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
-                       $cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
-                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
-                       ['order' => ['last-item' => true], 'limit' => $totallimit]
-               );
-
-               while ($contact = DBA::fetch($results)) {
-                       $contacts[$contact['id']] = $contact;
-               }
-               DBA::close($results);
-
-               Logger::info('Contacts of contacts who are following the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
-
-               if (count($contacts) >= $totallimit) {
-                       return array_slice($contacts, $start, $limit);
-               }
-
-               // The query returns contacts that follow the given user but aren't followed by that user.
-               $results = DBA::select('contact', [],
-                       ["`nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` = ?)
-                       AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
-                       $uid, Contact::FOLLOWER, 0, 
-                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
-                       ['order' => ['last-item' => true], 'limit' => $totallimit]
-               );
-
-               while ($contact = DBA::fetch($results)) {
-                       $contacts[$contact['id']] = $contact;
-               }
-               DBA::close($results);
-
-               Logger::info('Followers that are not followed by the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
-
-               if (count($contacts) >= $totallimit) {
-                       return array_slice($contacts, $start, $limit);
-               }
-
-               // The query returns any contact that isn't followed by that user.
-               $results = DBA::select('contact', [],
-                       ["NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))
-                       AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
-                       $uid, Contact::FRIEND, Contact::SHARING, 0, 
-                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
-                       ['order' => ['last-item' => true], 'limit' => $totallimit]
-               );
-
-               while ($contact = DBA::fetch($results)) {
-                       $contacts[$contact['id']] = $contact;
-               }
-               DBA::close($results);
-
-               Logger::info('Any contact', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
-
-               return array_slice($contacts, $start, $limit);
-       }
-
        /**
         * Add public contacts from an array
         *
index b6e612c7d8bd9f779610cbc3366b434c2b3bcd3e..a5bd0e9b7dfd7e858dd832f9278219d04218b88f 100644 (file)
@@ -209,6 +209,110 @@ class Relation
                return true;
        }
 
+       /**
+        * @param int $uid   user
+        * @param int $start optional, default 0
+        * @param int $limit optional, default 80
+        * @return array
+        */
+       static public function getSuggestions(int $uid, int $start = 0, int $limit = 80)
+       {
+               $cid = Contact::getPublicIdByUserId($uid);
+               $totallimit = $start + $limit;
+               $contacts = [];
+
+               Logger::info('Collecting suggestions', ['uid' => $uid, 'cid' => $cid, 'start' => $start, 'limit' => $limit]);
+
+               $diaspora = DI::config()->get('system', 'diaspora_enabled') ? Protocol::DIASPORA : Protocol::ACTIVITYPUB;
+               $ostatus = !DI::config()->get('system', 'ostatus_disabled') ? Protocol::OSTATUS : Protocol::ACTIVITYPUB;
+
+               // The query returns contacts where contacts interacted with whom the given user follows.
+               // Contacts who already are in the user's contact table are ignored.
+               $results = DBA::select('contact', [],
+                       ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
+                               (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ?)
+                                       AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
+                                               (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
+                       AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
+                       $cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
+                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
+                       ['order' => ['last-item' => true], 'limit' => $totallimit]
+               );
+
+               while ($contact = DBA::fetch($results)) {
+                       $contacts[$contact['id']] = $contact;
+               }
+               DBA::close($results);
+
+               Logger::info('Contacts of contacts who are followed by the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
+
+               if (count($contacts) >= $totallimit) {
+                       return array_slice($contacts, $start, $limit);
+               }
+
+               // The query returns contacts where contacts interacted with whom also interacted with the given user.
+               // Contacts who already are in the user's contact table are ignored.
+               $results = DBA::select('contact', [],
+                       ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN
+                               (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ?)
+                                       AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN
+                                               (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))))
+                       AND NOT `hidden` AND `network` IN (?, ?, ?, ?)",
+                       $cid, 0, $uid, Contact::FRIEND, Contact::SHARING,
+                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
+                       ['order' => ['last-item' => true], 'limit' => $totallimit]
+               );
+
+               while ($contact = DBA::fetch($results)) {
+                       $contacts[$contact['id']] = $contact;
+               }
+               DBA::close($results);
+
+               Logger::info('Contacts of contacts who are following the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
+
+               if (count($contacts) >= $totallimit) {
+                       return array_slice($contacts, $start, $limit);
+               }
+
+               // The query returns contacts that follow the given user but aren't followed by that user.
+               $results = DBA::select('contact', [],
+                       ["`nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` = ?)
+                       AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
+                       $uid, Contact::FOLLOWER, 0, 
+                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
+                       ['order' => ['last-item' => true], 'limit' => $totallimit]
+               );
+
+               while ($contact = DBA::fetch($results)) {
+                       $contacts[$contact['id']] = $contact;
+               }
+               DBA::close($results);
+
+               Logger::info('Followers that are not followed by the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
+
+               if (count($contacts) >= $totallimit) {
+                       return array_slice($contacts, $start, $limit);
+               }
+
+               // The query returns any contact that isn't followed by that user.
+               $results = DBA::select('contact', [],
+                       ["NOT `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?))
+                       AND NOT `hidden` AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
+                       $uid, Contact::FRIEND, Contact::SHARING, 0, 
+                       Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus],
+                       ['order' => ['last-item' => true], 'limit' => $totallimit]
+               );
+
+               while ($contact = DBA::fetch($results)) {
+                       $contacts[$contact['id']] = $contact;
+               }
+               DBA::close($results);
+
+               Logger::info('Any contact', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]);
+
+               return array_slice($contacts, $start, $limit);
+       }
+
        /**
         * Counts all the known follows of the provided public contact
         *
diff --git a/src/Model/Contact/User.php b/src/Model/Contact/User.php
new file mode 100644 (file)
index 0000000..34a3d6f
--- /dev/null
@@ -0,0 +1,204 @@
+<?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Model\Contact;
+
+use Friendica\Database\DBA;
+use Friendica\Model\Contact;
+
+/**
+ * This class provides information about user related contacts based on the "user-contact" table.
+ */
+class User
+{
+       /**
+        * Block contact id for user id
+        *
+        * @param int     $cid     Either public contact id or user's contact id
+        * @param int     $uid     User ID
+        * @param boolean $blocked Is the contact blocked or unblocked?
+        * @throws \Exception
+        */
+       public static function setBlocked($cid, $uid, $blocked)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               if ($cdata['user'] != 0) {
+                       DBA::update('contact', ['blocked' => $blocked], ['id' => $cdata['user'], 'pending' => false]);
+               }
+
+               DBA::update('user-contact', ['blocked' => $blocked], ['cid' => $cdata['public'], 'uid' => $uid], true);
+       }
+
+       /**
+        * Returns "block" state for contact id and user id
+        *
+        * @param int $cid Either public contact id or user's contact id
+        * @param int $uid User ID
+        *
+        * @return boolean is the contact id blocked for the given user?
+        * @throws \Exception
+        */
+       public static function isBlocked($cid, $uid)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               $public_blocked = false;
+
+               if (!empty($cdata['public'])) {
+                       $public_contact = DBA::selectFirst('user-contact', ['blocked'], ['cid' => $cdata['public'], 'uid' => $uid]);
+                       if (DBA::isResult($public_contact)) {
+                               $public_blocked = $public_contact['blocked'];
+                       }
+               }
+
+               $user_blocked = $public_blocked;
+
+               if (!empty($cdata['user'])) {
+                       $user_contact = DBA::selectFirst('contact', ['blocked'], ['id' => $cdata['user'], 'pending' => false]);
+                       if (DBA::isResult($user_contact)) {
+                               $user_blocked = $user_contact['blocked'];
+                       }
+               }
+
+               if ($user_blocked != $public_blocked) {
+                       DBA::update('user-contact', ['blocked' => $user_blocked], ['cid' => $cdata['public'], 'uid' => $uid], true);
+               }
+
+               return $user_blocked;
+       }
+
+       /**
+        * Ignore contact id for user id
+        *
+        * @param int     $cid     Either public contact id or user's contact id
+        * @param int     $uid     User ID
+        * @param boolean $ignored Is the contact ignored or unignored?
+        * @throws \Exception
+        */
+       public static function setIgnored($cid, $uid, $ignored)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               if ($cdata['user'] != 0) {
+                       DBA::update('contact', ['readonly' => $ignored], ['id' => $cdata['user'], 'pending' => false]);
+               }
+
+               DBA::update('user-contact', ['ignored' => $ignored], ['cid' => $cdata['public'], 'uid' => $uid], true);
+       }
+
+       /**
+        * Returns "ignore" state for contact id and user id
+        *
+        * @param int $cid Either public contact id or user's contact id
+        * @param int $uid User ID
+        *
+        * @return boolean is the contact id ignored for the given user?
+        * @throws \Exception
+        */
+       public static function isIgnored($cid, $uid)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               $public_ignored = false;
+
+               if (!empty($cdata['public'])) {
+                       $public_contact = DBA::selectFirst('user-contact', ['ignored'], ['cid' => $cdata['public'], 'uid' => $uid]);
+                       if (DBA::isResult($public_contact)) {
+                               $public_ignored = $public_contact['ignored'];
+                       }
+               }
+
+               $user_ignored = $public_ignored;
+
+               if (!empty($cdata['user'])) {
+                       $user_contact = DBA::selectFirst('contact', ['readonly'], ['id' => $cdata['user'], 'pending' => false]);
+                       if (DBA::isResult($user_contact)) {
+                               $user_ignored = $user_contact['readonly'];
+                       }
+               }
+
+               if ($user_ignored != $public_ignored) {
+                       DBA::update('user-contact', ['ignored' => $user_ignored], ['cid' => $cdata['public'], 'uid' => $uid], true);
+               }
+
+               return $user_ignored;
+       }
+
+       /**
+        * Set "collapsed" for contact id and user id
+        *
+        * @param int     $cid       Either public contact id or user's contact id
+        * @param int     $uid       User ID
+        * @param boolean $collapsed are the contact's posts collapsed or uncollapsed?
+        * @throws \Exception
+        */
+       public static function setCollapsed($cid, $uid, $collapsed)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               DBA::update('user-contact', ['collapsed' => $collapsed], ['cid' => $cdata['public'], 'uid' => $uid], true);
+       }
+
+       /**
+        * Returns "collapsed" state for contact id and user id
+        *
+        * @param int $cid Either public contact id or user's contact id
+        * @param int $uid User ID
+        *
+        * @return boolean is the contact id blocked for the given user?
+        * @throws HTTPException\InternalServerErrorException
+        * @throws \ImagickException
+        */
+       public static function isCollapsed($cid, $uid)
+       {
+               $cdata = Contact::getPublicAndUserContacID($cid, $uid);
+               if (empty($cdata)) {
+                       return;
+               }
+
+               $collapsed = false;
+
+               if (!empty($cdata['public'])) {
+                       $public_contact = DBA::selectFirst('user-contact', ['collapsed'], ['cid' => $cdata['public'], 'uid' => $uid]);
+                       if (DBA::isResult($public_contact)) {
+                               $collapsed = $public_contact['collapsed'];
+                       }
+               }
+
+               return $collapsed;
+       }
+}
index 54cd4a5db66f64ca8c6279b503540842dbad6a0d..0a1038049b0667b4ba8dc8f5c69f1796de44a329 100644 (file)
@@ -1394,7 +1394,7 @@ class Item
                        return false;
                }
 
-               if (!empty($item['uid']) && Contact::isBlockedByUser($item['author-id'], $item['uid'])) {
+               if (!empty($item['uid']) && Contact\User::isBlocked($item['author-id'], $item['uid'])) {
                        Logger::notice('Author is blocked by user', ['author-link' => $item['author-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]);
                        return false;
                }
@@ -1409,18 +1409,18 @@ class Item
                        return false;
                }
 
-               if (!empty($item['uid']) && Contact::isBlockedByUser($item['owner-id'], $item['uid'])) {
+               if (!empty($item['uid']) && Contact\User::isBlocked($item['owner-id'], $item['uid'])) {
                        Logger::notice('Owner is blocked by user', ['owner-link' => $item['owner-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]);
                        return false;
                }
 
                // The causer is set during a thread completion, for example because of a reshare. It countains the responsible actor.
-               if (!empty($item['uid']) && !empty($item['causer-id']) && Contact::isBlockedByUser($item['causer-id'], $item['uid'])) {
+               if (!empty($item['uid']) && !empty($item['causer-id']) && Contact\User::isBlocked($item['causer-id'], $item['uid'])) {
                        Logger::notice('Causer is blocked by user', ['causer-link' => $item['causer-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]);
                        return false;
                }
 
-               if (!empty($item['uid']) && !empty($item['causer-id']) && ($item['parent-uri'] == $item['uri']) && Contact::isIgnoredByUser($item['causer-id'], $item['uid'])) {
+               if (!empty($item['uid']) && !empty($item['causer-id']) && ($item['parent-uri'] == $item['uri']) && Contact\User::isIgnored($item['causer-id'], $item['uid'])) {
                        Logger::notice('Causer is ignored by user', ['causer-link' => $item['causer-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]);
                        return false;
                }
index 7ddd5c9f4d16cecedb7e327d8d7753d618aa0f4e..dc2d4dc4ff64f59798a277a2bc9c4aa0888bf92e 100644 (file)
@@ -196,8 +196,8 @@ class Contact extends BaseModule
         */
        private static function blockContact($contact_id)
        {
-               $blocked = !Model\Contact::isBlockedByUser($contact_id, local_user());
-               Model\Contact::setBlockedForUser($contact_id, local_user(), $blocked);
+               $blocked = !Model\Contact\User::isBlocked($contact_id, local_user());
+               Model\Contact\User::setBlocked($contact_id, local_user(), $blocked);
        }
 
        /**
@@ -208,8 +208,8 @@ class Contact extends BaseModule
         */
        private static function ignoreContact($contact_id)
        {
-               $ignored = !Model\Contact::isIgnoredByUser($contact_id, local_user());
-               Model\Contact::setIgnoredForUser($contact_id, local_user(), $ignored);
+               $ignored = !Model\Contact\User::isIgnored($contact_id, local_user());
+               Model\Contact\User::setIgnored($contact_id, local_user(), $ignored);
        }
 
        /**
@@ -395,7 +395,7 @@ class Contact extends BaseModule
                        if ($cmd === 'block') {
                                self::blockContact($contact_id);
 
-                               $blocked = Model\Contact::isBlockedByUser($contact_id, 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')));
 
                                DI::baseUrl()->redirect('contact/' . $contact_id);
@@ -405,7 +405,7 @@ class Contact extends BaseModule
                        if ($cmd === 'ignore') {
                                self::ignoreContact($contact_id);
 
-                               $ignored = Model\Contact::isIgnoredByUser($contact_id, local_user());
+                               $ignored = Model\Contact\User::isIgnored($contact_id, local_user());
                                info(($ignored ? DI::l10n()->t('Contact has been ignored') : DI::l10n()->t('Contact has been unignored')));
 
                                DI::baseUrl()->redirect('contact/' . $contact_id);
@@ -479,8 +479,8 @@ class Contact extends BaseModule
                                '$baseurl' => DI::baseUrl()->get(true),
                        ]);
 
-                       $contact['blocked']  = Model\Contact::isBlockedByUser($contact['id'], local_user());
-                       $contact['readonly'] = Model\Contact::isIgnoredByUser($contact['id'], local_user());
+                       $contact['blocked']  = Model\Contact\User::isBlocked($contact['id'], local_user());
+                       $contact['readonly'] = Model\Contact\User::isIgnored($contact['id'], local_user());
 
                        $relation_text = '';
                        switch ($contact['rel']) {
@@ -738,8 +738,8 @@ class Contact extends BaseModule
                        $sql_values
                );
                while ($contact = DBA::fetch($stmt)) {
-                       $contact['blocked'] = Model\Contact::isBlockedByUser($contact['id'], local_user());
-                       $contact['readonly'] = Model\Contact::isIgnoredByUser($contact['id'], local_user());
+                       $contact['blocked'] = Model\Contact\User::isBlocked($contact['id'], local_user());
+                       $contact['readonly'] = Model\Contact\User::isIgnored($contact['id'], local_user());
                        $contacts[] = self::getContactTemplateVars($contact);
                }
                DBA::close($stmt);
index f335b5292ec9efdaf90ec1c4d06e6c50cf9c1c9b..2d25ac83d2267e22fbe669d561e392bc30b9565a 100644 (file)
@@ -376,8 +376,8 @@ function update_1327()
 {
        $contacts = DBA::select('contact', ['uid', 'id', 'blocked', 'readonly'], ["`uid` != ? AND (`blocked` OR `readonly`) AND NOT `pending`", 0]);
        while ($contact = DBA::fetch($contacts)) {
-               Contact::setBlockedForUser($contact['id'], $contact['uid'], $contact['blocked']);
-               Contact::setIgnoredForUser($contact['id'], $contact['uid'], $contact['readonly']);
+               Contact\User::setBlocked($contact['id'], $contact['uid'], $contact['blocked']);
+               Contact\User::setIgnored($contact['id'], $contact['uid'], $contact['readonly']);
        }
        DBA::close($contacts);
 
index a688d68452887dbfbdd006dbaf548d0a6e7747bd..c6441652465982ce8ecd088dfd901ab52e885080 100644 (file)
@@ -117,7 +117,7 @@ function vier_community_info()
 
        // comunity_profiles
        if ($show_profiles) {
-               $contacts = Contact::getSuggestions(local_user(), 0, 9);
+               $contacts = Contact\Relation::getSuggestions(local_user(), 0, 9);
 
                $tpl = Renderer::getMarkupTemplate('ch_directory_item.tpl');
                if (DBA::isResult($contacts)) {