mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 07:46:05 -07:00
Resolved #7
This commit is contained in:
parent
15d1b9f525
commit
67ecbbf178
7 changed files with 112 additions and 16 deletions
|
@ -24,6 +24,7 @@ namespace PlexRequests.Store
|
||||||
public IssueState Issues { get; set; }
|
public IssueState Issues { get; set; }
|
||||||
public string OtherMessage { get; set; }
|
public string OtherMessage { get; set; }
|
||||||
public bool LatestTv { get; set; }
|
public bool LatestTv { get; set; }
|
||||||
|
public string AdminNote { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum RequestType
|
public enum RequestType
|
||||||
|
|
|
@ -27,6 +27,7 @@ CREATE TABLE IF NOT EXISTS Requested
|
||||||
PosterPath varchar(50) NOT NULL,
|
PosterPath varchar(50) NOT NULL,
|
||||||
ReleaseDate varchar(50) NOT NULL,
|
ReleaseDate varchar(50) NOT NULL,
|
||||||
Status varchar(50) NOT NULL,
|
Status varchar(50) NOT NULL,
|
||||||
|
AdminNote varchar(50),
|
||||||
Approved INTEGER NOT NULL,
|
Approved INTEGER NOT NULL,
|
||||||
LatestTv INTEGER NOT NULL,
|
LatestTv INTEGER NOT NULL,
|
||||||
RequestedBy varchar(50),
|
RequestedBy varchar(50),
|
||||||
|
|
|
@ -90,6 +90,34 @@ $(".theSaveButton").click(function (e) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Note Modal click
|
||||||
|
$(".theNoteSaveButton").click(function (e) {
|
||||||
|
var comment = $("#noteArea").val();
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
var $form = $("#noteForm");
|
||||||
|
var data = $form.serialize();
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: $form.prop("method"),
|
||||||
|
url: $form.prop("action"),
|
||||||
|
data: data,
|
||||||
|
dataType: "json",
|
||||||
|
success: function (response) {
|
||||||
|
if (checkJsonResponse(response)) {
|
||||||
|
generateNotify("Success! Added Note.", "success");
|
||||||
|
$("#myModal").modal("hide");
|
||||||
|
$('#adminNotesArea').html("<div>Note from Admin: " + comment + "</div>");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
|
console.log(e);
|
||||||
|
generateNotify("Something went wrong!", "danger");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Update the modal
|
// Update the modal
|
||||||
$('#myModal').on('show.bs.modal', function (event) {
|
$('#myModal').on('show.bs.modal', function (event) {
|
||||||
var button = $(event.relatedTarget); // Button that triggered the modal
|
var button = $(event.relatedTarget); // Button that triggered the modal
|
||||||
|
@ -101,6 +129,17 @@ $('#myModal').on('show.bs.modal', function (event) {
|
||||||
requestField.val(id); // Add ID to the hidden field
|
requestField.val(id); // Add ID to the hidden field
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Update the note modal
|
||||||
|
$('#noteModal').on('show.bs.modal', function (event) {
|
||||||
|
var button = $(event.relatedTarget); // Button that triggered the modal
|
||||||
|
var id = button.data('identifier'); // Extract info from data-* attributes
|
||||||
|
|
||||||
|
var modal = $(this);
|
||||||
|
modal.find('.theNoteSaveButton').val(id); // Add ID to the button
|
||||||
|
var requestField = modal.find('input');
|
||||||
|
requestField.val(id); // Add ID to the hidden field
|
||||||
|
});
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
$(document).on("click", ".delete", function (e) {
|
$(document).on("click", ".delete", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -268,7 +307,8 @@ function buildRequestContext(result, type) {
|
||||||
admin: result.admin,
|
admin: result.admin,
|
||||||
issues: result.issues,
|
issues: result.issues,
|
||||||
otherMessage: result.otherMessage,
|
otherMessage: result.otherMessage,
|
||||||
requestId: result.id
|
requestId: result.id,
|
||||||
|
adminNote: result.adminNotes
|
||||||
};
|
};
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
|
|
|
@ -47,5 +47,6 @@ namespace PlexRequests.UI.Models
|
||||||
public bool Admin { get; set; }
|
public bool Admin { get; set; }
|
||||||
public string Issues { get; set; }
|
public string Issues { get; set; }
|
||||||
public string OtherMessage { get; set; }
|
public string OtherMessage { get; set; }
|
||||||
|
public string AdminNotes { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,9 @@ namespace PlexRequests.UI.Modules
|
||||||
Post["/clearissues"] = _ => ClearIssue((int)Request.Form.Id);
|
Post["/clearissues"] = _ => ClearIssue((int)Request.Form.Id);
|
||||||
|
|
||||||
Post["/changeavailability"] = _ => ChangeRequestAvailability((int)Request.Form.Id, (bool)Request.Form.Available);
|
Post["/changeavailability"] = _ => ChangeRequestAvailability((int)Request.Form.Id, (bool)Request.Form.Available);
|
||||||
|
Post["/addnote"] = _ => AddNote((int)Request.Form.Id, (string)Request.Form.noteArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IRepository<RequestedModel> Service { get; }
|
private IRepository<RequestedModel> Service { get; }
|
||||||
private ISettingsService<PlexRequestSettings> PrSettings { get; }
|
private ISettingsService<PlexRequestSettings> PrSettings { get; }
|
||||||
private ISettingsService<PlexSettings> PlexSettings { get; }
|
private ISettingsService<PlexSettings> PlexSettings { get; }
|
||||||
|
@ -94,7 +96,8 @@ namespace PlexRequests.UI.Modules
|
||||||
Available = movie.Available,
|
Available = movie.Available,
|
||||||
Admin = isAdmin,
|
Admin = isAdmin,
|
||||||
Issues = movie.Issues.Humanize(LetterCasing.Title),
|
Issues = movie.Issues.Humanize(LetterCasing.Title),
|
||||||
OtherMessage = movie.OtherMessage
|
OtherMessage = movie.OtherMessage,
|
||||||
|
AdminNotes = movie.AdminNote
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
return Response.AsJson(viewModel);
|
return Response.AsJson(viewModel);
|
||||||
|
@ -122,7 +125,8 @@ namespace PlexRequests.UI.Modules
|
||||||
Available = tv.Available,
|
Available = tv.Available,
|
||||||
Admin = isAdmin,
|
Admin = isAdmin,
|
||||||
Issues = tv.Issues.Humanize(LetterCasing.Title),
|
Issues = tv.Issues.Humanize(LetterCasing.Title),
|
||||||
OtherMessage = tv.OtherMessage
|
OtherMessage = tv.OtherMessage,
|
||||||
|
AdminNotes = tv.AdminNote
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
return Response.AsJson(viewModel);
|
return Response.AsJson(viewModel);
|
||||||
|
@ -156,14 +160,14 @@ namespace PlexRequests.UI.Modules
|
||||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||||
}
|
}
|
||||||
originalRequest.Issues = issue;
|
originalRequest.Issues = issue;
|
||||||
originalRequest.OtherMessage = !string.IsNullOrEmpty(comment)
|
originalRequest.OtherMessage = !string.IsNullOrEmpty(comment)
|
||||||
? $"{Session[SessionKeys.UsernameKey]} - {comment}"
|
? $"{Session[SessionKeys.UsernameKey]} - {comment}"
|
||||||
: string.Empty;
|
: string.Empty;
|
||||||
|
|
||||||
|
|
||||||
var result = Service.Update(originalRequest);
|
var result = Service.Update(originalRequest);
|
||||||
return Response.AsJson(result
|
return Response.AsJson(result
|
||||||
? new JsonResponseModel { Result = true }
|
? new JsonResponseModel { Result = true }
|
||||||
: new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
: new JsonResponseModel { Result = false, Message = "Could not add issue, please try again or contact the administrator!" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,8 +187,8 @@ namespace PlexRequests.UI.Modules
|
||||||
originalRequest.OtherMessage = string.Empty;
|
originalRequest.OtherMessage = string.Empty;
|
||||||
|
|
||||||
var result = Service.Update(originalRequest);
|
var result = Service.Update(originalRequest);
|
||||||
return Response.AsJson(result
|
return Response.AsJson(result
|
||||||
? new JsonResponseModel { Result = true }
|
? new JsonResponseModel { Result = true }
|
||||||
: new JsonResponseModel { Result = false, Message = "Could not clear issue, please try again or check the logs" });
|
: new JsonResponseModel { Result = false, Message = "Could not clear issue, please try again or check the logs" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,8 +204,24 @@ namespace PlexRequests.UI.Modules
|
||||||
|
|
||||||
var result = Service.Update(originalRequest);
|
var result = Service.Update(originalRequest);
|
||||||
return Response.AsJson(result
|
return Response.AsJson(result
|
||||||
? new {Result = true, Available = available, Message = string.Empty}
|
? new { Result = true, Available = available, Message = string.Empty }
|
||||||
: new { Result = false, Available=false, Message = "Could not update the availability, please try again or check the logs" });
|
: new { Result = false, Available = false, Message = "Could not update the availability, please try again or check the logs" });
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response AddNote(int requestId, string noteArea)
|
||||||
|
{
|
||||||
|
var originalRequest = Service.Get(requestId);
|
||||||
|
if (originalRequest == null)
|
||||||
|
{
|
||||||
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Request does not exist to change the availability!" });
|
||||||
|
}
|
||||||
|
|
||||||
|
originalRequest.AdminNote = noteArea;
|
||||||
|
|
||||||
|
var result = Service.Update(originalRequest);
|
||||||
|
return Response.AsJson(result
|
||||||
|
? new JsonResponseModel { Result = true }
|
||||||
|
: new JsonResponseModel { Result = false, Message = "Could not update the notes, please try again or check the logs" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -189,10 +189,12 @@ namespace PlexRequests.UI.Modules
|
||||||
Log.Trace("Getting movie info from TheMovieDb");
|
Log.Trace("Getting movie info from TheMovieDb");
|
||||||
Log.Trace(movieInfo.DumpJson);
|
Log.Trace(movieInfo.DumpJson);
|
||||||
|
|
||||||
|
#if !DEBUG
|
||||||
if (CheckIfTitleExistsInPlex(movieInfo.Title))
|
if (CheckIfTitleExistsInPlex(movieInfo.Title))
|
||||||
{
|
{
|
||||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{movieInfo.Title} is already in Plex!" });
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{movieInfo.Title} is already in Plex!" });
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
var model = new RequestedModel
|
var model = new RequestedModel
|
||||||
{
|
{
|
||||||
|
@ -263,10 +265,12 @@ namespace PlexRequests.UI.Modules
|
||||||
|
|
||||||
var showInfo = tvApi.GetInformation(showId, token).data;
|
var showInfo = tvApi.GetInformation(showId, token).data;
|
||||||
|
|
||||||
|
#if !DEBUG
|
||||||
if (CheckIfTitleExistsInPlex(showInfo.seriesName))
|
if (CheckIfTitleExistsInPlex(showInfo.seriesName))
|
||||||
{
|
{
|
||||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{showInfo.seriesName} is already in Plex!" });
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{showInfo.seriesName} is already in Plex!" });
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
DateTime firstAir;
|
DateTime firstAir;
|
||||||
DateTime.TryParse(showInfo.firstAired, out firstAir);
|
DateTime.TryParse(showInfo.firstAired, out firstAir);
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
@if (Context.CurrentUser.IsAuthenticated())
|
@if (Context.CurrentUser.IsAuthenticated())
|
||||||
{
|
{
|
||||||
<button id="approveAll" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve All</button>
|
<button id="approveAll" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve All</button>
|
||||||
<br/>
|
<br />
|
||||||
<br/>
|
<br />
|
||||||
}
|
}
|
||||||
<!-- Nav tabs -->
|
<!-- Nav tabs -->
|
||||||
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
|
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
|
||||||
|
@ -102,10 +102,13 @@
|
||||||
<div>Issue: {{issues}}</div>
|
<div>Issue: {{issues}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
<div id="adminNotesArea">
|
||||||
|
{{#if adminNote}}
|
||||||
|
<div>Note from Admin: {{adminNote}}</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2 col-sm-push-3">
|
<div class="col-sm-2 col-sm-push-3">
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
{{#if_eq admin true}}
|
{{#if_eq admin true}}
|
||||||
{{#if_eq approved false}}
|
{{#if_eq approved false}}
|
||||||
<form method="POST" action="/approval/approve" id="approve{{requestId}}">
|
<form method="POST" action="/approval/approve" id="approve{{requestId}}">
|
||||||
|
@ -117,7 +120,7 @@
|
||||||
<input name="Id" type="text" value="{{requestId}}" hidden="hidden" />
|
<input name="Id" type="text" value="{{requestId}}" hidden="hidden" />
|
||||||
<button id="{{requestId}}" style="text-align: right" class="btn btn-sm btn-danger-outline delete" type="submit"><i class="fa fa-plus"></i> Remove</button>
|
<button id="{{requestId}}" style="text-align: right" class="btn btn-sm btn-danger-outline delete" type="submit"><i class="fa fa-plus"></i> Remove</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<form method="POST" action="/requests/clearissues" id="clear{{requestId}}">
|
<form method="POST" action="/requests/clearissues" id="clear{{requestId}}">
|
||||||
<input name="Id" type="text" value="{{requestId}}" hidden="hidden" />
|
<input name="Id" type="text" value="{{requestId}}" hidden="hidden" />
|
||||||
<button id="{{requestId}}" style="text-align: right" class="btn btn-sm btn-info-outline clear" type="submit"><i class="fa fa-check"></i> Clear Issues</button>
|
<button id="{{requestId}}" style="text-align: right" class="btn btn-sm btn-info-outline clear" type="submit"><i class="fa fa-check"></i> Clear Issues</button>
|
||||||
|
@ -150,6 +153,11 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
{{#if_eq admin true}}
|
||||||
|
|
||||||
|
<button id="{{requestId}}" data-identifier="{{requestId}}" style="text-align: right" value="false" href="#" class="btn btn-sm btn-info-outline note" data-toggle="modal" data-target="#noteModal">Add Note</button>
|
||||||
|
|
||||||
|
{{/if_eq}}
|
||||||
</div>
|
</div>
|
||||||
@* // TODO add Issues to the view *@
|
@* // TODO add Issues to the view *@
|
||||||
</div>
|
</div>
|
||||||
|
@ -170,7 +178,7 @@
|
||||||
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-danger-outline" data-dismiss="modal">Close</button>
|
||||||
<button type="button" class="btn btn-primary-outline theSaveButton" data-dismiss="modal">Save changes</button>
|
<button type="button" class="btn btn-primary-outline theSaveButton" data-dismiss="modal">Save changes</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -178,4 +186,25 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade" id="noteModal">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
|
||||||
|
<h4 class="modal-title">Add a note</h4>
|
||||||
|
</div>
|
||||||
|
<form method="POST" action="/requests/addnote" id="noteForm">
|
||||||
|
<div class="modal-body">
|
||||||
|
<input name="requestId" class="requestId" type="text" hidden="hidden" value="" />
|
||||||
|
<textarea class="form-control form-control-custom" rows="3" id="noteArea" name="noteArea"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-danger-outline" data-dismiss="modal">Close</button>
|
||||||
|
<button type="button" class="btn btn-primary-outline theNoteSaveButton" data-dismiss="modal">Save changes</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script src="/Content/requests.js" type="text/javascript"></script>
|
<script src="/Content/requests.js" type="text/javascript"></script>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue