mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-20 19:03:25 +08:00
Refactored Tags module
--HG-- branch : dev
This commit is contained in:
@@ -55,10 +55,6 @@ namespace Orchard.Packaging.Controllers {
|
||||
return View(new PackagingAddSourceViewModel());
|
||||
}
|
||||
|
||||
public ActionResult AddSourceViewResult(PackagingAddSourceViewModel model) {
|
||||
return View("AddSource", model);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult AddSource(string url) {
|
||||
try {
|
||||
@@ -90,7 +86,7 @@ namespace Orchard.Packaging.Controllers {
|
||||
}
|
||||
|
||||
if ( !ModelState.IsValid )
|
||||
return AddSourceViewResult(new PackagingAddSourceViewModel(){ Url = url });
|
||||
return View(new PackagingAddSourceViewModel { Url = url });
|
||||
|
||||
_packagingSourceManager.AddSource(new PackagingSource { Id = Guid.NewGuid(), FeedUrl = url, FeedTitle = title });
|
||||
_notifier.Information(T("The feed has been added successfully."));
|
||||
@@ -99,14 +95,14 @@ namespace Orchard.Packaging.Controllers {
|
||||
}
|
||||
catch ( Exception exception ) {
|
||||
_notifier.Error(T("Adding feed failed: {0}", exception.Message));
|
||||
return AddSourceViewResult(new PackagingAddSourceViewModel() { Url = url });
|
||||
return View(new PackagingAddSourceViewModel { Url = url });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ActionResult Modules(Guid? sourceId) {
|
||||
var selectedSource = _packagingSourceManager.GetSources().Where(s => s.Id == sourceId).FirstOrDefault();
|
||||
|
||||
|
||||
return View("Modules", new PackagingModulesViewModel {
|
||||
Modules = _packagingSourceManager.GetModuleList(selectedSource),
|
||||
Sources = _packagingSourceManager.GetSources().OrderBy(s => s.FeedTitle),
|
||||
|
@@ -9,7 +9,6 @@ using Orchard.Settings;
|
||||
using Orchard.Tags.Models;
|
||||
using Orchard.Tags.ViewModels;
|
||||
using Orchard.Tags.Services;
|
||||
using Orchard.UI.Notify;
|
||||
|
||||
namespace Orchard.Tags.Controllers {
|
||||
[ValidateInput(false)]
|
||||
@@ -22,52 +21,41 @@ namespace Orchard.Tags.Controllers {
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
|
||||
|
||||
public IOrchardServices Services { get; set; }
|
||||
protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; }
|
||||
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public ActionResult Index() {
|
||||
try {
|
||||
IEnumerable<Tag> tags = _tagService.GetTags();
|
||||
var entries = tags.Select(tag => CreateTagEntry(tag)).ToList();
|
||||
var model = new TagsAdminIndexViewModel { Tags = entries };
|
||||
return View(model);
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Listing tags failed: " + exception.Message));
|
||||
return Index();
|
||||
}
|
||||
IEnumerable<Tag> tags = _tagService.GetTags();
|
||||
var entries = tags.Select(CreateTagEntry).ToList();
|
||||
var model = new TagsAdminIndexViewModel { Tags = entries };
|
||||
return View(model);
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Index(FormCollection input) {
|
||||
var viewModel = new TagsAdminIndexViewModel { Tags = new List<TagEntry>(), BulkAction = new TagAdminIndexBulkAction() };
|
||||
UpdateModel(viewModel);
|
||||
|
||||
try {
|
||||
IEnumerable<TagEntry> checkedEntries = viewModel.Tags.Where(t => t.IsChecked);
|
||||
switch (viewModel.BulkAction) {
|
||||
case TagAdminIndexBulkAction.None:
|
||||
break;
|
||||
case TagAdminIndexBulkAction.Delete:
|
||||
if (!Services.Authorizer.Authorize(Permissions.ManageTags, T("Couldn't delete tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
foreach (TagEntry entry in checkedEntries) {
|
||||
_tagService.DeleteTag(entry.Tag.Id);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
var viewModel = new TagsAdminIndexViewModel {Tags = new List<TagEntry>(), BulkAction = new TagAdminIndexBulkAction()};
|
||||
|
||||
if ( !TryUpdateModel(viewModel) ) {
|
||||
return View(viewModel);
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Editing tags failed: " + exception.Message));
|
||||
return Index();
|
||||
|
||||
IEnumerable<TagEntry> checkedEntries = viewModel.Tags.Where(t => t.IsChecked);
|
||||
switch (viewModel.BulkAction) {
|
||||
case TagAdminIndexBulkAction.None:
|
||||
break;
|
||||
case TagAdminIndexBulkAction.Delete:
|
||||
if (!Services.Authorizer.Authorize(Permissions.ManageTags, T("Couldn't delete tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
foreach (TagEntry entry in checkedEntries) {
|
||||
_tagService.DeleteTag(entry.Tag.Id);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
return RedirectToAction("Index");
|
||||
@@ -80,67 +68,62 @@ namespace Orchard.Tags.Controllers {
|
||||
[HttpPost]
|
||||
public ActionResult Create(FormCollection input) {
|
||||
var viewModel = new TagsAdminCreateViewModel();
|
||||
try {
|
||||
UpdateModel(viewModel);
|
||||
if (!Services.Authorizer.Authorize(Permissions.CreateTag, T("Couldn't create tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
_tagService.CreateTag(viewModel.TagName);
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Creating tag failed: " + exception.Message));
|
||||
|
||||
if (!TryUpdateModel(viewModel)) {
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
if (!Services.Authorizer.Authorize(Permissions.CreateTag, T("Couldn't create tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
_tagService.CreateTag(viewModel.TagName);
|
||||
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
||||
public ActionResult Edit(int id) {
|
||||
try {
|
||||
Tag tag = _tagService.GetTag(id);
|
||||
var viewModel = new TagsAdminEditViewModel {
|
||||
Id = tag.Id,
|
||||
TagName = tag.TagName,
|
||||
};
|
||||
return View(viewModel);
|
||||
Tag tag = _tagService.GetTag(id);
|
||||
|
||||
if(tag == null) {
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Retrieving tag information failed: " + exception.Message));
|
||||
return Index();
|
||||
}
|
||||
|
||||
var viewModel = new TagsAdminEditViewModel {
|
||||
Id = tag.Id,
|
||||
TagName = tag.TagName,
|
||||
};
|
||||
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Edit(FormCollection input) {
|
||||
var viewModel = new TagsAdminEditViewModel();
|
||||
try {
|
||||
UpdateModel(viewModel);
|
||||
if (!Services.Authorizer.Authorize(Permissions.ManageTags, T("Couldn't edit tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
_tagService.UpdateTag(viewModel.Id, viewModel.TagName);
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Editing tag failed: " + exception.Message));
|
||||
if ( !TryUpdateModel(viewModel) ) {
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
if (!Services.Authorizer.Authorize(Permissions.ManageTags, T("Couldn't edit tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
_tagService.UpdateTag(viewModel.Id, viewModel.TagName);
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
||||
public ActionResult Search(int id) {
|
||||
try {
|
||||
Tag tag = _tagService.GetTag(id);
|
||||
IEnumerable<IContent> contents = _tagService.GetTaggedContentItems(id).ToList();
|
||||
var viewModel = new TagsAdminSearchViewModel {
|
||||
TagName = tag.TagName,
|
||||
Contents = contents,
|
||||
};
|
||||
return View(viewModel);
|
||||
Tag tag = _tagService.GetTag(id);
|
||||
|
||||
if (tag == null) {
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("Retrieving tagged items failed: " + exception.Message));
|
||||
return Index();
|
||||
}
|
||||
|
||||
IEnumerable<IContent> contents = _tagService.GetTaggedContentItems(id).ToList();
|
||||
var viewModel = new TagsAdminSearchViewModel {
|
||||
TagName = tag.TagName,
|
||||
Contents = contents,
|
||||
};
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
private static TagEntry CreateTagEntry(Tag tag) {
|
||||
|
@@ -1,5 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using JetBrains.Annotations;
|
||||
@@ -8,23 +6,17 @@ using Orchard.Localization;
|
||||
using Orchard.Logging;
|
||||
using Orchard.Security;
|
||||
using Orchard.Settings;
|
||||
using Orchard.Tags.Helpers;
|
||||
using Orchard.Tags.Services;
|
||||
using Orchard.Tags.ViewModels;
|
||||
using Orchard.UI.Notify;
|
||||
|
||||
namespace Orchard.Tags.Controllers {
|
||||
[ValidateInput(false)]
|
||||
public class HomeController : Controller {
|
||||
private readonly ITagService _tagService;
|
||||
private readonly IContentManager _contentManager;
|
||||
private readonly INotifier _notifier;
|
||||
private readonly IAuthorizer _authorizer;
|
||||
|
||||
public HomeController(ITagService tagService, IAuthorizer authorizer, INotifier notifier, IContentManager contentManager) {
|
||||
public HomeController(ITagService tagService, IContentManager contentManager) {
|
||||
_tagService = tagService;
|
||||
_authorizer = authorizer;
|
||||
_notifier = notifier;
|
||||
_contentManager = contentManager;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
@@ -35,82 +27,28 @@ namespace Orchard.Tags.Controllers {
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public ActionResult Index() {
|
||||
try {
|
||||
var tags = _tagService.GetTags();
|
||||
var model = new TagsIndexViewModel { Tags = tags.ToList() };
|
||||
return View(model);
|
||||
}
|
||||
catch (Exception exception) {
|
||||
_notifier.Error(T("Listing tags failed: " + exception.Message));
|
||||
return Index();
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Edit(FormCollection input, int taggedContentId, string returnUrl, string newTagName) {
|
||||
try {
|
||||
if (!_authorizer.Authorize(Permissions.CreateTag, T("Couldn't create tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
if (!String.IsNullOrEmpty(newTagName)) {
|
||||
foreach (var tagName in TagHelpers.ParseCommaSeparatedTagNames(newTagName)) {
|
||||
if (_tagService.GetTagByName(tagName) == null) {
|
||||
_tagService.CreateTag(tagName);
|
||||
}
|
||||
_tagService.TagContentItem(taggedContentId, tagName);
|
||||
}
|
||||
}
|
||||
if (!String.IsNullOrEmpty(returnUrl)) {
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
_notifier.Error(T("Editing tags failed: " + exception.Message));
|
||||
if (!String.IsNullOrEmpty(returnUrl)) {
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Update(string tags, int taggedContentId, string returnUrl) {
|
||||
try {
|
||||
if (!_authorizer.Authorize(Permissions.CreateTag, T("Couldn't create tag")))
|
||||
return new HttpUnauthorizedResult();
|
||||
List<string> tagNames = TagHelpers.ParseCommaSeparatedTagNames(tags);
|
||||
_tagService.UpdateTagsForContentItem(taggedContentId, tagNames);
|
||||
if (!String.IsNullOrEmpty(returnUrl)) {
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch (Exception exception) {
|
||||
_notifier.Error(T("Updating tags failed: " + exception.Message));
|
||||
if (!String.IsNullOrEmpty(returnUrl)) {
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
var tags = _tagService.GetTags();
|
||||
var model = new TagsIndexViewModel { Tags = tags.ToList() };
|
||||
return View(model);
|
||||
}
|
||||
|
||||
public ActionResult Search(string tagName) {
|
||||
try {
|
||||
var tag = _tagService.GetTagByName(tagName);
|
||||
var items =
|
||||
_tagService.GetTaggedContentItems(tag.Id).Select(
|
||||
ic => _contentManager.BuildDisplayModel(ic, "SummaryForSearch"));
|
||||
var tag = _tagService.GetTagByName(tagName);
|
||||
|
||||
var viewModel = new TagsSearchViewModel {
|
||||
TagName = tag.TagName,
|
||||
Items = items.ToList()
|
||||
};
|
||||
return View(viewModel);
|
||||
|
||||
}
|
||||
catch (Exception exception) {
|
||||
if (tag == null) {
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
||||
var items =
|
||||
_tagService.GetTaggedContentItems(tag.Id).Select(
|
||||
ic => _contentManager.BuildDisplayModel(ic, "SummaryForSearch"));
|
||||
|
||||
var viewModel = new TagsSearchViewModel {
|
||||
TagName = tag.TagName,
|
||||
Items = items.ToList()
|
||||
};
|
||||
|
||||
return View(viewModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -90,7 +90,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Module.txt" />
|
||||
<Content Include="Views\Admin\Create.aspx" />
|
||||
<Content Include="Views\Admin\Create.ascx" />
|
||||
<Content Include="Views\Admin\Edit.aspx" />
|
||||
<Content Include="Views\Admin\Index.aspx" />
|
||||
<Content Include="Views\Admin\Search.aspx" />
|
||||
|
@@ -40,7 +40,7 @@ namespace Orchard.Tags.Services {
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public IEnumerable<Tag> GetTags() {
|
||||
return from tags in _tagRepository.Table.ToList() select tags;
|
||||
return _tagRepository.Table.ToList();
|
||||
}
|
||||
|
||||
public Tag GetTag(int id) {
|
||||
@@ -59,7 +59,7 @@ namespace Orchard.Tags.Services {
|
||||
_tagRepository.Create(tag);
|
||||
}
|
||||
else {
|
||||
_notifier.Warning(T("Couldn't create tag: " + tagName + "it already exixts"));
|
||||
_notifier.Warning(T("The tag {0} already exists", tagName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,7 +4,7 @@ using Orchard.Mvc.ViewModels;
|
||||
|
||||
namespace Orchard.Tags.ViewModels {
|
||||
public class TagsAdminCreateViewModel : BaseViewModel {
|
||||
[Required, DisplayName("Name:")]
|
||||
[Required, DisplayName("Name")]
|
||||
public string TagName { get; set; }
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ using Orchard.Mvc.ViewModels;
|
||||
namespace Orchard.Tags.ViewModels {
|
||||
public class TagsAdminEditViewModel : BaseViewModel {
|
||||
public int Id { get; set; }
|
||||
[Required, DisplayName("Name:")]
|
||||
[Required, DisplayName("Name")]
|
||||
public string TagName { get; set; }
|
||||
}
|
||||
}
|
||||
|
@@ -4,8 +4,10 @@
|
||||
<% using(Html.BeginFormAntiForgeryPost()) { %>
|
||||
<%: Html.ValidationSummary() %>
|
||||
<fieldset>
|
||||
<label for="TagName"><%: T("Name:")%></label>
|
||||
<input id="TagName" class="text" name="TagName" type="text" value="<%: Model.TagName %>" />
|
||||
<input type="submit" class="button" value="<%: T("Save") %>" />
|
||||
<%: Html.LabelFor(m => m.TagName) %>
|
||||
<%: Html.TextBoxFor(m => m.TagName, new { @class = "text" })%>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<input class="button primaryAction" type="submit" value="<%:T("Save") %>" />
|
||||
</fieldset>
|
||||
<% } %>
|
@@ -4,9 +4,11 @@
|
||||
<% using(Html.BeginFormAntiForgeryPost()) { %>
|
||||
<%: Html.ValidationSummary() %>
|
||||
<fieldset>
|
||||
<label for="Name"><%: T("Name:") %></label>
|
||||
<input id="Id" name="Id" type="hidden" value="<%=Model.Id %>" />
|
||||
<input id="TagName" class="text" name="TagName" type="text" value="<%: Model.TagName %>" />
|
||||
<input type="submit" class="button" value="<%: T("Save") %>" />
|
||||
</fieldset>
|
||||
<%: Html.HiddenFor(m => m.Id) %>
|
||||
<%: Html.LabelFor(m => m.TagName) %>
|
||||
<%: Html.TextBoxFor(m => m.TagName, new { @class = "text" })%>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<input class="button primaryAction" type="submit" value="<%:T("Save") %>" />
|
||||
</fieldset>
|
||||
<% } %>
|
Reference in New Issue
Block a user