mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-07-15 23:22:26 +08:00

Some minor fixes - wrong notification types. Conflicts: src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/TermAdminController.cs src/Orchard.Web/Modules/Orchard.Themes/Controllers/AdminController.cs Contained in branches: dev#gitext://gotobranch/dev Contained in no tag
191 lines
8.6 KiB
C#
191 lines
8.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web.Mvc;
|
|
using Orchard.ContentManagement;
|
|
using Orchard.ContentManagement.MetaData;
|
|
using Orchard.ContentManagement.MetaData.Models;
|
|
using Orchard.Core.Common.Models;
|
|
using Orchard.Core.Contents;
|
|
using Orchard.Core.Contents.ViewModels;
|
|
using Orchard.Data;
|
|
using Orchard.DisplayManagement;
|
|
using Orchard.Localization;
|
|
using Orchard.Mvc.Extensions;
|
|
using Orchard.Settings;
|
|
using Orchard.UI.Navigation;
|
|
using Orchard.UI.Notify;
|
|
|
|
namespace Orchard.Templates.Controllers {
|
|
public class AdminController : Controller {
|
|
private readonly IContentManager _contentManager;
|
|
private readonly IContentDefinitionManager _contentDefinitionManager;
|
|
private readonly ITransactionManager _transactionManager;
|
|
private readonly ISiteService _siteService;
|
|
|
|
public AdminController(
|
|
IOrchardServices orchardServices,
|
|
IContentManager contentManager,
|
|
IContentDefinitionManager contentDefinitionManager,
|
|
ITransactionManager transactionManager,
|
|
ISiteService siteService,
|
|
IShapeFactory shapeFactory) {
|
|
Services = orchardServices;
|
|
_contentManager = contentManager;
|
|
_contentDefinitionManager = contentDefinitionManager;
|
|
_transactionManager = transactionManager;
|
|
_siteService = siteService;
|
|
T = NullLocalizer.Instance;
|
|
Shape = shapeFactory;
|
|
}
|
|
|
|
dynamic Shape { get; set; }
|
|
public IOrchardServices Services { get; private set; }
|
|
public Localizer T { get; set; }
|
|
|
|
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) {
|
|
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates"))) {
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
|
|
var query = _contentManager.Query(VersionOptions.Latest, GetShapeTypes().Select(ctd => ctd.Name).ToArray());
|
|
|
|
if (!string.IsNullOrEmpty(model.TypeName)) {
|
|
var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName);
|
|
if (contentTypeDefinition == null)
|
|
return HttpNotFound();
|
|
|
|
model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName)
|
|
? contentTypeDefinition.DisplayName
|
|
: contentTypeDefinition.Name;
|
|
query = query.ForType(model.TypeName);
|
|
}
|
|
|
|
switch (model.Options.OrderBy) {
|
|
case ContentsOrder.Modified:
|
|
query = query.OrderByDescending<CommonPartRecord>(cr => cr.ModifiedUtc);
|
|
break;
|
|
case ContentsOrder.Published:
|
|
query = query.OrderByDescending<CommonPartRecord>(cr => cr.PublishedUtc);
|
|
break;
|
|
case ContentsOrder.Created:
|
|
query = query.OrderByDescending<CommonPartRecord>(cr => cr.CreatedUtc);
|
|
break;
|
|
}
|
|
|
|
model.Options.SelectedFilter = model.TypeName;
|
|
model.Options.FilterOptions = GetShapeTypes()
|
|
.Select(x => new KeyValuePair<string, string>(x.Name, x.DisplayName))
|
|
.ToList().OrderBy(x => x.Value);
|
|
|
|
var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());
|
|
var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
|
|
var list = Shape.List();
|
|
|
|
list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin")));
|
|
|
|
var viewModel = Shape.ViewModel()
|
|
.ContentItems(list)
|
|
.Pager(pagerShape)
|
|
.Options(model.Options)
|
|
.TypeDisplayName(model.TypeDisplayName ?? "");
|
|
|
|
return View(viewModel);
|
|
}
|
|
|
|
[HttpPost, ActionName("List")]
|
|
[Mvc.FormValueRequired("submit.Filter")]
|
|
public ActionResult ListFilterPOST(ContentOptions options) {
|
|
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates"))) {
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
var routeValues = ControllerContext.RouteData.Values;
|
|
if (options != null) {
|
|
routeValues["Options.OrderBy"] = options.OrderBy;
|
|
if (GetShapeTypes().Any(x => String.Equals(x.Name, options.SelectedFilter, StringComparison.OrdinalIgnoreCase))) {
|
|
routeValues["id"] = options.SelectedFilter;
|
|
}
|
|
else {
|
|
routeValues.Remove("id");
|
|
}
|
|
}
|
|
|
|
return RedirectToAction("List", routeValues);
|
|
}
|
|
|
|
[HttpPost, ActionName("List")]
|
|
[Mvc.FormValueRequired("submit.BulkEdit")]
|
|
public ActionResult ListPOST(ContentOptions options, IEnumerable<int> itemIds, string returnUrl) {
|
|
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates"))) {
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
if (itemIds != null) {
|
|
var checkedContentItems = _contentManager.GetMany<ContentItem>(itemIds, VersionOptions.Latest, QueryHints.Empty);
|
|
switch (options.BulkAction) {
|
|
case ContentsBulkAction.None:
|
|
break;
|
|
case ContentsBulkAction.PublishNow:
|
|
foreach (var item in checkedContentItems) {
|
|
if (!Services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't publish selected content."))) {
|
|
_transactionManager.Cancel();
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
_contentManager.Publish(item);
|
|
}
|
|
Services.Notifier.Success(T("Content successfully published."));
|
|
break;
|
|
case ContentsBulkAction.Unpublish:
|
|
foreach (var item in checkedContentItems) {
|
|
if (!Services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't unpublish selected content."))) {
|
|
_transactionManager.Cancel();
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
_contentManager.Unpublish(item);
|
|
}
|
|
Services.Notifier.Success(T("Content successfully unpublished."));
|
|
break;
|
|
case ContentsBulkAction.Remove:
|
|
foreach (var item in checkedContentItems) {
|
|
if (!Services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.DeleteContent, item, T("Couldn't remove selected content."))) {
|
|
_transactionManager.Cancel();
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
_contentManager.Remove(item);
|
|
}
|
|
Services.Notifier.Success(T("Content successfully removed."));
|
|
break;
|
|
default:
|
|
throw new ArgumentOutOfRangeException();
|
|
}
|
|
}
|
|
|
|
return this.RedirectLocal(returnUrl, () => RedirectToAction("List"));
|
|
}
|
|
|
|
public ActionResult Create(string id) {
|
|
if (!Services.Authorizer.Authorize(Permissions.ManageTemplates, T("Not authorized to manage templates"))) {
|
|
return new HttpUnauthorizedResult();
|
|
}
|
|
|
|
var types = GetShapeTypes();
|
|
var typeName = String.IsNullOrWhiteSpace(id) ? types.Count() == 1 ? types.First().Name : null : id;
|
|
return String.IsNullOrEmpty(typeName) ? CreatableTypeList() : RedirectToAction("Create", "Admin", new { area = "Contents", id = typeName });
|
|
}
|
|
|
|
private ActionResult CreatableTypeList() {
|
|
var viewModel = Shape.ViewModel(ContentTypes: GetShapeTypes());
|
|
return View("CreatableTypeList", viewModel);
|
|
}
|
|
|
|
private IEnumerable<ContentTypeDefinition> GetShapeTypes() {
|
|
return _contentDefinitionManager.ListTypeDefinitions().Where(x => x.Parts.Any(p => p.PartDefinition.Name == "ShapePart")).ToList();
|
|
}
|
|
}
|
|
}
|