2 using System.Collections.Generic;
4 using Microsoft.AspNetCore.Authorization;
5 using Microsoft.AspNetCore.Mvc;
36 _publicationService = publicationService;
37 _userProfileService = userProfileService;
38 _departmentService = departmentService;
39 _articleService = articleService;
40 _scientificWorkService = scientificWorkService;
41 _conferenceService = conferenceService;
42 _reportThesisService = reportThesisService;
48 model.
Publications = FilterPublications(model, PageHelpers.IsAdmin(User), PageHelpers.IsHeadOfDepartment(User));
61 var publication = _publicationService.GetById(
id.Value);
62 if (publication == null)
67 var authors = _publicationService.GetPublicationAuthors(
id.Value);
72 UserIsAuthor = authors.Contains(_userProfileService.Get(User))
85 Conferences = _conferenceService.GetAll()
92 [ValidateAntiForgeryToken]
95 if (!ModelState.IsValid)
103 _articleService.CreateItem(model.
ToArticle());
104 _articleService.AddAuthor(
105 _articleService.Get(a => a.Title == model.
Article.Title),
106 _userProfileService.Get(u => u.UserName == User.Identity.Name)
110 if (PageHelpers.IsHeadOfDepartment(User))
119 _reportThesisService.AddAuthor(
120 _reportThesisService.Get(r => r.Thesis == model.
ReportThesis.Thesis).Id,
121 _userProfileService.Get(User).Id);
125 _publicationService.CreateItem(newPublication);
126 _publicationService.AddAuthor(
127 _publicationService.Get(p => p.Title == newPublication.Title && p.PublishingYear == newPublication.PublishingYear && p.Specification == newPublication.Specification),
128 _userProfileService.Get(User)
135 return RedirectToAction(nameof(Index));
139 public IActionResult
Edit(Guid?
id)
146 var publication = _publicationService.GetById(
id.Value);
147 if (publication == null)
152 if (!AllowUserToEditPublication(publication))
159 Authors = _publicationService.GetPublicationAuthors(publication.Id),
160 Users = _userProfileService.GetAll()
163 return View(editModel);
168 [ValidateAntiForgeryToken]
176 if (!_publicationService.PublicationExists(
id))
181 var publication = _publicationService.GetById(
id);
182 if (ModelState.IsValid)
184 publication.PublicationType = model.
Type;
192 _publicationService.UpdateItem(publication);
193 return RedirectToAction(
"Index");
198 Authors = _publicationService.GetPublicationAuthors(publication.Id),
199 Users = _userProfileService.GetAll()
201 return View(editModel);
213 var publication = _publicationService.GetById(
id.Value);
214 if (publication == null)
219 var user = _userProfileService.Get(User);
220 if (!_publicationService.GetPublicationAuthors(publication.Id).Contains(user))
222 _publicationService.AddAuthor(publication, user);
225 return RedirectToAction(
"Details",
new {
id =
id.Value });
238 var user = _userProfileService.GetById(request.UserId);
244 var publication = _publicationService.GetById(
id.Value);
245 if (publication == null)
250 if (!AllowUserToEditPublication(publication))
255 if (!_publicationService.GetPublicationAuthors(publication.Id).Contains(user))
257 _publicationService.AddAuthor(publication, user);
273 var user = _userProfileService.GetById(request.UserId);
279 var publication = _publicationService.GetById(
id.Value);
280 if (publication == null)
285 if (!AllowUserToEditPublication(publication))
290 if (_publicationService.GetPublicationAuthors(publication.Id).Contains(user))
292 _publicationService.RemoveAuthor(publication, user);
306 var publication = _publicationService.GetById(
id.Value);
307 if (publication == null)
312 if (!PageHelpers.IsAdmin(User))
317 return View(publication);
321 [HttpPost, ActionName(
"Delete")]
322 [ValidateAntiForgeryToken]
325 var publication = _publicationService.GetById(
id);
326 if (publication == null)
331 if (!PageHelpers.IsAdmin(User))
336 _publicationService.DeleteById(
id);
337 return RedirectToAction(nameof(Index));
342 if (substring == null || type == null)
347 var publications = _publicationService.GetAllWhere(p => p.PublicationType == type.Value && p.Title.ToLower().Contains(substring.ToLower()));
359 private bool AllowUserToEditPublication(
Publication publication)
361 var user = _userProfileService.Get(User);
362 var department = _departmentService.Get(d => d.Staff.Contains(user));
363 var isHeadOfDepartment = PageHelpers.IsHeadOfDepartment(User) && publication.
UserProfilesPublications.Any(p => department.Staff.Contains(p.UserProfile));
364 return PageHelpers.IsAdmin(User) || isHeadOfDepartment ||
368 private List<PublicationBase> GetAllPublications()
370 var publications =
new List<PublicationBase>();
371 publications.AddRange(_publicationService.GetAll());
372 publications.AddRange(_articleService.GetAll());
373 publications.AddRange(_scientificWorkService.GetAll());
377 private IEnumerable<PublicationBase> FilterPublications(
PublicationIndexModel model,
bool userIsAdmin,
bool userIsHead)
379 var allPublications = GetAllPublications();
380 model.
Count = allPublications.Count;
401 var user = _userProfileService.Get(u => u.UserName == User.Identity.Name);
422 var department = _departmentService.Get(u => u.Staff.Contains(user));
423 publications = department != null
439 publications = publications.Where(p => p.PublishingYear >= yearFrom);
444 publications = publications.Where(p => p.PublishingYear <= yearTo);
453 var publications = GetAllPublications().Skip((page - 1) * count).Take(count);
457 publications = publications.OrderBy(p => p.Title);
DAL.Entities.Publications.Article ToArticle()
IActionResult RemoveUserFromAuthors(Guid?id, [FromBody] UpdateUserRequest request)
IEnumerable< DAL.Entities.ReportThesis > ReportTheses
IActionResult Edit(Guid id, PublicationEditModel model)
static bool CheckForPersonalPublication(PublicationBase publication, UserProfile user)
IEnumerable< DAL.Entities.Publications.PublicationBase > Publications
DAL.Entities.Publications.Publication.PublicationTypes Type
IActionResult Create(PublicationCreateModel model)
IActionResult Edit(Guid?id)
DAL.Entities.Publications.Publication.SortByOptions SortBy
ReportThesisModel ReportThesis
static bool CheckForDepartmentPublication(PublicationBase publication, Department department)
string PublishingHouseName
DAL.Entities.Publications.Publication ToPublication()
PublicationController(IPublicationService publicationService, IUserProfileService userProfileService, IDepartmentService departmentService, IArticleService articleService, IScientificWorkService scientificWorkService, IConferenceService conferenceService, IReportThesisService reportThesisService)
IActionResult Delete(Guid?id)
DAL.Entities.Publications.Publication.PublicationSetType PublicationSetType
PublicationTypes PublicationType
IActionResult AddSelfToAuthors(Guid?id)
IActionResult SearchPublications(string substring, Publication.PublicationTypes?type)
IActionResult Index(PublicationIndexModel model)
ScientificWork ScientificWork
DAL.Entities.Publications.Publication.PrintStatuses PrintStatus
IActionResult Details(Guid?id)
virtual ICollection< UserProfilesPublications > UserProfilesPublications
const string HeadOfDepartmentOrAdmin
IActionResult AddUserToAuthors(Guid?id, [FromBody] UpdateUserRequest request)
IActionResult DeleteConfirmed(Guid id)