Compare commits

...

9 Commits

Author SHA1 Message Date
Anders Bjerner ad99d164c9 U4-11477 Here we go again
https://github.com/umbraco/Umbraco-CMS/pull/2720#issuecomment-400106496
2018-06-25 23:58:25 +02:00
Anders Bjerner ae3205c429 Fixes U4-11426 for files as well
The original fix from #2679 only fixes the bug for images, as it checks whether the `umbracoWidth` and `umbracoHeight` properties are present. With this PR, the bug is now fixed for both images and regular files.
2018-06-25 12:08:42 +02:00
Joshua Pease 10c71a7381 Set a initial $scope.model.value for true/false 2018-06-25 08:24:22 +02:00
Sebastiaan Janssen 9875c37cf2 Bumps version to 7.11.1 2018-06-21 10:48:25 +02:00
Sebastiaan Janssen 67e36a0d60 U4-11456 Package installation - Load usercontrol: file cannot be found: /umbraco/developer/Packages/installer.aspx 2018-06-21 10:38:04 +02:00
Sebastiaan Janssen bcca0528c0 U4-11462 Error when using Simple Injector - 'The Tree controller is missing the Umbraco.Web.Trees.TreeAttribute attribute' 2018-06-21 08:19:53 +02:00
Shannon Deminick 4f04692afa Merge pull request #2707 from umbraco/temp-U4-11341
U4-11341 Content node tree collapse on random nodes level 3 or lower …
2018-06-20 18:25:22 +10:00
Sebastiaan Janssen 9909b10edb Removes more unnecessary code from the tree syncing if we don't need to consider the start nodes 2018-06-20 09:26:09 +02:00
Sebastiaan Janssen 4e6c4d6f7f U4-11341 Content node tree collapse on random nodes level 3 or lower after upgrade to 7.10.4 2018-06-19 16:08:11 +02:00
15 changed files with 164 additions and 104 deletions
+1 -1
View File
@@ -46,7 +46,7 @@
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.SettingsDictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6"
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.DictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add alias="dictionary" application="settings"
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.11.0")]
[assembly: AssemblyInformationalVersion("7.11.0")]
[assembly: AssemblyFileVersion("7.11.1")]
[assembly: AssemblyInformationalVersion("7.11.1")]
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.11.0");
private static readonly Version Version = new Version("7.11.1");
/// <summary>
/// Gets the current version of Umbraco.
@@ -140,37 +140,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat
//Filter the path for root node ids (we don't want to pass in -1 or 'init')
args.path = _.filter(args.path, function (item) { return (item !== "init" && item !== "-1"); });
//Once those are filtered we need to check if the current user has a special start node id,
// if they do, then we're going to trim the start of the array for anything found from that start node
// and previous so that the tree syncs properly. The tree syncs from the top down and if there are parts
// of the tree's path in there that don't actually exist in the dom/model then syncing will not work.
userService.getCurrentUser().then(function (userData) {
var startNodes = [];
for (var i = 0; i < userData.startContentIds; i++) {
startNodes.push(userData.startContentIds[i]);
}
for (var j = 0; j < userData.startMediaIds; j++) {
startNodes.push(userData.startMediaIds[j]);
}
_.each(startNodes, function (i) {
var found = _.find(args.path, function (p) {
return String(p) === String(i);
});
if (found) {
args.path = args.path.splice(_.indexOf(args.path, found));
}
});
loadPath(args.path, args.forceReload, args.activate);
});
loadPath(args.path, args.forceReload, args.activate);
return deferred.promise;
};
@@ -318,25 +318,25 @@ angular.module("umbraco")
mediaItem.thumbnail = mediaHelper.resolveFileFromEntity(mediaItem, true);
mediaItem.image = mediaHelper.resolveFileFromEntity(mediaItem, false);
// set properties to match a media object
if (mediaItem.metaData &&
mediaItem.metaData.umbracoWidth &&
mediaItem.metaData.umbracoHeight) {
mediaItem.properties = [
{
mediaItem.properties = [];
if (mediaItem.metaData) {
if (mediaItem.metaData.umbracoWidth && mediaItem.metaData.umbracoHeight) {
mediaItem.properties.push({
alias: "umbracoWidth",
value: mediaItem.metaData.umbracoWidth.Value
},
{
});
mediaItem.properties.push({
alias: "umbracoHeight",
value: mediaItem.metaData.umbracoHeight.Value
},
{
alias: 'umbracoFile',
});
}
if (mediaItem.metaData.umbracoFile) {
mediaItem.properties.push({
alias: "umbracoFile",
editor: mediaItem.metaData.umbracoFile.PropertyEditorAlias,
value: mediaItem.metaData.umbracoFile.Value
}
];
});
}
}
});
// update images
@@ -16,6 +16,10 @@ function booleanEditorController($scope, $rootScope, assetsService) {
setupViewModel();
if( $scope.model && !$scope.model.value ) {
$scope.model.value = ($scope.renderModel.value === true) ? '1' : '0';
}
//here we declare a special method which will be called whenever the value has changed from the server
//this is instead of doing a watch on the model.value = faster
$scope.model.onValueChanged = function (newVal, oldVal) {
+3 -2
View File
@@ -492,6 +492,7 @@
<Content Include="Umbraco\Config\Lang\tr.xml" />
<Content Include="Umbraco\Config\Lang\zh_tw.xml" />
<Content Include="Umbraco\create.aspx" />
<Content Include="Umbraco\Developer\Packages\installer.aspx" />
<Content Include="Umbraco\Logout.aspx" />
<Content Include="Umbraco\umbraco.aspx" />
<Content Include="Umbraco_Client\Application\JQuery\jquery.unobtrusive-ajax.min.js" />
@@ -1034,9 +1035,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>7110</DevelopmentServerPort>
<DevelopmentServerPort>7111</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:7110</IISUrl>
<IISUrl>http://localhost:7111</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
@@ -0,0 +1,10 @@
<%@ Page Language="c#" MasterPageFile="../../masterpages/umbracoPage.Master"
AutoEventWireup="True" Inherits="umbraco.presentation.developer.packages.Installer" Trace="false" ValidateRequest="false" %>
<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
<asp:Content ContentPlaceHolderID="body" runat="server">
<cc1:UmbracoPanel ID="Panel1" Text="Install package" runat="server" Width="496px" Height="584px">
<cc1:Pane ID="pane_installing" runat="server" Visible="false" Text=""></cc1:Pane>
<cc1:Pane ID="pane_optional" runat="server" Visible="false" />
</cc1:UmbracoPanel>
</asp:Content>
@@ -16,7 +16,7 @@
<add application="settings" alias="stylesheetProperty" title="Stylesheet Property" type="umbraco.loadStylesheetProperty, umbraco" iconClosed="" iconOpen="" initialize="false" sortOrder="0" />
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4" />
<add application="settings" alias="languages" title="Languages" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.LanguageTreeController, umbraco" sortOrder="5" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.SettingsDictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.DictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6" />
<add initialize="true" sortOrder="7" alias="mediaTypes" application="settings" title="Media Types" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MediaTypeTreeController, umbraco" />
<add initialize="true" sortOrder="8" alias="contentBlueprints" application="settings" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.ContentBlueprintTreeController, umbraco" />
+1 -1
View File
@@ -14,7 +14,7 @@
<add application="settings" alias="stylesheetProperty" title="Stylesheet Property" type="umbraco.loadStylesheetProperty, umbraco" iconClosed="" iconOpen="" initialize="false" sortOrder="0" />
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4" />
<add application="settings" alias="languages" title="Languages" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.LanguageTreeController, umbraco" sortOrder="5" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.SettingsDictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.DictionaryTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6" />
<add initialize="true" sortOrder="7" alias="mediaTypes" application="settings" title="Media Types" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MediaTypeTreeController, umbraco" />
<add initialize="true" sortOrder="8" alias="contentBlueprints" application="settings" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.ContentBlueprintTreeController, umbraco" />
<!--Developer-->
@@ -5,11 +5,32 @@ using umbraco.BusinessLogic.Actions;
using Umbraco.Core;
using Umbraco.Core.Services;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.WebApi.Filters;
namespace Umbraco.Web.Trees
{
public class DictionaryTreeBaseController : TreeController
[UmbracoTreeAuthorize(Constants.Trees.Dictionary)]
[Mvc.PluginController("UmbracoTrees")]
[CoreTree]
[Tree(Constants.Applications.Settings, Constants.Trees.Dictionary, null, sortOrder: 3)]
public class DictionaryTreeController : TreeController
{
protected override TreeNode CreateRootNode(FormDataCollection queryStrings)
{
var root = base.CreateRootNode(queryStrings);
// the default section is settings, falling back to this if we can't
// figure out where we are from the querystring parameters
var section = Constants.Applications.Settings;
if (queryStrings["application"] != null)
section = queryStrings["application"];
// this will load in a custom UI instead of the dashboard for the root node
root.RoutePath = $"{section}/{Constants.Trees.Dictionary}/list";
return root;
}
/// <summary>
/// The method called to render the contents of the tree structure
/// </summary>
@@ -1,24 +0,0 @@
using System.Net.Http.Formatting;
using Umbraco.Core;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.WebApi.Filters;
namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Dictionary)]
[Tree(Constants.Applications.Settings, Constants.Trees.Dictionary, null, sortOrder: 3)]
[Mvc.PluginController("UmbracoTrees")]
[CoreTree]
public class SettingsDictionaryTreeController : DictionaryTreeBaseController
{
protected override TreeNode CreateRootNode(FormDataCollection queryStrings)
{
var root = base.CreateRootNode(queryStrings);
// this will load in a custom UI instead of the dashboard for the root node
root.RoutePath = $"{Constants.Applications.Settings}/{Constants.Trees.Dictionary}/list";
return root;
}
}
}
@@ -1,24 +0,0 @@
using System.Net.Http.Formatting;
using Umbraco.Core;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.WebApi.Filters;
namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Dictionary)]
[Tree(Constants.Applications.Translation, Constants.Trees.Dictionary, null, sortOrder: 3)]
[Mvc.PluginController("UmbracoTrees")]
[CoreTree]
public class TranslationDictionaryTreeController : DictionaryTreeBaseController
{
protected override TreeNode CreateRootNode(FormDataCollection queryStrings)
{
var root = base.CreateRootNode(queryStrings);
// this will load in a custom UI instead of the dashboard for the root node
root.RoutePath = $"{Constants.Applications.Translation}/{Constants.Trees.Dictionary}/list";
return root;
}
}
}
+4 -3
View File
@@ -528,9 +528,7 @@
<Compile Include="Models\Mapping\PropertyTypeGroupResolver.cs" />
<Compile Include="Security\Identity\PreviewAuthenticationMiddleware.cs" />
<Compile Include="SingletonHttpContextAccessor.cs" />
<Compile Include="Trees\DictionaryTreeBaseController.cs" />
<Compile Include="Trees\SettingsDictionaryTreeController.cs" />
<Compile Include="Trees\TranslationDictionaryTreeController.cs" />
<Compile Include="Trees\DictionaryBaseController.cs" />
<Compile Include="Trees\MacroTreeController.cs" />
<Compile Include="Trees\UserTreeController.cs" />
<Compile Include="Suspendable.cs" />
@@ -543,6 +541,9 @@
<Compile Include="Trees\XsltTreeController.cs" />
<Compile Include="umbraco.presentation\SafeXmlReaderWriter.cs" />
<Compile Include="Trees\ScriptTreeController.cs" />
<Compile Include="umbraco.presentation\umbraco\developer\Packages\installer.aspx.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="UmbracoDefaultOwinStartup.cs" />
<Compile Include="IUmbracoContextAccessor.cs" />
<Compile Include="Models\ContentEditing\Relation.cs" />
@@ -0,0 +1,101 @@
using System;
using System.Web.UI;
using umbraco.BasePages;
using umbraco.BusinessLogic;
using umbraco.cms.presentation.Trees;
using Umbraco.Core;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Web;
namespace umbraco.presentation.developer.packages
{
/// <summary>
/// Summary description for packager.
/// </summary>
[Obsolete("This should not be used and will be removed in v8, this is kept here only for backwards compat reasons, this page should never be rendered/used")]
public class Installer : UmbracoEnsuredPage
{
private Control _configControl;
private readonly cms.businesslogic.packager.Installer _installer;
protected uicontrols.Pane pane_installing;
protected uicontrols.Pane pane_optional;
public Installer()
{
CurrentApp = DefaultApps.developer.ToString();
_installer = new cms.businesslogic.packager.Installer(UmbracoUser.Id);
}
protected void Page_Load(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(Request.GetItemAsString("installing")))
return;
pane_optional.Visible = false;
pane_installing.Visible = true;
ProcessInstall(Request.GetItemAsString("installing"));
}
private void ProcessInstall(string currentStep)
{
var dir = Request.GetItemAsString("dir");
int.TryParse(Request.GetItemAsString("pId"), out var packageId);
switch (currentStep.ToLowerInvariant())
{
case "custominstaller":
var customControl = Request.GetItemAsString("customControl");
if (customControl.IsNullOrWhiteSpace() == false)
{
pane_optional.Visible = false;
_configControl = LoadControl(SystemDirectories.Root + customControl);
_configControl.ID = "packagerConfigControl";
pane_optional.Controls.Add(_configControl);
pane_optional.Visible = true;
if (IsPostBack == false)
{
//We still need to clean everything up which is normally done in the Finished Action
PerformPostInstallCleanup(packageId, dir);
}
}
else
{
//if the custom installer control is empty here (though it should never be because we've already checked for it previously)
//then we should run the normal FinishedAction
PerformFinishedAction(packageId, dir);
}
break;
default:
break;
}
}
private void PerformPostInstallCleanup(int packageId, string dir)
{
_installer.InstallCleanUp(packageId, dir);
// Update ClientDependency version
var clientDependencyConfig = new Umbraco.Core.Configuration.ClientDependencyConfiguration(LoggerResolver.Current.Logger);
clientDependencyConfig.IncreaseVersionNumber();
//clear the tree cache - we'll do this here even though the browser will reload, but just in case it doesn't can't hurt.
ClientTools.ClearClientTreeCache().RefreshTree("packager");
TreeDefinitionCollection.Instance.ReRegisterTrees();
BusinessLogic.Actions.Action.ReRegisterActionsAndHandlers();
}
private void PerformFinishedAction(int packageId, string dir)
{
pane_optional.Visible = false;
PerformPostInstallCleanup(packageId, dir);
}
}
}