// 增加链接的点击统计数 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 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) }
func home_index(ctx *goku.HttpContext) goku.ActionResulter { u, ok := ctx.Data["user"] if !ok || u == nil { return ctx.Redirect("/discover") } user := u.(*models.User) if user.FriendCount+user.FtopicCount < 1 { return home_guideForNew(ctx) } ot := ctx.Get("o") if ot == "" { ot = "hot" } ctx.ViewData["Order"] = ot links, _ := models.Link_ForUser(user.Id, ot, 1, golink.PAGE_SIZE) //models.Link_GetByPage(1, 20) ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) ctx.ViewData["HasMoreLink"] = len(links) >= golink.PAGE_SIZE // 最新链接的未读提醒 if ot == "hot" { newestUnreadCount, _ := models.NewestLinkUnread_Friends(user.Id, user.LastReadFriendLinkId) ctx.ViewData["NewestUnreadCount"] = models.NewestLinkUnread_ToString(user.Id, newestUnreadCount) } else if ot == "time" && links != nil && len(links) > 0 { models.NewestLinkUnread_UpdateForUser(user.Id, links[0].Id) } return ctx.View(nil) }
// 加载更多的搜索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 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 link_submit(ctx *goku.HttpContext) goku.ActionResulter { f := forms.CreateLinkSubmitForm() f.FillByRequest(ctx.Request) var resubmit bool if ctx.Get("resubmit") == "true" { resubmit = true } user := ctx.Data["user"].(*models.User) success, linkId, errorMsgs, _ := models.Link_SaveForm(f, user.Id, resubmit) if success { go addLinkForSearch(0, f.CleanValues(), linkId, user.Name) //contextType:0: url, 1:文本 TODO: return ctx.Redirect(fmt.Sprintf("/link/%d", linkId)) } else if linkId > 0 { return ctx.Redirect(fmt.Sprintf("/link/%d?already_submitted=true", linkId)) } else { ctx.ViewData["Errors"] = errorMsgs ctx.ViewData["Values"] = f.Values() } return ctx.View(nil) }
/** * 获取用户信息 * 用于浮动层 */ func actionPopupBoxInfo(ctx *goku.HttpContext) goku.ActionResulter { topicName := ctx.Get("t") topic, _ := models.Topic_GetByName(topicName) if topic != nil { return ctx.RenderPartial("pop-info", models.Topic_ToVTopic(topic, ctx)) } return ctx.Html("") }
// 发现 首页 func discover_index(ctx *goku.HttpContext) goku.ActionResulter { ot := ctx.Get("o") if ot == "" { ot = "hot" } dt, _ := strconv.Atoi(ctx.Get("dt")) ctx.ViewData["Order"] = ot links, _ := models.LinkForHome_GetByPage(ot, dt, 1, golink.PAGE_SIZE) ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) ctx.ViewData["TopTab"] = "discover" ctx.ViewData["HasMoreLink"] = len(links) >= golink.PAGE_SIZE return ctx.Render("/home/index", nil) }
func link_showWithComments(ctx *goku.HttpContext, slinkId, scommentId string) goku.ActionResulter { linkId, err1 := strconv.ParseInt(slinkId, 10, 64) commentId, err2 := strconv.ParseInt(scommentId, 10, 64) if err1 != nil || err2 != nil { ctx.ViewData["errorMsg"] = "参数错误" return ctx.Render("error", nil) } link, err := models.Link_GetById(linkId) if err != nil { ctx.ViewData["errorMsg"] = "服务器开小差了 >_<!!" return ctx.Render("error", nil) } if link == nil { ctx.ViewData["errorMsg"] = "内容不存在,去首页逛逛吧" return ctx.Render("error", nil) } if link.Deleted() { ctx.ViewData["errorMsg"] = "内容已被摧毁,去首页逛逛吧" return ctx.Render("error", nil) } if !utils.IsSpider(ctx.Request.UserAgent()) { // 更新链接的评论查看计数 models.Link_IncViewCount(link.Id, 1) } vlink := models.Link_ToVLink([]models.Link{*link}, ctx) sortType := strings.ToLower(ctx.Get("cm_order")) //"hot":热门;"hotc":热议;"time":最新;"vote":得分;"ctvl":"争议" if sortType == "" { sortType = "hot" } var comments string if commentId > 0 { comments = models.GetPermalinkComment(linkId, commentId, sortType) ctx.ViewData["SubLinkUrl"] = fmt.Sprintf("permacoment/%d/%d/", linkId, commentId) } else { comments = models.GetSortComments("", "/", int64(0), linkId, sortType, "", false) //models.Comment_SortForLink(link.Id, "hot") ctx.ViewData["SubLinkUrl"] = linkId } ctx.ViewData["Comments"] = template.HTML(comments) ctx.ViewData["SortType"] = sortType ctx.ViewData["SortTypeName"] = ORDER_NAMES[sortType] return ctx.Render("/link/show", vlink[0]) }
//link搜索界面 func link_search(ctx *goku.HttpContext) goku.ActionResulter { ls := utils.LinkSearch{} searchResult, err := ls.SearchLink(ctx.Get("term"), 1, golink.PAGE_SIZE) if err == nil && searchResult.TimedOut == false && searchResult.HitResult.HitArray != nil && len(searchResult.HitResult.HitArray) > 0 { links, _ := models.Link_GetByIdList(searchResult.HitResult.HitArray) ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) ctx.ViewData["HasMoreLink"] = len(links) >= golink.PAGE_SIZE } else { ctx.ViewData["Links"] = nil ctx.ViewData["HasMoreLink"] = false } ctx.ViewData["Term"] = ctx.Get("term") return ctx.Render("/link/search", nil) }
/** * 加载更多评论 */ 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 home_index(ctx *goku.HttpContext) goku.ActionResulter { u, ok := ctx.Data["user"] if !ok || u == nil { return ctx.Redirect("/discover") } user := u.(*models.User) ot := ctx.Get("o") if ot == "" { ot = "hot" } ctx.ViewData["Order"] = ot links, _ := models.Link_ForUser(user.Id, ot, 1, golink.PAGE_SIZE) //models.Link_GetByPage(1, 20) ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) ctx.ViewData["HasMoreLink"] = len(links) >= golink.PAGE_SIZE return ctx.View(nil) }
// 发现 首页 func discover_index(ctx *goku.HttpContext) goku.ActionResulter { ot := ctx.Get("o") if ot == "" { ot = "hot" } dt, _ := strconv.Atoi(ctx.Get("dt")) ctx.ViewData["Order"] = ot links, _ := models.LinkForHome_GetByPage(ot, dt, 1, golink.PAGE_SIZE) ctx.ViewData["Links"] = models.Link_ToVLink(links, ctx) ctx.ViewData["TopTab"] = "discover" ctx.ViewData["HasMoreLink"] = len(links) >= golink.PAGE_SIZE // 最新链接的未读提醒 var userId, lastReadLinkId int64 unreadCookieName := "newestUnrLinkId" u, ok := ctx.Data["user"] if ok && u != nil { user := u.(*models.User) userId = user.Id lastReadLinkId = user.LastReadLinkId } else { // 从Cook读取最后一次阅读的链接id cLastReadLinkId, err := ctx.Request.Cookie(unreadCookieName) if err == nil { lastReadLinkId, _ = strconv.ParseInt(cLastReadLinkId.Value, 10, 64) } } if ot == "hot" { newestUnreadCount, _ := models.NewestLinkUnread_All(userId, lastReadLinkId) ctx.ViewData["NewestUnreadCount"] = models.NewestLinkUnread_ToString(userId, newestUnreadCount) } else if ot == "time" && links != nil && len(links) > 0 { if userId > 0 { models.NewestLinkUnread_UpdateForAll(userId, links[0].Id) } else { c := &http.Cookie{ Name: unreadCookieName, Value: fmt.Sprintf("%d", links[0].Id), Expires: time.Now().AddDate(0, 1, 0), Path: "/", HttpOnly: true, } ctx.SetCookie(c) } } return ctx.Render("/home/index", nil) }
// 删除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) }
// 加载更多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_submit(ctx *goku.HttpContext) goku.ActionResulter { f := forms.CreateLinkSubmitForm() f.FillByRequest(ctx.Request) var resubmit bool if ctx.Get("resubmit") == "true" { resubmit = true } success, linkId, errorMsgs := models.Link_SaveForm(f, (ctx.Data["user"].(*models.User)).Id, resubmit) if success { return ctx.Redirect(fmt.Sprintf("/link/%d", linkId)) } else if linkId > 0 { return ctx.Redirect(fmt.Sprintf("/link/%d?already_submitted=true", linkId)) } else { ctx.ViewData["Errors"] = errorMsgs ctx.ViewData["Values"] = f.Values() } return ctx.View(nil) }
/** * 修改话题名称 */ 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) }
// 查看link func link_show(ctx *goku.HttpContext) goku.ActionResulter { if ctx.Get("already_submitted") == "true" { ctx.ViewData["AlreadySubmitted"] = true } return link_showWithComments(ctx, ctx.RouteData.Params["id"], "0") }