Пример #1
0
		// 投稿された Article にエラーがないかどうかチェックします。
		private PostErrorCollection ArticleCheck(Article a, Article latestArticle){
			PostErrorCollection errors = new PostErrorCollection();
			if(string.IsNullOrEmpty(a.Subject)){
				errors.Add(InputSubjectName, "題名が入力されていません。");
			} else if(a.Subject.Length > SubjectMaxLength){
				errors.Add(InputSubjectName, String.Format("題名は{0}字ありますが、最大{1}字までしか入力できません。あと{2}字減らしてください。", a.Subject.Length, SubjectMaxLength, SubjectMaxLength - a.Subject.Length));
			}

			if(string.IsNullOrEmpty(a.Name)){
				errors.Add(InputSenderName, "投稿者の名前が入力されていません。");
			} else if(a.Name.Length > NameMaxLength){
				errors.Add(InputSenderName, String.Format("投稿者の名前は{0}字ありますが、最大{1}字までしか入力できません。あと{2}字減らしてください。", a.Name.Length, NameMaxLength, NameMaxLength - a.Name.Length));
			}

			if(String.IsNullOrEmpty(a.Message)){
				errors.Add(InputBodyName, "本文が入力されていません。空白のみの投稿は出来ません。");
			} else {
				// 本文を調査 1. 長すぎないか? 2. 引用のみでないか?
				int messageLine = 0;
				int QorELine = 0; // 引用or空行の数
				Regex crlf = new BakeraReg.CrLf();
				foreach(string s in crlf.Split(a.Message)){
					if(s.StartsWith(">") || s == "") QorELine++;
					messageLine++;
				}
				if(a.Message.Length > MessageMaxLength){
					errors.Add(InputBodyName, String.Format("本文は{0}字ありますが、最大{1}字までしか入力できません。あと{2}字減らしてください。", a.Message.Length, MessageMaxLength, a.Message.Length - MessageMaxLength));
				}
				if(QorELine == messageLine){
					errors.Add(InputBodyName, "本文に引用部と空行しか含まれていません。引用でない本文を記入してください。");
				}
			}

			// コメント先の実在チェック
			if(a.CommentTo != null){
				HatomaruResponse parentResponse = myModel.Manager.GetResponse(a.CommentTo);
				if(parentResponse == null) errors.Add(null, "コメント先のコンテンツが取得できませんでした。コメント先が削除されているか、URLが変更になっている可能性があります。");
			}

			// 二重投稿チェック
			if(latestArticle != null && a.Message == latestArticle.Message){
				errors.Add(null, string.Format("二重投稿です。本文が同一の記事が #{0} として既に投稿されています (同じ文面での連続投稿はできません)。", latestArticle.Id));
			}

			return errors;
		}