diff --git a/WebCms/Controllers/QueueController.cs b/WebCms/Controllers/QueueController.cs index a26fcae..032e05a 100644 --- a/WebCms/Controllers/QueueController.cs +++ b/WebCms/Controllers/QueueController.cs @@ -20,14 +20,16 @@ namespace LeafWeb.WebCms.Controllers private const int TimeSamples = 40; public ActionResult Index(LeafDataQuery query) - { + { + //query.lat = 32; + var resultItems = DataService.GetLeafInputsOrdered(); // search functionality - if (!string.IsNullOrEmpty(query.Query)) + if (!string.IsNullOrEmpty(query.q)) { - foreach (var piece in query.Query.Split(' ').Select(p => p.Trim())) + foreach (var piece in query.q.Split(' ').Select(p => p.Trim())) { resultItems = from li in resultItems @@ -46,17 +48,28 @@ namespace LeafWeb.WebCms.Controllers { Items = resultItems, ServerDescription = serviceDescription, - Query = new LeafDataQuery - { - Query = query.Query - }, + Q = query, TimeInProgressEstimater = timeInProgressEstimater }; return View(queueViewModel); } - private TimeInProgressEstimater TimeInProgressEstimater() + + [HttpPost] + public ActionResult Search(LeafDataQuery q) + { + if (!ModelState.IsValid) + { + return CurrentUmbracoPage(); + } + //if (q == null) + // return CurrentUmbracoPage(); + //var collection = q.GetNameValueCollection(); + return RedirectToCurrentUmbracoPage(q.GetNameValueCollection()); + } + + private TimeInProgressEstimater TimeInProgressEstimater() { // TODO: move this to a background process @@ -80,12 +93,6 @@ namespace LeafWeb.WebCms.Controllers return Content(string.Join("
", data)); } - [HttpPost] - public ActionResult Search(LeafDataQuery query) - { - var collection = new NameValueCollection() {{"Query.Query", query.Query}}; - return RedirectToCurrentUmbracoPage(collection); - } private static string ServiceDescription() { diff --git a/WebCms/Models/LeafDataQuery.cs b/WebCms/Models/LeafDataQuery.cs index 48c0855..124ce91 100644 --- a/WebCms/Models/LeafDataQuery.cs +++ b/WebCms/Models/LeafDataQuery.cs @@ -1,35 +1,39 @@ -using System.ComponentModel.DataAnnotations; -using AutoMapper; -using LeafWeb.Core.DAL; -using LeafWeb.Core.Entities; -using LeafWeb.WebCms.Controllers; +using System.Collections.Specialized; +using System.ComponentModel.DataAnnotations; namespace LeafWeb.WebCms.Models { public class LeafDataQuery { + /// Query [Display(Name = "Search", Description = "General query")] - public string Query { get; set; } + public string q { get; set; } [Display(Name = "Site ID", Description = "The site's name/Fluxnet ID, if known")] - public string SiteId { get; set; } + [RegularExpression(@".{3,}", ErrorMessage = "Specify at least three characters")] + public string siteid { get; set; } [Display(Name = "Species Name")] - public string SpeciesName { get; set; } + [RegularExpression(@".{3,}", ErrorMessage = "Specify at least three characters")] + public string species { get; set; } /// Site latitude, northern hemisphere positive - [RegularExpression(@"\d{0,2}", ErrorMessage = "Site latitude, northern hemisphere positive")] - public int Latitude { get; set; } + [Display(Name = "Latitude")] + [RegularExpression(@"^-?([0-9]|[1-8][0-9]|90)$", ErrorMessage = "Site latitude, northern hemisphere positive, -90 – 90")] + public string lat { get; set; } [Display(Name = "Range")] - public string LatitudeRange { get; set; } + [RegularExpression(@"^([0-9]|[1-8][0-9]|90)$", ErrorMessage = "± latitude degrees")] + public string latr { get; set; } /// Site longitude, east positive - [RegularExpression(@"\d{0,2}", ErrorMessage = "Site longitude, east positive")] - public string Longitude { get; set; } + [Display(Name = "Longitude")] + [RegularExpression(@"^-?([0-9]|[1-8][0-9]|9[0-9]|1[0-7][0-9]|180)$", ErrorMessage = "Site longitude, east positive, -180 – 180")] + public string lon { get; set; } [Display(Name = "Range")] - public string LongitudeRange { get; set; } + [RegularExpression(@"^([0-9]|[1-8][0-9]|9[0-9]|1[0-7][0-9]|180)$", ErrorMessage = "± longitude degrees")] + public string lonr { get; set; } static LeafDataQuery() { @@ -43,5 +47,25 @@ namespace LeafWeb.WebCms.Models { //PhotosynthesisType = new SelectListViewModel(); } + + public NameValueCollection GetNameValueCollection(string prefix="") + { + var nvs = new NameValueCollection(); + + prefix = + string.IsNullOrEmpty(prefix) + ? "" + : prefix + "."; + + foreach (var pi in typeof(LeafDataQuery).GetProperties()) + { + var value = pi.GetValue(this, null); + if (value == null) + continue; + nvs.Add(prefix + pi.Name, value?.ToString()); + } + + return nvs; + } } } \ No newline at end of file diff --git a/WebCms/Models/QueueViewModel.cs b/WebCms/Models/QueueViewModel.cs index b530d4c..8e5040c 100644 --- a/WebCms/Models/QueueViewModel.cs +++ b/WebCms/Models/QueueViewModel.cs @@ -10,7 +10,7 @@ namespace LeafWeb.WebCms.Models public string ServerDescription { get; set; } public string ServerStatus { get; set; } public IEnumerable Items { get; set; } - public LeafDataQuery Query { get; set; } + public LeafDataQuery Q { get; set; } public TimeInProgressEstimater TimeInProgressEstimater { get; set; } } } \ No newline at end of file diff --git a/WebCms/Views/Queue/Index.cshtml b/WebCms/Views/Queue/Index.cshtml index b77ec93..fb0cc90 100644 --- a/WebCms/Views/Queue/Index.cshtml +++ b/WebCms/Views/Queue/Index.cshtml @@ -4,12 +4,16 @@ @model QueueViewModel @{ + Html.RequiresJs("~/scripts/jquery.validate.min.js", 2); + Html.RequiresJs("~/scripts/jquery.validate.unobtrusive.min.js", 2); + Html.RequiresJs("~/scripts/jquery.validate.custom.js", 2); + Html.RequiresJs("~/scripts/jquery.validate.unobtrusive.bootstrap.js", 2); Html.RequiresJs("~/scripts/Queue.js"); var grid = new WebGrid(Model.Items, rowsPerPage: 45); } -@using (Html.BeginUmbracoForm("Search", FormMethod.Post)) +@using (Html.BeginUmbracoForm("Search", "Queue", null, new {@action = "/leaf-data/manage-queue/"})) {
@@ -21,7 +25,7 @@
- +