Files
Umbraco-CMS/src/Umbraco.Web/umbraco.presentation/umbraco/create/PartialViewTasksBase.cs
2017-05-17 12:09:28 +02:00

104 lines
4.0 KiB
C#

using System;
using System.IO;
using System.Web;
using Umbraco.Core.CodeAnnotations;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
using Umbraco.Web;
using Umbraco.Web.UI;
using umbraco.BasePages;
using Umbraco.Core;
namespace umbraco
{
/// <summary>
/// The base UI 'tasks' for the create dialog and delete processes
/// </summary>
[UmbracoWillObsolete("http://issues.umbraco.org/issue/U4-1373", "This will one day be removed when we overhaul the create process")]
public abstract class PartialViewTasksBase : LegacyDialogTask
{
private string _returnUrl = string.Empty;
public override string ReturnUrl
{
get { return _returnUrl; }
}
protected virtual string EditViewFile
{
get { return "Settings/Views/EditView.aspx"; }
}
protected virtual bool IsPartialViewMacro
{
get { return false; }
}
public override bool PerformSave()
{
var pipesIndex = Alias.IndexOf("|||", StringComparison.Ordinal);
var snippetName = Alias.Substring(0, pipesIndex).Trim();
var fileName = Alias.Substring(pipesIndex + 3, Alias.Length - pipesIndex - 3);
if (fileName.ToLowerInvariant().EndsWith(".cshtml") == false)
{
fileName += ".cshtml";
}
var model = new PartialView(IsPartialViewMacro ? PartialViewType.PartialViewMacro : PartialViewType.PartialView, fileName);
var fileService = (FileService)ApplicationContext.Current.Services.FileService;
var macroService = ApplicationContext.Current.Services.MacroService;
if (IsPartialViewMacro == false)
{
var attempt = fileService.CreatePartialView(model, snippetName, User.Id);
_returnUrl = string.Format("settings/views/EditView.aspx?treeType=partialViews&file={0}", HttpUtility.UrlEncode(model.Path.TrimStart('/').Replace("\\", "/")));
return attempt.Success;
}
else
{
var attempt = fileService.CreatePartialViewMacro(model, /*ParentID == 1,*/ snippetName, User.Id);
// if ParentId = 0 then that means that the "Create macro" checkbox was OFF, so don't try to create an actual macro
// See PartialViewMacro.ascx.cs and PartialView.ascx.cs: SubmitButton_Click
if (attempt && ParentID != 0)
{
//The partial view path to be saved with the macro must be a fully qualified virtual path
var virtualPath = string.Format("{0}/{1}/{2}", SystemDirectories.MvcViews, "MacroPartials", attempt.Result.Path);
macroService.Save(new Macro(attempt.Result.Alias, attempt.Result.Alias) { ScriptPath = virtualPath });
}
_returnUrl = string.Format("settings/views/EditView.aspx?treeType=partialViewMacros&file={0}", HttpUtility.UrlEncode(model.Path.TrimStart('/').Replace("\\", "/")));
return attempt.Success;
}
}
public override bool PerformDelete()
{
var fileService = (FileService)ApplicationContext.Current.Services.FileService;
if (IsPartialViewMacro == false)
{
if (Alias.Contains(".") == false)
{
//there is no extension so we'll assume it's a folder
fileService.DeletePartialViewFolder(Alias.TrimStart('/'));
return true;
}
return fileService.DeletePartialView(Alias.TrimStart('/'), User.Id);
}
if (Alias.Contains(".") == false)
{
//there is no extension so we'll assume it's a folder
fileService.DeletePartialViewMacroFolder(Alias.TrimStart('/'));
return true;
}
return fileService.DeletePartialViewMacro(Alias.TrimStart('/'), User.Id);
}
}
}