// SearchUserByName takes keyword and part of user name to search, // it returns results in given range and number of total results. func SearchUserByName(opts *SearchUserOptions) (users []*User, _ int64, _ error) { if len(opts.Keyword) == 0 { return users, 0, nil } opts.Keyword = strings.ToLower(opts.Keyword) if opts.PageSize <= 0 || opts.PageSize > setting.ExplorePagingNum { opts.PageSize = setting.ExplorePagingNum } if opts.Page <= 0 { opts.Page = 1 } searchQuery := "%" + opts.Keyword + "%" users = make([]*User, 0, opts.PageSize) // Append conditions sess := x.Where("LOWER(lower_name) LIKE ?", searchQuery). Or("LOWER(full_name) LIKE ?", searchQuery). And("type = ?", opts.Type) var countSess xorm.Session countSess = *sess count, err := countSess.Count(new(User)) if err != nil { return nil, 0, fmt.Errorf("Count: %v", err) } if len(opts.OrderBy) > 0 { sess.OrderBy(opts.OrderBy) } return users, count, sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).Find(&users) }
// query objects and set to template func (this *ModelAdminRouter) SetObjects(session *xorm.Session, objects interface{}) error { var app ModelFinder if a, ok := this.Ctx.Action().(ModelFinder); ok { app = a } cnt, err := session.Count(app.Object()) if err != nil { return err } // create paginator p := this.SetPaginator(20, cnt) if err := models.Find(p.PerPageNums, p.Offset(), objects); err != nil { return err } else { this.Data["Objects"] = objects this.Data["ObjectsCnt"] = cnt } return nil }