mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Merge
--HG-- branch : dev
This commit is contained in:
@@ -288,8 +288,7 @@ namespace Orchard.Core.Contents.Controllers {
|
||||
return RedirectToAction("Edit", new RouteValueDictionary { { "Id", contentItem.Id } });
|
||||
}
|
||||
|
||||
[HttpPost, ActionName("Remove")]
|
||||
public ActionResult RemovePOST(int id, string returnUrl) {
|
||||
public ActionResult Remove(int id, string returnUrl) {
|
||||
var contentItem = _contentManager.Get(id, VersionOptions.Latest);
|
||||
|
||||
if (!Services.Authorizer.Authorize(Permissions.DeleteContent, contentItem, T("Couldn't remove content")))
|
||||
|
@@ -1,8 +1,8 @@
|
||||
@using Orchard.ContentManagement;
|
||||
@using Orchard.Utility.Extensions;
|
||||
@{
|
||||
ContentItem contentItem = Model.ContentItem;
|
||||
var returnUrl = ViewContext.RequestContext.HttpContext.Request.ToUrlString();
|
||||
ContentItem contentItem = Model.ContentItem;
|
||||
var returnUrl = ViewContext.RequestContext.HttpContext.Request.ToUrlString();
|
||||
}
|
||||
<div class="summary" itemscope="itemscope" itemid="@contentItem.Id" itemtype="http://orchardproject.net/data/ContentItem">
|
||||
<div class="properties">
|
||||
|
@@ -1,9 +1,11 @@
|
||||
<h1>@Html.TitleForPage((string)Model.Title)</h1>
|
||||
@if (Model.Meta != null) {
|
||||
<div class="metadata">
|
||||
@Display(Model.Meta)
|
||||
</div>
|
||||
}
|
||||
<div class="content">
|
||||
<article>
|
||||
<header>
|
||||
@Display(Model.Header)
|
||||
<p class="metadata">
|
||||
@Display(Model.Meta)
|
||||
</p>
|
||||
</header>
|
||||
<section>
|
||||
@Display(Model.Content)
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
@@ -2,15 +2,20 @@
|
||||
@using Orchard.Comments.Models;
|
||||
|
||||
<ul class="comments">
|
||||
@foreach (var comment in Model) {
|
||||
<li>
|
||||
<div class="comment">
|
||||
<span class="who">@Html.LinkOrDefault(comment.Record.UserName, comment.Record.SiteName, new { rel = "nofollow" })</span>
|
||||
<span>said @Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).ToString(), "#")</span>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p>@comment.Record.CommentText</p>
|
||||
</div>
|
||||
</li>
|
||||
@foreach (var comment in Model) {
|
||||
<li>
|
||||
<article class="comment">
|
||||
<header>
|
||||
<h4>
|
||||
<span class="who">@Html.LinkOrDefault(comment.Record.UserName, comment.Record.SiteName, new { rel = "nofollow" })
|
||||
</span>
|
||||
<span class="when">said <time datetime="@comment.Record.CommentDateUtc.GetValueOrDefault()">@Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).ToString(), "#")</time>
|
||||
</span>
|
||||
</h4>
|
||||
</header>
|
||||
<p class="text">@comment.Record.CommentText</p>
|
||||
</article>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
@@ -19,37 +19,44 @@ else if(!Request.IsAuthenticated && !AuthorizedFor(Permissions.AddComment)) {
|
||||
} else {
|
||||
using (Html.BeginForm("Create", "Comment", new { area = "Orchard.Comments" }, FormMethod.Post, new { @class = "comment" })) {
|
||||
@Html.ValidationSummary()
|
||||
<h2 id="addacomment">@T("Add a Comment")</h2>
|
||||
if (!Request.IsAuthenticated) {
|
||||
if (!Request.IsAuthenticated) {
|
||||
|
||||
<fieldset class="who">
|
||||
<div>
|
||||
<legend id="addacomment">@T("Add a Comment")</legend>
|
||||
<ol>
|
||||
<li>
|
||||
<label for="Name">@T("Name")</label>
|
||||
<input id="Name" class="text" name="Name" type="text" />
|
||||
</div>
|
||||
<div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="Email">@T("Email")</label>
|
||||
<input id="Email" class="text" name="Email" type="text" />
|
||||
</div>
|
||||
<div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="SiteName">@T("Url")</label>
|
||||
<input id="SiteName" class="text" name="SiteName" type="text" />
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
</fieldset>
|
||||
} else {
|
||||
@Html.Hidden("Name", WorkContext.CurrentUser.UserName ?? "")
|
||||
@Html.Hidden("Email", WorkContext.CurrentUser.Email ?? "")
|
||||
}
|
||||
|
||||
<h2 id="commenter">@if (Request.IsAuthenticated) { @T("Hi, {0}!", Html.Encode(WorkContext.CurrentUser.UserName))}</h2>
|
||||
<fieldset class="what">
|
||||
<div>
|
||||
<label for="CommentText">@if (Request.IsAuthenticated) { @T("Hi, {0}!", Html.Encode(WorkContext.CurrentUser.UserName))<br /> } @T("Comment")</label>
|
||||
<ol>
|
||||
<li>
|
||||
<label for="CommentText">@T("Comment")</label>
|
||||
<textarea id="CommentText" rows="10" cols="30" name="CommentText"></textarea>
|
||||
</div>
|
||||
<div>
|
||||
</li>
|
||||
<li>
|
||||
<input type="submit" class="button" value="@T("Submit Comment")" />
|
||||
@Html.Hidden("CommentedOn", (int)Model.ContentPart.ContentItem.Id)
|
||||
@Html.Hidden("ReturnUrl", Context.Request.ToUrlString())
|
||||
@Html.AntiForgeryTokenOrchard()
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
</fieldset>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Orchard.Commands;
|
||||
using Orchard.Data.Migration;
|
||||
@@ -11,27 +12,29 @@ namespace Orchard.Migrations.Commands {
|
||||
[OrchardFeature("Orchard.Migrations")]
|
||||
public class DataMigrationCommands : DefaultOrchardCommandHandler {
|
||||
private readonly IDataMigrationManager _dataMigrationManager;
|
||||
private readonly IDataMigrationInterpreter _dataMigrationInterpreter;
|
||||
private readonly ISchemaCommandGenerator _schemaCommandGenerator;
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
|
||||
public DataMigrationCommands(
|
||||
IDataMigrationManager dataMigrationManager,
|
||||
IDataMigrationInterpreter dataMigrationInterpreter,
|
||||
ISchemaCommandGenerator schemaCommandGenerator
|
||||
IExtensionManager extensionManager
|
||||
) {
|
||||
_dataMigrationManager = dataMigrationManager;
|
||||
_dataMigrationInterpreter = dataMigrationInterpreter;
|
||||
_schemaCommandGenerator = schemaCommandGenerator;
|
||||
_extensionManager = extensionManager;
|
||||
}
|
||||
|
||||
[OrchardSwitch]
|
||||
public bool Drop { get; set; }
|
||||
|
||||
[CommandName("upgrade database")]
|
||||
[CommandHelp("upgrade database <feature-name> \r\n\t" + "Upgrades or create the database tables for the <feature-name>")]
|
||||
public string UpgradeDatabase(string featureName) {
|
||||
[CommandHelp("upgrade database <feature-name-1> ... <feature-name-n> \r\n\t" + "Upgrades or create the database tables for the <feature-name> or all features if not available")]
|
||||
public string UpgradeDatabase(params string[] featureNames) {
|
||||
try {
|
||||
_dataMigrationManager.Update(featureName);
|
||||
IEnumerable<string> features = featureNames.Any()
|
||||
? featureNames
|
||||
: _extensionManager.AvailableExtensions()
|
||||
.SelectMany(ext => ext.Features)
|
||||
.Select(f => f.Name);
|
||||
|
||||
foreach(var feature in features) {
|
||||
_dataMigrationManager.Update(feature);
|
||||
}
|
||||
}
|
||||
catch ( Exception ex ) {
|
||||
Context.Output.WriteLine(T("An error occured while upgrading the database: " + ex.Message));
|
||||
@@ -40,6 +43,22 @@ namespace Orchard.Migrations.Commands {
|
||||
|
||||
return "Database upgraded";
|
||||
}
|
||||
}
|
||||
[OrchardFeature("DatabaseUpdate")]
|
||||
public class DatabaseUpdateCommands : DefaultOrchardCommandHandler {
|
||||
private readonly IDataMigrationInterpreter _dataMigrationInterpreter;
|
||||
private readonly ISchemaCommandGenerator _schemaCommandGenerator;
|
||||
|
||||
[OrchardSwitch]
|
||||
public bool Drop { get; set; }
|
||||
|
||||
public DatabaseUpdateCommands(
|
||||
IDataMigrationInterpreter dataMigrationInterpreter,
|
||||
ISchemaCommandGenerator schemaCommandGenerator
|
||||
) {
|
||||
_dataMigrationInterpreter = dataMigrationInterpreter;
|
||||
_schemaCommandGenerator = schemaCommandGenerator;
|
||||
}
|
||||
|
||||
[CommandName("update database")]
|
||||
[CommandHelp("update database \r\n\t" + "Automatically updates the database schema for the enabled features")]
|
||||
|
@@ -79,7 +79,7 @@ namespace Orchard.Modules.Commands {
|
||||
[CommandName("feature disable")]
|
||||
public void Disable(params string[] featureNames) {
|
||||
Context.Output.WriteLine(T("Disabling features {0}", string.Join(",", featureNames)));
|
||||
_moduleService.DisableFeatures(featureNames);
|
||||
_moduleService.DisableFeatures(featureNames, true);
|
||||
Context.Output.WriteLine(T("Disabled features {0}", string.Join(",", featureNames)));
|
||||
}
|
||||
}
|
||||
|
@@ -95,9 +95,10 @@ namespace Orchard.Modules.Services {
|
||||
public void DisableFeatures(IEnumerable<string> features, bool force) {
|
||||
var shellDescriptor = _shellDescriptorManager.GetShellDescriptor();
|
||||
var enabledFeatures = shellDescriptor.Features.ToList();
|
||||
var availableFeatures = GetAvailableFeatures().ToList();
|
||||
|
||||
var featuresToDisable =
|
||||
features.Select(s => DisableFeature(s, GetAvailableFeatures(), force)).SelectMany(
|
||||
features.Select(s => DisableFeature(s, availableFeatures, force)).SelectMany(
|
||||
ies => ies.Select(s => s));
|
||||
|
||||
if (featuresToDisable.Count() == 0)
|
||||
|
@@ -7,7 +7,13 @@ namespace Orchard.Search.Drivers {
|
||||
|
||||
protected override DriverResult Display(SearchFormPart part, string displayType, dynamic shapeHelper) {
|
||||
var model = new SearchViewModel();
|
||||
return ContentPartTemplate(model, "Parts/Search.SearchForm");
|
||||
return ContentShape("Parts_Search_SearchForm", "Content:1",
|
||||
() => {
|
||||
var shape = shapeHelper.Parts_Search_SearchForm();
|
||||
shape.ContentPart = part;
|
||||
shape.ViewModel = model;
|
||||
return shape;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@@ -101,11 +101,10 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\EditorTemplates\Parts\Search.SiteSettings.cshtml" />
|
||||
<Content Include="Views\EditorTemplates\Parts\Search.SearchForm.cshtml" />
|
||||
<Content Include="Views\Search\Index.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\DisplayTemplates\Parts\Search.SearchForm.cshtml" />
|
||||
<Content Include="Views\Parts\Search.SearchForm.cshtml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
||||
|
@@ -1 +0,0 @@
|
||||
|
@@ -1,8 +1,8 @@
|
||||
@model Orchard.Search.ViewModels.SearchViewModel
|
||||
@using Orchard.Search.ViewModels;
|
||||
|
||||
@using(Html.BeginForm("index", "search", new { area = "Orchard.Search" }, FormMethod.Get, new { @class = "search" })) {
|
||||
<fieldset>
|
||||
@Html.TextBox("q", Model.Query)
|
||||
@Html.TextBox("q", (SearchViewModel)Model.ViewModel.Query)
|
||||
<button type="submit">@T("Search")</button>
|
||||
</fieldset>
|
||||
}
|
||||
}
|
@@ -2,7 +2,6 @@
|
||||
using JetBrains.Annotations;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Drivers;
|
||||
using Orchard.Core.ContentsLocation.Models;
|
||||
using Orchard.Security;
|
||||
using Orchard.Tags.Helpers;
|
||||
using Orchard.Tags.Models;
|
||||
@@ -12,6 +11,7 @@ using Orchard.Tags.ViewModels;
|
||||
namespace Orchard.Tags.Drivers {
|
||||
[UsedImplicitly]
|
||||
public class TagsPartDriver : ContentPartDriver<TagsPart> {
|
||||
private const string TemplateName = "Parts/Tags";
|
||||
private readonly ITagService _tagService;
|
||||
private readonly IAuthorizationService _authorizationService;
|
||||
|
||||
@@ -23,6 +23,10 @@ namespace Orchard.Tags.Drivers {
|
||||
|
||||
public virtual IUser CurrentUser { get; set; }
|
||||
|
||||
protected override string Prefix {
|
||||
get { return "Tags"; }
|
||||
}
|
||||
|
||||
protected override DriverResult Display(TagsPart part, string displayType, dynamic shapeHelper) {
|
||||
return ContentShape("Parts_Tags_ShowTags",
|
||||
() => shapeHelper.Parts_Tags_ShowTags(ContentPart: part, Tags: part.CurrentTags));
|
||||
@@ -35,7 +39,9 @@ namespace Orchard.Tags.Drivers {
|
||||
var model = new EditTagsViewModel {
|
||||
Tags = string.Join(", ", part.CurrentTags.Select((t, i) => t.TagName).ToArray())
|
||||
};
|
||||
return ContentPartTemplate(model, "Parts/Tags.EditTags").Location(part.GetLocation("Editor"));
|
||||
|
||||
return ContentShape("Parts_Tags_Editor",
|
||||
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix));
|
||||
}
|
||||
|
||||
protected override DriverResult Editor(TagsPart part, IUpdateModel updater, dynamic shapeHelper) {
|
||||
@@ -50,7 +56,8 @@ namespace Orchard.Tags.Drivers {
|
||||
_tagService.UpdateTagsForContentItem(part.ContentItem.Id, tagNames);
|
||||
}
|
||||
|
||||
return ContentPartTemplate(model, "Parts/Tags.EditTags").Location(part.GetLocation("Editor"));
|
||||
return ContentShape("Parts_Tags_Editor",
|
||||
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix));
|
||||
}
|
||||
}
|
||||
}
|
@@ -98,7 +98,7 @@
|
||||
<Content Include="Views\Admin\Index.cshtml" />
|
||||
<Content Include="Views\Admin\Search.cshtml" />
|
||||
<Content Include="Views\Parts\Tags.ShowTags.cshtml" />
|
||||
<Content Include="Views\EditorTemplates\Parts\Tags.EditTags.cshtml" />
|
||||
<Content Include="Views\EditorTemplates\Parts\Tags.cshtml" />
|
||||
<Content Include="Views\Home\Index.cshtml" />
|
||||
<Content Include="Views\Home\Search.cshtml" />
|
||||
</ItemGroup>
|
||||
|
@@ -1,3 +1,4 @@
|
||||
<Placement>
|
||||
<Place Parts_Tags_ShowTags="Header:after.7"/>
|
||||
<Place Parts_Tags_Editor="Primary:7"/>
|
||||
</Placement>
|
||||
|
@@ -5,21 +5,23 @@
|
||||
@Html.ValidationSummary(T("Login was unsuccessful. Please correct the errors and try again.").ToString())
|
||||
|
||||
@using (Html.BeginFormAntiForgeryPost(Url.Action("LogOn", new {ReturnUrl = Request.QueryString["ReturnUrl"]}))) {
|
||||
<fieldset class="login-form">
|
||||
<fieldset class="login-form group">
|
||||
<legend>@T("Account Information")</legend>
|
||||
<div class="group">
|
||||
<ol>
|
||||
<li>
|
||||
<label for="userNameOrEmail">@T("Username:")</label>
|
||||
@Html.TextBox("userNameOrEmail", "", new { autofocus = "autofocus" })
|
||||
@Html.ValidationMessage("userNameOrEmail")
|
||||
</div>
|
||||
<div class="group">
|
||||
</li>
|
||||
<li>
|
||||
<label for="password">@T("Password:")</label>
|
||||
@Html.Password("password")
|
||||
@Html.ValidationMessage("password")
|
||||
</div>
|
||||
<div class="group">
|
||||
</li>
|
||||
<li>
|
||||
@Html.CheckBox("rememberMe")<label class="forcheckbox" for="rememberMe">@T("Remember me?")</label>
|
||||
</div>
|
||||
</li>
|
||||
<input type="submit" value="@T("Log On")" />
|
||||
</ol>
|
||||
</fieldset>
|
||||
}
|
@@ -51,7 +51,7 @@ namespace Orchard.Widgets.Controllers {
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
||||
currentLayerWidgets = _widgetsService.GetWidgets().Where(widgetPart => widgetPart.LayerPart.Id == currentLayer.Id);
|
||||
currentLayerWidgets = _widgetsService.GetWidgets(currentLayer.Id);
|
||||
}
|
||||
else {
|
||||
currentLayer = null;
|
||||
|
@@ -27,7 +27,12 @@ var AddMediaDialog = {
|
||||
var result = window.frames[iframeName].result, close = 0;
|
||||
|
||||
if (result && result.url) {
|
||||
window.parent.AddMediaDialog.insertMedia(result.url);
|
||||
if (window.parent && window.parent.AddMediaDialog) {
|
||||
window.parent.AddMediaDialog.insertMedia(result.url);
|
||||
} else {
|
||||
AddMediaDialog.insertMedia(result.url);
|
||||
}
|
||||
|
||||
close = 1;
|
||||
} else if (result && result.error) {
|
||||
alert(tinyMCEPopup.getLang("addmedia_dlg.msg_error") + "\n\r\n\r" + result.error);
|
||||
@@ -48,7 +53,14 @@ var AddMediaDialog = {
|
||||
tinymce.dom.Event.remove(iframe, 'load', iframeLoadHandler);
|
||||
tinymce.DOM.remove(iframe);
|
||||
iframe = null;
|
||||
if (close) window.parent.tinyMCEPopup.close();
|
||||
|
||||
if (close) {
|
||||
if (window.parent && window.parent.tinyMCEPopup) {
|
||||
window.parent.tinyMCEPopup.close();
|
||||
} else {
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
}
|
||||
},
|
||||
123);
|
||||
} catch (ex) {
|
||||
|
@@ -190,7 +190,7 @@ pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height:
|
||||
|
||||
#layout-main
|
||||
{
|
||||
border-top: 1px solid #dbdbdb;
|
||||
border-top: 1px solid #fff;
|
||||
}
|
||||
|
||||
#layout-after-main
|
||||
@@ -303,7 +303,6 @@ label.forcheckbox { margin:0 0 0 .4em; display:inline; }
|
||||
fieldset { padding:0em; margin: 0 0 0em 0; border: 0px solid #dbdbdb; }
|
||||
legend { font-weight: 600; font-size:1.2em; }
|
||||
|
||||
|
||||
input[type="text"], #CommentText, #password, #confirmPassword {
|
||||
border:1px solid #999;
|
||||
display: block;
|
||||
@@ -320,7 +319,9 @@ form.search {
|
||||
width:17em;
|
||||
}
|
||||
|
||||
fieldset div {margin:1.6em 0 0 0}
|
||||
fieldset ol {list-style-type:none;}
|
||||
|
||||
fieldset ol li {margin:1.6em 0 0 0}
|
||||
|
||||
legend {
|
||||
font-size: 1.4em;
|
||||
@@ -400,35 +401,38 @@ button:focus, .button:focus {
|
||||
|
||||
|
||||
/* For testing purposes */
|
||||
#comments {
|
||||
#comments, #commenter {
|
||||
font-size:1.6em;
|
||||
font-weight:600;
|
||||
margin:1.2em 0 1.8em 1.2em;
|
||||
}
|
||||
|
||||
#commenter {
|
||||
margin:1.2em 0 0 1em;
|
||||
}
|
||||
|
||||
ul.comments, form.comment {
|
||||
margin:1.2em 0 1.2em 1.8em;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.comment {
|
||||
font-size:1.3em;
|
||||
font-style:italic;
|
||||
color:#484848;
|
||||
article.comment h4 {
|
||||
font-size:1.4em;
|
||||
}
|
||||
|
||||
div.comment a {
|
||||
article.comment a {
|
||||
color:#484848;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
div.comment span.who {
|
||||
article.comment span.who {
|
||||
font-weight:600;
|
||||
font-style:normal;
|
||||
text-transform:capitalize;
|
||||
color:#333;
|
||||
}
|
||||
|
||||
ul.comments li div.text {
|
||||
article.comment p.text {
|
||||
margin:.6em 0 2.4em 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user