public function getData(array $params, array $cols)
{
$qb = $this->createQueryBuilder('e');
$qb->from('Newscoop\\Entity\\User', 's');
$andx = $qb->expr()->andx();
$andx->add($qb->expr()->eq('e.user', new Expr\Literal('s.id')));
if (!empty($params['sSearch'])) {
$this->buildWhere($cols, $params['sSearch'], $qb, $andx);
}
if (!empty($params['sFilter'])) {
$this->buildFilter($cols, $params['sFilter'], $qb, $andx);
}
// sort
if (isset($params['iSortCol_0'])) {
$colsIndex = array_keys($cols);
$sortId = $params['iSortCol_0'];
$sortBy = $colsIndex[$sortId];
$dir = $params['sSortDir_0'] ?: 'asc';
switch ($sortBy) {
case 'user':
$qb->orderBy('s.username', $dir);
break;
case 'message':
$qb->orderBy('e.time_created', $dir);
break;
case 'url':
$qb->orderBy('e.url', $dir);
break;
case 'index':
$qb->orderBy('e.time_created', $dir);
break;
default:
$qb->orderBy('e.' . $sortBy, $dir);
}
}
$qb->where($andx);
// limit
if (isset($params['iDisplayLength'])) {
$qb->setFirstResult((int) $params['iDisplayStart'])->setMaxResults((int) $params['iDisplayLength']);
}
return $qb->getQuery()->getResult();
}