Refactored Tags module

--HG--
branch : dev
This commit is contained in:
Sebastien Ros
2010-07-28 16:33:53 -07:00
parent 2c9eb65542
commit bb2ecbb0fd
9 changed files with 97 additions and 176 deletions

View File

@@ -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,7 +95,7 @@ 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 });
}
}

View File

@@ -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,32 +21,26 @@ 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 entries = tags.Select(CreateTagEntry).ToList();
var model = new TagsAdminIndexViewModel { Tags = entries };
return View(model);
}
catch (Exception exception) {
Services.Notifier.Error(T("Listing tags failed: " + exception.Message));
return Index();
}
}
[HttpPost]
public ActionResult Index(FormCollection input) {
var viewModel = new TagsAdminIndexViewModel { Tags = new List<TagEntry>(), BulkAction = new TagAdminIndexBulkAction() };
UpdateModel(viewModel);
var viewModel = new TagsAdminIndexViewModel {Tags = new List<TagEntry>(), BulkAction = new TagAdminIndexBulkAction()};
if ( !TryUpdateModel(viewModel) ) {
return View(viewModel);
}
try {
IEnumerable<TagEntry> checkedEntries = viewModel.Tags.Where(t => t.IsChecked);
switch (viewModel.BulkAction) {
case TagAdminIndexBulkAction.None:
@@ -64,11 +57,6 @@ namespace Orchard.Tags.Controllers {
default:
throw new ArgumentOutOfRangeException();
}
}
catch (Exception exception) {
Services.Notifier.Error(T("Editing tags failed: " + exception.Message));
return Index();
}
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);
if(tag == null) {
return RedirectToAction("Index");
}
var viewModel = new TagsAdminEditViewModel {
Id = tag.Id,
TagName = tag.TagName,
};
return View(viewModel);
}
catch (Exception exception) {
Services.Notifier.Error(T("Retrieving tag information failed: " + exception.Message));
return Index();
}
return View(viewModel);
}
[HttpPost]
public ActionResult Edit(FormCollection input) {
var viewModel = new TagsAdminEditViewModel();
try {
UpdateModel(viewModel);
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");
}
catch (Exception exception) {
Services.Notifier.Error(T("Editing tag failed: " + exception.Message));
return View(viewModel);
}
}
public ActionResult Search(int id) {
try {
Tag tag = _tagService.GetTag(id);
if (tag == null) {
return RedirectToAction("Index");
}
IEnumerable<IContent> contents = _tagService.GetTaggedContentItems(id).ToList();
var viewModel = new TagsAdminSearchViewModel {
TagName = tag.TagName,
Contents = contents,
};
return View(viewModel);
}
catch (Exception exception) {
Services.Notifier.Error(T("Retrieving tagged items failed: " + exception.Message));
return Index();
}
}
private static TagEntry CreateTagEntry(Tag tag) {

View File

@@ -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,68 +27,18 @@ 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");
}
}
public ActionResult Search(string tagName) {
try {
var tag = _tagService.GetTagByName(tagName);
if (tag == null) {
return RedirectToAction("Index");
}
var items =
_tagService.GetTaggedContentItems(tag.Id).Select(
ic => _contentManager.BuildDisplayModel(ic, "SummaryForSearch"));
@@ -105,12 +47,8 @@ namespace Orchard.Tags.Controllers {
TagName = tag.TagName,
Items = items.ToList()
};
return View(viewModel);
}
catch (Exception exception) {
return RedirectToAction("Index");
}
return View(viewModel);
}
}
}

View File

@@ -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" />

View File

@@ -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));
}
}

View File

@@ -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; }
}
}

View File

@@ -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; }
}
}

View File

@@ -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>
<% } %>

View File

@@ -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") %>" />
<%: 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>
<% } %>