diff --git a/app/Controller/EventsController.php b/app/Controller/EventsController.php index 4e695ac67..418a40cce 100644 --- a/app/Controller/EventsController.php +++ b/app/Controller/EventsController.php @@ -497,6 +497,11 @@ class EventsController extends AppController continue 2; } $pieces = is_array($v) ? $v : explode('|', $v); + $isANDed = false; + if (count($pieces) == 1 && strpos($pieces[0], '&') !== -1) { + $pieces = explode('&', $v); + $isANDed = count($pieces) > 1; + } $filterString = ""; $expectOR = false; $tagRules = []; @@ -563,10 +568,19 @@ class EventsController extends AppController } if (!empty($tagRules['include'])) { - $include = $this->Event->EventTag->find('column', array( - 'conditions' => array('EventTag.tag_id' => $tagRules['include']), - 'fields' => ['EventTag.event_id'], - )); + if ($isANDed) { + $include = $this->Event->EventTag->find('column', array( + 'conditions' => ['EventTag.tag_id' => $tagRules['include']], + 'fields' => ['EventTag.event_id'], + 'group' => ['EventTag.event_id'], + 'having' => ['COUNT(*) =' => count($tagRules['include'])], + )); + } else { + $include = $this->Event->EventTag->find('column', array( + 'conditions' => array('EventTag.tag_id' => $tagRules['include']), + 'fields' => ['EventTag.event_id'], + )); + } if (!empty($include)) { $this->paginate['conditions']['AND'][] = 'Event.id IN (' . implode(",", $include) . ')'; } else {