Added validation for relationship
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
index 4f9d02d..806f6df 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
@@ -23,6 +23,10 @@
T = NullLocalizer.Instance;
}
+ public object GetRelationNameValidation(string relationName) {
+ return new { ErrorMessage = _relationshipService.CheckRelationName(relationName)};
+ }
+
public object Get(string entityName, int page, int rows) {
var temp = _relationshipService.GetRelationships(entityName);
//if (temp == null) {
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
index 80fc22b..c986c37 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
@@ -116,8 +116,13 @@
if (!Services.Authorizer.Authorize(Permissions.PublishContent, T("Not allowed to edit a content."))) {
return new HttpUnauthorizedResult();
}
-
+
if (oneToMany.IsCreate) {
+ var checkNameMessage = _relationshipService.CheckRelationName(oneToMany.Name);
+ if (!string.IsNullOrWhiteSpace(checkNameMessage)) {
+ ModelState.AddModelError("OneToManyRelation", T(checkNameMessage).ToString());
+ return ResponseError("");
+ }
var backMessage = _relationshipService.CreateRelationship(oneToMany);
int relationId;
if (int.TryParse(backMessage.ToString(),out relationId))
@@ -208,6 +213,11 @@
}
if (manyToMany.IsCreate) {
+ var checkNameMessage = _relationshipService.CheckRelationName(manyToMany.Name);
+ if (!string.IsNullOrWhiteSpace(checkNameMessage)) {
+ ModelState.AddModelError("ManyToManyRelation", T(checkNameMessage).ToString());
+ return ResponseError("");
+ }
var backMessage = _relationshipService.CreateRelationship(manyToMany);
int relationId;
if (int.TryParse(backMessage.ToString(), out relationId))
@@ -253,7 +263,11 @@
var temp = (from values in ModelState
from error in values.Value.Errors
select error.ErrorMessage).ToArray();
- return Content(string.Join("\n", temp) + ";\n" + errorMessage);
+ var result = string.Join("\n", temp);
+ if (!string.IsNullOrWhiteSpace(errorMessage)) {
+ result += "\n" + errorMessage;
+ }
+ return Content(result);
}
}
}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
index 7a2dde3..b27c2b0 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
@@ -29,7 +29,7 @@
logger.success('success');
$("input.primary-entity").prop('disabled', true);
}, function (result) {
- logger.error('Failed:\n' + result.responseText);
+ logger.error('Failed:\n' + result);
$("input.primary-entity").prop('disabled', true);
});
return promise;
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
index e6b9e97..59e041a 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
@@ -33,8 +33,9 @@
logger.success('success');
$("input.primary-entity").prop('disabled', true);
}, function (result) {
- logger.error('Failed:\n' + result.responseText);
+ logger.error('Failed:\n' + result.data);
$("input.primary-entity").prop('disabled', true);
+ return result;
});
return promise;
};
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
index 6e43feb..46c2c33 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
@@ -5,6 +5,7 @@
namespace Coevery.Relationship.Services {
public interface IRelationshipService : IDependency {
+ string CheckRelationName(string name);
SelectListItem[] GetEntityNames(string excludeEntity);
SelectListItem[] GetFieldNames(string entityName);
RelationshipRecord[] GetRelationships(string entityName);
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
index 35c927e..80f3170 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
@@ -13,6 +13,7 @@
using Orchard.Core.Contents.Extensions;
using Orchard.Data;
using Orchard.Projections.Models;
+using Orchard.Utility.Extensions;
namespace Coevery.Relationship.Services {
public class RelationshipService : IRelationshipService {
@@ -51,6 +52,17 @@
#region GetMethods
+ public string CheckRelationName(string name) {
+ string errorMessage = null;
+ if (!string.Equals(name, name.ToSafeName())) {
+ errorMessage += "The name:\""+ name +"\" is not legal!\n";
+ }
+ if (_relationshipRepository.Fetch(relation => relation.Name == name).FirstOrDefault() != null) {
+ errorMessage += "The name:\"" + name + "\" already exists!\n";
+ }
+ return errorMessage;
+ }
+
public string GetReferenceField(string entityName, string relationName) {
var reference = _contentDefinitionManager
.GetPartDefinition(entityName)
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml b/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
index f1309c2..db3e202 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
@@ -67,7 +67,7 @@
<legend>General Information</legend>
@DisplayInput("Relationship Name"
- , Html.TextBoxFor(model => model.Name, new { @class = "span12", id = "relation-name", required="" })
+ , Html.TextBoxFor(model => model.Name, new { @class = "span12 checkNameValid", id = "relation-name", required="" })
,"required")
@DisplayInput("Primary Entity"
@@ -187,6 +187,18 @@
function () {
customPicklist($("#@Html.FieldIdFor(m=>m.ColumnFieldList)"));
+ $.validator.addMethod("checkNameValid", function (value, element, params) {
+ var temp;
+ $.get("api/relationship/relationship?relationName="+value,
+ function (data) {
+ temp = data.ErrorMessage;
+ },
+ "json"
+ );
+ return !temp;
+ }, "Wrong decimal format!");
+ $.validator.classRuleSettings.checkNameValid = { checkNameValid: true };
+
var jsonUrl = "@Url.Action("FieldNames", "SystemAdmin", new RouteValueDictionary { { "Area", "Coevery.Relationship" } })";
var version = 0;
var getFields = function (entityName,selectElement) {
diff --git a/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js b/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
index 2294787..595e0b4 100644
--- a/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
+++ b/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
@@ -78,9 +78,9 @@
// Bootstrap Dropdown Workaround for touch devices
$(document).on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation(); });
-
+
// Extend jQuery Validate Defaults.
- // You mav remove this if you use an another validation library
+ // You mav remove this if you use an another validation library
//if( $.validator ) {
// $.extend( $.validator.defaults, {
// errorClass: "error",