/** * build conditions from query * * @param array $query query * @return array condition * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ private function __buildQueryBasedConditions($query) { $conditions = []; if (isset($query['keyword']) && $query['keyword'] !== '') { $conditions[] = sprintf('MATCH (`Topic`.`title`, `Topic`.`contents`) AGAINST (\'*D+ %s\' IN BOOLEAN MODE)', $query['keyword']); } if (isset($query['status'])) { $conditions['Topic.status'] = $query['status']; } else { $conditions['Topic.status'] = array_keys(NetCommonsBlockComponent::getStatuses()); } if (isset($query['plugin_key'])) { $conditions['Topic.plugin_key'] = $query['plugin_key']; } $conditions = array_merge($conditions, $this->__buildDurationConditions($query)); if (isset($query['username']) && $query['username'] !== '') { $conditions['TrackableUpdater.username'] = $query['username']; } if (isset($query['room_id']) && is_numeric($query['room_id'])) { $conditions['Block.room_id'] = $query['room_id']; } if (isset($query['block_id']) && is_numeric($query['block_id'])) { $conditions['Block.id'] = $query['block_id']; } return $conditions; }