diff --git a/src/Orchard.Tests/DataMigration/SchemaCommandGeneratorTests.cs b/src/Orchard.Tests/DataMigration/SchemaCommandGeneratorTests.cs new file mode 100644 index 000000000..4f37baa5c --- /dev/null +++ b/src/Orchard.Tests/DataMigration/SchemaCommandGeneratorTests.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Data; +using System.IO; +using System.Linq; +using Autofac; +using Autofac.Features.Metadata; +using NHibernate; +using NUnit.Framework; +using Orchard.ContentManagement.Records; +using Orchard.Data; +using Orchard.Data.Conventions; +using Orchard.Data.Migration; +using Orchard.Data.Migration.Generator; +using Orchard.Data.Migration.Interpreters; +using Orchard.Data.Migration.Records; +using Orchard.Data.Migration.Schema; +using Orchard.DevTools.Services; +using Orchard.Environment.Configuration; +using Orchard.Environment.Extensions; +using Orchard.Environment.Extensions.Folders; +using Orchard.Environment.Extensions.Models; +using Orchard.Environment.ShellBuilders.Models; +using Orchard.FileSystems.AppData; +using Orchard.Tests.ContentManagement; +using Orchard.Data.Providers; +using Orchard.Tests.FileSystems.AppData; + +namespace Orchard.Tests.DataMigration { + [TestFixture] + public class SchemaCommandGeneratorTests { + private IContainer _container; + private StubFolders _folders; + private ISchemaCommandGenerator _generator; + + private ISessionFactory _sessionFactory; + private ISession _session; + + [TestFixtureSetUp] + public void CreateDb() { + var types = new[] { + typeof(BlogRecord), + typeof(BodyRecord), + typeof(BlogArchiveRecord), + typeof(ContentItemVersionRecord), + typeof(ContentItemRecord), + typeof(ContentTypeRecord)}; + + var databaseFileName = System.IO.Path.GetTempFileName(); + _sessionFactory = DataUtility.CreateSessionFactory( + databaseFileName, types ); + + var builder = new ContainerBuilder(); + _folders = new StubFolders(); + + var manager = (IDataServicesProviderFactory)new DataServicesProviderFactory(new[] { + new Meta( + (dataFolder, connectionString) => new SqlCeDataServicesProvider(dataFolder, connectionString), + new Dictionary {{"ProviderName", "SqlCe"}}) + }); + + builder.RegisterInstance(new ShellSettings { Name = "Default", DataTablePrefix = "TEST_", DataProvider = "SqlCe"}); + builder.RegisterInstance(AppDataFolderTests.CreateAppDataFolder(Path.GetDirectoryName(databaseFileName))).As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(manager).As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(_folders).As(); + builder.RegisterType().As(); + builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); + _session = _sessionFactory.OpenSession(); + builder.RegisterInstance(new DefaultContentManagerTests.TestSessionLocator(_session)).As(); + + builder.RegisterInstance(new ShellBlueprint() { Records = types.Select(t => new RecordBlueprint { Feature = new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }, TableName = "TEST_" + t.Name, Type = t })}); + + _container = builder.Build(); + _generator = _container.Resolve(); + + _folders.Manifests.Add("Module1", @" +name: Module1 +version: 0.1 +orchardversion: 1 +features: + Feature1: + Description: Feature +"); + } + + public class StubFolders : IExtensionFolders { + public StubFolders() { + Manifests = new Dictionary(); + } + + public IDictionary Manifests { get; set; } + + public IEnumerable AvailableExtensions() { + foreach (var e in Manifests) { + string name = e.Key; + var parseResult = ExtensionFolders.ParseManifest(Manifests[name]); + yield return ExtensionFolders.GetDescriptorForExtension("~/", name, "Module", parseResult); + } + } + } + + + [Test] + public void ShouldCreateCreateTableCommands() { + var commands = _generator.GetCreateFeatureCommands("Feature1", false).ToList(); + Assert.That(commands, Is.Not.Null); + Assert.That(commands.Count(), Is.EqualTo(6)); + + var blogRecord = commands.Where(c => c.Name == "TEST_BlogRecord").First(); + + Assert.That(blogRecord.TableCommands.OfType().Any(c => c.ColumnName == "Id" && !c.IsIdentity && c.IsPrimaryKey && c.DbType == DbType.Int32)); + Assert.That(blogRecord.TableCommands.OfType().Any(c => c.ColumnName == "Description" && c.DbType == DbType.String)); + Assert.That(blogRecord.TableCommands.OfType().Any(c => c.ColumnName == "PostCount" && c.DbType == DbType.Int32)); + + var blogArchiveRecord = commands.Where(c => c.Name == "TEST_BlogArchiveRecord").First(); + Assert.That(blogArchiveRecord.TableCommands.OfType().Any(c => c.ColumnName == "Id" && c.IsPrimaryKey && c.DbType == DbType.Int32)); + Assert.That(blogArchiveRecord.TableCommands.OfType().Any(c => c.ColumnName == "Year" && c.DbType == DbType.Int32)); + Assert.That(blogArchiveRecord.TableCommands.OfType().Any(c => c.ColumnName == "Month" && c.DbType == DbType.Int32)); + Assert.That(blogArchiveRecord.TableCommands.OfType().Any(c => c.ColumnName == "PostCount" && c.DbType == DbType.Int32)); + Assert.That(blogArchiveRecord.TableCommands.OfType().Any(c => c.ColumnName == "Blog_id" && c.DbType == DbType.Int32)); + + var bodyRecord = commands.Where(c => c.Name == "TEST_BodyRecord").First(); + Assert.That(bodyRecord.TableCommands.OfType().Any(c => c.ColumnName == "Id" && c.IsPrimaryKey && c.DbType == DbType.Int32)); + Assert.That(bodyRecord.TableCommands.OfType().Any(c => c.ColumnName == "Text" && c.DbType == DbType.String && c.Length == 10000)); + Assert.That(bodyRecord.TableCommands.OfType().Any(c => c.ColumnName == "Format" && c.DbType == DbType.String && c.Length == 42)); + Assert.That(bodyRecord.TableCommands.OfType().Any(c => c.ColumnName == "ContentItemRecord_id" && c.DbType == DbType.Int32)); + } + + [Test] + public void ScaffoldingCommandInterpreterShouldDetectContentParts() { + + var commands = _generator.GetCreateFeatureCommands("Feature1", false).ToList(); + Assert.That(commands, Is.Not.Null); + Assert.That(commands.Count(), Is.EqualTo(6)); + + var sw = new StringWriter(); + var interpreter = new ScaffoldingCommandInterpreter(sw); + + var blogRecord = commands.Where(c => c.Name == "TEST_BlogRecord").First(); + var blogArchiveRecord = commands.Where(c => c.Name == "TEST_BlogArchiveRecord").First(); + var bodyRecord = commands.Where(c => c.Name == "TEST_BodyRecord").First(); + + sw.GetStringBuilder().Clear(); + interpreter.Visit(blogRecord); + Assert.That(sw.ToString().Contains("SchemaBuilder.CreateTable(\"TEST_BlogRecord")); + Assert.That(sw.ToString().Contains(".ContentPartRecord()")); + Assert.That(sw.ToString().Contains(".Column(\"Description\", DbType.String)")); + Assert.That(sw.ToString().Contains(".Column(\"PostCount\", DbType.Int32)")); + + sw.GetStringBuilder().Clear(); + interpreter.Visit(blogArchiveRecord); + Assert.That(sw.ToString().Contains("SchemaBuilder.CreateTable(\"TEST_BlogArchiveRecord")); + Assert.That(sw.ToString().Contains(".Column(\"Id\", DbType.Int32, column => column.PrimaryKey().Identity())")); + Assert.That(sw.ToString().Contains(".Column(\"Year\", DbType.Int32)")); + Assert.That(sw.ToString().Contains(".Column(\"Month\", DbType.Int32)")); + Assert.That(sw.ToString().Contains(".Column(\"PostCount\", DbType.Int32)")); + Assert.That(sw.ToString().Contains(".Column(\"Blog_id\", DbType.Int32)")); + + sw.GetStringBuilder().Clear(); + interpreter.Visit(bodyRecord); + Assert.That(sw.ToString().Contains("SchemaBuilder.CreateTable(\"TEST_BodyRecord")); + Assert.That(sw.ToString().Contains(".ContentPartVersionRecord()")); + Assert.That(sw.ToString().Contains(".Column(\"Text\", DbType.String, column => column.WithLength(10000))")); + Assert.That(sw.ToString().Contains(".Column(\"Format\", DbType.String, column => column.WithLength(42))")); + Assert.That(!sw.ToString().Contains("ContentItemRecord_id")); + } + } + + + public class BlogRecord : ContentPartRecord { + public virtual string Description { get; set; } + public virtual int PostCount { get; set; } + } + + public class BodyRecord : ContentPartVersionRecord { + [StringLengthMax] + public virtual string Text { get; set; } + [StringLength(42)] + public virtual string Format { get; set; } + } + + public class BlogArchiveRecord { + public virtual int Id { get; set; } + public virtual BlogRecord Blog { get; set; } + public virtual int Year { get; set; } + public virtual int Month { get; set; } + public virtual int PostCount { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Tests/Orchard.Framework.Tests.csproj b/src/Orchard.Tests/Orchard.Framework.Tests.csproj index 00bf8d5aa..1c5af0eee 100644 --- a/src/Orchard.Tests/Orchard.Framework.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Framework.Tests.csproj @@ -181,6 +181,7 @@ Code + @@ -254,6 +255,10 @@ + + {67C1D3AF-A0EC-46B2-BAE1-DF1DA8E0B890} + Orchard.DevTools + {79AED36E-ABD0-4747-93D3-8722B042454B} Orchard.Users diff --git a/src/Orchard.Web/Core/Common/Extensions/HtmlHelperExtensions.cs b/src/Orchard.Web/Core/Common/Extensions/HtmlHelperExtensions.cs new file mode 100644 index 000000000..c1a7f52e6 --- /dev/null +++ b/src/Orchard.Web/Core/Common/Extensions/HtmlHelperExtensions.cs @@ -0,0 +1,24 @@ +using System.Web.Mvc; +using Orchard.Core.Common.ViewModels; +using Orchard.Localization; +using Orchard.Mvc.Html; + +namespace Orchard.Core.Common.Extensions { + public static class HtmlHelperExtensions { + public static LocalizedString PublishedStateForModel(this HtmlHelper htmlHelper, Localizer T) { + return htmlHelper.PublishedState(htmlHelper.ViewData.Model, T); + } + + public static LocalizedString PublishedState(this HtmlHelper htmlHelper, CommonMetadataViewModel metadata, Localizer T) { + return htmlHelper.DateTime(metadata.VersionPublishedUtc, T("Draft")); + } + + public static LocalizedString PublishedWhenForModel(this HtmlHelper htmlHelper, Localizer T) { + return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model, T); + } + + public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, CommonMetadataViewModel metadata, Localizer T) { + return htmlHelper.DateTimeRelative(metadata.VersionPublishedUtc, T("as a Draft"), T); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.ascx index fa88ac16c..97e5aecba 100644 --- a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.ascx +++ b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.ascx @@ -1,4 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %><% +if (Model.Creator != null) { %> \ No newline at end of file +
<%: T("Published by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T))%>
+<% +} %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Contents/Handlers/ContentsHandler.cs b/src/Orchard.Web/Core/Contents/Handlers/ContentsHandler.cs index 00cc4d1e6..d4e05b9ce 100644 --- a/src/Orchard.Web/Core/Contents/Handlers/ContentsHandler.cs +++ b/src/Orchard.Web/Core/Contents/Handlers/ContentsHandler.cs @@ -27,6 +27,13 @@ namespace Orchard.Core.Contents.Handlers { {"Id", context.ContentItem.Id} }; } + if (context.Metadata.RemoveRouteValues == null) { + context.Metadata.RemoveRouteValues = new RouteValueDictionary { + {"Area", "Contents"}, + {"Controller", "Item"}, + {"Action", "Remove"} + }; + } } } -} +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Contents/Views/Admin/List.ascx b/src/Orchard.Web/Core/Contents/Views/Admin/List.ascx index 4f22863b3..9f0d68b17 100644 --- a/src/Orchard.Web/Core/Contents/Views/Admin/List.ascx +++ b/src/Orchard.Web/Core/Contents/Views/Admin/List.ascx @@ -1,5 +1,5 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -

<%:Html.TitleForPage(T("Manage {0} Content", !string.IsNullOrEmpty(Model.TypeDisplayName) ? Model.TypeDisplayName : T("").Text).ToString())%>

+

<%:Html.TitleForPage((string.IsNullOrEmpty(Model.TypeDisplayName) ? T("Manage Content") : T("Manage {0} Content", Model.TypeDisplayName)).ToString())%>

<%:Html.ActionLink(!string.IsNullOrEmpty(Model.TypeDisplayName) ? T("Add new {0} content", Model.TypeDisplayName).Text : T("Add new content").Text, "Create", new { }, new { @class = "button primaryAction" })%>
diff --git a/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx b/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx index 8135c6f6f..fe17c0813 100644 --- a/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx +++ b/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx @@ -12,7 +12,8 @@ <%:Html.Hidden("id", Model.Item.Id, new { id = "" })%> <% } %> +
<% Html.Zone("meta"); %>
- <% Html.Zone("primary"); %> + <% Html.ZonesAny(); %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.ascx b/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.ascx index 072cecebe..73dd3bf30 100644 --- a/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.ascx +++ b/src/Orchard.Web/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.ascx @@ -1,11 +1,6 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Mvc.ViewModels" %> -<%@ Import Namespace="Orchard.ContentManagement.Aspects" %> -<%@ Import Namespace="Orchard.ContentManagement" %> -<%var routable = Model.Item.As(); - if (routable != null && !string.IsNullOrEmpty(routable.Title)) {%> -

- <%:routable.Title%>

-<%} %> -<% Html.Zone("primary", ":manage :metadata"); +

<%:Html.ItemDisplayText(Model.Item)%>

+<% Html.Zone("metadata"); + Html.Zone("primary", ":manage :metadata"); Html.ZonesAny(); %> diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 7ec66f19b..0835aaf2c 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -65,6 +65,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs index d35aa02c0..922f4584a 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs @@ -111,7 +111,7 @@ namespace Orchard.Blogs.Controllers { } [HttpPost] - public ActionResult Delete(string blogSlug) { + public ActionResult Remove(string blogSlug) { if (!Services.Authorizer.Authorize(Permissions.ManageBlogs, T("Couldn't delete blog"))) return new HttpUnauthorizedResult(); diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostDriver.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostDriver.cs index b2f8a5284..258217d7d 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostDriver.cs @@ -77,12 +77,6 @@ namespace Orchard.Blogs.Drivers { }; } - protected override DriverResult Display(BlogPost post, string displayType) { - return Combined( - ContentItemTemplate("Items/Blogs.BlogPost").LongestMatch(displayType, "Summary", "SummaryAdmin"), - ContentPartTemplate(post, "Parts/Blogs.BlogPost.Metadata").LongestMatch(displayType, "Summary", "SummaryAdmin").Location("meta", "1")); - } - protected override DriverResult Editor(BlogPost post) { return ContentItemTemplate("Items/Blogs.BlogPost"); } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs deleted file mode 100644 index 7560d079f..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Web.Mvc; -using Orchard.Blogs.Models; -using Orchard.ContentManagement; -using Orchard.ContentManagement.Aspects; -using Orchard.Localization; -using Orchard.Mvc.Html; - -namespace Orchard.Blogs.Extensions { - public static class HtmlHelperExtensions { - public static LocalizedString PublishedState(this HtmlHelper htmlHelper, Localizer T) { - return htmlHelper.PublishedState(htmlHelper.ViewData.Model, T); - } - - public static LocalizedString PublishedState(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) { - return htmlHelper.DateTime(blogPost.As().VersionPublishedUtc, T("Draft")); - } - - public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, Localizer T) { - return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model, T); - } - - public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) { - return htmlHelper.DateTimeRelative(blogPost.As().VersionPublishedUtc, T("as a Draft"), T); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs index aba843b4f..967d6f2f5 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs @@ -46,7 +46,9 @@ namespace Orchard.Blogs.Handlers { return; } - var containerId = requestContext.HttpContext.Request.Form["containerId"]; + //todo: don't get at the container form data directly. right now the container is set in the common driver editor (updater) + //todo: which is too late for what's needed (currently) in this handler + var containerId = requestContext.HttpContext.Request.Form["CommonAspect.containerId"]; if (!string.IsNullOrEmpty(containerId)) { int cId; if (int.TryParse(containerId, out cId)) { diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index 20d23e89c..53571cbfc 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -74,7 +74,6 @@ - @@ -136,16 +135,12 @@ - - - - diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs index ba3298310..8f6a00370 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs @@ -51,11 +51,11 @@ namespace Orchard.Blogs { }, new RouteDescriptor { Route = new Route( - "Admin/Blogs/{blogSlug}/Delete", + "Admin/Blogs/{blogSlug}/Remove", new RouteValueDictionary { {"area", "Orchard.Blogs"}, {"controller", "BlogAdmin"}, - {"action", "Delete"} + {"action", "Remove"} }, new RouteValueDictionary { {"blogSlug", _blogSlugConstraint} diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 7b2b4fd46..633becc04 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -2,6 +2,10 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %> +<%@ Import Namespace="Orchard.Core.Common.Models" %> +<%@ Import Namespace="Orchard.ContentManagement" %> +<%@ Import Namespace="Orchard.Core.Common.ViewModels" %>

<%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %>

-
<%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
+
<%: Html.PublishedState(new CommonMetadataViewModel(Model.Item.As()), T) %> | <%Html.Zone("meta");%>
<% Html.Zone("primary", ":manage :metadata");%>
diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx deleted file mode 100644 index 8646de578..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx +++ /dev/null @@ -1,58 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.ContentManagement.Aspects"%> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Mvc.ViewModels"%> -<%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%> -
-
-

<%: Html.Link(Model.Item.Title, Url.BlogPostEdit(Model.Item))%>

-
    -
  • <% - if (Model.Item.HasPublished) { %> - " alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /> <%: T("Published")%><% - } - else { %> - " alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /> <%: T("Not Published")%><% - } %> |  -
  • -
  • <% - if (Model.Item.HasDraft) { %> - " alt="<%: T("Draft") %>" title="<%: T("The post has a draft") %>" /><%: Html.PublishedState(Model.Item, T) %><% - } - else { %> - <%: T("No draft")%><% - } %> |  -
  • -
  • <% - if (Model.Item.ScheduledPublishUtc.HasValue && Model.Item.ScheduledPublishUtc.Value > DateTime.UtcNow) { %> - " alt="<%: T("Scheduled") %>" title="<%: T("The post is scheduled for publishing") %>" /><%: T("Scheduled")%> - <%: Html.DateTime(Model.Item.ScheduledPublishUtc.Value, T("M/d/yyyy h:mm tt"))%><% - } - else if (Model.Item.IsPublished) { %> - <%: T("Published: {0}", Html.DateTimeRelative(Model.Item.As().VersionPublishedUtc.Value, T)) %><% - } - else { %> - <%: T("Last modified: {0}", Html.DateTimeRelative(Model.Item.As().ModifiedUtc.Value, T)) %><% - } %> |  -
  • -
  • <%: T("By {0}", Model.Item.Creator.UserName)%>
  • -
-
- -
-
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx deleted file mode 100644 index 402274d10..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx +++ /dev/null @@ -1,6 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%><% -if (Model.Creator != null) { - %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %> | <% -} %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.SummaryAdmin.ascx deleted file mode 100644 index 8d8566ea2..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.SummaryAdmin.ascx +++ /dev/null @@ -1,2 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.Blogs.Models"%> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx deleted file mode 100644 index a54802281..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ /dev/null @@ -1,8 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%> - \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.DevTools/Services/ScaffoldingCommandInterpreter.cs b/src/Orchard.Web/Modules/Orchard.DevTools/Services/ScaffoldingCommandInterpreter.cs index 03603f0c3..361ecf249 100644 --- a/src/Orchard.Web/Modules/Orchard.DevTools/Services/ScaffoldingCommandInterpreter.cs +++ b/src/Orchard.Web/Modules/Orchard.DevTools/Services/ScaffoldingCommandInterpreter.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Data; using System.IO; using System.Linq; using Orchard.Data.Migration.Interpreters; @@ -16,7 +17,35 @@ namespace Orchard.DevTools.Services { _output.WriteLine("\t\t\t// Creating table {0}", command.Name); _output.WriteLine("\t\t\tSchemaBuilder.CreateTable(\"{0}\", table => table", command.Name); + + var matchContentPartRecord = command.TableCommands.OfType().Any( + c => + c.IsPrimaryKey + && c.ColumnName == "Id" + && !c.IsIdentity + && c.DbType == DbType.Int32); + + var matchContentPartVersionRecord = matchContentPartRecord && command.TableCommands.OfType().Any( + c => + c.ColumnName == "ContentItemRecord_id" + && c.DbType == DbType.Int32); + + if ( matchContentPartVersionRecord ) { + _output.WriteLine("\t\t\t\t.ContentPartVersionRecord()"); + } + else if ( matchContentPartRecord ) { + _output.WriteLine("\t\t\t\t.ContentPartRecord()"); + } + foreach ( var createColumn in command.TableCommands.OfType() ) { + if(createColumn.ColumnName == "Id" && matchContentPartRecord) { + continue; + } + + if(createColumn.ColumnName == "ContentItemRecord_id" && matchContentPartVersionRecord) { + continue; + } + var type = createColumn.DbType.ToString(); var field = createColumn.ColumnName; var options = new List(); @@ -25,6 +54,10 @@ namespace Orchard.DevTools.Services { options.Add("PrimaryKey()"); } + if ( createColumn.IsIdentity ) { + options.Add("Identity()"); + } + if ( createColumn.IsUnique ) { options.Add("Unique()"); } diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj index 9e3facaa7..b402e1e64 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj @@ -82,6 +82,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 3e21961c1..439212369 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -24,7 +24,6 @@ using Orchard.Reports.Services; using Orchard.Security; using Orchard.Settings; using Orchard.Themes; -using Orchard.UI.Notify; using Orchard.Environment.State; using Orchard.Data.Migration; @@ -39,7 +38,6 @@ namespace Orchard.Setup.Services { public SetupService( ShellSettings shellSettings, - INotifier notifier, IOrchardHost orchardHost, IShellSettingsManager shellSettingsManager, IShellContainerFactory shellContainerFactory, diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index dc79bf381..a832b5cfa 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -2,6 +2,7 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %> <%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>

<%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %>

<%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index e91472533..318e59b08 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,6 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%><% +<%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %><% if (Model.Creator != null) { %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index dc79bf381..a832b5cfa 100644 --- a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -2,6 +2,7 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %> <%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>

<%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %>

<%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
diff --git a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index e91472533..318e59b08 100644 --- a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,6 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%><% +<%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %><% if (Model.Creator != null) { %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 8639c255b..eb633a89c 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -2,6 +2,7 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %>

<%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %>

<%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index e91472533..318e59b08 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,6 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%><% +<%@ Import Namespace="Orchard.Blogs.Models"%> +<%@ Import Namespace="Orchard.Core.Common.Extensions" %><% if (Model.Creator != null) { %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% } %> \ No newline at end of file diff --git a/src/Orchard/ContentManagement/ContentItemMetadata.cs b/src/Orchard/ContentManagement/ContentItemMetadata.cs index a3ce46e26..f4c6dbf78 100644 --- a/src/Orchard/ContentManagement/ContentItemMetadata.cs +++ b/src/Orchard/ContentManagement/ContentItemMetadata.cs @@ -13,6 +13,7 @@ namespace Orchard.ContentManagement { public RouteValueDictionary DisplayRouteValues { get; set; } public RouteValueDictionary EditorRouteValues { get; set; } public RouteValueDictionary CreateRouteValues { get; set; } + public RouteValueDictionary RemoveRouteValues { get; set; } public IEnumerable DisplayGroups { get; set; } public IEnumerable EditorGroups { get; set; } @@ -43,5 +44,13 @@ namespace Orchard.ContentManagement { {"id", item.ContentItem.ContentType} }; } + + private static RouteValueDictionary GetRemoveRouteValues(IContent item) { + return new RouteValueDictionary { + {"Area", "Contents"}, + {"Controller", "Admin"}, + {"Action", "Remove"} + }; + } } } \ No newline at end of file diff --git a/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs b/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs index 82c22d043..b99a5e8cf 100644 --- a/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs +++ b/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs @@ -1,22 +1,21 @@ using System.Collections.Generic; +using System.Data; using System.Linq; using System.Reflection; using NHibernate.Cfg; using NHibernate.Mapping; using NHibernate.Tool.hbm2ddl; +using Orchard.ContentManagement.Records; using Orchard.Data.Migration.Schema; using Orchard.Data.Providers; using NHibernate.Dialect; namespace Orchard.Data.Migration.Generator { public class SchemaCommandGenerator : ISchemaCommandGenerator { - private readonly IDataServicesProviderFactory _dataServicesProviderFactory; private readonly ISessionFactoryHolder _sessionFactoryHolder; public SchemaCommandGenerator( - IDataServicesProviderFactory dataServicesProviderFactory, ISessionFactoryHolder sessionFactoryHolder) { - _dataServicesProviderFactory = dataServicesProviderFactory; _sessionFactoryHolder = sessionFactoryHolder; } @@ -30,7 +29,7 @@ namespace Orchard.Data.Migration.Generator { yield break; } - var configuration = _dataServicesProviderFactory.CreateProvider(parameters).BuildConfiguration(parameters); + var configuration = _sessionFactoryHolder.GetConfiguration(); Dialect.GetDialect(configuration.Properties); var mapping = configuration.BuildMapping(); @@ -42,7 +41,10 @@ namespace Orchard.Data.Migration.Generator { foreach(var table in tables.Where(t => parameters.RecordDescriptors.Any(rd => rd.Feature.Descriptor.Name == feature && rd.TableName == t.Name))) { string tableName = table.Name; - if(tableName.StartsWith(prefix)) { + var recordType = parameters.RecordDescriptors.Where(rd => rd.Feature.Descriptor.Name == feature && rd.TableName == tableName).First().Type; + var isContentPart = typeof(ContentPartRecord).IsAssignableFrom(recordType); + + if ( tableName.StartsWith(prefix) ) { tableName = tableName.Substring(prefix.Length); } @@ -59,10 +61,17 @@ namespace Orchard.Data.Migration.Generator { command.Column(column.Name, sqlType.DbType, action => { if (table1.PrimaryKey.Columns.Any(c => c.Name == column1.Name)) { - action.PrimaryKey().Identity(); + action.PrimaryKey(); + + if ( !isContentPart ) { + action.Identity(); + } } - if (column1.IsLengthDefined()) { + + if ( column1.IsLengthDefined() + && new DbType[] { DbType.StringFixedLength, DbType.String, DbType.AnsiString, DbType.AnsiStringFixedLength }.Contains(sqlType.DbType) + && column1.Length != 255 ) { action.WithLength(column1.Length); } @@ -92,8 +101,7 @@ namespace Orchard.Data.Migration.Generator { /// Automatically updates a db to a functionning schema /// public void UpdateDatabase() { - var parameters = _sessionFactoryHolder.GetSessionFactoryParameters(); - var configuration = _dataServicesProviderFactory.CreateProvider(parameters).BuildConfiguration(parameters); + var configuration = _sessionFactoryHolder.GetConfiguration(); new SchemaUpdate(configuration).Execute(false, true); } @@ -101,8 +109,7 @@ namespace Orchard.Data.Migration.Generator { /// Automatically creates a db with a functionning schema /// public void CreateDatabase() { - var parameters = _sessionFactoryHolder.GetSessionFactoryParameters(); - var configuration = _dataServicesProviderFactory.CreateProvider(parameters).BuildConfiguration(parameters); + var configuration = _sessionFactoryHolder.GetConfiguration(); new SchemaExport(configuration).Execute(false, true, false); }