#16872: Setting contentitem container. Fixing publish now.

--HG--
branch : dev
This commit is contained in:
Andre Rodrigues
2010-11-29 17:21:14 -08:00
parent 1a4b6358bb
commit c68206c19f

View File

@@ -3,6 +3,8 @@ using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Aspects;
using Orchard.Core.Contents.Controllers;
using Orchard.Core.Contents.Settings;
using Orchard.Core.Routable.Models;
using Orchard.DisplayManagement;
using Orchard.Localization.Models;
@@ -46,14 +48,14 @@ namespace Orchard.Localization.Controllers {
var metadata = _contentManager.GetItemMetadata(contentItem);
return RedirectToAction(Convert.ToString(metadata.EditorRouteValues["action"]), metadata.EditorRouteValues);
}
var siteCultures = _cultureManager.ListCultures().Where(s => s != _localizationService.GetContentCulture(contentItem) && s != _cultureManager.GetSiteCulture());
var selectedCulture = siteCultures.SingleOrDefault(s => string.Equals(s, to, StringComparison.OrdinalIgnoreCase))
?? _cultureManager.GetCurrentCulture(HttpContext); // could be null but the person doing the translating might be translating into their current culture
//todo: need a better solution for modifying some parts when translating - or go with a completely different experience
if (contentItem.Has<RoutePart>()) {
var routePart = contentItem.As<RoutePart>();
RoutePart routePart = contentItem.As<RoutePart>();
routePart.Slug = string.Format("{0}{2}{1}", routePart.Slug, siteCultures.Any(s => string.Equals(s, selectedCulture, StringComparison.OrdinalIgnoreCase)) ? selectedCulture : "", !string.IsNullOrWhiteSpace(routePart.Slug) ? "-" : "");
routePart.Path = null;
}
@@ -66,13 +68,29 @@ namespace Orchard.Localization.Controllers {
SiteCultures = siteCultures,
Content = _contentManager.BuildEditor(contentItem)
};
// Cancel transaction so that the routepart is not modified.
Services.TransactionManager.Cancel();
return View(model);
}
[HttpPost, ActionName("Translate")]
[FormValueRequired("submit.Save")]
public ActionResult TranslatePOST(int id) {
return TranslatePOST(id, contentItem => {
if (!contentItem.Has<IPublishingControlAspect>() && !contentItem.TypeDefinition.Settings.GetModel<ContentTypeSettings>().Draftable)
Services.ContentManager.Publish(contentItem);
});
}
[HttpPost, ActionName("Translate")]
[FormValueRequired("submit.Publish")]
public ActionResult TranslateAndPublishPOST(int id) {
return TranslatePOST(id, contentItem => Services.ContentManager.Publish(contentItem));
}
public ActionResult TranslatePOST(int id, Action<ContentItem> conditionallyPublish) {
var contentItem = _contentManager.Get(id, VersionOptions.Latest);
if (contentItem == null)
@@ -86,19 +104,18 @@ namespace Orchard.Localization.Controllers {
if (existingTranslation != null) {
// edit existing
contentItemTranslation = _contentManager.Get(existingTranslation.ContentItem.Id, VersionOptions.DraftRequired);
}
else {
} else {
// create
contentItemTranslation = _contentManager.New(contentItem.ContentType);
contentItemTranslation.As<ICommonPart>().Container = contentItem.As<ICommonPart>().Container;
var localized = contentItemTranslation.As<LocalizationPart>();
localized.MasterContentItem = contentItem;
if (!string.IsNullOrWhiteSpace(model.SelectedCulture))
localized.Culture = _cultureManager.GetCultureByName(model.SelectedCulture);
_contentManager.Create(contentItemTranslation, VersionOptions.Draft);
if (!contentItem.Has<IPublishingControlAspect>() && contentItem.VersionRecord != null && contentItem.VersionRecord.Published) {
_contentManager.Publish(contentItemTranslation);
}
conditionallyPublish(contentItemTranslation);
}
model.Content = _contentManager.UpdateEditor(contentItemTranslation, this);