Issue 13289: Ensure to not respect deactivated connector networks

This commit is contained in:
Michael
2023-07-22 10:49:42 +00:00
parent d84866cf8c
commit 7538f6a346
7 changed files with 95 additions and 15 deletions

View File

@@ -22,6 +22,7 @@
namespace Friendica\Model;
use Friendica\BaseModule;
use Friendica\Content\Widget;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
@@ -565,7 +566,12 @@ class Circle
}
if ($each == 'circle') {
$count = DBA::count('group_member', ['gid' => $circle['id']]);
$networks = Widget::unavailableNetworks();
$sql_values = array_merge([$circle['id']], $networks);
$condition = ["`circle-id` = ? AND NOT `contact-network` IN (" . substr(str_repeat("?, ", count($networks)), 0, -2) . ")"];
$condition = array_merge($condition, $sql_values);
$count = DBA::count('circle-member-view', $condition);
$circle_name = sprintf('%s (%d)', $circle['name'], $count);
} else {
$circle_name = $circle['name'];

View File

@@ -21,6 +21,7 @@
namespace Friendica\Model\Contact;
use Friendica\Content\Widget;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
@@ -42,6 +43,9 @@ class Circle
$return = [];
if (intval($gid)) {
$networks = Widget::unavailableNetworks();
$sql_values = array_merge([$gid, DI::userSession()->getLocalUserId()], $networks);
$stmt = DBA::p('SELECT `circle_member`.`contact-id`, `contact`.*
FROM `contact`
INNER JOIN `group_member` AS `circle_member`
@@ -52,9 +56,9 @@ class Circle
AND NOT `contact`.`deleted`
AND NOT `contact`.`blocked`
AND NOT `contact`.`pending`
AND NOT `contact`.`network` IN (' . substr(str_repeat('?, ', count($networks)), 0, -2) . ')
ORDER BY `contact`.`name` ASC',
$gid,
DI::userSession()->getLocalUserId()
$sql_values
);
if (DBA::isResult($stmt)) {
@@ -77,9 +81,14 @@ class Circle
*/
public static function listUncircled(int $uid)
{
return Contact::selectToArray([], ["`uid` = ? AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `failed`
$networks = Widget::unavailableNetworks();
$query = "`uid` = ? AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `failed`
AND NOT `network` IN (" . substr(str_repeat('?, ', count($networks)), 0, -2) . ")
AND `id` NOT IN (SELECT DISTINCT(`contact-id`) FROM `group_member` AS `circle_member` INNER JOIN `group` AS `circle` ON `circle`.`id` = `circle_member`.`gid`
WHERE `circle`.`uid` = ? AND `contact-id` = `contact`.`id`)", $uid, $uid]);
WHERE `circle`.`uid` = ? AND `contact-id` = `contact`.`id`)";
$condition = array_merge([$query], [$uid], $networks, [$uid]);
return Contact::selectToArray([], $condition);
}
/**