Skip to content

Commit

Permalink
Fixed issue #18459: When filtering the survey list by a parent survey…
Browse files Browse the repository at this point in the history
… group, surveys assigned to a child survey group are not listed (#3168)

Co-authored-by: lapiudevgit <devgit@lapiu.biz>
  • Loading branch information
gabrieljenik and lapiudevgit committed Jun 5, 2023
1 parent 0360278 commit 01ac6e1
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion application/models/Survey.php
Expand Up @@ -1612,7 +1612,23 @@ public function search()

// Survey group filter
if (isset($this->gsid)) {
$criteria->compare("t.gsid", $this->gsid, false);
// The survey group filter (from the dropdown, not by title search) is applied to five levels of survey groups.
// That is, it matches the group the survey is in, the parent group of that group, and the "grandparent" group, etc.
$groupJoins = 'LEFT JOIN {{surveys_groups}} parentGroup1 ON t.gsid = parentGroup1.gsid ';
$groupJoins .= 'LEFT JOIN {{surveys_groups}} parentGroup2 ON parentGroup1.parent_id = parentGroup2.gsid ';
$groupJoins .= 'LEFT JOIN {{surveys_groups}} parentGroup3 ON parentGroup2.parent_id = parentGroup3.gsid ';
$groupJoins .= 'LEFT JOIN {{surveys_groups}} parentGroup4 ON parentGroup3.parent_id = parentGroup4.gsid ';
$groupJoins .= 'LEFT JOIN {{surveys_groups}} parentGroup5 ON parentGroup4.parent_id = parentGroup5.gsid ';
$criteria->mergeWith([
'join' => $groupJoins,
]);
$groupCondition = "t.gsid=:gsid";
$groupCondition .= " OR parentGroup2.gsid=:gsid";
$groupCondition .= " OR parentGroup3.gsid=:gsid";
$groupCondition .= " OR parentGroup4.gsid=:gsid";
$groupCondition .= " OR parentGroup5.gsid=:gsid";
$criteria->addCondition($groupCondition, 'AND');
$criteria->params = array_merge($criteria->params, [':gsid' => $this->gsid]);
}

// Active filter
Expand Down

0 comments on commit 01ac6e1

Please sign in to comment.