Skip to content

Commit 9e1bd1b

Browse files
authored
Merge pull request #652 from cosmocode/latest-qb
Restore disabling mechanism for "latest" in queries
2 parents 5372ee7 + b37d1c8 commit 9e1bd1b

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

meta/Search.php

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ public function getSQL()
527527
protected function runSQLBuilder()
528528
{
529529
$sqlBuilder = new SearchSQLBuilder();
530+
$sqlBuilder->setSelectLatest($this->selectLatest);
530531
$sqlBuilder->addSchemas($this->schemas);
531532
$sqlBuilder->addColumns($this->columns);
532533
$sqlBuilder->addFilters($this->filter);
@@ -682,19 +683,4 @@ protected function isEmptyValue(Value $value)
682683
if ($value->getColumn()->getTid() == 0) return true;
683684
return false;
684685
}
685-
686-
/**
687-
* @param string $datatable
688-
* @return string
689-
*/
690-
protected function getSpecialFlagsClause($datatable)
691-
{
692-
$latestClause = "IS_PUBLISHER($datatable.pid)";
693-
if ($this->selectLatest) {
694-
$latestClause .= " AND $datatable.latest = 1";
695-
}
696-
$publishedClause = "IS_PUBLISHER($datatable.pid) !=1 AND $datatable.published = 1";
697-
698-
return "( ($latestClause) OR ($publishedClause) )";
699-
}
700686
}

meta/SearchSQLBuilder.php

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ class SearchSQLBuilder
1212
/** @var QueryBuilder */
1313
protected $qb;
1414

15+
/** @var bool Include latest = 1 in select query */
16+
protected $selectLatest = true;
17+
1518
/**
1619
* SearchSQLBuilder constructor.
1720
*/
@@ -65,8 +68,7 @@ public function addSchemas($schemas)
6568

6669
$first_table = $datatable;
6770
}
68-
// phpcs:ignore
69-
$this->qb->filters()->whereAnd("( (IS_PUBLISHER($datatable.pid) AND $datatable.latest = 1) OR (IS_PUBLISHER($datatable.pid) !=1 AND $datatable.published = 1) )");
71+
$this->qb->filters()->whereAnd($this->addPublishClauses($datatable));
7072
}
7173
}
7274

@@ -167,6 +169,21 @@ public function addSorts($sorts)
167169
}
168170
}
169171

172+
/**
173+
* @param string $datatable
174+
* @return string
175+
*/
176+
public function addPublishClauses($datatable)
177+
{
178+
$latestClause = "IS_PUBLISHER($datatable.pid)";
179+
if ($this->selectLatest) {
180+
$latestClause .= " AND $datatable.latest = 1";
181+
}
182+
$publishedClause = "IS_PUBLISHER($datatable.pid) !=1 AND $datatable.published = 1";
183+
184+
return "( ($latestClause) OR ($publishedClause) )";
185+
}
186+
170187
/**
171188
* Access to the underlying QueryBuilder
172189
*
@@ -188,4 +205,14 @@ public function getSQL()
188205
{
189206
return $this->qb->getSQL();
190207
}
208+
209+
/**
210+
* Allows disabling default 'latest = 1' clause in select statement
211+
*
212+
* @param bool $selectLatest
213+
*/
214+
public function setSelectLatest(bool $selectLatest)
215+
{
216+
$this->selectLatest = $selectLatest;
217+
}
191218
}

0 commit comments

Comments
 (0)