Example #1
0
// 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)
}