Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6616

This commit is contained in:
bjarnef
2015-11-16 01:12:49 +01:00
51 changed files with 301 additions and 90 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
# Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)
7.3.1
7.3.2
+1 -1
View File
@@ -11,7 +11,7 @@ namespace Umbraco.Core
/// <summary>
/// A resolver to return all IAction objects
/// </summary>
internal sealed class ActionsResolver : LazyManyObjectsResolverBase<ActionsResolver, IAction>
public sealed class ActionsResolver : LazyManyObjectsResolverBase<ActionsResolver, IAction>
{
/// <summary>
/// Constructor
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.3.1");
private static readonly Version Version = new Version("7.3.2");
/// <summary>
/// Gets the current version of Umbraco.
+1 -1
View File
@@ -154,7 +154,7 @@ namespace Umbraco.Core.IO
{
get
{
return IOHelper.ReturnPath("umbracoWebservicesPath", "~/umbraco/webservices");
return IOHelper.ReturnPath("umbracoWebservicesPath", Umbraco.EnsureEndsWith("/") + "webservices");
}
}
@@ -11,7 +11,7 @@ namespace Umbraco.Core.Models.Rdbms
internal class MigrationDto
{
[Column("id")]
[PrimaryKeyColumn(AutoIncrement = true)]
[PrimaryKeyColumn(AutoIncrement = true, IdentitySeed = 100)]
public int Id { get; set; }
[Column("name")]
@@ -0,0 +1,38 @@
using System.Collections.Concurrent;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
namespace Umbraco.Core.Persistence.Mappers
{
/// <summary>
/// Represents a <see cref="TaskType"/> to DTO mapper used to translate the properties of the public api
/// implementation to that of the database's DTO as sql: [tableName].[columnName].
/// </summary>
[MapperFor(typeof(TaskType))]
public sealed class TaskTypeMapper : BaseMapper
{
private static readonly ConcurrentDictionary<string, DtoMapModel> PropertyInfoCacheInstance = new ConcurrentDictionary<string, DtoMapModel>();
//NOTE: its an internal class but the ctor must be public since we're using Activator.CreateInstance to create it
// otherwise that would fail because there is no public constructor.
public TaskTypeMapper()
{
BuildMap();
}
#region Overrides of BaseMapper
internal override ConcurrentDictionary<string, DtoMapModel> PropertyInfoCache
{
get { return PropertyInfoCacheInstance; }
}
internal override void BuildMap()
{
CacheMap<TaskType, TaskTypeDto>(src => src.Id, dto => dto.Id);
CacheMap<TaskType, TaskTypeDto>(src => src.Alias, dto => dto.Alias);
}
#endregion
}
}
@@ -0,0 +1,34 @@
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeTwo
{
/// <summary>
/// This reinserts all migrations in the migrations table to account for initial rows inserted
/// on creation without identity enabled.
/// </summary>
[Migration("7.3.2", 0, GlobalSettings.UmbracoMigrationName)]
public class EnsureMigrationsTableIdentityIsCorrect : MigrationBase
{
public EnsureMigrationsTableIdentityIsCorrect(ISqlSyntaxProvider sqlSyntax, ILogger logger) : base(sqlSyntax, logger)
{
}
public override void Up()
{
Delete.FromTable("umbracoMigration").AllRows();
var migrations = Context.Database.Fetch<MigrationDto>(new Sql().Select("*").From<MigrationDto>(SqlSyntax));
foreach (var migration in migrations)
{
Insert.IntoTable("umbracoMigration")
.Row(new {name = migration.Name, createDate = migration.CreateDate, version = migration.Version});
}
}
public override void Down()
{
}
}
}
@@ -297,7 +297,7 @@ namespace Umbraco.Core.Persistence.Repositories
//If there's a GetAll zero count cache, ensure it is cleared
RuntimeCache.ClearCacheItem(GetCacheTypeKey<TEntity>());
}
catch (Exception)
catch (Exception ex)
{
//if an exception is thrown we need to remove the entry from cache, this is ONLY a work around because of the way
// that we cache entities: http://issues.umbraco.org/issue/U4-4259
+2
View File
@@ -404,6 +404,8 @@
<Compile Include="Persistence\Mappers\AccessMapper.cs" />
<Compile Include="Persistence\Mappers\DomainMapper.cs" />
<Compile Include="Persistence\Mappers\MigrationEntryMapper.cs" />
<Compile Include="Persistence\Mappers\TaskTypeMapper.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeTwo\EnsureMigrationsTableIdentityIsCorrect.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\AddExternalLoginsTable.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\AddForeignKeysForLanguageAndDictionaryTables.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\AddServerRegistrationColumnsAndLock.cs" />
+2 -2
View File
@@ -56,7 +56,7 @@
<appSettings>
<add key="umbracoConfigurationStatus" value="6.0.0" />
<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/VSEnterpriseHelper.axd" />
<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />
<add key="umbracoReservedPaths" value="~/install/" />
<add key="umbracoPath" value="~/umbraco" />
<add key="umbracoHideTopLevelNodeFromPath" value="true" />
<add key="umbracoUseDirectoryUrls" value="false" />
@@ -203,4 +203,4 @@
</assemblyBinding>
</runtime>
</configuration>
</configuration>
@@ -28,7 +28,7 @@
</control>
</tab>
<tab caption="Examine Management">
<control>/umbraco/dashboard/ExamineManagement.ascx</control>
<control>dashboard/ExamineManagement.ascx</control>
</tab>
</section>
@@ -85,7 +85,7 @@
</control>
</tab>
<tab caption="Last Edits">
<control addPanel="true" MaxRecords="30">/umbraco/dashboard/latestEdits.ascx</control>
<control addPanel="true" MaxRecords="30">dashboard/latestEdits.ascx</control>
</tab>
<tab caption="Change Password">
<control addPanel="true">
@@ -104,11 +104,11 @@
views/dashboard/members/membersdashboardintro.html
</control>
<control showOnce="true" addPanel="true" panelCaption="">
/umbraco/members/membersearch.ascx
members/membersearch.ascx
</control>
<control showOnce="true" addPanel="true" panelCaption="">
views/dashboard/members/membersdashboardvideos.html
</control>
</tab>
</section>
</dashBoard>
</dashBoard>
@@ -24,7 +24,7 @@ var app = angular.module("Umbraco.canvasdesigner", ['colorpicker', 'ui.slider',
];
$scope.previewDevice = $scope.devices[0];
var apiController = "/Umbraco/Api/Canvasdesigner/";
var apiController = "../Api/Canvasdesigner/";
/*****************************************************************************/
/* Preview devices */
@@ -40,7 +40,7 @@ var app = angular.module("Umbraco.canvasdesigner", ['colorpicker', 'ui.slider',
/*****************************************************************************/
$scope.exitPreview = function () {
window.top.location.href = "/umbraco/endPreview.aspx?redir=%2f" + $scope.pageId;
window.top.location.href = "../endPreview.aspx?redir=%2f" + $scope.pageId;
};
/*****************************************************************************/
@@ -2,9 +2,9 @@
<html lang="en">
<head>
<title>Umbraco Canvas Designer</title>
<link href="/Umbraco/assets/css/canvasdesigner.css" type="text/css" rel="stylesheet" />
<link href="/Umbraco/lib/spectrum/spectrum.css" type="text/css" rel="stylesheet" />
<link href="/Umbraco/lib/jquery-ui/jquery-ui-1.10.4.custom.min.css" type="text/css" rel="stylesheet" />
<link href="../assets/css/canvasdesigner.css" type="text/css" rel="stylesheet" />
<link href="../lib/spectrum/spectrum.css" type="text/css" rel="stylesheet" />
<link href="../lib/jquery-ui/jquery-ui-1.10.4.custom.min.css" type="text/css" rel="stylesheet" />
</head>
<body id="canvasdesignerPanel" ng-mouseover="outlinePositionHide()" ng-class="{ leftOpen: (showStyleEditor || showPalettePicker) && !showDevicesPreview }" ng-controller="Umbraco.canvasdesignerController">
@@ -20,7 +20,7 @@
<div class="fix-left-menu selected">
<div class="avatar">
<img ng-src="/umbraco/assets/img/application/logo.png">
<img ng-src="../assets/img/application/logo.png">
</div>
<ul class="sections" ng-class="{selected: showDevicesPreview}">
@@ -125,7 +125,7 @@
<div class="canvasdesigner-panel-container" ng-show="categoriesVisibility[category] === true">
<div class="canvasdesigner-panel-property" ng-repeat="item in configItem.editors" ng-show="item.category == category">
<h5>{{item.name}} <i class="icon icon-help-alt"></i></h5>
<div ng-include="'/Umbraco/preview/editors/' + item.type + '.html'"></div>
<div ng-include="'../preview/editors/' + item.type + '.html'"></div>
</div>
</div>
</div>
@@ -154,8 +154,8 @@
<p>Styles saved and published</p>
</div>
<script src="/umbraco/lib/rgrove-lazyload/lazyload.js"></script>
<script src="/umbraco/js/canvasdesigner.loader.js"></script>
<script src="../lib/rgrove-lazyload/lazyload.js"></script>
<script src="../js/canvasdesigner.loader.js"></script>
</body>
@@ -56,7 +56,7 @@ angular.module("umbraco.directives")
if(scope.configuration && scope.configuration.stylesheets){
angular.forEach(scope.configuration.stylesheets, function(stylesheet, key){
stylesheets.push("/css/" + stylesheet + ".css");
stylesheets.push(Umbraco.Sys.ServerVariables.umbracoSettings.cssPath + "/" + stylesheet + ".css");
await.push(stylesheetResource.getRulesByName(stylesheet).then(function (rules) {
angular.forEach(rules, function (rule) {
var r = {};
@@ -94,14 +94,24 @@ function sectionsDirective($timeout, $window, navigationService, treeService, se
navigationService.showHelpDialog();
};
scope.sectionClick = function (section) {
scope.sectionClick = function (event, section) {
if (event.ctrlKey ||
event.shiftKey ||
event.metaKey || // apple
(event.button && event.button === 1) // middle click, >IE9 + everyone else
) {
return;
}
if (navigationService.userDialog) {
navigationService.userDialog.close();
}
if (navigationService.helpDialog) {
navigationService.helpDialog.close();
}
navigationService.hideSearch();
navigationService.showTree(section.alias);
$location.path("/" + section.alias);
@@ -38,9 +38,9 @@ angular.module("umbraco.directives")
'<div ng-class="getNodeCssClass(node)" ng-swipe-right="options(node, $event)" >' +
//NOTE: This ins element is used to display the search icon if the node is a container/listview and the tree is currently in dialog
//'<ins ng-if="tree.enablelistviewsearch && node.metaData.isContainer" class="umb-tree-node-search icon-search" ng-click="searchNode(node, $event)" alt="searchAltText"></ins>' +
'<ins ng-class="{\'icon-navigation-right\': !node.expanded, \'icon-navigation-down\': node.expanded}" ng-click="load(node)"></ins>' +
'<ins ng-class="{\'icon-navigation-right\': !node.expanded, \'icon-navigation-down\': node.expanded}" ng-click="load(node)">&nbsp;</ins>' +
'<i class="icon umb-tree-icon sprTree"></i>' +
'<a ng-click="select(node, $event)"></a>' +
'<a href="#/{{node.routePath}}" ng-click="select(node, $event)"></a>' +
//NOTE: These are the 'option' elipses
'<a class="umb-options" ng-click="options(node, $event)"><i></i><i></i><i></i></a>' +
'<div ng-show="node.loading" class="l"><div></div></div>' +
@@ -148,8 +148,17 @@ angular.module("umbraco.directives")
and emits it as a treeNodeSelect element if there is a callback object
defined on the tree
*/
scope.select = function(n, ev) {
scope.select = function (n, ev) {
if (ev.ctrlKey ||
ev.shiftKey ||
ev.metaKey || // apple
(ev.button && ev.button === 1) // middle click, >IE9 + everyone else
) {
return;
}
emitEvent("treeNodeSelect", { element: element, tree: scope.tree, node: n, event: ev });
ev.preventDefault();
};
/**
@@ -1,5 +1,5 @@
/**
* @description Utillity directives for key and field events
* @description Utility directives for key and field events
**/
angular.module('umbraco.directives')
@@ -4,7 +4,9 @@ angular.module("umbraco.directives").directive('focusWhen', function ($timeout)
link: function (scope, elm, attrs, ctrl) {
attrs.$observe("focusWhen", function (newValue) {
if (newValue === "true") {
elm.focus();
$timeout(function() {
elm.focus();
});
}
});
}
@@ -2,8 +2,8 @@
/******* font-face *******/
@font-face {
src: url('/Umbraco/assets/fonts/helveticons/helveticons.eot') !important;
src: url('/Umbraco/assets/fonts/helveticons/helveticons.eot?#iefix') format('embedded-opentype'), url('/Umbraco/assets/fonts/helveticons/helveticons.ttf') format('truetype'), url('/Umbraco/assets/fonts/helveticons/helveticons.svg#icomoon') format('svg') !important;
src: url('assets/fonts/helveticons/helveticons.eot') !important;
src: url('assets/fonts/helveticons/helveticons.eot?#iefix') format('embedded-opentype'), url('assets/fonts/helveticons/helveticons.ttf') format('truetype'), url('assets/fonts/helveticons/helveticons.svg#icomoon') format('svg') !important;
}
/****************************/
+2 -2
View File
@@ -155,7 +155,7 @@ body {
}
#speechbubble {
z-index: 1000;
z-index: 1060;
position: absolute;
bottom: 100px;
left: 0;
@@ -266,4 +266,4 @@ body {
margin-left: 40px;
width: 85%!important;
}
}
}
+6 -1
View File
@@ -148,6 +148,11 @@ h5{
padding-top: 5px;
margin-left: 240px;
}
.umb-user-panel .controls-row {
margin-left: 0px;
}
.controls-row label {
display: inline-block
}
@@ -525,4 +530,4 @@ height:1px;
margin: 10px 0;
overflow: hidden;
}
}
@@ -37,7 +37,7 @@
<li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px">
<a target="_blank" href="{{video.link}}?utm_source=core&utm_medium=help&utm_content=link&utm_campaign=tv" title="{{video.title}}">
<img ng-src="{{video.thumbnail}}" alt="{{video.title}}">
<img ng-src="{{video.thumbnail}}?width=120" alt="{{video.title}}">
</a>
</div>
</li>
@@ -34,11 +34,12 @@ angular.module("umbraco")
$scope.submitFolder = function(e) {
if (e.keyCode === 13) {
e.preventDefault();
$scope.showFolderInput = false;
mediaResource
.addFolder($scope.newFolderName, $scope.options.formData.currentFolder)
.then(function(data) {
$scope.showFolderInput = false;
$scope.newFolderName = "";
//we've added a new folder so lets clear the tree cache for that specific item
treeService.clearCache({
@@ -80,7 +81,7 @@ angular.module("umbraco")
$scope.options.formData.currentFolder = folder.id;
$scope.currentFolder = folder;
};
//This executes prior to the whole processing which we can use to get the UI going faster,
//this also gives us the start callback to invoke to kick of the whole thing
$scope.$on('fileuploadadd', function (e, data) {
@@ -103,7 +103,8 @@
ng-show="showFolderInput"
ng-model="newFolderName"
ng-keydown="submitFolder($event)"
on-blur="showFolderInput = false">
on-blur="showFolderInput = false"
focus-when="{{showFolderInput}}">
</li>
</ul>
</div>
@@ -1,5 +1,5 @@
angular.module("umbraco")
.controller("Umbraco.Dialogs.UserController", function ($scope, $location, $timeout, userService, historyService, eventsService, externalLoginInfo, authResource) {
.controller("Umbraco.Dialogs.UserController", function ($scope, $location, $timeout, userService, historyService, eventsService, externalLoginInfo, authResource, currentUserResource, formHelper) {
$scope.history = historyService.getCurrent();
$scope.version = Umbraco.Sys.ServerVariables.application.version + " assembly: " + Umbraco.Sys.ServerVariables.application.assemblyVersion;
@@ -102,4 +102,44 @@ angular.module("umbraco")
});
});
//create the initial model for change password property editor
$scope.changePasswordModel = {
alias: "_umb_password",
view: "changepassword",
config: {},
value: {}
};
//go get the config for the membership provider and add it to the model
currentUserResource.getMembershipProviderConfig().then(function (data) {
$scope.changePasswordModel.config = data;
//ensure the hasPassword config option is set to true (the user of course has a password already assigned)
//this will ensure the oldPassword is shown so they can change it
$scope.changePasswordModel.config.hasPassword = true;
$scope.changePasswordModel.config.disableToggle = true;
});
////this is the model we will pass to the service
//$scope.profile = {};
$scope.changePassword = function () {
if (formHelper.submitForm({ scope: $scope })) {
currentUserResource.changePassword($scope.changePasswordModel.value).then(function (data) {
//if the password has been reset, then update our model
if (data.value) {
$scope.changePasswordModel.value.generatedPassword = data.value;
}
formHelper.resetForm({ scope: $scope, notifications: data.notifications });
}, function (err) {
formHelper.handleError(err);
});
}
};
});
@@ -18,18 +18,25 @@
<div class="umb-panel-body umb-scrollable">
<div class="tab-content umb-control-group">
<div class="umb-pane" ng-if="canEditProfile">
<div class="umb-pane">
<h5><localize key="user_yourProfile" /></h5>
<p>
<a href="#/users/framed/%252Fumbraco%252Fusers%252Fedituser.aspx%253Fid%253D{{user.id}}"
<a href="#/users/framed/users%252Fedituser.aspx%253Fid%253D{{user.id}}"
class="btn btn-primary"
ng-click="close()">
ng-click="close()" ng-if="canEditProfile">
<localize key="general_edit">Edit</localize>
</a>
<a href
class="btn"
ng-click="showChangePassword = showChangePassword === true ? false : true;" ng-init="showChangePassword = false;">
<localize key="user_newPassword">Change password</localize>
</a>
</p>
</div>
<div class="umb-pane external-logins" ng-if="externalLoginProviders.length > 0">
<h5>External login providers</h5>
@@ -63,6 +70,24 @@
</div>
<div class="umb-pane" ng-if="showChangePassword">
<form novalidate name="passwordForm"
ng-controller="Umbraco.Dashboard.StartupChangePasswordController"
ng-submit="changePassword()"
val-form-manager>
<h3><localize key="user_changePassword">Change password</localize></h3>
<umb-editor model="changePasswordModel"></umb-editor>
<umb-control-group hideLabel="1">
<button class="btn btn-primary"><localize key="user_change">Change</localize></button>
<!-- Could not get the button to change the showChangePassword scope variable to hide the form again... -->
<!--<button class="btn"><localize key="general_cancel" ng-click="showChangePassword = false;">Cancel</localize></button>-->
</umb-control-group>
</form>
</div>
<div class="umb-pane">
<h5><localize key="user_yourHistory" /></h5>
<ul class="umb-tree">
@@ -78,4 +103,4 @@
<small class="umb-version">Umbraco version {{version}}</small>
</div>
</div>
</div>
@@ -3,15 +3,16 @@
ng-submit="changePassword()"
val-form-manager>
<h3>Change password</h3>
<h3><localize key="user_changePassword">Change password</localize></h3>
<umb-pane>
<umb-editor model="changePasswordModel"></umb-editor>
<umb-control-group hideLabel="1">
<button class="btn btn-primary">Change</button>
<button class="btn btn-primary">
<localize key="user_change">Change</localize>
</button>
</umb-control-group>
</umb-pane>
</form>
@@ -9,7 +9,7 @@
<li ng-repeat="section in sections | limitTo: maxSections" ng-class="{current: section.alias == currentSection}">
<a href="#/{{section.alias}}"
ng-dblclick="sectionDblClick(section)"
ng-click="sectionClick(section)"
ng-click="sectionClick($event, section)"
prevent-default>
<section-icon icon="{{section.cssclass}}"></section-icon>
<span>{{section.name}}</span>
@@ -36,9 +36,9 @@
<li ng-repeat="section in sections | limitTo: overflowingSections" ng-class="{current: section.alias == currentSection}">
<a href="#/{{section.alias}}"
ng-dblclick="sectionDblClick(section)"
ng-click="sectionClick(section)"
ng-click="sectionClick($event, section)"
prevent-default>
<section-icon icon="{{section.cssclass}}"></section-icon>
<section-icon icon="{{section.cssclass}}"></section-icon>
<span>{{section.name}}</span>
</a>
</li>
@@ -49,7 +49,8 @@ function contentPickerController($scope, dialogService, entityResource, editorSt
//the default pre-values
var defaultConfig = {
multiPicker: false,
showEditButton: false,
showEditButton: false,
showPathOnHover: false,
startNode: {
query: "",
type: "content",
@@ -65,6 +66,7 @@ function contentPickerController($scope, dialogService, entityResource, editorSt
//Umbraco persists boolean for prevalues as "0" or "1" so we need to convert that!
$scope.model.config.multiPicker = ($scope.model.config.multiPicker === "1" ? true : false);
$scope.model.config.showEditButton = ($scope.model.config.showEditButton === "1" ? true : false);
$scope.model.config.showPathOnHover = ($scope.model.config.showPathOnHover === "1" ? true : false);
var entityType = $scope.model.config.startNode.type === "member"
? "Member"
@@ -150,7 +152,7 @@ function contentPickerController($scope, dialogService, entityResource, editorSt
if (currIds.indexOf(item.id) < 0) {
item.icon = iconHelper.convertFromLegacyIcon(item.icon);
$scope.renderModel.push({ name: item.name, id: item.id, icon: item.icon });
$scope.renderModel.push({ name: item.name, id: item.id, icon: item.icon, path: item.path });
}
};
@@ -182,7 +184,7 @@ function contentPickerController($scope, dialogService, entityResource, editorSt
if (entity) {
entity.icon = iconHelper.convertFromLegacyIcon(entity.icon);
$scope.renderModel.push({ name: entity.name, id: entity.id, icon: entity.icon });
$scope.renderModel.push({ name: entity.name, id: entity.id, icon: entity.icon, path: entity.path });
}
@@ -5,11 +5,8 @@
<ul class="unstyled list-icons"
ui-sortable
ng-model="renderModel">
<li ng-repeat="node in renderModel">
<li ng-repeat="node in renderModel" ng-attr-title="{{model.config.showPathOnHover && 'Path: ' + node.path || undefined}}">
<i class="icon icon-navigation handle"></i>
<a href="#" prevent-default ng-click="remove($index)">
<i class="icon icon-delete red hover-show"></i>
<i class="{{node.icon}} hover-hide"></i>
@@ -64,8 +64,7 @@ angular.module("umbraco")
//queue rules loading
angular.forEach(editorConfig.stylesheets, function (val, key) {
stylesheets.push("../css/" + val + ".css?" + new Date().getTime());
stylesheets.push(Umbraco.Sys.ServerVariables.umbracoSettings.cssPath + "/" + val + ".css?" + new Date().getTime());
await.push(stylesheetResource.getRulesByName(val).then(function (rules) {
angular.forEach(rules, function (rule) {
var r = {};
+1 -1
View File
@@ -2413,7 +2413,7 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.0\x86\*.* "$(TargetDir)x86\"
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>7310</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:7310</IISUrl>
<IISUrl>http://localhost:7320</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
+2 -7
View File
@@ -75,11 +75,6 @@
views/dashboard/default/startupdashboardintro.html
</control>
</tab>
<tab caption="Change Password">
<control showOnce="false" addPanel="false" panelCaption="">
views/dashboard/ChangePassword.html
</control>
</tab>
</section>
<section alias="StartupMemberDashboardSection">
<areas>
@@ -96,7 +91,7 @@
<area>contour</area>
</areas>
<tab caption="Dashboard">
<control>/umbraco/plugins/umbracocontour/formsdashboard.ascx</control>
<control>plugins/umbracocontour/formsdashboard.ascx</control>
</tab>
</section>
</dashBoard>
</dashBoard>
@@ -923,6 +923,7 @@ Mange hilsner fra Umbraco robotten
<key alias="userTypes">Brugertyper</key>
<key alias="writer">Forfatter</key>
<key alias="translator">Oversætter</key>
<key alias="change">Skift</key>
<key alias="yourProfile">Din profil</key>
<key alias="yourHistory">Din historik</key>
<key alias="sessionExpires">Session udløber</key>
@@ -1057,6 +1057,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="userTypes">User types</key>
<key alias="writer">Writer</key>
<key alias="translator">Translator</key>
<key alias="change">Change</key>
<key alias="yourProfile" version="7.0">Your profile</key>
<key alias="yourHistory" version="7.0">Your recent history</key>
<key alias="sessionExpires" version="7.0">Session expires in</key>
@@ -1055,6 +1055,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="userTypes">User types</key>
<key alias="writer">Writer</key>
<key alias="translator">Translator</key>
<key alias="change">Change</key>
<key alias="yourProfile" version="7.0">Your profile</key>
<key alias="yourHistory" version="7.0">Your recent history</key>
<key alias="sessionExpires" version="7.0">Session expires in</key>
@@ -985,6 +985,7 @@ Om een vertalingstaak te sluiten, ga aub naar het detailoverzicht en klik op de
<key alias="usertype">Gebruikerstype</key>
<key alias="userTypes">Gebruikerstypes</key>
<key alias="writer">Auteur</key>
<key alias="change">Wijzig</key>
<key alias="yourProfile" version="7.0">Je profiel</key>
<key alias="yourHistory" version="7.0">Je recente historie</key>
@@ -28,8 +28,8 @@
table.relations td.DataType {}
/* direction icons */
table.relations td.parentToChild { background-image: url('/umbraco/developer/RelationTypes/Images/ParentToChild.png'); }
table.relations td.bidirectional { background-image: url('/umbraco/developer/RelationTypes/Images/Bidirectional.png'); }
table.relations td.parentToChild { background-image: url('../../developer/RelationTypes/Images/ParentToChild.png'); }
table.relations td.bidirectional { background-image: url('../../developer/RelationTypes/Images/Bidirectional.png'); }
</style>
<script type="text/javascript">
@@ -144,4 +144,4 @@
</umb:Pane>
</asp:Content>
</asp:Content>
@@ -3,7 +3,7 @@
if (confirm('Are you sure you want to delete "' + relationTypeName + '"?')) {
$.ajax({
type: "POST",
url: "/umbraco/developer/RelationTypes/RelationTypesWebService.asmx/DeleteRelationType",
url: "developer/RelationTypes/RelationTypesWebService.asmx/DeleteRelationType",
data: "{ 'relationTypeId' : '" + relationTypeId + "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
@@ -341,6 +341,7 @@ namespace Umbraco.Web.Editors
string.Join(",", UmbracoConfig.For.UmbracoSettings().Content.ImageFileTypes)
},
{"keepUserLoggedIn", UmbracoConfig.For.UmbracoSettings().Security.KeepUserLoggedIn},
{"cssPath", IOHelper.ResolveUrl(SystemDirectories.Css).TrimEnd('/')},
}
},
{
@@ -758,12 +759,29 @@ namespace Umbraco.Web.Editors
//Ensure the forms auth module doesn't do a redirect!
context.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
var owinCtx = context.HttpContext.GetOwinContext();
//First, see if a custom challenge result callback is specified for the provider
// and use it instead of the default if one is supplied.
var loginProvider = owinCtx.Authentication
.GetExternalAuthenticationTypes()
.FirstOrDefault(p => p.AuthenticationType == LoginProvider);
if (loginProvider != null)
{
var providerChallengeResult = loginProvider.GetSignInChallengeResult(owinCtx);
if (providerChallengeResult != null)
{
owinCtx.Authentication.Challenge(providerChallengeResult, LoginProvider);
return;
}
}
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri.EnsureEndsWith('/') };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
owinCtx.Authentication.Challenge(properties, LoginProvider);
}
}
}
@@ -6,6 +6,7 @@ using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.Security;
@@ -284,6 +285,9 @@ namespace Umbraco.Web.Editors
case ContentSaveAction.SaveNew:
MembershipCreateStatus status;
CreateWithMembershipProvider(contentItem, out status);
// save the ID of the creator
contentItem.PersistedContent.CreatorId = Security.CurrentUser.Id;
break;
default:
//we don't support anything else for members
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
namespace Umbraco.Web.Models.ContentEditing
@@ -47,8 +48,8 @@ namespace Umbraco.Web.Models.ContentEditing
get
{
return IconIsClass
? string.Empty
: IOHelper.ResolveUrl("~/umbraco/images/umbraco/" + Icon);
? string.Empty
: string.Format("{0}images/umbraco/{1}", GlobalSettings.Path.EnsureEndsWith("/"), Icon);
}
}
@@ -83,4 +84,4 @@ namespace Umbraco.Web.Models.ContentEditing
}
}
}
}
}
+2 -1
View File
@@ -2,6 +2,7 @@
using Umbraco.Core.IO;
using System.Collections.Generic;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Web.Models.ContentEditing;
namespace Umbraco.Web.Models.Trees
@@ -109,7 +110,7 @@ namespace Umbraco.Web.Models.Trees
return IOHelper.ResolveUrl("~" + Icon.TrimStart('~'));
//legacy icon path
return IOHelper.ResolveUrl("~/umbraco/images/umbraco/" + Icon);
return string.Format("{0}images/umbraco/{1}", GlobalSettings.Path.EnsureEndsWith("/"), Icon);
}
}
@@ -13,7 +13,8 @@ namespace Umbraco.Web.PropertyEditors
_internalPreValues = new Dictionary<string, object>
{
{"showEditButton", "0"},
{"startNodeId", "-1"}
{"startNodeId", "-1"},
{"showPathOnHover", "0"}
};
}
@@ -37,6 +38,8 @@ namespace Umbraco.Web.PropertyEditors
[PreValueField("startNodeId", "Start node", "treepicker")]
public int StartNodeId { get; set; }
[PreValueField("showPathOnHover", "Show path when hovering items", "boolean")]
public bool ShowPathOnHover { get; set; }
}
}
}
@@ -1,3 +1,4 @@
using System;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Umbraco.Core;
@@ -7,6 +8,22 @@ namespace Umbraco.Web.Security.Identity
{
public static class AuthenticationOptionsExtensions
{
public static void SetSignInChallengeResultCallback(
this AuthenticationOptions authOptions,
Func<IOwinContext, AuthenticationProperties> authProperties)
{
authOptions.Description.Properties["ChallengeResultCallback"] = authProperties;
}
public static AuthenticationProperties GetSignInChallengeResult(this AuthenticationDescription authenticationDescription, IOwinContext ctx)
{
if (authenticationDescription.Properties.ContainsKey("ChallengeResultCallback") == false) return null;
var cb = authenticationDescription.Properties["ChallengeResultCallback"] as Func<IOwinContext, AuthenticationProperties>;
if (cb == null) return null;
return cb(ctx);
}
/// <summary>
/// Used during the External authentication process to assign external sign-in options
/// that are used by the Umbraco authentication process.
@@ -47,7 +47,7 @@ namespace Umbraco.Web.Trees
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<string>("application") + "/framed/" +
Uri.EscapeDataString("/umbraco/settings/editLanguage.aspx?id=" + language.Id)));
Uri.EscapeDataString("settings/editLanguage.aspx?id=" + language.Id)));
}
}
@@ -96,4 +96,4 @@ namespace Umbraco.Web.Trees
return menu;
}
}
}
}
@@ -131,9 +131,9 @@ namespace Umbraco.Web.Trees
return Services.FileService.DetermineTemplateRenderingEngine(template) == RenderingEngine.WebForms
? "/" + queryStrings.GetValue<string>("application") + "/framed/" +
Uri.EscapeDataString("/umbraco/settings/editTemplate.aspx?templateID=" + template.Id)
Uri.EscapeDataString("settings/editTemplate.aspx?templateID=" + template.Id)
: "/" + queryStrings.GetValue<string>("application") + "/framed/" +
Uri.EscapeDataString("/umbraco/settings/Views/EditView.aspx?treeType=" + Constants.Trees.Templates + "&templateID=" + template.Id);
Uri.EscapeDataString("settings/Views/EditView.aspx?treeType=" + Constants.Trees.Templates + "&templateID=" + template.Id);
}
}
}
}
@@ -63,7 +63,7 @@ namespace umbraco.cms.presentation.developer.RelationTypes
var newRelationTypeId = relationService.GetRelationTypeByAlias(newRelationTypeAlias).Id;
ClientTools.ChangeContentFrameUrl("/umbraco/developer/RelationTypes/EditRelationType.aspx?id=" + newRelationTypeId).CloseModalWindow().ChildNodeCreated();
ClientTools.ChangeContentFrameUrl("developer/RelationTypes/EditRelationType.aspx?id=" + newRelationTypeId).CloseModalWindow().ChildNodeCreated();
}
}
@@ -87,4 +87,4 @@ namespace umbraco.cms.presentation.developer.RelationTypes
dropDownList.Items.Add(new ListItem(UmbracoObjectTypes.RecycleBin.GetFriendlyName(), Umbraco.Core.Constants.ObjectTypes.ContentRecycleBin));
}
}
}
}
@@ -67,7 +67,7 @@ namespace umbraco.cms.presentation.developer.RelationTypes.TreeMenu
/// </summary>
public string JsSource
{
get { return "~/umbraco/developer/RelationTypes/TreeMenu/ActionDeleteRelationType.js"; }
get { return "developer/RelationTypes/TreeMenu/ActionDeleteRelationType.js"; }
}
/// <summary>
@@ -67,7 +67,7 @@ namespace umbraco.cms.presentation.developer.RelationTypes.TreeMenu
/// </summary>
public string JsSource
{
get { return "~/umbraco/developer/RelationTypes/TreeMenu/ActionNewRelationType.js"; }
get { return "developer/RelationTypes/TreeMenu/ActionNewRelationType.js"; }
}
/// <summary>
@@ -19,13 +19,15 @@ namespace umbraco.cms.businesslogic.translation
public static void MakeNew(CMSNode Node, User User, User Translator, Language Language, string Comment,
bool IncludeSubpages, bool SendEmail)
{
// Get translation taskType for obsolete task constructor
var taskType = ApplicationContext.Current.Services.TaskService.GetTaskTypeByAlias("toTranslate");
// Create pending task
Task t = new Task();
Task t = new Task(new Umbraco.Core.Models.Task(taskType));
t.Comment = Comment;
t.Node = Node;
t.ParentUser = User;
t.User = Translator;
t.Type = new TaskType("toTranslate");
t.Save();
// Add log entry