// projectPostlistConditions returns the same pointer passed as first argumet with the project conditions setted func projectPostlistConditions(query *igor.Database, user *User) *igor.Database { var projectPost ProjectPost projectPosts := projectPost.TableName() users := new(User).TableName() projects := new(Project).TableName() members := new(ProjectMember).TableName() owners := new(ProjectOwner).TableName() query = query.Joins("JOIN " + users + " ON " + users + ".counter = " + projectPosts + ".from " + "JOIN " + projects + " ON " + projects + ".counter = " + projectPosts + ".to " + "JOIN " + owners + " ON " + owners + ".to = " + projectPosts + ".to") query = query.Where(`(`+projectPosts+`."from" NOT IN (SELECT "to" FROM blacklist WHERE "from" = ?))`, user.Counter) return query.Where("( visible IS TRUE OR "+owners+`.from = ? OR ( ? IN (SELECT "from" FROM `+members+` WHERE "to" = `+projectPosts+`.to) ) )`, user.Counter, user.Counter) }