// 删除link func link_ajaxDel(ctx *goku.HttpContext) goku.ActionResulter { var errs string var ok = false linkId, err := strconv.ParseInt(ctx.RouteData.Params["id"], 10, 64) if err == nil { user := ctx.Data["user"].(*models.User) link, err := models.Link_GetById(linkId) if err == nil { // 只可以删除自己的链接 if link.UserId == user.Id { err = models.Link_DelById(linkId) if err == nil { ok = true } } else { errs = "不允许的操作" } } } if err != nil { errs = err.Error() } r := map[string]interface{}{ "success": ok, "errors": errs, } return ctx.Json(r) }
// 加载更多link func discover_loadMoreLink(ctx *goku.HttpContext) goku.ActionResulter { page, err := strconv.Atoi(ctx.Get("page")) success, hasmore := false, false errorMsgs, html := "", "" if err == nil && page > 1 { ot := ctx.Get("o") if ot == "" { ot = "hot" } dt, _ := strconv.Atoi(ctx.Get("dt")) links, _ := models.LinkForHome_GetByPage(ot, dt, page, golink.PAGE_SIZE) if links != nil && len(links) > 0 { ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) vr := ctx.RenderPartial("loadmorelink", nil) vr.Render(ctx, vr.Body) html = vr.Body.String() hasmore = len(links) >= golink.PAGE_SIZE } success = true } else { errorMsgs = "参数错误" } r := map[string]interface{}{ "success": success, "errors": errorMsgs, "html": html, "hasmore": hasmore, } return ctx.Json(r) }
// 增加链接的点击统计数 func link_incClick(ctx *goku.HttpContext) goku.ActionResulter { var success bool var errorMsgs string id := ctx.Get("id") if id == "" { errorMsgs = "参数错误" } else { linkId, err := strconv.ParseInt(id, 10, 64) if err == nil && linkId > 0 { _, err = models.Link_IncClickCount(linkId, 1) if err == nil { success = true } } if err != nil { goku.Logger().Error(err.Error()) errorMsgs = err.Error() } } r := map[string]interface{}{ "success": success, "errors": errorMsgs, } return ctx.Json(r) }
func admin_banUser(ctx *goku.HttpContext) goku.ActionResulter { var err error var errs string var ok = false var userId, status int64 userId, err = strconv.ParseInt(ctx.Get("id"), 10, 64) if err == nil { status, err = strconv.ParseInt(ctx.Get("status"), 10, 64) } if err == nil { _, err = models.User_Update(userId, map[string]interface{}{"Status": status}) } if err != nil { errs = err.Error() } else { ok = true } r := map[string]interface{}{ "success": ok, "errors": errs, } return ctx.Json(r) }
func favorite_loadMoreLink(ctx *goku.HttpContext) goku.ActionResulter { page, err := strconv.Atoi(ctx.Get("page")) success, hasmore := false, false errorMsgs, html := "", "" if err == nil && page > 1 { user := ctx.Data["user"].(*models.User) links := models.FavoriteLink_ByUser(user.Id, page, golink.PAGE_SIZE) if links != nil && len(links) > 0 { ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) vr := ctx.RenderPartial("loadmorelink", nil) vr.Render(ctx, vr.Body) html = vr.Body.String() hasmore = len(links) >= golink.PAGE_SIZE } success = true } else { errorMsgs = "参数错误" } r := map[string]interface{}{ "success": success, "errors": errorMsgs, "html": html, "hasmore": hasmore, } return ctx.Json(r) }
// 加载更多的搜索link func link_search_loadMore(ctx *goku.HttpContext) goku.ActionResulter { term, _ := url.QueryUnescape(ctx.Get("term")) page, err := strconv.Atoi(ctx.Get("page")) success, hasmore := false, false errorMsgs, html := "", "" if err == nil && page > 1 { ls := utils.LinkSearch{} searchResult, err := ls.SearchLink(term, page, golink.PAGE_SIZE) if err == nil && searchResult.TimedOut == false && searchResult.HitResult.HitArray != nil { if len(searchResult.HitResult.HitArray) > 0 { links, _ := models.Link_GetByIdList(searchResult.HitResult.HitArray) if links != nil && len(links) > 0 { ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) vr := ctx.RenderPartial("loadmorelink", nil) vr.Render(ctx, vr.Body) html = vr.Body.String() hasmore = len(links) >= golink.PAGE_SIZE } } success = true } } else { errorMsgs = "参数错误" } r := map[string]interface{}{ "success": success, "errors": errorMsgs, "html": html, "hasmore": hasmore, } return ctx.Json(r) }
/** * 上传话题图片 */ func actionUpimg(ctx *goku.HttpContext) goku.ActionResulter { var ok = false var errs string topicId, err := strconv.ParseInt(ctx.RouteData.Params["id"], 10, 64) if err == nil && topicId > 0 { imgFile, header, err2 := ctx.Request.FormFile("topic-image") err = err2 defer func() { if imgFile != nil { imgFile.Close() } }() if err == nil { ext := path.Ext(header.Filename) if acceptFileTypes.MatchString(ext[1:]) == false { errs = "错误的文件类型" } else { sid := strconv.FormatInt(topicId, 10) saveDir := path.Join(ctx.RootDir(), golink.PATH_IMAGE_AVATAR, "topic", sid[len(sid)-2:]) err = os.MkdirAll(saveDir, 0755) if err == nil { saveName := fmt.Sprintf("%v_%v%v", strconv.FormatInt(topicId, 36), strconv.FormatInt(time.Now().UnixNano(), 36), ext) savePath := path.Join(saveDir, saveName) var f *os.File f, err = os.Create(savePath) defer f.Close() if err == nil { _, err = io.Copy(f, imgFile) if err == nil { // update to db _, err2 := models.Topic_UpdatePic(topicId, path.Join(sid[len(sid)-2:], saveName)) err = err2 if err == nil { ok = true } } } } } } } else if topicId < 1 { errs = "参数错误" } if err != nil { errs = err.Error() } r := map[string]interface{}{ "success": ok, "errors": errs, } return ctx.Json(r) }
func (tf *RequireLoginFilter) OnActionExecuting(ctx *goku.HttpContext) (ar goku.ActionResulter, err error) { if u, ok := ctx.Data["user"]; !ok || u == nil { if ctx.IsAjax() { ar = ctx.Json(map[string]interface{}{ "success": false, "needLogin": true, "errors": "请先登陆", }) } else { ar = ctx.Redirect("/user/login?returnurl=" + url.QueryEscape(ctx.Request.RequestURI)) } } return }
/** * 加载更多评论 */ func comment_LoadMore(ctx *goku.HttpContext) goku.ActionResulter { htmlObject := CommentHtml{""} exceptIds := ctx.Get("except_ids") fmt.Println("exceptIds:", exceptIds) parentPath := ctx.Get("parent_path") sortType := ctx.Get("sort_type") topId, err1 := strconv.ParseInt(ctx.Get("top_parent_id"), 10, 64) linkId, err2 := strconv.ParseInt(ctx.Get("link_id"), 10, 64) if err1 == nil && err2 == nil { htmlObject.Html = models.GetSortComments(exceptIds, parentPath, topId, linkId, sortType, "", true) } return ctx.Json(htmlObject) }
// 检查用户的状态(禁言、封号等) func checkUserStatus(user *models.User, ctx *goku.HttpContext) (ar goku.ActionResulter, err error) { if user != nil && user.IsBaned() { if ctx.Request.Method == "POST" { if ctx.IsAjax() { ar = ctx.Json(map[string]interface{}{ "success": false, "needLogin": false, "errors": "你已经被禁言。", }) } else { ctx.ViewData["errorMsg"] = "你已经被禁言" ar = ctx.Render("error", nil) } } } return }
/** * 提交评论并保存到数据库 */ func link_ajax_comment(ctx *goku.HttpContext) goku.ActionResulter { f := forms.NewCommentSubmitForm() f.FillByRequest(ctx.Request) var success bool var errorMsgs, commentHTML string var commentId int64 if ctx.RouteData.Params["id"] != f.Values()["link_id"] { errorMsgs = "参数错误" } else { var errors []string user := ctx.Data["user"].(*models.User) success, commentId, errors = models.Comment_SaveForm(f, user.Id) if errors != nil { errorMsgs = strings.Join(errors, "\n") } else { linkId, _ := strconv.ParseInt(ctx.RouteData.Params["id"], 10, 64) m := f.CleanValues() cn := models.CommentNode{} cn.Id = commentId cn.LinkId = linkId cn.UserId = user.Id cn.Status = 1 cn.Content = m["content"].(string) cn.ParentId = m["parent_id"].(int64) cn.ChildrenCount = 0 cn.VoteUp = 1 cn.CreateTime = time.Now() cn.UserName = user.Name sortType := "" var b *bytes.Buffer = new(bytes.Buffer) cn.RenderSelfOnly(b, sortType) commentHTML = b.String() //models.GetPermalinkComment(linkId, commentId, "") } } r := map[string]interface{}{ "success": success, "errors": errorMsgs, "commentHTML": commentHTML, } return ctx.Json(r) }
func (raf *RequireAdminFilter) OnActionExecuting(ctx *goku.HttpContext) (ar goku.ActionResulter, err error) { ar, err = raf.RequireLoginFilter.OnActionExecuting(ctx) if ar != nil || err != nil { return } user := ctx.Data["user"].(*models.User) if !user.IsAdmin() { if ctx.IsAjax() { ar = ctx.Json(map[string]interface{}{ "success": false, "needLogin": false, "errors": "没有权限", }) } else { ctx.ViewData["errorMsg"] = "没有权限" ar = ctx.Render("error", nil) } } return }
// 删除link func admin_del_links(ctx *goku.HttpContext) goku.ActionResulter { var errs string var ok = false linkId, err := strconv.ParseInt(ctx.Get("id"), 10, 64) if err == nil { err = models.Link_DelById(linkId) } if err != nil { errs = err.Error() } else { ok = true } r := map[string]interface{}{ "success": ok, "errors": errs, } return ctx.Json(r) }
// 删除comment func admin_del_comments(ctx *goku.HttpContext) goku.ActionResulter { var errs string var ok = false id, err := strconv.ParseInt(ctx.RouteData.Params["id"], 10, 64) if err == nil { err = models.Comment_DelById(id) } if err != nil { errs = err.Error() } else { ok = true } r := map[string]interface{}{ "success": ok, "errors": errs, } return ctx.Json(r) }
/** * 修改话题名称 */ func admin_topicEditName(ctx *goku.HttpContext) goku.ActionResulter { var ok = false var errs, name string topicId, err := strconv.ParseInt(ctx.Get("id"), 10, 64) name = ctx.Request.FormValue("name") if err == nil && topicId > 0 && name != "" { _, err = models.Topic_UpdateName(topicId, name) if err == nil { ok = true } } else if topicId < 1 || name == "" { errs = "参数错误" } if err != nil { errs = err.Error() } r := map[string]interface{}{ "success": ok, "name": name, "errors": errs, } return ctx.Json(r) }