Browse Source

"Contact\User" class created

pull/8970/head
Michael 12 months ago
parent
commit
a7d75702cc
9 changed files with 330 additions and 299 deletions
  1. +1
    -1
      mod/suggest.php
  2. +1
    -1
      src/Core/Session.php
  3. +3
    -280
      src/Model/Contact.php
  4. +104
    -0
      src/Model/Contact/Relation.php
  5. +204
    -0
      src/Model/Contact/User.php
  6. +4
    -4
      src/Model/Item.php
  7. +10
    -10
      src/Module/Contact.php
  8. +2
    -2
      update.php
  9. +1
    -1
      view/theme/vier/theme.php

+ 1
- 1
mod/suggest.php View 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.');
}


+ 1
- 1
src/Core/Session.php View 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;
}


+ 3
- 280
src/Model/Contact.php View 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
*


+ 104
- 0
src/Model/Contact/Relation.php View 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
*


+ 204
- 0
src/Model/Contact/User.php View File

@ -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;
}
}

+ 4
- 4
src/Model/Item.php View 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;
}


+ 10
- 10
src/Module/Contact.php View 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);


+ 2
- 2
update.php View 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);


+ 1
- 1
view/theme/vier/theme.php View 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)) {


Loading…
Cancel
Save