Validating the comments form

Work Items: 16666, 16568

--HG--
branch : dev
This commit is contained in:
Sébastien Ros 2010-11-18 09:31:21 -08:00
parent 26ce8f8243
commit 5ab8e1e9f1
5 changed files with 36 additions and 56 deletions

View File

@ -57,28 +57,5 @@ namespace Orchard.Tests.Utility.Extensions {
var def = new LocalizedString("test");
Assert.That("bar".OrDefault(def).Text, Is.SameAs("bar"));
}
[Test]
public void IsNullOrEmptyTrimmed_EmptyStringReturnsTrue() {
const string testString = "";
Assert.AreEqual(true, testString.IsNullOrEmptyTrimmed());
}
[Test]
public void IsNullOrEmptyTrimmed_NullStringReturnsTrue() {
const string testString = null;
Assert.AreEqual(true, testString.IsNullOrEmptyTrimmed());
}
[Test]
public void IsNullOrEmptyTrimmed_SpacedStringReturnsTrue() {
const string testString = " ";
Assert.AreEqual(true, testString.IsNullOrEmptyTrimmed());
}
[Test]
public void IsNullOrEmptyTrimmed_ActualStringReturnsFalse() {
const string testString = "testString";
Assert.AreEqual(false, testString.IsNullOrEmptyTrimmed());
}
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Web.Mvc;
using Orchard.Comments.Models;
using Orchard.Comments.Services;
@ -7,6 +8,7 @@ using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.UI.Notify;
using Orchard.Utility.Extensions;
using System.Text.RegularExpressions;
namespace Orchard.Comments.Controllers {
public class CommentController : Controller {
@ -31,39 +33,35 @@ namespace Orchard.Comments.Controllers {
: Redirect("~/");
var viewModel = new CommentsCreateViewModel();
try {
// UpdateModel(viewModel);
if(!TryUpdateModel(viewModel)) {
if (Request.Form["Name"].IsNullOrEmptyTrimmed()) {
_notifier.Error(T("You must provide a Name in order to comment"));
}
return Redirect(returnUrl);
}
if (TryUpdateModel(viewModel)) {
var context = new CreateCommentContext {
Author = viewModel.Name,
CommentText = viewModel.CommentText,
Email = viewModel.Email,
SiteName = viewModel.SiteName,
CommentedOn = viewModel.CommentedOn
};
Author = viewModel.Name,
CommentText = viewModel.CommentText,
Email = viewModel.Email,
SiteName = viewModel.SiteName,
CommentedOn = viewModel.CommentedOn
};
if (!context.SiteName.StartsWith("http://") && !context.SiteName.StartsWith("https://")) {
context.SiteName = "http://" + context.SiteName;
}
CommentPart commentPart = _commentService.CreateComment(context, Services.WorkContext.CurrentSite.As<CommentSettingsPart>().Record.ModerateComments);
if (commentPart.Record.Status == CommentStatus.Pending)
Services.Notifier.Information(T("Your comment will appear after the site administrator approves it."));
}
else {
foreach (var error in ModelState.Values.SelectMany(m => m.Errors).Select( e=> e.ErrorMessage)) {
_notifier.Error(T(error));
}
}
return !String.IsNullOrEmpty(returnUrl)
? Redirect(returnUrl)
: Redirect("~/");
}
catch (Exception exception) {
_notifier.Error(T("Creating Comment failed: " + exception.Message));
// return View(viewModel);
return Redirect(returnUrl);
}
return !String.IsNullOrEmpty(returnUrl)
? Redirect(returnUrl)
: Redirect("~/");
}
}
}

View File

@ -2,11 +2,21 @@
namespace Orchard.Comments.ViewModels {
public class CommentsCreateViewModel {
[Required]
[Required(ErrorMessage="You must provide a Name in order to comment")]
[StringLength(255)]
public string Name { get; set; }
[RegularExpression(@"^[\w-]+@([\w-]+\.)+[\w]{2,4}$", ErrorMessage = "The Email is not valid")]
[StringLength(255)]
public string Email { get; set; }
[StringLength(245)]
[RegularExpression(@"^(http(s)?://)?([\w-]+\.)+[\S]+$", ErrorMessage = "The Url is not valid")]
public string SiteName { get; set; }
[Required(ErrorMessage = "You must provide a Comment")]
public string CommentText { get; set; }
public int CommentedOn { get; set; }
}
}

View File

@ -149,7 +149,7 @@ namespace Orchard.Media.Controllers {
if (!Services.Authorizer.Authorize(Permissions.UploadMediaFiles, T("Couldn't upload media file")))
return new HttpUnauthorizedResult();
if(Request.Files[0].FileName.IsNullOrEmptyTrimmed()) {
if(String.IsNullOrWhiteSpace(Request.Files[0].FileName)) {
ModelState.AddModelError("File", T("Select a file to upload").ToString());
}

View File

@ -35,11 +35,6 @@ namespace Orchard.Utility.Extensions {
return Regex.Replace(friendlier, @"[^a-zA-Z]+", m => m.Index == 0 ? "" : "-").ToLowerInvariant();
}
public static bool IsNullOrEmptyTrimmed(this string text) {
return text == null
|| string.IsNullOrEmpty(text.Trim());
}
public static LocalizedString OrDefault(this string text, LocalizedString defaultValue) {
return string.IsNullOrEmpty(text)
? defaultValue