X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FSearch%2FAcl.php;h=e8b6f357d9c422280d805a922a60e4df55a28bdb;hb=dfeae25e6dd4edfd096afcb3e51d48315cba84d0;hp=15d7a23b06cbaa287cd934d08e25c70aa456dc69;hpb=9e29321aafd4ba13d5ce588a82f907f0d080dc05;p=friendica.git diff --git a/src/Module/Search/Acl.php b/src/Module/Search/Acl.php index 15d7a23b06..e8b6f357d9 100644 --- a/src/Module/Search/Acl.php +++ b/src/Module/Search/Acl.php @@ -1,19 +1,37 @@ . + * + */ namespace Friendica\Module\Search; use Friendica\BaseModule; use Friendica\Content\Widget; use Friendica\Core\Hook; -use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Search; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Network\HTTPException; -use Friendica\Util\Proxy as ProxyUtils; use Friendica\Util\Strings; /** @@ -23,22 +41,21 @@ use Friendica\Util\Strings; */ class Acl extends BaseModule { - const TYPE_GLOBAL_CONTACT = 'x'; - const TYPE_MENTION_CONTACT = 'c'; - const TYPE_MENTION_GROUP = 'g'; + const TYPE_GLOBAL_CONTACT = 'x'; + const TYPE_MENTION_CONTACT = 'c'; + const TYPE_MENTION_GROUP = 'g'; const TYPE_MENTION_CONTACT_GROUP = ''; - const TYPE_MENTION_FORUM = 'f'; - const TYPE_PRIVATE_MESSAGE = 'm'; - const TYPE_ANY_CONTACT = 'a'; + const TYPE_MENTION_FORUM = 'f'; + const TYPE_PRIVATE_MESSAGE = 'm'; + const TYPE_ANY_CONTACT = 'a'; - public static function rawContent() + public static function rawContent(array $parameters = []) { if (!local_user()) { - throw new HTTPException\UnauthorizedException(L10n::t('You must be logged in to use this module.')); + throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this module.')); } $type = $_REQUEST['type'] ?? self::TYPE_MENTION_CONTACT_GROUP; - if ($type === self::TYPE_GLOBAL_CONTACT) { $o = self::globalContactSearch(); } else { @@ -56,17 +73,17 @@ class Acl extends BaseModule $mode = $_REQUEST['smode']; $page = $_REQUEST['page'] ?? 1; - $r = Search::searchGlobalContact($search, $mode, $page); + $result = Search::searchContact($search, $mode, $page); $contacts = []; - foreach ($r as $g) { + foreach ($result as $contact) { $contacts[] = [ - 'photo' => ProxyUtils::proxifyUrl($g['photo'], false, ProxyUtils::SIZE_MICRO), - 'name' => htmlspecialchars($g['name']), - 'nick' => $g['addr'] ?: $g['url'], - 'network' => $g['network'], - 'link' => $g['url'], - 'forum' => !empty($g['community']) ? 1 : 0, + 'photo' => Contact::getMicro($contact), + 'name' => htmlspecialchars($contact['name']), + 'nick' => $contact['addr'] ?: $contact['url'], + 'network' => $contact['network'], + 'link' => $contact['url'], + 'forum' => $contact['contact-type'] == Contact::TYPE_COMMUNITY, ]; } @@ -116,45 +133,55 @@ class Acl extends BaseModule $sql_extra2 .= ' ' . Widget::unavailableNetworks(); $contact_count = 0; - if ($type == self::TYPE_MENTION_CONTACT_GROUP || $type == self::TYPE_MENTION_CONTACT) { - // autocomplete for editor mentions - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `notify` != '' $sql_extra2", - intval(local_user()) - ); - $contact_count = (int) $r[0]['c']; - } elseif ($type == self::TYPE_MENTION_FORUM) { - // autocomplete for editor mentions of forums - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND (`forum` OR `prv`) - AND `notify` != '' $sql_extra2", - intval(local_user()) - ); - $contact_count = (int) $r[0]['c']; - } elseif ($type == self::TYPE_PRIVATE_MESSAGE) { - // autocomplete for Private Messages - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `network` IN ('%s', '%s', '%s') $sql_extra2", - intval(local_user()), - DBA::escape(Protocol::ACTIVITYPUB), - DBA::escape(Protocol::DFRN), - DBA::escape(Protocol::DIASPORA) - ); - $contact_count = (int) $r[0]['c']; - } elseif ($type == self::TYPE_ANY_CONTACT) { - // autocomplete for Contacts - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `pending` AND NOT `deleted` $sql_extra2", - intval(local_user()) - ); - $contact_count = (int) $r[0]['c']; + switch ($type) { + case self::TYPE_MENTION_CONTACT_GROUP: + case self::TYPE_MENTION_CONTACT: + // autocomplete for editor mentions + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + break; + + case self::TYPE_MENTION_FORUM: + // autocomplete for editor mentions of forums + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND (`forum` OR `prv`) + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + break; + + case self::TYPE_PRIVATE_MESSAGE: + // autocomplete for Private Messages + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `network` IN ('%s', '%s', '%s') $sql_extra2", + intval(local_user()), + DBA::escape(Protocol::ACTIVITYPUB), + DBA::escape(Protocol::DFRN), + DBA::escape(Protocol::DIASPORA) + ); + $contact_count = (int) $r[0]['c']; + break; + + case self::TYPE_ANY_CONTACT: + default: + // autocomplete for Contacts + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `pending` AND NOT `deleted` $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + break; } $tot = $group_count + $contact_count; @@ -195,53 +222,64 @@ class Acl extends BaseModule } $r = []; - if ($type == self::TYPE_MENTION_CONTACT_GROUP) { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name`", - intval(local_user()), - DBA::escape(Protocol::OSTATUS), - DBA::escape(Protocol::STATUSNET) - ); - } elseif ($type == self::TYPE_MENTION_CONTACT) { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name`", - intval(local_user()), - DBA::escape(Protocol::STATUSNET) - ); - } elseif ($type == self::TYPE_MENTION_FORUM) { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name`", - intval(local_user()), - DBA::escape(Protocol::STATUSNET) - ); - } elseif ($type == self::TYPE_PRIVATE_MESSAGE) { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `network` IN ('%s', '%s', '%s') - $sql_extra2 - ORDER BY `name`", - intval(local_user()), - DBA::escape(Protocol::ACTIVITYPUB), - DBA::escape(Protocol::DFRN), - DBA::escape(Protocol::DIASPORA) - ); - } elseif ($type == self::TYPE_ANY_CONTACT) { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `deleted` AND NOT `pending` AND NOT `archive` - $sql_extra2 - ORDER BY `name`", - intval(local_user()) - ); + switch ($type) { + case self::TYPE_MENTION_CONTACT_GROUP: + $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name`", + intval(local_user()), + DBA::escape(Protocol::OSTATUS), + DBA::escape(Protocol::STATUSNET) + ); + break; + + case self::TYPE_MENTION_CONTACT: + $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name`", + intval(local_user()), + DBA::escape(Protocol::STATUSNET) + ); + break; + + case self::TYPE_MENTION_FORUM: + $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name`", + intval(local_user()), + DBA::escape(Protocol::STATUSNET) + ); + break; + + case self::TYPE_PRIVATE_MESSAGE: + $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `network` IN ('%s', '%s', '%s') + $sql_extra2 + ORDER BY `name`", + intval(local_user()), + DBA::escape(Protocol::ACTIVITYPUB), + DBA::escape(Protocol::DFRN), + DBA::escape(Protocol::DIASPORA) + ); + break; + + case self::TYPE_ANY_CONTACT: + default: + $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, `avatar` FROM `contact` + WHERE `uid` = %d AND NOT `deleted` AND NOT `pending` AND NOT `archive` + $sql_extra2 + ORDER BY `name`", + intval(local_user()) + ); + break; } if (DBA::isResult($r)) { @@ -249,13 +287,13 @@ class Acl extends BaseModule foreach ($r as $g) { $entry = [ 'type' => 'c', - 'photo' => ProxyUtils::proxifyUrl($g['micro'], false, ProxyUtils::SIZE_MICRO), + 'photo' => Contact::getMicro($g), 'name' => htmlspecialchars($g['name']), 'id' => intval($g['id']), 'network' => $g['network'], 'link' => $g['url'], - 'nick' => htmlentities(defaults($g, 'attag', $g['nick'])), - 'addr' => htmlentities(defaults($g, 'addr', $g['url'])), + 'nick' => htmlentities(($g['attag'] ?? '') ?: $g['nick']), + 'addr' => htmlentities(($g['addr'] ?? '') ?: $g['url']), 'forum' => !empty($g['forum']) || !empty($g['prv']) ? 1 : 0, ]; if ($entry['forum']) { @@ -305,18 +343,18 @@ class Acl extends BaseModule continue; } - $contact = Contact::getDetailsByURL($author); + $contact = Contact::getByURL($author, false, ['micro', 'name', 'id', 'network', 'nick', 'addr', 'url', 'forum', 'avatar']); if (count($contact) > 0) { $unknown_contacts[] = [ 'type' => 'c', - 'photo' => ProxyUtils::proxifyUrl($contact['micro'], false, ProxyUtils::SIZE_MICRO), + 'photo' => Contact::getMicro($contact), 'name' => htmlspecialchars($contact['name']), - 'id' => intval($contact['cid']), + 'id' => intval($contact['id']), 'network' => $contact['network'], 'link' => $contact['url'], - 'nick' => htmlentities(defaults($contact, 'nick', $contact['addr'])), - 'addr' => htmlentities(defaults($contact, 'addr', $contact['url'])), + 'nick' => htmlentities(($contact['nick'] ?? '') ?: $contact['addr']), + 'addr' => htmlentities(($contact['addr'] ?? '') ?: $contact['url']), 'forum' => $contact['forum'] ]; }