Beispiel #1
0
        public ActionResult VoteLetter(string board_id, string discussion_id, string letter_id, string delta_flags)
        {
            if (!Util.IsAjaxRequest(Request))
            {
                Util.ThrowBadRequestException("Not ajax post.");
            }

            object ret_obj = Warehouse.RateLimiter.Validate(CarryType.VoteLetter);

            if (ret_obj != null)
            {
                return(Json(ret_obj));
            }

            //checkFlags(delta_flags, 2, letter_id == SandId.HEADING_LETTER_ID);
            checkFlags(delta_flags,
                       null,
                       SandFlags.MT_ILI + SandFlags.MTV_SEPARATOR + "1",
                       SandFlags.MT_IDLI + SandFlags.MTV_SEPARATOR + "1");

            if (!DiscussionLoadStore.VoteLetter(board_id, discussion_id, letter_id, delta_flags))
            {
                return(Json(new { err_msg = "您已經投過票了。" }));
            }
            // return new ErrorResult("您已經投過票了。");

            return(Json(new { ok = true }));
        }
Beispiel #2
0
        public ActionResult CreateLetter(string board_id, string discussion_id, string creator, string words, string delta_flags)
        {
            if (!Util.IsAjaxRequest(Request))
            {
                Util.ThrowBadRequestException("Not ajax post.");
            }

            object ret_obj = Warehouse.RateLimiter.Validate(CarryType.CreateLetter);

            if (ret_obj != null)
            {
                return(Json(ret_obj));
            }

            checkLetterInput(creator, words, false);

            delta_flags = delta_flags.Replace("\r\n", "\n");
            checkEditFlags(delta_flags, false);

            Subtype subtype = Subtype.r;

            if (DiscussionLoadStore.IsCurrentUserDiscussionCreator(board_id, discussion_id))
            {
                subtype = Subtype.s;
            }

            string letter_id = DiscussionLoadStore.CreateLetter(board_id, discussion_id, creator, words, subtype, delta_flags, Request.Files);

            return(Json(new { letter_id = letter_id }));
        }
Beispiel #3
0
        public ActionResult ControlLetter(string board_id, string discussion_id, string letter_id, string delta_flags, string reason)
        {
            if (!Util.IsAjaxRequest(Request))
            {
                Util.ThrowBadRequestException("Not ajax post.");
            }

            object ret_obj = Warehouse.RateLimiter.Validate(CarryType.ControlLetter);

            if (ret_obj != null)
            {
                return(Json(ret_obj));
            }

            checkControlFlags(delta_flags, letter_id == SandId.HEADING_LETTER_ID);
            if (reason.Length > 500 * HeartsConfiguration.LENGTH_CHECK_MARGIN /*counting into foreword*/)
            {
                Util.ThrowBadRequestException("理由長度過長。");
            }

            ControlHistory mh = DiscussionLoadStore.ControlLetter(board_id, discussion_id, letter_id, delta_flags);

            if (letter_id == SandId.HEADING_LETTER_ID)
            {
                delta_flags = SandFlags.Remove(delta_flags, SandFlags.MT_REPORT);
                DiscussionListStore.OperateFlags(board_id, discussion_id, new FlagMergeOperation(delta_flags));
            }
            if (mh.ReportCount != 0)
            {
                DiscussionListStore.OperateFlags(board_id, discussion_id, new FlagOperation
                {
                    type      = FlagOperation.Type.Add,
                    MetaTitle = SandFlags.MT_REPORT,
                    N         = mh.ReportCount
                });
            }

            int    id_num             = SandId.ExtractIdNumber(letter_id);
            string remark_delta_flags = SandFlags.Add(string.Empty, SandFlags.MT_REPLY_TO, id_num);
            string remark_letter_id   = DiscussionLoadStore.CreateLetter(board_id, discussion_id, null, reason, Subtype.d, remark_delta_flags, null);

            // while deleting/undeleting discussion, the remark_delta_flags is ,r0, and will be removed.

            return(Json(new { ok = true }));
        }
Beispiel #4
0
        public ActionResult EditLetter(string board_id, string discussion_id, string letter_id, string creator,
                                       string words, string delta_flags)
        {
            if (!Util.IsAjaxRequest(Request))
            {
                Util.ThrowBadRequestException("Not ajax post.");
            }

            object ret_obj = Warehouse.RateLimiter.Validate(CarryType.EditLetter);

            if (ret_obj != null)
            {
                return(Json(ret_obj));
            }

            checkLetterInput(creator, words, true);

            delta_flags = delta_flags.Replace("\r\n", "\n");

            if (letter_id == SandId.HEADING_LETTER_ID)
            {
                checkHeading(words);
                checkEditFlags(delta_flags, true);
            }
            else
            {
                checkEditFlags(delta_flags, false);
            }

            DiscussionLoadStore.EditLetter(board_id, discussion_id, letter_id, creator, words, delta_flags, Request.Files);

            if (letter_id == SandId.HEADING_LETTER_ID)
            {
                DiscussionListStore.EditHeading(board_id, discussion_id, words);
            }

            return(Json(new { letter_id = letter_id }));
        }