Compare commits
22 Commits
netcore/dev
...
v7/7.12
| Author | SHA1 | Date | |
|---|---|---|---|
| 5af5671795 | |||
| 5eab37573c | |||
| d5168afc00 | |||
| 8c070bd14d | |||
| bcb26c4065 | |||
| 0d165db687 | |||
| 76aaafd852 | |||
| 77101783f7 | |||
| 4d4630915b | |||
| 0f7de97558 | |||
| 588493e811 | |||
| 87af9b2089 | |||
| ba3cf056fb | |||
| 619acb552b | |||
| 50b636e1c6 | |||
| cedf433bb0 | |||
| 00c19e3830 | |||
| a5742dcd9a | |||
| 63ee3c72c3 | |||
| fd2550cfe9 | |||
| 78c01801f8 | |||
| ad99d164c9 |
@@ -28,7 +28,7 @@
|
|||||||
<dependency id="HtmlAgilityPack" version="[1.4.9.5, 2.0.0)" />
|
<dependency id="HtmlAgilityPack" version="[1.4.9.5, 2.0.0)" />
|
||||||
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
|
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
|
||||||
<dependency id="MySql.Data" version="[6.9.9, 7.0.0)" />
|
<dependency id="MySql.Data" version="[6.9.9, 7.0.0)" />
|
||||||
<dependency id="ClientDependency" version="[1.9.6, 2.0.0)" />
|
<dependency id="ClientDependency" version="[1.9.7, 2.0.0)" />
|
||||||
<dependency id="ClientDependency-Mvc5" version="[1.8.0.0, 2.0.0)" />
|
<dependency id="ClientDependency-Mvc5" version="[1.8.0.0, 2.0.0)" />
|
||||||
<dependency id="AutoMapper" version="[3.3.1, 4.0.0)" />
|
<dependency id="AutoMapper" version="[3.3.1, 4.0.0)" />
|
||||||
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
|
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
name: 🐛 Bug Report
|
||||||
|
about: File a bug report, if you've discovered a problem in Umbraco.
|
||||||
|
---
|
||||||
|
|
||||||
|
A brief description of the issue goes here.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
If you haven't yet done so, please read the "contributing guidelines"
|
||||||
|
thoroughly. Then, proceed by filling out the rest of the details in the issue
|
||||||
|
template below. The more details you can give us, the easier it will be for us
|
||||||
|
to determine the cause of a problem.
|
||||||
|
|
||||||
|
See: https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/docs/CONTRIBUTING.md
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reproduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
If you're filing a bug, please describe how to reproduce it. Include as much
|
||||||
|
relevant information as possible, such as:
|
||||||
|
|
||||||
|
### Bug summary
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* Write a short summary of the bug
|
||||||
|
* Try to pinpoint it as much as possible
|
||||||
|
* Try to state the _actual problem_, and not just what you _think_ the
|
||||||
|
solution might be.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Specifics
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* Mention the URL where this bug occurs, if applicable
|
||||||
|
* What version of Umbraco are you using (down to the very last digit!)
|
||||||
|
* What browser and version you are using
|
||||||
|
* Please mention if you've checked it in other browsers as well
|
||||||
|
* Please include *full error messages* and *screenshots* if possible
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* Clearly mention the steps to reproduce the bug
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Expected result
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* What did you _expect_ that would happen on your Umbraco site?
|
||||||
|
* Describe the intended/desired outcome after you did the steps mentioned.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Actual result
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* What is the actual result of the above steps?
|
||||||
|
* Describe the behaviour of the bug
|
||||||
|
* Please, please include **error messages** and screenshots. They might mean
|
||||||
|
nothing to you, but they are _very_ helpful to us.
|
||||||
|
-->
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
name: 📮 Feature Request
|
||||||
|
about: Open a feature request, if you want to propose a new feature.
|
||||||
|
---
|
||||||
|
|
||||||
|
A brief description of your feature request goes here.
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
If you want to discuss the feature you're imagining, please make sure to keep
|
||||||
|
those discussions on the forum at https://our.umbraco.com/ (choose the
|
||||||
|
category "Contributing to Umbraco", Umbraco HQ follows all new topics there).
|
||||||
|
|
||||||
|
Once you've come to a conclusion in the discussion, feel free to propose the
|
||||||
|
new feature here.
|
||||||
|
-->
|
||||||
|
|
||||||
|
How can you help?
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The resources (read: available time and effort) of Umbraco's core team are
|
||||||
|
limited.
|
||||||
|
|
||||||
|
If we can not work on your suggestion, please don't take it personally. Most
|
||||||
|
likely, it's either:
|
||||||
|
|
||||||
|
- We think your idea is valid, but we can't find the time to work on it.
|
||||||
|
- Your idea might be better suited as a package, if it's not suitable for
|
||||||
|
the majority of users.
|
||||||
|
-->
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
name: ⁉️ Support Question
|
||||||
|
about: Having trouble with Umbraco? -> https://our.umbraco.com
|
||||||
|
---
|
||||||
|
|
||||||
|
This issue tracker is NOT meant for support questions. If you have a question,
|
||||||
|
please join us on the forum at https://our.umbraco.com.
|
||||||
|
|
||||||
|
Thanks!
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
name: 📖 Documentation Issue
|
||||||
|
about: See https://github.com/umbraco/UmbracoDocs/issues for documentation issues
|
||||||
|
---
|
||||||
|
|
||||||
|
The Umbraco documentation has its own dedicated repository. Please open your
|
||||||
|
documentation-related issue at https://github.com/umbraco/UmbracoDocs/issues
|
||||||
|
|
||||||
|
Thanks!
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
name: 🔐 Security Issue
|
||||||
|
about: Discovered a Security Issue in Umbraco?
|
||||||
|
---
|
||||||
|
|
||||||
|
⚠️ PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, SEE BELOW.
|
||||||
|
|
||||||
|
If you have found a security issue in Umbraco, please send the details to
|
||||||
|
security@umbraco.com and don't disclose it publicly until we can provide a fix for
|
||||||
|
it. If you wish, we'll credit you for finding verified issues, when we release
|
||||||
|
the patched version.
|
||||||
|
|
||||||
|
❗ Please read more about how to report security issues on https://umbraco.com/security
|
||||||
|
|
||||||
|
A note on "Self XSS"
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Umbraco is a CMS, that allows users to edit content on a website. As such,
|
||||||
|
all _authenticated users_ can:
|
||||||
|
|
||||||
|
- Edit content, and (depending on the field types) insert HTML and CSS in that
|
||||||
|
content, with a variety of allowed attributes.
|
||||||
|
- Depending on the user level: Edit template files, and insert C#, HTML, CSS and
|
||||||
|
javascript in so on.
|
||||||
|
- Upload files to the site, which will become publicly available.
|
||||||
|
|
||||||
|
We see these functionalities as _features_, and not as security issues. Please
|
||||||
|
report the mentioned items only if they can be performed by non-authorized
|
||||||
|
users, or other exploitable vulnerabilities.
|
||||||
|
|
||||||
|
Thanks!
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
- [ ] I have written a descriptive pull-request title
|
- [ ] I have [created an issue](https://github.com/umbraco/Umbraco-CMS/issues) for the proposed changes in this PR, the link is:
|
||||||
- [ ] I have linked this PR to an issue on the tracker at http://issues.umbraco.org
|
- [ ] I have added steps to test this contribution in the description below
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
<!-- A description of the changes proposed in the pull-request -->
|
<!-- A description of the changes proposed in the pull-request -->
|
||||||
|
<!-- Make sure to link to the related issue number so we can easily find it in the issue tracker -->
|
||||||
|
|
||||||
|
|
||||||
<!-- Thanks for contributing to Umbraco CMS! -->
|
<!-- Thanks for contributing to Umbraco CMS! -->
|
||||||
|
|||||||
+2
-2
@@ -11,5 +11,5 @@ using System.Resources;
|
|||||||
|
|
||||||
[assembly: AssemblyVersion("1.0.*")]
|
[assembly: AssemblyVersion("1.0.*")]
|
||||||
|
|
||||||
[assembly: AssemblyFileVersion("7.12.2")]
|
[assembly: AssemblyFileVersion("7.12.4")]
|
||||||
[assembly: AssemblyInformationalVersion("7.12.2")]
|
[assembly: AssemblyInformationalVersion("7.12.4")]
|
||||||
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
|
|||||||
{
|
{
|
||||||
public class UmbracoVersion
|
public class UmbracoVersion
|
||||||
{
|
{
|
||||||
private static readonly Version Version = new Version("7.12.2");
|
private static readonly Version Version = new Version("7.12.4");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current version of Umbraco.
|
/// Gets the current version of Umbraco.
|
||||||
|
|||||||
@@ -140,6 +140,9 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
internal static bool TryMatch(string text, out string mediaPath)
|
internal static bool TryMatch(string text, out string mediaPath)
|
||||||
{
|
{
|
||||||
|
//TODO: In v8 we should allow exposing this via the property editor in a much nicer way so that the property editor
|
||||||
|
// can tell us directly what any URL is for a given property if it contains an asset
|
||||||
|
|
||||||
mediaPath = null;
|
mediaPath = null;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
@@ -155,4 +158,4 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -808,10 +808,10 @@ namespace Umbraco.Core.Persistence
|
|||||||
public Page<T> Page<T>(long page, long itemsPerPage, string sql, params object[] args)
|
public Page<T> Page<T>(long page, long itemsPerPage, string sql, params object[] args)
|
||||||
{
|
{
|
||||||
string sqlCount, sqlPage;
|
string sqlCount, sqlPage;
|
||||||
BuildPageQueries<T>((page-1)*itemsPerPage, itemsPerPage, sql, ref args, out sqlCount, out sqlPage);
|
BuildPageQueries<T>(itemsPerPage.Equals(int.MaxValue) ? 0 : (page - 1) * itemsPerPage, itemsPerPage, sql, ref args, out sqlCount, out sqlPage);
|
||||||
|
|
||||||
// Save the one-time command time out and use it for both queries
|
// Save the one-time command time out and use it for both queries
|
||||||
int saveTimeout = OneTimeCommandTimeout;
|
int saveTimeout = OneTimeCommandTimeout;
|
||||||
|
|
||||||
// Setup the paged result
|
// Setup the paged result
|
||||||
var result = new Page<T>();
|
var result = new Page<T>();
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
var sql = GetBaseQuery(false);
|
var sql = GetBaseQuery(false);
|
||||||
|
|
||||||
if (query == null) query = new Query<IAuditItem>();
|
if (query == null) query = new Query<IAuditItem>();
|
||||||
|
var queryHasWhereClause = query.GetWhereClauses().Any();
|
||||||
var translatorIds = new SqlTranslator<IAuditItem>(sql, query);
|
var translatorIds = new SqlTranslator<IAuditItem>(sql, query);
|
||||||
var translatedQuery = translatorIds.Translate();
|
var translatedQuery = translatorIds.Translate();
|
||||||
|
|
||||||
@@ -65,8 +66,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
filterSql.Append(string.Format("({0})", filterClaus.Item1), filterClaus.Item2);
|
filterSql.Append(string.Format("({0})", filterClaus.Item1), filterClaus.Item2);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
translatedQuery = GetFilteredSqlForPagedResults(translatedQuery, filterSql);
|
translatedQuery = GetFilteredSqlForPagedResults(translatedQuery, filterSql, queryHasWhereClause);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auditTypeFilter.Length > 0)
|
if (auditTypeFilter.Length > 0)
|
||||||
@@ -82,8 +83,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
filterSql.Append("(logHeader = @logHeader)", new {logHeader = filterClaus.ToString() });
|
filterSql.Append("(logHeader = @logHeader)", new {logHeader = filterClaus.ToString() });
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
translatedQuery = GetFilteredSqlForPagedResults(translatedQuery, filterSql);
|
translatedQuery = GetFilteredSqlForPagedResults(translatedQuery, filterSql, queryHasWhereClause || hasCustomFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderDirection == Direction.Descending)
|
if (orderDirection == Direction.Descending)
|
||||||
@@ -96,7 +97,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
totalRecords = pagedResult.TotalItems;
|
totalRecords = pagedResult.TotalItems;
|
||||||
|
|
||||||
var pages = pagedResult.Items.Select(
|
var pages = pagedResult.Items.Select(
|
||||||
dto => new AuditItem(dto.Id, dto.Comment, Enum<AuditType>.ParseOrNull(dto.Header) ?? AuditType.Custom, dto.UserId)).ToArray();
|
dto => new AuditItem(dto.NodeId, dto.Comment, Enum<AuditType>.ParseOrNull(dto.Header) ?? AuditType.Custom, dto.UserId)).ToArray();
|
||||||
|
|
||||||
//Mapping the DateStamp
|
//Mapping the DateStamp
|
||||||
for (int i = 0; i < pages.Length; i++)
|
for (int i = 0; i < pages.Length; i++)
|
||||||
@@ -169,14 +170,17 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private Sql GetFilteredSqlForPagedResults(Sql sql, Sql filterSql)
|
private Sql GetFilteredSqlForPagedResults(Sql sql, Sql filterSql, bool hasWhereClause)
|
||||||
{
|
{
|
||||||
Sql filteredSql;
|
Sql filteredSql;
|
||||||
|
|
||||||
// Apply filter
|
// Apply filter
|
||||||
if (filterSql != null)
|
if (filterSql != null)
|
||||||
{
|
{
|
||||||
var sqlFilter = " WHERE " + filterSql.SQL.TrimStart("AND ");
|
//ensure we don't append a WHERE if there is already one
|
||||||
|
var sqlFilter = hasWhereClause
|
||||||
|
? " AND " + filterSql.SQL.TrimStart(" AND ")
|
||||||
|
: " WHERE " + filterSql.SQL.TrimStart("AND ");
|
||||||
|
|
||||||
//NOTE: this is certainly strange - NPoco handles this much better but we need to re-create the sql
|
//NOTE: this is certainly strange - NPoco handles this much better but we need to re-create the sql
|
||||||
// instance a couple of times to get the parameter order correct, for some reason the first
|
// instance a couple of times to get the parameter order correct, for some reason the first
|
||||||
|
|||||||
@@ -331,14 +331,23 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets entities by query.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="query"></param>
|
||||||
|
/// <param name="objectTypeId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <remarks>
|
||||||
|
/// Note that this will also fetch all property data for media items, which can cause performance problems
|
||||||
|
/// when used without paging, in sites with large amounts of data in cmsPropertyData.
|
||||||
|
/// </remarks>
|
||||||
public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> query, Guid objectTypeId)
|
public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> query, Guid objectTypeId)
|
||||||
{
|
{
|
||||||
|
var isContent = objectTypeId == Constants.ObjectTypes.DocumentGuid || objectTypeId == Constants.ObjectTypes.DocumentBlueprintGuid;
|
||||||
bool isContent = objectTypeId == Constants.ObjectTypes.DocumentGuid || objectTypeId == Constants.ObjectTypes.DocumentBlueprintGuid;
|
var isMedia = objectTypeId == Constants.ObjectTypes.MediaGuid;
|
||||||
bool isMedia = objectTypeId == Constants.ObjectTypes.MediaGuid;
|
|
||||||
|
|
||||||
var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, null, objectTypeId);
|
var sqlClause = GetBaseWhere(GetBase, isContent, isMedia, null, objectTypeId);
|
||||||
|
|
||||||
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
|
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
|
||||||
var entitySql = translator.Translate();
|
var entitySql = translator.Translate();
|
||||||
|
|
||||||
@@ -364,22 +373,49 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//use dynamic so that we can get ALL properties from the SQL so we can chuck that data into our AdditionalData
|
return GetByQueryInternal(entitySql, isContent, isMedia);
|
||||||
var finalSql = entitySql.Append(GetGroupBy(isContent, false));
|
|
||||||
|
|
||||||
//query = read forward data reader, do not load everything into mem
|
|
||||||
var dtos = _work.Database.Query<dynamic>(finalSql);
|
|
||||||
var collection = new EntityDefinitionCollection();
|
|
||||||
foreach (var dto in dtos)
|
|
||||||
{
|
|
||||||
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false));
|
|
||||||
}
|
|
||||||
return collection.Select(x => x.BuildFromDynamic()).ToList();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets entities by query without fetching property data.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="query"></param>
|
||||||
|
/// <param name="objectTypeId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <remarks>
|
||||||
|
/// This is supposed to be internal and can be used when getting all entities without paging, without causing
|
||||||
|
/// performance issues.
|
||||||
|
/// </remarks>
|
||||||
|
internal IEnumerable<IUmbracoEntity> GetMediaByQueryWithoutPropertyData(IQuery<IUmbracoEntity> query)
|
||||||
|
{
|
||||||
|
var sqlClause = GetBaseWhere(GetBase, false, true, null, UmbracoObjectTypes.Media.GetGuid());
|
||||||
|
|
||||||
|
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
|
||||||
|
var entitySql = translator.Translate();
|
||||||
|
|
||||||
|
return GetByQueryInternal(entitySql, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal IEnumerable<IUmbracoEntity> GetByQueryInternal(Sql entitySql, bool isContent, bool isMedia)
|
||||||
|
{
|
||||||
|
var factory = new UmbracoEntityFactory();
|
||||||
|
|
||||||
|
//use dynamic so that we can get ALL properties from the SQL so we can chuck that data into our AdditionalData
|
||||||
|
var finalSql = entitySql.Append(GetGroupBy(isContent, isMedia));
|
||||||
|
|
||||||
|
//query = read forward data reader, do not load everything into mem
|
||||||
|
var dtos = _work.Database.Query<dynamic>(finalSql);
|
||||||
|
var collection = new EntityDefinitionCollection();
|
||||||
|
foreach (var dto in dtos)
|
||||||
|
{
|
||||||
|
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, isMedia));
|
||||||
|
}
|
||||||
|
return collection.Select(x => x.BuildFromDynamic()).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region Sql Statements
|
#region Sql Statements
|
||||||
|
|
||||||
@@ -851,4 +887,4 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Text;
|
|
||||||
using Umbraco.Core.Cache;
|
|
||||||
using Umbraco.Core.CodeAnnotations;
|
using Umbraco.Core.CodeAnnotations;
|
||||||
using Umbraco.Core.Events;
|
using Umbraco.Core.Events;
|
||||||
using Umbraco.Core.Logging;
|
using Umbraco.Core.Logging;
|
||||||
@@ -13,6 +11,7 @@ using Umbraco.Core.Models.Rdbms;
|
|||||||
using Umbraco.Core.Persistence;
|
using Umbraco.Core.Persistence;
|
||||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||||
using Umbraco.Core.Persistence.Querying;
|
using Umbraco.Core.Persistence.Querying;
|
||||||
|
using Umbraco.Core.Persistence.Repositories;
|
||||||
using Umbraco.Core.Persistence.UnitOfWork;
|
using Umbraco.Core.Persistence.UnitOfWork;
|
||||||
|
|
||||||
namespace Umbraco.Core.Services
|
namespace Umbraco.Core.Services
|
||||||
@@ -287,16 +286,35 @@ namespace Umbraco.Core.Services
|
|||||||
public virtual IEnumerable<IUmbracoEntity> GetChildren(int parentId, UmbracoObjectTypes umbracoObjectType)
|
public virtual IEnumerable<IUmbracoEntity> GetChildren(int parentId, UmbracoObjectTypes umbracoObjectType)
|
||||||
{
|
{
|
||||||
var objectTypeId = umbracoObjectType.GetGuid();
|
var objectTypeId = umbracoObjectType.GetGuid();
|
||||||
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
|
using (var uow = UowProvider.GetUnitOfWork(readOnly: true))
|
||||||
|
{
|
||||||
|
var repository = RepositoryFactory.CreateEntityRepository(uow);
|
||||||
|
var query = Query<IUmbracoEntity>.Builder.Where(x => x.ParentId == parentId);
|
||||||
|
return repository.GetByQuery(query, objectTypeId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collection of children by the parent's Id and UmbracoObjectType without adding property data
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parentId">Id of the parent to retrieve children for</param>
|
||||||
|
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/> objects</returns>
|
||||||
|
internal IEnumerable<IUmbracoEntity> GetMediaChildrenWithoutPropertyData(int parentId)
|
||||||
|
{
|
||||||
|
var objectTypeId = UmbracoObjectTypes.Media.GetGuid();
|
||||||
|
using (var uow = UowProvider.GetUnitOfWork(readOnly: true))
|
||||||
{
|
{
|
||||||
var repository = RepositoryFactory.CreateEntityRepository(uow);
|
var repository = RepositoryFactory.CreateEntityRepository(uow);
|
||||||
var query = Query<IUmbracoEntity>.Builder.Where(x => x.ParentId == parentId);
|
var query = Query<IUmbracoEntity>.Builder.Where(x => x.ParentId == parentId);
|
||||||
|
|
||||||
var contents = repository.GetByQuery(query, objectTypeId);
|
// Not pretty having to cast the repository, but it is the only way to get to use an internal method that we
|
||||||
return contents;
|
// do not want to make public on the interface. Unfortunately also prevents this from being unit tested.
|
||||||
|
// See this issue for details on why we need this:
|
||||||
|
// https://github.com/umbraco/Umbraco-CMS/issues/3457
|
||||||
|
return ((EntityRepository)repository).GetMediaByQueryWithoutPropertyData(query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a paged collection of children
|
/// Returns a paged collection of children
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -781,4 +799,4 @@ namespace Umbraco.Core.Services
|
|||||||
return node.NodeId;
|
return node.NodeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
@@ -45,8 +45,8 @@
|
|||||||
<Reference Include="AutoMapper.Net4, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
|
<Reference Include="AutoMapper.Net4, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
|
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
|
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
|
||||||
@@ -567,8 +567,8 @@
|
|||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddInstructionCountColumn.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddInstructionCountColumn.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddCmsMediaTable.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddCmsMediaTable.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddUserLoginTable.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenEightZero\AddUserLoginTable.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\RenameTrueFalseField.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\RenameTrueFalseField.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\SetDefaultTagsStorageType.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\SetDefaultTagsStorageType.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddUmbracoAuditTable.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddUmbracoAuditTable.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddUmbracoConsentTable.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddUmbracoConsentTable.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddIsSensitiveMemberTypeColumn.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenNineZero\AddIsSensitiveMemberTypeColumn.cs" />
|
||||||
@@ -638,7 +638,7 @@
|
|||||||
<Compile Include="Media\Exif\TIFFStrip.cs" />
|
<Compile Include="Media\Exif\TIFFStrip.cs" />
|
||||||
<Compile Include="Media\Exif\Utility.cs" />
|
<Compile Include="Media\Exif\Utility.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeOne\UpdateUserLanguagesToIsoCode.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeOne\UpdateUserLanguagesToIsoCode.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\IncreaseLanguageIsoCodeColumnLength.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\IncreaseLanguageIsoCodeColumnLength.cs" />
|
||||||
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\UpdateUmbracoConsent.cs" />
|
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenTwelveZero\UpdateUmbracoConsent.cs" />
|
||||||
<Compile Include="Persistence\PocoDataDataReader.cs" />
|
<Compile Include="Persistence\PocoDataDataReader.cs" />
|
||||||
<Compile Include="Persistence\Querying\CachedExpression.cs" />
|
<Compile Include="Persistence\Querying\CachedExpression.cs" />
|
||||||
@@ -1688,4 +1688,4 @@
|
|||||||
<Target Name="AfterBuild">
|
<Target Name="AfterBuild">
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
||||||
<package id="ImageProcessor" version="2.5.6" targetFramework="net45" />
|
<package id="ImageProcessor" version="2.5.6" targetFramework="net45" />
|
||||||
<package id="log4net" version="2.0.8" targetFramework="net45" />
|
<package id="log4net" version="2.0.8" targetFramework="net45" />
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ function contentEditingHelper(fileManager, $q, $location, $routeParams, notifica
|
|||||||
// if save button is alread the default don't change it just update the label
|
// if save button is alread the default don't change it just update the label
|
||||||
if (buttons.defaultButton && buttons.defaultButton.letter === "A") {
|
if (buttons.defaultButton && buttons.defaultButton.letter === "A") {
|
||||||
buttons.defaultButton.labelKey = "buttons_saveAndSchedule";
|
buttons.defaultButton.labelKey = "buttons_saveAndSchedule";
|
||||||
return;
|
return buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(buttons.defaultButton && buttons.subButtons && buttons.subButtons.length > 0) {
|
if(buttons.defaultButton && buttons.subButtons && buttons.subButtons.length > 0) {
|
||||||
|
|||||||
@@ -60,11 +60,6 @@
|
|||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide Circle when not active
|
|
||||||
i.small{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Circle behind the checkmark
|
// Circle behind the checkmark
|
||||||
i.small.active{
|
i.small.active{
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 10000;
|
z-index: 65537;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
<form method="POST" name="requestPasswordResetForm" ng-submit="requestPasswordResetSubmit(email)">
|
<form method="POST" name="requestPasswordResetForm" ng-submit="requestPasswordResetSubmit(email)">
|
||||||
<div class="control-group" ng-class="{error: requestPasswordResetForm.email.$invalid}">
|
<div class="control-group" ng-class="{error: requestPasswordResetForm.email.$invalid}">
|
||||||
<label><localize key="general_email">Email</localize></label>
|
<label><localize key="general_email">Email</localize></label>
|
||||||
<input type="email" ng-model="email" name="email" class="-full-width-input" localize="placeholder" placeholder="@placeholders_email" />
|
<input type="email" val-email ng-model="email" name="email" class="-full-width-input" localize="placeholder" placeholder="@placeholders_email" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control-group" ng-show="requestPasswordResetForm.$invalid">
|
<div class="control-group" ng-show="requestPasswordResetForm.$invalid">
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
<RestorePackages>true</RestorePackages>
|
<RestorePackages>true</RestorePackages>
|
||||||
<MvcProjectUpgradeChecked>true</MvcProjectUpgradeChecked>
|
<MvcProjectUpgradeChecked>true</MvcProjectUpgradeChecked>
|
||||||
<UseGlobalApplicationHostFile />
|
<UseGlobalApplicationHostFile />
|
||||||
|
<Use64BitIISExpress />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<OutputPath>bin\</OutputPath>
|
<OutputPath>bin\</OutputPath>
|
||||||
@@ -116,8 +117,8 @@
|
|||||||
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
|
<HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
|
||||||
@@ -1034,9 +1035,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
|
|||||||
<WebProjectProperties>
|
<WebProjectProperties>
|
||||||
<UseIIS>True</UseIIS>
|
<UseIIS>True</UseIIS>
|
||||||
<AutoAssignPort>True</AutoAssignPort>
|
<AutoAssignPort>True</AutoAssignPort>
|
||||||
<DevelopmentServerPort>7122</DevelopmentServerPort>
|
<DevelopmentServerPort>7124</DevelopmentServerPort>
|
||||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||||
<IISUrl>http://localhost:7122</IISUrl>
|
<IISUrl>http://localhost:7124</IISUrl>
|
||||||
<NTLMAuthentication>False</NTLMAuthentication>
|
<NTLMAuthentication>False</NTLMAuthentication>
|
||||||
<UseCustomServer>False</UseCustomServer>
|
<UseCustomServer>False</UseCustomServer>
|
||||||
<CustomServerUrl>
|
<CustomServerUrl>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
<package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net45" />
|
<package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net45" />
|
||||||
<package id="dotless" version="1.5.2" targetFramework="net45" />
|
<package id="dotless" version="1.5.2" targetFramework="net45" />
|
||||||
<package id="Examine" version="0.1.89" targetFramework="net45" />
|
<package id="Examine" version="0.1.89" targetFramework="net45" />
|
||||||
|
|||||||
@@ -480,6 +480,7 @@
|
|||||||
<key alias="currentListViewDesc" version="7.2">The active list view data type</key>
|
<key alias="currentListViewDesc" version="7.2">The active list view data type</key>
|
||||||
<key alias="createListView" version="7.2">Create custom list view</key>
|
<key alias="createListView" version="7.2">Create custom list view</key>
|
||||||
<key alias="removeListView" version="7.2">Remove custom list view</key>
|
<key alias="removeListView" version="7.2">Remove custom list view</key>
|
||||||
|
<key alias="aliasAlreadyExists">A content type, media type or member type with this alias already exists</key>
|
||||||
</area>
|
</area>
|
||||||
<area alias="renamecontainer">
|
<area alias="renamecontainer">
|
||||||
<key alias="renamed">Renamed</key>
|
<key alias="renamed">Renamed</key>
|
||||||
|
|||||||
@@ -480,6 +480,7 @@
|
|||||||
<key alias="currentListViewDesc" version="7.2">The active list view data type</key>
|
<key alias="currentListViewDesc" version="7.2">The active list view data type</key>
|
||||||
<key alias="createListView" version="7.2">Create custom list view</key>
|
<key alias="createListView" version="7.2">Create custom list view</key>
|
||||||
<key alias="removeListView" version="7.2">Remove custom list view</key>
|
<key alias="removeListView" version="7.2">Remove custom list view</key>
|
||||||
|
<key alias="aliasAlreadyExists">A content type, media type or member type with this alias already exists</key>
|
||||||
</area>
|
</area>
|
||||||
<area alias="renamecontainer">
|
<area alias="renamecontainer">
|
||||||
<key alias="renamed">Renamed</key>
|
<key alias="renamed">Renamed</key>
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace Umbraco.Web
|
|||||||
//start the background task runner for processing instructions
|
//start the background task runner for processing instructions
|
||||||
const int delayMilliseconds = 60000;
|
const int delayMilliseconds = 60000;
|
||||||
var instructionProcessingRunner = new BackgroundTaskRunner<IBackgroundTask>("InstructionProcessing", ApplicationContext.ProfilingLogger.Logger);
|
var instructionProcessingRunner = new BackgroundTaskRunner<IBackgroundTask>("InstructionProcessing", ApplicationContext.ProfilingLogger.Logger);
|
||||||
var instructionProcessingTask = new InstructionProcessing(instructionProcessingRunner, this, _appContext.ScopeProvider, delayMilliseconds, Options.ThrottleSeconds * 1000);
|
var instructionProcessingTask = new InstructionProcessing(instructionProcessingRunner, this, _appContext.ScopeProvider, ApplicationContext.ProfilingLogger.Logger, delayMilliseconds, Options.ThrottleSeconds * 1000);
|
||||||
instructionProcessingRunner.TryAdd(instructionProcessingTask);
|
instructionProcessingRunner.TryAdd(instructionProcessingTask);
|
||||||
e.Add(instructionProcessingTask);
|
e.Add(instructionProcessingTask);
|
||||||
}
|
}
|
||||||
@@ -78,18 +78,36 @@ namespace Umbraco.Web
|
|||||||
{
|
{
|
||||||
private readonly DatabaseServerMessenger _messenger;
|
private readonly DatabaseServerMessenger _messenger;
|
||||||
private readonly IScopeProvider _scopeProvider;
|
private readonly IScopeProvider _scopeProvider;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public InstructionProcessing(IBackgroundTaskRunner<RecurringTaskBase> runner,
|
public InstructionProcessing(IBackgroundTaskRunner<RecurringTaskBase> runner,
|
||||||
DatabaseServerMessenger messenger,
|
DatabaseServerMessenger messenger,
|
||||||
IScopeProvider scopeProvider,
|
IScopeProvider scopeProvider,
|
||||||
|
ILogger logger,
|
||||||
int delayMilliseconds, int periodMilliseconds)
|
int delayMilliseconds, int periodMilliseconds)
|
||||||
: base(runner, delayMilliseconds, periodMilliseconds)
|
: base(runner, delayMilliseconds, periodMilliseconds)
|
||||||
{
|
{
|
||||||
_messenger = messenger;
|
_messenger = messenger;
|
||||||
_scopeProvider = scopeProvider;
|
_scopeProvider = scopeProvider;
|
||||||
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool PerformRun()
|
public override bool PerformRun()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
TryPerformRun();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
_logger.Error<InstructionProcessing>("Failed (will repeat).", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
//return true to repeat
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TryPerformRun()
|
||||||
{
|
{
|
||||||
// beware!
|
// beware!
|
||||||
// DatabaseServerMessenger uses _appContext.DatabaseContext.Database without creating
|
// DatabaseServerMessenger uses _appContext.DatabaseContext.Database without creating
|
||||||
@@ -102,8 +120,6 @@ namespace Umbraco.Web
|
|||||||
_messenger.Sync();
|
_messenger.Sync();
|
||||||
scope.Complete();
|
scope.Complete();
|
||||||
}
|
}
|
||||||
//return true to repeat
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsAsync
|
public override bool IsAsync
|
||||||
@@ -167,7 +183,7 @@ namespace Umbraco.Web
|
|||||||
// can get the http context from it
|
// can get the http context from it
|
||||||
var httpContext = (UmbracoContext.Current == null ? null : UmbracoContext.Current.HttpContext)
|
var httpContext = (UmbracoContext.Current == null ? null : UmbracoContext.Current.HttpContext)
|
||||||
// if this is null, it could be that an async thread is calling this method that we weren't aware of and the UmbracoContext
|
// if this is null, it could be that an async thread is calling this method that we weren't aware of and the UmbracoContext
|
||||||
// wasn't ensured at the beginning of the thread. We can try to see if the HttpContext.Current is available which might be
|
// wasn't ensured at the beginning of the thread. We can try to see if the HttpContext.Current is available which might be
|
||||||
// the case if the asp.net synchronization context has kicked in
|
// the case if the asp.net synchronization context has kicked in
|
||||||
?? (HttpContext.Current == null ? null : new HttpContextWrapper(HttpContext.Current));
|
?? (HttpContext.Current == null ? null : new HttpContextWrapper(HttpContext.Current));
|
||||||
|
|
||||||
|
|||||||
@@ -227,9 +227,9 @@ namespace Umbraco.Web.Editors
|
|||||||
// works since that is based on aliases.
|
// works since that is based on aliases.
|
||||||
var allAliases = Services.ContentTypeService.GetAllContentTypeAliases();
|
var allAliases = Services.ContentTypeService.GetAllContentTypeAliases();
|
||||||
var exists = allAliases.InvariantContains(contentTypeSave.Alias);
|
var exists = allAliases.InvariantContains(contentTypeSave.Alias);
|
||||||
if ((exists) && (ctId == 0 || ct.Alias != contentTypeSave.Alias))
|
if (exists && (ctId == 0 || ct.Alias.InvariantEquals(contentTypeSave.Alias) == false))
|
||||||
{
|
{
|
||||||
ModelState.AddModelError("Alias", "A content type, media type or member type with this alias already exists");
|
ModelState.AddModelError("Alias", Services.TextService.Localize("editcontenttype/aliasAlreadyExists"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//now let the external validators execute
|
//now let the external validators execute
|
||||||
|
|||||||
@@ -647,10 +647,15 @@ namespace Umbraco.Web.Security
|
|||||||
var provider = _membershipProvider;
|
var provider = _membershipProvider;
|
||||||
|
|
||||||
string username;
|
string username;
|
||||||
|
|
||||||
if (provider.IsUmbracoMembershipProvider())
|
if (provider.IsUmbracoMembershipProvider())
|
||||||
{
|
{
|
||||||
var member = GetCurrentPersistedMember();
|
var member = GetCurrentPersistedMember();
|
||||||
|
// If a member could not be resolved from the provider, we are clearly not authorized and can break right here
|
||||||
|
if (member == null)
|
||||||
|
return false;
|
||||||
username = member.Username;
|
username = member.Username;
|
||||||
|
|
||||||
// If types defined, check member is of one of those types
|
// If types defined, check member is of one of those types
|
||||||
var allowTypesList = allowTypes as IList<string> ?? allowTypes.ToList();
|
var allowTypesList = allowTypes as IList<string> ?? allowTypes.ToList();
|
||||||
if (allowTypesList.Any(allowType => allowType != string.Empty))
|
if (allowTypesList.Any(allowType => allowType != string.Empty))
|
||||||
@@ -669,6 +674,9 @@ namespace Umbraco.Web.Security
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var member = provider.GetCurrentUser();
|
var member = provider.GetCurrentUser();
|
||||||
|
// If a member could not be resolved from the provider, we are clearly not authorized and can break right here
|
||||||
|
if (member == null)
|
||||||
|
return false;
|
||||||
username = member.UserName;
|
username = member.UserName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -207,6 +207,9 @@ namespace Umbraco.Web.Trees
|
|||||||
return HasPathAccess(entity, queryStrings);
|
return HasPathAccess(entity, queryStrings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal override IEnumerable<IUmbracoEntity> GetChildrenFromEntityService(int entityId)
|
||||||
|
=> Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a collection of all menu items that can be on a content node
|
/// Returns a collection of all menu items that can be on a content node
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@@ -11,12 +10,12 @@ using Umbraco.Core;
|
|||||||
using Umbraco.Core.Logging;
|
using Umbraco.Core.Logging;
|
||||||
using Umbraco.Core.Models;
|
using Umbraco.Core.Models;
|
||||||
using Umbraco.Core.Models.EntityBase;
|
using Umbraco.Core.Models.EntityBase;
|
||||||
using Umbraco.Core.Persistence;
|
|
||||||
using Umbraco.Web.Models.Trees;
|
using Umbraco.Web.Models.Trees;
|
||||||
using Umbraco.Web.WebApi.Filters;
|
using Umbraco.Web.WebApi.Filters;
|
||||||
using umbraco;
|
using umbraco;
|
||||||
using umbraco.BusinessLogic.Actions;
|
using umbraco.BusinessLogic.Actions;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using Umbraco.Core.Services;
|
||||||
|
|
||||||
namespace Umbraco.Web.Trees
|
namespace Umbraco.Web.Trees
|
||||||
{
|
{
|
||||||
@@ -203,9 +202,16 @@ namespace Umbraco.Web.Trees
|
|||||||
entityId = entity.Id;
|
entityId = entity.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Services.EntityService.GetChildren(entityId, UmbracoObjectType).ToList();
|
return GetChildrenFromEntityService(entityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Abstract method to fetch the entities from the entity service
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entityId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
internal abstract IEnumerable<IUmbracoEntity> GetChildrenFromEntityService(int entityId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns true or false if the current user has access to the node based on the user's allowed start node (path) access
|
/// Returns true or false if the current user has access to the node based on the user's allowed start node (path) access
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -173,5 +173,12 @@ namespace Umbraco.Web.Trees
|
|||||||
{
|
{
|
||||||
return _treeSearcher.ExamineSearch(Umbraco, query, UmbracoEntityTypes.Media, pageSize, pageIndex, out totalFound, searchFrom);
|
return _treeSearcher.ExamineSearch(Umbraco, query, UmbracoEntityTypes.Media, pageSize, pageIndex, out totalFound, searchFrom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal override IEnumerable<IUmbracoEntity> GetChildrenFromEntityService(int entityId)
|
||||||
|
// Not pretty having to cast the service, but it is the only way to get to use an internal method that we
|
||||||
|
// do not want to make public on the interface. Unfortunately also prevents this from being unit tested.
|
||||||
|
// See this issue for details on why we need this:
|
||||||
|
// https://github.com/umbraco/Umbraco-CMS/issues/3457
|
||||||
|
=> ((EntityService)Services.EntityService).GetMediaChildrenWithoutPropertyData(entityId).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,8 +107,8 @@
|
|||||||
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
<HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="dotless.Core, Version=1.5.2.0, Culture=neutral, PublicKeyToken=96b446c9e63eae34, processorArchitecture=MSIL">
|
<Reference Include="dotless.Core, Version=1.5.2.0, Culture=neutral, PublicKeyToken=96b446c9e63eae34, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\dotless.1.5.2\lib\dotless.Core.dll</HintPath>
|
<HintPath>..\packages\dotless.1.5.2\lib\dotless.Core.dll</HintPath>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
<package id="AutoMapper" version="3.3.1" targetFramework="net45" />
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
<package id="dotless" version="1.5.2" targetFramework="net45" />
|
<package id="dotless" version="1.5.2" targetFramework="net45" />
|
||||||
<package id="Examine" version="0.1.89" targetFramework="net45" />
|
<package id="Examine" version="0.1.89" targetFramework="net45" />
|
||||||
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
|
||||||
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
|
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
|
||||||
<package id="Tidy.Net" version="1.0.0" targetFramework="net45" />
|
<package id="Tidy.Net" version="1.0.0" targetFramework="net45" />
|
||||||
|
|||||||
@@ -106,8 +106,8 @@
|
|||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
|
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
|
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -68,8 +68,8 @@
|
|||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.configuration" />
|
<Reference Include="System.configuration" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ClientDependency" version="1.9.6" targetFramework="net45" />
|
<package id="ClientDependency" version="1.9.7" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -114,8 +114,8 @@
|
|||||||
<Project>{651E1350-91B6-44B7-BD60-7207006D7003}</Project>
|
<Project>{651E1350-91B6-44B7-BD60-7207006D7003}</Project>
|
||||||
<Name>Umbraco.Web</Name>
|
<Name>Umbraco.Web</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<Reference Include="ClientDependency.Core, Version=1.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ClientDependency.1.9.6\lib\net45\ClientDependency.Core.dll</HintPath>
|
<HintPath>..\packages\ClientDependency.1.9.7\lib\net45\ClientDependency.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System">
|
<Reference Include="System">
|
||||||
<Name>System</Name>
|
<Name>System</Name>
|
||||||
|
|||||||
Reference in New Issue
Block a user