Move Module\Search\Acl::contactAutocomplete to Core\Search::searchGlobalContact
- Replace broken reference to directory /lsearch module with /search module
This commit is contained in:
parent
4e185ebc84
commit
445133cb21
2 changed files with 91 additions and 77 deletions
|
@ -5,6 +5,7 @@ namespace Friendica\Core;
|
||||||
use Friendica\BaseObject;
|
use Friendica\BaseObject;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
|
use Friendica\Model\GContact;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Network\Probe;
|
use Friendica\Network\Probe;
|
||||||
use Friendica\Object\Search\ContactResult;
|
use Friendica\Object\Search\ContactResult;
|
||||||
|
@ -245,4 +246,48 @@ class Search extends BaseObject
|
||||||
|
|
||||||
return $resultList;
|
return $resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searching for global contacts for autocompletion
|
||||||
|
*
|
||||||
|
* @brief Searching for global contacts for autocompletion
|
||||||
|
* @param string $search Name or part of a name or nick
|
||||||
|
* @param string $mode Search mode (e.g. "community")
|
||||||
|
* @param int $page Page number (starts at 1)
|
||||||
|
* @return array with the search results
|
||||||
|
* @throws HTTPException\InternalServerErrorException
|
||||||
|
*/
|
||||||
|
public static function searchGlobalContact($search, $mode, int $page = 1)
|
||||||
|
{
|
||||||
|
if (Config::get('system', 'block_public') && !Session::isAuthenticated()) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// don't search if search term has less than 2 characters
|
||||||
|
if (!$search || mb_strlen($search) < 2) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($search, 0, 1) === '@') {
|
||||||
|
$search = substr($search, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if searching in the local global contact table is enabled
|
||||||
|
if (Config::get('system', 'poco_local_search')) {
|
||||||
|
$return = GContact::searchByName($search, $mode);
|
||||||
|
} else {
|
||||||
|
$p = $page > 1 ? 'p=' . $page : '';
|
||||||
|
$curlResult = Network::curl(get_server() . '/search/people?' . $p . '&q=' . urlencode($search), false, ['accept_content' => 'application/json']);
|
||||||
|
if ($curlResult->isSuccess()) {
|
||||||
|
$searchResult = json_decode($curlResult->getBody(), true);
|
||||||
|
if (!empty($searchResult['profiles'])) {
|
||||||
|
$return = $searchResult['profiles'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return ?? [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,18 +4,15 @@ namespace Friendica\Module\Search;
|
||||||
|
|
||||||
use Friendica\BaseModule;
|
use Friendica\BaseModule;
|
||||||
use Friendica\Content\Widget;
|
use Friendica\Content\Widget;
|
||||||
use Friendica\Core\Config;
|
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\Session;
|
use Friendica\Core\Search;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\GContact;
|
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Util\Network;
|
|
||||||
use Friendica\Util\Proxy as ProxyUtils;
|
use Friendica\Util\Proxy as ProxyUtils;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
|
|
||||||
|
@ -32,10 +29,53 @@ class Acl extends BaseModule
|
||||||
throw new HTTPException\UnauthorizedException(L10n::t('You must be logged in to use this module.'));
|
throw new HTTPException\UnauthorizedException(L10n::t('You must be logged in to use this module.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$type = $_REQUEST['type'] ?? '';
|
||||||
|
|
||||||
|
if ($type === 'x') {
|
||||||
|
$o = self::globalContactSearch();
|
||||||
|
} else {
|
||||||
|
$o = self::regularContactSearch($type);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode($o);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function globalContactSearch()
|
||||||
|
{
|
||||||
|
// autocomplete for global contact search (e.g. navbar search)
|
||||||
|
$search = Strings::escapeTags(trim($_REQUEST['search']));
|
||||||
|
$mode = $_REQUEST['smode'];
|
||||||
|
$page = $_REQUEST['page'] ?? 1;
|
||||||
|
|
||||||
|
$r = Search::searchGlobalContact($search, $mode, $page);
|
||||||
|
|
||||||
|
$contacts = [];
|
||||||
|
foreach ($r as $g) {
|
||||||
|
$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,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$o = [
|
||||||
|
'start' => ($page - 1) * 20,
|
||||||
|
'count' => 1000,
|
||||||
|
'items' => $contacts,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function regularContactSearch(string $type)
|
||||||
|
{
|
||||||
$start = $_REQUEST['start'] ?? 0;
|
$start = $_REQUEST['start'] ?? 0;
|
||||||
$count = $_REQUEST['count'] ?? 100;
|
$count = $_REQUEST['count'] ?? 100;
|
||||||
$search = $_REQUEST['search'] ?? '';
|
$search = $_REQUEST['search'] ?? '';
|
||||||
$type = $_REQUEST['type'] ?? '';
|
|
||||||
$conv_id = $_REQUEST['conversation'] ?? null;
|
$conv_id = $_REQUEST['conversation'] ?? null;
|
||||||
|
|
||||||
// For use with jquery.textcomplete for private mail completion
|
// For use with jquery.textcomplete for private mail completion
|
||||||
|
@ -194,32 +234,6 @@ class Acl extends BaseModule
|
||||||
ORDER BY `name`",
|
ORDER BY `name`",
|
||||||
intval(local_user())
|
intval(local_user())
|
||||||
);
|
);
|
||||||
} elseif ($type == 'x') {
|
|
||||||
// autocomplete for global contact search (e.g. navbar search)
|
|
||||||
$search = Strings::escapeTags(trim($_REQUEST['search']));
|
|
||||||
$mode = $_REQUEST['smode'];
|
|
||||||
$page = $_REQUEST['page'] ?? 1;
|
|
||||||
|
|
||||||
$r = self::contactAutocomplete($search, $mode, $page);
|
|
||||||
|
|
||||||
$contacts = [];
|
|
||||||
foreach ($r as $g) {
|
|
||||||
$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,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
$o = [
|
|
||||||
'start' => $start,
|
|
||||||
'count' => $count,
|
|
||||||
'items' => $contacts,
|
|
||||||
];
|
|
||||||
echo json_encode($o);
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DBA::isResult($r)) {
|
if (DBA::isResult($r)) {
|
||||||
|
@ -324,51 +338,6 @@ class Acl extends BaseModule
|
||||||
'items' => $results['items'],
|
'items' => $results['items'],
|
||||||
];
|
];
|
||||||
|
|
||||||
echo json_encode($o);
|
return $o;
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Searching for global contacts for autocompletion
|
|
||||||
*
|
|
||||||
* @brief Searching for global contacts for autocompletion
|
|
||||||
* @param string $search Name or part of a name or nick
|
|
||||||
* @param string $mode Search mode (e.g. "community")
|
|
||||||
* @param int $page Page number (starts at 1)
|
|
||||||
* @return array with the search results
|
|
||||||
* @throws HTTPException\InternalServerErrorException
|
|
||||||
*/
|
|
||||||
private static function contactAutocomplete($search, $mode, int $page = 1)
|
|
||||||
{
|
|
||||||
if (Config::get('system', 'block_public') && !Session::isAuthenticated()) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't search if search term has less than 2 characters
|
|
||||||
if (!$search || mb_strlen($search) < 2) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (substr($search, 0, 1) === '@') {
|
|
||||||
$search = substr($search, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if searching in the local global contact table is enabled
|
|
||||||
if (Config::get('system', 'poco_local_search')) {
|
|
||||||
$return = GContact::searchByName($search, $mode);
|
|
||||||
} else {
|
|
||||||
$p = $page > 1 ? 'p=' . $page : '';
|
|
||||||
|
|
||||||
$curlResult = Network::curl(get_server() . '/lsearch?' . $p . '&search=' . urlencode($search));
|
|
||||||
if ($curlResult->isSuccess()) {
|
|
||||||
$lsearch = json_decode($curlResult->getBody(), true);
|
|
||||||
if (!empty($lsearch['results'])) {
|
|
||||||
$return = $lsearch['results'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $return ?? [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue