/
SearchProvider.php
108 lines (91 loc) · 2.87 KB
/
SearchProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
namespace Concrete\Core\User\Search;
use Concrete\Core\Attribute\Category\UserCategory;
use Concrete\Core\Entity\Search\Query;
use Concrete\Core\Search\AbstractSearchProvider;
use Concrete\Core\Search\ProviderInterface;
use Concrete\Core\User\Group\GroupList;
use Concrete\Core\User\Search\ColumnSet\Available;
use Concrete\Core\User\Search\ColumnSet\ColumnSet;
use Concrete\Core\User\Search\ColumnSet\DefaultSet;
use Concrete\Core\User\Search\Result\Result;
use Concrete\Core\User\UserList;
use Symfony\Component\HttpFoundation\Session\Session;
use Concrete\Core\Entity\Search\SavedUserSearch;
class SearchProvider extends AbstractSearchProvider
{
protected $userCategory;
public function __construct(UserCategory $userCategory, Session $session)
{
$this->userCategory = $userCategory;
parent::__construct($session);
}
public function getSessionNamespace()
{
return 'user';
}
public function getCustomAttributeKeys()
{
return $this->userCategory->getSearchableList();
}
public function getBaseColumnSet()
{
return new ColumnSet();
}
public function getAvailableColumnSet()
{
return new Available();
}
public function getCurrentColumnSet()
{
return ColumnSet::getCurrent();
}
public function getItemList()
{
return new UserList();
}
public function getDefaultColumnSet()
{
return new DefaultSet();
}
public function createSearchResultObject($columns, $list)
{
return new Result($columns, $list);
}
public function getSearchResultFromQuery(Query $query)
{
$result = parent::getSearchResultFromQuery($query);
$u = new \User();
if (!$u->isSuperUser()) {
$qb = $result->getItemListObject()->getQueryObject();
/* @var \Doctrine\DBAL\Query\QueryBuilder $qb */
$gIDs = array(-1);
$gs = new GroupList();
$groups = $gs->getResults();
foreach ($groups as $g) {
$gp = new \Permissions($g);
if ($gp->canSearchUsersInGroup()) {
$gIDs[] = $g->getGroupID();
}
}
$whereGroups = $qb->expr()->in('ugRequired.gID', $gIDs);
$gg = \Group::getByID(REGISTERED_GROUP_ID);
$ggp = new \Permissions($gg);
if ($ggp->canSearchUsersInGroup()) {
$whereGroups = $qb->expr()->orX(
$whereGroups,
$qb->expr()->isNull('ugRequired.gID')
);
}
$qb
->leftJoin('u', 'UserGroups', 'ugRequired', 'ugRequired.uID = u.uID')
->andWhere($whereGroups)
->groupBy('u.uID');
}
return $result;
}
function getSavedSearch()
{
return new SavedUserSearch();
}
}