From 1dc8eac035628192f4c041d600db12058c0d136d Mon Sep 17 00:00:00 2001 From: tidusjar Date: Fri, 20 Oct 2017 22:07:30 +0100 Subject: [PATCH] Fixed #1583 you can now delete users. Fixed the issue where the requested by was not showing. Finally fixed the broken poster paths --- .../Engine/Interfaces/IRequestEngine.cs | 1 + src/Ombi.Core/Engine/MovieRequestEngine.cs | 10 +- src/Ombi.Core/Engine/TvRequestEngine.cs | 5 + src/Ombi.Core/Models/UI/UserViewModel.cs | 2 +- .../Rules/Request/ExistingMovieRequestRule.cs | 1 + src/Ombi.Store/Repository/IRepository.cs | 2 + src/Ombi.Store/Repository/Repository.cs | 12 ++ .../Requests/IMovieRequestRepository.cs | 3 +- .../Requests/ITvRequestRepository.cs | 6 +- .../Requests/MovieRequestRepository.cs | 7 +- .../Requests/TvRequestRepository.cs | 11 +- src/Ombi/.vscode/settings.json | 5 + src/Ombi/ClientApp/app/app.module.ts | 4 +- src/Ombi/ClientApp/app/interfaces/IUser.ts | 2 +- .../app/requests/movierequests.component.html | 4 +- .../app/services/identity.service.ts | 4 + .../usermanagement/updatedetails.component.ts | 2 +- .../usermanagement-add.component.html | 2 +- .../usermanagement-add.component.ts | 4 +- .../usermanagement-edit.component.html | 6 +- .../usermanagement-edit.component.ts | 49 +++++--- .../usermanagement.component.html | 106 +----------------- .../usermanagement/usermanagement.module.ts | 5 +- src/Ombi/ClientApp/styles/Themes/plex.scss | 10 ++ src/Ombi/Controllers/IdentityController.cs | 32 +++++- src/Ombi/Controllers/RequestController.cs | 15 +++ src/Ombi/Controllers/TokenController.cs | 2 +- 27 files changed, 157 insertions(+), 155 deletions(-) create mode 100644 src/Ombi/.vscode/settings.json diff --git a/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs b/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs index 90a6b0011..517a1e127 100644 --- a/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs +++ b/src/Ombi.Core/Engine/Interfaces/IRequestEngine.cs @@ -13,5 +13,6 @@ namespace Ombi.Core.Engine.Interfaces RequestCountModel RequestCount(); Task> GetRequests(int count, int position); Task> GetRequests(); + Task UserHasRequest(string userId); } } \ No newline at end of file diff --git a/src/Ombi.Core/Engine/MovieRequestEngine.cs b/src/Ombi.Core/Engine/MovieRequestEngine.cs index 5823578dc..91fb44d63 100644 --- a/src/Ombi.Core/Engine/MovieRequestEngine.cs +++ b/src/Ombi.Core/Engine/MovieRequestEngine.cs @@ -120,7 +120,10 @@ namespace Ombi.Core.Engine public async Task> GetRequests(int count, int position) { var allRequests = await MovieRepository.GetWithUser().Skip(position).Take(count).ToListAsync(); - allRequests.ForEach(x => PosterPathHelper.FixPosterPath(x.PosterPath)); + allRequests.ForEach(x => + { + x.PosterPath = PosterPathHelper.FixPosterPath(x.PosterPath); + }); return allRequests; } @@ -258,6 +261,11 @@ namespace Ombi.Core.Engine await MovieRepository.Delete(request); } + public async Task UserHasRequest(string userId) + { + return await MovieRepository.GetAll().AnyAsync(x => x.RequestedUserId == userId); + } + private async Task AddMovieRequest(MovieRequests model, string movieName) { await MovieRepository.Add(model); diff --git a/src/Ombi.Core/Engine/TvRequestEngine.cs b/src/Ombi.Core/Engine/TvRequestEngine.cs index 852d5e2f0..eb38ff1d1 100644 --- a/src/Ombi.Core/Engine/TvRequestEngine.cs +++ b/src/Ombi.Core/Engine/TvRequestEngine.cs @@ -242,6 +242,11 @@ namespace Ombi.Core.Engine await TvRepository.Delete(request); } + public async Task UserHasRequest(string userId) + { + return await TvRepository.GetChild().AnyAsync(x => x.RequestedUserId == userId); + } + private async Task AddExistingRequest(ChildRequests newRequest, TvRequests existingRequest) { // Add the child diff --git a/src/Ombi.Core/Models/UI/UserViewModel.cs b/src/Ombi.Core/Models/UI/UserViewModel.cs index 87ad7a97f..dffe6000a 100644 --- a/src/Ombi.Core/Models/UI/UserViewModel.cs +++ b/src/Ombi.Core/Models/UI/UserViewModel.cs @@ -6,7 +6,7 @@ namespace Ombi.Core.Models.UI public class UserViewModel { public string Id { get; set; } - public string Username { get; set; } + public string UserName { get; set; } public string Alias { get; set; } public List Claims { get; set; } public string EmailAddress { get; set; } diff --git a/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs b/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs index 1761dcf99..d48245e9b 100644 --- a/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs +++ b/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs @@ -4,6 +4,7 @@ using Ombi.Core.Rule.Interfaces; using Ombi.Store.Entities; using Ombi.Store.Entities.Requests; using Ombi.Store.Repository; +using Ombi.Store.Repository.Requests; namespace Ombi.Core.Rule.Rules.Request { diff --git a/src/Ombi.Store/Repository/IRepository.cs b/src/Ombi.Store/Repository/IRepository.cs index 15702572d..db5f3fc15 100644 --- a/src/Ombi.Store/Repository/IRepository.cs +++ b/src/Ombi.Store/Repository/IRepository.cs @@ -14,6 +14,8 @@ namespace Ombi.Store.Repository IQueryable GetAll(); Task FirstOrDefaultAsync(Expression> predicate); Task AddRange(IEnumerable content); + Task DeleteRange(IEnumerable req); + Task Delete(T request); IIncludableQueryable Include( IQueryable source, Expression> navigationPropertyPath) diff --git a/src/Ombi.Store/Repository/Repository.cs b/src/Ombi.Store/Repository/Repository.cs index dbd0cfe7f..4900430f1 100644 --- a/src/Ombi.Store/Repository/Repository.cs +++ b/src/Ombi.Store/Repository/Repository.cs @@ -48,6 +48,18 @@ namespace Ombi.Store.Repository return content; } + public async Task Delete(T request) + { + _db.Remove(request); + await _ctx.SaveChangesAsync(); + } + + public async Task DeleteRange(IEnumerable req) + { + _db.RemoveRange(req); + await _ctx.SaveChangesAsync(); + } + public IIncludableQueryable Include( IQueryable source, Expression> navigationPropertyPath) where TEntity : class diff --git a/src/Ombi.Store/Repository/Requests/IMovieRequestRepository.cs b/src/Ombi.Store/Repository/Requests/IMovieRequestRepository.cs index 7cca5105c..64f95fd71 100644 --- a/src/Ombi.Store/Repository/Requests/IMovieRequestRepository.cs +++ b/src/Ombi.Store/Repository/Requests/IMovieRequestRepository.cs @@ -2,12 +2,11 @@ using System.Threading.Tasks; using Ombi.Store.Entities.Requests; -namespace Ombi.Store.Repository +namespace Ombi.Store.Repository.Requests { public interface IMovieRequestRepository : IRepository { Task Add(MovieRequests request); - Task Delete(MovieRequests request); Task GetRequestAsync(int theMovieDbId); MovieRequests GetRequest(int theMovieDbId); Task Update(MovieRequests request); diff --git a/src/Ombi.Store/Repository/Requests/ITvRequestRepository.cs b/src/Ombi.Store/Repository/Requests/ITvRequestRepository.cs index 588792ad9..46d2c0bf6 100644 --- a/src/Ombi.Store/Repository/Requests/ITvRequestRepository.cs +++ b/src/Ombi.Store/Repository/Requests/ITvRequestRepository.cs @@ -1,11 +1,12 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Ombi.Store.Context; using Ombi.Store.Entities.Requests; namespace Ombi.Store.Repository.Requests { - public interface ITvRequestRepository + public interface ITvRequestRepository { IOmbiContext Db { get; } Task Add(TvRequests request); @@ -19,5 +20,6 @@ namespace Ombi.Store.Repository.Requests Task UpdateChild(ChildRequests request); IQueryable GetChild(); Task Save(); + Task DeleteChildRange(IEnumerable request); } } \ No newline at end of file diff --git a/src/Ombi.Store/Repository/Requests/MovieRequestRepository.cs b/src/Ombi.Store/Repository/Requests/MovieRequestRepository.cs index c62a770a4..2c2cd05f0 100644 --- a/src/Ombi.Store/Repository/Requests/MovieRequestRepository.cs +++ b/src/Ombi.Store/Repository/Requests/MovieRequestRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; @@ -46,12 +47,6 @@ namespace Ombi.Store.Repository.Requests .AsQueryable(); } - public async Task Delete(MovieRequests request) - { - Db.MovieRequests.Remove(request); - await Db.SaveChangesAsync(); - } - public async Task Update(MovieRequests request) { if (Db.Entry(request).State == EntityState.Detached) diff --git a/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs b/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs index 0f0a914c5..216058d67 100644 --- a/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs +++ b/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Ombi.Store.Context; @@ -82,13 +83,19 @@ namespace Ombi.Store.Repository.Requests Db.TvRequests.Remove(request); await Db.SaveChangesAsync(); } - + public async Task DeleteChild(ChildRequests request) { Db.ChildRequests.Remove(request); await Db.SaveChangesAsync(); } + public async Task DeleteChildRange(IEnumerable request) + { + Db.ChildRequests.RemoveRange(request); + await Db.SaveChangesAsync(); + } + public async Task Update(TvRequests request) { Db.Update(request); diff --git a/src/Ombi/.vscode/settings.json b/src/Ombi/.vscode/settings.json new file mode 100644 index 000000000..3ed807a1a --- /dev/null +++ b/src/Ombi/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "usermanagement" + ] +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/app/app.module.ts b/src/Ombi/ClientApp/app/app.module.ts index 2a8dea9d5..f7c5c240b 100644 --- a/src/Ombi/ClientApp/app/app.module.ts +++ b/src/Ombi/ClientApp/app/app.module.ts @@ -10,7 +10,7 @@ import { RouterModule, Routes } from "@angular/router"; //import { DragulaModule, DragulaService } from 'ng2-dragula/ng2-dragula'; import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; import { GrowlModule } from "primeng/components/growl/growl"; -import { ButtonModule, CaptchaModule, DataTableModule,DialogModule, SharedModule, TooltipModule } from "primeng/primeng"; +import { ButtonModule, CaptchaModule,ConfirmationService, ConfirmDialogModule, DataTableModule,DialogModule, SharedModule, TooltipModule } from "primeng/primeng"; // Components import { AppComponent } from "./app.component"; @@ -80,6 +80,7 @@ const routes: Routes = [ RequestsModule, CaptchaModule, TooltipModule, + ConfirmDialogModule, ], declarations: [ AppComponent, @@ -98,6 +99,7 @@ const routes: Routes = [ IdentityService, StatusService, LandingPageService, + ConfirmationService, ImageService, //DragulaService ], diff --git a/src/Ombi/ClientApp/app/interfaces/IUser.ts b/src/Ombi/ClientApp/app/interfaces/IUser.ts index fae6a4bc1..26c48b22e 100644 --- a/src/Ombi/ClientApp/app/interfaces/IUser.ts +++ b/src/Ombi/ClientApp/app/interfaces/IUser.ts @@ -2,7 +2,7 @@ export interface IUser { id: string; - username: string; + userName: string; alias: string; claims: ICheckbox[]; emailAddress: string; diff --git a/src/Ombi/ClientApp/app/requests/movierequests.component.html b/src/Ombi/ClientApp/app/requests/movierequests.component.html index 6f4e180c8..6e5f7eef5 100644 --- a/src/Ombi/ClientApp/app/requests/movierequests.component.html +++ b/src/Ombi/ClientApp/app/requests/movierequests.component.html @@ -30,9 +30,9 @@
Requested By: - {{request.requestedUser.username}} + {{request.requestedUser.userName}} {{request.requestedUser.alias}} - {{request.requestedUser.username}} + {{request.requestedUser.userName}}
Status: diff --git a/src/Ombi/ClientApp/app/services/identity.service.ts b/src/Ombi/ClientApp/app/services/identity.service.ts index e80c73eb6..5e6601f2f 100644 --- a/src/Ombi/ClientApp/app/services/identity.service.ts +++ b/src/Ombi/ClientApp/app/services/identity.service.ts @@ -47,6 +47,10 @@ export class IdentityService extends ServiceAuthHelpers { return this.http.delete(`${this.url}${user.id}`, { headers: this.headers }).map(this.extractData); } + public hasUserRequested(userId: string): Observable { + return this.http.get(`${this.url}userhasrequest/${userId}`).map(this.extractData); + } + public submitResetPassword(email: string): Observable { return this.regularHttp.post(this.url + "reset", JSON.stringify({email}), { headers: this.headers }).map(this.extractData); } diff --git a/src/Ombi/ClientApp/app/usermanagement/updatedetails.component.ts b/src/Ombi/ClientApp/app/usermanagement/updatedetails.component.ts index fb597b55e..ef8d3b2a2 100644 --- a/src/Ombi/ClientApp/app/usermanagement/updatedetails.component.ts +++ b/src/Ombi/ClientApp/app/usermanagement/updatedetails.component.ts @@ -20,7 +20,7 @@ export class UpdateDetailsComponent implements OnInit { const localUser = x as IUpdateLocalUser; this.form = this.fb.group({ id:[localUser.id], - username: [localUser.username], + username: [localUser.userName], emailAddress: [localUser.emailAddress, [Validators.email]], confirmNewPassword: [localUser.confirmNewPassword], currentPassword: [localUser.currentPassword, [Validators.required]], diff --git a/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.html b/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.html index bc23a6141..9f2f5328c 100644 --- a/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.html +++ b/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.html @@ -14,7 +14,7 @@
- +
diff --git a/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.ts b/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.ts index 5100f675e..6eab25736 100644 --- a/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.ts +++ b/src/Ombi/ClientApp/app/usermanagement/usermanagement-add.component.ts @@ -24,7 +24,7 @@ export class UserManagementAddComponent implements OnInit { emailAddress: "", id: "", password: "", - username: "", + userName: "", userType: UserType.LocalUser, checked:false, hasLoggedIn: false, @@ -54,7 +54,7 @@ export class UserManagementAddComponent implements OnInit { this.identityService.createUser(this.user).subscribe(x => { if (x.successful) { - this.notificationSerivce.success("Updated", `The user ${this.user.username} has been created successfully`); + this.notificationSerivce.success("Updated", `The user ${this.user.userName} has been created successfully`); this.router.navigate(["usermanagement"]); } else { x.errors.forEach((val) => { diff --git a/src/Ombi/ClientApp/app/usermanagement/usermanagement-edit.component.html b/src/Ombi/ClientApp/app/usermanagement/usermanagement-edit.component.html index b27e82cf4..23038e68e 100644 --- a/src/Ombi/ClientApp/app/usermanagement/usermanagement-edit.component.html +++ b/src/Ombi/ClientApp/app/usermanagement/usermanagement-edit.component.html @@ -1,8 +1,10 @@ 
-

User: {{user.username}}

+

User: {{user.userName}}

+ +