// 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) }
// pmsQueryBuilder returns the same pointer passed as first argument, with new specified options setted func pmsQueryBuilder(query *igor.Database, options PmsOptions) *igor.Database { query = query.Limit(int(AtMostPms(uint64(options.N)))).Order("pmid DESC") if options.Older != 0 && options.Newer != 0 { query = query.Where("pmid BETWEEN ? AND ?", options.Newer, options.Older) } else if options.Older != 0 { query = query.Where("pmid < ?", options.Older) } else if options.Newer != 0 { query = query.Where("pmid > ?", options.Newer) } return query }
// postlistQueryBuilder returns the same pointer passed as first argument, with new specified options setted func commentlistQueryBuilder(query *igor.Database, options CommentlistOptions) *igor.Database { query = query.Limit(int(AtMostComments(uint64(options.N)))).Order("hcid DESC") if options.Older != 0 && options.Newer != 0 { query = query.Where("hcid BETWEEN ? AND ?", options.Newer, options.Older) } else if options.Older != 0 { query = query.Where("hcid < ?", options.Older) } else if options.Newer != 0 { query = query.Where("hcid > ?", options.Newer) } return query }
// postlistQueryBuilder returns the same pointer passed as first argument, with new specified options setted // If the user parameter is present, it's intentend to be the user browsing the website. // So it will be used to fetch the following list -> so we can easily find the posts on a bord/project/home/ecc made by the users that "user" is following func postlistQueryBuilder(query *igor.Database, options PostlistOptions, user ...*User) *igor.Database { query = query.Limit(int(AtMostPosts(uint64(options.N)))) userOK := len(user) == 1 && user[0] != nil followersTable := UserFollower{}.TableName() if !options.Followers && options.Following && userOK { // from following + me query = query.Where(`"from" IN (SELECT "to" FROM `+followersTable+` WHERE "from" = ? UNION ALL SELECT ?)`, user[0].Counter, user[0].Counter) } else if !options.Following && options.Followers && userOK { //from followers + me query = query.Where(`"from" IN (SELECT "from" FROM `+followersTable+` WHERE "to" = ? UNION ALL SELECT ?)`, user[0].Counter, user[0].Counter) } else if options.Following && options.Followers && userOK { //from friends + me query = query.Where(`"from" IN (SELECT ? UNION ALL (SELECT "to" FROM (SELECT "to" FROM `+ followersTable+ ` WHERE "from" = ?) AS f INNER JOIN (SELECT "from" FROM `+ followersTable+ ` WHERE "to" = ?) AS e on f.to = e.from))`, user[0].Counter, user[0].Counter, user[0].Counter) } if options.Language != "" { query = query.Where(options.Model.TableName()+".lang = ?", options.Language) } messageTpl := Message{}.TableName() if options.Older != 0 && options.Newer != 0 { if options.Model.TableName() == messageTpl { query = query.Where( `"time" BETWEEN (SELECT "time" FROM `+options.NewerModel.TableName()+` WHERE hpid = ?) AND (SELECT "time" FROM `+options.OlderModel.TableName()+` WHERE hpid = ?) AND hpid NOT IN (?)`, options.Newer, options.Older, []uint64{options.Newer, options.Older}) } else { query = query.Where("hpid BETWEEN ? AND ?", options.Newer, options.Older) } } else if options.Older != 0 { if options.Model.TableName() == messageTpl { query = query.Where( `"time" <= ( SELECT "time" FROM `+options.OlderModel.TableName()+` WHERE hpid = ? ) AND hpid <> ?`, options.Older, options.Older) } else { query = query.Where("hpid < ?", options.Older) } } else if options.Newer != 0 { if options.Model.TableName() == messageTpl { query = query.Where( `"time" >= ( SELECT "time" FROM `+options.NewerModel.TableName()+` WHERE hpid = ? ) AND hpid <> ?`, options.Newer, options.Newer) } else { query = query.Where("hpid > ?", options.Newer) } } return query }