Fix create page for machine photo.

This commit is contained in:
2019-05-27 19:38:17 +01:00
parent 4d1659e4b3
commit d2335de2be
5 changed files with 132 additions and 368 deletions

View File

@@ -5,6 +5,7 @@ using Cicm.Database.Models;
using cicm_web.Areas.Admin.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
namespace cicm_web.Areas.Admin.Controllers
@@ -28,11 +29,12 @@ namespace cicm_web.Areas.Admin.Controllers
{
Id = p.Id,
Author = p.Author,
License = p.License,
License = p.License.Name,
Machine =
$"{p.Machine.Company.Name} {p.Machine.Name}",
UploadDate = p.UploadDate,
UploadUser = p.User.UserName
UploadUser = p.User.UserName,
LicenseId = p.License.Id
}).OrderBy(p => p.Machine)
.ThenBy(p => p.UploadUser).ThenBy(p => p.UploadDate).ToListAsync());
}
@@ -49,28 +51,37 @@ namespace cicm_web.Areas.Admin.Controllers
}
// GET: MachinePhotos/Create
public IActionResult Create() => View();
public IActionResult Create()
{
ViewData["MachineId"] =
new
SelectList(_context.Machines.OrderBy(c => c.Company.Name).ThenBy(c => c.Name).Select(m => new {m.Id, Name = $"{m.Company.Name} {m.Name}"}),
"Id", "Name");
ViewData["LicenseId"] =
new SelectList(_context.Licenses.OrderBy(c => c.Name).Select(l => new {l.Id, l.Name}), "Id", "Name");
return View();
}
// POST: MachinePhotos/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind(
"Author,CameraManufacturer,CameraModel,ColorSpace,Comments,Contrast,CreationDate,DigitalZoomRatio,ExifVersion,Exposure,ExposureMethod,ExposureProgram,Flash,Focal,FocalLength,FocalLengthEquivalent,HorizontalResolution,IsoRating,Lens,License,LightSource,MeteringMode,Orientation,PixelComposition,Saturation,SceneCaptureType,SceneControl,SensingMethod,Sharpness,SoftwareUsed,SubjectDistanceRange,UploadDate,VerticalResolution,WhiteBalance,Id")]
MachinePhoto machinePhoto)
{
if(ModelState.IsValid)
{
machinePhoto.Id = Guid.NewGuid();
_context.Add(machinePhoto);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(machinePhoto);
}
// [HttpPost]
// [ValidateAntiForgeryToken]
// public async Task<IActionResult> Create(
// [Bind(
// "Author,CameraManufacturer,CameraModel,ColorSpace,Comments,Contrast,CreationDate,DigitalZoomRatio,ExifVersion,Exposure,ExposureMethod,ExposureProgram,Flash,Focal,FocalLength,FocalLengthEquivalent,HorizontalResolution,IsoRating,Lens,License,LightSource,MeteringMode,Orientation,PixelComposition,Saturation,SceneCaptureType,SceneControl,SensingMethod,Sharpness,SoftwareUsed,SubjectDistanceRange,UploadDate,VerticalResolution,WhiteBalance,Id")]
// MachinePhoto machinePhoto)
// {
// if(ModelState.IsValid)
// {
// machinePhoto.Id = Guid.NewGuid();
// _context.Add(machinePhoto);
// await _context.SaveChangesAsync();
// return RedirectToAction(nameof(Index));
// }
//
// return View(machinePhoto);
// }
// GET: MachinePhotos/Edit/5
public async Task<IActionResult> Edit(Guid? id)

View File

@@ -1,5 +1,8 @@
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.AspNetCore.Http;
namespace cicm_web.Areas.Admin.Models
{
@@ -12,5 +15,11 @@ namespace cicm_web.Areas.Admin.Models
public DateTime UploadDate { get; set; }
[DisplayName("Uploaded by")]
public string UploadUser { get; set; }
[NotMapped]
[Required(ErrorMessage = "Image file required")]
[DisplayName("Upload photo:")]
public IFormFile Photo { get; set; }
public int MachineId { get; set; }
public int LicenseId { get; set; }
}
}

View File

@@ -1,4 +1,7 @@
@model Cicm.Database.Models.MachinePhoto
@using Cicm.Database.Models
@using Microsoft.AspNetCore.Identity
@model cicm_web.Areas.Admin.Models.MachinePhotoViewModel
@inject UserManager<ApplicationUser> UserManager
@{
ViewData["Title"] = "Create";
@@ -6,8 +9,31 @@
<h1>Create</h1>
<h4>MachinePhoto</h4>
<h4>Machine photo</h4>
<hr />
<div class="row">
<div class="col-md-8">
<p>
By uploading this photo you confirm you have the rights on it, and you authorize us the non-exclusive rights of show, and distribution, of the photo in database, and the associated mobile application, under the license chosen below.
</p>
<p>
You also confirm that this photo corresponds, to the best of your knowledge, to the specified machine, accompanying materials (such as box, cabling or manuals on the time of retail).
</p>
<p>
Photos that are not clear enough or of too small resolution will be removed of the database.
</p>
<p>
@* TODO Detect roles *@
This photo will not appear publicly until approved to an administrator.
</p>
<p>
Upload of inappropriate or unrelated photos will create a warning in your account. Several warnings mean your account would be terminated.
</p>
<p>
Removal of your account do not automatically revoke our license to use your photos. If you want to remove your photos contact with an administrator before you remove your account. Failure to do so makes us technically unable to remove your photos in the future.
</p>
</div>
</div>
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
@@ -15,332 +41,42 @@
class="text-danger">
</div>
<div class="form-group">
<label asp-for="Author"
<label asp-for="Machine"
class="control-label">
</label>
<input asp-for="Author"
class="form-control" />
<span asp-validation-for="Author"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="CameraManufacturer"
class="control-label">
</label>
<input asp-for="CameraManufacturer"
class="form-control" />
<span asp-validation-for="CameraManufacturer"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="CameraModel"
class="control-label">
</label>
<input asp-for="CameraModel"
class="form-control" />
<span asp-validation-for="CameraModel"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="ColorSpace"
class="control-label">
</label>
<input asp-for="ColorSpace"
class="form-control" />
<span asp-validation-for="ColorSpace"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Comments"
class="control-label">
</label>
<input asp-for="Comments"
class="form-control" />
<span asp-validation-for="Comments"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Contrast"
class="control-label">
</label>
<input asp-for="Contrast"
class="form-control" />
<span asp-validation-for="Contrast"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="CreationDate"
class="control-label">
</label>
<input asp-for="CreationDate"
class="form-control" />
<span asp-validation-for="CreationDate"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="DigitalZoomRatio"
class="control-label">
</label>
<input asp-for="DigitalZoomRatio"
class="form-control" />
<span asp-validation-for="DigitalZoomRatio"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="ExifVersion"
class="control-label">
</label>
<input asp-for="ExifVersion"
class="form-control" />
<span asp-validation-for="ExifVersion"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Exposure"
class="control-label">
</label>
<input asp-for="Exposure"
class="form-control" />
<span asp-validation-for="Exposure"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="ExposureMethod"
class="control-label">
</label>
<input asp-for="ExposureMethod"
class="form-control" />
<span asp-validation-for="ExposureMethod"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="ExposureProgram"
class="control-label">
</label>
<input asp-for="ExposureProgram"
class="form-control" />
<span asp-validation-for="ExposureProgram"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Flash"
class="control-label">
</label>
<input asp-for="Flash"
class="form-control" />
<span asp-validation-for="Flash"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Focal"
class="control-label">
</label>
<input asp-for="Focal"
class="form-control" />
<span asp-validation-for="Focal"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="FocalLength"
class="control-label">
</label>
<input asp-for="FocalLength"
class="form-control" />
<span asp-validation-for="FocalLength"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="FocalLengthEquivalent"
class="control-label">
</label>
<input asp-for="FocalLengthEquivalent"
class="form-control" />
<span asp-validation-for="FocalLengthEquivalent"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="HorizontalResolution"
class="control-label">
</label>
<input asp-for="HorizontalResolution"
class="form-control" />
<span asp-validation-for="HorizontalResolution"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="IsoRating"
class="control-label">
</label>
<input asp-for="IsoRating"
class="form-control" />
<span asp-validation-for="IsoRating"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Lens"
class="control-label">
</label>
<input asp-for="Lens"
class="form-control" />
<span asp-validation-for="Lens"
class="text-danger">
</span>
<select asp-for="MachineId"
class="form-control"
asp-items="ViewBag.MachineId">
</select>
</div>
<div class="form-group">
<label asp-for="License"
class="control-label">
</label>
<input asp-for="License"
class="form-control" />
<span asp-validation-for="License"
<select asp-for="LicenseId"
class="form-control"
asp-items="ViewBag.LicenseId">
</select>
</div>
<div class="form-group">
<label asp-for="UploadUser"
class="control-label">
</label>
<input asp-for="UploadUser"
class="form-control"
value="@UserManager.GetUserName(User)"
readonly />
<span asp-validation-for="UploadUser"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="LightSource"
<label asp-for="Photo"
class="control-label">
</label>
<input asp-for="LightSource"
<input asp-for="Photo"
class="form-control" />
<span asp-validation-for="LightSource"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="MeteringMode"
class="control-label">
</label>
<input asp-for="MeteringMode"
class="form-control" />
<span asp-validation-for="MeteringMode"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Orientation"
class="control-label">
</label>
<input asp-for="Orientation"
class="form-control" />
<span asp-validation-for="Orientation"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="PixelComposition"
class="control-label">
</label>
<input asp-for="PixelComposition"
class="form-control" />
<span asp-validation-for="PixelComposition"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Saturation"
class="control-label">
</label>
<input asp-for="Saturation"
class="form-control" />
<span asp-validation-for="Saturation"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="SceneCaptureType"
class="control-label">
</label>
<input asp-for="SceneCaptureType"
class="form-control" />
<span asp-validation-for="SceneCaptureType"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="SceneControl"
class="control-label">
</label>
<input asp-for="SceneControl"
class="form-control" />
<span asp-validation-for="SceneControl"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="SensingMethod"
class="control-label">
</label>
<input asp-for="SensingMethod"
class="form-control" />
<span asp-validation-for="SensingMethod"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="Sharpness"
class="control-label">
</label>
<input asp-for="Sharpness"
class="form-control" />
<span asp-validation-for="Sharpness"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="SoftwareUsed"
class="control-label">
</label>
<input asp-for="SoftwareUsed"
class="form-control" />
<span asp-validation-for="SoftwareUsed"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="SubjectDistanceRange"
class="control-label">
</label>
<input asp-for="SubjectDistanceRange"
class="form-control" />
<span asp-validation-for="SubjectDistanceRange"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="VerticalResolution"
class="control-label">
</label>
<input asp-for="VerticalResolution"
class="form-control" />
<span asp-validation-for="VerticalResolution"
class="text-danger">
</span>
</div>
<div class="form-group">
<label asp-for="WhiteBalance"
class="control-label">
</label>
<input asp-for="WhiteBalance"
class="form-control" />
<span asp-validation-for="WhiteBalance"
<span asp-validation-for="Photo"
class="text-danger">
</span>
</div>
@@ -348,11 +84,15 @@
<input class="btn btn-primary"
type="submit"
value="Create" />
<a asp-action="Index"
class="btn btn-secondary">
Back to List
</a>
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

View File

@@ -358,3 +358,7 @@
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

View File

@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<Version>3.0.99.603</Version>
<Version>3.0.99.604</Version>
<Company>Canary Islands Computer Museum</Company>
<Copyright>Copyright © 2003-2018 Natalia Portillo</Copyright>
<Product>Canary Islands Computer Museum Website</Product>