#3417 handle saving of general macro data

This commit is contained in:
Dave Woestenborghs
2019-01-18 15:02:18 +01:00
parent 7fd7d7a582
commit 2dc9eb3a90
3 changed files with 131 additions and 64 deletions

View File

@@ -20,14 +20,14 @@ function macroResource($q, $http, umbRequestHelper) {
* @param {int} macroId The macro id to get parameters for
*
*/
getMacroParameters: function (macroId) {
getMacroParameters: function(macroId) {
return umbRequestHelper.resourcePromise(
$http.get(
umbRequestHelper.getApiUrl(
"macroRenderingApiBaseUrl",
"GetMacroParameters",
[{ macroId: macroId }])),
'Failed to retrieve macro parameters for macro with id ' + macroId);
$http.get(
umbRequestHelper.getApiUrl(
"macroRenderingApiBaseUrl",
"GetMacroParameters",
[{ macroId: macroId }])),
'Failed to retrieve macro parameters for macro with id ' + macroId);
},
/**
@@ -43,13 +43,14 @@ function macroResource($q, $http, umbRequestHelper) {
* @param {Array} macroParamDictionary A dictionary of macro parameters
*
*/
getMacroResultAsHtmlForEditor: function (macroAlias, pageId, macroParamDictionary) {
getMacroResultAsHtmlForEditor: function(macroAlias, pageId, macroParamDictionary) {
return umbRequestHelper.resourcePromise(
$http.post(
umbRequestHelper.getApiUrl(
"macroRenderingApiBaseUrl",
"GetMacroResultAsHtmlForEditor"), {
"GetMacroResultAsHtmlForEditor"),
{
macroAlias: macroAlias,
pageId: pageId,
macroParams: macroParamDictionary
@@ -68,10 +69,11 @@ function macroResource($q, $http, umbRequestHelper) {
$http.post(
umbRequestHelper.getApiUrl(
"macroRenderingApiBaseUrl",
"CreatePartialViewMacroWithFile"), {
virtualPath: virtualPath,
filename: filename
}
"CreatePartialViewMacroWithFile"),
{
virtualPath: virtualPath,
filename: filename
}
),
'Failed to create macro "' + filename + '"'
);
@@ -96,7 +98,7 @@ function macroResource($q, $http, umbRequestHelper) {
);
},
getParameterEditors: function () {
getParameterEditors: function() {
return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("macroApiBaseUrl", "GetParameterEditors"),
"Failed to get parameter editors")
@@ -105,10 +107,16 @@ function macroResource($q, $http, umbRequestHelper) {
getById: function(id) {
return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("macroApiBaseUrl", "GetById", { "id" : id}), "Failed to get macro")
);
$http.get(umbRequestHelper.getApiUrl("macroApiBaseUrl", "GetById", { "id": id }), "Failed to get macro")
);
},
saveMacro: function(macro) {
return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("macroApiBaseUrl", "Save"), macro)
);
}
};
};
}
angular.module('umbraco.resources').factory('macroResource', macroResource);

View File

@@ -6,7 +6,7 @@
* @description
* The controller for editing macros.
*/
function MacrosEditController($scope, $q, $routeParams, macroResource, editorState, navigationService, dateHelper, userService, entityResource, formHelper, contentEditingHelper, localizationService, angularHelper) {
function MacrosEditController($scope, $q, $routeParams, macroResource, editorState, navigationService, formHelper, contentEditingHelper, localizationService, angularHelper) {
var vm = this;
@@ -25,24 +25,23 @@ function MacrosEditController($scope, $q, $routeParams, macroResource, editorSta
vm.toggle = toggleValue;
function saveMacro() {
vm.page.saveButtonState = "busy";
function saveMacro() {
if (formHelper.submitForm({ scope: $scope, statusMessage: "Saving..." })) {
console.log(vm.macro);
//relationTypeResource.save(vm.relationType).then(function (data) {
// formHelper.resetForm({ scope: $scope, notifications: data.notifications });
// bindRelationType(data);
// vm.page.saveButtonState = "success";
//}, function (error) {
// contentEditingHelper.handleSaveError({
// redirectOnFailure: false,
// err: error
// });
vm.page.saveButtonState = "busy";
macroResource.saveMacro(vm.macro).then(function (data) {
formHelper.resetForm({ scope: $scope, notifications: data.notifications });
bindMacro(data);
vm.page.saveButtonState = "success";
}, function (error) {
contentEditingHelper.handleSaveError({
redirectOnFailure: false,
err: error
});
// notificationsService.error(error.data.message);
// vm.page.saveButtonState = "error";
//});
vm.page.saveButtonState = "error";
});
}
}
@@ -95,6 +94,15 @@ function MacrosEditController($scope, $q, $routeParams, macroResource, editorSta
return deferred.promise;
}
function bindMacro(data) {
vm.macro = data;
editorState.set(vm.macro);
navigationService.syncTree({ tree: "macros", path: vm.macro.path, forceReload: true }).then(function (syncArgs) {
vm.page.menu.currentNode = syncArgs.node;
});
}
function init() {
vm.page.loading = true;
@@ -116,13 +124,8 @@ function MacrosEditController($scope, $q, $routeParams, macroResource, editorSta
vm.parameterEditors = values[key];
}
if (keys[i] === 'macro') {
vm.macro = values[key];
editorState.set(vm.macro);
navigationService.syncTree({ tree: "macros", path: vm.macro.path, forceReload: true }).then(function (syncArgs) {
vm.page.menu.currentNode = syncArgs.node;
});
if (keys[i] === 'macro') {
bindMacro(values[key]);
}
}

View File

@@ -15,6 +15,7 @@
using Umbraco.Web.Composing;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.UI;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -48,18 +49,18 @@
if (this.Services.MacroService.GetByAlias(alias) != null)
{
return this.ReturnErrorResponse("Macro with this name already exists");
return this.ReturnErrorResponse("Macro with this alias already exists");
}
try
{
var macro = new Macro
{
Alias = alias,
Name = name,
MacroSource = string.Empty,
MacroType = MacroTypes.PartialView
};
{
Alias = alias,
Name = name,
MacroSource = string.Empty,
MacroType = MacroTypes.PartialView
};
this.Services.MacroService.Save(macro, this.Security.CurrentUser.Id);
@@ -72,7 +73,7 @@
}
[HttpGet]
public HttpResponseMessage GetById(int id)
public HttpResponseMessage GetById(int id)
{
var macro = this.Services.MacroService.GetById(id);
@@ -82,27 +83,31 @@
}
var macroDisplay = new MacroDisplay
{
Alias = macro.Alias, Id = macro.Id, Key = macro.Key, Name = macro.Name,
CacheByPage = macro.CacheByPage, CacheByUser = macro.CacheByMember,
CachePeriod = macro.CacheDuration,
View = macro.MacroSource,
RenderInEditor = !macro.DontRender,
UseInEditor = macro.UseInEditor,
Path = $"-1,{macro.Id}"
};
{
Alias = macro.Alias,
Id = macro.Id,
Key = macro.Key,
Name = macro.Name,
CacheByPage = macro.CacheByPage,
CacheByUser = macro.CacheByMember,
CachePeriod = macro.CacheDuration,
View = macro.MacroSource,
RenderInEditor = !macro.DontRender,
UseInEditor = macro.UseInEditor,
Path = $"-1,{macro.Id}"
};
var parameters = new List<MacroParameterDisplay>();
foreach (var param in macro.Properties.Values.OrderBy(x => x.SortOrder))
{
parameters.Add(new MacroParameterDisplay
{
Editor = param.EditorAlias,
Key = param.Alias,
Label = param.Name,
Id = param.Id
});
{
Editor = param.EditorAlias,
Key = param.Alias,
Label = param.Name,
Id = param.Id
});
}
macroDisplay.Parameters = parameters;
@@ -110,6 +115,57 @@
return this.Request.CreateResponse(HttpStatusCode.OK, macroDisplay);
}
[HttpPost]
public HttpResponseMessage Save(MacroDisplay macroDisplay)
{
if (macroDisplay == null)
{
return this.ReturnErrorResponse($"No macro data found in request");
}
var macro = this.Services.MacroService.GetById(int.Parse(macroDisplay.Id.ToString()));
if (macro == null)
{
return this.ReturnErrorResponse($"Macro with id {macroDisplay.Id} does not exist");
}
if (macroDisplay.Alias != macro.Alias)
{
var macroByAlias = this.Services.MacroService.GetByAlias(macroDisplay.Alias);
if (macroByAlias != null)
{
return this.ReturnErrorResponse("Macro with this alias already exists");
}
}
macro.Alias = macroDisplay.Alias;
macro.Name = macroDisplay.Name;
macro.CacheByMember = macroDisplay.CacheByUser;
macro.CacheByPage = macroDisplay.CacheByPage;
macro.CacheDuration = macroDisplay.CachePeriod;
macro.DontRender = !macroDisplay.RenderInEditor;
macro.UseInEditor = macroDisplay.UseInEditor;
macro.MacroSource = macroDisplay.View;
macro.MacroType = MacroTypes.PartialView;
try
{
this.Services.MacroService.Save(macro, this.Security.CurrentUser.Id);
macroDisplay.Notifications.Clear();
macroDisplay.Notifications.Add(new Models.ContentEditing.Notification("Success", "Macro saved", SpeechBubbleIcon.Success));
return this.Request.CreateResponse(HttpStatusCode.OK, macroDisplay);
}
catch (Exception exception)
{
return this.ReturnErrorResponse("Error creating macro", true, exception);
}
}
/// <summary>
/// Gets a list of available macro partials
/// </summary>
@@ -245,7 +301,7 @@
{
var files = new List<string>();
var dirInfo = new DirectoryInfo(path);
foreach (var dir in dirInfo.GetDirectories())
{
files.AddRange(this.FindPartialViewFilesInFolder(orgPath, path + "/" + dir.Name, prefixVirtualPath));