diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js index a4df51b252..f3039f9faf 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js @@ -36,8 +36,8 @@ } function clickItem(item) { - // if item.id is 0 use item.key - $location.path($scope.entityType + '/' +$scope.entityType + '/edit/' + (item.id === 0 ? item.key : item.id)); + // if item.id is 2147483647 (int.MaxValue) use item.key + $location.path($scope.entityType + '/' +$scope.entityType + '/edit/' + (item.id === 2147483647 ? item.key : item.id)); } function isSortDirection(col, direction) { diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml index 40f4a79ed2..ffb0a9d96b 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml @@ -304,8 +304,16 @@ Vælg editor - Rediger de forskellige sprogversioner for ordbogselementet '%0%' herunder. Du tilføjer flere sprog under 'sprog' i menuen til venstre + Du tilføjer flere sprog under 'sprog' i menuen til venstre + ]]> Kulturnavn + Rediger navnet på ordbogselementet. + + + Indtast dit brugernavn diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 92160e85f0..f710e54215 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -327,6 +327,12 @@ Edit the different language versions for the dictionary item '%0%' below
You can add additional languages under the 'languages' in the menu on the left ]]> Culture Name + Edit the key of the dictionary item. + + + Enter your username diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml index aa896185d3..80c6faf07b 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml @@ -328,6 +328,12 @@ Edit the different language versions for the dictionary item '%0%' below
You can add additional languages under the 'languages' in the menu on the left ]]> Culture Name + Edit the key of the dictionary item. + + + Enter your username diff --git a/src/Umbraco.Web/HealthCheck/Checks/Security/ExcessiveHeadersCheck.cs b/src/Umbraco.Web/HealthCheck/Checks/Security/ExcessiveHeadersCheck.cs index af1b15818a..83275450e4 100644 --- a/src/Umbraco.Web/HealthCheck/Checks/Security/ExcessiveHeadersCheck.cs +++ b/src/Umbraco.Web/HealthCheck/Checks/Security/ExcessiveHeadersCheck.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Net; using System.Web; +using Umbraco.Core.Configuration; using Umbraco.Core.Services; namespace Umbraco.Web.HealthCheck.Checks.Security @@ -45,10 +46,11 @@ namespace Umbraco.Web.HealthCheck.Checks.Security { var message = string.Empty; var success = false; - var url = HealthCheckContext.HttpContext.Request.Url; - - // Access the site home page and check for the headers - var address = string.Format("http://{0}:{1}", url.Host.ToLower(), url.Port); + var url = HealthCheckContext.HttpContext.Request.Url; + + // Access the site home page and check for the headers + var useSsl = GlobalSettings.UseSSL || HealthCheckContext.HttpContext.Request.ServerVariables["SERVER_PORT"] == "443"; + var address = string.Format("http{0}://{1}:{2}", useSsl ? "s" : "", url.Host.ToLower(), url.Port); var request = WebRequest.Create(address); request.Method = "HEAD"; try diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs index b3c466db59..1a3f8862ee 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -38,7 +38,7 @@ namespace Umbraco.Web.Models.Mapping config.CreateMap() .ConstructUsing(user => MemberService.CreateGenericMembershipProviderMember(user.UserName, user.Email, user.UserName, "")) //we're giving this entity an ID of 0 - we cannot really map it but it needs an id so the system knows it's not a new entity - .ForMember(member => member.Id, expression => expression.MapFrom(user => 0)) + .ForMember(member => member.Id, expression => expression.MapFrom(user => int.MaxValue)) .ForMember(member => member.Comments, expression => expression.MapFrom(user => user.Comment)) .ForMember(member => member.CreateDate, expression => expression.MapFrom(user => user.CreationDate)) .ForMember(member => member.UpdateDate, expression => expression.MapFrom(user => user.LastActivityDate)) @@ -119,7 +119,7 @@ namespace Umbraco.Web.Models.Mapping //FROM MembershipUser TO MemberBasic config.CreateMap() //we're giving this entity an ID of 0 - we cannot really map it but it needs an id so the system knows it's not a new entity - .ForMember(member => member.Id, expression => expression.MapFrom(user => 0)) + .ForMember(member => member.Id, expression => expression.MapFrom(user => int.MaxValue)) .ForMember(member => member.CreateDate, expression => expression.MapFrom(user => user.CreationDate)) .ForMember(member => member.UpdateDate, expression => expression.MapFrom(user => user.LastActivityDate)) .ForMember(member => member.Key, expression => expression.MapFrom(user => user.ProviderUserKey.TryConvertTo().Result.ToString("N"))) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs index deb77f4bad..c5fa46832b 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/EditDictionaryItem.aspx.cs @@ -1,55 +1,75 @@ using System; -using System.Collections; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Web; -using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; -using System.Web.UI.HtmlControls; +using umbraco.BusinessLogic; +using umbraco.cms.businesslogic; using umbraco.cms.presentation.Trees; using Umbraco.Core; -using Umbraco.Core.IO; namespace umbraco.settings { - /// - /// Summary description for EditDictionaryItem. - /// + /// + /// Summary description for EditDictionaryItem. + /// [WebformsPageTreeAuthorize(Constants.Trees.Dictionary)] - public partial class EditDictionaryItem : BasePages.UmbracoEnsuredPage - { - - protected LiteralControl keyTxt = new LiteralControl(); - protected uicontrols.TabView tbv = new uicontrols.TabView(); - private System.Collections.ArrayList languageFields = new System.Collections.ArrayList(); + public partial class EditDictionaryItem : BasePages.UmbracoEnsuredPage + { + + protected LiteralControl keyTxt = new LiteralControl(); + protected uicontrols.TabView tbv = new uicontrols.TabView(); + private System.Collections.ArrayList languageFields = new System.Collections.ArrayList(); private cms.businesslogic.Dictionary.DictionaryItem currentItem; + protected TextBox boxChangeKey; + protected Label labelChangeKey; + protected Literal txt; + protected User currentUser; - protected void Page_Load(object sender, System.EventArgs e) - { - currentItem = new cms.businesslogic.Dictionary.DictionaryItem(int.Parse(Request.QueryString["id"])); + protected void Page_Load(object sender, System.EventArgs e) + { + currentItem = new cms.businesslogic.Dictionary.DictionaryItem(int.Parse(Request.QueryString["id"])); + currentUser = getUser(); - // Put user code to initialize the page here - Panel1.hasMenu = true; - Panel1.Text = ui.Text("editdictionary") + ": " + currentItem.key; - - uicontrols.Pane p = new uicontrols.Pane(); + // Put user code to initialize the page here + Panel1.hasMenu = true; + Panel1.Text = ui.Text("editdictionary") + ": " + currentItem.key; - var save = Panel1.Menu.NewButton(); + var save = Panel1.Menu.NewButton(); save.Text = ui.Text("save"); save.Click += save_Click; - save.ToolTip = ui.Text("save"); + save.ToolTip = ui.Text("save"); save.ID = "save"; save.ButtonType = uicontrols.MenuButtonType.Primary; - Literal txt = new Literal(); - txt.Text = "

" + ui.Text("dictionaryItem", "description", currentItem.key, base.getUser()) + "


"; + uicontrols.Pane p = new uicontrols.Pane(); + + boxChangeKey = new TextBox + { + ID = "changeKey-" + currentItem.id, + CssClass = "umbEditorTextField", + Text = currentItem.key + }; + + labelChangeKey = new Label + { + ID = "changeKeyLabel", + CssClass = "text-error" + }; + + p.addProperty(new Literal + { + Text = "

" + ui.Text("dictionaryItem", "changeKey", currentUser) + "

" + }); + p.addProperty(boxChangeKey); + p.addProperty(labelChangeKey); + + + txt = new Literal(); + txt.Text = "

" + ui.Text("dictionaryItem", "description", currentItem.key, currentUser) + "


"; p.addProperty(txt); - - foreach (cms.businesslogic.language.Language l in cms.businesslogic.language.Language.getAll) - { - + + foreach (cms.businesslogic.language.Language l in cms.businesslogic.language.Language.getAll) + { + TextBox languageBox = new TextBox(); languageBox.TextMode = TextBoxMode.MultiLine; languageBox.ID = l.id.ToString(); @@ -61,83 +81,104 @@ namespace umbraco.settings languageFields.Add(languageBox); p.addProperty(l.FriendlyName, languageBox); - } + } - if (!IsPostBack) - { - var path = BuildPath(currentItem); - ClientTools - .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias) - .SyncTree(path, false); - } + if (!IsPostBack) + { + var path = BuildPath(currentItem); + ClientTools + .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias) + .SyncTree(path, false); + } Panel1.Controls.Add(p); - } + } - private string BuildPath(cms.businesslogic.Dictionary.DictionaryItem current) - { - var parentPath = current.IsTopMostItem() ? "" : BuildPath(current.Parent) + ","; - return parentPath + current.id; - } + private string BuildPath(cms.businesslogic.Dictionary.DictionaryItem current) + { + var parentPath = current.IsTopMostItem() ? "" : BuildPath(current.Parent) + ","; + return parentPath + current.id; + } void save_Click(object sender, EventArgs e) { - foreach (TextBox t in languageFields) + foreach (TextBox t in languageFields) { //check for null but allow empty string! // http://issues.umbraco.org/issue/U4-1931 - if (t.Text != null) + if (t.Text != null) { - currentItem.setValue(int.Parse(t.ID),t.Text); - } - } - ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "dictionaryItemSaved"), ""); - } - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - /* - tbv.ID="tabview1"; - tbv.Width = 400; - tbv.Height = 200; - */ + currentItem.setValue(int.Parse(t.ID), t.Text); + } + } - InitializeComponent(); - base.OnInit(e); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - } - #endregion + labelChangeKey.Text = ""; // reset error text + var newKey = boxChangeKey.Text; + if (string.IsNullOrWhiteSpace(newKey) == false && newKey != currentItem.key) + { + // key already exists, save but inform + if (Dictionary.DictionaryItem.hasKey(newKey) == true) + { + labelChangeKey.Text = ui.Text("dictionaryItem", "changeKeyError", newKey, currentUser); + boxChangeKey.Text = currentItem.key; // reset key + } + else + { + // set the new key + currentItem.setKey(newKey); + + // update the title with the new key + Panel1.title.InnerHtml = ui.Text("editdictionary") + ": " + newKey; + + // sync the content tree + var path = BuildPath(currentItem); + ClientTools.SyncTree(path, true); + } + } + txt.Text = "

" + ui.Text("dictionaryItem", "description", currentItem.key, currentUser) + "


"; + ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "dictionaryItemSaved"), ""); + } + + #region Web Form Designer generated code + + override protected void OnInit(EventArgs e) + { + InitializeComponent(); + base.OnInit(e); + } + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + } + + #endregion + private class languageTextbox : TextBox + { - private class languageTextbox : TextBox - { - - private int _languageid; - public int languageid - { - set {_languageid = value;} - get {return _languageid;} - } - public languageTextbox(int languageId) : base() { - this.TextMode = TextBoxMode.MultiLine; - this.Rows = 10; - this.Columns = 40; - this.Attributes.Add("style", "margin: 3px; width: 98%;"); - - this.languageid = languageId; - } - } - } + private int _languageid; + + public int languageid + { + set { _languageid = value; } + get { return _languageid; } + } + + public languageTextbox(int languageId) : base() + { + this.TextMode = TextBoxMode.MultiLine; + this.Rows = 10; + this.Columns = 40; + this.Attributes.Add("style", "margin: 3px; width: 98%;"); + + this.languageid = languageId; + } + } + } } diff --git a/src/umbraco.cms/businesslogic/Dictionary.cs b/src/umbraco.cms/businesslogic/Dictionary.cs index 8e76122175..206965168e 100644 --- a/src/umbraco.cms/businesslogic/Dictionary.cs +++ b/src/umbraco.cms/businesslogic/Dictionary.cs @@ -169,6 +169,12 @@ namespace umbraco.cms.businesslogic } } + public void setKey(string value) + { + key = value; + Save(); + } + public string Value(int languageId) { if (languageId == 0)