127 lines
4.1 KiB
C#
127 lines
4.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using System.Web.Mvc;
|
|
using System.Web.Mvc.Html;
|
|
using Portoa.Web.Util;
|
|
using VideoGameQuotes.Api;
|
|
|
|
namespace VideoGameQuotes.Web.Models {
|
|
public class QuoteSubmitModel {
|
|
[Required, DisplayName("Quote")]
|
|
public string QuoteText { get; set; }
|
|
[DisplayName("Categories")]
|
|
public IList<int> CategoryIds { get; set; }
|
|
|
|
public int GameId { get; set; }
|
|
|
|
//if a new game is created
|
|
[DisplayName("Name")]
|
|
public string GameName { get; set; }
|
|
[DisplayName("Website")]
|
|
public string GameWebsite { get; set; }
|
|
[DisplayName("Region")]
|
|
public Region GameRegions { get; set; }
|
|
[DisplayName("Publishers")]
|
|
public IList<int> PublisherIds { get; set; }
|
|
[DisplayName("Systems")]
|
|
public IList<int> SystemIds { get; set; }
|
|
|
|
//if a new publisher is created
|
|
[DisplayName("Name")]
|
|
public string PublisherName { get; set; }
|
|
[DisplayName("Website")]
|
|
public string PublisherWebsite { get; set; }
|
|
|
|
//if a new system is created
|
|
[DisplayName("Name")]
|
|
public string SystemName { get; set; }
|
|
[DisplayName("Abbreviation")]
|
|
public string SystemAbbreviation { get; set; }
|
|
[DisplayName("Release Date")]
|
|
public DateTime SystemReleaseDate { get; set; }
|
|
|
|
public IEnumerable<Game> AllGames { get; set; }
|
|
public IEnumerable<GamingSystem> AllSystems { get; set; }
|
|
public IEnumerable<Publisher> AllPublishers { get; set; }
|
|
public IEnumerable<Category> AllCategories { get; set; }
|
|
|
|
public IEnumerable<SelectListItem> GetGameList() {
|
|
return new[] { new SelectListItem { Value = "0", Text = "--none--" } }
|
|
.Concat(AllGames.Select(game => new SelectListItem { Value = game.Id.ToString(), Text = game.Name }));
|
|
}
|
|
|
|
private static string MakeTable<T>(string tableId, int cellsPerRow, IEnumerable<T> items, Func<T, string> cellDataCallback) {
|
|
var table = new TagBuilder("table");
|
|
table.MergeAttribute("id", tableId);
|
|
var count = 0;
|
|
var row = new TagBuilder("tr");
|
|
var cell = new TagBuilder("td");
|
|
|
|
foreach (var item in items) {
|
|
if (count % cellsPerRow == 0) {
|
|
if (count > 0) {
|
|
table.InnerHtml += row.ToString(TagRenderMode.Normal);
|
|
}
|
|
|
|
row.InnerHtml = string.Empty;
|
|
}
|
|
|
|
cell.InnerHtml = cellDataCallback(item);
|
|
row.InnerHtml += cell.ToString(TagRenderMode.Normal);
|
|
count++;
|
|
}
|
|
|
|
if (count > 0) {
|
|
//last row
|
|
table.InnerHtml += row.ToString(TagRenderMode.Normal);
|
|
}
|
|
|
|
return table.ToString(TagRenderMode.Normal);
|
|
}
|
|
|
|
public string MakePublisherTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
|
return MakeTable(
|
|
"publisher-checkbox-table",
|
|
cellsPerRow,
|
|
AllPublishers,
|
|
publisher => CreateCheckbox(html, "PublisherIds", publisher.Id, "publisher_" + publisher.Id, publisher.Name)
|
|
);
|
|
}
|
|
|
|
public string MakeSystemTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
|
return MakeTable(
|
|
"system-checkbox-table",
|
|
cellsPerRow,
|
|
AllSystems,
|
|
system => CreateCheckbox(html, "SystemIds", system.Id, "system_" + system.Id, system.Abbreviation)
|
|
);
|
|
}
|
|
|
|
public string MakeCategoryTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
|
return MakeTable(
|
|
"category-checkbox-table",
|
|
cellsPerRow,
|
|
AllCategories,
|
|
category => CreateCheckbox(html, "CategoryIds", category.Id, "category_" + category.Id, category.Name)
|
|
);
|
|
}
|
|
|
|
public string MakeRegionTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
|
return MakeTable(
|
|
"region-checkbox-table",
|
|
cellsPerRow,
|
|
(IEnumerable<Region>)Enum.GetValues(typeof(Region)),
|
|
region => CreateCheckbox(html, "GameRegions", region, "region_" + (int)region, region.ToString())
|
|
);
|
|
}
|
|
|
|
private static string CreateCheckbox(HtmlHelper<QuoteSubmitModel> html, string name, object value, string id, string labelText) {
|
|
return string.Format("<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" id=\"{2}\"/>", name, value, id)
|
|
+ html.Label(labelText, id);
|
|
}
|
|
}
|
|
} |