+ private function getUserChannelConditions(int $id, int $uid): array
+ {
+ $channel = $this->channelRepository->selectById($id, $uid);
+ if (empty($channel)) {
+ return [];
+ }
+
+ $condition = [];
+
+ if (!empty($channel->circle)) {
+ if ($channel->circle == -1) {
+ $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?))", $uid, Contact::SHARING, Contact::FRIEND];
+ } elseif ($channel->circle == -2) {
+ $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", $uid, Contact::FOLLOWER];
+ } elseif ($channel->circle > 0) {
+ $condition = DBA::mergeConditions($condition, ["`owner-id` IN (SELECT `pid` FROM `group_member` INNER JOIN `account-user-view` ON `group_member`.`contact-id` = `account-user-view`.`id` WHERE `gid` = ? AND `account-user-view`.`uid` = ?)", $channel->circle, $uid]);
+ }
+ }
+
+ if (!empty($channel->fullTextSearch)) {
+ $search = $channel->fullTextSearch;
+ foreach (['from', 'to', 'group', 'tag', 'network', 'visibility'] as $keyword) {
+ $search = preg_replace('~(' . $keyword . ':.[\w@\.-]+)~', '"$1"', $search);
+ }
+ $condition = DBA::mergeConditions($condition, ["MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE)", $search]);
+ }
+
+ if (!empty($channel->includeTags)) {
+ $search = explode(',', mb_strtolower($channel->includeTags));
+ $placeholders = substr(str_repeat("?, ", count($search)), 0, -2);
+ $condition = DBA::mergeConditions($condition, array_merge(["`uri-id` IN (SELECT `uri-id` FROM `post-tag` INNER JOIN `tag` ON `tag`.`id` = `post-tag`.`tid` WHERE `post-tag`.`type` = 1 AND `name` IN (" . $placeholders . "))"], $search));
+ }
+
+ if (!empty($channel->excludeTags)) {
+ $search = explode(',', mb_strtolower($channel->excludeTags));
+ $placeholders = substr(str_repeat("?, ", count($search)), 0, -2);
+ $condition = DBA::mergeConditions($condition, array_merge(["NOT `uri-id` IN (SELECT `uri-id` FROM `post-tag` INNER JOIN `tag` ON `tag`.`id` = `post-tag`.`tid` WHERE `post-tag`.`type` = 1 AND `name` IN (" . $placeholders . "))"], $search));
+ }
+
+ if (!empty($channel->mediaType)) {
+ $condition = DBA::mergeConditions($condition, ["`media-type` & ?", $channel->mediaType]);
+ }
+
+ // For "addLanguageCondition" to work, the condition must not be empty
+ return $condition ?: ["true"];
+ }
+