diff --git a/src/Umbraco.Web.UI/config/trees.Release.config b/src/Umbraco.Web.UI/config/trees.Release.config
index 2124c72560..f58a051a2a 100644
--- a/src/Umbraco.Web.UI/config/trees.Release.config
+++ b/src/Umbraco.Web.UI/config/trees.Release.config
@@ -13,7 +13,7 @@
-
+
diff --git a/src/Umbraco.Web.UI/config/trees.config b/src/Umbraco.Web.UI/config/trees.config
index 2124c72560..2f7ca1acf0 100644
--- a/src/Umbraco.Web.UI/config/trees.config
+++ b/src/Umbraco.Web.UI/config/trees.config
@@ -8,12 +8,12 @@
-
+
-
+
@@ -37,5 +37,5 @@
+ iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="10" />-->
\ No newline at end of file
diff --git a/src/Umbraco.Web/Trees/LanguageTreeController.cs b/src/Umbraco.Web/Trees/LanguageTreeController.cs
new file mode 100644
index 0000000000..39fd1ebee5
--- /dev/null
+++ b/src/Umbraco.Web/Trees/LanguageTreeController.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Globalization;
+using System.Net.Http.Formatting;
+using umbraco;
+using umbraco.BusinessLogic.Actions;
+using Umbraco.Core;
+using Umbraco.Web.Models.Trees;
+using Umbraco.Web.Mvc;
+using Umbraco.Web.WebApi.Filters;
+using Constants = Umbraco.Core.Constants;
+
+namespace Umbraco.Web.Trees
+{
+ [UmbracoTreeAuthorize(Constants.Trees.Languages)]
+ [LegacyBaseTree(typeof(loadLanguages))]
+ [Tree(Constants.Applications.Settings, Constants.Trees.Languages, "Languages")]
+ [PluginController("UmbracoTrees")]
+ [CoreTree]
+ public class LanguageTreeController : TreeController
+ {
+ ///
+ /// The method called to render the contents of the tree structure
+ ///
+ ///
+ ///
+ /// All of the query string parameters passed from jsTree
+ ///
+ ///
+ /// We are allowing an arbitrary number of query strings to be pased in so that developers are able to persist custom data from the front-end
+ /// to the back end to be used in the query for model data.
+ ///
+ protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings)
+ {
+ var nodes = new TreeNodeCollection();
+
+ if (id == Constants.System.Root.ToInvariantString())
+ {
+ var languages = Services.LocalizationService.GetAllLanguages();
+ foreach (var language in languages)
+ {
+ nodes.Add(
+ CreateTreeNode(
+ language.Id.ToString(CultureInfo.InvariantCulture), "-1", queryStrings, language.CultureInfo.DisplayName, "icon-flag-alt", false,
+ //TODO: Rebuild the language editor in angular, then we dont need to have this at all (which is just a path to the legacy editor)
+ "/" + queryStrings.GetValue("application") + "/framed/" +
+ Uri.EscapeDataString("/umbraco/settings/editLanguage.aspx?id=" + language.Id)));
+ }
+ }
+ return nodes;
+ }
+
+ ///
+ /// Returns the menu structure for the node
+ ///
+ ///
+ ///
+ ///
+ protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings)
+ {
+ var menu = new MenuItemCollection();
+
+ if (id == Constants.System.Root.ToInvariantString())
+ {
+ //Create the normal create action
+ var createMenuItem = menu.Items.Add(ui.Text("actions", ActionNew.Instance.Alias));
+ createMenuItem.LaunchDialogUrl("/umbraco/create.aspx?nodeId=init&nodeType=initlanguages&nodeName=Languages", ui.GetText("general", "create"));
+
+ //refresh action
+ menu.Items.Add(ui.Text("actions", ActionRefresh.Instance.Alias), true);
+
+ return menu;
+ }
+
+ //add delete option for all languages
+ menu.Items.Add(ui.Text("actions", ActionDelete.Instance.Alias));
+
+ return menu;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index c197ae6852..d871aced4e 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -506,6 +506,7 @@
+
@@ -2160,4 +2161,4 @@
-
+
\ No newline at end of file
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadLanguages.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadLanguages.cs
index 7dd10e3755..8bd6d33ebf 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadLanguages.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadLanguages.cs
@@ -29,7 +29,8 @@ using Umbraco.Core;
namespace umbraco
{
- [Tree(Constants.Applications.Settings, "languages", "Languages", sortOrder: 4)]
+ [Obsolete("This is no longer used and will be removed from the codebase in the future")]
+ //[Tree(Constants.Applications.Settings, "languages", "Languages", sortOrder: 4)]
public class loadLanguages : BaseTree
{
public loadLanguages(string application) : base(application) { }
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs
index 9bc4beefe7..bcb1a5f8db 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs
@@ -11,6 +11,7 @@ using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using umbraco.cms.presentation.Trees;
using Umbraco.Core;
+using Umbraco.Web.Trees;
namespace umbraco.settings
{
@@ -42,7 +43,7 @@ namespace umbraco.settings
updateCultureList();
ClientTools
- .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias)
+ .SetActiveTreeType(Constants.Trees.Languages)
.SyncTree(helper.Request("id"), false);
}