diff --git a/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs b/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs index 0368c9f46..45959bedc 100644 --- a/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs +++ b/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs @@ -23,10 +23,10 @@ namespace Orchard.Core.Common.Controllers { var model = new BodyDisplayViewModel { BodyAspect = part, Text = BbcodeReplace(part.Text) }; return Combined( - Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/ManageWrapperPre").Location("primary", "5") : null, - Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/Manage").Location("primary", "5") : null, + Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/Common.Body.ManageWrapperPre").Location("primary", "5") : null, + Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/Common.Body.Manage").Location("primary", "5") : null, ContentPartTemplate(model, TemplateName, Prefix).LongestMatch(displayType, "Summary", "SummaryAdmin").Location("primary", "5"), - Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/ManageWrapperPost").Location("primary", "5") : null); + Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/Common.Body.ManageWrapperPost").Location("primary", "5") : null); } protected override DriverResult Editor(BodyAspect part) { diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Manage.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.Manage.ascx similarity index 100% rename from src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Manage.ascx rename to src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.Manage.ascx diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/ManageWrapperPost.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ManageWrapperPost.ascx similarity index 100% rename from src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/ManageWrapperPost.ascx rename to src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ManageWrapperPost.ascx diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/ManageWrapperPre.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ManageWrapperPre.ascx similarity index 100% rename from src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/ManageWrapperPre.ascx rename to src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ManageWrapperPre.ascx diff --git a/src/Orchard.Web/Core/HomePage/Controllers/HomeController.cs b/src/Orchard.Web/Core/HomePage/Controllers/HomeController.cs index 775b3d6da..f2bf52112 100644 --- a/src/Orchard.Web/Core/HomePage/Controllers/HomeController.cs +++ b/src/Orchard.Web/Core/HomePage/Controllers/HomeController.cs @@ -6,6 +6,7 @@ using Orchard.Logging; using Orchard.Mvc.ViewModels; using Orchard.Services; using Orchard.Settings; +using Orchard.Themes; namespace Orchard.Core.HomePage.Controllers { [HandleError] @@ -20,30 +21,33 @@ namespace Orchard.Core.HomePage.Controllers { public ILogger Logger { get; set; } protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } + [Themed] public ActionResult Index() { try { - string homepage = CurrentSite.HomePage; + var homepage = CurrentSite.HomePage; if (String.IsNullOrEmpty(homepage)) { return View(new BaseViewModel()); } - string[] homePageParameters = homepage.Split(';'); + var homePageParameters = homepage.Split(';'); if (homePageParameters.Length != 2) { return View(new BaseViewModel()); } - string providerName = homePageParameters[0]; - int item = Int32.Parse(homePageParameters[1]); + var providerName = homePageParameters[0]; + var item = Int32.Parse(homePageParameters[1]); foreach (var provider in _homePageProviders) { - if (String.Equals(provider.GetProviderName(), providerName)) { - ActionResult result = provider.GetHomePage(item); - if (result is ViewResultBase) { - ViewResultBase resultBase = result as ViewResultBase; - ViewData.Model = resultBase.ViewData.Model; - resultBase.ViewData = ViewData; - } - return result; + if (!string.Equals(provider.GetProviderName(), providerName)) + continue; + + var result = provider.GetHomePage(item); + if (result is ViewResultBase) { + var resultBase = result as ViewResultBase; + ViewData.Model = resultBase.ViewData.Model; + resultBase.ViewData = ViewData; } + + return result; } return View(new BaseViewModel()); diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 54e3401f0..775477634 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -226,11 +226,12 @@ - - - + + + + diff --git a/src/Orchard.Web/Core/Themes/Views/NotFound.ascx b/src/Orchard.Web/Core/Themes/Views/NotFound.ascx new file mode 100644 index 000000000..8abb96303 --- /dev/null +++ b/src/Orchard.Web/Core/Themes/Views/NotFound.ascx @@ -0,0 +1,4 @@ +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Mvc.ViewModels"%> +

<%=Html.TitleForPage(T("Not found").ToString()) %>

+

TODO: (erikpo) Add friendly message here

\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs index 6856bb60f..4a0d5e1db 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs @@ -1,6 +1,5 @@ using System.Web.Mvc; using Orchard.Blogs.Models; -using Orchard.Mvc.Extensions; namespace Orchard.Blogs.Extensions { public static class UrlHelperExtensions { @@ -21,7 +20,7 @@ namespace Orchard.Blogs.Extensions { } public static string BlogRsd(this UrlHelper urlHelper, string blogSlug) { - return urlHelper.AbsoluteAction(() => urlHelper.Action("Rsd", "Blog", new { blogSlug, area = "Orchard.Blogs" })); + return urlHelper.Action("Rsd", "Blog", new { blogSlug, area = "Orchard.Blogs" }); } public static string BlogArchiveYear(this UrlHelper urlHelper, string blogSlug, int year) { diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Pages/Controllers/AdminController.cs index af560d976..56f5a899c 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Pages/Controllers/AdminController.cs @@ -195,7 +195,7 @@ namespace Orchard.Pages.Controllers { _pageService.Publish(model.Page.Item); Services.Notifier.Information(T("Page has been published")); if (model.PromoteToHomePage) { - CurrentSite.HomePage = "PagesHomePageProvider;" + model.Page.Item.Id; + CurrentSite.HomePage = "PageHomePageProvider;" + model.Page.Item.Id; } break; case "PublishLater": diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Orchard.Pages.csproj b/src/Orchard.Web/Modules/Orchard.Pages/Orchard.Pages.csproj index 16eae8090..d7153e6b6 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Orchard.Pages.csproj +++ b/src/Orchard.Web/Modules/Orchard.Pages/Orchard.Pages.csproj @@ -77,7 +77,7 @@ - + Code diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Services/PagesHomePageProvider.cs b/src/Orchard.Web/Modules/Orchard.Pages/Services/PageHomePageProvider.cs similarity index 77% rename from src/Orchard.Web/Modules/Orchard.Pages/Services/PagesHomePageProvider.cs rename to src/Orchard.Web/Modules/Orchard.Pages/Services/PageHomePageProvider.cs index 7f13ccfa1..36f7526de 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Services/PagesHomePageProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Pages/Services/PageHomePageProvider.cs @@ -1,16 +1,15 @@ using System.Web.Mvc; using Orchard.Localization; using Orchard.Mvc.Results; -using Orchard.Pages.Models; using Orchard.Pages.ViewModels; using Orchard.Services; namespace Orchard.Pages.Services { - public class PagesHomePageProvider : IHomePageProvider { + public class PageHomePageProvider : IHomePageProvider { private readonly IPageService _pageService; private readonly ISlugConstraint _slugConstraint; - public PagesHomePageProvider(IOrchardServices services, IPageService pageService, ISlugConstraint slugConstraint) { + public PageHomePageProvider(IOrchardServices services, IPageService pageService, ISlugConstraint slugConstraint) { Services = services; _slugConstraint = slugConstraint; _pageService = pageService; @@ -23,11 +22,14 @@ namespace Orchard.Pages.Services { #region Implementation of IHomePageProvider public string GetProviderName() { - return "PagesHomePageProvider"; + return "PageHomePageProvider"; } public ActionResult GetHomePage(int itemId) { - Page page = _pageService.Get(itemId); + var page = _pageService.Get(itemId); + if (page == null) + return new NotFoundResult(); + var correctedSlug = _slugConstraint.LookupPublishedSlug(page.Slug); if (correctedSlug == null) return new NotFoundResult(); diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs index c7176fe6f..ce6d56d6a 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs @@ -103,14 +103,14 @@ namespace Orchard.Setup.Controllers { var contentManager = finiteEnvironment.Resolve(); // create home page as a CMS page - var page = contentManager.Create("page"); + var page = contentManager.Create("page", VersionOptions.Draft); page.As().Text = "

Welcome to Orchard!

Congratulations, you've successfully set-up your Orchard site.

This is the home page of your new site. We've taken the liberty to write here about a few things you could look at next in order to get familiar with the application. Once you feel confident you don't need this anymore, just click Edit to go into edit mode and replace this with whatever you want on your home page to make it your own.

One thing you could do (but you don't have to) is go into Manage Settings (follow the Admin link and then look for it under \"Settings\" in the menu on the left) and check that everything is configured the way you want.

You probably want to make the site your own. One of the ways you can do that is by clicking Manage Themes in the admin menu. A theme is a packaged look and feel that affects the whole site. We have installed a few themes already, but you'll also be able to browse through an online gallery of themes created by other users of Orchard.

Next, you can start playing with the content types that we installed. For example, go ahead and click Add New Page in the admin menu and create an \"about\" page. Then, add it to the navigation menu by going to Manage Menu. You can also click Add New Blog and start posting by clicking \"Add New Post\".

Finally, Orchard has been designed to be extended. It comes with a few built-in modules such as pages and blogs or themes. You can install new themes by going to Manage Themes and clicking Install a new Theme. Like for themes, modules are created by other users of Orchard just like you so if you feel up to it, please consider participating.

--The Orchard Crew

"; page.As().Slug = "home"; page.As().Title = T("Home").ToString(); page.As().CommentsShown = false; page.As().Owner = user; contentManager.Publish(page); - siteSettings.Record.HomePage = "PagesHomePageProvider;" + page.Id; + siteSettings.Record.HomePage = "PageHomePageProvider;" + page.Id; // add a menu item for the shiny new home page var menuItem = contentManager.Create("menuitem"); diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/addmedia.htm b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/addmedia.htm new file mode 100644 index 000000000..273f7cd8d --- /dev/null +++ b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/addmedia.htm @@ -0,0 +1,36 @@ + + + + {#addmedia_dlg.title} + + + + +
+ +
+ + + + + +
+ + +
+
+
+ + +
+
+ +
+
+
+ + diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/editor_plugin.js b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/editor_plugin.js new file mode 100644 index 000000000..9ce4962e2 --- /dev/null +++ b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/editor_plugin.js @@ -0,0 +1,68 @@ +(function() { + // Load plugin specific language pack + tinymce.PluginManager.requireLangPack('dlg'); + + tinymce.create('tinymce.plugins.Orchard.AddMedia', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init: function(ed, url) { + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('mceAddMedia', function() { + ed.windowManager.open({ + file: url + '/addmedia.htm', + width: 480 + parseInt(ed.getLang('addmedia.delta_width', 0)), + height: 110 + parseInt(ed.getLang('addmedia.delta_height', 0)), + inline: 1 + }, { + plugin_url: url, // Plugin absolute URL + }); + }); + + // Register example button + ed.addButton('addmedia', { + title: 'addmedia_desc', + cmd: 'mceAddMedia', + image: url + '/img/picture_add.png' + }); + }, + + /** + * Creates control instances based in the incomming name. This method is normally not + * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons + * but you sometimes need to create more complex controls like listboxes, split buttons etc then this + * method can be used to create those. + * + * @param {String} n Name of the control to create. + * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. + * @return {tinymce.ui.Control} New control instance or null if no control was created. + */ + createControl: function(n, cm) { + return null; + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo: function() { + return { + longname: 'Orchard AddMedia Plugin', + author: 'Nathan Heskew', + authorurl: 'http://orchardproject.net', + infourl: 'http://orchardproject.net', + version: '0.1' + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('addmedia', tinymce.plugins.Orchard.AddMedia); +})(); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/img/picture_add.png b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/img/picture_add.png new file mode 100644 index 000000000..9e9d5da9d Binary files /dev/null and b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/img/picture_add.png differ diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/js/addmedia.js b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/js/addmedia.js new file mode 100644 index 000000000..85ad2bea1 --- /dev/null +++ b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/js/addmedia.js @@ -0,0 +1 @@ +tinyMCEPopup.requireLangPack(); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/langs/en_dlg.js b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/langs/en_dlg.js new file mode 100644 index 000000000..3a6a0b493 --- /dev/null +++ b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/addmedia/langs/en_dlg.js @@ -0,0 +1,4 @@ +tinyMCE.addI18n('en.addmedia_dlg',{ +title:"Add Media", +path_label:"Media File Path" +}); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/TinyMce/TinyMce.csproj b/src/Orchard.Web/Modules/TinyMce/TinyMce.csproj index 63c109849..8045c5d64 100644 --- a/src/Orchard.Web/Modules/TinyMce/TinyMce.csproj +++ b/src/Orchard.Web/Modules/TinyMce/TinyMce.csproj @@ -135,6 +135,17 @@ + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/TinyMce/Views/EditorTemplates/TinyMceTextEditor.ascx b/src/Orchard.Web/Modules/TinyMce/Views/EditorTemplates/TinyMceTextEditor.ascx index 662a464b6..8b9f14733 100644 --- a/src/Orchard.Web/Modules/TinyMce/Views/EditorTemplates/TinyMceTextEditor.ascx +++ b/src/Orchard.Web/Modules/TinyMce/Views/EditorTemplates/TinyMceTextEditor.ascx @@ -7,10 +7,10 @@ theme: "advanced", mode: "specific_textareas", editor_selector: "html", - plugins: "fullscreen,autoresize,searchreplace", + plugins: "fullscreen,autoresize,searchreplace,addmedia", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", - theme_advanced_buttons1: "search,replace,|,cut,copy,paste,|,undo,redo,|,image,|,link,unlink,charmap,emoticon,codeblock,|,bold,italic,|,numlist,bullist,formatselect,|,code,fullscreen", + theme_advanced_buttons1: "search,replace,|,cut,copy,paste,|,undo,redo,|,image,addmedia,|,link,unlink,charmap,emoticon,codeblock,|,bold,italic,|,numlist,bullist,formatselect,|,code,fullscreen", theme_advanced_buttons2: "", theme_advanced_buttons3: "" }); diff --git a/src/Orchard/Mvc/ViewEngines/ViewEngineFilter.cs b/src/Orchard/Mvc/ViewEngines/ViewEngineFilter.cs index 8d47c2155..7d6fdb526 100644 --- a/src/Orchard/Mvc/ViewEngines/ViewEngineFilter.cs +++ b/src/Orchard/Mvc/ViewEngines/ViewEngineFilter.cs @@ -53,7 +53,7 @@ namespace Orchard.Mvc.ViewEngines { var modules = _extensionManager.ActiveExtensions() - .Where(x => x.Descriptor.ExtensionType == "Module" || x.Descriptor.ExtensionType == "Area"); + .Where(x => x.Descriptor.ExtensionType == "Module"); var moduleLocations = modules.Select(x => Path.Combine(x.Descriptor.Location, x.Descriptor.Name)); var moduleViewEngines = _viewEngineProviders