2018-11-12 03:08:33 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Friendica\Directory\Controllers\Web;
|
|
|
|
|
|
|
|
use \Friendica\Directory\Content\Pager;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Hypolite Petovan <mrpetovan@gmail.com>
|
|
|
|
*/
|
2018-11-16 05:59:00 +01:00
|
|
|
class Search extends BaseController
|
2018-11-12 03:08:33 +01:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var \Atlas\Pdo\Connection
|
|
|
|
*/
|
|
|
|
private $atlas;
|
|
|
|
/**
|
|
|
|
* @var \Friendica\Directory\Models\Profile
|
|
|
|
*/
|
|
|
|
private $profileModel;
|
|
|
|
/**
|
|
|
|
* @var \Friendica\Directory\Views\PhpRenderer
|
|
|
|
*/
|
|
|
|
private $renderer;
|
|
|
|
/**
|
|
|
|
* @var \Friendica\Directory\Views\Widget\AccountTypeTabs
|
|
|
|
*/
|
|
|
|
private $accountTypeTabs;
|
|
|
|
/**
|
2018-11-16 05:59:00 +01:00
|
|
|
* @var \Gettext\TranslatorInterface
|
2018-11-12 03:08:33 +01:00
|
|
|
*/
|
|
|
|
private $l10n;
|
|
|
|
|
|
|
|
public function __construct(
|
|
|
|
\Atlas\Pdo\Connection $atlas,
|
|
|
|
\Friendica\Directory\Models\Profile $profileModel,
|
|
|
|
\Friendica\Directory\Views\Widget\AccountTypeTabs $accountTypeTabs,
|
|
|
|
\Friendica\Directory\Views\PhpRenderer $renderer,
|
2018-11-16 05:59:00 +01:00
|
|
|
\Gettext\TranslatorInterface $l10n
|
2018-11-12 03:08:33 +01:00
|
|
|
)
|
|
|
|
{
|
|
|
|
$this->atlas = $atlas;
|
|
|
|
$this->profileModel = $profileModel;
|
|
|
|
$this->accountTypeTabs = $accountTypeTabs;
|
|
|
|
$this->renderer = $renderer;
|
|
|
|
$this->l10n = $l10n;
|
|
|
|
}
|
|
|
|
|
2018-11-16 05:59:00 +01:00
|
|
|
public function render(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args): array
|
2018-11-12 03:08:33 +01:00
|
|
|
{
|
|
|
|
$pager = new Pager($this->l10n, $request, 20);
|
|
|
|
|
|
|
|
$originalQuery = $query = filter_input(INPUT_GET, 'q');
|
|
|
|
|
|
|
|
$field = filter_input(INPUT_GET, 'field', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW & FILTER_FLAG_STRIP_HIGH);
|
|
|
|
|
2018-11-16 05:59:00 +01:00
|
|
|
$fieldName = '';
|
|
|
|
|
2018-11-12 03:08:33 +01:00
|
|
|
if ($field) {
|
|
|
|
$query .= '%';
|
2018-11-16 05:59:00 +01:00
|
|
|
$sql_where = 'p.`' . $field . '` LIKE :query';
|
|
|
|
|
|
|
|
switch($field) {
|
|
|
|
case 'language': $fieldName = $this->l10n->pgettext('field', 'Language'); break;
|
|
|
|
case 'locality': $fieldName = $this->l10n->pgettext('field', 'Locality'); break;
|
|
|
|
case 'region' : $fieldName = $this->l10n->pgettext('field', 'Region') ; break;
|
|
|
|
case 'country' : $fieldName = $this->l10n->pgettext('field', 'Country') ; break;
|
|
|
|
default: $fieldName = ucfirst($field);
|
|
|
|
}
|
|
|
|
|
2018-11-12 03:08:33 +01:00
|
|
|
} else {
|
|
|
|
$sql_where = "MATCH (p.`name`, p.`pdesc`, p.`profile_url`, p.`locality`, p.`region`, p.`country`, p.`tags` )
|
|
|
|
AGAINST (:query IN BOOLEAN MODE)";
|
|
|
|
}
|
|
|
|
|
|
|
|
$values = ['query' => $query];
|
|
|
|
|
2018-11-17 14:52:23 +01:00
|
|
|
|
2018-11-12 03:08:33 +01:00
|
|
|
$account_type = $args['account_type'] ?? '';
|
2018-11-17 14:52:23 +01:00
|
|
|
|
|
|
|
$accountTypeTabs = $this->accountTypeTabs->render('search', $account_type, $sql_where, $values, ['q' => $originalQuery, 'field' => $field]);
|
|
|
|
|
2018-11-12 03:08:33 +01:00
|
|
|
if ($account_type) {
|
|
|
|
$sql_where .= '
|
|
|
|
AND `account_type` = :account_type';
|
|
|
|
$values['account_type'] = $account_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
$profiles = $this->profileModel->getListForDisplay($pager->getItemsPerPage(), $pager->getStart(), $sql_where, $values);
|
|
|
|
|
|
|
|
$count = $this->profileModel->getCountForDisplay($sql_where, $values);
|
|
|
|
|
|
|
|
$vars = [
|
2018-11-16 05:59:00 +01:00
|
|
|
'query' => $originalQuery,
|
|
|
|
'field' => $field,
|
|
|
|
'fieldName' => $fieldName,
|
|
|
|
'count' => $count,
|
2018-11-17 14:52:23 +01:00
|
|
|
'accountTypeTabs' => $accountTypeTabs,
|
2018-11-16 05:59:00 +01:00
|
|
|
'profiles' => $profiles,
|
2018-11-12 03:08:33 +01:00
|
|
|
'pager_full' => $pager->renderFull($count),
|
|
|
|
'pager_minimal' => $pager->renderMinimal($count),
|
|
|
|
];
|
|
|
|
|
|
|
|
$content = $this->renderer->fetch('search.phtml', $vars);
|
|
|
|
|
|
|
|
// Render index view
|
2018-11-16 05:59:00 +01:00
|
|
|
return ['content' => $content, 'noNavSearch' => true];
|
2018-11-12 03:08:33 +01:00
|
|
|
}
|
|
|
|
}
|