qol: impove plugin installation/update api

This commit is contained in:
Gary Sharp
2024-12-11 15:13:26 +11:00
parent f36871abe2
commit 343f20980d
13 changed files with 606 additions and 504 deletions
+9 -5
View File
@@ -505,7 +505,7 @@ namespace Disco.Services.Plugins
#region Restart App #region Restart App
private static object _restartTimerLock = new object(); private static object _restartTimerLock = new object();
private static Timer _restartTimer; private static Timer _restartTimer;
internal static void RestartApp(int DelayMilliseconds) internal static void RestartApp(TimeSpan delay)
{ {
lock (_restartTimerLock) lock (_restartTimerLock)
{ {
@@ -514,11 +514,15 @@ namespace Disco.Services.Plugins
_restartTimer.Dispose(); _restartTimer.Dispose();
} }
_restartTimer = new Timer((state) => if (delay == TimeSpan.Zero)
{
HttpRuntime.UnloadAppDomain(); HttpRuntime.UnloadAppDomain();
//AppDomain.Unload(AppDomain.CurrentDomain); else
}, null, DelayMilliseconds, Timeout.Infinite); {
_restartTimer = new Timer((state) =>
{
HttpRuntime.UnloadAppDomain();
}, null, (int)delay.TotalMilliseconds, Timeout.Infinite);
}
} }
} }
#endregion #endregion
@@ -46,7 +46,7 @@ namespace Disco.Services.Plugins
} }
Status.Finished("Restarting Disco ICT, please wait...", "/Config/Plugins"); Status.Finished("Restarting Disco ICT, please wait...", "/Config/Plugins");
Plugins.RestartApp(2500); Plugins.RestartApp(TimeSpan.FromSeconds(1));
} }
public static ScheduledTaskStatus UninstallPlugin(PluginManifest Manifest, bool UninstallData) public static ScheduledTaskStatus UninstallPlugin(PluginManifest Manifest, bool UninstallData)
+15 -10
View File
@@ -18,8 +18,9 @@ namespace Disco.Services.Plugins
protected override void ExecuteTask() protected override void ExecuteTask()
{ {
string pluginId = (string)ExecutionContext.JobDetail.JobDataMap["PluginId"]; var pluginId = (string)ExecutionContext.JobDetail.JobDataMap["PluginId"];
string packageFilePath = (string)ExecutionContext.JobDetail.JobDataMap["PackageFilePath"]; var packageFilePath = (string)ExecutionContext.JobDetail.JobDataMap["PackageFilePath"];
var immediateRestart = (bool)ExecutionContext.JobDetail.JobDataMap["ImmediateRestart"];
PluginLibraryManifestV2 libraryManifest; PluginLibraryManifestV2 libraryManifest;
PluginLibraryIncompatibility libraryIncompatibility; PluginLibraryIncompatibility libraryIncompatibility;
@@ -89,7 +90,7 @@ namespace Disco.Services.Plugins
ExecuteTaskInternal(Status, pluginPackagesLocation, updatePlugins); ExecuteTaskInternal(Status, pluginPackagesLocation, updatePlugins);
Status.Finished("Restarting Disco ICT, please wait...", "/Config/Plugins"); Status.Finished("Restarting Disco ICT, please wait...", "/Config/Plugins");
Plugins.RestartApp(2500); Plugins.RestartApp(immediateRestart ? TimeSpan.Zero : TimeSpan.FromSeconds(1));
} }
public static List<PluginManifest> OfflineInstalledPlugins(DiscoDataContext Database) public static List<PluginManifest> OfflineInstalledPlugins(DiscoDataContext Database)
@@ -258,7 +259,7 @@ namespace Disco.Services.Plugins
} }
} }
private static ScheduledTaskStatus UpdateHelper(string PluginId = null, string PackageFilePath = null) private static ScheduledTaskStatus UpdateHelper(string pluginId, string packageFilePath, bool immediateRestart)
{ {
if (ScheduledTasks.GetTaskStatuses(typeof(UpdatePluginTask)).Where(s => s.IsRunning).Count() > 0) if (ScheduledTasks.GetTaskStatuses(typeof(UpdatePluginTask)).Where(s => s.IsRunning).Count() > 0)
throw new InvalidOperationException("A plugin is already being Updated"); throw new InvalidOperationException("A plugin is already being Updated");
@@ -267,24 +268,28 @@ namespace Disco.Services.Plugins
if (ScheduledTasks.GetTaskStatuses(typeof(InstallPluginTask)).Where(s => s.IsRunning).Count() > 0) if (ScheduledTasks.GetTaskStatuses(typeof(InstallPluginTask)).Where(s => s.IsRunning).Count() > 0)
throw new InvalidOperationException("A plugin is being Installed"); throw new InvalidOperationException("A plugin is being Installed");
JobDataMap taskData = new JobDataMap() { { "PluginId", PluginId }, { "PackageFilePath", PackageFilePath } }; JobDataMap taskData = new JobDataMap() {
{ "PluginId", pluginId },
{ "PackageFilePath", packageFilePath },
{ "ImmediateRestart", immediateRestart },
};
var instance = new UpdatePluginTask(); var instance = new UpdatePluginTask();
return instance.ScheduleTask(taskData); return instance.ScheduleTask(taskData);
} }
public static ScheduledTaskStatus UpdateLocalPlugin(string PluginId, string PackageFilePath) public static ScheduledTaskStatus UpdateLocalPlugin(string pluginId, string packageFilePath, bool immediateRestart = false)
{ {
return UpdateHelper(PluginId, PackageFilePath); return UpdateHelper(pluginId, packageFilePath, immediateRestart);
} }
public static ScheduledTaskStatus UpdatePlugin(string PluginId) public static ScheduledTaskStatus UpdatePlugin(string pluginId, bool immediateRestart = false)
{ {
return UpdateHelper(PluginId); return UpdateHelper(pluginId, packageFilePath: null, immediateRestart);
} }
public static ScheduledTaskStatus UpdateAllPlugins() public static ScheduledTaskStatus UpdateAllPlugins()
{ {
return UpdateHelper(); return UpdateHelper(pluginId: null, packageFilePath: null, immediateRestart: false);
} }
} }
} }
@@ -34,7 +34,7 @@ namespace Disco.Services.Plugins
// Restart // Restart
Status.Finished("Restarting Disco ICT, please wait...", "/"); Status.Finished("Restarting Disco ICT, please wait...", "/");
Plugins.RestartApp(2500); Plugins.RestartApp(TimeSpan.FromSeconds(1));
} }
public static ScheduledTaskStatus UpdateDiscoPlugins(bool ReturnExistingStatusIfRunning) public static ScheduledTaskStatus UpdateDiscoPlugins(bool ReturnExistingStatusIfRunning)
@@ -15,12 +15,12 @@ namespace Disco.Web.Areas.API.Controllers
public partial class PluginController : AuthorizedDatabaseController public partial class PluginController : AuthorizedDatabaseController
{ {
[DiscoAuthorize(Claims.Config.Plugin.Install)] [DiscoAuthorize(Claims.Config.Plugin.Install)]
public virtual ActionResult UpdateLibraryManifest(bool TryWaitingForCompletion = false) public virtual ActionResult UpdateLibraryManifest(bool tryWaitingForCompletion = false)
{ {
var status = PluginLibraryUpdateTask.ScheduleNow(); var status = PluginLibraryUpdateTask.ScheduleNow();
// If upload takes <= 2 seconds, return back to Plugin Install (rather than Task Status) // If upload takes <= 2 seconds, return back to Plugin Install (rather than Task Status)
if (TryWaitingForCompletion && status.WaitUntilFinished(TimeSpan.FromSeconds(3)) && status.TaskException == null) if (tryWaitingForCompletion && status.WaitUntilFinished(TimeSpan.FromSeconds(3)) && status.TaskException == null)
{ {
return RedirectToAction(MVC.Config.Plugins.Install()); return RedirectToAction(MVC.Config.Plugins.Install());
} }
@@ -31,7 +31,7 @@ namespace Disco.Web.Areas.API.Controllers
} }
} }
[DiscoAuthorize(Claims.Config.Plugin.Install)] [HttpPost, DiscoAuthorize(Claims.Config.Plugin.Install), ValidateAntiForgeryToken]
public virtual ActionResult UpdateAll() public virtual ActionResult UpdateAll()
{ {
var status = UpdatePluginTask.UpdateAllPlugins(); var status = UpdatePluginTask.UpdateAllPlugins();
@@ -39,63 +39,39 @@ namespace Disco.Web.Areas.API.Controllers
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId)); return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
} }
[DiscoAuthorize(Claims.Config.Plugin.Install)] [HttpPost, DiscoAuthorize(Claims.Config.Plugin.Install), ValidateAntiForgeryToken]
public virtual ActionResult Update(string PluginId) public virtual ActionResult Update(string pluginId)
{ {
if (string.IsNullOrEmpty(PluginId)) if (string.IsNullOrEmpty(pluginId))
throw new ArgumentNullException("PluginId"); throw new ArgumentNullException("PluginId");
var status = UpdatePluginTask.UpdatePlugin(PluginId); var status = UpdatePluginTask.UpdatePlugin(pluginId);
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId)); return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
} }
[DiscoAuthorizeAll(Claims.Config.Plugin.Install, Claims.Config.Plugin.InstallLocal)] [HttpPost, DiscoAuthorize(Claims.Config.Plugin.Uninstall), ValidateAntiForgeryToken]
public virtual ActionResult UpdateLocal(string PluginId, HttpPostedFileBase Plugin) public virtual ActionResult Uninstall(string id, bool uninstallData)
{
if (string.IsNullOrEmpty(PluginId))
throw new ArgumentNullException("PluginId");
if (Plugin == null || Plugin.ContentLength <= 0 || string.IsNullOrWhiteSpace(Plugin.FileName))
throw new ArgumentException("A discoPlugin file must be uploaded", "Plugin");
var tempPluginLocation = Path.Combine(Database.DiscoConfiguration.PluginPackagesLocation, Path.GetFileName(Plugin.FileName));
if (!Directory.Exists(Database.DiscoConfiguration.PluginPackagesLocation))
Directory.CreateDirectory(Database.DiscoConfiguration.PluginPackagesLocation);
if (System.IO.File.Exists(tempPluginLocation))
System.IO.File.Delete(tempPluginLocation);
Plugin.SaveAs(tempPluginLocation);
var status = UpdatePluginTask.UpdateLocalPlugin(PluginId, tempPluginLocation);
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
}
[DiscoAuthorize(Claims.Config.Plugin.Uninstall)]
public virtual ActionResult Uninstall(string id, bool UninstallData)
{ {
if (string.IsNullOrEmpty(id)) if (string.IsNullOrEmpty(id))
throw new ArgumentNullException("id"); throw new ArgumentNullException("id");
PluginManifest manifest = Plugins.GetPlugin(id); PluginManifest manifest = Plugins.GetPlugin(id);
var status = UninstallPluginTask.UninstallPlugin(manifest, UninstallData); var status = UninstallPluginTask.UninstallPlugin(manifest, uninstallData);
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId)); return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
} }
[DiscoAuthorize(Claims.Config.Plugin.Install)] [HttpPost, DiscoAuthorize(Claims.Config.Plugin.Install), ValidateAntiForgeryToken]
public virtual ActionResult Install(string PluginId) public virtual ActionResult Install(string pluginId)
{ {
if (string.IsNullOrEmpty(PluginId)) if (string.IsNullOrEmpty(pluginId))
throw new ArgumentNullException("PluginId", "A PluginId must be supplied"); throw new ArgumentNullException("PluginId", "A PluginId must be supplied");
var library = PluginLibrary.LoadManifest(Database); var library = PluginLibrary.LoadManifest(Database);
var libraryIncompatibility = library.LoadIncompatibilityData(); var libraryIncompatibility = library.LoadIncompatibilityData();
var libraryItem = library.Plugins.FirstOrDefault(p => p.Id.Equals(PluginId)); var libraryItem = library.Plugins.FirstOrDefault(p => p.Id.Equals(pluginId));
if (libraryItem == null) if (libraryItem == null)
throw new ArgumentNullException("PluginId", "Plugin not found in library"); throw new ArgumentNullException("PluginId", "Plugin not found in library");
@@ -116,13 +92,13 @@ namespace Disco.Web.Areas.API.Controllers
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId)); return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
} }
[DiscoAuthorizeAll(Claims.Config.Plugin.Install, Claims.Config.Plugin.InstallLocal)] [HttpPost, DiscoAuthorizeAll(Claims.Config.Plugin.Install, Claims.Config.Plugin.InstallLocal), ValidateAntiForgeryToken]
public virtual ActionResult InstallLocal(HttpPostedFileBase Plugin) public virtual ActionResult InstallLocal(HttpPostedFileBase plugin, bool immediateRestart = false)
{ {
if (Plugin == null || Plugin.ContentLength <= 0 || string.IsNullOrWhiteSpace(Plugin.FileName)) if (plugin == null || plugin.ContentLength <= 0 || string.IsNullOrWhiteSpace(plugin.FileName))
throw new ArgumentException("A discoPlugin file must be uploaded", "Plugin"); throw new ArgumentException("A discoPlugin file must be uploaded", "Plugin");
var tempPluginLocation = Path.Combine(Database.DiscoConfiguration.PluginPackagesLocation, Path.GetFileName(Plugin.FileName)); var tempPluginLocation = Path.Combine(Database.DiscoConfiguration.PluginPackagesLocation, Path.GetFileName(plugin.FileName));
if (!Directory.Exists(Database.DiscoConfiguration.PluginPackagesLocation)) if (!Directory.Exists(Database.DiscoConfiguration.PluginPackagesLocation))
Directory.CreateDirectory(Database.DiscoConfiguration.PluginPackagesLocation); Directory.CreateDirectory(Database.DiscoConfiguration.PluginPackagesLocation);
@@ -130,7 +106,7 @@ namespace Disco.Web.Areas.API.Controllers
if (System.IO.File.Exists(tempPluginLocation)) if (System.IO.File.Exists(tempPluginLocation))
System.IO.File.Delete(tempPluginLocation); System.IO.File.Delete(tempPluginLocation);
Plugin.SaveAs(tempPluginLocation); plugin.SaveAs(tempPluginLocation);
// Check for Install/Update // Check for Install/Update
PluginManifest packageManifest; PluginManifest packageManifest;
@@ -151,7 +127,7 @@ namespace Disco.Web.Areas.API.Controllers
ScheduledTaskStatus status; ScheduledTaskStatus status;
if (Plugins.PluginInstalled(packageManifest.Id)) if (Plugins.PluginInstalled(packageManifest.Id))
status = UpdatePluginTask.UpdateLocalPlugin(packageManifest.Id, tempPluginLocation); status = UpdatePluginTask.UpdateLocalPlugin(packageManifest.Id, tempPluginLocation, immediateRestart);
else else
status = InstallPluginTask.InstallLocalPlugin(tempPluginLocation, true); status = InstallPluginTask.InstallLocalPlugin(tempPluginLocation, true);
+174 -169
View File
@@ -11,10 +11,10 @@
<div id="plugins"> <div id="plugins">
@{ @{
if (Model.PluginManifests.Count == 0) if (Model.PluginManifests.Count == 0)
{ {
<div class="form" style="width: 450px; padding: 100px 0;"> <div class="form" style="width: 450px; padding: 100px 0;">
<h2>No Plugins are Installed</h2> <h2>No Plugins are Installed</h2>
</div> </div>
} }
else else
{ {
@@ -23,186 +23,191 @@
int itemsPerColumn = pluginGroups.Count / 3; int itemsPerColumn = pluginGroups.Count / 3;
var itemNextId = 0; var itemNextId = 0;
<table id="pageMenu"> <table id="pageMenu">
<tr> <tr>
@for (int i = 0; i < 3; i++) @for (int i = 0; i < 3; i++)
{
<td>
@{
int itemsForThisColumn = itemsPerColumn + (pluginGroups.Count % 3 > i ? 1 : 0);
for (int i2 = 0; i2 < itemsForThisColumn && itemNextId < pluginGroups.Count; i2++)
{ {
var pluginGroup = pluginGroups[itemNextId]; <td>
itemNextId++; @{
<div class="pageMenuArea"> int itemsForThisColumn = itemsPerColumn + (pluginGroups.Count % 3 > i ? 1 : 0);
<h2>@pluginGroup.Key</h2> for (int i2 = 0; i2 < itemsForThisColumn && itemNextId < pluginGroups.Count; i2++)
@foreach (var pluginDefinition in pluginGroup.Value.OrderBy(p => p.Name))
{ {
if (canConfig) var pluginGroup = pluginGroups[itemNextId];
{ itemNextId++;
<a href="@Url.Action(MVC.Config.Plugins.Configure(pluginDefinition.Id))"> <div class="pageMenuArea">
<i class="fa fa-cogs"></i> <h2>@pluginGroup.Key</h2>
<h3>@pluginDefinition.Name</h3> @foreach (var pluginDefinition in pluginGroup.Value.OrderBy(p => p.Name))
</a> {
} if (canConfig)
else {
{ <a href="@Url.Action(MVC.Config.Plugins.Configure(pluginDefinition.Id))">
<h3>@pluginDefinition.Name</h3> <i class="fa fa-cogs"></i>
} <h3>@pluginDefinition.Name</h3>
<div class="pageMenuBlurb"> </a>
<span class="pluginVersion">v@(pluginDefinition.VersionFormatted)</span> | @pluginDefinition.Author | <a href="@pluginDefinition.Url" title="More Information" target="_blank"><i class="fa fa-external-link"></i></a> }
else
{
<h3>@pluginDefinition.Name</h3>
}
<div class="pageMenuBlurb">
<span class="pluginVersion">v@(pluginDefinition.VersionFormatted)</span> | @pluginDefinition.Author | <a href="@pluginDefinition.Url" title="More Information" target="_blank"><i class="fa fa-external-link"></i></a>
</div>
}
</div> </div>
} }
</div>
}
}
</td>
}
</tr>
</table>
if (canUninstall)
{
<div id="dialogUninstallPlugins" title="Uninstall Plugin">
<div>
@Html.DropDownList("uninstallPlugin", Model.PluginManifests.ToSelectListItems(null, true, "Select a Plugin to Uninstall"))
</div>
<div>
<input id="uninstallPluginData" type="checkbox" /><label for="uninstallPluginData"> Uninstall Plugin Data</label>
<div id="uninstallPluginDataAlert" class="info-box error" style="display: none;">
<p class="fa-p">
<i class="fa fa-exclamation-triangle"></i><strong>Warning:</strong> Data will be permanently deleted
</p>
</div>
</div>
</div>
<div id="dialogUninstallPluginConfirm" title="Confirm Plugin Uninstall">
<div class="info-box">
<p class="fa-p">
<i class="fa fa-info-circle"></i>Are you sure you want to uninstall this plugin?
</p>
<h4 id="uninstallPluginConfirm"></h4>
</div>
<div id="uninstallPluginDataConfirm" class="info-box error" style="display: none;">
<p class="fa-p">
<i class="fa fa-exclamation-triangle"></i><strong>Warning:</strong> Data will be permanently deleted
</p>
</div>
</div>
<script>
$(function () {
// Uninstall
var uninstallUrl = '@(Url.Action(MVC.API.Plugin.Uninstall()))/';
var uninstallPlugin, uninstallPluginData, $dialogConfirm, uninstallPluginConfirm, uninstallPluginDataConfirm;
var pluginId, pluginName, pluginUninstallData;
var $dialog = $('#dialogUninstallPlugins').dialog({
resizable: false,
modal: true,
width: 350,
autoOpen: false,
buttons: {
"Uninstall": function () {
pluginId = uninstallPlugin.val();
pluginName = uninstallPlugin.find('option:selected').text();
pluginUninstallData = uninstallPluginData.is(':checked');
if (!pluginId) {
alert('Select a plugin to uninstall');
} else {
uninstallPluginConfirm.text(pluginName + ' [' + pluginId + ']');
if (pluginUninstallData)
uninstallPluginDataConfirm.show();
else
uninstallPluginDataConfirm.hide();
$dialogConfirm.dialog('open');
$(this).dialog("close");
} }
}, </td>
Cancel: function () { }
uninstallPluginData.prop('checked', false); </tr>
$('#uninstallPluginDataAlert').hide(); </table>
$(this).dialog("close"); if (canUninstall)
{
<div id="dialogUninstallPlugins" title="Uninstall Plugin" class="dialog">
<div>
@Html.DropDownList("uninstallPlugin", Model.PluginManifests.OrderBy(p => p.Name).ToSelectListItems(null, true, "Select a Plugin to Uninstall"))
</div>
<div>
<input id="uninstallPluginData" type="checkbox" /><label for="uninstallPluginData"> Uninstall Plugin Data</label>
<div id="uninstallPluginDataAlert" class="info-box error" style="display: none;">
<p class="fa-p">
<i class="fa fa-exclamation-triangle"></i><strong>Warning:</strong> Data will be permanently deleted
</p>
</div>
</div>
</div>
<div id="dialogUninstallPluginConfirm" title="Confirm Plugin Uninstall" class="dialog">
<div class="info-box">
<p class="fa-p">
<i class="fa fa-info-circle"></i>Are you sure you want to uninstall this plugin?
</p>
<h4 id="uninstallPluginConfirm"></h4>
</div>
<div id="uninstallPluginDataConfirm" class="info-box error" style="display: none;">
<p class="fa-p">
<i class="fa fa-exclamation-triangle"></i><strong>Warning:</strong> Data will be permanently deleted
</p>
</div>
@using (Html.BeginForm(MVC.API.Plugin.Uninstall(), FormMethod.Post))
{
@Html.AntiForgeryToken()
<input type="hidden" name="id" id="dialogUninstallPluginId" />
<input type="hidden" name="uninstallData" id="dialogUninstallPluginData" value="false" />
}
</div>
<script>
$(function () {
let $dialog = null;
$('#buttonUninstall').on('click', function () {
if (!$dialog) {
const $dialogConfirm = $('#dialogUninstallPluginConfirm').dialog({
resizable: false,
modal: true,
width: 350,
autoOpen: false,
buttons: {
"Confirm Uninstall": function () {
$dialogConfirm.find('form').submit();
$(this).dialog("disable");
},
Cancel: function () {
$('#uninstallPluginData').prop('checked', false);
$('#uninstallPluginDataAlert').hide();
$(this).dialog("close");
}
}
});
$dialog = $('#dialogUninstallPlugins').dialog({
resizable: false,
modal: true,
width: 350,
autoOpen: false,
buttons: {
"Uninstall": function () {
const $uninstallPlugin = $('#uninstallPlugin');
pluginId = $uninstallPlugin.val();
pluginName = $uninstallPlugin.find('option:selected').text();
pluginUninstallData = $('#uninstallPluginData').is(':checked');
if (!pluginId) {
alert('Select a plugin to uninstall');
} else {
$('#uninstallPluginConfirm').text(pluginName + ' [' + pluginId + ']');
const $uninstallPluginDataConfirm = $('#uninstallPluginDataConfirm');
if (pluginUninstallData)
$uninstallPluginDataConfirm.show();
else
$uninstallPluginDataConfirm.hide();
$('#dialogUninstallPluginId').val(pluginId);
$('#dialogUninstallPluginData').val(pluginUninstallData ? 'true' : 'false');
$dialogConfirm.dialog('open');
$(this).dialog("close");
}
},
Cancel: function () {
$('#uninstallPluginData').prop('checked', false);
$('#uninstallPluginDataAlert').hide();
$(this).dialog("close");
}
}
});
$('#uninstallPluginData').change(function () {
if ($(this).is(':checked')) {
$('#uninstallPluginDataAlert').slideDown();
} else {
$('#uninstallPluginDataAlert').slideUp();
}
});
}
$dialog.dialog('open');
return false;
});
});
</script>
}
if (Model.PluginUpdates.Count > 0)
{
<div id="updateAvailableContainer">
<i class="fa fa-cloud-download"></i>
<div>@(Model.PluginUpdates.Count) plugin update@(Model.PluginUpdates.Count == 1 ? " is" : "s are") available</div>
@if (canInstall)
{
using (Html.BeginForm(MVC.API.Plugin.UpdateAll()))
{
@Html.AntiForgeryToken()
<button class="button small alert" type="submit">Update All</button>
} }
} }
}); else
{
$dialogConfirm = $('#dialogUninstallPluginConfirm').dialog({ <div class="smallMessage">You do not have sufficient permission to install these updates.</div>
resizable: false,
modal: true,
width: 350,
autoOpen: false,
buttons: {
"Confirm Uninstall": function () {
var url = uninstallUrl + pluginId;
if (pluginUninstallData)
url += '?UninstallData=true'
else
url += '?UninstallData=false'
window.location.href = url;
$(this).dialog("disable");
},
Cancel: function () {
uninstallPluginData.prop('checked', false);
$('#uninstallPluginDataAlert').hide();
$(this).dialog("close");
}
} }
}); </div>
<script>
(function () {
$(function () {
var layout_PageHeading = $('#layout_PageHeading').height(80);
var updateAvailableContainer = $('#updateAvailableContainer');
updateAvailableContainer.appendTo(layout_PageHeading);
});
})();
</script>
uninstallPlugin = $('#uninstallPlugin');
uninstallPluginData = $('#uninstallPluginData');
uninstallPluginConfirm = $('#uninstallPluginConfirm');
uninstallPluginDataConfirm = $('#uninstallPluginDataConfirm');
$('#buttonUninstall').click(function () {
$dialog.dialog('open');
return false;
});
$('#uninstallPluginData').change(function () {
if ($(this).is(':checked')) {
$('#uninstallPluginDataAlert').slideDown();
} else {
$('#uninstallPluginDataAlert').slideUp();
}
});
});
</script>
}
if (Model.PluginUpdates.Count > 0)
{
<div id="updateAvailableContainer">
<i class="fa fa-cloud-download"></i>
<div>@(Model.PluginUpdates.Count) plugin update@(Model.PluginUpdates.Count == 1 ? " is" : "s are") available</div>
@if (canInstall)
{
@Html.ActionLinkSmallButton("Update Now", MVC.API.Plugin.UpdateAll(), null, "alert")
} }
else
{
<div class="smallMessage">You do not have sufficient permission to install these updates.</div>
}
</div>
<script>
(function () {
$(function () {
var layout_PageHeading = $('#layout_PageHeading').height(80);
var updateAvailableContainer = $('#updateAvailableContainer');
updateAvailableContainer.appendTo(layout_PageHeading);
});
})();
</script>
}
} }
} }
</div> </div>
<div class="actionBar"> <div class="actionBar">
@if (canUninstall && Model.PluginManifests.Count > 0) @if (canUninstall && Model.PluginManifests.Count > 0)
{ {
@Html.ActionLinkButton("Uninstall Plugins", MVC.Config.Plugins.Index(), "buttonUninstall") @Html.ActionLinkButton("Uninstall Plugins", MVC.Config.Plugins.Index(), "buttonUninstall")
} }
@if (canInstall) @if (canInstall)
@@ -73,18 +73,18 @@ WriteLiteral(">\r\n");
#line 12 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 12 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
if (Model.PluginManifests.Count == 0) if (Model.PluginManifests.Count == 0)
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <div");
WriteLiteral(" class=\"form\""); WriteLiteral(" class=\"form\"");
WriteLiteral(" style=\"width: 450px; padding: 100px 0;\""); WriteLiteral(" style=\"width: 450px; padding: 100px 0;\"");
WriteLiteral(">\r\n <h2>No Plugins are Installed</h2>\r\n </div> \r\n"); WriteLiteral(">\r\n <h2>No Plugins are Installed</h2>\r\n </div>\r\n");
#line 18 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 18 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
@@ -96,60 +96,60 @@ WriteLiteral(">\r\n <h2>No Plugins are Installed</h2>\r\n </di
int itemsPerColumn = pluginGroups.Count / 3; int itemsPerColumn = pluginGroups.Count / 3;
var itemNextId = 0; var itemNextId = 0;
#line default #line default
#line hidden #line hidden
WriteLiteral(" <table"); WriteLiteral(" <table");
WriteLiteral(" id=\"pageMenu\""); WriteLiteral(" id=\"pageMenu\"");
WriteLiteral(">\r\n <tr>\r\n"); WriteLiteral(">\r\n <tr>\r\n");
#line 29 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 29 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default #line default
#line hidden #line hidden
#line 29 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 29 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{
#line default
#line hidden
WriteLiteral(" <td>\r\n");
#line 32 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default
#line hidden
#line 32 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
int itemsForThisColumn = itemsPerColumn + (pluginGroups.Count % 3 > i ? 1 : 0);
for (int i2 = 0; i2 < itemsForThisColumn && itemNextId < pluginGroups.Count; i2++)
{ {
var pluginGroup = pluginGroups[itemNextId];
itemNextId++;
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <td>\r\n");
#line 32 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default
#line hidden
#line 32 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
int itemsForThisColumn = itemsPerColumn + (pluginGroups.Count % 3 > i ? 1 : 0);
for (int i2 = 0; i2 < itemsForThisColumn && itemNextId < pluginGroups.Count; i2++)
{
var pluginGroup = pluginGroups[itemNextId];
itemNextId++;
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"pageMenuArea\""); WriteLiteral(" class=\"pageMenuArea\"");
WriteLiteral(">\r\n <h2>"); WriteLiteral(">\r\n <h2>");
#line 39 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 39 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(pluginGroup.Key); Write(pluginGroup.Key);
#line default #line default
@@ -158,61 +158,61 @@ WriteLiteral("</h2>\r\n");
#line 40 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 40 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default #line default
#line hidden #line hidden
#line 40 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 40 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
foreach (var pluginDefinition in pluginGroup.Value.OrderBy(p => p.Name)) foreach (var pluginDefinition in pluginGroup.Value.OrderBy(p => p.Name))
{ {
if (canConfig) if (canConfig)
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <a"); WriteLiteral(" <a");
WriteAttribute("href", Tuple.Create(" href=\"", 1781), Tuple.Create("\"", 1850) WriteAttribute("href", Tuple.Create(" href=\"", 1930), Tuple.Create("\"", 1999)
#line 44 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 44 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
, Tuple.Create(Tuple.Create("", 1788), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.Config.Plugins.Configure(pluginDefinition.Id)) , Tuple.Create(Tuple.Create("", 1937), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.Config.Plugins.Configure(pluginDefinition.Id))
#line default #line default
#line hidden #line hidden
, 1788), false) , 1937), false)
); );
WriteLiteral(">\r\n <i"); WriteLiteral(">\r\n <i");
WriteLiteral(" class=\"fa fa-cogs\""); WriteLiteral(" class=\"fa fa-cogs\"");
WriteLiteral("></i>\r\n <h3>"); WriteLiteral("></i>\r\n <h3>");
#line 46 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 46 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(pluginDefinition.Name); Write(pluginDefinition.Name);
#line default #line default
#line hidden #line hidden
WriteLiteral("</h3>\r\n </a>\r\n"); WriteLiteral("</h3>\r\n </a>\r\n");
#line 48 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 48 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
else else
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <h3>"); WriteLiteral(" <h3>");
#line 51 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 51 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(pluginDefinition.Name); Write(pluginDefinition.Name);
#line default #line default
@@ -221,16 +221,16 @@ WriteLiteral("</h3>\r\n");
#line 52 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 52 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <div");
WriteLiteral(" class=\"pageMenuBlurb\""); WriteLiteral(" class=\"pageMenuBlurb\"");
WriteLiteral(">\r\n <span"); WriteLiteral(">\r\n <span");
WriteLiteral(" class=\"pluginVersion\""); WriteLiteral(" class=\"pluginVersion\"");
@@ -238,7 +238,7 @@ WriteLiteral(">v");
#line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(pluginDefinition.VersionFormatted); Write(pluginDefinition.VersionFormatted);
#line default #line default
@@ -247,21 +247,21 @@ WriteLiteral("</span> | ");
#line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(pluginDefinition.Author); Write(pluginDefinition.Author);
#line default #line default
#line hidden #line hidden
WriteLiteral(" | <a"); WriteLiteral(" | <a");
WriteAttribute("href", Tuple.Create(" href=\"", 2474), Tuple.Create("\"", 2502) WriteAttribute("href", Tuple.Create(" href=\"", 2719), Tuple.Create("\"", 2747)
#line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 54 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
, Tuple.Create(Tuple.Create("", 2481), Tuple.Create<System.Object, System.Int32>(pluginDefinition.Url , Tuple.Create(Tuple.Create("", 2726), Tuple.Create<System.Object, System.Int32>(pluginDefinition.Url
#line default #line default
#line hidden #line hidden
, 2481), false) , 2726), false)
); );
WriteLiteral(" title=\"More Information\""); WriteLiteral(" title=\"More Information\"");
@@ -272,61 +272,64 @@ WriteLiteral("><i");
WriteLiteral(" class=\"fa fa-external-link\""); WriteLiteral(" class=\"fa fa-external-link\"");
WriteLiteral("></i></a>\r\n </div>\r\n"); WriteLiteral("></i></a>\r\n </div>\r\n");
#line 56 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 56 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
#line default #line default
#line hidden #line hidden
WriteLiteral(" </div>\r\n"); WriteLiteral(" </div>\r\n");
#line 58 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 58 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
#line default #line default
#line hidden #line hidden
WriteLiteral("\r\n </td>\r\n"); WriteLiteral("\r\n </td>\r\n");
#line 61 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 61 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
#line default #line default
#line hidden #line hidden
WriteLiteral(" </tr>\r\n </table>\r\n"); WriteLiteral(" </tr>\r\n </table>\r\n");
#line 64 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 64 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
if (canUninstall) if (canUninstall)
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <div");
WriteLiteral(" id=\"dialogUninstallPlugins\""); WriteLiteral(" id=\"dialogUninstallPlugins\"");
WriteLiteral(" title=\"Uninstall Plugin\""); WriteLiteral(" title=\"Uninstall Plugin\"");
WriteLiteral(">\r\n <div>\r\n"); WriteLiteral(" class=\"dialog\"");
WriteLiteral(" "); WriteLiteral(">\r\n <div>\r\n");
WriteLiteral(" ");
#line 68 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 68 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Html.DropDownList("uninstallPlugin", Model.PluginManifests.ToSelectListItems(null, true, "Select a Plugin to Uninstall"))); Write(Html.DropDownList("uninstallPlugin", Model.PluginManifests.OrderBy(p => p.Name).ToSelectListItems(null, true, "Select a Plugin to Uninstall")));
#line default #line default
#line hidden #line hidden
WriteLiteral("\r\n </div>\r\n <div>\r\n <input"); WriteLiteral("\r\n </div>\r\n <div>\r\n " +
"<input");
WriteLiteral(" id=\"uninstallPluginData\""); WriteLiteral(" id=\"uninstallPluginData\"");
@@ -336,7 +339,7 @@ WriteLiteral(" /><label");
WriteLiteral(" for=\"uninstallPluginData\""); WriteLiteral(" for=\"uninstallPluginData\"");
WriteLiteral("> Uninstall Plugin Data</label>\r\n <div"); WriteLiteral("> Uninstall Plugin Data</label>\r\n <div");
WriteLiteral(" id=\"uninstallPluginDataAlert\""); WriteLiteral(" id=\"uninstallPluginDataAlert\"");
@@ -344,41 +347,44 @@ WriteLiteral(" class=\"info-box error\"");
WriteLiteral(" style=\"display: none;\""); WriteLiteral(" style=\"display: none;\"");
WriteLiteral(">\r\n <p"); WriteLiteral(">\r\n <p");
WriteLiteral(" class=\"fa-p\""); WriteLiteral(" class=\"fa-p\"");
WriteLiteral(">\r\n <i"); WriteLiteral(">\r\n <i");
WriteLiteral(" class=\"fa fa-exclamation-triangle\""); WriteLiteral(" class=\"fa fa-exclamation-triangle\"");
WriteLiteral("></i><strong>Warning:</strong> Data will be permanently deleted\r\n " + WriteLiteral("></i><strong>Warning:</strong> Data will be permanently deleted\r\n " +
" </p>\r\n </div>\r\n </div>\r\n </div>\r\n"); " </p>\r\n </div>\r\n </div>\r\n " +
" </div>\r\n");
WriteLiteral(" <div"); WriteLiteral(" <div");
WriteLiteral(" id=\"dialogUninstallPluginConfirm\""); WriteLiteral(" id=\"dialogUninstallPluginConfirm\"");
WriteLiteral(" title=\"Confirm Plugin Uninstall\""); WriteLiteral(" title=\"Confirm Plugin Uninstall\"");
WriteLiteral(">\r\n <div"); WriteLiteral(" class=\"dialog\"");
WriteLiteral(">\r\n <div");
WriteLiteral(" class=\"info-box\""); WriteLiteral(" class=\"info-box\"");
WriteLiteral(">\r\n <p"); WriteLiteral(">\r\n <p");
WriteLiteral(" class=\"fa-p\""); WriteLiteral(" class=\"fa-p\"");
WriteLiteral(">\r\n <i"); WriteLiteral(">\r\n <i");
WriteLiteral(" class=\"fa fa-info-circle\""); WriteLiteral(" class=\"fa fa-info-circle\"");
WriteLiteral("></i>Are you sure you want to uninstall this plugin?\r\n </p>\r\n " + WriteLiteral("></i>Are you sure you want to uninstall this plugin?\r\n </p" +
" <h4"); ">\r\n <h4");
WriteLiteral(" id=\"uninstallPluginConfirm\""); WriteLiteral(" id=\"uninstallPluginConfirm\"");
WriteLiteral("></h4>\r\n </div>\r\n <div"); WriteLiteral("></h4>\r\n </div>\r\n <div");
WriteLiteral(" id=\"uninstallPluginDataConfirm\""); WriteLiteral(" id=\"uninstallPluginDataConfirm\"");
@@ -386,95 +392,154 @@ WriteLiteral(" class=\"info-box error\"");
WriteLiteral(" style=\"display: none;\""); WriteLiteral(" style=\"display: none;\"");
WriteLiteral(">\r\n <p"); WriteLiteral(">\r\n <p");
WriteLiteral(" class=\"fa-p\""); WriteLiteral(" class=\"fa-p\"");
WriteLiteral(">\r\n <i"); WriteLiteral(">\r\n <i");
WriteLiteral(" class=\"fa fa-exclamation-triangle\""); WriteLiteral(" class=\"fa fa-exclamation-triangle\"");
WriteLiteral("></i><strong>Warning:</strong> Data will be permanently deleted\r\n " + WriteLiteral("></i><strong>Warning:</strong> Data will be permanently deleted\r\n " +
"</p>\r\n </div>\r\n </div>\r\n"); " </p>\r\n </div>\r\n");
WriteLiteral(" <script>\r\n $(function () {\r\n // Uninstall\r\n " +
" var uninstallUrl = \'");
#line 95 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 91 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Url.Action(MVC.API.Plugin.Uninstall()));
#line default
#line hidden
#line 91 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
using (Html.BeginForm(MVC.API.Plugin.Uninstall(), FormMethod.Post))
{
#line default
#line hidden
#line 93 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Html.AntiForgeryToken());
#line default #line default
#line hidden #line hidden
WriteLiteral("/\';\r\n var uninstallPlugin, uninstallPluginData, $dialogConfirm, un" +
"installPluginConfirm, uninstallPluginDataConfirm;\r\n\r\n var pluginI" + #line 93 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
"d, pluginName, pluginUninstallData;\r\n\r\n var $dialog = $(\'#dialogU" +
"ninstallPlugins\').dialog({\r\n resizable: false,\r\n " +
" modal: true,\r\n width: 350,\r\n autoOp" +
"en: false,\r\n buttons: {\r\n \"Uninstall\":" + #line default
" function () {\r\n pluginId = uninstallPlugin.val();\r\n " + #line hidden
" pluginName = uninstallPlugin.find(\'option:selected\')." + WriteLiteral(" <input");
"text();\r\n pluginUninstallData = uninstallPluginData.i" +
"s(\':checked\');\r\n\r\n if (!pluginId) {\r\n " + WriteLiteral(" type=\"hidden\"");
" alert(\'Select a plugin to uninstall\');\r\n " +
" } else {\r\n uninstallPluginConfirm.text(plugin" + WriteLiteral(" name=\"id\"");
"Name + \' [\' + pluginId + \']\');\r\n if (pluginUninst" +
"allData)\r\n uninstallPluginDataConfirm.show();" + WriteLiteral(" id=\"dialogUninstallPluginId\"");
"\r\n else\r\n unin" +
"stallPluginDataConfirm.hide();\r\n\r\n $dialogConfirm" + WriteLiteral(" />\r\n");
".dialog(\'open\');\r\n $(this).dialog(\"close\");\r\n " +
" }\r\n },\r\n C" + WriteLiteral(" <input");
"ancel: function () {\r\n uninstallPluginData.prop(\'chec" +
"ked\', false);\r\n $(\'#uninstallPluginDataAlert\').hide()" + WriteLiteral(" type=\"hidden\"");
";\r\n $(this).dialog(\"close\");\r\n " +
" }\r\n }\r\n });\r\n\r\n $dialogConfirm" + WriteLiteral(" name=\"uninstallData\"");
" = $(\'#dialogUninstallPluginConfirm\').dialog({\r\n resizable: f" +
"alse,\r\n modal: true,\r\n width: 350,\r\n " + WriteLiteral(" id=\"dialogUninstallPluginData\"");
" autoOpen: false,\r\n buttons: {\r\n " +
" \"Confirm Uninstall\": function () {\r\n var url " + WriteLiteral(" value=\"false\"");
"= uninstallUrl + pluginId;\r\n if (pluginUninstallData)" +
"\r\n url += \'?UninstallData=true\'\r\n " + WriteLiteral(" />\r\n");
" else\r\n url += \'?UninstallData=false\'\r" +
"\n\r\n window.location.href = url;\r\n " +
" $(this).dialog(\"disable\");\r\n },\r\n " + #line 96 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
" Cancel: function () {\r\n uninstallPluginData.p" + }
"rop(\'checked\', false);\r\n $(\'#uninstallPluginDataAlert" +
"\').hide();\r\n $(this).dialog(\"close\");\r\n " +
" }\r\n }\r\n });\r\n\r\n unins" + #line default
"tallPlugin = $(\'#uninstallPlugin\');\r\n uninstallPluginData = $(\'#u" + #line hidden
"ninstallPluginData\');\r\n uninstallPluginConfirm = $(\'#uninstallPlu" + WriteLiteral(" </div>\r\n");
"ginConfirm\');\r\n uninstallPluginDataConfirm = $(\'#uninstallPluginD" +
"ataConfirm\');\r\n\r\n $(\'#buttonUninstall\').click(function () {\r\n " + WriteLiteral(" <script>\r\n $(function () {\r\n\r\n " +
" $dialog.dialog(\'open\');\r\n return false;\r\n " + " let $dialog = null;\r\n\r\n $(\'#buttonUninstall\').on(" +
" });\r\n\r\n $(\'#uninstallPluginData\').change(function () " + "\'click\', function () {\r\n\r\n if (!$dialog) {\r\n " +
"{\r\n if ($(this).is(\':checked\')) {\r\n $(" + " const $dialogConfirm = $(\'#dialogUninstallPluginConfirm\')" +
"\'#uninstallPluginDataAlert\').slideDown();\r\n } else {\r\n " + ".dialog({\r\n resizable: false,\r\n " +
" $(\'#uninstallPluginDataAlert\').slideUp();\r\n " + " modal: true,\r\n width: 3" +
"}\r\n });\r\n });\r\n </script>\r\n"); "50,\r\n autoOpen: false,\r\n " +
" buttons: {\r\n \"Confirm Unin" +
"stall\": function () {\r\n $dialogConfir" +
"m.find(\'form\').submit();\r\n $(this).di" +
"alog(\"disable\");\r\n },\r\n " +
" Cancel: function () {\r\n " +
" $(\'#uninstallPluginData\').prop(\'checked\', false);\r\n " +
" $(\'#uninstallPluginDataAlert\').hide();\r\n " +
" $(this).dialog(\"close\");\r\n " +
" }\r\n }\r\n " +
" });\r\n\r\n $dialog = $(\'#dialogUninstallPlug" +
"ins\').dialog({\r\n resizable: false,\r\n " +
" modal: true,\r\n wid" +
"th: 350,\r\n autoOpen: false,\r\n " +
" buttons: {\r\n \"Uninsta" +
"ll\": function () {\r\n const $uninstall" +
"Plugin = $(\'#uninstallPlugin\');\r\n plu" +
"ginId = $uninstallPlugin.val();\r\n plu" +
"ginName = $uninstallPlugin.find(\'option:selected\').text();\r\n " +
" pluginUninstallData = $(\'#uninstallPluginData\').is(\':che" +
"cked\');\r\n\r\n if (!pluginId) {\r\n " +
" alert(\'Select a plugin to uninstall\');\r" +
"\n } else {\r\n " +
" $(\'#uninstallPluginConfirm\').text(pluginName + \' [\' + plu" +
"ginId + \']\');\r\n const $uninstallP" +
"luginDataConfirm = $(\'#uninstallPluginDataConfirm\');\r\n " +
" if (pluginUninstallData)\r\n " +
" $uninstallPluginDataConfirm.show();\r\n " +
" else\r\n " +
" $uninstallPluginDataConfirm.hide();\r\n\r\n " +
" $(\'#dialogUninstallPluginId\').val(pluginId);\r\n " +
" $(\'#dialogUninstallPluginData\').val(pluginUninstallData " +
"? \'true\' : \'false\');\r\n\r\n $dialogC" +
"onfirm.dialog(\'open\');\r\n $(this)." +
"dialog(\"close\");\r\n }\r\n " +
" },\r\n Cancel: fun" +
"ction () {\r\n $(\'#uninstallPluginData\'" +
").prop(\'checked\', false);\r\n $(\'#unins" +
"tallPluginDataAlert\').hide();\r\n $(thi" +
"s).dialog(\"close\");\r\n }\r\n " +
" }\r\n });\r\n\r\n " +
" $(\'#uninstallPluginData\').change(function () {\r\n " +
" if ($(this).is(\':checked\')) {\r\n " +
" $(\'#uninstallPluginDataAlert\').slideDown();\r\n " +
" } else {\r\n $(\'#uninstallPluginD" +
"ataAlert\').slideUp();\r\n }\r\n " +
" });\r\n }\r\n\r\n " +
"$dialog.dialog(\'open\');\r\n return false;\r\n " +
" });\r\n });\r\n </script>\r\n");
#line 175 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 175 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
if (Model.PluginUpdates.Count > 0) if (Model.PluginUpdates.Count > 0)
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <div");
WriteLiteral(" id=\"updateAvailableContainer\""); WriteLiteral(" id=\"updateAvailableContainer\"");
WriteLiteral(">\r\n <i"); WriteLiteral(">\r\n <i");
WriteLiteral(" class=\"fa fa-cloud-download\""); WriteLiteral(" class=\"fa fa-cloud-download\"");
WriteLiteral("></i>\r\n <div>"); WriteLiteral("></i>\r\n <div>");
#line 180 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 180 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Model.PluginUpdates.Count); Write(Model.PluginUpdates.Count);
#line default #line default
@@ -483,7 +548,7 @@ WriteLiteral(" plugin update");
#line 180 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 180 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Model.PluginUpdates.Count == 1 ? " is" : "s are"); Write(Model.PluginUpdates.Count == 1 ? " is" : "s are");
#line default #line default
@@ -492,64 +557,82 @@ WriteLiteral(" available</div>\r\n");
#line 181 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 181 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default #line default
#line hidden #line hidden
#line 181 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 181 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
if (canInstall) if (canInstall)
{ {
using (Html.BeginForm(MVC.API.Plugin.UpdateAll()))
{
#line default #line default
#line hidden #line hidden
#line 183 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 185 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Html.ActionLinkSmallButton("Update Now", MVC.API.Plugin.UpdateAll(), null, "alert")); Write(Html.AntiForgeryToken());
#line default #line default
#line hidden #line hidden
#line 183 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 185 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
}
else
{
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div"); WriteLiteral(" <button");
WriteLiteral(" class=\"button small alert\"");
WriteLiteral(" type=\"submit\"");
WriteLiteral(">Update All</button>\r\n");
#line 187 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
}
}
else
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"smallMessage\""); WriteLiteral(" class=\"smallMessage\"");
WriteLiteral(">You do not have sufficient permission to install these updates.</div>\r\n"); WriteLiteral(">You do not have sufficient permission to install these updates.</div>\r\n");
#line 188 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 192 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
#line default #line default
#line hidden #line hidden
WriteLiteral(" </div>\r\n"); WriteLiteral(" </div>\r\n");
WriteLiteral(@" <script> WriteLiteral(@" <script>
(function () { (function () {
$(function () { $(function () {
var layout_PageHeading = $('#layout_PageHeading').height(80); var layout_PageHeading = $('#layout_PageHeading').height(80);
var updateAvailableContainer = $('#updateAvailableContainer'); var updateAvailableContainer = $('#updateAvailableContainer');
updateAvailableContainer.appendTo(layout_PageHeading); updateAvailableContainer.appendTo(layout_PageHeading);
}); });
})(); })();
</script> </script>
"); ");
#line 199 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 203 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
}
}
} }
@@ -562,28 +645,28 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 204 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 209 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
#line default #line default
#line hidden #line hidden
#line 204 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 209 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
if (canUninstall && Model.PluginManifests.Count > 0) if (canUninstall && Model.PluginManifests.Count > 0)
{ {
#line default #line default
#line hidden #line hidden
#line 206 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 211 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Html.ActionLinkButton("Uninstall Plugins", MVC.Config.Plugins.Index(), "buttonUninstall")); Write(Html.ActionLinkButton("Uninstall Plugins", MVC.Config.Plugins.Index(), "buttonUninstall"));
#line default #line default
#line hidden #line hidden
#line 206 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 211 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
@@ -593,7 +676,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" "); WriteLiteral(" ");
#line 208 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 213 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
if (canInstall) if (canInstall)
{ {
@@ -601,14 +684,14 @@ WriteLiteral(" ");
#line default #line default
#line hidden #line hidden
#line 210 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 215 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
Write(Html.ActionLinkButton("Install Plugins", MVC.Config.Plugins.Install())); Write(Html.ActionLinkButton("Install Plugins", MVC.Config.Plugins.Install()));
#line default #line default
#line hidden #line hidden
#line 210 "..\..\Areas\Config\Views\Plugins\Index.cshtml" #line 215 "..\..\Areas\Config\Views\Plugins\Index.cshtml"
} }
@@ -65,7 +65,7 @@
} }
</div> </div>
<div id="dialogInstallPlugin" title="Install this Plugin?"> <div id="dialogInstallPlugin" title="Install this Plugin?" class="dialog">
<h2 id="dialogInstallPluginName"></h2> <h2 id="dialogInstallPluginName"></h2>
<h4 id="dialogInstallPluginDetails"></h4> <h4 id="dialogInstallPluginDetails"></h4>
@@ -75,13 +75,18 @@
<strong>Only Install plugins from a trusted source.</strong> <strong>Only Install plugins from a trusted source.</strong>
</p> </p>
</div> </div>
@using (Html.BeginForm(MVC.API.Plugin.Install(), FormMethod.Post))
{
@Html.AntiForgeryToken()
}
</div> </div>
@if (canInstallLocal) @if (canInstallLocal)
{ {
<div id="dialogUploadPlugin" title="Install Plugin Package"> <div id="dialogUploadPlugin" title="Install Plugin Package" class="dialog">
<div style="padding-bottom: 10px;"> <div style="padding-bottom: 10px;">
@using (Html.BeginForm(MVC.API.Plugin.InstallLocal(), FormMethod.Post, new { enctype = "multipart/form-data" })) @using (Html.BeginForm(MVC.API.Plugin.InstallLocal(), FormMethod.Post, new { enctype = "multipart/form-data" }))
{ {
@Html.AntiForgeryToken()
<label for="pluginFile">Plugin Package: </label> <label for="pluginFile">Plugin Package: </label>
<input id="pluginFile" name="Plugin" type="file" accept=".discoPlugin" /> <input id="pluginFile" name="Plugin" type="file" accept=".discoPlugin" />
} }
@@ -114,8 +119,10 @@
return; return;
} }
$(this).dialog("disable"); $(this).dialog("disable");
$(this)
window.location.href = $selectedPluginUrl; .find('form')
.attr('action', $selectedPluginUrl)
.submit();
}, },
Cancel: function () { Cancel: function () {
$selectedPlugin = null; $selectedPlugin = null;
@@ -400,6 +400,8 @@ WriteLiteral(" id=\"dialogInstallPlugin\"");
WriteLiteral(" title=\"Install this Plugin?\""); WriteLiteral(" title=\"Install this Plugin?\"");
WriteLiteral(" class=\"dialog\"");
WriteLiteral(">\r\n <h2"); WriteLiteral(">\r\n <h2");
WriteLiteral(" id=\"dialogInstallPluginName\""); WriteLiteral(" id=\"dialogInstallPluginName\"");
@@ -422,10 +424,41 @@ WriteLiteral(" class=\"fa fa-exclamation-triangle\"");
WriteLiteral("></i><strong>Warning:</strong> All plugins run with the same level of network pri" + WriteLiteral("></i><strong>Warning:</strong> All plugins run with the same level of network pri" +
"vileges as the Disco ICT Web App.<br />\r\n <strong>Only Install plugin" + "vileges as the Disco ICT Web App.<br />\r\n <strong>Only Install plugin" +
"s from a trusted source.</strong>\r\n </p>\r\n </div>\r\n</div>\r\n"); "s from a trusted source.</strong>\r\n </p>\r\n </div>\r\n");
#line 79 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 78 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
#line default
#line hidden
#line 78 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
using (Html.BeginForm(MVC.API.Plugin.Install(), FormMethod.Post))
{
#line default
#line hidden
#line 80 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
#line 80 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
}
#line default
#line hidden
WriteLiteral("</div>\r\n");
#line 83 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
if (canInstallLocal) if (canInstallLocal)
{ {
@@ -438,6 +471,8 @@ WriteLiteral(" id=\"dialogUploadPlugin\"");
WriteLiteral(" title=\"Install Plugin Package\""); WriteLiteral(" title=\"Install Plugin Package\"");
WriteLiteral(" class=\"dialog\"");
WriteLiteral(">\r\n <div"); WriteLiteral(">\r\n <div");
WriteLiteral(" style=\"padding-bottom: 10px;\""); WriteLiteral(" style=\"padding-bottom: 10px;\"");
@@ -445,15 +480,29 @@ WriteLiteral(" style=\"padding-bottom: 10px;\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 83 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 87 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
#line default #line default
#line hidden #line hidden
#line 83 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 87 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
using (Html.BeginForm(MVC.API.Plugin.InstallLocal(), FormMethod.Post, new { enctype = "multipart/form-data" })) using (Html.BeginForm(MVC.API.Plugin.InstallLocal(), FormMethod.Post, new { enctype = "multipart/form-data" }))
{ {
#line default
#line hidden
#line 89 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
#line 89 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
#line default #line default
@@ -477,7 +526,7 @@ WriteLiteral(" accept=\".discoPlugin\"");
WriteLiteral(" />\r\n"); WriteLiteral(" />\r\n");
#line 87 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 92 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
} }
@@ -501,7 +550,7 @@ WriteLiteral("></i><strong>Warning:</strong> All plugins run with the same level
"iv>\r\n"); "iv>\r\n");
#line 96 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 101 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
} }
@@ -515,35 +564,36 @@ WriteLiteral("<script>\r\n $(function () {\r\n var $selectedPlugin;\r\
" \"Install\": function () {\r\n if ($selectedPlugin == null || " + " \"Install\": function () {\r\n if ($selectedPlugin == null || " +
"!$selectedPluginUrl) {\r\n $(this).dialog(\"close\");\r\n " + "!$selectedPluginUrl) {\r\n $(this).dialog(\"close\");\r\n " +
" return;\r\n }\r\n $(this).di" + " return;\r\n }\r\n $(this).di" +
"alog(\"disable\");\r\n\r\n window.location.href = $selectedPluginUr" + "alog(\"disable\");\r\n $(this)\r\n .find(\'fo" +
"l;\r\n },\r\n Cancel: function () {\r\n " + "rm\')\r\n .attr(\'action\', $selectedPluginUrl)\r\n " +
" $selectedPlugin = null;\r\n $(this).dialog(\"close\");\r\n " + " .submit();\r\n },\r\n Cancel: function () {" +
" }\r\n }\r\n });\r\n $(\'#pluginLibraryGroups\').find(" + "\r\n $selectedPlugin = null;\r\n $(this).dialo" +
"\'a.pluginInstallLink\').click(function () {\r\n $this = $(this);\r\n\r\n " + "g(\"close\");\r\n }\r\n }\r\n });\r\n $(\'#pluginLi" +
" $selectedPlugin = $this.closest(\'.pluginItem\');\r\n $selectedPl" + "braryGroups\').find(\'a.pluginInstallLink\').click(function () {\r\n $this" +
"uginUrl = $this.attr(\'href\');\r\n\r\n $(\'#dialogInstallPluginName\').text(" + " = $(this);\r\n\r\n $selectedPlugin = $this.closest(\'.pluginItem\');\r\n " +
"$selectedPlugin.find(\'.pluginName\').text());\r\n $(\'#dialogInstallPlugi" + " $selectedPluginUrl = $this.attr(\'href\');\r\n\r\n $(\'#dialogInstal" +
"nDetails\').text($selectedPlugin.find(\'.pluginId\').text() + \' | \' + $selectedPlug" + "lPluginName\').text($selectedPlugin.find(\'.pluginName\').text());\r\n $(\'" +
"in.find(\'.pluginVersion\').text());\r\n\r\n $dialogInstall.dialog(\'option\'" + "#dialogInstallPluginDetails\').text($selectedPlugin.find(\'.pluginId\').text() + \' " +
", \'title\', \'Install this Plugin?\');\r\n $dialogInstall.dialog(\'open\');\r" + "| \' + $selectedPlugin.find(\'.pluginVersion\').text());\r\n\r\n $dialogInst" +
"\n\r\n return false;\r\n });\r\n $(\'#pluginLibraryGroups\').fin" + "all.dialog(\'option\', \'title\', \'Install this Plugin?\');\r\n $dialogInsta" +
"d(\'a.pluginUpdateLink\').click(function () {\r\n $this = $(this);\r\n\r\n " + "ll.dialog(\'open\');\r\n\r\n return false;\r\n });\r\n $(\'#plugin" +
" $selectedPlugin = $this.closest(\'.pluginItem\');\r\n $selectedP" + "LibraryGroups\').find(\'a.pluginUpdateLink\').click(function () {\r\n $thi" +
"luginUrl = $this.attr(\'href\');\r\n\r\n $(\'#dialogInstallPluginName\').text" + "s = $(this);\r\n\r\n $selectedPlugin = $this.closest(\'.pluginItem\');\r\n " +
"($selectedPlugin.find(\'.pluginName\').text());\r\n $(\'#dialogInstallPlug" + " $selectedPluginUrl = $this.attr(\'href\');\r\n\r\n $(\'#dialogInsta" +
"inDetails\').text($selectedPlugin.find(\'.pluginId\').text() + \' | \' + $selectedPlu" + "llPluginName\').text($selectedPlugin.find(\'.pluginName\').text());\r\n $(" +
"gin.find(\'.pluginVersion\').text());\r\n\r\n $dialogInstall.dialog(\'option" + "\'#dialogInstallPluginDetails\').text($selectedPlugin.find(\'.pluginId\').text() + \'" +
"\', \'title\', \'Update this Plugin?\');\r\n $dialogInstall.dialog(\'open\');\r" + " | \' + $selectedPlugin.find(\'.pluginVersion\').text());\r\n\r\n $dialogIns" +
"\n\r\n return false;\r\n });\r\n\r\n"); "tall.dialog(\'option\', \'title\', \'Update this Plugin?\');\r\n $dialogInsta" +
"ll.dialog(\'open\');\r\n\r\n return false;\r\n });\r\n\r\n");
#line 155 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 162 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
#line default #line default
#line hidden #line hidden
#line 155 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 162 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
if (canInstallLocal) if (canInstallLocal)
{ {
@@ -578,7 +628,7 @@ WriteLiteral(@"
"); ");
#line 182 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 189 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
} }
@@ -593,7 +643,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" "); WriteLiteral(" ");
#line 186 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 193 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
Write(Html.ActionLinkButton("Update Plugin Library", MVC.API.Plugin.UpdateLibraryManifest())); Write(Html.ActionLinkButton("Update Plugin Library", MVC.API.Plugin.UpdateLibraryManifest()));
@@ -602,13 +652,13 @@ Write(Html.ActionLinkButton("Update Plugin Library", MVC.API.Plugin.UpdateLibrar
WriteLiteral("\r\n"); WriteLiteral("\r\n");
#line 187 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 194 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
#line default #line default
#line hidden #line hidden
#line 187 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 194 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
if (canInstallLocal) if (canInstallLocal)
{ {
@@ -616,14 +666,14 @@ WriteLiteral("\r\n");
#line default #line default
#line hidden #line hidden
#line 189 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 196 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
Write(Html.ActionLinkButton("Install Plugin Package", MVC.API.Plugin.InstallLocal(), "buttonUpload")); Write(Html.ActionLinkButton("Install Plugin Package", MVC.API.Plugin.InstallLocal(), "buttonUpload"));
#line default #line default
#line hidden #line hidden
#line 189 "..\..\Areas\Config\Views\Plugins\Install.cshtml" #line 196 "..\..\Areas\Config\Views\Plugins\Install.cshtml"
} }
+1 -1
View File
@@ -95,7 +95,7 @@
font-size: 50px; font-size: 50px;
color: #e51400; color: #e51400;
} }
#updateAvailableContainer a.button { #updateAvailableContainer button {
font-size: 12px; font-size: 12px;
margin-top: 8px; margin-top: 8px;
} }
+1 -1
View File
@@ -21,7 +21,7 @@
color: @ButtonAlertColour; color: @ButtonAlertColour;
} }
a.button { button {
font-size: @FontSizeDefault; font-size: @FontSizeDefault;
margin-top: 8px; margin-top: 8px;
} }
File diff suppressed because one or more lines are too long
@@ -67,12 +67,6 @@ namespace Disco.Web.Areas.API.Controllers
} }
[NonAction] [NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult UpdateLocal()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateLocal);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult Uninstall() public virtual System.Web.Mvc.ActionResult Uninstall()
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Uninstall); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Uninstall);
@@ -108,7 +102,6 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string UpdateLibraryManifest = "UpdateLibraryManifest"; public readonly string UpdateLibraryManifest = "UpdateLibraryManifest";
public readonly string UpdateAll = "UpdateAll"; public readonly string UpdateAll = "UpdateAll";
public readonly string Update = "Update"; public readonly string Update = "Update";
public readonly string UpdateLocal = "UpdateLocal";
public readonly string Uninstall = "Uninstall"; public readonly string Uninstall = "Uninstall";
public readonly string Install = "Install"; public readonly string Install = "Install";
public readonly string InstallLocal = "InstallLocal"; public readonly string InstallLocal = "InstallLocal";
@@ -120,7 +113,6 @@ namespace Disco.Web.Areas.API.Controllers
public const string UpdateLibraryManifest = "UpdateLibraryManifest"; public const string UpdateLibraryManifest = "UpdateLibraryManifest";
public const string UpdateAll = "UpdateAll"; public const string UpdateAll = "UpdateAll";
public const string Update = "Update"; public const string Update = "Update";
public const string UpdateLocal = "UpdateLocal";
public const string Uninstall = "Uninstall"; public const string Uninstall = "Uninstall";
public const string Install = "Install"; public const string Install = "Install";
public const string InstallLocal = "InstallLocal"; public const string InstallLocal = "InstallLocal";
@@ -133,7 +125,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_UpdateLibraryManifest public class ActionParamsClass_UpdateLibraryManifest
{ {
public readonly string TryWaitingForCompletion = "TryWaitingForCompletion"; public readonly string tryWaitingForCompletion = "tryWaitingForCompletion";
} }
static readonly ActionParamsClass_Update s_params_Update = new ActionParamsClass_Update(); static readonly ActionParamsClass_Update s_params_Update = new ActionParamsClass_Update();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -141,16 +133,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_Update public class ActionParamsClass_Update
{ {
public readonly string PluginId = "PluginId"; public readonly string pluginId = "pluginId";
}
static readonly ActionParamsClass_UpdateLocal s_params_UpdateLocal = new ActionParamsClass_UpdateLocal();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_UpdateLocal UpdateLocalParams { get { return s_params_UpdateLocal; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_UpdateLocal
{
public readonly string PluginId = "PluginId";
public readonly string Plugin = "Plugin";
} }
static readonly ActionParamsClass_Uninstall s_params_Uninstall = new ActionParamsClass_Uninstall(); static readonly ActionParamsClass_Uninstall s_params_Uninstall = new ActionParamsClass_Uninstall();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -159,7 +142,7 @@ namespace Disco.Web.Areas.API.Controllers
public class ActionParamsClass_Uninstall public class ActionParamsClass_Uninstall
{ {
public readonly string id = "id"; public readonly string id = "id";
public readonly string UninstallData = "UninstallData"; public readonly string uninstallData = "uninstallData";
} }
static readonly ActionParamsClass_Install s_params_Install = new ActionParamsClass_Install(); static readonly ActionParamsClass_Install s_params_Install = new ActionParamsClass_Install();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -167,7 +150,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_Install public class ActionParamsClass_Install
{ {
public readonly string PluginId = "PluginId"; public readonly string pluginId = "pluginId";
} }
static readonly ActionParamsClass_InstallLocal s_params_InstallLocal = new ActionParamsClass_InstallLocal(); static readonly ActionParamsClass_InstallLocal s_params_InstallLocal = new ActionParamsClass_InstallLocal();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -175,7 +158,8 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_InstallLocal public class ActionParamsClass_InstallLocal
{ {
public readonly string Plugin = "Plugin"; public readonly string plugin = "plugin";
public readonly string immediateRestart = "immediateRestart";
} }
static readonly ViewsClass s_views = new ViewsClass(); static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -197,14 +181,14 @@ namespace Disco.Web.Areas.API.Controllers
public T4MVC_PluginController() : base(Dummy.Instance) { } public T4MVC_PluginController() : base(Dummy.Instance) { }
[NonAction] [NonAction]
partial void UpdateLibraryManifestOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, bool TryWaitingForCompletion); partial void UpdateLibraryManifestOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, bool tryWaitingForCompletion);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult UpdateLibraryManifest(bool TryWaitingForCompletion) public override System.Web.Mvc.ActionResult UpdateLibraryManifest(bool tryWaitingForCompletion)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateLibraryManifest); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateLibraryManifest);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "TryWaitingForCompletion", TryWaitingForCompletion); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "tryWaitingForCompletion", tryWaitingForCompletion);
UpdateLibraryManifestOverride(callInfo, TryWaitingForCompletion); UpdateLibraryManifestOverride(callInfo, tryWaitingForCompletion);
return callInfo; return callInfo;
} }
@@ -220,64 +204,52 @@ namespace Disco.Web.Areas.API.Controllers
} }
[NonAction] [NonAction]
partial void UpdateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string PluginId); partial void UpdateOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string pluginId);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult Update(string PluginId) public override System.Web.Mvc.ActionResult Update(string pluginId)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Update);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "PluginId", PluginId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "pluginId", pluginId);
UpdateOverride(callInfo, PluginId); UpdateOverride(callInfo, pluginId);
return callInfo; return callInfo;
} }
[NonAction] [NonAction]
partial void UpdateLocalOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string PluginId, System.Web.HttpPostedFileBase Plugin); partial void UninstallOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, bool uninstallData);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult UpdateLocal(string PluginId, System.Web.HttpPostedFileBase Plugin) public override System.Web.Mvc.ActionResult Uninstall(string id, bool uninstallData)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateLocal);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "PluginId", PluginId);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Plugin", Plugin);
UpdateLocalOverride(callInfo, PluginId, Plugin);
return callInfo;
}
[NonAction]
partial void UninstallOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, bool UninstallData);
[NonAction]
public override System.Web.Mvc.ActionResult Uninstall(string id, bool UninstallData)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Uninstall); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Uninstall);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "UninstallData", UninstallData); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "uninstallData", uninstallData);
UninstallOverride(callInfo, id, UninstallData); UninstallOverride(callInfo, id, uninstallData);
return callInfo; return callInfo;
} }
[NonAction] [NonAction]
partial void InstallOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string PluginId); partial void InstallOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string pluginId);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult Install(string PluginId) public override System.Web.Mvc.ActionResult Install(string pluginId)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Install); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Install);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "PluginId", PluginId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "pluginId", pluginId);
InstallOverride(callInfo, PluginId); InstallOverride(callInfo, pluginId);
return callInfo; return callInfo;
} }
[NonAction] [NonAction]
partial void InstallLocalOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, System.Web.HttpPostedFileBase Plugin); partial void InstallLocalOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, System.Web.HttpPostedFileBase plugin, bool immediateRestart);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult InstallLocal(System.Web.HttpPostedFileBase Plugin) public override System.Web.Mvc.ActionResult InstallLocal(System.Web.HttpPostedFileBase plugin, bool immediateRestart)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.InstallLocal); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.InstallLocal);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Plugin", Plugin); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "plugin", plugin);
InstallLocalOverride(callInfo, Plugin); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "immediateRestart", immediateRestart);
InstallLocalOverride(callInfo, plugin, immediateRestart);
return callInfo; return callInfo;
} }