--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-06-30 12:39:27 -07:00
98 changed files with 1177 additions and 752 deletions

View File

@@ -12,6 +12,6 @@ glob:src/Orchard.Web/Media/*
glob:desktop.ini
glob:log.xml
glob:profiling
glob:src/*.suo
glob:src/*.ReSharper
glob:*.orig
glob:*.suo

View File

@@ -1,3 +1,10 @@
<?xml version="1.0"?>
<ServiceConfiguration serviceName="OrchardCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="Orchard.Azure.Web">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="DataConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>

View File

@@ -1,3 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="OrchardCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="Orchard.Azure.Web">
<InputEndpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</InputEndpoints>
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
<Setting name="DataConnectionString" />
</ConfigurationSettings>
</WebRole>
</ServiceDefinition>

View File

@@ -92,350 +92,7 @@
<Compile Include="WebRole.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Core\Common\Module.txt" />
<Content Include="Core\Common\Scripts\jquery.slugify.js" />
<Content Include="Core\Common\Views\DisplayTemplates\Parts\Common.Body.ascx" />
<Content Include="Core\Common\Views\DisplayTemplates\Parts\Common.Body.Manage.ascx" />
<Content Include="Core\Common\Views\DisplayTemplates\Parts\Common.Body.ManageWrapperPost.ascx" />
<Content Include="Core\Common\Views\DisplayTemplates\Parts\Common.Body.ManageWrapperPre.ascx" />
<Content Include="Core\Common\Views\DisplayTemplates\Parts\Common.Body.Summary.ascx" />
<Content Include="Core\Common\Views\EditorTemplates\Parts\Common.Body.ascx" />
<Content Include="Core\Common\Views\EditorTemplates\Parts\Common.Container.ascx" />
<Content Include="Core\Common\Views\EditorTemplates\Parts\Common.Owner.ascx" />
<Content Include="Core\Common\Views\EditorTemplates\Parts\Common.Routable.ascx" />
<Content Include="Core\Contents\Module.txt" />
<Content Include="Core\Contents\Views\Admin\CreatableTypeList.aspx" />
<Content Include="Core\Contents\Views\Admin\Create.aspx" />
<Content Include="Core\Contents\Views\Admin\Edit.aspx" />
<Content Include="Core\Contents\Views\Admin\List.aspx" />
<Content Include="Core\Contents\Views\Admin\Types.aspx" />
<Content Include="Core\Contents\Views\DisplayTemplates\Items\Contents.Item.ascx" />
<Content Include="Core\Contents\Views\EditorTemplates\Items\Contents.Item.ascx" />
<Content Include="Core\Contents\Views\Item\Display.aspx" />
<Content Include="Core\Contents\Views\Item\Preview.aspx" />
<Content Include="Core\Dashboard\Module.txt" />
<Content Include="Core\Dashboard\Views\Admin\Index.ascx" />
<Content Include="Core\Feeds\Module.txt" />
<Content Include="Core\HomePage\Module.txt" />
<Content Include="Core\Indexing\Module.txt" />
<Content Include="Core\Localization\Module.txt" />
<Content Include="Core\Navigation\Module.txt" />
<Content Include="Core\Navigation\Views\Admin\Index.ascx" />
<Content Include="Core\Navigation\Views\EditorTemplates\Parts\Navigation.EditMenuPart.ascx" />
<Content Include="Core\Routable\Module.txt" />
<Content Include="Core\Routable\Scripts\jquery.slugify.js" />
<Content Include="Core\Routable\Views\EditorTemplates\Parts\Routable.IsRoutable.ascx" />
<Content Include="Core\Routable\Views\Item\Display.aspx" />
<Content Include="Core\Scheduling\Module.txt" />
<Content Include="Core\Settings\Module.txt" />
<Content Include="Core\Settings\Styles\admin.css" />
<Content Include="Core\Settings\Views\Admin\Culture.ascx" />
<Content Include="Core\Settings\Views\Admin\Index.ascx" />
<Content Include="Core\Settings\Views\DisplayTemplates\CurrentCulture.ascx" />
<Content Include="Core\Settings\Views\DisplayTemplates\RemovableCulture.ascx" />
<Content Include="Core\Settings\Views\EditorTemplates\Items\Settings.Site.ascx" />
<Content Include="Core\XmlRpc\Module.txt" />
<Content Include="Core\XmlRpc\Views\Home\Index.aspx" />
<Content Include="Global.asax" />
<Content Include="Modules\Futures.Widgets\Module.txt" />
<Content Include="Modules\Futures.Widgets\Views\Admin\Edit.ascx" />
<Content Include="Modules\Orchard.Blogs\Content\Admin\images\draft.gif" />
<Content Include="Modules\Orchard.Blogs\Content\Admin\images\offline.gif" />
<Content Include="Modules\Orchard.Blogs\Content\Admin\images\online.gif" />
<Content Include="Modules\Orchard.Blogs\Content\Admin\images\published.gif" />
<Content Include="Modules\Orchard.Blogs\Content\Admin\images\scheduled.gif" />
<Content Include="Modules\Orchard.Blogs\Module.txt" />
<Content Include="Modules\Orchard.Blogs\Scripts\archives.js" />
<Content Include="Modules\Orchard.Blogs\Scripts\jquery.ui.core.js" />
<Content Include="Modules\Orchard.Blogs\Scripts\jquery.ui.datepicker.js" />
<Content Include="Modules\Orchard.Blogs\Scripts\jquery.ui.widget.js" />
<Content Include="Modules\Orchard.Blogs\Scripts\jquery.utils.js" />
<Content Include="Modules\Orchard.Blogs\Scripts\ui.timepickr.js" />
<Content Include="Modules\Orchard.Blogs\Styles\admin.css" />
<Content Include="Modules\Orchard.Blogs\Styles\archives.css" />
<Content Include="Modules\Orchard.Blogs\Styles\datetime.css" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_flat_0_aaaaaa_40x100.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_flat_75_ffffff_40x100.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_glass_55_fbf9ee_1x400.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_glass_65_ffffff_1x400.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_glass_75_dadada_1x400.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_glass_75_e6e6e6_1x400.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_glass_95_fef1ec_1x400.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-bg_highlight-soft_75_cccccc_1x100.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-icons_222222_256x240.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-icons_2e83ff_256x240.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-icons_454545_256x240.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-icons_888888_256x240.png" />
<Content Include="Modules\Orchard.Blogs\Styles\images\ui-icons_cd0a0a_256x240.png" />
<Content Include="Modules\Orchard.Blogs\Styles\jquery-ui-1.7.2.custom.css" />
<Content Include="Modules\Orchard.Blogs\Styles\ui.datepicker.css" />
<Content Include="Modules\Orchard.Blogs\Styles\ui.timepickr.css" />
<Content Include="Modules\Orchard.Blogs\Views\Archives.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogAdmin\Create.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogAdmin\Edit.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogAdmin\Item.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogAdmin\List.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogPostAdmin\Create.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogPostAdmin\Edit.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogPost\Item.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\BlogPost\ListByArchive.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\Blog\Item.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\Blog\List.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.Blog.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.Blog.DetailAdmin.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.Blog.Summary.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.Blog.SummaryAdmin.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.BlogPost.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.BlogPost.Summary.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Items\Blogs.BlogPost.SummaryAdmin.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.Blog.Description.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.Blog.Manage.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.Blog.Metadata.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.BlogPost.List.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.Summary.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.SummaryAdmin.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\EditorTemplates\Items\Blogs.Blog.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\EditorTemplates\Items\Blogs.BlogPost.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\EditorTemplates\Parts\Blogs.Blog.Fields.ascx" />
<Content Include="Modules\Orchard.Blogs\Views\EditorTemplates\Parts\Blogs.BlogPost.Publish.ascx" />
<Content Include="Modules\Orchard.Comments\Module.txt" />
<Content Include="Modules\Orchard.Comments\Views\Admin\Details.aspx" />
<Content Include="Modules\Orchard.Comments\Views\Admin\Edit.aspx" />
<Content Include="Modules\Orchard.Comments\Views\Admin\Index.aspx" />
<Content Include="Modules\Orchard.Comments\Views\DisplayTemplates\Parts\Comments.Count.ascx" />
<Content Include="Modules\Orchard.Comments\Views\DisplayTemplates\Parts\Comments.CountAdmin.ascx" />
<Content Include="Modules\Orchard.Comments\Views\DisplayTemplates\Parts\Comments.HasComments.ascx" />
<Content Include="Modules\Orchard.Comments\Views\EditorTemplates\Parts\Comments.HasComments.ascx" />
<Content Include="Modules\Orchard.Comments\Views\EditorTemplates\Parts\Comments.SiteSettings.ascx" />
<Content Include="Modules\Orchard.Comments\Views\ListOfComments.ascx" />
<Content Include="Modules\Orchard.DevTools\Module.txt" />
<Content Include="Modules\Orchard.DevTools\Views\Content\Details.aspx" />
<Content Include="Modules\Orchard.DevTools\Views\Content\Index.aspx" />
<Content Include="Modules\Orchard.DevTools\Views\DisplayTemplates\Parts\DevTools.ShowDebugLink.ascx" />
<Content Include="Modules\Orchard.DevTools\Views\EditorTemplates\Parts\DevTools.ShowDebugLink.ascx" />
<Content Include="Modules\Orchard.DevTools\Views\Home\Index.aspx" />
<Content Include="Modules\Orchard.DevTools\Views\Home\Simple.aspx" />
<Content Include="Modules\Orchard.DevTools\Views\Home\_RenderableAction.ascx" />
<Content Include="Modules\Orchard.DevTools\Views\Metadata\Index.aspx" />
<Content Include="Modules\Orchard.Media\Content\Admin\images\folder.gif" />
<Content Include="Modules\Orchard.Media\Content\Site.css" />
<Content Include="Modules\Orchard.Media\Module.txt" />
<Content Include="Modules\Orchard.Media\Styles\admin.css" />
<Content Include="Modules\Orchard.Media\Views\Admin\Add.aspx" />
<Content Include="Modules\Orchard.Media\Views\Admin\Create.aspx" />
<Content Include="Modules\Orchard.Media\Views\Admin\Edit.aspx" />
<Content Include="Modules\Orchard.Media\Views\Admin\EditMedia.aspx" />
<Content Include="Modules\Orchard.Media\Views\Admin\EditProperties.aspx" />
<Content Include="Modules\Orchard.Media\Views\Admin\Index.aspx" />
<Content Include="Modules\Orchard.Media\Views\EditorTemplates\Parts\Media.SiteSettings.ascx" />
<Content Include="Modules\Orchard.MetaData\Module.txt" />
<Content Include="Modules\Orchard.MetaData\Styles\ContentTypes.css" />
<Content Include="Modules\Orchard.MetaData\Views\Admin\ContentTypeList.ascx" />
<Content Include="Modules\Orchard.Modules\Content\Admin\images\disabled.gif" />
<Content Include="Modules\Orchard.Modules\Content\Admin\images\enabled.gif" />
<Content Include="Modules\Orchard.Modules\Module.txt" />
<Content Include="Modules\Orchard.Modules\scripts\jquery.switchable.js" />
<Content Include="Modules\Orchard.Modules\styles\admin.css" />
<Content Include="Modules\Orchard.Modules\styles\images\detail-view-on.gif" />
<Content Include="Modules\Orchard.Modules\styles\images\detail-view.gif" />
<Content Include="Modules\Orchard.Modules\styles\images\summary-view-on.gif" />
<Content Include="Modules\Orchard.Modules\styles\images\summary-view.gif" />
<Content Include="Modules\Orchard.Modules\styles\jquery.switchable.css" />
<Content Include="Modules\Orchard.Modules\Views\Admin\Add.ascx" />
<Content Include="Modules\Orchard.Modules\Views\Admin\Features.ascx" />
<Content Include="Modules\Orchard.Modules\Views\Admin\Index.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Content\Admin\images\disabled.gif" />
<Content Include="Modules\Orchard.MultiTenancy\Content\Admin\images\enabled.gif" />
<Content Include="Modules\Orchard.MultiTenancy\Module.txt" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\Add.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\DisplayTemplates\ActionsForDisabled.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\DisplayTemplates\ActionsForInvalid.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\DisplayTemplates\ActionsForRunning.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\DisplayTemplates\ActionsForUninitialized.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\Edit.ascx" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Admin\Index.ascx" />
<Content Include="Modules\Orchard.Pages\Content\Admin\images\draft.gif" />
<Content Include="Modules\Orchard.Pages\Content\Admin\images\offline.gif" />
<Content Include="Modules\Orchard.Pages\Content\Admin\images\online.gif" />
<Content Include="Modules\Orchard.Pages\Content\Admin\images\published.gif" />
<Content Include="Modules\Orchard.Pages\Content\Admin\images\scheduled.gif" />
<Content Include="Modules\Orchard.Pages\Content\Site.css" />
<Content Include="Modules\Orchard.Pages\Module.txt" />
<Content Include="Modules\Orchard.Pages\Scripts\jquery.ui.core.js" />
<Content Include="Modules\Orchard.Pages\Scripts\jquery.ui.datepicker.js" />
<Content Include="Modules\Orchard.Pages\Scripts\jquery.ui.widget.js" />
<Content Include="Modules\Orchard.Pages\Scripts\jquery.utils.js" />
<Content Include="Modules\Orchard.Pages\Scripts\ui.timepickr.js" />
<Content Include="Modules\Orchard.Pages\Styles\admin.css" />
<Content Include="Modules\Orchard.Pages\Styles\datetime.css" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_flat_0_aaaaaa_40x100.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_flat_75_ffffff_40x100.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_glass_55_fbf9ee_1x400.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_glass_65_ffffff_1x400.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_glass_75_dadada_1x400.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_glass_75_e6e6e6_1x400.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_glass_95_fef1ec_1x400.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-bg_highlight-soft_75_cccccc_1x100.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-icons_222222_256x240.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-icons_2e83ff_256x240.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-icons_454545_256x240.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-icons_888888_256x240.png" />
<Content Include="Modules\Orchard.Pages\Styles\images\ui-icons_cd0a0a_256x240.png" />
<Content Include="Modules\Orchard.Pages\Styles\jquery-ui-1.7.2.custom.css" />
<Content Include="Modules\Orchard.Pages\Styles\ui.datepicker.css" />
<Content Include="Modules\Orchard.Pages\Styles\ui.timepickr.css" />
<Content Include="Modules\Orchard.Pages\Views\Admin\Create.ascx" />
<Content Include="Modules\Orchard.Pages\Views\Admin\Edit.ascx" />
<Content Include="Modules\Orchard.Pages\Views\Admin\List.aspx" />
<Content Include="Modules\Orchard.Pages\Views\DisplayTemplates\Items\Pages.Page.ascx" />
<Content Include="Modules\Orchard.Pages\Views\DisplayTemplates\Items\Pages.Page.Summary.ascx" />
<Content Include="Modules\Orchard.Pages\Views\DisplayTemplates\Parts\Pages.Page.Metadata.ascx" />
<Content Include="Modules\Orchard.Pages\Views\EditorTemplates\Items\Pages.Page.ascx" />
<Content Include="Modules\Orchard.Pages\Views\EditorTemplates\Parts\Pages.Page.Publish.ascx" />
<Content Include="Modules\Orchard.Pages\Views\Page\Item.ascx" />
<Content Include="Modules\Orchard.Roles\Content\Site.css" />
<Content Include="Modules\Orchard.Roles\Module.txt" />
<Content Include="Modules\Orchard.Roles\Views\Admin\Create.aspx" />
<Content Include="Modules\Orchard.Roles\Views\Admin\Edit.aspx" />
<Content Include="Modules\Orchard.Roles\Views\Admin\Index.aspx" />
<Content Include="Modules\Orchard.Roles\Views\EditorTemplates\Parts\Roles.UserRoles.ascx" />
<Content Include="Modules\Orchard.Sandbox\Module.txt" />
<Content Include="Modules\Orchard.Sandbox\Views\DisplayTemplates\Items\Sandbox.Page.ascx" />
<Content Include="Modules\Orchard.Sandbox\Views\DisplayTemplates\Items\Sandbox.Page.Summary.ascx" />
<Content Include="Modules\Orchard.Sandbox\Views\DisplayTemplates\Parts\Sandbox.Page.Title.ascx" />
<Content Include="Modules\Orchard.Sandbox\Views\EditorTemplates\Items\Sandbox.Page.ascx" />
<Content Include="Modules\Orchard.Sandbox\Views\EditorTemplates\Parts\Sandbox.SiteSettings.ascx" />
<Content Include="Modules\Orchard.Sandbox\Views\Page\Create.aspx" />
<Content Include="Modules\Orchard.Sandbox\Views\Page\Edit.aspx" />
<Content Include="Modules\Orchard.Sandbox\Views\Page\Index.aspx" />
<Content Include="Modules\Orchard.Sandbox\Views\Page\Show.aspx" />
<Content Include="Modules\Orchard.Search\Module.txt" />
<Content Include="Modules\Orchard.Search\Styles\admin.css" />
<Content Include="Modules\Orchard.Search\Styles\search.css" />
<Content Include="Modules\Orchard.Search\Views\Admin\Index.ascx" />
<Content Include="Modules\Orchard.Search\Views\SearchForm.ascx" />
<Content Include="Modules\Orchard.Search\Views\Search\Index.ascx" />
<Content Include="Modules\Orchard.Setup\Module.txt" />
<Content Include="Modules\Orchard.Setup\Views\Setup\Index.ascx" />
<Content Include="Modules\Orchard.Tags\Module.txt" />
<Content Include="Modules\Orchard.Tags\Views\Admin\Create.aspx" />
<Content Include="Modules\Orchard.Tags\Views\Admin\Edit.aspx" />
<Content Include="Modules\Orchard.Tags\Views\Admin\Index.aspx" />
<Content Include="Modules\Orchard.Tags\Views\Admin\Search.aspx" />
<Content Include="Modules\Orchard.Tags\Views\DisplayTemplates\Parts\Tags.ShowTags.ascx" />
<Content Include="Modules\Orchard.Tags\Views\EditorTemplates\Parts\Tags.EditTags.ascx" />
<Content Include="Modules\Orchard.Tags\Views\Home\Index.ascx" />
<Content Include="Modules\Orchard.Tags\Views\Home\Search.ascx" />
<Content Include="Modules\Orchard.Themes\Content\orchard.ico" />
<Content Include="Modules\Orchard.Themes\Module.txt" />
<Content Include="Modules\Orchard.Themes\Scripts\base.js" />
<Content Include="Modules\Orchard.Themes\Scripts\jquery-1.4.2.js" />
<Content Include="Modules\Orchard.Themes\Scripts\jquery-1.4.2.min.js" />
<Content Include="Modules\Orchard.Themes\Styles\admin.css" />
<Content Include="Modules\Orchard.Themes\Styles\Images\toolBarActiveButtonBackground.gif" />
<Content Include="Modules\Orchard.Themes\Styles\Images\toolBarBackground.gif" />
<Content Include="Modules\Orchard.Themes\Styles\Images\toolBarHoverButtonBackground.gif" />
<Content Include="Modules\Orchard.Themes\Styles\special.css" />
<Content Include="Modules\Orchard.Themes\Views\Admin\Index.aspx" />
<Content Include="Modules\Orchard.Themes\Views\Admin\Install.aspx" />
<Content Include="Modules\Orchard.Themes\Views\Admin\ThemePreview.ascx" />
<Content Include="Modules\Orchard.Themes\Views\DisplayTemplates\Items\ContentItem.ascx" />
<Content Include="Modules\Orchard.Themes\Views\Document.aspx" />
<Content Include="Modules\Orchard.Themes\Views\EditorTemplates\Items\ContentItem.ascx" />
<Content Include="Modules\Orchard.Themes\Views\Header.ascx" />
<Content Include="Modules\Orchard.Themes\Views\HeadPreload.ascx" />
<Content Include="Modules\Orchard.Themes\Views\Layout.ascx" />
<Content Include="Modules\Orchard.Themes\Views\Menu.ascx" />
<Content Include="Modules\Orchard.Themes\Views\Messages.ascx" />
<Content Include="Modules\Orchard.Themes\Views\NotFound.ascx" />
<Content Include="Modules\Orchard.Themes\Views\User.ascx" />
<Content Include="Modules\Orchard.Users\Module.txt" />
<Content Include="Modules\Orchard.Users\Views\Account\AccessDenied.ascx" />
<Content Include="Modules\Orchard.Users\Views\Account\ChangePassword.ascx" />
<Content Include="Modules\Orchard.Users\Views\Account\ChangePasswordSuccess.ascx" />
<Content Include="Modules\Orchard.Users\Views\Account\LogOn.ascx" />
<Content Include="Modules\Orchard.Users\Views\Account\Register.ascx" />
<Content Include="Modules\Orchard.Users\Views\Admin\Create.aspx" />
<Content Include="Modules\Orchard.Users\Views\Admin\Edit.aspx" />
<Content Include="Modules\Orchard.Users\Views\Admin\EditorTemplates\inputPasswordLarge.ascx" />
<Content Include="Modules\Orchard.Users\Views\Admin\EditorTemplates\inputTextLarge.ascx" />
<Content Include="Modules\Orchard.Users\Views\Admin\Index.aspx" />
<Content Include="Modules\TinyMce\Module.txt" />
<Content Include="Modules\TinyMce\Scripts\langs\en.js" />
<Content Include="Modules\TinyMce\Scripts\license.txt" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\addmedia.htm" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\editor_plugin.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\editor_plugin_src.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\img\picture_add.png" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\js\addmedia.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\langs\en.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\addmedia\langs\en_dlg.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\autoresize\editor_plugin.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\autoresize\editor_plugin_src.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\fullscreen\editor_plugin.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\fullscreen\editor_plugin_src.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\fullscreen\fullscreen.htm" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\css\searchreplace.css" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\editor_plugin.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\editor_plugin_src.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\js\searchreplace.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\langs\en_dlg.js" />
<Content Include="Modules\TinyMce\Scripts\plugins\searchreplace\searchreplace.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\about.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\anchor.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\charmap.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\color_picker.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\editor_template.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\editor_template_src.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\image.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\img\colorpicker.jpg" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\img\icons.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\about.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\anchor.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\charmap.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\color_picker.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\image.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\link.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\js\source_editor.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\langs\en.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\langs\en_dlg.js" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\link.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\content.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\dialog.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\buttons.png" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\items.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\menu_arrow.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\menu_check.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\progress.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\img\tabs.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\default\ui.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\content.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\dialog.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\img\button_bg.png" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\img\button_bg_black.png" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\img\button_bg_silver.png" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\ui.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\ui_black.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\skins\o2k7\ui_silver.css" />
<Content Include="Modules\TinyMce\Scripts\themes\advanced\source_editor.htm" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\editor_template.js" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\editor_template_src.js" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\img\icons.gif" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\langs\en.js" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\skins\default\content.css" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\skins\default\ui.css" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\skins\o2k7\content.css" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\skins\o2k7\img\button_bg.png" />
<Content Include="Modules\TinyMce\Scripts\themes\simple\skins\o2k7\ui.css" />
<Content Include="Modules\TinyMce\Scripts\tiny_mce.js" />
<Content Include="Modules\TinyMce\Scripts\tiny_mce_popup.js" />
<Content Include="Modules\TinyMce\Scripts\tiny_mce_src.js" />
<Content Include="Modules\TinyMce\Scripts\utils\editable_selects.js" />
<Content Include="Modules\TinyMce\Scripts\utils\form_utils.js" />
<Content Include="Modules\TinyMce\Scripts\utils\mctabs.js" />
<Content Include="Modules\TinyMce\Scripts\utils\validate.js" />
<Content Include="Modules\TinyMce\Views\EditorTemplates\TinyMceTextEditor.ascx" />
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
@@ -464,52 +121,6 @@
<Name>Orchard.Azure</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Modules\Futures.Widgets\Views\Web.config" />
<Content Include="Modules\Futures.Widgets\Web.config" />
<Content Include="Modules\Orchard.Blogs\Views\Web.config" />
<Content Include="Modules\Orchard.Blogs\Web.config" />
<Content Include="Modules\Orchard.Comments\Views\Web.config" />
<Content Include="Modules\Orchard.Comments\Web.config" />
<Content Include="Modules\Orchard.DevTools\Views\Web.config" />
<Content Include="Modules\Orchard.DevTools\Web.config" />
<Content Include="Modules\Orchard.Media\Views\Web.config" />
<Content Include="Modules\Orchard.Media\Web.config" />
<Content Include="Modules\Orchard.MetaData\Views\Web.config" />
<Content Include="Modules\Orchard.MetaData\Web.config" />
<Content Include="Modules\Orchard.Modules\Views\Web.config" />
<Content Include="Modules\Orchard.Modules\Web.config" />
<Content Include="Modules\Orchard.MultiTenancy\Views\Web.config" />
<Content Include="Modules\Orchard.MultiTenancy\Web.config" />
<Content Include="Modules\Orchard.Pages\Views\Web.config" />
<Content Include="Modules\Orchard.Pages\Web.config" />
<Content Include="Modules\Orchard.Roles\Views\Web.config" />
<Content Include="Modules\Orchard.Roles\Web.config" />
<Content Include="Modules\Orchard.Sandbox\Views\Web.config" />
<Content Include="Modules\Orchard.Sandbox\Web.config" />
<Content Include="Modules\Orchard.Search\Views\Web.config" />
<Content Include="Modules\Orchard.Search\Web.config" />
<Content Include="Modules\Orchard.Setup\Views\Web.config" />
<Content Include="Modules\Orchard.Setup\Web.config" />
<Content Include="Modules\Orchard.Tags\Views\Web.config" />
<Content Include="Modules\Orchard.Tags\Web.config" />
<Content Include="Modules\Orchard.Themes\Views\Web.config" />
<Content Include="Modules\Orchard.Themes\Web.config" />
<Content Include="Modules\Orchard.Users\Views\Web.config" />
<Content Include="Modules\Orchard.Users\Web.config" />
<Content Include="Modules\TinyMce\Views\Web.config" />
<Content Include="Modules\TinyMce\Web.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Core\Common\Views\Web.config" />
<Content Include="Core\Contents\Views\Web.config" />
<Content Include="Core\Dashboard\Views\Web.config" />
<Content Include="Core\Navigation\Views\Web.config" />
<Content Include="Core\Routable\Views\Web.config" />
<Content Include="Core\Settings\Views\Web.config" />
<Content Include="Core\Web.config" />
<Content Include="Core\XmlRpc\Views\Web.config" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -249,5 +249,45 @@ namespace Orchard.Tests.Modules.Indexing {
Assert.That(doc.IsDirty, Is.True);
}
[Test]
public void DocumentsShouldBeDeleted() {
_provider.CreateIndex("default");
_provider.Store("default", _provider.New(1).Add("field", "value1"));
_provider.Store("default", _provider.New(11).Add("field", "value11"));
_provider.Store("default", _provider.New(111).Add("field", "value111"));
var searchBuilder = _provider.CreateSearchBuilder("default");
Assert.That(searchBuilder.Get(1).ContentItemId, Is.EqualTo(1));
Assert.That(searchBuilder.Get(11).ContentItemId, Is.EqualTo(11));
Assert.That(searchBuilder.Get(111).ContentItemId, Is.EqualTo(111));
_provider.Delete("default", 1);
Assert.That(searchBuilder.Get(1), Is.Null);
Assert.That(searchBuilder.Get(11).ContentItemId, Is.EqualTo(11));
Assert.That(searchBuilder.Get(111).ContentItemId, Is.EqualTo(111));
_provider.Delete("default", new int[] {1, 11, 111 });
Assert.That(searchBuilder.Get(1), Is.Null);
Assert.That(searchBuilder.Get(11), Is.Null);
Assert.That(searchBuilder.Get(111), Is.Null);
}
[Test]
public void SameContentItemShouldNotBeIndexedTwice() {
_provider.CreateIndex("default");
var searchBuilder = _provider.CreateSearchBuilder("default");
_provider.Store("default", _provider.New(1).Add("field", "value1"));
Assert.That(searchBuilder.WithField("id", "1").Count(), Is.EqualTo(1));
_provider.Store("default", _provider.New(1).Add("field", "value2"));
Assert.That(searchBuilder.WithField("id", "1").Count(), Is.EqualTo(1));
}
}
}

View File

@@ -7,13 +7,16 @@ using NHibernate;
using NUnit.Framework;
using Orchard.ContentManagement.Records;
using Orchard.Data;
using Orchard.DataMigration.Interpreters;
using Orchard.Data.Migration;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Migration.Records;
using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Folders;
using Orchard.Environment.Extensions.Models;
using Orchard.Tests.ContentManagement;
using Orchard.DataMigration;
using Orchard.Data.Migration;
using Orchard.Data.Providers;
namespace Orchard.Tests.DataMigration {
[TestFixture]
@@ -50,7 +53,9 @@ namespace Orchard.Tests.DataMigration {
_folders = new StubFolders();
builder.RegisterInstance(new ShellSettings { DataTablePrefix = "TEST_"});
builder.RegisterType<SqlServerDataServicesProvider>().As<IDataServicesProvider>();
builder.RegisterType<DataServicesProviderFactory>().As<IDataServicesProviderFactory>();
builder.RegisterType<NullInterpreter>().As<IDataMigrationInterpreter>();
builder.RegisterInstance(_folders).As<IExtensionFolders>();
builder.RegisterType<ExtensionManager>().As<IExtensionManager>();
@@ -87,20 +92,20 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationEmpty : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() {Descriptor = new FeatureDescriptor() {Name = "Feature1"}}; }
}
}
public class DataMigration11 : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() {Descriptor = new FeatureDescriptor() {Name = "Feature1"}}; }
}
}
public class DataMigration11Create : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() {Descriptor = new FeatureDescriptor() {Name = "Feature1"}}; }
}
public int Create() {
@@ -109,8 +114,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationCreateCanBeFollowedByUpdates : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }; }
}
public int Create() {
@@ -123,8 +128,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationSameMigrationClassCanEvolve : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }; }
}
public int Create() {
@@ -141,8 +146,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationDependenciesModule1 : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() {Descriptor = new FeatureDescriptor() {Name = "Feature1"}}; }
}
public int Create() {
@@ -151,8 +156,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationDependenciesModule2 : IDataMigration {
public string Feature {
get { return "Feature2"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature2" } }; }
}
public int Create() {
@@ -161,8 +166,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationWithSchemaBuilder : DataMigrationImpl {
public override string Feature {
get { return "Feature1"; }
public override Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }; }
}
public int Create() {
@@ -172,14 +177,14 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationFeatureNeedUpdate1 : IDataMigration {
public string Feature {
get { return "Feature1"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }; }
}
}
public class DataMigrationFeatureNeedUpdate2 : IDataMigration {
public string Feature {
get { return "Feature2"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature2" } }; }
}
public int Create() {
@@ -188,8 +193,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationFeatureNeedUpdate3 : IDataMigration {
public string Feature {
get { return "Feature3"; }
public Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature3" } }; }
}
public int Create() {
@@ -202,8 +207,8 @@ namespace Orchard.Tests.DataMigration {
}
public class DataMigrationSimpleBuilder : DataMigrationImpl {
public override string Feature {
get { return "Feature1"; }
public override Feature Feature {
get { return new Feature() { Descriptor = new FeatureDescriptor() { Name = "Feature1" } }; }
}
public int Create() {

View File

@@ -4,8 +4,8 @@ using Autofac;
using NHibernate;
using NUnit.Framework;
using Orchard.Data;
using Orchard.DataMigration.Interpreters;
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.Configuration;
using Orchard.Tests.ContentManagement;
using System.IO;
@@ -65,7 +65,7 @@ namespace Orchard.Tests.DataMigration {
.CreateIndex("IDX_XYZ", "NickName"))
.AlterTable("User", table => table
.DropIndex("IDX_XYZ"))
.DropForeignKey("Addresse", "User_Address")
.DropForeignKey("Address", "User_Address")
.DropTable("Address")
.ExecuteSql("drop database", statement => statement.ForProvider("SQLite"))
.ExecuteSql("DROP DATABASE", statement => statement.ForProvider("SQLServer"));

View File

@@ -1,10 +1,9 @@

using System;
using Orchard.DataMigration.Interpreters;
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Migration.Schema;
public class NullInterpreter : IDataMigrationInterpreter {
public void Visit(SchemaCommand command) {
public void Visit(ISchemaBuilderCommand command) {
}
public void Visit(CreateTableCommand command) {

View File

@@ -0,0 +1,47 @@
using System;
using Orchard.Data.Migration;
namespace Orchard.Core.Common.DataMigrations {
public class CommonDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Common_BodyRecord (Id INTEGER not null, Text TEXT, Format TEXT, ContentItemRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("BodyRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Text")
.Column<string>("Format")
.Column<int>("ContentItemRecord_id")
);
//CREATE TABLE Common_CommonRecord (Id INTEGER not null, OwnerId INTEGER, CreatedUtc DATETIME, PublishedUtc DATETIME, ModifiedUtc DATETIME, Container_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("CommonRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("OwnerId")
.Column<DateTime>("CreatedUtc")
.Column<DateTime>("PublishedUtc")
.Column<DateTime>("ModifiedUtc")
.Column<int>("Container_id")
);
//CREATE TABLE Common_CommonVersionRecord (Id INTEGER not null, CreatedUtc DATETIME, PublishedUtc DATETIME, ModifiedUtc DATETIME, ContentItemRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("CommonVersionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<DateTime>("CreatedUtc")
.Column<DateTime>("PublishedUtc")
.Column<DateTime>("ModifiedUtc")
.Column<int>("ContentItemRecord_id")
);
//CREATE TABLE Common_RoutableRecord (Id INTEGER not null, Title TEXT, Slug TEXT, Path TEXT, ContentItemRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("RoutableRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Title")
.Column<string>("Slug")
.Column<string>("Path")
.Column<int>("ContentItemRecord_id")
);
return 0010;
}
}
}

View File

@@ -4,6 +4,7 @@ using Orchard.ContentManagement;
using Orchard.ContentManagement.Aspects;
using Orchard.ContentManagement.Drivers;
using Orchard.Core.Common.Models;
using Orchard.Core.Common.Settings;
using Orchard.Core.Common.ViewModels;
namespace Orchard.Core.Common.Drivers {
@@ -12,6 +13,7 @@ namespace Orchard.Core.Common.Drivers {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Parts/Common.Body";
private const string DefaultTextEditorTemplate = "TinyMceTextEditor";
private const string PlainTextEditorTemplate = "PlainTextEditor";
public BodyDriver(IOrchardServices services) {
Services = services;
@@ -21,7 +23,7 @@ namespace Orchard.Core.Common.Drivers {
get { return "Body"; }
}
// \/\/ Haackalicious on many accounts - don't copy what has been done here for the wrapper \/\/
// \/\/ Hackalicious on many accounts - don't copy what has been done here for the wrapper \/\/
protected override DriverResult Display(BodyAspect part, string displayType) {
var model = new BodyDisplayViewModel { BodyAspect = part, Text = BbcodeReplace(part.Text) };
@@ -40,16 +42,29 @@ namespace Orchard.Core.Common.Drivers {
protected override DriverResult Editor(BodyAspect part, IUpdateModel updater) {
var model = BuildEditorViewModel(part);
updater.TryUpdateModel(model, Prefix, null, null);
// only set the format if it has not yet been set to preserve the initial format type - might want to change this later to support changing body formats but...later
if (string.IsNullOrWhiteSpace(model.Format))
model.Format = GetFlavor(part);
return ContentPartTemplate(model, TemplateName, Prefix).Location("primary", "5");
}
private static BodyEditorViewModel BuildEditorViewModel(BodyAspect part) {
return new BodyEditorViewModel {
BodyAspect = part,
TextEditorTemplate = DefaultTextEditorTemplate,
TextEditorTemplate = GetFlavor(part) == "html" ? DefaultTextEditorTemplate : PlainTextEditorTemplate,
AddMediaPath= new PathBuilder(part).AddContentType().AddContainerSlug().AddSlug().ToString()
};
}
private static string GetFlavor(BodyAspect part) {
var typePartSettings = part.Settings.GetModel<BodyTypePartSettings>();
return (typePartSettings != null && !string.IsNullOrWhiteSpace(typePartSettings.Flavor))
? typePartSettings.Flavor
: part.PartDefinition.Settings.GetModel<BodyPartSettings>().FlavorDefault;
}
class PathBuilder {
private readonly IContent _content;
private string _path;

View File

@@ -0,0 +1,67 @@
using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models;
using Orchard.ContentManagement.ViewModels;
namespace Orchard.Core.Common.Settings {
public class BodyPartSettings {
public const string FlavorDefaultDefault = "html";
private string _flavorDefault;
public string FlavorDefault {
get { return !string.IsNullOrWhiteSpace(_flavorDefault)
? _flavorDefault
: FlavorDefaultDefault; }
set { _flavorDefault = value; }
}
}
public class BodyTypePartSettings {
public string Flavor { get; set; }
}
public class BodySettingsHooks : ContentDefinitionEditorEventsBase {
public override IEnumerable<TemplateViewModel> TypePartEditor(ContentTypeDefinition.Part definition) {
if (definition.PartDefinition.Name != "BodyAspect")
yield break;
var model = definition.Settings.GetModel<BodyTypePartSettings>();
if (string.IsNullOrWhiteSpace(model.Flavor)) {
var partModel = definition.PartDefinition.Settings.GetModel<BodyPartSettings>();
model.Flavor = partModel.FlavorDefault;
}
yield return DefinitionTemplate(model);
}
public override IEnumerable<TemplateViewModel> PartEditor(ContentPartDefinition definition) {
if (definition.Name != "BodyAspect")
yield break;
var model = definition.Settings.GetModel<BodyPartSettings>();
yield return DefinitionTemplate(model);
}
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypeDefinitionBuilder.PartConfigurer builder, IUpdateModel updateModel) {
if (builder.Name != "BodyAspect")
yield break;
var model = new BodyTypePartSettings();
updateModel.TryUpdateModel(model, "BodyTypePartSettings", null, null);
builder.WithSetting("BodyTypePartSettings.Flavor", !string.IsNullOrWhiteSpace(model.Flavor) ? model.Flavor : null);
yield return DefinitionTemplate(model);
}
public override IEnumerable<TemplateViewModel> PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) {
if (builder.Name != "BodyAspect")
yield break;
var model = new BodyPartSettings();
updateModel.TryUpdateModel(model, "BodyPartSettings", null, null);
builder.WithSetting("BodyPartSettings.FlavorDefault", !string.IsNullOrWhiteSpace(model.FlavorDefault) ? model.FlavorDefault : null);
yield return DefinitionTemplate(model);
}
}
}

View File

@@ -0,0 +1,6 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.Settings.BodyPartSettings>" %>
<fieldset>
<label for="<%:Html.FieldIdFor(m => m.FlavorDefault) %>"><%:T("Default flavor") %></label>
<%:Html.EditorFor(m => m.FlavorDefault)%>
<%:Html.ValidationMessageFor(m => m.FlavorDefault)%>
</fieldset>

View File

@@ -0,0 +1,6 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.Settings.BodyTypePartSettings>" %>
<fieldset>
<label for="<%:Html.FieldIdFor(m => m.Flavor) %>"><%:T("Flavor") %></label>
<%:Html.EditorFor(m => m.Flavor) %>
<%:Html.ValidationMessageFor(m => m.Flavor) %>
</fieldset>

View File

@@ -0,0 +1,3 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BodyEditorViewModel>" %>
<%@ Import Namespace="Orchard.Core.Common.ViewModels"%>
<%: Html.TextArea("Text", Model.Text, 25, 80, new { @class = Model.Format }) %>

View File

@@ -0,0 +1,17 @@
using Orchard.Data.Migration;
namespace Orchard.Core.Localization.DataMigrations {
public class LocalizationDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Localization_LocalizedRecord (Id INTEGER not null, CultureId INTEGER, MasterContentItemId INTEGER, primary key (Id));
SchemaBuilder.CreateTable("LocalizedRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("CultureId")
.Column<int>("MasterContentItemId")
);
return 0010;
}
}
}

View File

@@ -0,0 +1,24 @@
using Orchard.Data.Migration;
namespace Orchard.Core.Navigation.DataMigrations {
public class NavigationDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Navigation_MenuItemRecord (Id INTEGER not null, Url TEXT, primary key (Id));
SchemaBuilder.CreateTable("MenuItemRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Url")
);
//CREATE TABLE Navigation_MenuPartRecord (Id INTEGER not null, MenuText TEXT, MenuPosition TEXT, OnMainMenu INTEGER, primary key (Id));
SchemaBuilder.CreateTable("MenuPartRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("MenuText")
.Column<string>("MenuPosition")
.Column<bool>("OnMainMenu")
);
return 0010;
}
}
}

View File

@@ -61,6 +61,7 @@
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Common\DataMigrations\CommonDataMigration.cs" />
<Compile Include="Common\Drivers\BodyDriver.cs" />
<Compile Include="Common\Drivers\CommonDriver.cs" />
<Compile Include="Common\Drivers\RoutableDriver.cs" />
@@ -68,6 +69,7 @@
<Compile Include="Common\Drivers\TextFieldDriver.cs" />
<Compile Include="Common\Fields\TextField.cs" />
<Compile Include="Common\Handlers\RoutableAspectHandler.cs" />
<Compile Include="Common\Settings\BodySettings.cs" />
<Compile Include="Common\ViewModels\ContainerEditorViewModel.cs" />
<Compile Include="Common\ViewModels\TextContentFieldDisplayViewModel.cs" />
<Compile Include="Common\ViewModels\TextContentFieldEditorViewModel.cs" />
@@ -76,7 +78,9 @@
<Compile Include="Contents\ViewModels\EditItemViewModel.cs" />
<Compile Include="Contents\ViewModels\ListContentsViewModel.cs" />
<Compile Include="Contents\ViewModels\ListContentTypesViewModel.cs" />
<Compile Include="Localization\DataMigrations\LocalizationDataMigration.cs" />
<Compile Include="Localization\Drivers\LocalizedDriver.cs" />
<Compile Include="Navigation\DataMigrations\NavigationDataMigration.cs" />
<Compile Include="Routable\Controllers\ItemController.cs" />
<Compile Include="Routable\Drivers\RoutableDriver.cs" />
<Compile Include="Routable\Handlers\RoutableHandler.cs" />
@@ -153,12 +157,14 @@
<Compile Include="Routable\Services\RoutableService.cs" />
<Compile Include="Routable\ViewModels\RoutableEditorViewModel.cs" />
<Compile Include="Routable\ViewModels\RoutableDisplayViewModel.cs" />
<Compile Include="Scheduling\DataMigrations\SchedulingDataMigration.cs" />
<Compile Include="Scheduling\Models\ScheduledTaskRecord.cs" />
<Compile Include="Scheduling\Services\PublishingTaskHandler.cs" />
<Compile Include="Scheduling\Services\PublishingTaskManager.cs" />
<Compile Include="Scheduling\Services\ScheduledTaskManager.cs" />
<Compile Include="Scheduling\Services\ScheduledTaskExecutor.cs" />
<Compile Include="Scheduling\Models\Task.cs" />
<Compile Include="Settings\DataMigrations\SettingsDataMigration.cs" />
<Compile Include="Settings\ViewModels\SiteCulturesViewModel.cs" />
<Compile Include="Settings\Drivers\SiteSettingsDriver.cs" />
<Compile Include="Settings\Metadata\ContentDefinitionManager.cs" />
@@ -197,9 +203,12 @@
</ItemGroup>
<ItemGroup>
<Content Include="Common\Module.txt" />
<Content Include="Common\Views\DefinitionTemplates\BodyTypePartSettings.ascx" />
<Content Include="Common\Views\DefinitionTemplates\BodyPartSettings.ascx" />
<Content Include="Common\Views\DisplayTemplates\Fields\Common.TextField.ascx" />
<Content Include="Common\Views\EditorTemplates\Fields\Common.TextField.ascx" />
<Content Include="Common\Views\EditorTemplates\Parts\Common.Container.ascx" />
<Content Include="Common\Views\EditorTemplates\PlainTextEditor.ascx" />
<Content Include="Contents\Module.txt" />
<Content Include="Contents\Views\Admin\List.aspx" />
<Content Include="Contents\Views\Admin\Edit.aspx" />

View File

@@ -0,0 +1,19 @@
using System;
using Orchard.Data.Migration;
namespace Orchard.Core.Scheduling.DataMigrations {
public class SchedulingDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Scheduling_ScheduledTaskRecord (Id integer, TaskType TEXT, ScheduledUtc DATETIME, ContentItemVersionRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ScheduledTaskRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("TaskType")
.Column<DateTime>("ScheduledUtc")
.Column<int>("ContentItemVersionRecord_id")
);
return 0010;
}
}
}

View File

@@ -0,0 +1,97 @@
using Orchard.Data.Migration;
namespace Orchard.Core.Settings.DataMigrations {
public class SettingsDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Settings_ContentFieldDefinitionRecord (Id integer, Name TEXT, primary key (Id));
SchemaBuilder.CreateTable("ContentFieldDefinitionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
);
//CREATE TABLE Settings_ContentPartDefinitionRecord (Id integer, Name TEXT, Hidden INTEGER, Settings TEXT, primary key (Id));
SchemaBuilder.CreateTable("ContentPartDefinitionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<bool>("Hidden")
.Column<string>("Settings")
);
//CREATE TABLE Settings_ContentPartFieldDefinitionRecord (Id integer, Name TEXT, Settings TEXT, ContentFieldDefinitionRecord_id INTEGER, INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ContentPartFieldDefinitionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<string>("Settings")
.Column<int>("ContentFieldDefinitionRecord_id")
.Column<int>("ContentPartDefinitionRecord_Id")
);
//CREATE TABLE Settings_ContentTypeDefinitionRecord (Id integer, Name TEXT, DisplayName TEXT, Hidden INTEGER, Settings TEXT, primary key (Id));
SchemaBuilder.CreateTable("ContentTypeDefinitionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<string>("DisplayName")
.Column<bool>("Hidden")
.Column<string>("Settings")
);
//CREATE TABLE Settings_ContentTypePartDefinitionRecord (Id integer, Settings TEXT, ContentPartDefinitionRecord_id INTEGER, ContentTypeDefinitionRecord_Id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ContentTypePartDefinitionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Settings")
.Column<int>("ContentPartDefinitionRecord_id")
.Column<int>("ContentTypeDefinitionRecord_Id")
);
//CREATE TABLE Settings_ShellDescriptorRecord (Id integer, SerialNumber INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ShellDescriptorRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("SerialNumber")
);
//CREATE TABLE Settings_ShellFeatureRecord (Id integer, Name TEXT, ShellDescriptorRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ShellFeatureRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<int>("ShellDescriptorRecord_id"));
//CREATE TABLE Settings_ShellFeatureStateRecord (Id integer, Name TEXT, InstallState TEXT, EnableState TEXT, ShellStateRecord_Id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ShellFeatureStateRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<string>("InstallState")
.Column<string>("EnableState")
.Column<int>("ShellStateRecord_Id")
);
//CREATE TABLE Settings_ShellParameterRecord (Id integer, Component TEXT, Name TEXT, Value TEXT, ShellDescriptorRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ShellParameterRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Component")
.Column<string>("Name")
.Column<string>("Value")
.Column<int>("ShellDescriptorRecord_id")
);
//CREATE TABLE Settings_ShellStateRecord (Id integer, primary key (Id));
SchemaBuilder.CreateTable("ShellStateRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
);
//CREATE TABLE Settings_SiteSettingsRecord (Id INTEGER not null, SiteSalt TEXT, SiteName TEXT, SuperUser TEXT, PageTitleSeparator TEXT, HomePage TEXT, SiteCulture TEXT, primary key (Id));
SchemaBuilder.CreateTable("SiteSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("SiteSalt")
.Column<string>("SiteName")
.Column<string>("SuperUser")
.Column<string>("PageTitleSeparator")
.Column<string>("HomePage")
.Column<string>("SiteCulture")
);
return 0010;
}
}
}

View File

@@ -0,0 +1,23 @@
using Orchard.Data.Migration;
namespace Futures.Widgets.DataMigrations {
public class WidgetsDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Futures_Widgets_HasWidgetsRecord (Id INTEGER not null, primary key (Id));
SchemaBuilder.CreateTable("HasWidgetsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
);
//CREATE TABLE Futures_Widgets_WidgetRecord (Id INTEGER not null, Zone TEXT, Position TEXT, Scope_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("WidgetRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Zone")
.Column<string>("Position")
.Column<int>("Scope_id")
);
return 0010;
}
}
}

View File

@@ -59,6 +59,7 @@
<ItemGroup>
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\WidgetHandler.cs" />
<Compile Include="DataMigrations\WidgetsDataMigration.cs" />
<Compile Include="Models\HasWidgets.cs" />
<Compile Include="Models\Widget.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@@ -0,0 +1,26 @@
using Orchard.Data.Migration;
namespace Orchard.Blogs.DataMigrations {
public class BlogsDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Blogs_BlogArchiveRecord (Id integer, Year INTEGER, Month INTEGER, PostCount INTEGER, Blog_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("BlogArchiveRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("Year")
.Column<int>("Month")
.Column<int>("PostCount")
.Column<int>("Blog_id")
);
//CREATE TABLE Orchard_Blogs_BlogRecord (Id INTEGER not null, Description TEXT, PostCount INTEGER, primary key (Id));
SchemaBuilder.CreateTable("BlogRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Description")
.Column<int>("PostCount")
);
return 0010;
}
}
}

View File

@@ -68,6 +68,7 @@
<Compile Include="AdminMenu.cs" />
<Compile Include="Commands\BlogCommands.cs" />
<Compile Include="Controllers\BlogAdminController.cs" />
<Compile Include="DataMigrations\BlogsDataMigration.cs" />
<Compile Include="Drivers\BlogDriver.cs" />
<Compile Include="Controllers\BlogPostAdminController.cs" />
<Compile Include="Controllers\BlogPostController.cs" />

View File

@@ -0,0 +1,47 @@
using System;
using Orchard.Data.Migration;
namespace Orchard.Comments.DataMigrations {
public class CommentsDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Comments_ClosedCommentsRecord (Id integer, ContentItemId INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ClosedCommentsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("ContentItemId")
);
//CREATE TABLE Orchard_Comments_CommentRecord (Id INTEGER not null, Author TEXT, SiteName TEXT, UserName TEXT, Email TEXT, Status TEXT, CommentDateUtc DATETIME, CommentText TEXT, CommentedOn INTEGER, CommentedOnContainer INTEGER, primary key (Id));
SchemaBuilder.CreateTable("CommentRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Author")
.Column<string>("SiteName")
.Column<string>("UserName")
.Column<string>("Email")
.Column<string>("Status")
.Column<DateTime>("CommentDateUtc")
.Column<string>("CommentText")
.Column<int>("CommentedOn")
.Column<int>("CommentedOnContainer")
);
//CREATE TABLE Orchard_Comments_CommentSettingsRecord (Id INTEGER not null, ModerateComments INTEGER, EnableSpamProtection INTEGER, AkismetKey TEXT, AkismetUrl TEXT, primary key (Id));
SchemaBuilder.CreateTable("CommentSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<bool>("ModerateComments")
.Column<bool>("EnableSpamProtection")
.Column<string>("AkismetKey")
.Column<string>("AkismetUrl")
);
//CREATE TABLE Orchard_Comments_HasCommentsRecord (Id INTEGER not null, CommentsShown INTEGER, CommentsActive INTEGER, primary key (Id));
SchemaBuilder.CreateTable("HasCommentsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<bool>("CommentsShown")
.Column<bool>("CommentsActive")
);
return 0010;
}
}
}

View File

@@ -72,6 +72,7 @@
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\CommentController.cs" />
<Compile Include="DataMigrations\CommentsDataMigration.cs" />
<Compile Include="Drivers\CommentDriver.cs" />
<Compile Include="Drivers\HasCommentsContainerDriver.cs" />
<Compile Include="Drivers\HasCommentsDriver.cs" />

View File

@@ -1,50 +1,34 @@
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.ContentManagement.ViewModels;
using Orchard.ContentTypes.Services;
using Orchard.ContentTypes.ViewModels;
using Orchard.Data;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Mvc.Results;
using Orchard.UI.Notify;
namespace Orchard.ContentTypes.Controllers {
public class AdminController : Controller {
private readonly INotifier _notifier;
private readonly IContentDefinitionService _contentDefinitionService;
private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly IContentManager _contentManager;
private readonly ITransactionManager _transactionManager;
private readonly IContentDefinitionEditorEvents _extendViewModels;
public AdminController(
IOrchardServices orchardServices,
INotifier notifier,
IContentDefinitionService contentDefinitionService,
IContentDefinitionManager contentDefinitionManager,
IContentManager contentManager,
ITransactionManager transactionManager,
IContentDefinitionEditorEvents extendViewModels) {
Services = orchardServices;
_notifier = notifier;
_contentDefinitionService = contentDefinitionService;
_contentDefinitionManager = contentDefinitionManager;
_contentManager = contentManager;
_transactionManager = transactionManager;
_extendViewModels = extendViewModels;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; private set; }
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index() {
return List();
}
@@ -69,32 +53,14 @@ namespace Orchard.ContentTypes.Controllers {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to create a content type.")))
return new HttpUnauthorizedResult();
var model = new ContentTypeDefinition("");
TryUpdateModel(model);
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
if (!ModelState.IsValid)
return View(viewModel);
}
_contentDefinitionService.AddTypeDefinition(model);
_contentDefinitionService.AddTypeDefinition(viewModel.DisplayName);
return RedirectToAction("Index");
}
class Updater : IUpdateModel {
public AdminController Thunk { get; set; }
public Func<string, string> _prefix = x => x;
public bool TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class {
return Thunk.TryUpdateModel(model, _prefix(prefix), includeProperties, excludeProperties);
}
public void AddModelError(string key, LocalizedString errorMessage) {
Thunk.ModelState.AddModelError(_prefix(key), errorMessage.ToString());
}
}
public ActionResult Edit(string id) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a content type.")))
return new HttpUnauthorizedResult();
@@ -106,36 +72,56 @@ namespace Orchard.ContentTypes.Controllers {
var viewModel = new EditTypeViewModel(contentTypeDefinition);
viewModel.Parts = viewModel.Parts.ToArray();
viewModel.Templates = _extendViewModels.TypeEditor(contentTypeDefinition);
var entries = viewModel.Parts.Join(contentTypeDefinition.Parts,
m => m.PartDefinition.Name,
d => d.PartDefinition.Name,
(model, definition) => new { model, definition });
m => m.PartDefinition.Name,
d => d.PartDefinition.Name,
(model, definition) => new {model, definition});
foreach (var entry in entries) {
entry.model.Templates = _extendViewModels.TypePartEditor(entry.definition);
var fields = entry.model.PartDefinition.Fields.Join(entry.definition.PartDefinition.Fields,
m => m.FieldDefinition.Name,
d => d.FieldDefinition.Name,
(model, definition) => new { model, definition });
foreach (var field in fields) {
field.model.Templates = _extendViewModels.PartFieldEditor(field.definition);
}
}
//Oy, this action is getting massive :(
//todo: put this action on a diet
var contentPartDefinition = _contentDefinitionService.GetPartDefinition(id);
if (contentPartDefinition != null) {
viewModel.Fields = viewModel.Fields.ToArray();
var fields = viewModel.Fields.Join(contentPartDefinition.Fields,
m => m.FieldDefinition.Name,
d => d.FieldDefinition.Name,
(model, definition) => new { model, definition });
foreach (var field in fields) {
field.model.Templates = _extendViewModels.PartFieldEditor(field.definition);
}
}
return View(viewModel);
}
[HttpPost, ActionName("Edit")]
public ActionResult EditPOST(string id) {
public ActionResult EditPOST(EditTypeViewModel viewModel) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a content type.")))
return new HttpUnauthorizedResult();
var contentTypeDefinition = _contentDefinitionService.GetTypeDefinition(id);
var contentTypeDefinition = _contentDefinitionService.GetTypeDefinition(viewModel.Name);
if (contentTypeDefinition == null)
return new NotFoundResult();
var updater = new Updater { Thunk = this };
var viewModel = new EditTypeViewModel();
TryUpdateModel(viewModel);
_contentDefinitionManager.AlterTypeDefinition(id, typeBuilder => {
var updater = new Updater(this);
_contentDefinitionManager.AlterTypeDefinition(viewModel.Name, typeBuilder => {
typeBuilder.DisplayedAs(viewModel.DisplayName);
@@ -153,66 +139,52 @@ namespace Orchard.ContentTypes.Controllers {
typeBuilder.WithPart(entry.part.PartDefinition.Name, typePartBuilder => {
partViewModel.Templates = _extendViewModels.TypePartEditorUpdate(typePartBuilder, updater);
});
if (!partViewModel.PartDefinition.Fields.Any())
continue;
_contentDefinitionManager.AlterPartDefinition(partViewModel.PartDefinition.Name, partBuilder => {
foreach (var fieldEntry in partViewModel.PartDefinition.Fields.Select((field, index) => new { field, index })) {
var fieldViewModel = fieldEntry.field;
// enable updater to be aware of changing field prefix
var firstHalfFieldName = "Fields[" + fieldEntry.index + "].";
updater._prefix = secondHalf => firstHalfFieldName + secondHalf;
// allow extensions to alter partField configuration
partBuilder.WithField(fieldViewModel.Name, partFieldBuilder => {
fieldViewModel.Templates = _extendViewModels.PartFieldEditorUpdate(partFieldBuilder, updater);
});
}
});
}
if (viewModel.Fields.Any()) {
_contentDefinitionManager.AlterPartDefinition(viewModel.Name, partBuilder => {
foreach (var fieldEntry in viewModel.Fields.Select((field, index) => new { field, index })) {
var fieldViewModel = fieldEntry.field;
// enable updater to be aware of changing field prefix
var firstHalfFieldName = "Fields[" + fieldEntry.index + "].";
updater._prefix = secondHalf => firstHalfFieldName + secondHalf;
// allow extensions to alter partField configuration
partBuilder.WithField(fieldViewModel.Name, partFieldBuilder => {
fieldViewModel.Templates = _extendViewModels.PartFieldEditorUpdate(partFieldBuilder, updater);
});
}
});
}
});
if (!ModelState.IsValid) {
_transactionManager.Cancel();
Services.TransactionManager.Cancel();
return View(viewModel);
}
//var contentTypeDefinitionParts = viewModel.Parts.Select(GenerateTypePart).ToList();
//if (viewModel.Fields.Any())
// contentTypeDefinitionParts.Add(GenerateTypePart(viewModel));
////todo: apply the changes along the lines of but definately not resembling
//// for now this _might_ just get a little messy ->
//_contentDefinitionService.AlterTypeDefinition(
// new ContentTypeDefinition(
// viewModel.Name,
// viewModel.DisplayName,
// contentTypeDefinitionParts,
// viewModel.Settings
// )
// );
return RedirectToAction("Index");
}
private static ContentTypeDefinition.Part GenerateTypePart(EditTypePartViewModel viewModel) {
return new ContentTypeDefinition.Part(
new ContentPartDefinition(
viewModel.PartDefinition.Name,
viewModel.PartDefinition.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
viewModel.PartDefinition.Settings
),
viewModel.Settings
);
}
private static ContentTypeDefinition.Part GenerateTypePart(EditTypeViewModel viewModel) {
return new ContentTypeDefinition.Part(
new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
null
),
null
);
}
#endregion
#region Parts
@@ -226,28 +198,33 @@ namespace Orchard.ContentTypes.Controllers {
if (contentPartDefinition == null)
return new NotFoundResult();
return View(new EditPartViewModel(contentPartDefinition));
var viewModel = new EditPartViewModel(contentPartDefinition) {
Templates = _extendViewModels.PartEditor(contentPartDefinition)
};
return View(viewModel);
}
[HttpPost, ActionName("EditPart")]
public ActionResult EditPartPOST(string id) {
public ActionResult EditPartPOST(EditPartViewModel viewModel) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a part.")))
return new HttpUnauthorizedResult();
var contentPartDefinition = _contentDefinitionService.GetPartDefinition(id);
var contentPartDefinition = _contentDefinitionService.GetPartDefinition(viewModel.Name);
if (contentPartDefinition == null)
return new NotFoundResult();
var viewModel = new EditPartViewModel();
TryUpdateModel(viewModel);
var updater = new Updater(this);
_contentDefinitionManager.AlterPartDefinition(viewModel.Name, partBuilder => {
// allow extensions to alter part configuration
viewModel.Templates = _extendViewModels.PartEditorUpdate(partBuilder, updater);
});
if (!ModelState.IsValid)
return EditPart(id);
//todo: apply the changes along the lines of but definately not resembling
// for now this _might_ just get a little messy ->
_contentDefinitionService.AlterPartDefinition(GeneratePart(viewModel));
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
return View(viewModel);
}
return RedirectToAction("Index");
}
@@ -319,21 +296,25 @@ namespace Orchard.ContentTypes.Controllers {
return RedirectToAction("EditPart", new { id });
}
private static ContentPartDefinition GeneratePart(EditPartViewModel viewModel) {
return new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
viewModel.Settings
);
}
#endregion
class Updater : IUpdateModel {
private readonly AdminController _thunk;
public Updater(AdminController thunk) {
_thunk = thunk;
}
public Func<string, string> _prefix = x => x;
public bool TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class {
return _thunk.TryUpdateModel(model, _prefix(prefix), includeProperties, excludeProperties);
}
public void AddModelError(string key, LocalizedString errorMessage) {
_thunk.ModelState.AddModelError(_prefix(key), errorMessage.ToString());
}
}
}
}

View File

@@ -31,23 +31,21 @@ namespace Orchard.ContentTypes.Services {
return _contentDefinitionManager.GetTypeDefinition(name);
}
public void AddTypeDefinition(ContentTypeDefinition contentTypeDefinition) {
var typeName = string.IsNullOrWhiteSpace(contentTypeDefinition.Name)
? GenerateTypeName(contentTypeDefinition.DisplayName)
: contentTypeDefinition.Name;
public void AddTypeDefinition(string displayName) {
var name = GenerateTypeName(displayName);
while (_contentDefinitionManager.GetTypeDefinition(typeName) != null)
typeName = VersionTypeName(typeName);
while (_contentDefinitionManager.GetTypeDefinition(name) != null)
name = VersionTypeName(name);
//just giving the new type some default parts for now
_contentDefinitionManager.StoreTypeDefinition(new ContentTypeDefinition(name) {DisplayName = displayName});
_contentDefinitionManager.AlterTypeDefinition(
typeName,
cfg => cfg.DisplayedAs(contentTypeDefinition.DisplayName)
.WithPart("CommonAspect")
name,
cfg => cfg.WithPart("CommonAspect")
//.WithPart("RoutableAspect") //need to go the new routable route
.WithPart("BodyAspect"));
Services.Notifier.Information(T("Created content type: {0}", contentTypeDefinition.DisplayName));
Services.Notifier.Information(T("Created content type: {0}", displayName));
}
public void AlterTypeDefinition(ContentTypeDefinition contentTypeDefinition) {

View File

@@ -6,7 +6,7 @@ namespace Orchard.ContentTypes.Services {
public interface IContentDefinitionService : IDependency {
IEnumerable<ContentTypeDefinition> GetTypeDefinitions();
ContentTypeDefinition GetTypeDefinition(string name);
void AddTypeDefinition(ContentTypeDefinition contentTypeDefinition);
void AddTypeDefinition(string displayName);
void AlterTypeDefinition(ContentTypeDefinition contentTypeDefinition);
void RemoveTypeDefinition(string name);

View File

@@ -66,6 +66,7 @@ namespace Orchard.ContentTypes.ViewModels {
}
public string Name { get; set; }
public IEnumerable<TemplateViewModel> Templates { get; set; }
public IEnumerable<EditPartFieldViewModel> Fields { get; set; }
public SettingsDictionary Settings { get; set; }
}
@@ -81,6 +82,7 @@ namespace Orchard.ContentTypes.ViewModels {
}
public string Name { get; set; }
public IEnumerable<TemplateViewModel> Templates { get; set; }
public EditFieldViewModel FieldDefinition { get; set; }
public SettingsDictionary Settings { get; set; }
}

View File

@@ -9,7 +9,7 @@ using (Html.BeginFormAntiForgeryPost()) { %>
<%--// has unintended consequences (renamging the part) - changing the name creates a new part of that name--%>
<%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium"}) %>
</fieldset>
<%:Html.EditorFor(m => m.Settings, "Settings", "") %>
<% Html.RenderTemplates(Model.Templates); %>
<h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Fields, "Fields", "") %>

View File

@@ -10,7 +10,7 @@
<button type="submit" title="<%:T("Remove") %>"><%:T("Remove") %></button>
<% } %> --%>
</div>
<%:Html.EditorFor(m => m.Settings, "Settings", "") %>
<% Html.RenderTemplates(Model.Templates); %>
<%:Html.HiddenFor(m => m.Name) %>
<%:Html.HiddenFor(m => m.FieldDefinition.Name) %>
</fieldset>

View File

@@ -0,0 +1,19 @@
using System;
using Orchard.Data.Migration;
namespace Orchard.Indexing.DataMigrations {
public class IndexingDataMigration : DataMigrationImpl {
public int Create() {
SchemaBuilder.CreateTable("IndexingTaskRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("Action")
.Column<DateTime>("CreatedUtc")
.Column<int>("ContentItemRecord_id")
);
return 0010;
}
}
}

View File

@@ -56,12 +56,14 @@
<ItemGroup>
<Content Include="Module.txt" />
<Content Include="Views\Admin\Index.ascx" />
<Content Include="Views\DefinitionTemplates\IndexingSettings.ascx" />
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Commands\IndexingCommands.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\IndexingDataMigration.cs" />
<Compile Include="Handlers\CreateIndexingTaskHandler.cs" />
<Compile Include="Models\IndexingTask.cs" />
<Compile Include="Models\IndexingTaskRecord.cs" />
@@ -77,6 +79,7 @@
<Compile Include="Models\LuceneSearchHit.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\IndexService.cs" />
<Compile Include="Settings\IndexingSettings.cs" />
<Compile Include="ViewModels\IndexViewModel.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -6,6 +6,7 @@ using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Orchard.Environment.Configuration;
using Orchard.FileSystems.AppData;
@@ -141,13 +142,18 @@ namespace Orchard.Indexing.Services {
return;
}
// Remove any previous document for these content items
Delete(indexName, indexDocuments.Select(i => i.ContentItemId));
var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
LuceneDocumentIndex current = null;
try {
foreach ( var indexDocument in indexDocuments ) {
current = indexDocument;
var doc = CreateDocument(indexDocument);
writer.AddDocument(doc);
Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId);
}
@@ -166,30 +172,28 @@ namespace Orchard.Indexing.Services {
}
public void Delete(string indexName, IEnumerable<int> documentIds) {
if ( documentIds.AsQueryable().Count() == 0 ) {
if (!documentIds.Any()) {
return;
}
var reader = IndexReader.Open(GetDirectory(indexName), false);
var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
try {
foreach (var id in documentIds) {
try {
var term = new Term("id", id.ToString());
if (reader.DeleteDocuments(term) != 0) {
Logger.Error("The document [{0}] could not be removed from the index [{1}]", id, indexName);
}
else {
Logger.Debug("Document [{0}] removed from index", id);
}
}
catch (Exception ex) {
Logger.Error(ex, "An unexpected error occured while removing the document [{0}] from the index [{1}].", id, indexName);
var query = new BooleanQuery();
try {
foreach (var id in documentIds) {
query.Add(new BooleanClause(new TermQuery(new Term("id", id.ToString())), BooleanClause.Occur.SHOULD));
}
writer.DeleteDocuments(query);
}
catch (Exception ex) {
Logger.Error(ex, "An unexpected error occured while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName);
}
}
finally {
reader.Close();
writer.Close();
}
}

View File

@@ -0,0 +1,26 @@
using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models;
using Orchard.ContentManagement.ViewModels;
namespace Orchard.Indexing.Settings {
public class IndexingSettings {
public bool IncludeInIndex { get; set; }
}
public class IndexingSettingsHooks : ContentDefinitionEditorEventsBase {
public override IEnumerable<TemplateViewModel> PartFieldEditor(ContentPartDefinition.Field definition) {
var model = definition.Settings.GetModel<IndexingSettings>();
yield return DefinitionTemplate(model);
}
public override IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel) {
var model = new IndexingSettings();
updateModel.TryUpdateModel(model, "IndexingSettings", null, null);
builder.WithSetting("IndexingSettings.IncludeInIndex", model.IncludeInIndex ? true.ToString() : null);
yield return DefinitionTemplate(model);
}
}
}

View File

@@ -0,0 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Indexing.Settings.IndexingSettings>" %>
<%@ Import Namespace="Orchard.Mvc.Html" %>
<fieldset>
<%:Html.EditorFor(m=>m.IncludeInIndex) %>
<label for="<%:Html.FieldIdFor(m => m.IncludeInIndex) %>" class="forcheckbox"><%:T("Include in the index") %></label>
<%:Html.ValidationMessageFor(m => m.IncludeInIndex)%>
</fieldset>

View File

@@ -0,0 +1,16 @@
using Orchard.Data.Migration;
namespace Orchard.Media.DataMigrations {
public class MediaDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Media_MediaSettingsRecord (Id INTEGER not null, RootMediaFolder TEXT, primary key (Id));
SchemaBuilder.CreateTable("MediaSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("RootMediaFolder")
);
return 0010;
}
}
}

View File

@@ -71,6 +71,7 @@
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\MediaDataMigration.cs" />
<Compile Include="Helpers\MediaHelpers.cs" />
<Compile Include="Models\MediaSettings.cs" />
<Compile Include="Handlers\MediaSettingsHandler.cs" />

View File

@@ -0,0 +1,39 @@
using Orchard.Data.Migration;
namespace Orchard.Roles.DataMigrations {
public class RolesDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Roles_PermissionRecord (Id integer, Name TEXT, ModuleName TEXT, Description TEXT, primary key (Id));
SchemaBuilder.CreateTable("PermissionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
.Column<string>("ModuleName")
.Column<string>("Description")
);
//CREATE TABLE Orchard_Roles_RoleRecord (Id integer, Name TEXT, primary key (Id));
SchemaBuilder.CreateTable("RoleRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
);
//CREATE TABLE Orchard_Roles_RolesPermissionsRecord (Id integer, Role_id INTEGER, Permission_id INTEGER, RoleRecord_Id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("RolesPermissionsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("Role_id")
.Column<int>("Permission_id")
.Column<int>("RoleRecord_Id")
);
//CREATE TABLE Orchard_Roles_UserRolesRecord (Id integer, UserId INTEGER, Role_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("UserRolesRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("UserId")
.Column<int>("Role_id")
);
return 0010;
}
}
}

View File

@@ -67,6 +67,7 @@
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\RolesDataMigration.cs" />
<Compile Include="Drivers\UserRolesDriver.cs" />
<Compile Include="DefaultRoleUpdater.cs" />
<Compile Include="Models\IUserRoles.cs" />

View File

@@ -0,0 +1,20 @@
using Orchard.Data.Migration;
namespace Orchard.Sandbox.DataMigrations {
public class SandboxDataMigration : DataMigrationImpl {
public int Create() {
SchemaBuilder.CreateTable("SandboxPageRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
);
SchemaBuilder.CreateTable("SandboxSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<bool>("AllowAnonymousEdits")
);
return 0010;
}
}
}

View File

@@ -67,6 +67,7 @@
<ItemGroup>
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\PageController.cs" />
<Compile Include="DataMigrations\SandBoxDataMigration.cs" />
<Compile Include="Drivers\SandboxPageDriver.cs" />
<Compile Include="Models\SandboxPage.cs" />
<Compile Include="Handlers\SandboxContentHandler.cs" />

View File

@@ -0,0 +1,17 @@
using Orchard.Data.Migration;
namespace Orchard.Search.DataMigrations {
public class SearchDataMigration : DataMigrationImpl {
public int Create() {
SchemaBuilder.CreateTable("SearchSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<bool>("FilterCulture")
.Column<string>("SearchedFields")
);
return 0010;
}
}
}

View File

@@ -66,6 +66,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Controllers\SearchController.cs" />
<Compile Include="DataMigrations\SearchDataMigration.cs" />
<Compile Include="Filters\SearchFilter.cs" />
<Compile Include="Models\SearchSettings.cs" />
<Compile Include="Models\SearchSettingsRecord.cs" />

View File

@@ -43,6 +43,7 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\autofac\Autofac.dll</HintPath>
</Reference>
<Reference Include="NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.ComponentModel.DataAnnotations">

View File

@@ -5,9 +5,13 @@ using Orchard.Comments.Models;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.Core.Common.Models;
using Orchard.Core.Common.Settings;
using Orchard.Core.Navigation.Models;
using Orchard.Core.Settings.Models;
using Orchard.Data;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Providers;
using Orchard.Data.Migration.Schema;
using Orchard.Environment;
using Orchard.Environment.Configuration;
using Orchard.Environment.ShellBuilders;
@@ -19,6 +23,8 @@ using Orchard.Security;
using Orchard.Settings;
using Orchard.Themes;
using Orchard.UI.Notify;
using Orchard.Environment.State;
using Orchard.Data.Migration;
namespace Orchard.Setup.Services {
public class SetupService : ISetupService {
@@ -27,6 +33,7 @@ namespace Orchard.Setup.Services {
private readonly IShellSettingsManager _shellSettingsManager;
private readonly IShellContainerFactory _shellContainerFactory;
private readonly ICompositionStrategy _compositionStrategy;
private readonly IProcessingEngine _processingEngine;
public SetupService(
ShellSettings shellSettings,
@@ -34,12 +41,14 @@ namespace Orchard.Setup.Services {
IOrchardHost orchardHost,
IShellSettingsManager shellSettingsManager,
IShellContainerFactory shellContainerFactory,
ICompositionStrategy compositionStrategy) {
ICompositionStrategy compositionStrategy,
IProcessingEngine processingEngine) {
_shellSettings = shellSettings;
_orchardHost = orchardHost;
_shellSettingsManager = shellSettingsManager;
_shellContainerFactory = shellContainerFactory;
_compositionStrategy = compositionStrategy;
_processingEngine = processingEngine;
T = NullLocalizer.Instance;
}
@@ -97,7 +106,17 @@ namespace Orchard.Setup.Services {
// initialize database explicitly, and store shell descriptor
var bootstrapLifetimeScope = _shellContainerFactory.CreateContainer(shellSettings, shellToplogy);
using (var environment = new StandaloneEnvironment(bootstrapLifetimeScope)) {
environment.Resolve<ISessionFactoryHolder>().CreateDatabase();
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>() );
schemaBuilder.CreateTable("Orchard_Framework_DataMigrationRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("DataMigrationClass")
.Column<int>("Current"));
var dataMigrationManager = environment.Resolve<IDataMigrationManager>();
dataMigrationManager.Update("Orchard.Framework");
dataMigrationManager.Update("Settings");
environment.Resolve<IShellDescriptorManager>().UpdateShellDescriptor(
0,
@@ -105,6 +124,10 @@ namespace Orchard.Setup.Services {
shellDescriptor.Parameters);
}
// in effect "pump messages" see PostMessage circa 1980
while ( _processingEngine.AreTasksPending() )
_processingEngine.ExecuteNextTask();
// creating a standalone environment.
// in theory this environment can be used to resolve any normal components by interface, and those
@@ -150,6 +173,7 @@ namespace Orchard.Setup.Services {
contentDefinitionManager.AlterTypeDefinition("BlogPost", cfg => cfg.DisplayedAs("Blog Post").WithPart("HasComments").WithPart("HasTags").WithPart("Localized"));
contentDefinitionManager.AlterTypeDefinition("Page", cfg => cfg.DisplayedAs("Page").WithPart("HasComments").WithPart("HasTags").WithPart("Localized"));
contentDefinitionManager.AlterTypeDefinition("SandboxPage", cfg => cfg.DisplayedAs("Sandbox Page").WithPart("HasComments").WithPart("HasTags").WithPart("Localized"));
contentDefinitionManager.AlterPartDefinition("BodyAspect", cfg => cfg.WithSetting("BodyPartSettings.FlavorDefault", BodyPartSettings.FlavorDefaultDefault));
// create home page as a CMS page
var page = contentManager.Create("Page", VersionOptions.Draft);

View File

@@ -8,7 +8,9 @@ using Orchard.Commands.Builtin;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Providers;
using Orchard.Data.Migration;
using Orchard.Environment.Extensions;
using Orchard.Localization;
using Orchard.Mvc;
@@ -50,6 +52,9 @@ namespace Orchard.Setup {
builder.RegisterType<SafeModeText>().As<IText>().InstancePerLifetimeScope();
builder.RegisterType<SafeModeSiteService>().As<ISiteService>().InstancePerLifetimeScope();
builder.RegisterType<DefaultDataMigrationInterpreter>().As<IDataMigrationInterpreter>().InstancePerLifetimeScope();
builder.RegisterType<DataMigrationManager>().As<IDataMigrationManager>().InstancePerLifetimeScope();
}

View File

@@ -0,0 +1,23 @@
using Orchard.Data.Migration;
namespace Orchard.Tags.DataMigrations {
public class TagsDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Tags_Tag (Id integer, TagName TEXT, primary key (Id));
SchemaBuilder.CreateTable("Tag", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("TagName")
);
//CREATE TABLE Orchard_Tags_TagsContentItems (Id integer, TagId INTEGER, ContentItemId INTEGER, primary key (Id));
SchemaBuilder.CreateTable("TagsContentItems", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("TagId")
.Column<int>("ContentItemId")
);
return 0010;
}
}
}

View File

@@ -67,6 +67,7 @@
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\TagsDataMigration.cs" />
<Compile Include="Models\TagsContentItems.cs" />
<Compile Include="Services\ITagService.cs" />
<Compile Include="ViewModels\EditTagsViewModel.cs" />

View File

@@ -0,0 +1,28 @@
using Orchard.Data.Migration;
namespace Orchard.Themes.DataMigrations {
public class ThemesDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Themes_ThemeRecord (Id INTEGER not null, ThemeName TEXT, DisplayName TEXT, Description TEXT, Version TEXT, Author TEXT, HomePage TEXT, Tags TEXT, primary key (Id));
SchemaBuilder.CreateTable("ThemeRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("ThemeName")
.Column<string>("DisplayName")
.Column<string>("Description")
.Column<string>("Version")
.Column<string>("Author")
.Column<string>("HomePage")
.Column<string>("Tags")
);
//CREATE TABLE Orchard_Themes_ThemeSiteSettingsRecord (Id INTEGER not null, CurrentThemeName TEXT, primary key (Id));
SchemaBuilder.CreateTable("ThemeSiteSettingsRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("CurrentThemeName")
);
return 0010;
}
}
}

View File

@@ -67,6 +67,7 @@
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\ThemesDataMigration.cs" />
<Compile Include="DesignerNotes\ZoneManagerEvents.cs" />
<Compile Include="Handlers\ThemeSiteSettingsHandler.cs" />
<Compile Include="Models\Theme.cs" />

View File

@@ -0,0 +1,22 @@
using Orchard.Data.Migration;
using Orchard.Data.Migration;
namespace Orchard.Users.DataMigrations {
public class UsersDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Users_UserRecord (Id INTEGER not null, UserName TEXT, Email TEXT, NormalizedUserName TEXT, Password TEXT, PasswordFormat TEXT, PasswordSalt TEXT, primary key (Id));
SchemaBuilder.CreateTable("UserRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("UserName")
.Column<string>("Email")
.Column<string>("NormalizedUserName")
.Column<string>("Password")
.Column<string>("PasswordFormat")
.Column<string>("PasswordSalt")
);
return 0010;
}
}
}

View File

@@ -67,6 +67,7 @@
<ItemGroup>
<Compile Include="Controllers\AccountController.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="DataMigrations\UsersDataMigration.cs" />
<Compile Include="Drivers\UserDriver.cs" />
<Compile Include="Models\User.cs" />
<Compile Include="Handlers\UserHandler.cs" />

View File

@@ -16,6 +16,7 @@ namespace Orchard.ContentManagement {
public ContentTypeDefinition TypeDefinition { get { return ContentItem.TypeDefinition; } }
public ContentTypeDefinition.Part TypePartDefinition { get; set; }
public ContentPartDefinition PartDefinition { get { return TypePartDefinition.PartDefinition; } }
public SettingsDictionary Settings { get { return TypePartDefinition.Settings; } }
public IEnumerable<ContentField> Fields { get { return _fields; } }

View File

@@ -0,0 +1,41 @@
using Orchard.Data.Migration;
using Orchard.Data.Migration;
using Orchard.Environment.Extensions.Models;
namespace Orchard.ContentManagement.DataMigrations {
public class FrameworkDataMigration : DataMigrationImpl {
public int Create() {
//CREATE TABLE Orchard_Framework_ContentItemRecord (Id integer, Data TEXT, ContentType_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ContentItemRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Data")
.Column<int>("ContentType_id")
);
//CREATE TABLE Orchard_Framework_ContentItemVersionRecord (Id integer, Number INTEGER, Published INTEGER, Latest INTEGER, Data TEXT, ContentItemRecord_id INTEGER, primary key (Id));
SchemaBuilder.CreateTable("ContentItemVersionRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<int>("Number")
.Column<bool>("Published")
.Column<bool>("Latest")
.Column<string>("Data")
.Column<int>("ContentItemRecord_id")
);
//CREATE TABLE Orchard_Framework_ContentTypeRecord (Id integer, Name TEXT, primary key (Id));
SchemaBuilder.CreateTable("ContentTypeRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Name")
);
//CREATE TABLE Orchard_Framework_CultureRecord (Id integer, Culture TEXT, primary key (Id));
SchemaBuilder.CreateTable("CultureRecord", table => table
.Column<int>("Id", column => column.PrimaryKey())
.Column<string>("Culture")
);
return 0010;
}
}
}

View File

@@ -25,6 +25,8 @@ namespace Orchard.ContentManagement.MetaData.Builders {
}
}
public string Name { get { return _name; } }
public ContentPartDefinition Build() {
return new ContentPartDefinition(_name, _fields, _settings);
}

View File

@@ -9,9 +9,13 @@ namespace Orchard.ContentManagement.MetaData {
public interface IContentDefinitionEditorEvents : IEventHandler {
IEnumerable<TemplateViewModel> TypeEditor(ContentTypeDefinition definition);
IEnumerable<TemplateViewModel> TypePartEditor(ContentTypeDefinition.Part definition);
IEnumerable<TemplateViewModel> PartEditor(ContentPartDefinition definition);
IEnumerable<TemplateViewModel> PartFieldEditor(ContentPartDefinition.Field definition);
IEnumerable<TemplateViewModel> TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel);
IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypeDefinitionBuilder.PartConfigurer builder, IUpdateModel updateModel);
IEnumerable<TemplateViewModel> PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel);
IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel);
}
public abstract class ContentDefinitionEditorEventsBase : IContentDefinitionEditorEvents {
@@ -23,6 +27,14 @@ namespace Orchard.ContentManagement.MetaData {
return Enumerable.Empty<TemplateViewModel>();
}
public virtual IEnumerable<TemplateViewModel> PartEditor(ContentPartDefinition definition) {
return Enumerable.Empty<TemplateViewModel>();
}
public virtual IEnumerable<TemplateViewModel> PartFieldEditor(ContentPartDefinition.Field definition) {
return Enumerable.Empty<TemplateViewModel>();
}
public virtual IEnumerable<TemplateViewModel> TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel) {
return Enumerable.Empty<TemplateViewModel>();
}
@@ -31,6 +43,14 @@ namespace Orchard.ContentManagement.MetaData {
return Enumerable.Empty<TemplateViewModel>();
}
public virtual IEnumerable<TemplateViewModel> PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) {
return Enumerable.Empty<TemplateViewModel>();
}
public virtual IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartDefinitionBuilder.FieldConfigurer builder, IUpdateModel updateModel) {
return Enumerable.Empty<TemplateViewModel>();
}
protected static TemplateViewModel DefinitionTemplate<TModel>(TModel model) {
return new TemplateViewModel(model, typeof(TModel).Name) {
TemplateName = "DefinitionTemplates/" + typeof(TModel).Name

View File

@@ -1,5 +1,3 @@
using System;
using Orchard.ContentManagement.FieldStorage;
using Orchard.ContentManagement.FieldStorage.InfosetStorage;
namespace Orchard.ContentManagement.Records {

View File

@@ -1,7 +1,7 @@
using System;
using Orchard.Commands;
namespace Orchard.DataMigration.Commands {
namespace Orchard.Data.Migration.Commands {
public class DataMigrationCommands : DefaultOrchardCommandHandler {
private readonly IDataMigrationManager _dataMigrationManager;

View File

@@ -1,11 +1,13 @@
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.Extensions.Models;
namespace Orchard.DataMigration {
namespace Orchard.Data.Migration {
/// <summary>
/// Data Migration classes can inherit from this class to get a SchemaBuilder instance configured with the current tenant database prefix
/// </summary>
public abstract class DataMigrationImpl : IDataMigration {
public abstract string Feature { get; }
public SchemaBuilder SchemaBuilder { get; set; }
public virtual Feature Feature { get; set; }
}
}

View File

@@ -1,7 +1,7 @@
using Orchard.Environment;
using Orchard.Environment.Extensions.Models;
namespace Orchard.DataMigration {
namespace Orchard.Data.Migration {
/// <summary>
/// Responsible for executing data migration tasks when a feature is enabled for the first time
/// 1) Initial install of a module:
@@ -23,9 +23,7 @@ namespace Orchard.DataMigration {
public void Install(Feature feature) {
var featureName = feature.Descriptor.Name;
if ( !_dataMigrationManager.IsFeatureAlreadyInstalled(featureName) ) {
_dataMigrationManager.Update(featureName);
}
_dataMigrationManager.Update(featureName);
}
public void Enable(Feature feature) {

View File

@@ -3,33 +3,30 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using Orchard.Data;
using Orchard.DataMigration.Interpreters;
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Migration.Records;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.Extensions;
using Orchard.Environment.State;
using Orchard.Logging;
namespace Orchard.DataMigration {
namespace Orchard.Data.Migration {
/// <summary>
/// Reponsible for maintaining the knowledge of data migration in a per tenant table
/// </summary>
public class DataMigrationManager : IDataMigrationManager {
private readonly IEnumerable<IDataMigration> _dataMigrations;
private readonly IRepository<DataMigrationRecord> _dataMigrationRepository;
private readonly IDataMigrationGenerator _dataMigrationGenerator;
private readonly IExtensionManager _extensionManager;
private readonly IDataMigrationInterpreter _interpreter;
public DataMigrationManager(
IEnumerable<IDataMigration> dataMigrations,
IRepository<DataMigrationRecord> dataMigrationRepository,
IDataMigrationGenerator dataMigrationGenerator,
IExtensionManager extensionManager,
IDataMigrationInterpreter interpreter) {
_dataMigrations = dataMigrations;
_dataMigrationRepository = dataMigrationRepository;
_dataMigrationGenerator = dataMigrationGenerator;
_extensionManager = extensionManager;
_interpreter = interpreter;
Logger = NullLogger.Instance;
@@ -57,7 +54,7 @@ namespace Orchard.DataMigration {
// try to resolve a Create method
if ( GetCreateMethod(dataMigration) != null ) {
features.Add(dataMigration.Feature);
features.Add(dataMigration.Feature.Descriptor.Name);
continue;
}
}
@@ -65,7 +62,7 @@ namespace Orchard.DataMigration {
var lookupTable = CreateUpgradeLookupTable(dataMigration);
if(lookupTable.ContainsKey(current)) {
features.Add(dataMigration.Feature);
features.Add(dataMigration.Feature.Descriptor.Name);
}
}
@@ -80,6 +77,8 @@ namespace Orchard.DataMigration {
public void Update(string feature){
Logger.Information("Updating {0}", feature);
// proceed with dependent features first, whatever the module it's in
var dependencies = ShellStateCoordinator.OrderByDependencies(_extensionManager.AvailableExtensions()
.SelectMany(ext => ext.Features))
@@ -115,10 +114,6 @@ namespace Orchard.DataMigration {
if(createMethod != null) {
current = (int)createMethod.Invoke(migration, new object[0]);
}
else {
var commands = _dataMigrationGenerator.CreateCommands();
/// TODO: Execute commands and define current version number
}
}
var lookupTable = CreateUpgradeLookupTable(migration);
@@ -175,7 +170,6 @@ namespace Orchard.DataMigration {
}
private DataMigrationRecord GetDataMigrationRecord(IDataMigration tempMigration) {
return _dataMigrationRepository.Table
.Where(dm => dm.DataMigrationClass == tempMigration.GetType().FullName)
@@ -187,11 +181,11 @@ namespace Orchard.DataMigration {
/// </summary>
private IEnumerable<IDataMigration> GetDataMigrations(string feature) {
var migrations = _dataMigrations
.Where(dm => String.Equals(dm.Feature, feature, StringComparison.OrdinalIgnoreCase))
.Where(dm => String.Equals(dm.Feature.Descriptor.Name, feature, StringComparison.OrdinalIgnoreCase))
.ToList();
foreach (var migration in migrations.OfType<DataMigrationImpl>()) {
migration.SchemaBuilder = new SchemaBuilder(_interpreter);
migration.SchemaBuilder = new SchemaBuilder(_interpreter, migration.Feature.Descriptor.Name.Replace(".", "_") + "_");
}
return migrations;

View File

@@ -0,0 +1,14 @@
using System.Collections.Generic;
using System.Linq;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.ShellBuilders.Models;
namespace Orchard.Data.Migration {
public class DefaultDataMigrationGenerator : IDataMigrationGenerator {
public IEnumerable<ISchemaBuilderCommand> CreateCommands(IEnumerable<RecordBlueprint> records) {
return Enumerable.Empty<ISchemaBuilderCommand>();
}
}
}

View File

@@ -0,0 +1,7 @@
using Orchard.Environment.Extensions.Models;
namespace Orchard.Data.Migration {
public interface IDataMigration : IDependency {
Feature Feature { get; }
}
}

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
using FluentNHibernate.Cfg;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.ShellBuilders.Models;
namespace Orchard.Data.Migration {
// Builds and runs the representative migration create calls
public interface IDataMigrationGenerator : IDependency {
IEnumerable<ISchemaBuilderCommand> CreateCommands(IEnumerable<RecordBlueprint> records);
}
}

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Orchard.DataMigration {
namespace Orchard.Data.Migration {
public interface IDataMigrationManager : IDependency {
/// <summary>
/// Whether a feature has already been installed, i.e. one of its Data Migration class has already been processed

View File

@@ -6,12 +6,11 @@ using System.Text;
using NHibernate;
using NHibernate.Dialect;
using NHibernate.SqlTypes;
using Orchard.Data;
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Schema;
using Orchard.Environment.Configuration;
using Orchard.Logging;
namespace Orchard.DataMigration.Interpreters {
namespace Orchard.Data.Migration.Interpreters {
public class DefaultDataMigrationInterpreter : IDataMigrationInterpreter {
private readonly ShellSettings _shellSettings;
private readonly IEnumerable<ICommandInterpreter> _commandInterpreters;
@@ -35,25 +34,30 @@ namespace Orchard.DataMigration.Interpreters {
get { return _sqlStatements; }
}
public void Visit(SchemaCommand command) {
switch (command.Type) {
public void Visit(ISchemaBuilderCommand command) {
var schemaCommand = command as SchemaCommand;
if (schemaCommand == null) {
return;
}
switch ( schemaCommand.Type ) {
case SchemaCommandType.CreateTable:
Visit((CreateTableCommand)command);
Visit((CreateTableCommand)schemaCommand);
break;
case SchemaCommandType.AlterTable:
Visit((AlterTableCommand)command);
Visit((AlterTableCommand)schemaCommand);
break;
case SchemaCommandType.DropTable:
Visit((DropTableCommand)command);
Visit((DropTableCommand)schemaCommand);
break;
case SchemaCommandType.SqlStatement:
Visit((SqlStatementCommand)command);
Visit((SqlStatementCommand)schemaCommand);
break;
case SchemaCommandType.CreateForeignKey:
Visit((CreateForeignKeyCommand)command);
Visit((CreateForeignKeyCommand)schemaCommand);
break;
case SchemaCommandType.DropForeignKey:
Visit((DropForeignKeyCommand)command);
Visit((DropForeignKeyCommand)schemaCommand);
break;
}
}
@@ -81,6 +85,18 @@ namespace Orchard.DataMigration.Interpreters {
Visit(builder, createColumn);
}
var primaryKeys = command.TableCommands.OfType<CreateColumnCommand>().Where(ccc => ccc.IsPrimaryKey).Select(ccc=>ccc.ColumnName);
if(primaryKeys.Any()) {
if ( appendComma ) {
builder.Append(", ");
}
builder.Append(_dialect.PrimaryKeyString)
.Append(" ( ")
.Append(String.Join(", ", primaryKeys.ToArray()))
.Append(" )");
}
builder.Append(" )");
_sqlStatements.Add(builder.ToString());
@@ -293,10 +309,6 @@ namespace Orchard.DataMigration.Interpreters {
if ( command.IsUnique && _dialect.SupportsUnique ) {
builder.Append(" unique");
}
if ( command.IsPrimaryKey ) {
builder.Append(Space).Append(_dialect.PrimaryKeyString);
}
}
private void RunPendingStatements() {

View File

@@ -1,6 +1,6 @@
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Schema;
namespace Orchard.DataMigration.Interpreters {
namespace Orchard.Data.Migration.Interpreters {
/// <summary>
/// This interface can be implemented to provide a data migration behavior
/// </summary>

View File

@@ -1,8 +1,8 @@
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Schema;
namespace Orchard.DataMigration.Interpreters {
namespace Orchard.Data.Migration.Interpreters {
public interface IDataMigrationInterpreter : IDependency{
void Visit(SchemaCommand command);
void Visit(ISchemaBuilderCommand command);
void Visit(CreateTableCommand command);
void Visit(DropTableCommand command);
void Visit(AlterTableCommand command);

View File

@@ -1,14 +1,14 @@
using Orchard.DataMigration.Schema;
using Orchard.Data.Migration.Schema;
namespace Orchard.DataMigration.Interpreters {
public class SqLiteCommandInterpreter :
namespace Orchard.Data.Migration.Interpreters {
public class SqLiteCommandInterpreter :
ICommandInterpreter<DropColumnCommand>,
ICommandInterpreter<AlterColumnCommand>,
ICommandInterpreter<AlterColumnCommand>,
ICommandInterpreter<CreateForeignKeyCommand>,
ICommandInterpreter<DropForeignKeyCommand>,
ICommandInterpreter<AddIndexCommand>,
ICommandInterpreter<DropIndexCommand> {
public string[] CreateStatements(DropColumnCommand command) {
return new string[0];
}
@@ -36,5 +36,5 @@ namespace Orchard.DataMigration.Interpreters {
public string DataProvider {
get { return "SQLite"; }
}
}
}
}

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration {
namespace Orchard.Data.Migration.Records {
public class DataMigrationRecord {
public virtual int Id { get; set; }
public virtual string DataMigrationClass { get; set; }

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class AddColumnCommand : CreateColumnCommand {
public AddColumnCommand(string tableName, string name) : base(tableName, name) {
}

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class AddIndexCommand : TableCommand {
public string IndexName { get; set; }

View File

@@ -1,6 +1,6 @@
using System.Data;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class AlterColumnCommand : ColumnCommand {
public AlterColumnCommand(string tableName, string columnName)
: base(tableName, columnName) {

View File

@@ -1,7 +1,7 @@
using System;
using System.Data;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class AlterTableCommand : SchemaCommand {
public AlterTableCommand(string name)
: base(name, SchemaCommandType.AlterTable) {

View File

@@ -1,6 +1,6 @@
using System.Data;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class ColumnCommand : TableCommand {
public string ColumnName { get; set; }

View File

@@ -1,6 +1,6 @@
using System.Data;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class CreateColumnCommand : ColumnCommand {
public CreateColumnCommand(string tableName, string name) : base(tableName, name) {
IsNotNull = false;

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class CreateForeignKeyCommand : SchemaCommand {
public string[] DestColumns { get; private set; }

View File

@@ -0,0 +1,54 @@
using System;
using System.Data;
namespace Orchard.Data.Migration.Schema {
public class CreateTableCommand : SchemaCommand {
public CreateTableCommand(string name)
: base(name, SchemaCommandType.CreateTable) {
}
public CreateTableCommand Column(string columnName, DbType dbType, Action<CreateColumnCommand> column = null) {
var command = new CreateColumnCommand(Name, columnName);
command.WithType(dbType);
if ( column != null ) {
column(command);
}
TableCommands.Add(command);
return this;
}
public CreateTableCommand Column<T>(string columnName, Action<CreateColumnCommand> column = null) {
var dbType = System.Data.DbType.Object;
switch(System.Type.GetTypeCode(typeof(T))) {
case TypeCode.String :
dbType = DbType.String;
break;
case TypeCode.Int32:
dbType = DbType.Int32;
break;
case TypeCode.DateTime:
dbType = DbType.DateTime;
break;
case TypeCode.Boolean:
dbType = DbType.Boolean;
break;
default:
Enum.TryParse(System.Type.GetTypeCode(typeof (T)).ToString(), true, out dbType);
break;
}
return Column(columnName, dbType, column);
}
public CreateTableCommand ContentPartRecord() {
/// TODO: Call Column() with necessary information for content part records
return this;
}
public CreateTableCommand VersionedContentPartRecord() {
/// TODO: Call Column() with necessary information for content part records
return this;
}
}
}

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class DropColumnCommand : ColumnCommand {
public DropColumnCommand(string tableName, string columnName)

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class DropForeignKeyCommand : SchemaCommand {
public string SrcTable { get; private set; }

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class DropIndexCommand : TableCommand {
public string IndexName { get; set; }

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class DropTableCommand : SchemaCommand {
public DropTableCommand(string name)
: base(name, SchemaCommandType.DropTable) {

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public interface ISchemaBuilderCommand {
}
}

View File

@@ -1,29 +1,32 @@
using System;
using Orchard.DataMigration.Interpreters;
using Orchard.Data.Migration.Interpreters;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class SchemaBuilder {
private readonly IDataMigrationInterpreter _interpreter;
public SchemaBuilder(IDataMigrationInterpreter interpreter) {
private readonly string _featurePrefix;
public SchemaBuilder(IDataMigrationInterpreter interpreter, string featurePrefix = null) {
_interpreter = interpreter;
_featurePrefix = featurePrefix;
}
public SchemaBuilder CreateTable(string name, Action<CreateTableCommand> table) {
var createTable = new CreateTableCommand(name);
var createTable = new CreateTableCommand(String.Concat(_featurePrefix, name));
table(createTable);
Run(createTable);
return this;
}
public SchemaBuilder AlterTable(string name, Action<AlterTableCommand> table) {
var alterTable = new AlterTableCommand(name);
var alterTable = new AlterTableCommand(String.Concat(_featurePrefix, name));
table(alterTable);
Run(alterTable);
return this;
}
public SchemaBuilder DropTable(string name) {
var deleteTable = new DropTableCommand(name);
var deleteTable = new DropTableCommand(String.Concat(_featurePrefix, name));
Run(deleteTable);
return this;
}
@@ -37,18 +40,18 @@ namespace Orchard.DataMigration.Schema {
return this;
}
private void Run(SchemaCommand command) {
private void Run(ISchemaBuilderCommand command) {
_interpreter.Visit(command);
}
public SchemaBuilder CreateForeignKey(string name, string srcTable, string[] srcColumns, string destTable, string[] destColumns) {
var command = new CreateForeignKeyCommand(name, srcTable, srcColumns, destTable, destColumns);
var command = new CreateForeignKeyCommand(name, String.Concat(_featurePrefix, srcTable), srcColumns, String.Concat(_featurePrefix, destTable), destColumns);
Run(command);
return this;
}
public SchemaBuilder DropForeignKey(string srcTable, string name) {
var command = new DropForeignKeyCommand(srcTable, name);
var command = new DropForeignKeyCommand(String.Concat(_featurePrefix, srcTable), name);
Run(command);
return this;
}

View File

@@ -1,7 +1,7 @@
using System.Collections.Generic;
using JetBrains.Annotations;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public abstract class SchemaCommand : ISchemaBuilderCommand {
protected SchemaCommand(string name, SchemaCommandType type ) {
TableCommands = new List<TableCommand>();

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class SqlStatementCommand : SchemaCommand {
protected readonly List<string> _providers;
public SqlStatementCommand(string sql)

View File

@@ -1,4 +1,4 @@
namespace Orchard.DataMigration.Schema {
namespace Orchard.Data.Migration.Schema {
public class TableCommand : ISchemaBuilderCommand{
public string TableName { get; private set; }

View File

@@ -1,4 +1,7 @@
using NHibernate;
using System;
using FluentNHibernate.Cfg;
using NHibernate;
using NHibernate.Cfg;
namespace Orchard.Data.Providers {
public interface IDataServicesProvider : ITransientDependency {

View File

@@ -2,4 +2,5 @@ namespace Orchard.Data.Providers {
public interface IDataServicesProviderFactory : IDependency {
IDataServicesProvider CreateProvider(DataServiceParameters sessionFactoryParameters);
}
}

View File

@@ -67,7 +67,7 @@ namespace Orchard.Data {
public ISessionFactory GetSessionFactory() {
lock (this) {
if (_sessionFactory == null) {
_sessionFactory = BuildSessionFactory(false /*createDatabase*/, true /*updateSchema*/);
_sessionFactory = BuildSessionFactory(false /*createDatabase*/, false /*updateSchema*/);
}
}
return _sessionFactory;

View File

@@ -1,10 +0,0 @@
using System.Collections.Generic;
using System.Linq;
namespace Orchard.DataMigration {
public class DefaultDataMigrationGenerator : IDataMigrationGenerator {
public IEnumerable<IDataMigrationCommand> CreateCommands() {
return Enumerable.Empty<IDataMigrationCommand>();
}
}
}

View File

@@ -1,5 +0,0 @@
namespace Orchard.DataMigration {
public interface IDataMigration : IDependency {
string Feature { get; }
}
}

View File

@@ -1,4 +0,0 @@
namespace Orchard.DataMigration {
public interface IDataMigrationCommand {
}
}

View File

@@ -1,8 +0,0 @@
using System.Collections.Generic;
namespace Orchard.DataMigration {
// Builds and runs the representative migration create calls
public interface IDataMigrationGenerator : IDependency {
IEnumerable<IDataMigrationCommand> CreateCommands();
}
}

View File

@@ -1,31 +0,0 @@
using System;
using System.Data;
namespace Orchard.DataMigration.Schema {
public class CreateTableCommand : SchemaCommand {
public CreateTableCommand(string name)
: base(name, SchemaCommandType.CreateTable) {
}
public CreateTableCommand Column(string columnName, DbType dbType, Action<CreateColumnCommand> column = null) {
var command = new CreateColumnCommand(Name, columnName);
command.WithType(dbType);
if ( column != null ) {
column(command);
}
TableCommands.Add(command);
return this;
}
public CreateTableCommand ContentPartRecord() {
/// TODO: Call Column() with necessary information for content part records
return this;
}
public CreateTableCommand VersionedContentPartRecord() {
/// TODO: Call Column() with necessary information for content part records
return this;
}
}
}

View File

@@ -357,38 +357,38 @@
<Compile Include="ContentManagement\ViewModels\TemplateViewModel.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="DataMigration\Interpreters\ICommandInterpreter.cs" />
<Compile Include="DataMigration\Interpreters\DefaultDataMigrationInterpreter.cs" />
<Compile Include="DataMigration\Interpreters\IDataMigrationInterpreter.cs" />
<Compile Include="DataMigration\Interpreters\SqLiteCommandInterpreter.cs" />
<Compile Include="DataMigration\Schema\AddColumnCommand.cs" />
<Compile Include="DataMigration\Schema\ISchemaBuilderCommand.cs" />
<Compile Include="DataMigration\Schema\IShellSettings.cs" />
<Compile Include="DataMigration\Schema\SqlStatementCommand.cs" />
<Compile Include="DataMigration\Schema\CreateColumnCommand.cs" />
<Compile Include="DataMigration\Schema\CreateForeignKeyCommand.cs" />
<Compile Include="DataMigration\Schema\DropForeignKeyCommand.cs" />
<Compile Include="DataMigration\Schema\DropIndexCommand.cs" />
<Compile Include="DataMigration\Schema\AddIndexCommand.cs" />
<Compile Include="DataMigration\Schema\DropColumnCommand.cs" />
<Compile Include="DataMigration\Schema\AlterColumnCommand.cs" />
<Compile Include="DataMigration\Schema\DropTableCommand.cs" />
<Compile Include="DataMigration\Schema\AlterTableCommand.cs" />
<Compile Include="DataMigration\Commands\DataMigrationCommands.cs" />
<Compile Include="DataMigration\Schema\SchemaBuilder.cs" />
<Compile Include="DataMigration\DataMigrationCoordinator.cs" />
<Compile Include="DataMigration\IDataMigrationCommand.cs" />
<Compile Include="DataMigration\DefaultDataMigrationGenerator.cs" />
<Compile Include="DataMigration\IDataMigrationGenerator.cs" />
<Compile Include="DataMigration\DataMigration.cs" />
<Compile Include="DataMigration\DataMigrationManager.cs" />
<Compile Include="DataMigration\DataMigrationRecord.cs" />
<Compile Include="DataMigration\IDataMigration.cs" />
<Compile Include="DataMigration\IDataMigrationManager.cs" />
<Compile Include="DataMigration\Schema\ColumnCommand.cs" />
<Compile Include="DataMigration\Schema\CreateTableCommand.cs" />
<Compile Include="DataMigration\Schema\TableCommand.cs" />
<Compile Include="DataMigration\Schema\SchemaCommand.cs" />
<Compile Include="ContentManagement\DataMigrations\FrameworkDataMigration.cs" />
<Compile Include="Data\Migration\Interpreters\ICommandInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\DefaultDataMigrationInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\IDataMigrationInterpreter.cs" />
<Compile Include="Data\Migration\Interpreters\SqLiteCommandInterpreter.cs" />
<Compile Include="Data\Migration\Schema\AddColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\ISchemaBuilderCommand.cs" />
<Compile Include="Data\Migration\Schema\IShellSettings.cs" />
<Compile Include="Data\Migration\Schema\SqlStatementCommand.cs" />
<Compile Include="Data\Migration\Schema\CreateColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\CreateForeignKeyCommand.cs" />
<Compile Include="Data\Migration\Schema\DropForeignKeyCommand.cs" />
<Compile Include="Data\Migration\Schema\DropIndexCommand.cs" />
<Compile Include="Data\Migration\Schema\AddIndexCommand.cs" />
<Compile Include="Data\Migration\Schema\DropColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\AlterColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\DropTableCommand.cs" />
<Compile Include="Data\Migration\Schema\AlterTableCommand.cs" />
<Compile Include="Data\Migration\Commands\DataMigrationCommands.cs" />
<Compile Include="Data\Migration\Schema\SchemaBuilder.cs" />
<Compile Include="Data\Migration\DataMigrationCoordinator.cs" />
<Compile Include="Data\Migration\DefaultDataMigrationGenerator.cs" />
<Compile Include="Data\Migration\IDataMigrationGenerator.cs" />
<Compile Include="Data\Migration\DataMigration.cs" />
<Compile Include="Data\Migration\DataMigrationManager.cs" />
<Compile Include="Data\Migration\Records\DataMigrationRecord.cs" />
<Compile Include="Data\Migration\IDataMigration.cs" />
<Compile Include="Data\Migration\IDataMigrationManager.cs" />
<Compile Include="Data\Migration\Schema\ColumnCommand.cs" />
<Compile Include="Data\Migration\Schema\CreateTableCommand.cs" />
<Compile Include="Data\Migration\Schema\TableCommand.cs" />
<Compile Include="Data\Migration\Schema\SchemaCommand.cs" />
<Compile Include="Data\Providers\DataServiceParameters.cs" />
<Compile Include="Data\Providers\IDataServicesProvider.cs" />
<Compile Include="Data\Providers\SessionFactoryParameters.cs" />