diff --git a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs index f64f9c3f1..e7b72def7 100644 --- a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs +++ b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs @@ -72,7 +72,14 @@ namespace Orchard.Core.Common.Drivers { () => shapeHelper.EditorTemplate(TemplateName: "Fields.Common.Text.Edit", Model: viewModel, Prefix: GetPrefix(field, part))); } - field.Value = viewModel.Text; + var settings = field.PartFieldDefinition.Settings.GetModel(); + + if (String.IsNullOrEmpty(field.Value) && !String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = settings.DefaultValue; + } + else { + field.Value = viewModel.Text; + } } return Editor(part, field, shapeHelper); diff --git a/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs b/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs index 9b0b8d11d..651d1eb28 100644 --- a/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs +++ b/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs @@ -7,5 +7,6 @@ namespace Orchard.Core.Common.Settings { public string Flavor { get; set; } public bool Required { get; set; } public string Hint { get; set; } + public string DefaultValue { get; set; } } } diff --git a/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs b/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs index f9a35f5c8..9ae678cb9 100644 --- a/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs +++ b/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs @@ -33,6 +33,7 @@ namespace Orchard.Core.Common.Settings { builder.WithSetting("TextFieldSettings.Flavor", model.Settings.Flavor); builder.WithSetting("TextFieldSettings.Hint", model.Settings.Hint); builder.WithSetting("TextFieldSettings.Required", model.Settings.Required.ToString(CultureInfo.InvariantCulture)); + builder.WithSetting("TextFieldSettings.DefaultValue", model.Settings.DefaultValue); yield return DefinitionTemplate(model); } diff --git a/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml new file mode 100644 index 000000000..bbd84d350 --- /dev/null +++ b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml @@ -0,0 +1,8 @@ +@model Orchard.Core.Common.ViewModels.TextFieldSettingsEventsViewModel + +@* This is a token-less default value editor that can be overridden from features that can depend on Orchard.Tokens. *@ + + +@Html.TextBoxFor(m => m.Settings.DefaultValue, new { @class = "text large" }) +@T("Default value for the field. If there is no value given for the actual field, this will be filled in. (optional)") +@Html.ValidationMessageFor(m => m.Settings.DefaultValue) \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml index ac37910c3..c339727a9 100644 --- a/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml +++ b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml @@ -18,4 +18,7 @@ @Html.TextAreaFor(m => m.Settings.Hint, new { @class = "text medium", rows = "5" }) @T("The help text is written under the field when authors are editing the content item.") @Html.ValidationMessageFor(m => m.Settings.Hint) + +
+ @Display.DefinitionTemplate(TemplateName: "TextFieldDefaultValueEditor", Model: Model)
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml index 165e7bc8c..de76c21bb 100644 --- a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml +++ b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml @@ -12,4 +12,7 @@ @if (HasText(Model.Settings.Hint)) { @Model.Settings.Hint } - + @if (!String.IsNullOrWhiteSpace(Model.Settings.DefaultValue)) { + @T("If the field is left empty then the default value will be used.") + } + \ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index d529085ee..36cbc19b0 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -578,6 +578,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Core/Shapes/CoreShapes.cs b/src/Orchard.Web/Core/Shapes/CoreShapes.cs index 5fd5858eb..ab8ae8873 100644 --- a/src/Orchard.Web/Core/Shapes/CoreShapes.cs +++ b/src/Orchard.Web/Core/Shapes/CoreShapes.cs @@ -799,6 +799,11 @@ namespace Orchard.Core.Shapes { RenderInternal(Html, Output, "EditorTemplates/" + TemplateName, Model, Prefix); } + [Shape] + public void DefinitionTemplate(HtmlHelper Html, TextWriter Output, string TemplateName, object Model, string Prefix) { + RenderInternal(Html, Output, "DefinitionTemplates/" + TemplateName, Model, Prefix); + } + static void RenderInternal(HtmlHelper Html, TextWriter Output, string TemplateName, object Model, string Prefix) { var adjustedViewData = new ViewDataDictionary(Html.ViewDataContainer.ViewData) { Model = DetermineModel(Html, Model), diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs index 236822ddc..290f1a1e7 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs @@ -1,16 +1,15 @@ -using System; -using System.Globalization; -using System.Xml; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; +using Orchard.ContentManagement.Handlers; +using Orchard.Core.Common.ViewModels; using Orchard.Fields.Fields; using Orchard.Fields.Settings; using Orchard.Fields.ViewModels; -using Orchard.ContentManagement.Handlers; using Orchard.Localization; -using Orchard.Localization.Services; -using Orchard.Core.Common.ViewModels; using Orchard.Localization.Models; +using Orchard.Localization.Services; +using System; +using System.Xml; namespace Orchard.Fields.Drivers { public class DateTimeFieldDriver : ContentFieldDriver { @@ -97,6 +96,7 @@ namespace Orchard.Fields.Drivers { Name = field.DisplayName, Hint = settings.Hint, IsRequired = settings.Required, + HasDefaultValue = settings.DefaultValue.HasValue, Editor = new DateTimeEditor() { Date = showDate ? DateLocalizationServices.ConvertToLocalizedDateString(value, options) : null, Time = showTime ? DateLocalizationServices.ConvertToLocalizedTimeString(value, options) : null, @@ -150,7 +150,7 @@ namespace Orchard.Fields.Drivers { field.DateTime = utcDateTime.Value; } } else { - field.DateTime = DateTime.MinValue; + field.DateTime = settings.DefaultValue.HasValue ? settings.DefaultValue.Value : DateTime.MinValue; } } catch { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs index b7017ede5..044844d5d 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs @@ -1,18 +1,22 @@ using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; -using Orchard.Fields.Settings; using Orchard.Fields.Fields; +using Orchard.Fields.Settings; using Orchard.Localization; +using Orchard.Tokens; using System; +using System.Collections.Generic; namespace Orchard.Fields.Drivers { public class EnumerationFieldDriver : ContentFieldDriver { public IOrchardServices Services { get; set; } private const string TemplateName = "Fields/Enumeration.Edit"; + private readonly ITokenizer _tokenizer; - public EnumerationFieldDriver(IOrchardServices services) { + public EnumerationFieldDriver(IOrchardServices services, ITokenizer tokenizer) { Services = services; + _tokenizer = tokenizer; T = NullLocalizer.Instance; } @@ -33,7 +37,16 @@ namespace Orchard.Fields.Drivers { protected override DriverResult Editor(ContentPart part, EnumerationField field, dynamic shapeHelper) { return ContentShape("Fields_Enumeration_Edit", GetDifferentiator(field, part), - () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part))); + () => { + if (field.Value == null) { + var settings = field.PartFieldDefinition.Settings.GetModel(); + if (!String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary { { "Content", part.ContentItem } }); + } + } + + return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)); + }); } protected override DriverResult Editor(ContentPart part, EnumerationField field, IUpdateModel updater, dynamic shapeHelper) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs index d795641c5..31e0d1b14 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs @@ -1,19 +1,22 @@ -using System; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; using Orchard.Fields.Fields; using Orchard.Fields.Settings; using Orchard.Localization; -using Orchard.Utility.Extensions; +using Orchard.Tokens; +using System; +using System.Collections.Generic; namespace Orchard.Fields.Drivers { public class InputFieldDriver : ContentFieldDriver { public IOrchardServices Services { get; set; } private const string TemplateName = "Fields/Input.Edit"; + private readonly ITokenizer _tokenizer; - public InputFieldDriver(IOrchardServices services) { + public InputFieldDriver(IOrchardServices services, ITokenizer tokenizer) { Services = services; + _tokenizer = tokenizer; T = NullLocalizer.Instance; } @@ -43,6 +46,10 @@ namespace Orchard.Fields.Drivers { if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) { var settings = field.PartFieldDefinition.Settings.GetModel(); + if (field.Value == null && !String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary { { "Content", part.ContentItem } }); + } + if (settings.Required && string.IsNullOrWhiteSpace(field.Value)) { updater.AddModelError(GetPrefix(field, part), T("The field {0} is mandatory.", T(field.DisplayName))); } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs index cc1ff7a8b..aad8ad965 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs @@ -1,18 +1,22 @@ -using System; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; using Orchard.Fields.Fields; using Orchard.Fields.Settings; using Orchard.Localization; +using Orchard.Tokens; +using System; +using System.Collections.Generic; namespace Orchard.Fields.Drivers { public class LinkFieldDriver : ContentFieldDriver { public IOrchardServices Services { get; set; } private const string TemplateName = "Fields/Link.Edit"; + private readonly ITokenizer _tokenizer; - public LinkFieldDriver(IOrchardServices services) { + public LinkFieldDriver(IOrchardServices services, ITokenizer tokenizer) { Services = services; + _tokenizer = tokenizer; T = NullLocalizer.Instance; } @@ -41,6 +45,15 @@ namespace Orchard.Fields.Drivers { protected override DriverResult Editor(ContentPart part, LinkField field, IUpdateModel updater, dynamic shapeHelper) { if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) { var settings = field.PartFieldDefinition.Settings.GetModel(); + + if (String.IsNullOrEmpty(field.Value) && !String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary { { "Content", part.ContentItem } }); + } + + if(!String.IsNullOrEmpty(settings.TextDefaultValue) && String.IsNullOrWhiteSpace(field.Text)) { + field.Text = _tokenizer.Replace(settings.TextDefaultValue, new Dictionary { { "Content", part.ContentItem } }); + } + if (settings.Required && string.IsNullOrWhiteSpace(field.Value)) { updater.AddModelError(GetPrefix(field, part), T("Url is required for {0}", field.DisplayName)); } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs index 532ba2fa0..1fe633346 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs @@ -1,21 +1,25 @@ -using System; -using System.Globalization; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; using Orchard.Fields.Fields; using Orchard.Fields.Settings; -using Orchard.Localization; using Orchard.Fields.ViewModels; +using Orchard.Localization; +using Orchard.Tokens; +using System; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Drivers { public class NumericFieldDriver : ContentFieldDriver { public IOrchardServices Services { get; set; } private const string TemplateName = "Fields/Numeric.Edit"; private readonly Lazy _cultureInfo; + private readonly ITokenizer _tokenizer; - public NumericFieldDriver(IOrchardServices services) { + public NumericFieldDriver(IOrchardServices services, ITokenizer tokenizer) { Services = services; + _tokenizer = tokenizer; T = NullLocalizer.Instance; _cultureInfo = new Lazy(() => CultureInfo.GetCultureInfo(Services.WorkContext.CurrentCulture)); @@ -40,7 +44,6 @@ namespace Orchard.Fields.Drivers { } protected override DriverResult Editor(ContentPart part, NumericField field, dynamic shapeHelper) { - return ContentShape("Fields_Numeric_Edit", GetDifferentiator(field, part), () => { var model = new NumericFieldViewModel { @@ -66,7 +69,16 @@ namespace Orchard.Fields.Drivers { } if (!settings.Required && String.IsNullOrWhiteSpace(viewModel.Value)) { - field.Value = null; + if (settings.DefaultValue != null) { + if (Decimal.TryParse(_tokenizer.Replace(settings.DefaultValue, new Dictionary { { "Content", part.ContentItem } }), NumberStyles.Any, _cultureInfo.Value, out value) + && Math.Round(value, settings.Scale) == value + && !String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = value; + } + } + else { + field.Value = null; + } } else if (Decimal.TryParse(viewModel.Value, NumberStyles.Any, _cultureInfo.Value, out value)) { field.Value = value; diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/TextFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/TextFieldDriver.cs new file mode 100644 index 000000000..9863aa6d1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/TextFieldDriver.cs @@ -0,0 +1,29 @@ +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Core.Common.Fields; +using Orchard.Core.Common.Settings; +using Orchard.Tokens; +using System; +using System.Collections.Generic; + +namespace Orchard.Fields.Drivers { + // The original driver of the TextField is in Orchard.Core, where tokenization can not be used. + // This driver was added so the default value of the TextField can be tokenized. + public class TextFieldDriver : ContentFieldDriver { + private readonly ITokenizer _tokenizer; + + public TextFieldDriver(ITokenizer tokenizer) { + _tokenizer = tokenizer; + } + + protected override DriverResult Editor(ContentPart part, TextField field, IUpdateModel updater, dynamic shapeHelper) { + var settings = field.PartFieldDefinition.Settings.GetModel(); + + if (String.IsNullOrEmpty(field.Value) && !String.IsNullOrEmpty(settings.DefaultValue)) { + field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary { { "Content", part.ContentItem } }); + } + + return null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Module.txt b/src/Orchard.Web/Modules/Orchard.Fields/Module.txt index d75f98af4..c17e7f310 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Fields/Module.txt @@ -9,4 +9,4 @@ Features: Orchard.Fields: Description: Contains the following fields: Input, Boolean, DateTime, Numeric, Link, Enumeration Category: Fields - Dependencies: Common, Orchard.Resources + Dependencies: Common, Orchard.Resources, Orchard.Tokens diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Orchard.Fields.csproj b/src/Orchard.Web/Modules/Orchard.Fields/Orchard.Fields.csproj index b2dd20a9b..c5f45cf24 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Orchard.Fields.csproj +++ b/src/Orchard.Web/Modules/Orchard.Fields/Orchard.Fields.csproj @@ -76,6 +76,7 @@ + @@ -90,6 +91,10 @@ Orchard.Core false + + {6f759635-13d7-4e94-bcc9-80445d63f117} + Orchard.Tokens + @@ -149,6 +154,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldEditorEvents.cs index 01dbc55be..30c53d60f 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldEditorEvents.cs @@ -1,17 +1,31 @@ -using System.Collections.Generic; -using System.Globalization; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using Orchard.Core.Common.ViewModels; +using Orchard.Localization.Services; +using System; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Settings { public class DateTimeFieldEditorEvents : ContentDefinitionEditorEventsBase { + private readonly IDateLocalizationServices _dateLocalizationServices; + + public DateTimeFieldEditorEvents(IDateLocalizationServices dateLocalizationServices) { + _dateLocalizationServices = dateLocalizationServices; + } public override IEnumerable PartFieldEditor(ContentPartFieldDefinition definition) { if (definition.FieldDefinition.Name == "DateTimeField") { var model = definition.Settings.GetModel(); + model.Editor = new DateTimeEditor() { + ShowDate = true, + ShowTime = true, + Date = _dateLocalizationServices.ConvertToLocalizedDateString(model.DefaultValue), + Time = _dateLocalizationServices.ConvertToLocalizedTimeString(model.DefaultValue), + }; yield return DefinitionTemplate(model); } } @@ -26,6 +40,8 @@ namespace Orchard.Fields.Settings { builder.WithSetting("DateTimeFieldSettings.Display", model.Display.ToString()); builder.WithSetting("DateTimeFieldSettings.Hint", model.Hint); builder.WithSetting("DateTimeFieldSettings.Required", model.Required.ToString(CultureInfo.InvariantCulture)); + model.DefaultValue = model.Editor == null ? model.DefaultValue : _dateLocalizationServices.ConvertFromLocalizedString(model.Editor.Date, model.Editor.Time); + builder.WithSetting("DateTimeFieldSettings.DefaultValue", model.DefaultValue.HasValue ? model.DefaultValue.Value.ToString(CultureInfo.InvariantCulture) : String.Empty); yield return DefinitionTemplate(model); } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldSettings.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldSettings.cs index 70fcf9c3a..97859bdd3 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/DateTimeFieldSettings.cs @@ -1,4 +1,7 @@ -namespace Orchard.Fields.Settings { +using Orchard.Core.Common.ViewModels; +using System; + +namespace Orchard.Fields.Settings { public enum DateTimeFieldDisplays { DateAndTime, @@ -10,5 +13,7 @@ public DateTimeFieldDisplays Display { get; set; } public string Hint { get; set; } public bool Required { get; set; } + public DateTime? DefaultValue { get; set; } + public DateTimeEditor Editor { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldEditorEvents.cs index 71fc4d27b..4a50d43ef 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldEditorEvents.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; -using System.Globalization; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Settings { public class EnumerationFieldListModeEvents : ContentDefinitionEditorEventsBase { @@ -27,6 +27,7 @@ namespace Orchard.Fields.Settings { builder.WithSetting("EnumerationFieldSettings.Required", model.Required.ToString(CultureInfo.InvariantCulture)); builder.WithSetting("EnumerationFieldSettings.Options", model.Options); builder.WithSetting("EnumerationFieldSettings.ListMode", model.ListMode.ToString()); + builder.WithSetting("EnumerationFieldSettings.DefaultValue", model.DefaultValue); } yield return DefinitionTemplate(model); diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldSettings.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldSettings.cs index bf8eef1a3..d23b85a9b 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/EnumerationFieldSettings.cs @@ -12,6 +12,7 @@ public bool Required { get; set; } public string Options { get; set; } public ListMode ListMode { get; set; } + public string DefaultValue { get; set; } public EnumerationFieldSettings() { ListMode = ListMode.Dropdown; diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldEditorEvents.cs index 03751730d..dd8104a3c 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldEditorEvents.cs @@ -1,9 +1,10 @@ -using System.Collections.Generic; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Settings { public class InputFieldListModeEvents : ContentDefinitionEditorEventsBase { @@ -32,6 +33,7 @@ namespace Orchard.Fields.Settings { builder.WithSetting("InputFieldSettings.Pattern", model.Pattern); builder.WithSetting("InputFieldSettings.EditorCssClass", model.EditorCssClass); builder.WithSetting("InputFieldSettings.MaxLength", model.MaxLength.ToString()); + builder.WithSetting("InputFieldSettings.DefaultValue", model.DefaultValue); } yield return DefinitionTemplate(model); diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldSettings.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldSettings.cs index e2553d561..c39ce4bb9 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/InputFieldSettings.cs @@ -18,6 +18,7 @@ public string Pattern { get; set; } public string EditorCssClass { get; set; } public int MaxLength { get; set; } + public string DefaultValue { get; set; } public InputFieldSettings() { Type = InputType.Text; diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldEditorEvents.cs index c5ce44a19..356aba645 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldEditorEvents.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; -using System.Globalization; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Settings { public class LinkFieldListModeEvents : ContentDefinitionEditorEventsBase { @@ -28,7 +28,9 @@ namespace Orchard.Fields.Settings { builder.WithSetting("LinkFieldSettings.TargetMode", model.TargetMode.ToString()); builder.WithSetting("LinkFieldSettings.LinkTextMode", model.LinkTextMode.ToString()); builder.WithSetting("LinkFieldSettings.StaticText", model.StaticText); - + builder.WithSetting("LinkFieldSettings.DefaultValue", model.DefaultValue); + builder.WithSetting("LinkFieldSettings.TextDefaultValue", model.TextDefaultValue); + yield return DefinitionTemplate(model); } } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldSettings.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldSettings.cs index be69ebcdc..62439a971 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/LinkFieldSettings.cs @@ -5,6 +5,8 @@ public TargetMode TargetMode { get; set; } public LinkTextMode LinkTextMode { get; set; } public string StaticText { get; set; } + public string DefaultValue { get; set; } + public string TextDefaultValue { get; set; } public LinkFieldSettings() { TargetMode = TargetMode.None; diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldEditorEvents.cs index 2ba02e475..ff037da5c 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldEditorEvents.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; -using System.Globalization; -using Orchard.ContentManagement; +using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; +using System.Collections.Generic; +using System.Globalization; namespace Orchard.Fields.Settings { public class NumericFieldListModeEvents : ContentDefinitionEditorEventsBase { @@ -28,6 +28,7 @@ namespace Orchard.Fields.Settings { builder.WithSetting("NumericFieldSettings.Scale", model.Scale.ToString(CultureInfo.InvariantCulture)); builder.WithSetting("NumericFieldSettings.Minimum", model.Minimum.HasValue ? model.Minimum.Value.ToString(CultureInfo.InvariantCulture) : string.Empty); builder.WithSetting("NumericFieldSettings.Maximum", model.Maximum.HasValue ? model.Maximum.Value.ToString(CultureInfo.InvariantCulture) : string.Empty); + builder.WithSetting("NumericFieldSettings.DefaultValue", model.DefaultValue); } yield return DefinitionTemplate(model); diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldSettings.cs b/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldSettings.cs index bbf59d5e3..5abca801b 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Settings/NumericFieldSettings.cs @@ -5,6 +5,7 @@ public int Scale { get; set; } public decimal? Minimum { get; set; } public decimal? Maximum { get; set; } + public string DefaultValue { get; set; } public NumericFieldSettings() { Scale = 0; diff --git a/src/Orchard.Web/Modules/Orchard.Fields/ViewModels/DateTimeFieldViewModel.cs b/src/Orchard.Web/Modules/Orchard.Fields/ViewModels/DateTimeFieldViewModel.cs index d140dcbd0..5fea628c6 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/ViewModels/DateTimeFieldViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/ViewModels/DateTimeFieldViewModel.cs @@ -6,5 +6,6 @@ namespace Orchard.Fields.ViewModels { public string Hint { get; set; } public bool IsRequired { get; set; } public DateTimeEditor Editor { get; set; } + public bool HasDefaultValue { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/DateTimeFieldSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/DateTimeFieldSettings.cshtml index 95195e59c..b6b72d301 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/DateTimeFieldSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/DateTimeFieldSettings.cshtml @@ -27,3 +27,12 @@ @Html.ValidationMessageFor(m => m.Hint) + +
+
+ + @Html.EditorFor(m => m.Editor) + @T("Pick a default date for the field. (optional)") + @Html.ValidationMessageFor(m => m.Editor) +
+
diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/EnumerationFieldSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/EnumerationFieldSettings.cshtml index 2d846278d..ffd253bff 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/EnumerationFieldSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/EnumerationFieldSettings.cshtml @@ -28,3 +28,11 @@ @T("The help text is written under the field when users are selecting an option.") @Html.ValidationMessageFor(m => m.Hint) +
+
+ + @Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) + @T("Enter a default option for the field. You can use tokens in this field. If there is no equivalent choice among Options, it will not be used. (optional)") + @Html.ValidationMessageFor(m => m.DefaultValue) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/InputFieldSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/InputFieldSettings.cshtml index f9bedae93..d3746ffed 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/InputFieldSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/InputFieldSettings.cshtml @@ -77,3 +77,11 @@ @Html.ValidationMessageFor(m => m.Hint) +
+
+ + @Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) + @T("A valid url as a default value, i.e. http://orchardproject.net, /content/file.pdf ... You can use tokens in this field. (optional)") + @Html.ValidationMessageFor(m => m.DefaultValue) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/LinkFieldSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/LinkFieldSettings.cshtml index a17fbe442..9dad8f7b7 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/LinkFieldSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/LinkFieldSettings.cshtml @@ -44,3 +44,19 @@ @Html.ValidationMessageFor(m => m.Hint) +
+
+ + @Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) + @T("A valid url as a default value, i.e. http://orchardproject.net, /content/file.pdf ... You can use tokens in this field. (optional)") + @Html.ValidationMessageFor(m => m.DefaultValue) +
+
+
+
+ + @Html.TextBoxFor(m => m.TextDefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) + @T("If the Link text is set to Optional or Required, a default value can be set for it. You can use tokens in this field. (optional)") + @Html.ValidationMessageFor(m => m.TextDefaultValue) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/NumericFieldSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/NumericFieldSettings.cshtml index ae7753967..09cedb61a 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/NumericFieldSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/NumericFieldSettings.cshtml @@ -39,3 +39,11 @@ @Html.ValidationMessageFor(m => m.Hint) +
+
+ + @Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) + @T("The default value for the field. It must be a number, and if not it will not shown. Make sure to set the Scale property if the value is not an integer. You can use tokens in this field. (optional)") + @Html.ValidationMessageFor(m => m.DefaultValue) +
+
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml new file mode 100644 index 000000000..a35bea691 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/DefinitionTemplates/TextFieldDefaultValueEditor.cshtml @@ -0,0 +1,7 @@ +@model Orchard.Core.Common.ViewModels.TextFieldSettingsEventsViewModel +@* This override is here so that the token helper can be used on the default value's textbox, which can not be used in Orchard.Core. *@ + + +@Html.TextBoxFor(m => m.Settings.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" }) +@T("Default value for the field. You can use tokens in this field. If there is no value given for the actual field, this will be filled in. (optional)") +@Html.ValidationMessageFor(m => m.Settings.DefaultValue) \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/DateTime.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/DateTime.Edit.cshtml index 999e87d9c..5c2d90e4b 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/DateTime.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/DateTime.Edit.cshtml @@ -6,4 +6,7 @@ @if (HasText(Model.Hint)) { @Model.Hint } + @if (Model.HasDefaultValue) { + @T("If the field is left empty then the default value will be used if one is configured.") + } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Input.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Input.Edit.cshtml index 7b253c7ec..874372f87 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Input.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Input.Edit.cshtml @@ -11,4 +11,7 @@ @if (HasText(settings.Hint)) { @settings.Hint } + @if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) { + @T("If the field is left empty then the default value will be used.") + } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Link.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Link.Edit.cshtml index ecd470a31..f1c487f09 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Link.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Link.Edit.cshtml @@ -27,13 +27,21 @@ @Html.TextBoxFor(m => m.Value, new { @class = "text large" }) @T("A valid url, i.e. http://orchardproject.net, /content/file.pdf, ...") + @if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) { + @T("If the field is left empty then the default value will be used.") + } @if (settings.LinkTextMode == LinkTextMode.Optional || settings.LinkTextMode == LinkTextMode.Required) {
- @Html.TextBoxFor(m => m.Text, new {@class = "text medium"}) - @T("The text of the link. If left empty, the url will be used instead.") + @Html.TextBoxFor(m => m.Text, new { @class = "text medium" }) + @if (!String.IsNullOrWhiteSpace(settings.TextDefaultValue)) { + @T("If the field is left empty then the default value will be used.") + } + else { + @T("The text of the link. If left empty, the url will be used instead.") + }
} diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml index 4f127b4da..baae80d67 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml @@ -11,4 +11,7 @@ @if (HasText(Model.Settings.Hint)) { @Model.Settings.Hint } + @if (!String.IsNullOrWhiteSpace(Model.Settings.DefaultValue)) { + @T("If the field is left empty then the default value will be used.") + } diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MediaMetaDataExtensions.cs similarity index 98% rename from src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs rename to src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MediaMetaDataExtensions.cs index 154150808..322d2f672 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MetaDataExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Extensions/MediaMetaDataExtensions.cs @@ -5,7 +5,7 @@ using System.Web; using Orchard.ContentManagement.MetaData.Builders; namespace Orchard.ContentManagement.MetaData { - public static class MetaDataExtensions { + public static class MediaMetaDataExtensions { /// /// This extension method can be used for easy image part creation. Adds all necessary parts and settings to the part. /// diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index dac14d392..b6e833093 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -101,7 +101,7 @@ - + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/WidgetsMetaDataExtensions.cs similarity index 96% rename from src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs rename to src/Orchard.Web/Modules/Orchard.Widgets/Extensions/WidgetsMetaDataExtensions.cs index 720ace53a..e043ec465 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/MetaDataExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Extensions/WidgetsMetaDataExtensions.cs @@ -5,7 +5,7 @@ using System.Web; using Orchard.ContentManagement.MetaData.Builders; namespace Orchard.ContentManagement.MetaData { - public static class MetaDataExtensions { + public static class WidgetsMetaDataExtensions { /// /// This extension method can be used for easy widget creation. Adds all necessary parts and settings to the part. /// diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 8770c9dca..7b728ff1f 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -72,7 +72,7 @@ - +