Beispiel #1
0
// 删除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)
}
Beispiel #2
0
// 加载更多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)
}
Beispiel #3
0
// 增加链接的点击统计数
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)
}
Beispiel #4
0
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)
}
Beispiel #5
0
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)
}
Beispiel #6
0
// 加载更多的搜索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)
}
Beispiel #7
0
/**
 * 上传话题图片
 */
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)
}
Beispiel #8
0
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
}
Beispiel #9
0
/**
 * 加载更多评论
 */
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)
}
Beispiel #10
0
// 检查用户的状态(禁言、封号等)
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
}
Beispiel #11
0
/**
 * 提交评论并保存到数据库
 */
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)
}
Beispiel #12
0
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
}
Beispiel #13
0
// 删除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)
}
Beispiel #14
0
// 删除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)
}
Beispiel #15
0
/**
 * 修改话题名称
 */
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)
}