Compare commits

..

1 Commits

Author SHA1 Message Date
Anders Bjerner e8b320d7b4 Introduced properties overlay 2018-12-23 02:13:57 +01:00
318 changed files with 28433 additions and 29374 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/dev-v8/.github/V8_GETTING_STARTED.md) to go to the v8 branch_ _Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/.github/V8_GETTING_STARTED.md) to go to the v8 branch_
# Contributing to Umbraco CMS # Contributing to Umbraco CMS
👍🎉 First off, thanks for taking the time to contribute! 🎉👍 👍🎉 First off, thanks for taking the time to contribute! 🎉👍
@@ -16,7 +16,7 @@ This document gives you a quick overview on how to get started, we will link to
## Guidelines for contributions we welcome ## Guidelines for contributions we welcome
Not all changes are wanted, so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valuable time. Not all changes are wanted, so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valueable time.
We have [documented what we consider small and large changes](CONTRIBUTION_GUIDELINES.md). Make sure to talk to us before making large changes. We have [documented what we consider small and large changes](CONTRIBUTION_GUIDELINES.md). Make sure to talk to us before making large changes.
-1
View File
@@ -1,5 +1,4 @@
[![Build status](https://ci.appveyor.com/api/projects/status/6by6harxtxt0ocdx/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7) [![Build status](https://ci.appveyor.com/api/projects/status/6by6harxtxt0ocdx/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7)
[![pullreminders](https://pullreminders.com/badge.svg)](https://pullreminders.com?ref=badge)
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/tree/temp8) to go to the v8 branch_ _Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/tree/temp8) to go to the v8 branch_
@@ -135,9 +135,7 @@ function Get-UmbracoBuildEnv
$vsPath = "" $vsPath = ""
$vsVer = "" $vsVer = ""
$msBuild = $null $msBuild = $null
$params = @() &$vswhere | foreach {
$params += "-prerelease"
&$vswhere @params | foreach {
if ($_.StartsWith("installationPath:")) { $vsPath = $_.SubString("installationPath:".Length).Trim() } if ($_.StartsWith("installationPath:")) { $vsPath = $_.SubString("installationPath:".Length).Trim() }
if ($_.StartsWith("installationVersion:")) { $vsVer = $_.SubString("installationVersion:".Length).Trim() } if ($_.StartsWith("installationVersion:")) { $vsVer = $_.SubString("installationVersion:".Length).Trim() }
} }
@@ -146,10 +144,7 @@ function Get-UmbracoBuildEnv
$vsVerParts = $vsVer.Split('.') $vsVerParts = $vsVer.Split('.')
$vsMajor = [int]::Parse($vsVerParts[0]) $vsMajor = [int]::Parse($vsVerParts[0])
$vsMinor = [int]::Parse($vsVerParts[1]) $vsMinor = [int]::Parse($vsVerParts[1])
if ($vsMajor -eq 16) { if ($vsMajor -eq 15) {
$msBuild = "$vsPath\MSBuild\Current\Bin"
}
elseif ($vsMajor -eq 15) {
$msBuild = "$vsPath\MSBuild\$vsMajor.0\Bin" $msBuild = "$vsPath\MSBuild\$vsMajor.0\Bin"
} }
elseif ($vsMajor -eq 14) { elseif ($vsMajor -eq 14) {
@@ -195,10 +195,6 @@ function Compile-Umbraco
{ {
$toolsVersion = "15.0" $toolsVersion = "15.0"
} }
if ($uenv.VisualStudio.Major -eq 16)
{
$toolsVersion = "Current"
}
Write-Host ">> Compile Umbraco" Write-Host ">> Compile Umbraco"
Write-Host "Logging to $tmp\msbuild.umbraco.log" Write-Host "Logging to $tmp\msbuild.umbraco.log"
+103 -112
View File
@@ -1,116 +1,107 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4"> <metadata minClientVersion="3.4.4">
<id>UmbracoCms.Core</id> <id>UmbracoCms.Core</id>
<version>7.0.0</version> <version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title> <title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors> <authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners> <owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> <licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl> <projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl> <iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description> <description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary> <summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language> <language>en-US</language>
<tags>umbraco</tags> <tags>umbraco</tags>
<dependencies> <dependencies>
<group targetFramework="net452"> <dependency id="log4net" version="[2.0.8,3.0.0)" />
<dependency id="log4net" version="[2.0.8, 3.0.0)" /> <dependency id="Log4Net.Async" version="[2.0.4,3.0.0)" />
<dependency id="Log4Net.Async" version="[2.0.4, 3.0.0)" /> <dependency id="Microsoft.AspNet.Mvc" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.7, 6.0.0)" /> <dependency id="Microsoft.AspNet.WebApi" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.7, 6.0.0)" /> <dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.2, 3.0.0)" /> <dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.4.1, 3.0.0)" /> <dependency id="Microsoft.Owin.Security.Cookies" version="[3.1.0, 4.0.0)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[4.0.1, 5.0.0)" /> <dependency id="Microsoft.Owin.Security.OAuth" version="[3.1.0, 4.0.0)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[4.0.1, 5.0.0)" /> <dependency id="Microsoft.Owin.Host.SystemWeb" version="[3.1.0, 4.0.0)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[4.0.1, 5.0.0)" /> <dependency id="MiniProfiler" version="[2.1.0, 3.0.0)" />
<dependency id="MiniProfiler" version="[2.1.0, 3.0.0)" /> <dependency id="HtmlAgilityPack" version="[1.4.9.5, 2.0.0)" />
<dependency id="HtmlAgilityPack" version="[1.8.8, 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.7, 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="[12.0.2, 13.0.0)" /> <dependency id="Examine" version="[0.1.89, 1.0.0)" />
<dependency id="Examine" version="[0.1.90, 1.0.0)" /> <dependency id="ImageProcessor" version="[2.5.6, 3.0.0)" />
<dependency id="ImageProcessor" version="[2.7.0.100, 3.0.0)" /> <dependency id="ImageProcessor.Web" version="[4.8.7, 5.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.10.0.100, 5.0.0)" /> <dependency id="semver" version="[1.1.2, 3.0.0)" />
<dependency id="semver" version="[1.1.2, 3.0.0)" /> <!-- Markdown can not be updated due to: https://github.com/hey-red/markdownsharp/issues/71#issuecomment-233585487 -->
<!-- Markdown can not be updated due to: https://github.com/hey-red/markdownsharp/issues/71#issuecomment-233585487 --> <dependency id="Markdown" version="[1.14.7, 2.0.0)" />
<dependency id="Markdown" version="[1.14.7, 2.0.0)" /> <dependency id="System.Threading.Tasks.Dataflow" version="[4.7.0, 5.0.0)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.9.0, 5.0.0)" /> <dependency id="System.ValueTuple" version="[4.4.0, 5.0.0)" />
<dependency id="System.ValueTuple" version="[4.5.0, 5.0.0)" /> </dependencies>
</group> </metadata>
</dependencies> <files>
<frameworkAssemblies> <file src="$BuildTmp$\WebApp\bin\businesslogic.dll" target="lib\net45\businesslogic.dll" />
<frameworkAssembly assemblyName="System.Configuration" targetFramework="net452" /> <file src="$BuildTmp$\WebApp\bin\businesslogic.xml" target="lib\net45\businesslogic.xml" />
<frameworkAssembly assemblyName="System.IO.Compression.FileSystem" targetFramework="net452" /> <file src="$BuildTmp$\WebApp\bin\cms.dll" target="lib\net45\cms.dll" />
<frameworkAssembly assemblyName="System.Web" targetFramework="net452" /> <file src="$BuildTmp$\WebApp\bin\cms.xml" target="lib\net45\cms.xml" />
<frameworkAssembly assemblyName="System.Net.Http" targetFramework="net452" /> <file src="$BuildTmp$\WebApp\bin\controls.dll" target="lib\net45\controls.dll" />
<frameworkAssembly assemblyName="System.Drawing" targetFramework="net452" /> <file src="$BuildTmp$\WebApp\bin\controls.xml" target="lib\net45\controls.xml" />
</frameworkAssemblies> <file src="$BuildTmp$\WebApp\bin\interfaces.dll" target="lib\net45\interfaces.dll" />
</metadata> <file src="$BuildTmp$\WebApp\bin\interfaces.xml" target="lib\net45\interfaces.xml" />
<files> <file src="$BuildTmp$\WebApp\bin\log4net.dll" target="lib\net45\log4net.dll" />
<file src="$BuildTmp$\WebApp\bin\businesslogic.dll" target="lib\net452\businesslogic.dll" /> <file src="$BuildTmp$\WebApp\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\net45\Microsoft.ApplicationBlocks.Data.dll" />
<file src="$BuildTmp$\WebApp\bin\businesslogic.xml" target="lib\net452\businesslogic.xml" /> <file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.dll" target="lib\net45\SQLCE4Umbraco.dll" />
<file src="$BuildTmp$\WebApp\bin\cms.dll" target="lib\net452\cms.dll" /> <file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.xml" target="lib\net45\SQLCE4Umbraco.xml" />
<file src="$BuildTmp$\WebApp\bin\cms.xml" target="lib\net452\cms.xml" /> <file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.dll" target="lib\net45\System.Data.SqlServerCe.dll" />
<file src="$BuildTmp$\WebApp\bin\controls.dll" target="lib\net452\controls.dll" /> <file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.Entity.dll" target="lib\net45\System.Data.SqlServerCe.Entity.dll" />
<file src="$BuildTmp$\WebApp\bin\controls.xml" target="lib\net452\controls.xml" /> <file src="$BuildTmp$\WebApp\bin\TidyNet.dll" target="lib\net45\TidyNet.dll" />
<file src="$BuildTmp$\WebApp\bin\interfaces.dll" target="lib\net452\interfaces.dll" /> <file src="$BuildTmp$\WebApp\bin\Umbraco.Core.dll" target="lib\net45\Umbraco.Core.dll" />
<file src="$BuildTmp$\WebApp\bin\interfaces.xml" target="lib\net452\interfaces.xml" /> <file src="$BuildTmp$\WebApp\bin\Umbraco.Core.xml" target="lib\net45\Umbraco.Core.xml" />
<file src="$BuildTmp$\WebApp\bin\log4net.dll" target="lib\net452\log4net.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.dll" target="lib\net45\umbraco.DataLayer.dll" />
<file src="$BuildTmp$\WebApp\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\net452\Microsoft.ApplicationBlocks.Data.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.xml" target="lib\net45\umbraco.DataLayer.xml" />
<file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.dll" target="lib\net452\SQLCE4Umbraco.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.dll" target="lib\net45\umbraco.dll" />
<file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.xml" target="lib\net452\SQLCE4Umbraco.xml" /> <file src="$BuildTmp$\WebApp\bin\umbraco.xml" target="lib\net45\umbraco.xml" />
<file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.dll" target="lib\net452\System.Data.SqlServerCe.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.dll" target="lib\net45\umbraco.editorControls.dll" />
<file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.Entity.dll" target="lib\net452\System.Data.SqlServerCe.Entity.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.xml" target="lib\net45\umbraco.editorControls.xml" />
<file src="$BuildTmp$\WebApp\bin\TidyNet.dll" target="lib\net452\TidyNet.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.dll" target="lib\net45\umbraco.MacroEngines.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.dll" target="lib\net452\Umbraco.Core.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.xml" target="lib\net45\umbraco.MacroEngines.xml" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.xml" target="lib\net452\Umbraco.Core.xml" /> <file src="$BuildTmp$\WebApp\bin\umbraco.providers.dll" target="lib\net45\umbraco.providers.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.dll" target="lib\net452\umbraco.DataLayer.dll" /> <file src="$BuildTmp$\WebApp\bin\umbraco.providers.xml" target="lib\net45\umbraco.providers.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.xml" target="lib\net452\umbraco.DataLayer.xml" /> <file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.dll" target="lib\net45\Umbraco.Web.UI.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.dll" target="lib\net452\umbraco.dll" /> <file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.xml" target="lib\net45\Umbraco.Web.UI.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.xml" target="lib\net452\umbraco.xml" /> <file src="$BuildTmp$\WebApp\bin\UmbracoExamine.dll" target="lib\net45\UmbracoExamine.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.dll" target="lib\net452\umbraco.editorControls.dll" /> <file src="$BuildTmp$\WebApp\bin\UmbracoExamine.xml" target="lib\net45\UmbracoExamine.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.xml" target="lib\net452\umbraco.editorControls.xml" /> <file src="tools\install.core.ps1" target="tools\install.ps1" />
<file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.dll" target="lib\net452\umbraco.MacroEngines.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.xml" target="lib\net452\umbraco.MacroEngines.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.providers.dll" target="lib\net452\umbraco.providers.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.providers.xml" target="lib\net452\umbraco.providers.xml" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.dll" target="lib\net452\Umbraco.Web.UI.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.xml" target="lib\net452\Umbraco.Web.UI.xml" />
<file src="$BuildTmp$\WebApp\bin\UmbracoExamine.dll" target="lib\net452\UmbracoExamine.dll" />
<file src="$BuildTmp$\WebApp\bin\UmbracoExamine.xml" target="lib\net452\UmbracoExamine.xml" />
<file src="tools\install.core.ps1" target="tools\install.ps1" />
<!-- Added to be able to produce a symbols package --> <!-- Added to be able to produce a symbols package -->
<file src="$BuildTmp$\bin\SQLCE4Umbraco.pdb" target="lib" /> <file src="$BuildTmp$\bin\SQLCE4Umbraco.pdb" target="lib" />
<file src="..\..\src\SQLCE4Umbraco\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\SQLCE4Umbraco" /> <file src="..\..\src\SQLCE4Umbraco\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\SQLCE4Umbraco" />
<file src="$BuildTmp$\bin\businesslogic.pdb" target="lib" /> <file src="$BuildTmp$\bin\businesslogic.pdb" target="lib" />
<file src="..\..\src\umbraco.businesslogic\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.businesslogic" /> <file src="..\..\src\umbraco.businesslogic\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.businesslogic" />
<file src="$BuildTmp$\bin\cms.pdb" target="lib" /> <file src="$BuildTmp$\bin\cms.pdb" target="lib" />
<file src="..\..\src\umbraco.cms\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.cms" /> <file src="..\..\src\umbraco.cms\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.cms" />
<file src="$BuildTmp$\bin\controls.pdb" target="lib" /> <file src="$BuildTmp$\bin\controls.pdb" target="lib" />
<file src="..\..\src\umbraco.controls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.controls" /> <file src="..\..\src\umbraco.controls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.controls" />
<file src="$BuildTmp$\bin\interfaces.pdb" target="lib" /> <file src="$BuildTmp$\bin\interfaces.pdb" target="lib" />
<file src="..\..\src\umbraco.interfaces\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.interfaces" /> <file src="..\..\src\umbraco.interfaces\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.interfaces" />
<file src="$BuildTmp$\bin\Umbraco.Core.pdb" target="lib" /> <file src="$BuildTmp$\bin\Umbraco.Core.pdb" target="lib" />
<file src="..\..\src\Umbraco.Core\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" /> <file src="..\..\src\Umbraco.Core\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" />
<file src="$BuildTmp$\bin\umbraco.DataLayer.pdb" target="lib" /> <file src="$BuildTmp$\bin\umbraco.DataLayer.pdb" target="lib" />
<file src="..\..\src\umbraco.datalayer\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.datalayer" /> <file src="..\..\src\umbraco.datalayer\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.datalayer" />
<file src="$BuildTmp$\bin\umbraco.editorControls.pdb" target="lib" /> <file src="$BuildTmp$\bin\umbraco.editorControls.pdb" target="lib" />
<file src="..\..\src\umbraco.editorControls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.editorControls" /> <file src="..\..\src\umbraco.editorControls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.editorControls" />
<file src="$BuildTmp$\bin\umbraco.MacroEngines.pdb" target="lib" /> <file src="$BuildTmp$\bin\umbraco.MacroEngines.pdb" target="lib" />
<file src="..\..\src\umbraco.MacroEngines\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.MacroEngines" /> <file src="..\..\src\umbraco.MacroEngines\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.MacroEngines" />
<file src="$BuildTmp$\bin\umbraco.providers.pdb" target="lib" /> <file src="$BuildTmp$\bin\umbraco.providers.pdb" target="lib" />
<file src="..\..\src\umbraco.providers\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.providers" /> <file src="..\..\src\umbraco.providers\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.providers" />
<file src="$BuildTmp$\bin\umbraco.pdb" target="lib" /> <file src="$BuildTmp$\bin\umbraco.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" /> <file src="..\..\src\Umbraco.Web\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" />
<file src="$BuildTmp$\bin\Umbraco.Web.UI.pdb" target="lib" /> <file src="$BuildTmp$\bin\Umbraco.Web.UI.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web.UI\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web.UI" /> <file src="..\..\src\Umbraco.Web.UI\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web.UI" />
<file src="$BuildTmp$\bin\UmbracoExamine.pdb" target="lib" /> <file src="$BuildTmp$\bin\UmbracoExamine.pdb" target="lib" />
<file src="..\..\src\UmbracoExamine\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\UmbracoExamine" /> <file src="..\..\src\UmbracoExamine\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\UmbracoExamine" />
</files> </files>
</package> </package>
+51 -53
View File
@@ -1,56 +1,54 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4"> <metadata minClientVersion="3.4.4">
<id>UmbracoCms</id> <id>UmbracoCms</id>
<version>7.0.0</version> <version>7.0.0</version>
<title>Umbraco Cms</title> <title>Umbraco Cms</title>
<authors>Umbraco HQ</authors> <authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners> <owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl> <licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl> <projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl> <iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Installs Umbraco Cms in your Visual Studio ASP.NET project</description> <description>Installs Umbraco Cms in your Visual Studio ASP.NET project</description>
<summary>Installs Umbraco Cms in your Visual Studio ASP.NET project</summary> <summary>Installs Umbraco Cms in your Visual Studio ASP.NET project</summary>
<language>en-US</language> <language>en-US</language>
<tags>umbraco</tags> <tags>umbraco</tags>
<dependencies> <dependencies>
<group targetFramework="net452"> <dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="UmbracoCms.Core" version="[$version$]" /> <dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
<dependency id="Newtonsoft.Json" version="[12.0.2, 13.0.0)" /> <dependency id="Umbraco.ModelsBuilder" version="[3.0.10, 4.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.10, 4.0.0)" /> <dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.4.1, 3.0.0)" /> <dependency id="ImageProcessor.Web.Config" version="[2.3.1, 3.0.0)" />
<dependency id="ImageProcessor.Web.Config" version="[2.5.0.100, 3.0.0)" /> <dependency id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="[2.0.0, 3.0.0)" />
<dependency id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="[2.0.1, 3.0.0)" /> </dependencies>
</group> </metadata>
</dependencies> <files>
</metadata> <file src="$BuildTmp$\Configs\**" target="Content\Config" exclude="$BuildTmp$\Configs\Web.config.transform" />
<files> <file src="$BuildTmp$\WebApp\Views\**" target="Content\Views" exclude="$BuildTmp$\WebApp\Views\Web.config" />
<file src="$BuildTmp$\Configs\**" target="Content\Config" exclude="$BuildTmp$\Configs\Web.config.transform" /> <file src="$BuildTmp$\WebApp\default.aspx" target="Content\default.aspx" />
<file src="$BuildTmp$\WebApp\Views\**" target="Content\Views" exclude="$BuildTmp$\WebApp\Views\Web.config" /> <file src="$BuildTmp$\WebApp\Global.asax" target="Content\Global.asax" />
<file src="$BuildTmp$\WebApp\default.aspx" target="Content\default.aspx" /> <file src="$BuildTmp$\WebApp\Web.config" target="UmbracoFiles\Web.config" />
<file src="$BuildTmp$\WebApp\Global.asax" target="Content\Global.asax" /> <file src="$BuildTmp$\WebApp\App_Browsers\**" target="UmbracoFiles\App_Browsers" />
<file src="$BuildTmp$\WebApp\Web.config" target="UmbracoFiles\Web.config" /> <file src="$BuildTmp$\WebApp\bin\amd64\**" target="UmbracoFiles\bin\amd64" />
<file src="$BuildTmp$\WebApp\App_Browsers\**" target="UmbracoFiles\App_Browsers" /> <file src="$BuildTmp$\WebApp\bin\x86\**" target="UmbracoFiles\bin\x86" />
<file src="$BuildTmp$\WebApp\bin\amd64\**" target="UmbracoFiles\bin\amd64" /> <file src="$BuildTmp$\WebApp\config\splashes\**" target="UmbracoFiles\Config\splashes" />
<file src="$BuildTmp$\WebApp\bin\x86\**" target="UmbracoFiles\bin\x86" /> <file src="$BuildTmp$\WebApp\config\BackOfficeTours\**" target="Content\Config\BackOfficeTours" />
<file src="$BuildTmp$\WebApp\config\splashes\**" target="UmbracoFiles\Config\splashes" /> <file src="$BuildTmp$\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="$BuildTmp$\WebApp\config\BackOfficeTours\**" target="Content\Config\BackOfficeTours" /> <file src="$BuildTmp$\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" />
<file src="$BuildTmp$\WebApp\umbraco\**" target="UmbracoFiles\umbraco" /> <file src="$BuildTmp$\WebApp\Media\Web.config" target="Content\Media\Web.config" />
<file src="$BuildTmp$\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" /> <file src="tools\install.ps1" target="tools\install.ps1" />
<file src="$BuildTmp$\WebApp\Media\Web.config" target="Content\Media\Web.config" /> <file src="tools\Readme.txt" target="tools\Readme.txt" />
<file src="tools\install.ps1" target="tools\install.ps1" /> <file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" />
<file src="tools\Readme.txt" target="tools\Readme.txt" /> <file src="tools\Web.config.install.xdt" target="Content\Web.config.install.xdt" />
<file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" /> <file src="tools\applications.config.install.xdt" target="Content\config\applications.config.install.xdt" />
<file src="tools\Web.config.install.xdt" target="Content\Web.config.install.xdt" /> <file src="tools\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.config.install.xdt" />
<file src="tools\applications.config.install.xdt" target="Content\config\applications.config.install.xdt" /> <file src="tools\Dashboard.config.install.xdt" target="Content\config\Dashboard.config.install.xdt" />
<file src="tools\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.config.install.xdt" /> <file src="tools\trees.config.install.xdt" target="Content\config\trees.config.install.xdt" />
<file src="tools\Dashboard.config.install.xdt" target="Content\config\Dashboard.config.install.xdt" /> <file src="tools\umbracoSettings.config.install.xdt" target="Content\config\umbracoSettings.config.install.xdt" />
<file src="tools\trees.config.install.xdt" target="Content\config\trees.config.install.xdt" /> <file src="tools\Views.Web.config.install.xdt" target="Views\Web.config.install.xdt" />
<file src="tools\umbracoSettings.config.install.xdt" target="Content\config\umbracoSettings.config.install.xdt" /> <file src="tools\processing.config.install.xdt" target="Content\Config\imageprocessor\processing.config.install.xdt" />
<file src="tools\Views.Web.config.install.xdt" target="Views\Web.config.install.xdt" /> <file src="tools\cache.config.install.xdt" target="Content\Config\imageprocessor\cache.config.install.xdt" />
<file src="tools\processing.config.install.xdt" target="Content\Config\imageprocessor\processing.config.install.xdt" /> <file src="build\**" target="build" />
<file src="tools\cache.config.install.xdt" target="Content\Config\imageprocessor\cache.config.install.xdt" /> </files>
<file src="build\**" target="build" />
</files>
</package> </package>
@@ -8,7 +8,7 @@
</configSections> </configSections>
<system.web.webPages.razor> <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(factoryType)" xdt:Transform="SetAttributes(factoryType)" /> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(factoryType)" xdt:Transform="SetAttributes(factoryType)" />
<pages pageBaseType="System.Web.Mvc.WebViewPage"> <pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces> <namespaces>
<add namespace="Umbraco.Web.PublishedContentModels" xdt:Transform="InsertIfMissing" /> <add namespace="Umbraco.Web.PublishedContentModels" xdt:Transform="InsertIfMissing" />
@@ -18,13 +18,13 @@
<system.web> <system.web>
<pages <pages
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(pageParserFilterType,pageBaseType,userControlBaseType)" xdt:Locator="Match(pageParserFilterType,pageBaseType,userControlBaseType)"
xdt:Transform="SetAttributes(pageParserFilterType,pageBaseType,userControlBaseType)"> xdt:Transform="SetAttributes(pageParserFilterType,pageBaseType,userControlBaseType)">
<controls> <controls>
<add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" xdt:Locator="Match(namespace)" xdt:Transform="SetAttributes(assembly)" /> <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" xdt:Locator="Match(namespace)" xdt:Transform="SetAttributes(assembly)" />
</controls> </controls>
</pages> </pages>
</system.web> </system.web>
+10 -24
View File
@@ -324,6 +324,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='HtmlAgilityPack')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='HtmlAgilityPack')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='AutoMapper')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='AutoMapper')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Newtonsoft.Json')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Newtonsoft.Json')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Mvc')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Mvc')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.WebPages.Razor')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.WebPages.Razor')" xdt:Transform="Remove" />
@@ -336,9 +337,6 @@
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeAnalysis.CSharp')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeAnalysis.CSharp')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='log4net')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='log4net')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Data.SqlServerCe')" xdt:Transform="Remove" /> <dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Data.SqlServerCe')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeDom.Providers.DotNetCompilerPlatform')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.AspNet.SignalR.Core')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Http.WebHost')" xdt:Transform="Remove" />
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
@@ -346,7 +344,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" /> <assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.8.8.0" newVersion="1.8.8.0" /> <bindingRedirect oldVersion="0.0.0.0-1.4.9.5" newVersion="1.4.9.5" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" /> <assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
@@ -358,11 +356,11 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
@@ -370,27 +368,27 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert"> <dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
@@ -400,18 +398,6 @@
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845DCD8080CC91" culture="neutral"/> <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845DCD8080CC91" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1"/> <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
</dependentAssembly> </dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.AspNet.SignalR.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.4.1.0" newVersion="2.4.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
+20 -20
View File
@@ -3,57 +3,57 @@
[string]$Directory [string]$Directory
) )
$workingDirectory = $Directory $workingDirectory = $Directory
CD "$($workingDirectory)" CD $workingDirectory
# Clone repo # Clone repo
$fullGitUrl = "https://$($env:GIT_URL)/$($env:GIT_REPOSITORYNAME).git" $fullGitUrl = "https://$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
git clone $($fullGitUrl) $($env:GIT_REPOSITORYNAME) 2>&1 | % { $_.ToString() } git clone $fullGitUrl 2>&1 | % { $_.ToString() }
# Remove everything so that unzipping the release later will update everything # Remove everything so that unzipping the release later will update everything
# Don't remove the readme file nor the git directory # Don't remove the readme file nor the git directory
Write-Host "Cleaning up git directory before adding new version" Write-Host "Cleaning up git directory before adding new version"
Remove-Item -Recurse "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)\*" -Exclude README.md,.git Remove-Item -Recurse $workingDirectory\$env:GIT_REPOSITORYNAME\* -Exclude README.md,.git
# Find release zip # Find release zip
$zipsDir = "$($workingDirectory)\$($env:BUILD_DEFINITIONNAME)\zips" $zipsDir = "$workingDirectory\$env:BUILD_DEFINITIONNAME\zips"
$pattern = "UmbracoCms.([0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}).zip" $pattern = "UmbracoCms.([0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}).zip"
Write-Host "Searching for Umbraco release files in $($zipsDir) for a file with pattern $($pattern)" Write-Host "Searching for Umbraco release files in $workingDirectory\$zipsDir for a file with pattern $pattern"
$file = (Get-ChildItem "$($zipsDir)" | Where-Object { $_.Name -match "$($pattern)" }) $file = (Get-ChildItem $zipsDir | Where-Object { $_.Name -match "$pattern" })
if($file) if($file)
{ {
# Get release name # Get release name
$version = [regex]::Match($($file.Name), $($pattern)).captures.groups[1].value $version = [regex]::Match($file.Name, $pattern).captures.groups[1].value
$releaseName = "Umbraco $($version)" $releaseName = "Umbraco $version"
Write-Host "Found $($releaseName)" Write-Host "Found $releaseName"
# Unzip into repository to update release # Unzip into repository to update release
Add-Type -AssemblyName System.IO.Compression.FileSystem Add-Type -AssemblyName System.IO.Compression.FileSystem
Write-Host "Unzipping $($file.FullName) to $($workingDirectory)\$($env:GIT_REPOSITORYNAME)" Write-Host "Unzipping $($file.FullName) to $workingDirectory\$env:GIT_REPOSITORYNAME"
[System.IO.Compression.ZipFile]::ExtractToDirectory("$($file.FullName)", "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)") [System.IO.Compression.ZipFile]::ExtractToDirectory("$($file.FullName)", "$workingDirectory\$env:GIT_REPOSITORYNAME")
# Telling git who we are # Telling git who we are
git config --global user.email "coffee@umbraco.com" 2>&1 | % { $_.ToString() } git config --global user.email "coffee@umbraco.com" 2>&1 | % { $_.ToString() }
git config --global user.name "Umbraco HQ" 2>&1 | % { $_.ToString() } git config --global user.name "Umbraco HQ" 2>&1 | % { $_.ToString() }
# Commit # Commit
CD "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)" CD $env:GIT_REPOSITORYNAME
Write-Host "Committing Umbraco $($version) Release from Build Output" Write-Host "Committing Umbraco $version Release from Build Output"
git add . 2>&1 | % { $_.ToString() } git add . 2>&1 | % { $_.ToString() }
git commit -m " Release $($releaseName) from Build Output" 2>&1 | % { $_.ToString() } git commit -m " Release $releaseName from Build Output" 2>&1 | % { $_.ToString() }
# Tag the release # Tag the release
git tag -a "v$($version)" -m "v$($version)" git tag -a "v$version" -m "v$version"
# Push release to master # Push release to master
$fullGitAuthUrl = "https://$($env:GIT_USERNAME):$($GitHubPersonalAccessToken)@$($env:GIT_URL)/$($env:GIT_REPOSITORYNAME).git" $fullGitAuthUrl = "https://$($env:GIT_USERNAME):$GitHubPersonalAccessToken@$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
git push $($fullGitAuthUrl) 2>&1 | % { $_.ToString() } git push $fullGitAuthUrl 2>&1 | % { $_.ToString() }
#Push tag to master #Push tag to master
git push $($fullGitAuthUrl) --tags 2>&1 | % { $_.ToString() } git push $fullGitAuthUrl --tags 2>&1 | % { $_.ToString() }
} }
else else
{ {
Write-Error "Umbraco release file not found, searched in $($workingDirectory)\$($zipsDir) for a file with pattern $($pattern) - canceling" Write-Error "Umbraco release file not found, searched in $workingDirectory\$zipsDir for a file with pattern $pattern - cancelling"
} }
+1 -1
View File
@@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SQLCE4Umbraco</RootNamespace> <RootNamespace>SQLCE4Umbraco</RootNamespace>
<AssemblyName>SQLCE4Umbraco</AssemblyName> <AssemblyName>SQLCE4Umbraco</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<SccProjectName> <SccProjectName>
</SccProjectName> </SccProjectName>
+6 -6
View File
@@ -4,7 +4,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -16,19 +16,19 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
@@ -36,4 +36,4 @@
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup></configuration>
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.15.1")] [assembly: AssemblyFileVersion("7.13.0")]
[assembly: AssemblyInformationalVersion("7.15.1")] [assembly: AssemblyInformationalVersion("7.13.0")]
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{ {
public class UmbracoVersion public class UmbracoVersion
{ {
private static readonly Version Version = new Version("7.15.1"); private static readonly Version Version = new Version("7.13.0");
/// <summary> /// <summary>
/// Gets the current version of Umbraco. /// Gets the current version of Umbraco.
-295
View File
@@ -1,295 +0,0 @@
using System;
namespace Umbraco.Core
{
public static partial class Constants
{
/// <summary>
/// Defines the identifiers for Umbraco data types as constants for easy centralized access/management.
/// </summary>
internal static class DataTypes
{
public static class ReservedPreValueKeys
{
public const string IgnoreUserStartNodes = "ignoreUserStartNodes";
}
/// <summary>
/// Guid for Content Picker as string
/// </summary>
public const string ContentPicker = "FD1E0DA5-5606-4862-B679-5D0CF3A52A59";
/// <summary>
/// Guid for Content Picker
/// </summary>
public static readonly Guid ContentPickerGuid = new Guid(ContentPicker);
/// <summary>
/// Guid for Member Picker as string
/// </summary>
public const string MemberPicker = "1EA2E01F-EBD8-4CE1-8D71-6B1149E63548";
/// <summary>
/// Guid for Member Picker
/// </summary>
public static readonly Guid MemberPickerGuid = new Guid(MemberPicker);
/// <summary>
/// Guid for Media Picker as string
/// </summary>
public const string MediaPicker = "135D60E0-64D9-49ED-AB08-893C9BA44AE5";
/// <summary>
/// Guid for Media Picker
/// </summary>
public static readonly Guid MediaPickerGuid = new Guid(MediaPicker);
/// <summary>
/// Guid for Multiple Media Picker as string
/// </summary>
public const string MultipleMediaPicker = "9DBBCBBB-2327-434A-B355-AF1B84E5010A";
/// <summary>
/// Guid for Multiple Media Picker
/// </summary>
public static readonly Guid MultipleMediaPickerGuid = new Guid(MultipleMediaPicker);
/// <summary>
/// Guid for Related Links as string
/// </summary>
public const string RelatedLinks = "B4E3535A-1753-47E2-8568-602CF8CFEE6F";
/// <summary>
/// Guid for Related Links
/// </summary>
public static readonly Guid RelatedLinksGuid = new Guid(RelatedLinks);
/// <summary>
/// Guid for Member as string
/// </summary>
public const string Member = "d59be02f-1df9-4228-aa1e-01917d806cda";
/// <summary>
/// Guid for Member
/// </summary>
public static readonly Guid MemberGuid = new Guid(Member);
/// <summary>
/// Guid for Image Cropper as string
/// </summary>
public const string ImageCropper = "1df9f033-e6d4-451f-b8d2-e0cbc50a836f";
/// <summary>
/// Guid for Image Cropper
/// </summary>
public static readonly Guid ImageCropperGuid = new Guid(ImageCropper);
/// <summary>
/// Guid for Tags as string
/// </summary>
public const string Tags = "b6b73142-b9c1-4bf8-a16d-e1c23320b549";
/// <summary>
/// Guid for Tags
/// </summary>
public static readonly Guid TagsGuid = new Guid(Tags);
/// <summary>
/// Guid for List View - Content as string
/// </summary>
public const string ListViewContent = "C0808DD3-8133-4E4B-8CE8-E2BEA84A96A4";
/// <summary>
/// Guid for List View - Content
/// </summary>
public static readonly Guid ListViewContentGuid = new Guid(ListViewContent);
/// <summary>
/// Guid for List View - Media as string
/// </summary>
public const string ListViewMedia = "3A0156C4-3B8C-4803-BDC1-6871FAA83FFF";
/// <summary>
/// Guid for List View - Media
/// </summary>
public static readonly Guid ListViewMediaGuid = new Guid(ListViewMedia);
/// <summary>
/// Guid for List View - Members as string
/// </summary>
public const string ListViewMembers = "AA2C52A0-CE87-4E65-A47C-7DF09358585D";
/// <summary>
/// Guid for List View - Members
/// </summary>
public static readonly Guid ListViewMembersGuid = new Guid(ListViewMembers);
/// <summary>
/// Guid for Date Picker with time as string
/// </summary>
public const string DatePickerWithTime = "e4d66c0f-b935-4200-81f0-025f7256b89a";
/// <summary>
/// Guid for Date Picker with time
/// </summary>
public static readonly Guid DatePickerWithTimeGuid = new Guid(DatePickerWithTime);
/// <summary>
/// Guid for Approved Color as string
/// </summary>
public const string ApprovedColor = "0225af17-b302-49cb-9176-b9f35cab9c17";
/// <summary>
/// Guid for Approved Color
/// </summary>
public static readonly Guid ApprovedColorGuid = new Guid(ApprovedColor);
/// <summary>
/// Guid for Dropdown multiple as string
/// </summary>
public const string DropdownMultiple = "f38f0ac7-1d27-439c-9f3f-089cd8825a53";
/// <summary>
/// Guid for Dropdown multiple
/// </summary>
public static readonly Guid DropdownMultipleGuid = new Guid(DropdownMultiple);
/// <summary>
/// Guid for Radiobox as string
/// </summary>
public const string Radiobox = "bb5f57c9-ce2b-4bb9-b697-4caca783a805";
/// <summary>
/// Guid for Radiobox
/// </summary>
public static readonly Guid RadioboxGuid = new Guid(Radiobox);
/// <summary>
/// Guid for Date Picker as string
/// </summary>
public const string DatePicker = "5046194e-4237-453c-a547-15db3a07c4e1";
/// <summary>
/// Guid for Date Picker
/// </summary>
public static readonly Guid DatePickerGuid = new Guid(DatePicker);
/// <summary>
/// Guid for Dropdown as string
/// </summary>
public const string Dropdown = "0b6a45e7-44ba-430d-9da5-4e46060b9e03";
/// <summary>
/// Guid for Dropdown
/// </summary>
public static readonly Guid DropdownGuid = new Guid(Dropdown);
/// <summary>
/// Guid for Checkbox list as string
/// </summary>
public const string CheckboxList = "fbaf13a8-4036-41f2-93a3-974f678c312a";
/// <summary>
/// Guid for Checkbox list
/// </summary>
public static readonly Guid CheckboxListGuid = new Guid(CheckboxList);
/// <summary>
/// Guid for Checkbox as string
/// </summary>
public const string Checkbox = "92897bc6-a5f3-4ffe-ae27-f2e7e33dda49";
/// <summary>
/// Guid for Checkbox
/// </summary>
public static readonly Guid CheckboxGuid = new Guid(Checkbox);
/// <summary>
/// Guid for Numeric as string
/// </summary>
public const string Numeric = "2e6d3631-066e-44b8-aec4-96f09099b2b5";
/// <summary>
/// Guid for Dropdown
/// </summary>
public static readonly Guid NumericGuid = new Guid(Numeric);
/// <summary>
/// Guid for Richtext editor as string
/// </summary>
public const string RichtextEditor = "ca90c950-0aff-4e72-b976-a30b1ac57dad";
/// <summary>
/// Guid for Richtext editor
/// </summary>
public static readonly Guid RichtextEditorGuid = new Guid(RichtextEditor);
/// <summary>
/// Guid for Textstring as string
/// </summary>
public const string Textstring = "0cc0eba1-9960-42c9-bf9b-60e150b429ae";
/// <summary>
/// Guid for Textstring
/// </summary>
public static readonly Guid TextstringGuid = new Guid(Textstring);
/// <summary>
/// Guid for Textarea as string
/// </summary>
public const string Textarea = "c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3";
/// <summary>
/// Guid for Dropdown
/// </summary>
public static readonly Guid TextareaGuid = new Guid(Textarea);
/// <summary>
/// Guid for Upload as string
/// </summary>
public const string Upload = "84c6b441-31df-4ffe-b67e-67d5bc3ae65a";
/// <summary>
/// Guid for Upload
/// </summary>
public static readonly Guid UploadGuid = new Guid(Upload);
/// <summary>
/// Guid for Label as string
/// </summary>
public const string Label = "f0bc4bfb-b499-40d6-ba86-058885a5178c";
/// <summary>
/// Guid for Label
/// </summary>
public static readonly Guid LabelGuid = new Guid(Label);
}
}
}
@@ -447,11 +447,6 @@ namespace Umbraco.Core
/// </summary> /// </summary>
public const string NestedContentAlias = "Umbraco.NestedContent"; public const string NestedContentAlias = "Umbraco.NestedContent";
/// <summary>
/// Alias for the multi url picker editor.
/// </summary>
public const string MultiUrlPickerAlias = "Umbraco.MultiUrlPicker";
public static class PreValueKeys public static class PreValueKeys
{ {
/// <summary> /// <summary>
+1 -1
View File
@@ -19,7 +19,7 @@ namespace Umbraco.Core.FileResources {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Files { internal class Files {
+7 -23
View File
@@ -1,6 +1,4 @@
using Newtonsoft.Json; using System;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
@@ -295,12 +293,6 @@ namespace Umbraco.Core.IO
{ {
var property = GetProperty(content, propertyTypeAlias); var property = GetProperty(content, propertyTypeAlias);
var svalue = property.Value as string; var svalue = property.Value as string;
if (svalue != null && svalue.DetectIsJson())
{
// the property value is a JSON serialized image crop data set - grab the "src" property as the file source
var jObject = JsonConvert.DeserializeObject<JObject>(svalue);
svalue = jObject != null ? jObject.GetValueAsString("src") : svalue;
}
var oldpath = svalue == null ? null : GetRelativePath(svalue); var oldpath = svalue == null ? null : GetRelativePath(svalue);
var filepath = StoreFile(content, property.PropertyType, filename, filestream, oldpath); var filepath = StoreFile(content, property.PropertyType, filename, filestream, oldpath);
property.Value = GetUrl(filepath); property.Value = GetUrl(filepath);
@@ -365,8 +357,7 @@ namespace Umbraco.Core.IO
{ {
var jpgInfo = ImageFile.FromStream(stream); var jpgInfo = ImageFile.FromStream(stream);
if (jpgInfo != null if (jpgInfo.Format != ImageFileFormat.Unknown
&& jpgInfo.Format != ImageFileFormat.Unknown
&& jpgInfo.Properties.ContainsKey(ExifTag.PixelYDimension) && jpgInfo.Properties.ContainsKey(ExifTag.PixelYDimension)
&& jpgInfo.Properties.ContainsKey(ExifTag.PixelXDimension)) && jpgInfo.Properties.ContainsKey(ExifTag.PixelXDimension))
{ {
@@ -377,28 +368,21 @@ namespace Umbraco.Core.IO
return new Size(width, height); return new Size(width, height);
} }
} }
}
catch
{
//We will just swallow, just means we can't read exif data, we don't want to log an error either
}
//we have no choice but to try to read in via GDI //we have no choice but to try to read in via GDI
try
{
using (var image = Image.FromStream(stream)) using (var image = Image.FromStream(stream))
{ {
var fileWidth = image.Width; var fileWidth = image.Width;
var fileHeight = image.Height; var fileHeight = image.Height;
return new Size(fileWidth, fileHeight); return new Size(fileWidth, fileHeight);
} }
} }
catch catch (Exception)
{ {
//We will just swallow, just means we can't read via GDI, we don't want to log an error either //We will just swallow, just means we can't read exif data, we don't want to log an error either
return new Size(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize);
} }
return new Size(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize);
} }
#endregion #endregion
+4 -5
View File
@@ -118,9 +118,9 @@ namespace Umbraco.Core.Media.Exif
/// <param name="encoding">The encoding to be used for text metadata when the source encoding is unknown.</param> /// <param name="encoding">The encoding to be used for text metadata when the source encoding is unknown.</param>
/// <returns>The <see cref="ImageFile"/> created from the file.</returns> /// <returns>The <see cref="ImageFile"/> created from the file.</returns>
public static ImageFile FromStream(Stream stream, Encoding encoding) public static ImageFile FromStream(Stream stream, Encoding encoding)
{ {
// JPEG // JPEG
if (JPEGDetector.IsOfType(stream)) if(JPEGDetector.IsOfType(stream))
{ {
return new JPEGFile(stream, encoding); return new JPEGFile(stream, encoding);
} }
@@ -137,9 +137,8 @@ namespace Umbraco.Core.Media.Exif
return new SVGFile(stream); return new SVGFile(stream);
} }
// We don't know throw new NotValidImageFileException ();
return null; }
}
#endregion #endregion
} }
} }
@@ -7,7 +7,8 @@ namespace Umbraco.Core.Media.TypeDetector
public static bool IsOfType(Stream fileStream) public static bool IsOfType(Stream fileStream)
{ {
var header = GetFileHeader(fileStream); var header = GetFileHeader(fileStream);
return header != null && header[0] == 0xff && header[1] == 0xD8;
return header[0] == 0xff && header[1] == 0xD8;
} }
} }
} }
@@ -7,13 +7,9 @@ namespace Umbraco.Core.Media.TypeDetector
public static byte[] GetFileHeader(Stream fileStream) public static byte[] GetFileHeader(Stream fileStream)
{ {
fileStream.Seek(0, SeekOrigin.Begin); fileStream.Seek(0, SeekOrigin.Begin);
var header = new byte[8]; byte[] header = new byte[8];
fileStream.Seek(0, SeekOrigin.Begin); fileStream.Seek(0, SeekOrigin.Begin);
// Invalid header
if (fileStream.Read(header, 0, header.Length) != header.Length)
return null;
return header; return header;
} }
} }
@@ -7,17 +7,17 @@ namespace Umbraco.Core.Media.TypeDetector
{ {
public static bool IsOfType(Stream fileStream) public static bool IsOfType(Stream fileStream)
{ {
var tiffHeader = GetFileHeader(fileStream); string tiffHeader = GetFileHeader(fileStream);
return tiffHeader != null && tiffHeader == "MM\x00\x2a" || tiffHeader == "II\x2a\x00";
return tiffHeader == "MM\x00\x2a" || tiffHeader == "II\x2a\x00";
} }
public static string GetFileHeader(Stream fileStream) public static string GetFileHeader(Stream fileStream)
{ {
var header = RasterizedTypeDetector.GetFileHeader(fileStream); var header = RasterizedTypeDetector.GetFileHeader(fileStream);
if (header == null)
return null;
var tiffHeader = Encoding.ASCII.GetString(header, 0, 4); string tiffHeader = Encoding.ASCII.GetString(header, 0, 4);
return tiffHeader; return tiffHeader;
} }
} }
@@ -1,55 +0,0 @@
using System;
using System.Collections.Generic;
namespace Umbraco.Core.Models
{
internal static class DataTypeExtensions
{
private static readonly ISet<Guid> IdsOfBuildInDataTypes = new HashSet<Guid>()
{
Constants.DataTypes.ContentPickerGuid,
Constants.DataTypes.MemberPickerGuid,
Constants.DataTypes.MediaPickerGuid,
Constants.DataTypes.MultipleMediaPickerGuid,
Constants.DataTypes.RelatedLinksGuid,
Constants.DataTypes.MemberGuid,
Constants.DataTypes.ImageCropperGuid,
Constants.DataTypes.TagsGuid,
Constants.DataTypes.ListViewContentGuid,
Constants.DataTypes.ListViewMediaGuid,
Constants.DataTypes.ListViewMembersGuid,
Constants.DataTypes.DatePickerWithTimeGuid,
Constants.DataTypes.ApprovedColorGuid,
Constants.DataTypes.DropdownMultipleGuid,
Constants.DataTypes.RadioboxGuid,
Constants.DataTypes.DatePickerGuid,
Constants.DataTypes.DropdownGuid,
Constants.DataTypes.CheckboxListGuid,
Constants.DataTypes.CheckboxGuid,
Constants.DataTypes.NumericGuid,
Constants.DataTypes.RichtextEditorGuid,
Constants.DataTypes.TextstringGuid,
Constants.DataTypes.TextareaGuid,
Constants.DataTypes.UploadGuid,
Constants.DataTypes.LabelGuid,
};
/// <summary>
/// Returns true if this date type is build-in/default.
/// </summary>
/// <param name="dataType">The data type definition.</param>
/// <returns></returns>
public static bool IsBuildInDataType(this IDataTypeDefinition dataType)
{
return IsBuildInDataType(dataType.Key);
}
/// <summary>
/// Returns true if this date type is build-in/default.
/// </summary>
public static bool IsBuildInDataType(Guid key)
{
return IdsOfBuildInDataTypes.Contains(key);
}
}
}
@@ -25,8 +25,6 @@ namespace Umbraco.Core.Models.PublishedContent
{ {
Id = contentType.Id; Id = contentType.Id;
Alias = contentType.Alias; Alias = contentType.Alias;
Name = contentType.Name;
Description = contentType.Description;
_compositionAliases = new HashSet<string>(contentType.CompositionAliases(), StringComparer.InvariantCultureIgnoreCase); _compositionAliases = new HashSet<string>(contentType.CompositionAliases(), StringComparer.InvariantCultureIgnoreCase);
_propertyTypes = contentType.CompositionPropertyTypes _propertyTypes = contentType.CompositionPropertyTypes
.Select(x => new PublishedPropertyType(this, x)) .Select(x => new PublishedPropertyType(this, x))
@@ -35,12 +33,10 @@ namespace Umbraco.Core.Models.PublishedContent
} }
// internal so it can be used for unit tests // internal so it can be used for unit tests
internal PublishedContentType(int id, string alias, string name, string description, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes) internal PublishedContentType(int id, string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes)
{ {
Id = id; Id = id;
Alias = alias; Alias = alias;
Name = name;
Description = description;
_compositionAliases = new HashSet<string>(compositionAliases, StringComparer.InvariantCultureIgnoreCase); _compositionAliases = new HashSet<string>(compositionAliases, StringComparer.InvariantCultureIgnoreCase);
_propertyTypes = propertyTypes.ToArray(); _propertyTypes = propertyTypes.ToArray();
foreach (var propertyType in _propertyTypes) foreach (var propertyType in _propertyTypes)
@@ -50,7 +46,7 @@ namespace Umbraco.Core.Models.PublishedContent
// create detached content type - ie does not match anything in the DB // create detached content type - ie does not match anything in the DB
internal PublishedContentType(string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes) internal PublishedContentType(string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes)
: this(0, alias, string.Empty, string.Empty, compositionAliases, propertyTypes) : this(0, alias, compositionAliases, propertyTypes)
{ } { }
private void InitializeIndexes() private void InitializeIndexes()
@@ -67,8 +63,6 @@ namespace Umbraco.Core.Models.PublishedContent
public int Id { get; private set; } public int Id { get; private set; }
public string Alias { get; private set; } public string Alias { get; private set; }
public string Name { get; private set; }
public string Description { get; private set; }
public HashSet<string> CompositionAliases { get { return _compositionAliases; } } public HashSet<string> CompositionAliases { get { return _compositionAliases; } }
#endregion #endregion
+37
View File
@@ -225,5 +225,42 @@ namespace Umbraco.Core.Models
return clone; return clone;
} }
/// <summary>
/// A struction that can be contained in the additional data of an UmbracoEntity representing
/// a user defined property
/// </summary>
public class EntityProperty : IDeepCloneable
{
public string PropertyEditorAlias { get; set; }
public object Value { get; set; }
public object DeepClone()
{
//Memberwise clone on Entity will work since it doesn't have any deep elements
// for any sub class this will work for standard properties as well that aren't complex object's themselves.
var clone = MemberwiseClone();
return clone;
}
protected bool Equals(EntityProperty other)
{
return PropertyEditorAlias.Equals(other.PropertyEditorAlias) && string.Equals(Value, other.Value);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((EntityProperty) obj);
}
public override int GetHashCode()
{
unchecked
{
return (PropertyEditorAlias.GetHashCode() * 397) ^ (Value != null ? Value.GetHashCode() : 0);
}
}
}
} }
} }
+13
View File
@@ -195,6 +195,19 @@ namespace Umbraco.Core.Models
return startNodeIds.Any(x => formattedPath.Contains(string.Concat(",", x, ","))); return startNodeIds.Any(x => formattedPath.Contains(string.Concat(",", x, ",")));
} }
internal static bool IsInBranchOfStartNode(this IUser user, IUmbracoEntity entity, IEntityService entityService, int recycleBinId, out bool hasPathAccess)
{
switch (recycleBinId)
{
case Constants.System.RecycleBinMedia:
return IsInBranchOfStartNode(entity.Path, user.CalculateMediaStartNodeIds(entityService), user.GetMediaStartNodePaths(entityService), out hasPathAccess);
case Constants.System.RecycleBinContent:
return IsInBranchOfStartNode(entity.Path, user.CalculateContentStartNodeIds(entityService), user.GetContentStartNodePaths(entityService), out hasPathAccess);
default:
throw new NotSupportedException("Path access is only determined on content or media");
}
}
internal static bool IsInBranchOfStartNode(string path, int[] startNodeIds, string[] startNodePaths, out bool hasPathAccess) internal static bool IsInBranchOfStartNode(string path, int[] startNodeIds, string[] startNodePaths, out bool hasPathAccess)
{ {
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", "path"); if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", "path");
@@ -12,18 +12,14 @@ namespace Umbraco.Core.Persistence.Factories
{ {
internal class UmbracoEntityFactory internal class UmbracoEntityFactory
{ {
private static readonly Lazy<string[]> EntityProperties = new Lazy<string[]>(() => typeof(IUmbracoEntity).GetPublicProperties().Select(x => x.Name).ToArray());
/// <summary>
/// Figure out what extra properties we have that are not on the IUmbracoEntity and add them to additional data
/// </summary>
/// <param name="entity"></param>
/// <param name="originalEntityProperties"></param>
internal void AddAdditionalData(UmbracoEntity entity, IDictionary<string, object> originalEntityProperties) internal void AddAdditionalData(UmbracoEntity entity, IDictionary<string, object> originalEntityProperties)
{ {
var entityProps = typeof(IUmbracoEntity).GetPublicProperties().Select(x => x.Name).ToArray();
//figure out what extra properties we have that are not on the IUmbracoEntity and add them to additional data
foreach (var k in originalEntityProperties.Keys foreach (var k in originalEntityProperties.Keys
.Select(x => new { orig = x, title = x.ToCleanString(CleanStringType.PascalCase | CleanStringType.Ascii | CleanStringType.ConvertCase) }) .Select(x => new { orig = x, title = x.ToCleanString(CleanStringType.PascalCase | CleanStringType.Ascii | CleanStringType.ConvertCase) })
.Where(x => EntityProperties.Value.InvariantContains(x.title) == false)) .Where(x => entityProps.InvariantContains(x.title) == false))
{ {
entity.AdditionalData[k.title] = originalEntityProperties[k.orig]; entity.AdditionalData[k.title] = originalEntityProperties[k.orig];
} }
@@ -116,36 +116,36 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -1, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1", SortOrder = 0, UniqueId = new Guid("916724a5-173d-4619-b97e-b9de133dd6f5"), Text = "SYSTEM DATA: umbraco master root", NodeObjectType = new Guid(Constants.ObjectTypes.SystemRoot), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -1, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1", SortOrder = 0, UniqueId = new Guid("916724a5-173d-4619-b97e-b9de133dd6f5"), Text = "SYSTEM DATA: umbraco master root", NodeObjectType = new Guid(Constants.ObjectTypes.SystemRoot), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -20, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-20", SortOrder = 0, UniqueId = new Guid("0F582A79-1E41-4CF0-BFA0-76340651891A"), Text = "Recycle Bin", NodeObjectType = new Guid(Constants.ObjectTypes.ContentRecycleBin), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -20, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-20", SortOrder = 0, UniqueId = new Guid("0F582A79-1E41-4CF0-BFA0-76340651891A"), Text = "Recycle Bin", NodeObjectType = new Guid(Constants.ObjectTypes.ContentRecycleBin), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -21, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-21", SortOrder = 0, UniqueId = new Guid("BF7C7CBC-952F-4518-97A2-69E9C7B33842"), Text = "Recycle Bin", NodeObjectType = new Guid(Constants.ObjectTypes.MediaRecycleBin), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -21, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-21", SortOrder = 0, UniqueId = new Guid("BF7C7CBC-952F-4518-97A2-69E9C7B33842"), Text = "Recycle Bin", NodeObjectType = new Guid(Constants.ObjectTypes.MediaRecycleBin), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -92, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-92", SortOrder = 35, UniqueId = Constants.DataTypes.LabelGuid, Text = "Label", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -92, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-92", SortOrder = 35, UniqueId = new Guid("f0bc4bfb-b499-40d6-ba86-058885a5178c"), Text = "Label", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -90, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-90", SortOrder = 34, UniqueId = Constants.DataTypes.UploadGuid, Text = "Upload", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -90, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-90", SortOrder = 34, UniqueId = new Guid("84c6b441-31df-4ffe-b67e-67d5bc3ae65a"), Text = "Upload", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -89, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-89", SortOrder = 33, UniqueId = Constants.DataTypes.TextareaGuid, Text = "Textarea", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -89, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-89", SortOrder = 33, UniqueId = new Guid("c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3"), Text = "Textarea", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -88, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-88", SortOrder = 32, UniqueId = Constants.DataTypes.TextstringGuid, Text = "Textstring", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -88, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-88", SortOrder = 32, UniqueId = new Guid("0cc0eba1-9960-42c9-bf9b-60e150b429ae"), Text = "Textstring", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -87, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-87", SortOrder = 4, UniqueId = Constants.DataTypes.RichtextEditorGuid, Text = "Richtext editor", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -87, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-87", SortOrder = 4, UniqueId = new Guid("ca90c950-0aff-4e72-b976-a30b1ac57dad"), Text = "Richtext editor", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -51, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-51", SortOrder = 2, UniqueId = Constants.DataTypes.NumericGuid, Text = "Numeric", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -51, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-51", SortOrder = 2, UniqueId = new Guid("2e6d3631-066e-44b8-aec4-96f09099b2b5"), Text = "Numeric", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = Constants.DataTypes.CheckboxGuid, Text = "Checkbox", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = new Guid("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"), Text = "Checkbox", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -43, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-43", SortOrder = 2, UniqueId = Constants.DataTypes.CheckboxListGuid, Text = "Checkbox list", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -43, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-43", SortOrder = 2, UniqueId = new Guid("fbaf13a8-4036-41f2-93a3-974f678c312a"), Text = "Checkbox list", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -42, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-42", SortOrder = 2, UniqueId = Constants.DataTypes.DropdownGuid, Text = "Dropdown", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -42, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-42", SortOrder = 2, UniqueId = new Guid("0b6a45e7-44ba-430d-9da5-4e46060b9e03"), Text = "Dropdown", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -41, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-41", SortOrder = 2, UniqueId = Constants.DataTypes.DatePickerGuid, Text = "Date Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -41, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-41", SortOrder = 2, UniqueId = new Guid("5046194e-4237-453c-a547-15db3a07c4e1"), Text = "Date Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -40, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-40", SortOrder = 2, UniqueId = Constants.DataTypes.RadioboxGuid, Text = "Radiobox", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -40, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-40", SortOrder = 2, UniqueId = new Guid("bb5f57c9-ce2b-4bb9-b697-4caca783a805"), Text = "Radiobox", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -39, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-39", SortOrder = 2, UniqueId = Constants.DataTypes.DropdownMultipleGuid, Text = "Dropdown multiple", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -39, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-39", SortOrder = 2, UniqueId = new Guid("f38f0ac7-1d27-439c-9f3f-089cd8825a53"), Text = "Dropdown multiple", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -37, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-37", SortOrder = 2, UniqueId = Constants.DataTypes.ApprovedColorGuid, Text = "Approved Color", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -37, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-37", SortOrder = 2, UniqueId = new Guid("0225af17-b302-49cb-9176-b9f35cab9c17"), Text = "Approved Color", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -36, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-36", SortOrder = 2, UniqueId = Constants.DataTypes.DatePickerWithTimeGuid, Text = "Date Picker with time", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = -36, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-36", SortOrder = 2, UniqueId = new Guid("e4d66c0f-b935-4200-81f0-025f7256b89a"), Text = "Date Picker with time", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultContentListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-95", SortOrder = 2, UniqueId = Constants.DataTypes.ListViewContentGuid, Text = Constants.Conventions.DataTypes.ListViewPrefix + "Content", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultContentListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-95", SortOrder = 2, UniqueId = new Guid("C0808DD3-8133-4E4B-8CE8-E2BEA84A96A4"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Content", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultMediaListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-96", SortOrder = 2, UniqueId = Constants.DataTypes.ListViewMediaGuid, Text = Constants.Conventions.DataTypes.ListViewPrefix + "Media", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultMediaListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-96", SortOrder = 2, UniqueId = new Guid("3A0156C4-3B8C-4803-BDC1-6871FAA83FFF"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Media", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultMembersListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-97", SortOrder = 2, UniqueId = Constants.DataTypes.ListViewMembersGuid, Text = Constants.Conventions.DataTypes.ListViewPrefix + "Members", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.DefaultMembersListViewDataTypeId, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-97", SortOrder = 2, UniqueId = new Guid("AA2C52A0-CE87-4E65-A47C-7DF09358585D"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Members", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1031, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1031", SortOrder = 2, UniqueId = new Guid("f38bd2d7-65d0-48e6-95dc-87ce06ec2d3d"), Text = Constants.Conventions.MediaTypes.Folder, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1031, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1031", SortOrder = 2, UniqueId = new Guid("f38bd2d7-65d0-48e6-95dc-87ce06ec2d3d"), Text = Constants.Conventions.MediaTypes.Folder, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1032, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1032", SortOrder = 2, UniqueId = new Guid("cc07b313-0843-4aa8-bbda-871c8da728c8"), Text = Constants.Conventions.MediaTypes.Image, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1032, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1032", SortOrder = 2, UniqueId = new Guid("cc07b313-0843-4aa8-bbda-871c8da728c8"), Text = Constants.Conventions.MediaTypes.Image, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1033, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1033", SortOrder = 2, UniqueId = new Guid("4c52d8ab-54e6-40cd-999c-7a5f24903e4d"), Text = Constants.Conventions.MediaTypes.File, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1033, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1033", SortOrder = 2, UniqueId = new Guid("4c52d8ab-54e6-40cd-999c-7a5f24903e4d"), Text = Constants.Conventions.MediaTypes.File, NodeObjectType = new Guid(Constants.ObjectTypes.MediaType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = Constants.DataTypes.TagsGuid, Text = "Tags", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = new Guid("b6b73142-b9c1-4bf8-a16d-e1c23320b549"), Text = "Tags", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = Constants.DataTypes.ImageCropperGuid, Text = "Image Cropper", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), Text = "Image Cropper", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = Constants.DataTypes.MemberGuid, Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = new Guid(Constants.ObjectTypes.MemberType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = new Guid(Constants.ObjectTypes.MemberType), CreateDate = DateTime.Now });
//New UDI pickers with newer Ids //New UDI pickers with newer Ids
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1046, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1046", SortOrder = 2, UniqueId = Constants.DataTypes.ContentPickerGuid, Text = "Content Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1046, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1046", SortOrder = 2, UniqueId = new Guid("FD1E0DA5-5606-4862-B679-5D0CF3A52A59"), Text = "Content Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1047, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1047", SortOrder = 2, UniqueId = Constants.DataTypes.MemberPickerGuid, Text = "Member Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1047, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1047", SortOrder = 2, UniqueId = new Guid("1EA2E01F-EBD8-4CE1-8D71-6B1149E63548"), Text = "Member Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = Constants.DataTypes.MediaPickerGuid, Text = "Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = new Guid("135D60E0-64D9-49ED-AB08-893C9BA44AE5"), Text = "Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = Constants.DataTypes.MultipleMediaPickerGuid, Text = "Multiple Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = new Guid("9DBBCBBB-2327-434A-B355-AF1B84E5010A"), Text = "Multiple Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = Constants.DataTypes.RelatedLinksGuid, Text = "Related Links", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now }); _database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Related Links", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
} }
private void CreateUmbracoLockData() private void CreateUmbracoLockData()
@@ -1,36 +0,0 @@
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFourteenZero
{
/// <summary>
/// Migrates member group picker properties from NVarchar to NText. See https://github.com/umbraco/Umbraco-CMS/issues/3268.
/// </summary>
[Migration("7.14.0", 1, Constants.System.UmbracoMigrationName)]
public class UpdateMemberGroupPickerData : MigrationBase
{
public UpdateMemberGroupPickerData(ISqlSyntaxProvider sqlSyntax, ILogger logger) : base(sqlSyntax, logger)
{
}
public override void Up()
{
// move the data for all member group properties from the NVarchar to the NText column and clear the NVarchar column
Execute.Sql($@"UPDATE cmsPropertyData SET dataNtext = dataNvarchar, dataNvarchar = NULL
WHERE dataNtext IS NULL AND id IN (
SELECT id FROM cmsPropertyData WHERE propertyTypeId in (
SELECT id from cmsPropertyType where dataTypeID IN (
SELECT nodeId FROM cmsDataType WHERE propertyEditorAlias = '{Constants.PropertyEditors.MemberGroupPickerAlias}'
)
)
)");
// ensure that all exising member group properties are defined as NText
Execute.Sql($"UPDATE cmsDataType SET dbType = 'Ntext' WHERE propertyEditorAlias = '{Constants.PropertyEditors.MemberGroupPickerAlias}'");
}
public override void Down()
{
}
}
}
@@ -835,62 +835,6 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
} }
public XmlDocument BuildPreviewXmlCache()
{
var xmlDoc = new XmlDocument();
var doctype = xmlDoc.CreateDocumentType("root", null, null,
ApplicationContext.Current.Services.ContentTypeService.GetContentTypesDtd());
xmlDoc.AppendChild(doctype);
var parent = xmlDoc.CreateElement("root");
var pIdAtt = xmlDoc.CreateAttribute("id");
pIdAtt.Value = "-1";
parent.Attributes.Append(pIdAtt);
xmlDoc.AppendChild(parent);
//Ensure that only nodes that have published versions are selected
var sql = string.Format(@"select umbracoNode.id, umbracoNode.parentID, umbracoNode.sortOrder, cmsPreviewXml.{0}, umbracoNode.{1} from umbracoNode
inner join cmsPreviewXml on cmsPreviewXml.nodeId = umbracoNode.id and umbracoNode.nodeObjectType = @type
inner join cmsDocument on cmsPreviewXml.versionId = cmsDocument.versionId and cmsDocument.newest=1
where umbracoNode.trashed = 0
order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
SqlSyntax.GetQuotedColumnName("xml"),
SqlSyntax.GetQuotedColumnName("level"),
SqlSyntax.GetQuotedColumnName("level"));
XmlElement last = null;
//NOTE: Query creates a reader - does not load all into memory
foreach (var row in Database.Query<dynamic>(sql, new { type = NodeObjectTypeId }))
{
string parentId = ((int)row.parentID).ToInvariantString();
string xml = row.xml;
int sortOrder = row.sortOrder;
//if the parentid is changing
if (last != null && last.GetAttribute("parentID") != parentId)
{
parent = xmlDoc.GetElementById(parentId);
if (parent == null)
{
//Need to short circuit here, if the parent is not there it means that the parent is unpublished
// and therefore the child is not published either so cannot be included in the xml cache
continue;
}
}
var xmlDocFragment = xmlDoc.CreateDocumentFragment();
xmlDocFragment.InnerXml = xml;
last = (XmlElement)parent.AppendChild(xmlDocFragment);
// fix sortOrder - see notes in UpdateSortOrder
last.Attributes["sortOrder"].Value = sortOrder.ToInvariantString();
}
return xmlDoc;
}
public int CountPublished(string contentTypeAlias = null) public int CountPublished(string contentTypeAlias = null)
{ {
if (contentTypeAlias.IsNullOrWhiteSpace()) if (contentTypeAlias.IsNullOrWhiteSpace())
@@ -20,22 +20,27 @@ namespace Umbraco.Core.Persistence.Repositories
/// </remarks> /// </remarks>
internal class EntityRepository : DisposableObjectSlim, IEntityRepository internal class EntityRepository : DisposableObjectSlim, IEntityRepository
{ {
private readonly IDatabaseUnitOfWork _work;
public EntityRepository(IDatabaseUnitOfWork work) public EntityRepository(IDatabaseUnitOfWork work)
{ {
UnitOfWork = work; _work = work;
} }
/// <summary> /// <summary>
/// Returns the Unit of Work added to the repository /// Returns the Unit of Work added to the repository
/// </summary> /// </summary>
protected internal IDatabaseUnitOfWork UnitOfWork { get; } protected internal IDatabaseUnitOfWork UnitOfWork
{
get { return _work; }
}
/// <summary> /// <summary>
/// Internal for testing purposes /// Internal for testing purposes
/// </summary> /// </summary>
internal Guid UnitKey internal Guid UnitKey
{ {
get { return (Guid)UnitOfWork.Key; } get { return (Guid)_work.Key; }
} }
#region Query Methods #region Query Methods
@@ -64,8 +69,75 @@ namespace Umbraco.Core.Persistence.Repositories
IEnumerable<IUmbracoEntity> result; IEnumerable<IUmbracoEntity> result;
var pagedResult = UnitOfWork.Database.Page<dynamic>(pageIndex + 1, pageSize, pagedSql); if (isMedia)
result = pagedResult.Items.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList(); {
//Treat media differently for now, as an Entity it will be returned with ALL of it's properties in the AdditionalData bag!
var pagedResult = _work.Database.Page<dynamic>(pageIndex + 1, pageSize, pagedSql);
var ids = pagedResult.Items.Select(x => (int) x.id).InGroupsOf(2000);
var entities = pagedResult.Items.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList();
//Now we need to merge in the property data since we need paging and we can't do this the way that the big media query was working before
foreach (var idGroup in ids)
{
var propSql = GetPropertySql(Constants.ObjectTypes.Media)
.Where("contentNodeId IN (@ids)", new { ids = idGroup });
propSql = (orderDirection == Direction.Descending) ? propSql.OrderByDescending("contentNodeId") : propSql.OrderBy("contentNodeId");
//This does NOT fetch all data into memory in a list, this will read
// over the records as a data reader, this is much better for performance and memory,
// but it means that during the reading of this data set, nothing else can be read
// from SQL server otherwise we'll get an exception.
var allPropertyData = _work.Database.Query<dynamic>(propSql);
//keep track of the current property data item being enumerated
var propertyDataSetEnumerator = allPropertyData.GetEnumerator();
var hasCurrent = false; // initially there is no enumerator.Current
try
{
//This must be sorted by node id (which is done by SQL) because this is how we are sorting the query to lookup property types above,
// which allows us to more efficiently iterate over the large data set of property values.
foreach (var entity in entities)
{
// assemble the dtos for this def
// use the available enumerator.Current if any else move to next
while (hasCurrent || propertyDataSetEnumerator.MoveNext())
{
if (propertyDataSetEnumerator.Current.contentNodeId == entity.Id)
{
hasCurrent = false; // enumerator.Current is not available
//the property data goes into the additional data
entity.AdditionalData[propertyDataSetEnumerator.Current.propertyTypeAlias] = new UmbracoEntity.EntityProperty
{
PropertyEditorAlias = propertyDataSetEnumerator.Current.propertyEditorAlias,
Value = StringExtensions.IsNullOrWhiteSpace(propertyDataSetEnumerator.Current.dataNtext)
? propertyDataSetEnumerator.Current.dataNvarchar
: StringExtensions.ConvertToJsonIfPossible(propertyDataSetEnumerator.Current.dataNtext)
};
}
else
{
hasCurrent = true; // enumerator.Current is available for another def
break; // no more propertyDataDto for this def
}
}
}
}
finally
{
propertyDataSetEnumerator.Dispose();
}
}
result = entities;
}
else
{
var pagedResult = _work.Database.Page<dynamic>(pageIndex + 1, pageSize, pagedSql);
result = pagedResult.Items.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList();
}
//The total items from the PetaPoco page query will be wrong due to the Outer join used on parent, depending on the search this will //The total items from the PetaPoco page query will be wrong due to the Outer join used on parent, depending on the search this will
//return duplicate results when the COUNT is used in conjuction with it, so we need to get the total on our own. //return duplicate results when the COUNT is used in conjuction with it, so we need to get the total on our own.
@@ -87,7 +159,7 @@ namespace Umbraco.Core.Persistence.Repositories
var translatorCount = new SqlTranslator<IUmbracoEntity>(sqlCountClause, query); var translatorCount = new SqlTranslator<IUmbracoEntity>(sqlCountClause, query);
var countSql = translatorCount.Translate(); var countSql = translatorCount.Translate();
totalRecords = UnitOfWork.Database.ExecuteScalar<int>(countSql); totalRecords = _work.Database.ExecuteScalar<int>(countSql);
return result; return result;
} }
@@ -95,7 +167,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IUmbracoEntity GetByKey(Guid key) public IUmbracoEntity GetByKey(Guid key)
{ {
var sql = GetBaseWhere(GetBase, false, false, key); var sql = GetBaseWhere(GetBase, false, false, key);
var nodeDto = UnitOfWork.Database.FirstOrDefault<dynamic>(sql); var nodeDto = _work.Database.FirstOrDefault<dynamic>(sql);
if (nodeDto == null) if (nodeDto == null)
return null; return null;
@@ -114,15 +186,27 @@ namespace Umbraco.Core.Persistence.Repositories
var factory = new UmbracoEntityFactory(); var factory = new UmbracoEntityFactory();
//query = read forward data reader, do not load everything into mem if (isMedia)
var dtos = UnitOfWork.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{ {
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false)); //for now treat media differently and include all property data too
var entities = _work.Database.Fetch<dynamic, UmbracoPropertyDto, UmbracoEntity>(
new UmbracoEntityRelator().Map, sql);
return entities.FirstOrDefault();
}
else
{
//query = read forward data reader, do not load everything into mem
var dtos = _work.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false));
}
var found = collection.FirstOrDefault();
return found != null ? found.BuildFromDynamic() : null;
} }
var found = collection.FirstOrDefault();
return found != null ? found.BuildFromDynamic() : null;
} }
@@ -130,7 +214,7 @@ namespace Umbraco.Core.Persistence.Repositories
public virtual IUmbracoEntity Get(int id) public virtual IUmbracoEntity Get(int id)
{ {
var sql = GetBaseWhere(GetBase, false, false, id); var sql = GetBaseWhere(GetBase, false, false, id);
var nodeDto = UnitOfWork.Database.FirstOrDefault<dynamic>(sql); var nodeDto = _work.Database.FirstOrDefault<dynamic>(sql);
if (nodeDto == null) if (nodeDto == null)
return null; return null;
@@ -149,16 +233,26 @@ namespace Umbraco.Core.Persistence.Repositories
var factory = new UmbracoEntityFactory(); var factory = new UmbracoEntityFactory();
//query = read forward data reader, do not load everything into mem if (isMedia)
var dtos = UnitOfWork.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{ {
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false)); //for now treat media differently and include all property data too
} var entities = _work.Database.Fetch<dynamic, UmbracoPropertyDto, UmbracoEntity>(
var found = collection.FirstOrDefault(); new UmbracoEntityRelator().Map, sql);
return found != null ? found.BuildFromDynamic() : null;
return entities.FirstOrDefault();
}
else
{
//query = read forward data reader, do not load everything into mem
var dtos = _work.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false));
}
var found = collection.FirstOrDefault();
return found != null ? found.BuildFromDynamic() : null;
}
} }
public virtual IEnumerable<IUmbracoEntity> GetAll(Guid objectTypeId, params int[] ids) public virtual IEnumerable<IUmbracoEntity> GetAll(Guid objectTypeId, params int[] ids)
@@ -183,14 +277,24 @@ namespace Umbraco.Core.Persistence.Repositories
var factory = new UmbracoEntityFactory(); var factory = new UmbracoEntityFactory();
//query = read forward data reader, do not load everything into mem if (isMedia)
var dtos = UnitOfWork.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{ {
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, isMedia)); //for now treat media differently and include all property data too
var entities = _work.Database.Fetch<dynamic, UmbracoPropertyDto, UmbracoEntity>(
new UmbracoEntityRelator().Map, sql);
return entities;
}
else
{
//query = read forward data reader, do not load everything into mem
var dtos = _work.Database.Query<dynamic>(sql);
var collection = new EntityDefinitionCollection();
foreach (var dto in dtos)
{
collection.AddOrUpdate(new EntityDefinition(factory, dto, isContent, false));
}
return collection.Select(x => x.BuildFromDynamic()).ToList();
} }
return collection.Select(x => x.BuildFromDynamic()).ToList();
} }
public virtual IEnumerable<EntityPath> GetAllPaths(Guid objectTypeId, params int[] ids) public virtual IEnumerable<EntityPath> GetAllPaths(Guid objectTypeId, params int[] ids)
@@ -211,7 +315,7 @@ namespace Umbraco.Core.Persistence.Repositories
{ {
var sql = new Sql("SELECT id, path FROM umbracoNode WHERE umbracoNode.nodeObjectType=@type", new { type = objectTypeId }); var sql = new Sql("SELECT id, path FROM umbracoNode WHERE umbracoNode.nodeObjectType=@type", new { type = objectTypeId });
if (filter != null) filter(sql); if (filter != null) filter(sql);
return UnitOfWork.Database.Fetch<EntityPath>(sql); return _work.Database.Fetch<EntityPath>(sql);
} }
public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> query) public virtual IEnumerable<IUmbracoEntity> GetByQuery(IQuery<IUmbracoEntity> query)
@@ -220,7 +324,7 @@ namespace Umbraco.Core.Persistence.Repositories
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query); var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
var sql = translator.Translate().Append(GetGroupBy(false, false)); var sql = translator.Translate().Append(GetGroupBy(false, false));
var dtos = UnitOfWork.Database.Fetch<dynamic>(sql); var dtos = _work.Database.Fetch<dynamic>(sql);
var factory = new UmbracoEntityFactory(); var factory = new UmbracoEntityFactory();
var list = dtos.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList(); var list = dtos.Select(factory.BuildEntityFromDynamic).Cast<IUmbracoEntity>().ToList();
@@ -234,6 +338,10 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="query"></param> /// <param name="query"></param>
/// <param name="objectTypeId"></param> /// <param name="objectTypeId"></param>
/// <returns></returns> /// <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; var isContent = objectTypeId == Constants.ObjectTypes.DocumentGuid || objectTypeId == Constants.ObjectTypes.DocumentBlueprintGuid;
@@ -244,10 +352,53 @@ namespace Umbraco.Core.Persistence.Repositories
var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query); var translator = new SqlTranslator<IUmbracoEntity>(sqlClause, query);
var entitySql = translator.Translate(); var entitySql = translator.Translate();
return GetByQueryInternal(entitySql, isContent, isMedia); var factory = new UmbracoEntityFactory();
if (isMedia)
{
var wheres = query.GetWhereClauses().ToArray();
var mediaSql = GetFullSqlForMedia(entitySql.Append(GetGroupBy(isContent, true, false)), sql =>
{
//adds the additional filters
foreach (var whereClause in wheres)
{
sql.Where(whereClause.Item1, whereClause.Item2);
}
});
//for now treat media differently and include all property data too
var entities = _work.Database.Fetch<dynamic, UmbracoPropertyDto, UmbracoEntity>(
new UmbracoEntityRelator().Map, mediaSql);
return entities;
}
else
{
return GetByQueryInternal(entitySql, isContent, isMedia);
}
} }
private IEnumerable<IUmbracoEntity> GetByQueryInternal(Sql entitySql, bool isContent, bool isMedia) /// <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(); var factory = new UmbracoEntityFactory();
@@ -255,7 +406,7 @@ namespace Umbraco.Core.Persistence.Repositories
var finalSql = entitySql.Append(GetGroupBy(isContent, isMedia)); var finalSql = entitySql.Append(GetGroupBy(isContent, isMedia));
//query = read forward data reader, do not load everything into mem //query = read forward data reader, do not load everything into mem
var dtos = UnitOfWork.Database.Query<dynamic>(finalSql); var dtos = _work.Database.Query<dynamic>(finalSql);
var collection = new EntityDefinitionCollection(); var collection = new EntityDefinitionCollection();
foreach (var dto in dtos) foreach (var dto in dtos)
{ {
@@ -275,7 +426,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false)); if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false));
return entitySql.Append(GetGroupBy(isContent, true, false)); return GetFullSqlForMedia(entitySql.Append(GetGroupBy(isContent, true, false)));
} }
protected Sql GetFullSqlForEntityType(int id, bool isContent, bool isMedia, Guid objectTypeId) protected Sql GetFullSqlForEntityType(int id, bool isContent, bool isMedia, Guid objectTypeId)
@@ -284,7 +435,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false)); if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false));
return entitySql.Append(GetGroupBy(isContent, true, false)); return GetFullSqlForMedia(entitySql.Append(GetGroupBy(isContent, true, false)));
} }
protected Sql GetFullSqlForEntityType(bool isContent, bool isMedia, Guid objectTypeId, Action<Sql> filter) protected Sql GetFullSqlForEntityType(bool isContent, bool isMedia, Guid objectTypeId, Action<Sql> filter)
@@ -293,7 +444,48 @@ namespace Umbraco.Core.Persistence.Repositories
if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false)); if (isMedia == false) return entitySql.Append(GetGroupBy(isContent, false));
return entitySql.Append(GetGroupBy(isContent, true, false)); return GetFullSqlForMedia(entitySql.Append(GetGroupBy(isContent, true, false)), filter);
}
private Sql GetPropertySql(string nodeObjectType)
{
var sql = new Sql()
.Select("contentNodeId, versionId, dataNvarchar, dataNtext, propertyEditorAlias, alias as propertyTypeAlias")
.From<PropertyDataDto>()
.InnerJoin<NodeDto>()
.On<PropertyDataDto, NodeDto>(dto => dto.NodeId, dto => dto.NodeId)
.InnerJoin<PropertyTypeDto>()
.On<PropertyTypeDto, PropertyDataDto>(dto => dto.Id, dto => dto.PropertyTypeId)
.InnerJoin<DataTypeDto>()
.On<PropertyTypeDto, DataTypeDto>(dto => dto.DataTypeId, dto => dto.DataTypeId)
.Where("umbracoNode.nodeObjectType = @nodeObjectType", new { nodeObjectType = nodeObjectType });
return sql;
}
private Sql GetFullSqlForMedia(Sql entitySql, Action<Sql> filter = null)
{
//this will add any dataNvarchar property to the output which can be added to the additional properties
var joinSql = GetPropertySql(Constants.ObjectTypes.Media);
if (filter != null)
{
filter(joinSql);
}
//We're going to create a query to query against the entity SQL
// because we cannot group by nText columns and we have a COUNT in the entitySql we cannot simply left join
// the entitySql query, we have to join the wrapped query to get the ntext in the result
var wrappedSql = new Sql("SELECT * FROM (")
.Append(entitySql)
.Append(new Sql(") tmpTbl LEFT JOIN ("))
.Append(joinSql)
.Append(new Sql(") as property ON id = property.contentNodeId"))
.OrderBy("sortOrder, id");
return wrappedSql;
} }
protected virtual Sql GetBase(bool isContent, bool isMedia, Action<Sql> customFilter) protected virtual Sql GetBase(bool isContent, bool isMedia, Action<Sql> customFilter)
@@ -341,11 +533,6 @@ namespace Umbraco.Core.Persistence.Repositories
columns.Add("contenttype.thumbnail"); columns.Add("contenttype.thumbnail");
columns.Add("contenttype.isContainer"); columns.Add("contenttype.isContainer");
} }
if (isMedia)
{
columns.Add("media.mediaPath");
}
} }
//Creates an SQL query to return a single row for the entity //Creates an SQL query to return a single row for the entity
@@ -368,16 +555,9 @@ namespace Umbraco.Core.Persistence.Repositories
.On("umbracoNode.id = published.nodeId"); .On("umbracoNode.id = published.nodeId");
} }
if (isMedia)
{
entitySql.LeftJoin("cmsMedia media").On("media.nodeId = umbracoNode.id");
}
entitySql.LeftJoin("cmsContentType contenttype").On("contenttype.nodeId = content.contentType"); entitySql.LeftJoin("cmsContentType contenttype").On("contenttype.nodeId = content.contentType");
} }
if (isCount == false) if (isCount == false)
{ {
entitySql.LeftJoin("umbracoNode parent").On("parent.parentID = umbracoNode.id"); entitySql.LeftJoin("umbracoNode parent").On("parent.parentID = umbracoNode.id");
@@ -487,12 +667,6 @@ namespace Umbraco.Core.Persistence.Repositories
columns.Add("document.versionId"); columns.Add("document.versionId");
columns.Add("contentversion.id"); columns.Add("contentversion.id");
} }
if (isMedia)
{
columns.Add("media.mediaPath");
}
columns.Add("contenttype.alias"); columns.Add("contenttype.alias");
columns.Add("contenttype.icon"); columns.Add("contenttype.icon");
columns.Add("contenttype.thumbnail"); columns.Add("contenttype.thumbnail");
@@ -526,17 +700,99 @@ namespace Umbraco.Core.Persistence.Repositories
public bool Exists(Guid key) public bool Exists(Guid key)
{ {
var sql = new Sql().Select("COUNT(*)").From("umbracoNode").Where("uniqueID=@uniqueID", new {uniqueID = key}); var sql = new Sql().Select("COUNT(*)").From("umbracoNode").Where("uniqueID=@uniqueID", new {uniqueID = key});
return UnitOfWork.Database.ExecuteScalar<int>(sql) > 0; return _work.Database.ExecuteScalar<int>(sql) > 0;
} }
public bool Exists(int id) public bool Exists(int id)
{ {
var sql = new Sql().Select("COUNT(*)").From("umbracoNode").Where("id=@id", new { id = id }); var sql = new Sql().Select("COUNT(*)").From("umbracoNode").Where("id=@id", new { id = id });
return UnitOfWork.Database.ExecuteScalar<int>(sql) > 0; return _work.Database.ExecuteScalar<int>(sql) > 0;
} }
#region private classes #region private classes
[ExplicitColumns]
internal class UmbracoPropertyDto
{
[Column("propertyEditorAlias")]
public string PropertyEditorAlias { get; set; }
[Column("propertyTypeAlias")]
public string PropertyAlias { get; set; }
[Column("dataNvarchar")]
public string NVarcharValue { get; set; }
[Column("dataNtext")]
public string NTextValue { get; set; }
}
/// <summary>
/// This is a special relator in that it is not returning a DTO but a real resolved entity and that it accepts
/// a dynamic instance.
/// </summary>
/// <remarks>
/// We're doing this because when we query the db, we want to use dynamic so that it returns all available fields not just the ones
/// defined on the entity so we can them to additional data
/// </remarks>
internal class UmbracoEntityRelator
{
internal UmbracoEntity Current;
private readonly UmbracoEntityFactory _factory = new UmbracoEntityFactory();
internal UmbracoEntity Map(dynamic a, UmbracoPropertyDto p)
{
// Terminating call. Since we can return null from this function
// we need to be ready for PetaPoco to callback later with null
// parameters
if (a == null)
return Current;
// Is this the same UmbracoEntity as the current one we're processing
if (Current != null && Current.Key == a.uniqueID)
{
if (p != null && p.PropertyAlias.IsNullOrWhiteSpace() == false)
{
// Add this UmbracoProperty to the current additional data
Current.AdditionalData[p.PropertyAlias] = new UmbracoEntity.EntityProperty
{
PropertyEditorAlias = p.PropertyEditorAlias,
Value = p.NTextValue.IsNullOrWhiteSpace()
? p.NVarcharValue
: p.NTextValue.ConvertToJsonIfPossible()
};
}
// Return null to indicate we're not done with this UmbracoEntity yet
return null;
}
// This is a different UmbracoEntity to the current one, or this is the
// first time through and we don't have a Tab yet
// Save the current UmbracoEntityDto
var prev = Current;
// Setup the new current UmbracoEntity
Current = _factory.BuildEntityFromDynamic(a);
if (p != null && p.PropertyAlias.IsNullOrWhiteSpace() == false)
{
//add the property/create the prop list if null
Current.AdditionalData[p.PropertyAlias] = new UmbracoEntity.EntityProperty
{
PropertyEditorAlias = p.PropertyEditorAlias,
Value = p.NTextValue.IsNullOrWhiteSpace()
? p.NVarcharValue
: p.NTextValue.ConvertToJsonIfPossible()
};
}
// Return the now populated previous UmbracoEntity (or null if first time through)
return prev;
}
}
private class EntityDefinitionCollection : KeyedCollection<int, EntityDefinition> private class EntityDefinitionCollection : KeyedCollection<int, EntityDefinition>
{ {
@@ -19,8 +19,6 @@ namespace Umbraco.Core.Persistence.Repositories
/// <returns></returns> /// <returns></returns>
XmlDocument BuildXmlCache(); XmlDocument BuildXmlCache();
XmlDocument BuildPreviewXmlCache();
/// <summary> /// <summary>
/// Get the count of published items /// Get the count of published items
/// </summary> /// </summary>
@@ -95,9 +95,7 @@ namespace Umbraco.Core.Persistence.Repositories
.InnerJoin<ContentDto>(SqlSyntax) .InnerJoin<ContentDto>(SqlSyntax)
.On<ContentVersionDto, ContentDto>(SqlSyntax, left => left.NodeId, right => right.NodeId) .On<ContentVersionDto, ContentDto>(SqlSyntax, left => left.NodeId, right => right.NodeId)
.InnerJoin<NodeDto>(SqlSyntax) .InnerJoin<NodeDto>(SqlSyntax)
.On<ContentDto, NodeDto>(SqlSyntax, left => left.NodeId, right => right.NodeId) .On<ContentDto, NodeDto>(SqlSyntax, left => left.NodeId, right => right.NodeId);
.InnerJoin<ContentTypeDto>(SqlSyntax)
.On<ContentTypeDto, ContentDto>(SqlSyntax, left => left.NodeId, right => right.ContentTypeId);
if (includeFilePaths) if (includeFilePaths)
{ {
@@ -267,8 +267,8 @@ ORDER BY colName";
var fromDate = DateTime.UtcNow - timespan; var fromDate = DateTime.UtcNow - timespan;
var count = Database.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoUserLogin WHERE lastValidatedUtc<=@fromDate", new { fromDate = fromDate }); var count = Database.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoUserLogin WHERE lastValidatedUtc=@fromDate", new { fromDate = fromDate });
Database.Execute("DELETE FROM umbracoUserLogin WHERE lastValidatedUtc<=@fromDate", new { fromDate = fromDate }); Database.Execute("DELETE FROM umbracoUserLogin WHERE lastValidatedUtc=@fromDate", new { fromDate = fromDate });
return count; return count;
} }
@@ -703,8 +703,6 @@ ORDER BY contentNodeId, versionId, propertytypeid
// Members only // Members only
case "USERNAME": case "USERNAME":
return "cmsMember.LoginName"; return "cmsMember.LoginName";
case "CONTENTTYPEALIAS":
return "cmsContentType.alias";
default: default:
//ensure invalid SQL cannot be submitted //ensure invalid SQL cannot be submitted
return Regex.Replace(orderBy, @"[^\w\.,`\[\]@-]", ""); return Regex.Replace(orderBy, @"[^\w\.,`\[\]@-]", "");
@@ -53,12 +53,6 @@ namespace Umbraco.Core.PropertyEditors
nestedContentEditorFromPackage.Name = "(Obsolete) " + nestedContentEditorFromPackage.Name; nestedContentEditorFromPackage.Name = "(Obsolete) " + nestedContentEditorFromPackage.Name;
nestedContentEditorFromPackage.IsDeprecated = true; nestedContentEditorFromPackage.IsDeprecated = true;
} }
var multiUrlPickerEditorFromPackage = editors.FirstOrDefault(x => x.Alias == "RJP.MultiUrlPicker");
if (multiUrlPickerEditorFromPackage != null)
{
multiUrlPickerEditorFromPackage.Name = "(Obsolete) " + multiUrlPickerEditorFromPackage.Name;
multiUrlPickerEditorFromPackage.IsDeprecated = true;
}
return editors; return editors;
} }
@@ -42,22 +42,16 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview)
{ {
var sourceAsString = source?.ToString();
if(sourceAsString.IsNullOrWhiteSpace())
{
return new string[0];
}
// if Json storage type deserialzie and return as string array // if Json storage type deserialzie and return as string array
if (JsonStorageType(propertyType.DataTypeId)) if (JsonStorageType(propertyType.DataTypeId))
{ {
var jArray = JsonConvert.DeserializeObject<JArray>(sourceAsString); var jArray = JsonConvert.DeserializeObject<JArray>(source.ToString());
return jArray.ToObject<string[]>(); return jArray.ToObject<string[]>();
} }
// Otherwise assume CSV storage type and return as string array // Otherwise assume CSV storage type and return as string array
var csvTags = var csvTags =
sourceAsString source.ToString()
.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) .Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)
.ToArray(); .ToArray();
return csvTags; return csvTags;
@@ -107,11 +107,6 @@ namespace Umbraco.Core.Security
await EnsureValidSessionId(context); await EnsureValidSessionId(context);
if (context?.Identity == null)
{
context?.OwinContext.Authentication.SignOut(context.Options.AuthenticationType);
return;
}
await base.ValidateIdentity(context); await base.ValidateIdentity(context);
} }
+2 -62
View File
@@ -4,7 +4,6 @@ using System.ComponentModel;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Xml; using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
@@ -35,7 +34,6 @@ namespace Umbraco.Core.Services
//Support recursive locks because some of the methods that require locking call other methods that require locking. //Support recursive locks because some of the methods that require locking call other methods that require locking.
//for example, the Move method needs to be locked but this calls the Save method which also needs to be locked. //for example, the Move method needs to be locked but this calls the Save method which also needs to be locked.
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
private static readonly Regex AnchorRegex = new Regex("<a id=\"(.*?)\">", RegexOptions.Compiled);
public ContentService( public ContentService(
IDatabaseUnitOfWorkProvider provider, IDatabaseUnitOfWorkProvider provider,
@@ -301,45 +299,6 @@ namespace Umbraco.Core.Services
return content; return content;
} }
public IEnumerable<string> GetAnchorValuesFromRTEs(int id)
{
var result = new List<string>();
var content = GetById(id);
foreach (var contentProperty in content.Properties)
{
if (contentProperty.PropertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.TinyMCEAlias))
{
var value = contentProperty.Value?.ToString();
if (!string.IsNullOrEmpty(value))
{
result.AddRange(GetAnchorValuesFromRTEContent(value));
}
}
}
return result;
}
public IEnumerable<string> GetAnchorValuesFromRTEContent(string rteContent)
{
var result = new List<string>();
var matches = AnchorRegex.Matches(rteContent);
foreach (Match match in matches)
{
result.Add(match.Value.Split('\"')[1]);
}
return result;
}
/// <summary> /// <summary>
/// Creates and saves an <see cref="IContent"/> object using the alias of the <see cref="IContentType"/> /// Creates and saves an <see cref="IContent"/> object using the alias of the <see cref="IContentType"/>
/// that this Content should based on. /// that this Content should based on.
@@ -1782,15 +1741,7 @@ namespace Umbraco.Core.Services
/// <summary> /// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin /// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin
/// </summary> /// </summary>
[EditorBrowsable(EditorBrowsableState.Never)] public void EmptyRecycleBin()
[Obsolete("Use EmptyRecycleBin with explicit indication of user ID instead")]
public void EmptyRecycleBin() => EmptyRecycleBin(0);
/// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin
/// </summary>
/// <param name="userId">Optional Id of the User emptying the Recycle Bin</param>
public void EmptyRecycleBin(int userId = 0)
{ {
using (new WriteLock(Locker)) using (new WriteLock(Locker))
{ {
@@ -1820,7 +1771,7 @@ namespace Umbraco.Core.Services
recycleBinEventArgs.RecycleBinEmptiedSuccessfully = success; recycleBinEventArgs.RecycleBinEmptiedSuccessfully = success;
uow.Events.Dispatch(EmptiedRecycleBin, this, recycleBinEventArgs); uow.Events.Dispatch(EmptiedRecycleBin, this, recycleBinEventArgs);
Audit(uow, AuditType.Delete, "Empty Content Recycle Bin performed by user", userId, Constants.System.RecycleBinContent); Audit(uow, AuditType.Delete, "Empty Content Recycle Bin performed by user", 0, Constants.System.RecycleBinContent);
uow.Commit(); uow.Commit();
} }
} }
@@ -2241,17 +2192,6 @@ namespace Umbraco.Core.Services
} }
} }
public XmlDocument BuildPreviewXmlCache()
{
using (var uow = UowProvider.GetUnitOfWork())
{
var repository = RepositoryFactory.CreateContentRepository(uow);
var result = repository.BuildPreviewXmlCache();
uow.Commit();
return result;
}
}
/// <summary> /// <summary>
/// Rebuilds all xml content in the cmsContentXml table for all documents /// Rebuilds all xml content in the cmsContentXml table for all documents
/// </summary> /// </summary>
@@ -1,25 +0,0 @@
using System;
using Umbraco.Core.Models;
namespace Umbraco.Core.Services
{
internal static class DateTypeServiceExtensions
{
public static bool IsDataTypeIgnoringUserStartNodes(this IDataTypeService dataTypeService, Guid key)
{
if (DataTypeExtensions.IsBuildInDataType(key)) return false; //built in ones can never be ignoring start nodes
var dataType = dataTypeService.GetDataTypeDefinitionById(key);
if (dataType != null)
{
var preValues = dataTypeService.GetPreValuesCollectionByDataTypeId(dataType.Id);
if (preValues.FormatAsDictionary().TryGetValue(
Constants.DataTypes.ReservedPreValueKeys.IgnoreUserStartNodes, out var preValue))
return preValue.Value.InvariantEquals("1");
}
return false;
}
}
}
+111 -58
View File
@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using Umbraco.Core.CodeAnnotations; using Umbraco.Core.CodeAnnotations;
@@ -76,15 +75,28 @@ namespace Umbraco.Core.Services
return _idkMap.GetKeyForId(id, umbracoObjectType); return _idkMap.GetKeyForId(id, umbracoObjectType);
} }
public IUmbracoEntity GetByKey(Guid key) public IUmbracoEntity GetByKey(Guid key, bool loadBaseType = true)
{ {
using (var uow = UowProvider.GetUnitOfWork()) if (loadBaseType)
{ {
var repository = RepositoryFactory.CreateEntityRepository(uow); using (var uow = UowProvider.GetUnitOfWork())
var ret = repository.GetByKey(key); {
uow.Commit(); var repository = RepositoryFactory.CreateEntityRepository(uow);
return ret; var ret = repository.GetByKey(key);
uow.Commit();
return ret;
}
} }
//SD: TODO: Need to enable this at some stage ... just need to ask Morten what the deal is with what this does.
throw new NotSupportedException();
//var objectType = GetObjectType(key);
//var entityType = GetEntityType(objectType);
//var typeFullName = entityType.FullName;
//var entity = _supportedObjectTypes[typeFullName].Item2(id);
//return entity;
} }
/// <summary> /// <summary>
@@ -94,26 +106,49 @@ namespace Umbraco.Core.Services
/// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties. /// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties.
/// </returns> /// </returns>
/// <param name="id">Id of the object to retrieve</param> /// <param name="id">Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
public virtual IUmbracoEntity Get(int id) public virtual IUmbracoEntity Get(int id, bool loadBaseType = true)
{ {
using (var uow = UowProvider.GetUnitOfWork(readOnly:true)) if (loadBaseType)
{ {
var repository = RepositoryFactory.CreateEntityRepository(uow); using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
var ret = repository.Get(id); {
return ret; var repository = RepositoryFactory.CreateEntityRepository(uow);
var ret = repository.Get(id);
return ret;
}
} }
var objectType = GetObjectType(id);
var entityType = GetEntityType(objectType);
var typeFullName = entityType.FullName;
var entity = _supportedObjectTypes[typeFullName].Item2(id);
return entity;
} }
public IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType) public IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true)
{ {
var objectTypeId = umbracoObjectType.GetGuid(); if (loadBaseType)
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
{ {
var repository = RepositoryFactory.CreateEntityRepository(uow); var objectTypeId = umbracoObjectType.GetGuid();
var ret = repository.GetByKey(key, objectTypeId); using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
return ret; {
var repository = RepositoryFactory.CreateEntityRepository(uow);
var ret = repository.GetByKey(key, objectTypeId);
return ret;
}
} }
//SD: TODO: Need to enable this at some stage ... just need to ask Morten what the deal is with what this does.
throw new NotSupportedException();
//var entityType = GetEntityType(umbracoObjectType);
//var typeFullName = entityType.FullName;
//var entity = _supportedObjectTypes[typeFullName].Item2(id);
//return entity;
} }
/// <summary> /// <summary>
@@ -124,19 +159,29 @@ namespace Umbraco.Core.Services
/// </returns> /// </returns>
/// <param name="id">Id of the object to retrieve</param> /// <param name="id">Id of the object to retrieve</param>
/// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param> /// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param>
// <returns>An <see cref="IUmbracoEntity"/></returns> /// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
public virtual IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType) /// <returns>An <see cref="IUmbracoEntity"/></returns>
public virtual IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true)
{ {
var objectTypeId = umbracoObjectType.GetGuid(); if (loadBaseType)
using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
{ {
var repository = RepositoryFactory.CreateEntityRepository(uow); var objectTypeId = umbracoObjectType.GetGuid();
var ret = repository.Get(id, objectTypeId); using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
return ret; {
var repository = RepositoryFactory.CreateEntityRepository(uow);
var ret = repository.Get(id, objectTypeId);
return ret;
}
} }
var entityType = GetEntityType(umbracoObjectType);
var typeFullName = entityType.FullName;
var entity = _supportedObjectTypes[typeFullName].Item2(id);
return entity;
} }
public IUmbracoEntity GetByKey<T>(Guid key) where T : IUmbracoEntity public IUmbracoEntity GetByKey<T>(Guid key, bool loadBaseType = true) where T : IUmbracoEntity
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@@ -149,15 +194,29 @@ namespace Umbraco.Core.Services
/// </returns> /// </returns>
/// <typeparam name="T">Type of the model to retrieve. Must be based on an <see cref="IUmbracoEntity"/></typeparam> /// <typeparam name="T">Type of the model to retrieve. Must be based on an <see cref="IUmbracoEntity"/></typeparam>
/// <param name="id">Id of the object to retrieve</param> /// <param name="id">Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
public virtual IUmbracoEntity Get<T>(int id) where T : IUmbracoEntity public virtual IUmbracoEntity Get<T>(int id, bool loadBaseType = true) where T : IUmbracoEntity
{ {
using (var uow = UowProvider.GetUnitOfWork(readOnly:true)) if (loadBaseType)
{ {
var repository = RepositoryFactory.CreateEntityRepository(uow); using (var uow = UowProvider.GetUnitOfWork(readOnly:true))
var ret = repository.Get(id); {
return ret; var repository = RepositoryFactory.CreateEntityRepository(uow);
var ret = repository.Get(id);
return ret;
}
} }
var typeFullName = typeof(T).FullName;
Mandate.That<NotSupportedException>(_supportedObjectTypes.ContainsKey(typeFullName), () =>
{
throw new NotSupportedException
("The passed in type is not supported");
});
var entity = _supportedObjectTypes[typeFullName].Item2(id);
return entity;
} }
/// <summary> /// <summary>
@@ -235,6 +294,27 @@ namespace Umbraco.Core.Services
} }
} }
/// <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 query = Query<IUmbracoEntity>.Builder.Where(x => x.ParentId == parentId);
// Not pretty having to cast the repository, 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
return ((EntityRepository)repository).GetMediaByQueryWithoutPropertyData(query);
}
}
/// <summary> /// <summary>
/// Returns a paged collection of children /// Returns a paged collection of children
/// </summary> /// </summary>
@@ -718,32 +798,5 @@ namespace Umbraco.Core.Services
} }
return node.NodeId; return node.NodeId;
} }
#region Obsolete - only here for compat
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity GetByKey(Guid key, bool loadBaseType = true) => GetByKey(key);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity Get(int id, bool loadBaseType = true) => Get(id);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true) => GetByKey(key, umbracoObjectType);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity GetByKey<T>(Guid key, bool loadBaseType = true) where T : IUmbracoEntity => GetByKey<T>(key);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true) => Get(id, umbracoObjectType);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity Get<T>(int id, bool loadBaseType = true) where T : IUmbracoEntity => Get<T>(id);
#endregion
} }
} }
@@ -124,8 +124,6 @@ namespace Umbraco.Core.Services
/// <returns></returns> /// <returns></returns>
XmlDocument BuildXmlCache(); XmlDocument BuildXmlCache();
XmlDocument BuildPreviewXmlCache();
/// <summary> /// <summary>
/// Rebuilds all xml content in the cmsContentXml table for all documents /// Rebuilds all xml content in the cmsContentXml table for all documents
/// </summary> /// </summary>
@@ -440,16 +438,8 @@ namespace Umbraco.Core.Services
/// <summary> /// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin /// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin
/// </summary> /// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use EmptyRecycleBin with explicit indication of user ID instead")]
void EmptyRecycleBin(); void EmptyRecycleBin();
/// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IContent"/> that resides in the bin
/// </summary>
/// <param name="userId">Optional Id of the User emptying the Recycle Bin</param>
void EmptyRecycleBin(int userId = 0);
/// <summary> /// <summary>
/// Rollback an <see cref="IContent"/> object to a previous version. /// Rollback an <see cref="IContent"/> object to a previous version.
/// This will create a new version, which is a copy of all the old data. /// This will create a new version, which is a copy of all the old data.
@@ -713,8 +703,5 @@ namespace Umbraco.Core.Services
/// <param name="userId">Optional id of the user creating the content</param> /// <param name="userId">Optional id of the user creating the content</param>
/// <returns><see cref="IContent"/></returns> /// <returns><see cref="IContent"/></returns>
IContent CreateContentWithIdentity(string name, int parentId, string contentTypeAlias, int userId = 0); IContent CreateContentWithIdentity(string name, int parentId, string contentTypeAlias, int userId = 0);
IEnumerable<string> GetAnchorValuesFromRTEs(int id);
IEnumerable<string> GetAnchorValuesFromRTEContent(string rteContent);
} }
} }
+17 -25
View File
@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.DatabaseModelDefinitions;
@@ -53,11 +52,8 @@ namespace Umbraco.Core.Services
/// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties. /// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties.
/// </returns> /// </returns>
/// <param name="key">Unique Id of the object to retrieve</param> /// <param name="key">Unique Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity GetByKey(Guid key);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity GetByKey(Guid key, bool loadBaseType = true); IUmbracoEntity GetByKey(Guid key, bool loadBaseType = true);
/// <summary> /// <summary>
@@ -67,11 +63,8 @@ namespace Umbraco.Core.Services
/// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties. /// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties.
/// </returns> /// </returns>
/// <param name="id">Id of the object to retrieve</param> /// <param name="id">Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity Get(int id);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity Get(int id, bool loadBaseType = true); IUmbracoEntity Get(int id, bool loadBaseType = true);
/// <summary> /// <summary>
@@ -82,17 +75,10 @@ namespace Umbraco.Core.Services
/// </returns> /// </returns>
/// <param name="key">Unique Id of the object to retrieve</param> /// <param name="key">Unique Id of the object to retrieve</param>
/// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param> /// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true); IUmbracoEntity GetByKey(Guid key, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity GetByKey<T>(Guid key, bool loadBaseType = true) where T : IUmbracoEntity;
/// <summary> /// <summary>
/// Gets an UmbracoEntity by its Id and UmbracoObjectType, and optionally loads the complete object graph. /// Gets an UmbracoEntity by its Id and UmbracoObjectType, and optionally loads the complete object graph.
/// </summary> /// </summary>
@@ -101,11 +87,8 @@ namespace Umbraco.Core.Services
/// </returns> /// </returns>
/// <param name="id">Id of the object to retrieve</param> /// <param name="id">Id of the object to retrieve</param>
/// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param> /// <param name="umbracoObjectType">UmbracoObjectType of the entity to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true); IUmbracoEntity Get(int id, UmbracoObjectTypes umbracoObjectType, bool loadBaseType = true);
/// <summary> /// <summary>
@@ -115,12 +98,21 @@ namespace Umbraco.Core.Services
/// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties. /// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties.
/// </returns> /// </returns>
/// <typeparam name="T">Type of the model to retrieve. Must be based on an <see cref="IUmbracoEntity"/></typeparam> /// <typeparam name="T">Type of the model to retrieve. Must be based on an <see cref="IUmbracoEntity"/></typeparam>
/// <param name="id">Id of the object to retrieve</param> /// <param name="key">Unique Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity Get<T>(int id) where T : IUmbracoEntity; IUmbracoEntity GetByKey<T>(Guid key, bool loadBaseType = true) where T : IUmbracoEntity;
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")] /// <summary>
[EditorBrowsable(EditorBrowsableState.Never)] /// Gets an UmbracoEntity by its Id and specified Type. Optionally loads the complete object graph.
/// </summary>
/// <returns>
/// By default this will load the base type <see cref="IUmbracoEntity"/> with a minimum set of properties.
/// </returns>
/// <typeparam name="T">Type of the model to retrieve. Must be based on an <see cref="IUmbracoEntity"/></typeparam>
/// <param name="id">Id of the object to retrieve</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c>.</param>
/// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity Get<T>(int id, bool loadBaseType = true) where T : IUmbracoEntity; IUmbracoEntity Get<T>(int id, bool loadBaseType = true) where T : IUmbracoEntity;
/// <summary> /// <summary>
@@ -289,16 +289,8 @@ namespace Umbraco.Core.Services
/// <summary> /// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin /// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin
/// </summary> /// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use EmptyRecycleBin with explicit indication of user ID instead")]
void EmptyRecycleBin(); void EmptyRecycleBin();
/// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin
/// </summary>
/// <param name="userId">Optional Id of the User emptying the Recycle Bin</param>
void EmptyRecycleBin(int userId = 0);
/// <summary> /// <summary>
/// Deletes all media of specified type. All children of deleted media is moved to Recycle Bin. /// Deletes all media of specified type. All children of deleted media is moved to Recycle Bin.
/// </summary> /// </summary>
+8 -27
View File
@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.EntityBase;
@@ -143,67 +142,49 @@ namespace Umbraco.Core.Services
/// Gets the Child object from a Relation as an <see cref="IUmbracoEntity"/> /// Gets the Child object from a Relation as an <see cref="IUmbracoEntity"/>
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve child object from</param> /// <param name="relation">Relation to retrieve child object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity GetChildEntityFromRelation(IRelation relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false); IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false);
/// <summary> /// <summary>
/// Gets the Parent object from a Relation as an <see cref="IUmbracoEntity"/> /// Gets the Parent object from a Relation as an <see cref="IUmbracoEntity"/>
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve parent object from</param> /// <param name="relation">Relation to retrieve parent object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
IUmbracoEntity GetParentEntityFromRelation(IRelation relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false); IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false);
/// <summary> /// <summary>
/// Gets the Parent and Child objects from a Relation as a <see cref="Tuple"/>"/> with <see cref="IUmbracoEntity"/>. /// Gets the Parent and Child objects from a Relation as a <see cref="Tuple"/>"/> with <see cref="IUmbracoEntity"/>.
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve parent and child object from</param> /// <param name="relation">Relation to retrieve parent and child object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>Returns a Tuple with Parent (item1) and Child (item2)</returns> /// <returns>Returns a Tuple with Parent (item1) and Child (item2)</returns>
Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false); Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false);
/// <summary> /// <summary>
/// Gets the Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve child objects from</param> /// <param name="relations">List of relations to retrieve child objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns> /// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns>
IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false); IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false);
/// <summary> /// <summary>
/// Gets the Parent objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Parent objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve parent objects from</param> /// <param name="relations">List of relations to retrieve parent objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns> /// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns>
IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations); IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations,
bool loadBaseType = false);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false);
/// <summary> /// <summary>
/// Gets the Parent and Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Parent and Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve parent and child objects from</param> /// <param name="relations">List of relations to retrieve parent and child objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param> /// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations( /// <returns>An enumerable list of <see cref="Tuple"/> with <see cref="IUmbracoEntity"/></returns>
IEnumerable<IRelation> relations);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations( IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations(
IEnumerable<IRelation> relations, IEnumerable<IRelation> relations,
bool loadBaseType = false); bool loadBaseType = false);
+3 -11
View File
@@ -509,7 +509,7 @@ namespace Umbraco.Core.Services
public IEnumerable<IMedia> GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren, public IEnumerable<IMedia> GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren,
string orderBy, Direction orderDirection, bool orderBySystemField, string filter) string orderBy, Direction orderDirection, bool orderBySystemField, string filter)
{ {
return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter, null); return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filter, null);
} }
/// <summary> /// <summary>
@@ -981,15 +981,7 @@ namespace Umbraco.Core.Services
/// <summary> /// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin /// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin
/// </summary> /// </summary>
[EditorBrowsable(EditorBrowsableState.Never)] public void EmptyRecycleBin()
[Obsolete("Use EmptyRecycleBin with explicit indication of user ID instead")]
public void EmptyRecycleBin() => EmptyRecycleBin(0);
/// <summary>
/// Empties the Recycle Bin by deleting all <see cref="IMedia"/> that resides in the bin
/// </summary>
/// <param name="userId">Optional Id of the User emptying the Recycle Bin</param>
public void EmptyRecycleBin(int userId = 0)
{ {
using (new WriteLock(Locker)) using (new WriteLock(Locker))
{ {
@@ -1014,7 +1006,7 @@ namespace Umbraco.Core.Services
recycleBinEventArgs.RecycleBinEmptiedSuccessfully = success; recycleBinEventArgs.RecycleBinEmptiedSuccessfully = success;
uow.Events.Dispatch(EmptiedRecycleBin, this, recycleBinEventArgs); uow.Events.Dispatch(EmptiedRecycleBin, this, recycleBinEventArgs);
Audit(uow, AuditType.Delete, "Empty Media Recycle Bin performed by user", userId, Constants.System.RecycleBinMedia); Audit(uow, AuditType.Delete, "Empty Media Recycle Bin performed by user", 0, Constants.System.RecycleBinMedia);
uow.Commit(); uow.Commit();
} }
} }
@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Umbraco.Core.Events; using Umbraco.Core.Events;
using Umbraco.Core.Logging; using Umbraco.Core.Logging;
@@ -70,11 +69,6 @@ namespace Umbraco.Core.Services
public void Save(IMemberGroup memberGroup, bool raiseEvents = true) public void Save(IMemberGroup memberGroup, bool raiseEvents = true)
{ {
if (string.IsNullOrWhiteSpace(memberGroup.Name))
{
throw new InvalidOperationException("The name of a MemberGroup can not be empty");
}
using (var uow = UowProvider.GetUnitOfWork()) using (var uow = UowProvider.GetUnitOfWork())
{ {
var saveEventArgs = new SaveEventArgs<IMemberGroup>(memberGroup); var saveEventArgs = new SaveEventArgs<IMemberGroup>(memberGroup);
@@ -124,18 +124,11 @@ namespace Umbraco.Core.Services
var notifications = GetUsersNotifications(users.Select(x => x.Id), action, Enumerable.Empty<int>(), Constants.ObjectTypes.DocumentGuid).ToList(); var notifications = GetUsersNotifications(users.Select(x => x.Id), action, Enumerable.Empty<int>(), Constants.ObjectTypes.DocumentGuid).ToList();
if (notifications.Count == 0) break; if (notifications.Count == 0) break;
while (notifications.Count > 0) var i = 0;
foreach (var user in users)
{ {
var notification = notifications[0]; // continue if there's no notification for this user
var isMatched = false; if (notifications[i].UserId != user.Id) continue; // next user
// grab user whose associated to the notification
var user = users.Where(x => x.Id == notification.UserId).FirstOrDefault();
if (user == null)
{
notifications.RemoveAll(x => x.UserId == notification.UserId);
}
for (var j = 0; j < entitiesL.Count; j++) for (var j = 0; j < entitiesL.Count; j++)
{ {
@@ -143,9 +136,7 @@ namespace Umbraco.Core.Services
var path = paths[j]; var path = paths[j];
// test if the notification applies to the path ie to this entity // test if the notification applies to the path ie to this entity
if (path.Contains(notification.EntityId) == false) continue; // next entity if (path.Contains(notifications[i].EntityId) == false) continue; // next entity
isMatched = true;
if (prevVersionDictionary.ContainsKey(content.Id) == false) if (prevVersionDictionary.ContainsKey(content.Id) == false)
{ {
@@ -155,19 +146,16 @@ namespace Umbraco.Core.Services
// queue notification // queue notification
var req = CreateNotificationRequest(operatingUser, user, content, prevVersionDictionary[content.Id], actionName, http, createSubject, createBody); var req = CreateNotificationRequest(operatingUser, user, content, prevVersionDictionary[content.Id], actionName, http, createSubject, createBody);
Enqueue(req); Enqueue(req);
// don't process any further entities as a notification has been sent
break;
} }
// when a match has been found, skip other notifications for user. // skip other notifications for this user, essentially this means moving i to the next index of notifications
if (isMatched) // for the next user.
do
{ {
notifications.RemoveAll(x => x.UserId == notification.UserId); i++;
continue; } while (i < notifications.Count && notifications[i].UserId == user.Id);
}
notifications.Remove(notification); if (i >= notifications.Count) break; // break if no more notifications
} }
// load more users if any // load more users if any
+22 -41
View File
@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Linq; using System.Linq;
using Umbraco.Core.Events; using Umbraco.Core.Events;
using Umbraco.Core.Logging; using Umbraco.Core.Logging;
@@ -305,36 +304,39 @@ namespace Umbraco.Core.Services
/// Gets the Child object from a Relation as an <see cref="IUmbracoEntity"/> /// Gets the Child object from a Relation as an <see cref="IUmbracoEntity"/>
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve child object from</param> /// <param name="relation">Relation to retrieve child object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
public IUmbracoEntity GetChildEntityFromRelation(IRelation relation) public IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false)
{ {
var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType);
return _entityService.Get(relation.ChildId, objectType); return _entityService.Get(relation.ChildId, objectType, loadBaseType);
} }
/// <summary> /// <summary>
/// Gets the Parent object from a Relation as an <see cref="IUmbracoEntity"/> /// Gets the Parent object from a Relation as an <see cref="IUmbracoEntity"/>
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve parent object from</param> /// <param name="relation">Relation to retrieve parent object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An <see cref="IUmbracoEntity"/></returns> /// <returns>An <see cref="IUmbracoEntity"/></returns>
public IUmbracoEntity GetParentEntityFromRelation(IRelation relation) public IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false)
{ {
var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType); var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType);
return _entityService.Get(relation.ParentId, objectType); return _entityService.Get(relation.ParentId, objectType, loadBaseType);
} }
/// <summary> /// <summary>
/// Gets the Parent and Child objects from a Relation as a <see cref="Tuple"/>"/> with <see cref="IUmbracoEntity"/>. /// Gets the Parent and Child objects from a Relation as a <see cref="Tuple"/>"/> with <see cref="IUmbracoEntity"/>.
/// </summary> /// </summary>
/// <param name="relation">Relation to retrieve parent and child object from</param> /// <param name="relation">Relation to retrieve parent and child object from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>Returns a Tuple with Parent (item1) and Child (item2)</returns> /// <returns>Returns a Tuple with Parent (item1) and Child (item2)</returns>
public Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation) public Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false)
{ {
var childObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var childObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType);
var parentObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType); var parentObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType);
var child = _entityService.Get(relation.ChildId, childObjectType); var child = _entityService.Get(relation.ChildId, childObjectType, loadBaseType);
var parent = _entityService.Get(relation.ParentId, parentObjectType); var parent = _entityService.Get(relation.ParentId, parentObjectType, loadBaseType);
return new Tuple<IUmbracoEntity, IUmbracoEntity>(parent, child); return new Tuple<IUmbracoEntity, IUmbracoEntity>(parent, child);
} }
@@ -343,13 +345,14 @@ namespace Umbraco.Core.Services
/// Gets the Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve child objects from</param> /// <param name="relations">List of relations to retrieve child objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns> /// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns>
public IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations) public IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false)
{ {
foreach (var relation in relations) foreach (var relation in relations)
{ {
var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType);
yield return _entityService.Get(relation.ChildId, objectType); yield return _entityService.Get(relation.ChildId, objectType, loadBaseType);
} }
} }
@@ -357,13 +360,15 @@ namespace Umbraco.Core.Services
/// Gets the Parent objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Parent objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve parent objects from</param> /// <param name="relations">List of relations to retrieve parent objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns> /// <returns>An enumerable list of <see cref="IUmbracoEntity"/></returns>
public IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations) public IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations,
bool loadBaseType = false)
{ {
foreach (var relation in relations) foreach (var relation in relations)
{ {
var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType); var objectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType);
yield return _entityService.Get(relation.ParentId, objectType); yield return _entityService.Get(relation.ParentId, objectType, loadBaseType);
} }
} }
@@ -371,17 +376,19 @@ namespace Umbraco.Core.Services
/// Gets the Parent and Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects. /// Gets the Parent and Child objects from a list of Relations as a list of <see cref="IUmbracoEntity"/> objects.
/// </summary> /// </summary>
/// <param name="relations">List of relations to retrieve parent and child objects from</param> /// <param name="relations">List of relations to retrieve parent and child objects from</param>
/// <param name="loadBaseType">Optional bool to load the complete object graph when set to <c>False</c></param>
/// <returns>An enumerable list of <see cref="Tuple"/> with <see cref="IUmbracoEntity"/></returns> /// <returns>An enumerable list of <see cref="Tuple"/> with <see cref="IUmbracoEntity"/></returns>
public IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations( public IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations(
IEnumerable<IRelation> relations) IEnumerable<IRelation> relations,
bool loadBaseType = false)
{ {
foreach (var relation in relations) foreach (var relation in relations)
{ {
var childObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType); var childObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ChildObjectType);
var parentObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType); var parentObjectType = UmbracoObjectTypesExtensions.GetUmbracoObjectType(relation.RelationType.ParentObjectType);
var child = _entityService.Get(relation.ChildId, childObjectType); var child = _entityService.Get(relation.ChildId, childObjectType, loadBaseType);
var parent = _entityService.Get(relation.ParentId, parentObjectType); var parent = _entityService.Get(relation.ParentId, parentObjectType, loadBaseType);
yield return new Tuple<IUmbracoEntity, IUmbracoEntity>(parent, child); yield return new Tuple<IUmbracoEntity, IUmbracoEntity>(parent, child);
} }
@@ -737,31 +744,5 @@ namespace Umbraco.Core.Services
/// </summary> /// </summary>
public static event TypedEventHandler<IRelationService, SaveEventArgs<IRelationType>> SavedRelationType; public static event TypedEventHandler<IRelationService, SaveEventArgs<IRelationType>> SavedRelationType;
#endregion #endregion
#region Obsolete - only here for compat
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity GetChildEntityFromRelation(IRelation relation, bool loadBaseType = false) => GetChildEntityFromRelation(relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IUmbracoEntity GetParentEntityFromRelation(IRelation relation, bool loadBaseType = false) => GetParentEntityFromRelation(relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public Tuple<IUmbracoEntity, IUmbracoEntity> GetEntitiesFromRelation(IRelation relation, bool loadBaseType = false) => GetEntitiesFromRelation(relation);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<IUmbracoEntity> GetChildEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false) => GetChildEntitiesFromRelations(relations);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<IUmbracoEntity> GetParentEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false) => GetParentEntitiesFromRelations(relations);
[Obsolete("Use the overload that doesn't specify loadBaseType instead, loadBaseType will not affect any results")]
[EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<Tuple<IUmbracoEntity, IUmbracoEntity>> GetEntitiesFromRelations(IEnumerable<IRelation> relations, bool loadBaseType = false) => GetEntitiesFromRelations(relations);
#endregion
} }
} }
+2 -3
View File
@@ -189,6 +189,7 @@ namespace Umbraco.Core
outputArray[i] = char.IsLetterOrDigit(inputArray[i]) ? inputArray[i] : replacement; outputArray[i] = char.IsLetterOrDigit(inputArray[i]) ? inputArray[i] : replacement;
return new string(outputArray); return new string(outputArray);
} }
private static readonly char[] CleanForXssChars = "*?(){}[];:%<>/\\|&'\"".ToCharArray(); private static readonly char[] CleanForXssChars = "*?(){}[];:%<>/\\|&'\"".ToCharArray();
/// <summary> /// <summary>
@@ -541,7 +542,7 @@ namespace Umbraco.Core
public static string StripHtml(this string text) public static string StripHtml(this string text)
{ {
const string pattern = @"<(.|\n)*?>"; const string pattern = @"<(.|\n)*?>";
return Regex.Replace(text, pattern, string.Empty); return Regex.Replace(text, pattern, String.Empty);
} }
/// <summary> /// <summary>
@@ -731,7 +732,6 @@ namespace Umbraco.Core
/// </summary> /// </summary>
/// <param name="stringToConvert">Referrs to itself</param> /// <param name="stringToConvert">Referrs to itself</param>
/// <returns>The MD5 hashed string</returns> /// <returns>The MD5 hashed string</returns>
[Obsolete("Please use the GenerateHash method instead. This may be removed in future versions")]
public static string ToMd5(this string stringToConvert) public static string ToMd5(this string stringToConvert)
{ {
return stringToConvert.GenerateHash("MD5"); return stringToConvert.GenerateHash("MD5");
@@ -742,7 +742,6 @@ namespace Umbraco.Core
/// </summary> /// </summary>
/// <param name="stringToConvert">referrs to itself</param> /// <param name="stringToConvert">referrs to itself</param>
/// <returns>The SHA1 hashed string</returns> /// <returns>The SHA1 hashed string</returns>
[Obsolete("Please use the GenerateHash method instead. This may be removed in future versions")]
public static string ToSHA1(this string stringToConvert) public static string ToSHA1(this string stringToConvert)
{ {
return stringToConvert.GenerateHash("SHA1"); return stringToConvert.GenerateHash("SHA1");
+20 -26
View File
@@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Umbraco.Core</RootNamespace> <RootNamespace>Umbraco.Core</RootNamespace>
<AssemblyName>Umbraco.Core</AssemblyName> <AssemblyName>Umbraco.Core</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages> <RestorePackages>true</RestorePackages>
@@ -48,11 +48,11 @@
<Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ClientDependency.Core, Version=1.9.7.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClientDependency.1.9.7\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.8.8.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> <Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.8.8\lib\Net45\HtmlAgilityPack.dll</HintPath> <HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference> </Reference>
<Reference Include="ImageProcessor, Version=2.7.0.100, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ImageProcessor, Version=2.5.6.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ImageProcessor.2.7.0.100\lib\net452\ImageProcessor.dll</HintPath> <HintPath>..\packages\ImageProcessor.2.5.6\lib\net45\ImageProcessor.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
@@ -61,22 +61,22 @@
<HintPath>..\packages\Log4Net.Async.2.0.4\lib\net40\Log4Net.Async.dll</HintPath> <HintPath>..\packages\Log4Net.Async.2.0.4\lib\net40\Log4Net.Async.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Identity.Owin.2.2.2\lib\net45\Microsoft.AspNet.Identity.Owin.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Security, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Security, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Security.3.1.0\lib\net45\Microsoft.Owin.Security.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Security.Cookies, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Security.Cookies, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.Cookies.4.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Security.Cookies.3.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Security.OAuth, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Security.OAuth, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.OAuth.4.0.1\lib\net45\Microsoft.Owin.Security.OAuth.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Security.OAuth.3.1.0\lib\net45\Microsoft.Owin.Security.OAuth.dll</HintPath>
</Reference> </Reference>
<Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL"> <Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
<HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath> <HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath>
@@ -85,14 +85,14 @@
<HintPath>..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll</HintPath> <HintPath>..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL"> <Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath> <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="Semver, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Semver, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath> <HintPath>..\packages\semver.1.1.2\lib\net45\Semver.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.ComponentModel.Composition" />
@@ -115,8 +115,8 @@
<Reference Include="System.Runtime.Caching" /> <Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Transactions" /> <Reference Include="System.Transactions" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath> <HintPath>..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" /> <Reference Include="System.Web.ApplicationServices" />
@@ -324,9 +324,6 @@
<Compile Include="Configuration\UmbracoSettings\WebRoutingElement.cs" /> <Compile Include="Configuration\UmbracoSettings\WebRoutingElement.cs" />
<Compile Include="Configuration\UmbracoVersion.cs" /> <Compile Include="Configuration\UmbracoVersion.cs" />
<Compile Include="Attempt.cs" /> <Compile Include="Attempt.cs" />
<Compile Include="Constants-DataTypes.cs">
<DependentUpon>Constants.cs</DependentUpon>
</Compile>
<Compile Include="Constants-DeploySelector.cs" /> <Compile Include="Constants-DeploySelector.cs" />
<Compile Include="Constants-Examine.cs" /> <Compile Include="Constants-Examine.cs" />
<Compile Include="Constants-Icons.cs" /> <Compile Include="Constants-Icons.cs" />
@@ -377,7 +374,6 @@
<Compile Include="Models\Consent.cs" /> <Compile Include="Models\Consent.cs" />
<Compile Include="Models\ConsentExtensions.cs" /> <Compile Include="Models\ConsentExtensions.cs" />
<Compile Include="Models\ConsentState.cs" /> <Compile Include="Models\ConsentState.cs" />
<Compile Include="Models\DataTypeExtensions.cs" />
<Compile Include="Models\EntityBase\EntityPath.cs" /> <Compile Include="Models\EntityBase\EntityPath.cs" />
<Compile Include="Models\EntityBase\IDeletableEntity.cs" /> <Compile Include="Models\EntityBase\IDeletableEntity.cs" />
<Compile Include="Models\IAuditEntry.cs" /> <Compile Include="Models\IAuditEntry.cs" />
@@ -576,7 +572,6 @@
<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\TargetVersionSevenFourteenZero\UpdateMemberGroupPickerData.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" />
@@ -768,7 +763,6 @@
<Compile Include="Services\ConsentService.cs" /> <Compile Include="Services\ConsentService.cs" />
<Compile Include="Services\ContentTypeServiceExtensions.cs" /> <Compile Include="Services\ContentTypeServiceExtensions.cs" />
<Compile Include="Models\RedirectUrl.cs" /> <Compile Include="Models\RedirectUrl.cs" />
<Compile Include="Services\DateTypeServiceExtensions.cs" />
<Compile Include="Services\IConsentService.cs" /> <Compile Include="Services\IConsentService.cs" />
<Compile Include="Services\IContentServiceBase.cs" /> <Compile Include="Services\IContentServiceBase.cs" />
<Compile Include="Services\IdkMap.cs" /> <Compile Include="Services\IdkMap.cs" />
+2 -2
View File
@@ -150,9 +150,9 @@ namespace Umbraco.Core
var toInclude = new[] {".aspx", ".ashx", ".asmx", ".axd", ".svc"}; var toInclude = new[] {".aspx", ".ashx", ".asmx", ".axd", ".svc"};
return toInclude.Any(ext.InvariantEquals) == false; return toInclude.Any(ext.InvariantEquals) == false;
} }
catch (ArgumentException) catch (ArgumentException ex)
{ {
LogHelper.Debug(typeof(UriExtensions), "Failed to determine if request was client side. Due to invalid characters in path: {0}", () => url.LocalPath); LogHelper.Error(typeof(UriExtensions), "Failed to determine if request was client side", ex);
return false; return false;
} }
} }
+6 -6
View File
@@ -4,7 +4,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -16,19 +16,19 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
@@ -36,7 +36,7 @@
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup><system.data> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><system.data>
<DbProviderFactories> <DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" /> <remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
+11 -11
View File
@@ -2,21 +2,21 @@
<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.7" targetFramework="net45" /> <package id="ClientDependency" version="1.9.7" targetFramework="net45" />
<package id="HtmlAgilityPack" version="1.8.8" targetFramework="net452" /> <package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net45" />
<package id="ImageProcessor" version="2.7.0.100" targetFramework="net452" /> <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" />
<package id="Log4Net.Async" version="2.0.4" targetFramework="net45" /> <package id="Log4Net.Async" version="2.0.4" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.2" targetFramework="net452" /> <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.2" targetFramework="net452" /> <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.Owin" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Security.Cookies" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Security.OAuth" version="3.1.0" targetFramework="net45" />
<package id="MiniProfiler" version="2.1.0" targetFramework="net45" /> <package id="MiniProfiler" version="2.1.0" targetFramework="net45" />
<package id="MySql.Data" version="6.9.9" targetFramework="net45" /> <package id="MySql.Data" version="6.9.9" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net452" /> <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" /> <package id="Owin" version="1.0" targetFramework="net45" />
<package id="semver" version="1.1.2" targetFramework="net452" /> <package id="semver" version="1.1.2" targetFramework="net45" />
<package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" /> <package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net452" /> <package id="System.ValueTuple" version="4.4.0" targetFramework="net45" />
</packages> </packages>
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\build\Microsoft.Diagnostics.Tracing.TraceEvent.props" Condition="Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\build\Microsoft.Diagnostics.Tracing.TraceEvent.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -10,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Umbraco.Tests.Benchmarks</RootNamespace> <RootNamespace>Umbraco.Tests.Benchmarks</RootNamespace>
<AssemblyName>Umbraco.Tests.Benchmarks</AssemblyName> <AssemblyName>Umbraco.Tests.Benchmarks</AssemblyName>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<NuGetPackageImportStamp> <NuGetPackageImportStamp>
</NuGetPackageImportStamp> </NuGetPackageImportStamp>
@@ -40,8 +39,8 @@
<RunPostBuildEvent>Always</RunPostBuildEvent> <RunPostBuildEvent>Always</RunPostBuildEvent>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="BenchmarkDotNet, Version=0.10.3.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL"> <Reference Include="BenchmarkDotNet, Version=0.10.12.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
<HintPath>..\packages\BenchmarkDotNet.0.10.3\lib\net45\BenchmarkDotNet.dll</HintPath> <HintPath>..\packages\BenchmarkDotNet.0.10.12\lib\net46\BenchmarkDotNet.dll</HintPath>
</Reference> </Reference>
<Reference Include="BenchmarkDotNet.Core, Version=0.10.12.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL"> <Reference Include="BenchmarkDotNet.Core, Version=0.10.12.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
<HintPath>..\packages\BenchmarkDotNet.Core.0.10.12\lib\net46\BenchmarkDotNet.Core.dll</HintPath> <HintPath>..\packages\BenchmarkDotNet.Core.0.10.12\lib\net46\BenchmarkDotNet.Core.dll</HintPath>
@@ -49,27 +48,20 @@
<Reference Include="BenchmarkDotNet.Diagnostics.Windows, Version=0.9.9.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL"> <Reference Include="BenchmarkDotNet.Diagnostics.Windows, Version=0.9.9.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
<HintPath>..\packages\BenchmarkDotNet.Diagnostics.Windows.0.9.9\lib\net45\BenchmarkDotNet.Diagnostics.Windows.dll</HintPath> <HintPath>..\packages\BenchmarkDotNet.Diagnostics.Windows.0.9.9\lib\net45\BenchmarkDotNet.Diagnostics.Windows.dll</HintPath>
</Reference> </Reference>
<Reference Include="BenchmarkDotNet.Toolchains.Roslyn, Version=0.10.3.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL"> <Reference Include="BenchmarkDotNet.Toolchains.Roslyn, Version=0.10.12.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
<HintPath>..\packages\BenchmarkDotNet.Toolchains.Roslyn.0.10.3\lib\net45\BenchmarkDotNet.Toolchains.Roslyn.dll</HintPath> <HintPath>..\packages\BenchmarkDotNet.Toolchains.Roslyn.0.10.12\lib\net46\BenchmarkDotNet.Toolchains.Roslyn.dll</HintPath>
</Reference> </Reference>
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>..\packages\Castle.Core.4.0.0\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.4.0.0\lib\net45\Castle.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="Dia2Lib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.CodeAnalysis, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\lib\net45\Dia2Lib.dll</HintPath> <HintPath>..\packages\Microsoft.CodeAnalysis.Common.2.4.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=2.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath> <HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.2.4.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Diagnostics.Tracing.TraceEvent, Version=1.0.41.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath> <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\lib\net40\Microsoft.Diagnostics.Tracing.TraceEvent.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Diagnostics.FastSerialization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\lib\net45\Microsoft.Diagnostics.FastSerialization.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Diagnostics.Tracing.TraceEvent, Version=2.0.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\lib\net45\Microsoft.Diagnostics.Tracing.TraceEvent.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.DotNet.InternalAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <Reference Include="Microsoft.DotNet.InternalAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.DotNet.InternalAbstractions.1.0.0\lib\net451\Microsoft.DotNet.InternalAbstractions.dll</HintPath> <HintPath>..\packages\Microsoft.DotNet.InternalAbstractions.1.0.0\lib\net451\Microsoft.DotNet.InternalAbstractions.dll</HintPath>
@@ -77,28 +69,24 @@
<Reference Include="Microsoft.DotNet.PlatformAbstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <Reference Include="Microsoft.DotNet.PlatformAbstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.DotNet.PlatformAbstractions.1.1.1\lib\net451\Microsoft.DotNet.PlatformAbstractions.dll</HintPath> <HintPath>..\packages\Microsoft.DotNet.PlatformAbstractions.1.1.1\lib\net451\Microsoft.DotNet.PlatformAbstractions.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Win32.Registry, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.Win32.Registry, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath> <HintPath>..\packages\Microsoft.Win32.Registry.4.3.0\lib\net46\Microsoft.Win32.Registry.dll</HintPath>
</Reference> </Reference>
<Reference Include="Moq, Version=4.1.1309.919, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.1.1309.919, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.1.1309.0919\lib\net40\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.1.1309.0919\lib\net40\Moq.dll</HintPath>
</Reference> </Reference>
<Reference Include="OSExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\lib\net45\OSExtensions.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath> <HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll</HintPath> <HintPath>..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath> <HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
@@ -125,33 +113,11 @@
</Reference> </Reference>
<Reference Include="System.Management" /> <Reference Include="System.Management" />
<Reference Include="System.Numerics" /> <Reference Include="System.Numerics" />
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Reflection.Metadata, Version=1.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath> <HintPath>..\packages\System.Reflection.Metadata.1.4.2\lib\portable-net45+win8\System.Reflection.Metadata.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Reflection.Metadata, Version=1.4.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Security.Cryptography.Algorithms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll</HintPath> <HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net46\System.Security.Cryptography.Algorithms.dll</HintPath>
</Reference>
<Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Extensions, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.InteropServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net462\System.Runtime.InteropServices.dll</HintPath>
</Reference>
<Reference Include="System.Security.AccessControl, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.4.5.0\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -160,25 +126,21 @@
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath> <HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Security.Cryptography.X509Certificates, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath> <HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net46\System.Security.Cryptography.X509Certificates.dll</HintPath>
<Private>True</Private>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Text.Encoding.CodePages, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Principal.Windows.4.5.0\lib\net461\System.Security.Principal.Windows.dll</HintPath> <HintPath>..\packages\System.Text.Encoding.CodePages.4.3.0\lib\net46\System.Text.Encoding.CodePages.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Threading.Tasks.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.4.5.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath> <HintPath>..\packages\System.Threading.Tasks.Extensions.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Threading.Thread, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Threading.Thread, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll</HintPath> <HintPath>..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath> <HintPath>..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
@@ -187,9 +149,7 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath> <HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll</HintPath> <HintPath>..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll</HintPath>
@@ -200,10 +160,6 @@
<Reference Include="System.Xml.XPath.XDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Xml.XPath.XDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll</HintPath> <HintPath>..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll</HintPath>
</Reference> </Reference>
<Reference Include="TraceReloggerLib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\lib\net45\TraceReloggerLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ConcurrentDictionaryBenchmarks.cs" /> <Compile Include="ConcurrentDictionaryBenchmarks.cs" />
@@ -239,10 +195,6 @@
<Name>Umbraco.Web</Name> <Name>Umbraco.Web</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.6.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.6.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<PostBuildEvent> <PostBuildEvent>
@@ -255,11 +207,12 @@
<PreBuildEvent>xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\amd64\*.* "$(TargetDir)amd64\" /Y /F /E /I /C /D <PreBuildEvent>xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\amd64\*.* "$(TargetDir)amd64\" /Y /F /E /I /C /D
xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\" /Y /F /E /I /C /D</PreBuildEvent> xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\" /Y /F /E /I /C /D</PreBuildEvent>
</PropertyGroup> </PropertyGroup>
<Import Project="..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\build\Microsoft.Diagnostics.Tracing.TraceEvent.targets" Condition="Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\build\Microsoft.Diagnostics.Tracing.TraceEvent.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\build\Microsoft.Diagnostics.Tracing.TraceEvent.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.26\build\Microsoft.Diagnostics.Tracing.TraceEvent.props'))" /> <Error Condition="!Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\build\Microsoft.Diagnostics.Tracing.TraceEvent.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\build\Microsoft.Diagnostics.Tracing.TraceEvent.targets'))" />
</Target> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
+10 -62
View File
@@ -4,11 +4,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" /> <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" /> <bindingRedirect oldVersion="0.0.0.0-1.2.1.0" newVersion="1.2.1.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" /> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
@@ -16,27 +16,27 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -64,60 +64,8 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeAnalysis" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeAnalysis.CSharp" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Diagnostics.Tracing.TraceEvent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.26.0" newVersion="2.0.26.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /></startup></configuration> </configuration>
+23 -27
View File
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="BenchmarkDotNet" version="0.10.3" targetFramework="net462" /> <package id="BenchmarkDotNet" version="0.10.12" targetFramework="net46" />
<package id="BenchmarkDotNet.Core" version="0.10.12" targetFramework="net46" /> <package id="BenchmarkDotNet.Core" version="0.10.12" targetFramework="net46" />
<package id="BenchmarkDotNet.Diagnostics.Windows" version="0.9.9" targetFramework="net45" /> <package id="BenchmarkDotNet.Diagnostics.Windows" version="0.9.9" targetFramework="net45" />
<package id="BenchmarkDotNet.Toolchains.Roslyn" version="0.10.3" targetFramework="net462" /> <package id="BenchmarkDotNet.Toolchains.Roslyn" version="0.10.12" targetFramework="net46" />
<package id="Castle.Core" version="4.0.0" targetFramework="net45" /> <package id="Castle.Core" version="4.0.0" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="2.6.2" targetFramework="net462" developmentDependency="true" /> <package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis.Common" version="2.9.0" targetFramework="net462" /> <package id="Microsoft.CodeAnalysis.Common" version="2.4.0" targetFramework="net46" />
<package id="Microsoft.CodeAnalysis.CSharp" version="2.9.0" targetFramework="net462" /> <package id="Microsoft.CodeAnalysis.CSharp" version="2.4.0" targetFramework="net46" />
<package id="Microsoft.Diagnostics.Tracing.TraceEvent" version="2.0.26" targetFramework="net462" /> <package id="Microsoft.Diagnostics.Tracing.TraceEvent" version="1.0.41" targetFramework="net45" />
<package id="Microsoft.DotNet.InternalAbstractions" version="1.0.0" targetFramework="net46" /> <package id="Microsoft.DotNet.InternalAbstractions" version="1.0.0" targetFramework="net46" />
<package id="Microsoft.DotNet.PlatformAbstractions" version="1.1.1" targetFramework="net46" /> <package id="Microsoft.DotNet.PlatformAbstractions" version="1.1.1" targetFramework="net46" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8854.1" targetFramework="net45" /> <package id="Microsoft.SqlServer.Compact" version="4.0.8854.1" targetFramework="net45" />
<package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net462" /> <package id="Microsoft.Win32.Registry" version="4.3.0" targetFramework="net46" />
<package id="Moq" version="4.1.1309.0919" targetFramework="net45" /> <package id="Moq" version="4.1.1309.0919" targetFramework="net45" />
<package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" /> <package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" />
<package id="System.AppContext" version="4.3.0" targetFramework="net46" /> <package id="System.AppContext" version="4.3.0" targetFramework="net46" />
<package id="System.Collections" version="4.3.0" targetFramework="net46" /> <package id="System.Collections" version="4.3.0" targetFramework="net46" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net46" /> <package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net46" />
<package id="System.Collections.Immutable" version="1.5.0" targetFramework="net462" /> <package id="System.Collections.Immutable" version="1.3.1" targetFramework="net46" />
<package id="System.Console" version="4.3.1" targetFramework="net462" /> <package id="System.Console" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net46" /> <package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.FileVersionInfo" version="4.3.0" targetFramework="net46" /> <package id="System.Diagnostics.FileVersionInfo" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.StackTrace" version="4.3.0" targetFramework="net46" /> <package id="System.Diagnostics.StackTrace" version="4.3.0" targetFramework="net46" />
@@ -31,32 +31,28 @@
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net46" /> <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Linq" version="4.3.0" targetFramework="net46" /> <package id="System.Linq" version="4.3.0" targetFramework="net46" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net46" /> <package id="System.Linq.Expressions" version="4.3.0" targetFramework="net46" />
<package id="System.Reflection" version="4.3.0" targetFramework="net462" /> <package id="System.Reflection" version="4.3.0" targetFramework="net46" />
<package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net462" /> <package id="System.Reflection.Metadata" version="1.4.2" targetFramework="net46" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net462" /> <package id="System.Reflection.Primitives" version="4.0.1" targetFramework="net45" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net46" /> <package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime" version="4.3.1" targetFramework="net462" /> <package id="System.Runtime" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.1" targetFramework="net462" /> <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net462" /> <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net462" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net462" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net46" /> <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net46" />
<package id="System.Security.AccessControl" version="4.5.0" targetFramework="net462" /> <package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net462" /> <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net462" /> <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net462" /> <package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net462" />
<package id="System.Security.Principal.Windows" version="4.5.0" targetFramework="net462" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net46" /> <package id="System.Text.Encoding" version="4.3.0" targetFramework="net46" />
<package id="System.Text.Encoding.CodePages" version="4.5.0" targetFramework="net462" /> <package id="System.Text.Encoding.CodePages" version="4.3.0" targetFramework="net46" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net46" /> <package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Threading" version="4.3.0" targetFramework="net46" /> <package id="System.Threading" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net46" /> <package id="System.Threading.Tasks" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Tasks.Extensions" version="4.5.1" targetFramework="net462" /> <package id="System.Threading.Tasks.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Tasks.Parallel" version="4.3.0" targetFramework="net46" /> <package id="System.Threading.Tasks.Parallel" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Thread" version="4.3.0" targetFramework="net46" /> <package id="System.Threading.Thread" version="4.3.0" targetFramework="net46" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" /> <package id="System.ValueTuple" version="4.4.0" targetFramework="net46" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net462" /> <package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net46" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net46" /> <package id="System.Xml.XDocument" version="4.3.0" targetFramework="net46" />
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="net46" /> <package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="net46" />
<package id="System.Xml.XmlSerializer" version="4.3.0" targetFramework="net46" /> <package id="System.Xml.XmlSerializer" version="4.3.0" targetFramework="net46" />
+7 -7
View File
@@ -102,14 +102,14 @@
</system.web> </system.web>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup> </startup>
<runtime> <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -123,7 +123,7 @@
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly> </dependentAssembly>
@@ -141,19 +141,19 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -83,7 +83,7 @@ namespace Umbraco.Tests.CodeFirst
new PublishedPropertyType("articleDate", 0, "?"), new PublishedPropertyType("articleDate", 0, "?"),
new PublishedPropertyType("pageTitle", 0, "?"), new PublishedPropertyType("pageTitle", 0, "?"),
}; };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", propertyTypes); var type = new AutoPublishedContentType(0, "anything", propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
Debug.Print("INIT STRONG {0}", Debug.Print("INIT STRONG {0}",
PublishedContentType.Get(PublishedItemType.Content, "anything") PublishedContentType.Get(PublishedItemType.Content, "anything")
+1 -1
View File
@@ -43,7 +43,7 @@ namespace Umbraco.Tests
// AutoPublishedContentType will auto-generate other properties // AutoPublishedContentType will auto-generate other properties
new PublishedPropertyType("content", 0, "?"), new PublishedPropertyType("content", 0, "?"),
}; };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", propertyTypes); var type = new AutoPublishedContentType(0, "anything", propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
Debug.Print("INIT LIB {0}", Debug.Print("INIT LIB {0}",
PublishedContentType.Get(PublishedItemType.Content, "anything") PublishedContentType.Get(PublishedItemType.Content, "anything")
@@ -41,7 +41,7 @@ namespace Umbraco.Tests.Membership
new PublishedPropertyType("bodyText", 0, "?"), new PublishedPropertyType("bodyText", 0, "?"),
new PublishedPropertyType("author", 0, "?") new PublishedPropertyType("author", 0, "?")
}; };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", propertyTypes); var type = new AutoPublishedContentType(0, "anything", propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
} }
@@ -19,7 +19,7 @@ namespace Umbraco.Tests.Migrations.SqlScripts {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class SqlResources { internal class SqlResources {
@@ -178,6 +178,17 @@ namespace Umbraco.Tests.Models
item.AdditionalData.Add("test1", 3); item.AdditionalData.Add("test1", 3);
item.AdditionalData.Add("test2", "valuie"); item.AdditionalData.Add("test2", "valuie");
item.AdditionalData.Add("test3", new UmbracoEntity.EntityProperty()
{
Value = "test",
PropertyEditorAlias = "TestPropertyEditor"
});
item.AdditionalData.Add("test4", new UmbracoEntity.EntityProperty()
{
Value = "test2",
PropertyEditorAlias = "TestPropertyEditor2"
});
var clone = (UmbracoEntity)item.DeepClone(); var clone = (UmbracoEntity)item.DeepClone();
Assert.AreNotSame(clone, item); Assert.AreNotSame(clone, item);
@@ -239,6 +250,16 @@ namespace Umbraco.Tests.Models
}; };
item.AdditionalData.Add("test1", 3); item.AdditionalData.Add("test1", 3);
item.AdditionalData.Add("test2", "valuie"); item.AdditionalData.Add("test2", "valuie");
item.AdditionalData.Add("test3", new UmbracoEntity.EntityProperty()
{
Value = "test",
PropertyEditorAlias = "TestPropertyEditor"
});
item.AdditionalData.Add("test4", new UmbracoEntity.EntityProperty()
{
Value = "test2",
PropertyEditorAlias = "TestPropertyEditor2"
});
var result = ss.ToStream(item); var result = ss.ToStream(item);
var json = result.ResultStream.ToJsonString(); var json = result.ResultStream.ToJsonString();
@@ -327,7 +327,7 @@ AnotherContentFinder
public void Resolves_RestExtensions() public void Resolves_RestExtensions()
{ {
var types = _manager.ResolveRestExtensions(); var types = _manager.ResolveRestExtensions();
Assert.AreEqual(2, types.Count()); Assert.AreEqual(3, types.Count());
} }
[Test] [Test]
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.PublishedContent
new PublishedPropertyType("creatorName", 0, "?"), new PublishedPropertyType("creatorName", 0, "?"),
new PublishedPropertyType("blah", 0, "?"), // ugly error when that one is missing... new PublishedPropertyType("blah", 0, "?"), // ugly error when that one is missing...
}; };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", propertyTypes); var type = new AutoPublishedContentType(0, "anything", propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
} }
@@ -24,7 +24,7 @@ namespace Umbraco.Tests.PublishedContent
// need to specify a custom callback for unit tests // need to specify a custom callback for unit tests
// AutoPublishedContentTypes generates properties automatically // AutoPublishedContentTypes generates properties automatically
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", new PublishedPropertyType[] {}); var type = new AutoPublishedContentType(0, "anything", new PublishedPropertyType[] {});
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
// need to specify a different callback for testing // need to specify a different callback for testing
@@ -234,9 +234,9 @@ namespace Umbraco.Tests.PublishedContent
new PublishedPropertyType("prop1", 1, "?"), new PublishedPropertyType("prop1", 1, "?"),
}; };
var contentType1 = new PublishedContentType(1, "ContentType1", "ContentType1", "ContentType1", Enumerable.Empty<string>(), props); var contentType1 = new PublishedContentType(1, "ContentType1", Enumerable.Empty<string>(), props);
var contentType2 = new PublishedContentType(2, "ContentType2", "ContentType2", "ContentType2", Enumerable.Empty<string>(), props); var contentType2 = new PublishedContentType(2, "ContentType2", Enumerable.Empty<string>(), props);
var contentType2s = new PublishedContentType(3, "ContentType2Sub", "ContentType2Sub", "ContentType2Sub", Enumerable.Empty<string>(), props); var contentType2s = new PublishedContentType(3, "ContentType2Sub", Enumerable.Empty<string>(), props);
cache.Add(new SolidPublishedContent(contentType1) cache.Add(new SolidPublishedContent(contentType1)
{ {
@@ -29,7 +29,7 @@ namespace Umbraco.Tests.PublishedContent
// AutoPublishedContentType will auto-generate other properties // AutoPublishedContentType will auto-generate other properties
new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias), new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias),
}; };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", propertyTypes); var type = new AutoPublishedContentType(0, "anything", propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
var rCtx = GetRoutingContext("/test", 1234); var rCtx = GetRoutingContext("/test", 1234);
@@ -354,12 +354,12 @@ namespace Umbraco.Tests.PublishedContent
{ {
private static readonly PublishedPropertyType Default = new PublishedPropertyType("*", 0, "?"); private static readonly PublishedPropertyType Default = new PublishedPropertyType("*", 0, "?");
public AutoPublishedContentType(int id, string alias, string name, string description, IEnumerable<PublishedPropertyType> propertyTypes) public AutoPublishedContentType(int id, string alias, IEnumerable<PublishedPropertyType> propertyTypes)
: base(id, alias, name, description, Enumerable.Empty<string>(), propertyTypes) : base(id, alias, Enumerable.Empty<string>(), propertyTypes)
{ } { }
public AutoPublishedContentType(int id, string alias, string name, string description, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes) public AutoPublishedContentType(int id, string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes)
: base(id, alias, name, description, compositionAliases, propertyTypes) : base(id, alias, compositionAliases, propertyTypes)
{ } { }
public override PublishedPropertyType GetPropertyType(string alias) public override PublishedPropertyType GetPropertyType(string alias)
@@ -49,7 +49,7 @@ namespace Umbraco.Tests.PublishedContent
new PublishedPropertyType("testRecursive", 0, "?"), new PublishedPropertyType("testRecursive", 0, "?"),
}; };
var compositionAliases = new[] { "MyCompositionAlias" }; var compositionAliases = new[] { "MyCompositionAlias" };
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", compositionAliases, propertyTypes); var type = new AutoPublishedContentType(0, "anything", compositionAliases, propertyTypes);
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
} }
@@ -515,6 +515,12 @@ namespace Umbraco.Tests.Services
Assert.That(entities.Any(), Is.True); Assert.That(entities.Any(), Is.True);
Assert.That(entities.Count(), Is.EqualTo(5)); Assert.That(entities.Count(), Is.EqualTo(5));
Assert.That(
entities.Any(
x =>
x.AdditionalData.Any(y => y.Value is UmbracoEntity.EntityProperty
&& ((UmbracoEntity.EntityProperty)y.Value).PropertyEditorAlias == Constants.PropertyEditors.UploadFieldAlias)), Is.True);
} }
[Test] [Test]
@@ -19,7 +19,7 @@ namespace Umbraco.Tests.Services.Importing {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ImportResources { internal class ImportResources {
@@ -322,7 +322,7 @@ namespace Umbraco.Tests.Services.Importing {
/// &lt;/package&gt; /// &lt;/package&gt;
/// &lt;author&gt; /// &lt;author&gt;
/// &lt;name&gt;Morten Christensen&lt;/name&gt; /// &lt;name&gt;Morten Christensen&lt;/name&gt;
/// [rest of string was truncated]&quot;;. /// [rest of string was truncated]&quot;;.
/// </summary> /// </summary>
internal static string TemplateOnly_Package { internal static string TemplateOnly_Package {
get { get {
@@ -348,7 +348,7 @@ namespace Umbraco.Tests.Services.Importing {
/// &lt;/package&gt; /// &lt;/package&gt;
/// &lt;author&gt; /// &lt;author&gt;
/// &lt;name&gt;Morten Christensen&lt;/name&gt; /// &lt;name&gt;Morten Christensen&lt;/name&gt;
/// [rest of string was truncated]&quot;;. /// [rest of string was truncated]&quot;;.
/// </summary> /// </summary>
internal static string TemplateOnly_Updated_Package { internal static string TemplateOnly_Updated_Package {
get { get {
@@ -1,39 +0,0 @@
using System;
using System.Linq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
namespace Umbraco.Tests.Services
{
[DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)]
[TestFixture, RequiresSTA]
public class MemberGroupServiceTests : BaseServiceTest
{
[SetUp]
public override void Initialize()
{
base.Initialize();
}
[TearDown]
public override void TearDown()
{
base.TearDown();
}
[Test]
[ExpectedException("System.InvalidOperationException")]
public void New_MemberGroup_Is_Not_Allowed_With_Empty_Name()
{
var service = ServiceContext.MemberGroupService;
service.Save(new MemberGroup {Name = ""});
Assert.Fail("An exception should have been thrown");
}
}
}
@@ -61,17 +61,6 @@ namespace Umbraco.Tests.Strings
Assert.AreEqual(stripped, result); Assert.AreEqual(stripped, result);
} }
[TestCase("'+alert(1234)+'", "+alert1234+")]
[TestCase("'+alert(56+78)+'", "+alert56+78+")]
[TestCase("{{file}}", "file")]
[TestCase("'+alert('hello')+'", "+alerthello+")]
[TestCase("Test", "Test")]
public void Clean_From_XSS(string input, string result)
{
var cleaned = input.CleanForXss();
Assert.AreEqual(cleaned, result);
}
[TestCase("This is a string to encrypt")] [TestCase("This is a string to encrypt")]
[TestCase("This is a string to encrypt\nThis is a second line")] [TestCase("This is a string to encrypt\nThis is a second line")]
[TestCase(" White space is preserved ")] [TestCase(" White space is preserved ")]
+1 -1
View File
@@ -15,7 +15,7 @@ namespace Umbraco.Tests.TestHelpers
// need to specify a custom callback for unit tests // need to specify a custom callback for unit tests
// AutoPublishedContentTypes generates properties automatically // AutoPublishedContentTypes generates properties automatically
var type = new AutoPublishedContentType(0, "anything", "anything", "anything", new PublishedPropertyType[] {}); var type = new AutoPublishedContentType(0, "anything", new PublishedPropertyType[] {});
PublishedContentType.GetPublishedContentTypeCallback = (alias) => type; PublishedContentType.GetPublishedContentTypeCallback = (alias) => type;
} }
@@ -19,7 +19,7 @@ namespace Umbraco.Tests.TreesAndSections {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ResourceFiles { internal class ResourceFiles {
+36 -44
View File
@@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Umbraco.Tests</RootNamespace> <RootNamespace>Umbraco.Tests</RootNamespace>
<AssemblyName>Umbraco.Tests</AssemblyName> <AssemblyName>Umbraco.Tests</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages> <RestorePackages>true</RestorePackages>
@@ -65,12 +65,6 @@
<Reference Include="Examine, Version=0.1.89.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Examine, Version=0.1.89.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.89\lib\net45\Examine.dll</HintPath> <HintPath>..\packages\Examine.0.1.89\lib\net45\Examine.dll</HintPath>
</Reference> </Reference>
<Reference Include="HtmlAgilityPack, Version=1.8.8.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.8.8\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="Examine, Version=0.1.90.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.90\lib\net45\Examine.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference> </Reference>
@@ -84,25 +78,25 @@
<HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath> <HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Host.HttpListener, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Host.HttpListener, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Host.HttpListener.4.0.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Host.HttpListener.3.1.0\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Host.SystemWeb, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Host.SystemWeb, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.4.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.3.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Hosting, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Hosting, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Hosting.4.0.1\lib\net45\Microsoft.Owin.Hosting.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Hosting.3.1.0\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Security, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Security, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Security.3.1.0\lib\net45\Microsoft.Owin.Security.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Owin.Testing, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Testing, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Testing.4.0.1\lib\net45\Microsoft.Owin.Testing.dll</HintPath> <HintPath>..\packages\Microsoft.Owin.Testing.3.1.0\lib\net45\Microsoft.Owin.Testing.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath> <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
@@ -113,8 +107,8 @@
<Reference Include="Moq, Version=4.1.1309.919, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.1.1309.919, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.1.1309.0919\lib\net40\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.1.1309.0919\lib\net40\Moq.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=2.6.2.12296, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=2.6.2.12296, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.2.6.2\lib\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.2.6.2\lib\nunit.framework.dll</HintPath>
@@ -123,7 +117,7 @@
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath> <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="Semver, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Semver, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath> <HintPath>..\packages\semver.1.1.2\lib\net45\Semver.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.ComponentModel.Composition" />
@@ -139,8 +133,8 @@
</Reference> </Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Runtime.Caching" /> <Reference Include="System.Runtime.Caching" />
@@ -148,38 +142,38 @@
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" /> <Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Http, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Http.Owin, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Http.Owin, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.7\lib\net45\System.Web.Http.Owin.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Http.SelfHost, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Http.SelfHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.SelfHost.5.2.7\lib\net45\System.Web.Http.SelfHost.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.SelfHost.5.2.3\lib\net45\System.Web.Http.SelfHost.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Http.Tracing, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Http.Tracing, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.7\lib\net45\System.Web.Http.Tracing.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.Tracing.5.2.3\lib\net45\System.Web.Http.Tracing.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Http.WebHost, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.Services" /> <Reference Include="System.Web.Services" />
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath> <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
@@ -199,7 +193,6 @@
<Compile Include="PublishedContent\StronglyTypedModels\Home.cs" /> <Compile Include="PublishedContent\StronglyTypedModels\Home.cs" />
<Compile Include="Services\AuditServiceTests.cs" /> <Compile Include="Services\AuditServiceTests.cs" />
<Compile Include="Services\ConsentServiceTests.cs" /> <Compile Include="Services\ConsentServiceTests.cs" />
<Compile Include="Services\MemberGroupServiceTests.cs" />
<Compile Include="TestHelpers\ControllerTesting\AuthenticateEverythingExtensions.cs" /> <Compile Include="TestHelpers\ControllerTesting\AuthenticateEverythingExtensions.cs" />
<Compile Include="TestHelpers\ControllerTesting\AuthenticateEverythingMiddleware.cs" /> <Compile Include="TestHelpers\ControllerTesting\AuthenticateEverythingMiddleware.cs" />
<Compile Include="TestHelpers\ControllerTesting\SpecificAssemblyResolver.cs" /> <Compile Include="TestHelpers\ControllerTesting\SpecificAssemblyResolver.cs" />
@@ -398,7 +391,6 @@
<Compile Include="Models\ContentExtensionsTests.cs" /> <Compile Include="Models\ContentExtensionsTests.cs" />
<Compile Include="Models\UserExtensionsTests.cs" /> <Compile Include="Models\UserExtensionsTests.cs" />
<Compile Include="Web\Mvc\MergeParentContextViewDataAttributeTests.cs" /> <Compile Include="Web\Mvc\MergeParentContextViewDataAttributeTests.cs" />
<Compile Include="Web\Mvc\ValidateUmbracoFormRouteStringAttributeTests.cs" />
<Compile Include="Web\Mvc\ViewDataDictionaryExtensionTests.cs" /> <Compile Include="Web\Mvc\ViewDataDictionaryExtensionTests.cs" />
<Compile Include="Persistence\PetaPocoExtensionsTest.cs" /> <Compile Include="Persistence\PetaPocoExtensionsTest.cs" />
<Compile Include="Persistence\Querying\ContentTypeSqlMappingTests.cs" /> <Compile Include="Persistence\Querying\ContentTypeSqlMappingTests.cs" />
+1 -1
View File
@@ -19,7 +19,7 @@ namespace Umbraco.Tests.UmbracoExamine {
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class TestFiles { internal class TestFiles {
@@ -4,8 +4,7 @@ using Umbraco.Web;
namespace Umbraco.Tests.Web.Mvc namespace Umbraco.Tests.Web.Mvc
{ {
[TestFixture]
[TestFixture]
public class HtmlHelperExtensionMethodsTests public class HtmlHelperExtensionMethodsTests
{ {
[SetUp] [SetUp]
@@ -30,30 +29,5 @@ namespace Umbraco.Tests.Web.Mvc
var output = _htmlHelper.Wrap("div", "hello world", new {style = "color:red;", onclick = "void();"}); var output = _htmlHelper.Wrap("div", "hello world", new {style = "color:red;", onclick = "void();"});
Assert.AreEqual("<div style=\"color:red;\" onclick=\"void();\">hello world</div>", output.ToHtmlString()); Assert.AreEqual("<div style=\"color:red;\" onclick=\"void();\">hello world</div>", output.ToHtmlString());
} }
}
[Test]
public void GetRelatedLinkHtml_Simple()
{
var relatedLink = new Umbraco.Web.Models.RelatedLink {
Caption = "Link Caption",
NewWindow = true,
Link = "https://www.google.com/"
};
var output = _htmlHelper.GetRelatedLinkHtml(relatedLink);
Assert.AreEqual("<a href=\"https://www.google.com/\" target=\"_blank\">Link Caption</a>", output.ToHtmlString());
}
[Test]
public void GetRelatedLinkHtml_HtmlAttributes()
{
var relatedLink = new Umbraco.Web.Models.RelatedLink
{
Caption = "Link Caption",
NewWindow = true,
Link = "https://www.google.com/"
};
var output = _htmlHelper.GetRelatedLinkHtml(relatedLink, new { @class = "test-class"});
Assert.AreEqual("<a class=\"test-class\" href=\"https://www.google.com/\" target=\"_blank\">Link Caption</a>", output.ToHtmlString());
}
}
} }
@@ -1,37 +0,0 @@
using NUnit.Framework;
using Umbraco.Web;
using Umbraco.Web.Mvc;
namespace Umbraco.Tests.Web.Mvc
{
[TestFixture]
public class ValidateUmbracoFormRouteStringAttributeTests
{
[Test]
public void Validate_Route_String()
{
var attribute = new ValidateUmbracoFormRouteStringAttribute();
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(null, null, null, null));
const string ControllerName = "Test";
const string ControllerAction = "Index";
const string Area = "MyArea";
var validUfprt = UmbracoHelper.CreateEncryptedRouteString(ControllerName, ControllerAction, Area);
var invalidUfprt = validUfprt + "z";
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(invalidUfprt, null, null, null));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, ControllerName, ControllerAction, "doesntMatch"));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, ControllerName, ControllerAction, null));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, ControllerName, "doesntMatch", Area));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, ControllerName, null, Area));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, "doesntMatch", ControllerAction, Area));
Assert.Throws<HttpUmbracoFormRouteStringException>(() => attribute.ValidateRouteString(validUfprt, null, ControllerAction, Area));
Assert.DoesNotThrow(() => attribute.ValidateRouteString(validUfprt, ControllerName, ControllerAction, Area));
Assert.DoesNotThrow(() => attribute.ValidateRouteString(validUfprt, ControllerName.ToLowerInvariant(), ControllerAction.ToLowerInvariant(), Area.ToLowerInvariant()));
}
}
}
+25 -26
View File
@@ -2,42 +2,41 @@
<packages> <packages>
<package id="AutoMapper" version="3.3.1" targetFramework="net45" /> <package id="AutoMapper" version="3.3.1" targetFramework="net45" />
<package id="Castle.Core" version="4.0.0" targetFramework="net45" /> <package id="Castle.Core" version="4.0.0" targetFramework="net45" />
<package id="Examine" version="0.1.90" targetFramework="net45" /> <package id="Examine" version="0.1.89" targetFramework="net45" />
<package id="HtmlAgilityPack" version="1.8.8" targetFramework="net452" />
<package id="log4net" version="2.0.8" targetFramework="net45" /> <package id="log4net" version="2.0.8" targetFramework="net45" />
<package id="Log4Net.Async" version="2.0.4" targetFramework="net45" /> <package id="Log4Net.Async" version="2.0.4" targetFramework="net45" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" /> <package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.2" targetFramework="net452" /> <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net452" /> <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
<package id="Microsoft.Owin" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.HttpListener" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Host.HttpListener" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Host.SystemWeb" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Hosting" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Testing" version="4.0.1" targetFramework="net452" /> <package id="Microsoft.Owin.Testing" version="3.1.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="MiniProfiler" version="2.1.0" targetFramework="net45" /> <package id="MiniProfiler" version="2.1.0" targetFramework="net45" />
<package id="Moq" version="4.1.1309.0919" targetFramework="net45" /> <package id="Moq" version="4.1.1309.0919" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net452" /> <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
<package id="NUnit" version="2.6.2" targetFramework="net45" /> <package id="NUnit" version="2.6.2" targetFramework="net45" />
<package id="NUnitTestAdapter" version="2.1.1" targetFramework="net45" /> <package id="NUnitTestAdapter" version="2.1.1" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" /> <package id="Owin" version="1.0" targetFramework="net45" />
<package id="Selenium.WebDriver" version="2.32.0" targetFramework="net45" /> <package id="Selenium.WebDriver" version="2.32.0" targetFramework="net45" />
<package id="semver" version="1.1.2" targetFramework="net452" /> <package id="semver" version="1.1.2" targetFramework="net45" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net45" /> <package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
<package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" /> <package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" />
<package id="System.Runtime" version="4.3.1" targetFramework="net452" /> <package id="System.Runtime" version="4.3.0" targetFramework="net45" />
<package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net452" /> <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net45" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net452" /> <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net45" />
<package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net452" /> <package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net45" />
</packages> </packages>
+1 -1
View File
@@ -25,7 +25,7 @@
"jquery-migrate": "1.4.0", "jquery-migrate": "1.4.0",
"angular-dynamic-locale": "0.1.28", "angular-dynamic-locale": "0.1.28",
"ng-file-upload": "~7.3.8", "ng-file-upload": "~7.3.8",
"tinymce": "~4.9.4", "tinymce": "~4.7.1",
"codemirror": "~5.3.0", "codemirror": "~5.3.0",
"angular-local-storage": "~0.2.3", "angular-local-storage": "~0.2.3",
"moment": "~2.10.3", "moment": "~2.10.3",
+30 -11
View File
@@ -4146,7 +4146,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@@ -4167,12 +4168,14 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@@ -4187,17 +4190,20 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@@ -4314,7 +4320,8 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@@ -4326,6 +4333,7 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@@ -4340,6 +4348,7 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@@ -4347,12 +4356,14 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.2.4", "version": "2.2.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.1",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@@ -4371,6 +4382,7 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@@ -4451,7 +4463,8 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@@ -4463,6 +4476,7 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@@ -4548,7 +4562,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@@ -4584,6 +4599,7 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@@ -4603,6 +4619,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@@ -4646,12 +4663,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.2", "version": "3.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
@@ -11,7 +11,8 @@ LazyLoad.js([
'../js/umbraco.security.js', '../js/umbraco.security.js',
'../ServerVariables', '../ServerVariables',
'../lib/spectrum/spectrum.js', '../lib/spectrum/spectrum.js',
'../js/umbraco.canvasdesigner.js' '../js/umbraco.canvasdesigner.js',
'../js/canvasdesigner.panel.js'
], function () { ], function () {
jQuery(document).ready(function () { jQuery(document).ready(function () {
angular.bootstrap(document, ['Umbraco.canvasdesigner']); angular.bootstrap(document, ['Umbraco.canvasdesigner']);
@@ -18,7 +18,6 @@
<umb-toggle <umb-toggle
checked="vm.checked" checked="vm.checked"
disabled="vm.disabled"
on-click="vm.toggle()" on-click="vm.toggle()"
show-labels="true" show-labels="true"
label-on="Start" label-on="Start"
@@ -39,7 +38,6 @@
var vm = this; var vm = this;
vm.checked = false; vm.checked = false;
vm.disabled = false;
vm.toggle = toggle; vm.toggle = toggle;
@@ -54,7 +52,6 @@
</pre> </pre>
@param {boolean} checked Set to <code>true</code> or <code>false</code> to toggle the switch. @param {boolean} checked Set to <code>true</code> or <code>false</code> to toggle the switch.
@param {boolean} disabled Set to <code>true</code> or <code>false</code> to disable/enable the switch.
@param {callback} onClick The function which should be called when the toggle is clicked. @param {callback} onClick The function which should be called when the toggle is clicked.
@param {string=} showLabels Set to <code>true</code> or <code>false</code> to show a "On" or "Off" label next to the switch. @param {string=} showLabels Set to <code>true</code> or <code>false</code> to show a "On" or "Off" label next to the switch.
@param {string=} labelOn Set a custom label for when the switched is turned on. It will default to "On". @param {string=} labelOn Set a custom label for when the switched is turned on. It will default to "On".
@@ -118,7 +115,6 @@
templateUrl: 'views/components/buttons/umb-toggle.html', templateUrl: 'views/components/buttons/umb-toggle.html',
scope: { scope: {
checked: "=", checked: "=",
disabled: "=",
onClick: "&", onClick: "&",
labelOn: "@?", labelOn: "@?",
labelOff: "@?", labelOff: "@?",
@@ -53,16 +53,6 @@
if (scope.documentType !== null) { if (scope.documentType !== null) {
scope.previewOpenUrl = '#/settings/documenttypes/edit/' + scope.documentType.id; scope.previewOpenUrl = '#/settings/documenttypes/edit/' + scope.documentType.id;
} }
// only allow configuring scheduled publishing if the user has publish ("U") and unpublish ("Z") permissions on this node
scope.allowScheduledPublishing = _.contains(scope.node.allowedActions, "U") && _.contains(scope.node.allowedActions, "Z");
ensureUniqueUrls();
}
// make sure we don't show duplicate URLs in case multiple URL providers assign the same URLs to the content (see issue 3842 for details)
function ensureUniqueUrls() {
scope.node.urls = _.uniq(scope.node.urls);
} }
scope.auditTrailPageChange = function (pageNumber) { scope.auditTrailPageChange = function (pageNumber) {
@@ -303,12 +293,11 @@
if (!newValue) { return; } if (!newValue) { return; }
if (newValue === oldValue) { return; } if (newValue === oldValue) { return; }
if (isInfoTab) { if(isInfoTab) {
loadAuditTrail(); loadAuditTrail();
loadRedirectUrls(); loadRedirectUrls();
formatDatesToLocal(); formatDatesToLocal();
setNodePublishStatus(scope.node); setNodePublishStatus(scope.node);
ensureUniqueUrls();
} }
}); });
@@ -1,55 +0,0 @@
/**
@ngdoc directive
@name umbraco.directives.directive:umbCheckbox
@restrict E
@scope
@description
<b>Added in Umbraco version 7.14.0</b> Use this directive to render an umbraco checkbox.
<h3>Markup example</h3>
<pre>
<div ng-controller="My.Controller as vm">
<umb-checkbox
name="checkboxlist"
value="{{key}}"
model="true"
text="{{text}}">
</umb-checkbox>
</div>
</pre>
@param {boolean} model Set to <code>true</code> or <code>false</code> to set the checkbox to checked or unchecked.
@param {string} value Set the value of the checkbox.
@param {string} name Set the name of the checkbox.
@param {string} text Set the text for the checkbox label.
**/
(function () {
'use strict';
function CheckboxDirective() {
var directive = {
restrict: 'E',
replace: true,
templateUrl: 'views/components/forms/umb-checkbox.html',
scope: {
model: "=",
value: "@",
name: "@",
text: "@",
required: "="
}
};
return directive;
}
angular.module('umbraco.directives').directive('umbCheckbox', CheckboxDirective);
})();
@@ -1,54 +0,0 @@
/**
@ngdoc directive
@name umbraco.directives.directive:umbRadiobutton
@restrict E
@scope
@description
<b>Added in Umbraco version 7.14.0</b> Use this directive to render an umbraco radio button.
<h3>Markup example</h3>
<pre>
<div ng-controller="My.Controller as vm">
<umb-radiobutton
name="checkboxlist"
value="{{key}}"
model="true"
text="{{text}}">
</umb-radiobutton>
</div>
</pre>
@param {boolean} model Set to <code>true</code> or <code>false</code> to set the radiobutton to checked or unchecked.
@param {string} value Set the value of the radiobutton.
@param {string} name Set the name of the radiobutton.
@param {string} text Set the text for the radiobutton label.
**/
(function () {
'use strict';
function RadiobuttonDirective() {
var directive = {
restrict: 'E',
replace: true,
templateUrl: 'views/components/forms/umb-radiobutton.html',
scope: {
model: "=",
value: "@",
name: "@",
text: "@"
}
};
return directive;
}
angular.module('umbraco.directives').directive('umbRadiobutton', RadiobuttonDirective);
})();
@@ -103,6 +103,34 @@ angular.module("umbraco.directives")
scope.dimensions.cropper.height = _viewPortH; // scope.dimensions.viewport.height - 2 * scope.dimensions.margin; scope.dimensions.cropper.height = _viewPortH; // scope.dimensions.viewport.height - 2 * scope.dimensions.margin;
}; };
//when loading an image without any crop info, we center and fit it
var resizeImageToEditor = function(){
//returns size fitting the cropper
var size = cropperHelper.calculateAspectRatioFit(
scope.dimensions.image.width,
scope.dimensions.image.height,
scope.dimensions.cropper.width,
scope.dimensions.cropper.height,
true);
//sets the image size and updates the scope
scope.dimensions.image.width = size.width;
scope.dimensions.image.height = size.height;
//calculate the best suited ratios
scope.dimensions.scale.min = size.ratio;
scope.dimensions.scale.max = 2;
scope.dimensions.scale.current = size.ratio;
//center the image
var position = cropperHelper.centerInsideViewPort(scope.dimensions.image, scope.dimensions.cropper);
scope.dimensions.top = position.top;
scope.dimensions.left = position.left;
setConstraints();
};
//resize to a given ratio //resize to a given ratio
var resizeImageToScale = function(ratio){ var resizeImageToScale = function(ratio){
//do stuff //do stuff
@@ -199,19 +227,12 @@ angular.module("umbraco.directives")
//set dimensions on image, viewport, cropper etc //set dimensions on image, viewport, cropper etc
setDimensions(image); setDimensions(image);
//create a default crop if we haven't got one already //if we have a crop already position the image
var createDefaultCrop = !scope.crop; if(scope.crop){
if (createDefaultCrop) { resizeImageToCrop();
calculateCropBox(); }else{
} resizeImageToEditor();
}
resizeImageToCrop();
//if we're creating a new crop, make sure to zoom out fully
if (createDefaultCrop) {
scope.dimensions.scale.current = scope.dimensions.scale.min;
resizeImageToScale(scope.dimensions.scale.min);
}
//sets constaints for the cropper //sets constaints for the cropper
setConstraints(); setConstraints();
@@ -232,7 +253,7 @@ angular.module("umbraco.directives")
var throttledResizing = _.throttle(function(){ var throttledResizing = _.throttle(function(){
resizeImageToScale(scope.dimensions.scale.current); resizeImageToScale(scope.dimensions.scale.current);
calculateCropBox(); calculateCropBox();
}, 16); }, 100);
//happens when we change the scale //happens when we change the scale
@@ -14,8 +14,7 @@ angular.module("umbraco.directives")
scope: { scope: {
src: '=', src: '=',
center: "=", center: "=",
onImageLoaded: "&", onImageLoaded: "&"
onGravityChanged: "&"
}, },
link: function(scope, element, attrs) { link: function(scope, element, attrs) {
@@ -35,7 +34,7 @@ angular.module("umbraco.directives")
var $overlay = element.find(".overlay"); var $overlay = element.find(".overlay");
scope.style = function () { scope.style = function () {
if (scope.dimensions.width <= 0 || scope.dimensions.height <= 0) { if (scope.dimensions.width <= 0) {
setDimensions(); setDimensions();
} }
@@ -53,7 +52,7 @@ angular.module("umbraco.directives")
calculateGravity(offsetX, offsetY); calculateGravity(offsetX, offsetY);
gravityChanged(); lazyEndEvent();
}; };
var setDimensions = function () { var setDimensions = function () {
@@ -78,11 +77,12 @@ angular.module("umbraco.directives")
scope.center.top = (scope.dimensions.top+10) / scope.dimensions.height; scope.center.top = (scope.dimensions.top+10) / scope.dimensions.height;
}; };
var gravityChanged = function () { var lazyEndEvent = _.debounce(function(){
if (angular.isFunction(scope.onGravityChanged)) { scope.$apply(function(){
scope.onGravityChanged(); scope.$emit("imageFocalPointStop");
} });
}; }, 2000);
//Drag and drop positioning, using jquery ui draggable //Drag and drop positioning, using jquery ui draggable
//TODO ensure that the point doesnt go outside the box //TODO ensure that the point doesnt go outside the box
@@ -100,7 +100,7 @@ angular.module("umbraco.directives")
calculateGravity(offsetX, offsetY); calculateGravity(offsetX, offsetY);
}); });
gravityChanged(); lazyEndEvent();
} }
}); });
@@ -266,11 +266,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat
treeService.syncTree({ treeService.syncTree({
node: treeNode, node: treeNode,
path: path, path: path,
forceReload: forceReload, forceReload: forceReload
//when the tree node is expanding during sync tree, handle it and raise appropriate events
treeNodeExpanded: function (args) {
emitEvent("treeNodeExpanded", { tree: scope.tree, node: args.node, children: args.children });
}
}).then(function (data) { }).then(function (data) {
if (activate === undefined || activate === true) { if (activate === undefined || activate === true) {
@@ -12,7 +12,6 @@ function treeSearchBox(localizationService, searchService, $q) {
searchFromName: "@", searchFromName: "@",
showSearch: "@", showSearch: "@",
section: "@", section: "@",
datatypeId: "@",
hideSearchCallback: "=", hideSearchCallback: "=",
searchCallback: "=" searchCallback: "="
}, },
@@ -35,7 +34,6 @@ function treeSearchBox(localizationService, searchService, $q) {
scope.showSearch = "false"; scope.showSearch = "false";
} }
//used to cancel any request in progress if another one needs to take it's place //used to cancel any request in progress if another one needs to take it's place
var canceler = null; var canceler = null;
@@ -62,11 +60,6 @@ function treeSearchBox(localizationService, searchService, $q) {
searchArgs["searchFrom"] = scope.searchFromId; searchArgs["searchFrom"] = scope.searchFromId;
} }
//append dataTypeId value if there is one
if (scope.datatypeId) {
searchArgs["dataTypeId"] = scope.datatypeId;
}
searcher(searchArgs).then(function (data) { searcher(searchArgs).then(function (data) {
scope.searchCallback(data); scope.searchCallback(data);
//set back to null so it can be re-created //set back to null so it can be re-created
@@ -86,21 +86,20 @@ angular.module("umbraco.directives")
function generateAlias(value) { function generateAlias(value) {
if (generateAliasTimeout) { if (generateAliasTimeout) {
$timeout.cancel(generateAliasTimeout); $timeout.cancel(generateAliasTimeout);
} }
if (value !== undefined && value !== "" && value !== null) { if( value !== undefined && value !== "" && value !== null) {
scope.alias = ""; scope.alias = "";
scope.placeholderText = scope.labels.busy; scope.placeholderText = scope.labels.busy;
generateAliasTimeout = $timeout(function () { generateAliasTimeout = $timeout(function () {
updateAlias = true; updateAlias = true;
entityResource.getSafeAlias(encodeURIComponent(value), true).then(function (safeAlias) { entityResource.getSafeAlias(encodeURIComponent(value), true).then(function (safeAlias) {
if (updateAlias) { if (updateAlias) {
scope.alias = safeAlias.alias; scope.alias = safeAlias.alias;
} }
scope.placeholderText = scope.labels.idle;
}); });
}, 500); }, 500);
@@ -109,6 +108,7 @@ angular.module("umbraco.directives")
scope.alias = ""; scope.alias = "";
scope.placeholderText = scope.labels.idle; scope.placeholderText = scope.labels.idle;
} }
} }
// if alias gets unlocked - stop watching alias // if alias gets unlocked - stop watching alias
@@ -119,17 +119,17 @@ angular.module("umbraco.directives")
})); }));
// validate custom entered alias // validate custom entered alias
eventBindings.push(scope.$watch('alias', function (newValue, oldValue) { eventBindings.push(scope.$watch('alias', function(newValue, oldValue){
if (scope.alias === "" || scope.alias === null || scope.alias === undefined) {
if (bindWatcher === true) { if(scope.alias === "" && bindWatcher === true || scope.alias === null && bindWatcher === true) {
// add watcher // add watcher
eventBindings.push(scope.$watch('aliasFrom', function (newValue, oldValue) { eventBindings.push(scope.$watch('aliasFrom', function(newValue, oldValue) {
if (bindWatcher) { if(bindWatcher) {
generateAlias(newValue); generateAlias(newValue);
} }
})); }));
} }
}
})); }));
// clean up // clean up
@@ -38,7 +38,7 @@ Use this directive to generate color swatches to pick from.
scope.selectedColor = color; scope.selectedColor = color;
if (scope.onSelect) { if (scope.onSelect) {
scope.onSelect({color: color }); scope.onSelect(color);
} }
}; };
} }
@@ -3,7 +3,7 @@
* @name umbraco.resources.codefileResource * @name umbraco.resources.codefileResource
* @description Loads in data for files that contain code such as js scripts, partial views and partial view macros * @description Loads in data for files that contain code such as js scripts, partial views and partial view macros
**/ **/
function codefileResource($q, $http, umbDataFormatter, umbRequestHelper, localizationService) { function codefileResource($q, $http, umbDataFormatter, umbRequestHelper) {
return { return {
@@ -106,16 +106,13 @@ function codefileResource($q, $http, umbDataFormatter, umbRequestHelper, localiz
* *
*/ */
deleteByPath: function (type, virtualpath) { deleteByPath: function (type, virtualpath) {
var promise = localizationService.localize("codefile_deleteItemFailed", [virtualpath]);
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post( $http.post(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"codeFileApiBaseUrl", "codeFileApiBaseUrl",
"Delete", "Delete",
[{ type: type }, { virtualPath: virtualpath}])), [{ type: type }, { virtualPath: virtualpath}])),
promise); "Failed to delete item: " + virtualpath);
}, },
/** /**
@@ -239,19 +236,13 @@ function codefileResource($q, $http, umbDataFormatter, umbRequestHelper, localiz
* *
*/ */
createContainer: function (type, parentId, name) { createContainer: function(type, parentId, name) {
// Is the parent ID numeric?
var key = "codefile_createFolderFailedBy" + (isNaN(parseInt(parentId)) ? "Name" : "Id");
var promise = localizationService.localize(key, [parentId]);
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl( $http.post(umbRequestHelper.getApiUrl(
"codeFileApiBaseUrl", "codeFileApiBaseUrl",
"PostCreateContainer", "PostCreateContainer",
{ type: type, parentId: parentId, name: encodeURIComponent(name) })), { type: type, parentId: parentId, name: encodeURIComponent(name) })),
promise); 'Failed to create a folder under parent id ' + parentId);
} }
}; };
File diff suppressed because it is too large Load Diff
@@ -160,40 +160,6 @@ function entityResource($q, $http, umbRequestHelper) {
'Failed to retrieve entity data for id ' + id); 'Failed to retrieve entity data for id ' + id);
}, },
getUrlAndAnchors: function (id) {
if (id === -1 || id === "-1") {
return null;
}
return umbRequestHelper.resourcePromise(
$http.get(
umbRequestHelper.getApiUrl(
"entityApiBaseUrl",
"GetUrlAndAnchors",
[{ id: id }])),
'Failed to retrieve url and anchors data for id ' + id);
},
getAnchors: function (rteContent) {
if (!rteContent || rteContent.length === 0) {
return [];
}
return umbRequestHelper.resourcePromise(
$http.post(
umbRequestHelper.getApiUrl(
"entityApiBaseUrl",
'GetAnchors'),
{
rteContent: rteContent
}),
'Failed to anchors data for rte content ' + rteContent);
},
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.entityResource#getByIds * @name umbraco.resources.entityResource#getByIds
@@ -326,23 +292,14 @@ function entityResource($q, $http, umbRequestHelper) {
* @returns {Promise} resourcePromise object containing the entity. * @returns {Promise} resourcePromise object containing the entity.
* *
*/ */
getAncestors: function (id, type, options) { getAncestors: function (id, type) {
var args = [
{ id: id },
{ type: type }
];
if (options && options.dataTypeId) {
args.push({ dataTypeId: options.dataTypeId });
}
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"entityApiBaseUrl", "entityApiBaseUrl",
"GetAncestors", "GetAncestors",
args)), [{id: id}, {type: type}])),
'Failed to retrieve ancestor data for id ' + id); 'Failed to retrieve ancestor data for id ' + id);
}, },
/** /**
@@ -358,19 +315,14 @@ function entityResource($q, $http, umbRequestHelper) {
* @returns {Promise} resourcePromise object containing the entity. * @returns {Promise} resourcePromise object containing the entity.
* *
*/ */
getChildren: function (id, type, options) { getChildren: function (id, type) {
var args = [{ id: id }, { type: type }];
if (options && options.dataTypeId) {
args.push({ dataTypeId: options.dataTypeId });
}
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"entityApiBaseUrl", "entityApiBaseUrl",
"GetChildren", "GetChildren",
args)), [{ id: id }, { type: type }])),
'Failed to retrieve child data for id ' + id); 'Failed to retrieve child data for id ' + id);
}, },
@@ -409,8 +361,7 @@ function entityResource($q, $http, umbRequestHelper) {
pageNumber: 100, pageNumber: 100,
filter: '', filter: '',
orderDirection: "Ascending", orderDirection: "Ascending",
orderBy: "SortOrder", orderBy: "SortOrder"
dataTypeId: null
}; };
if (options === undefined) { if (options === undefined) {
options = {}; options = {};
@@ -427,7 +378,6 @@ function entityResource($q, $http, umbRequestHelper) {
options.orderDirection = "Descending"; options.orderDirection = "Descending";
} }
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
@@ -440,8 +390,7 @@ function entityResource($q, $http, umbRequestHelper) {
pageSize: options.pageSize, pageSize: options.pageSize,
orderBy: options.orderBy, orderBy: options.orderBy,
orderDirection: options.orderDirection, orderDirection: options.orderDirection,
filter: encodeURIComponent(options.filter), filter: encodeURIComponent(options.filter)
dataTypeId: options.dataTypeId
} }
)), )),
'Failed to retrieve child data for id ' + parentId); 'Failed to retrieve child data for id ' + parentId);
@@ -482,8 +431,7 @@ function entityResource($q, $http, umbRequestHelper) {
pageNumber: 1, pageNumber: 1,
filter: '', filter: '',
orderDirection: "Ascending", orderDirection: "Ascending",
orderBy: "SortOrder", orderBy: "SortOrder"
dataTypeId: null
}; };
if (options === undefined) { if (options === undefined) {
options = {}; options = {};
@@ -512,14 +460,12 @@ function entityResource($q, $http, umbRequestHelper) {
pageSize: options.pageSize, pageSize: options.pageSize,
orderBy: options.orderBy, orderBy: options.orderBy,
orderDirection: options.orderDirection, orderDirection: options.orderDirection,
filter: encodeURIComponent(options.filter), filter: encodeURIComponent(options.filter)
dataTypeId: options.dataTypeId
} }
)), )),
'Failed to retrieve child data for id ' + parentId); 'Failed to retrieve child data for id ' + parentId);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.entityResource#search * @name umbraco.resources.entityResource#search
@@ -542,17 +488,13 @@ function entityResource($q, $http, umbRequestHelper) {
* @returns {Promise} resourcePromise object containing the entity array. * @returns {Promise} resourcePromise object containing the entity array.
* *
*/ */
search: function (query, type, searchFrom, canceler, dataTypeId) { search: function (query, type, searchFrom, canceler) {
var args = [{ query: query }, { type: type }]; var args = [{ query: query }, { type: type }];
if (searchFrom) { if (searchFrom) {
args.push({ searchFrom: searchFrom }); args.push({ searchFrom: searchFrom });
} }
if (dataTypeId) {
args.push({ dataTypeId: dataTypeId });
}
var httpConfig = {}; var httpConfig = {};
if (canceler) { if (canceler) {
httpConfig["timeout"] = canceler; httpConfig["timeout"] = canceler;
@@ -607,8 +549,6 @@ function entityResource($q, $http, umbRequestHelper) {
'Failed to retrieve entity data for query ' + query); 'Failed to retrieve entity data for query ' + query);
} }
}; };
} }
@@ -1,16 +1,16 @@
/** /**
* @ngdoc service * @ngdoc service
* @name umbraco.resources.mediaResource * @name umbraco.resources.mediaResource
* @description Loads in data for media * @description Loads in data for media
**/ **/
function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) { function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
/** internal method process the saving of data and post processing the result */ /** internal method process the saving of data and post processing the result */
function saveMediaItem(content, action, files) { function saveMediaItem(content, action, files) {
return umbRequestHelper.postSaveContent({ return umbRequestHelper.postSaveContent({
restApiUrl: umbRequestHelper.getApiUrl( restApiUrl: umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"PostSave"), "PostSave"),
content: content, content: content,
action: action, action: action,
files: files, files: files,
@@ -24,35 +24,35 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
getRecycleBin: function () { getRecycleBin: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetRecycleBin")), "GetRecycleBin")),
'Failed to retrieve data for media recycle bin'); 'Failed to retrieve data for media recycle bin');
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#sort * @name umbraco.resources.mediaResource#sort
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Sorts all children below a given parent node id, based on a collection of node-ids * Sorts all children below a given parent node id, based on a collection of node-ids
* *
* ##usage * ##usage
* <pre> * <pre>
* var ids = [123,34533,2334,23434]; * var ids = [123,34533,2334,23434];
* mediaResource.sort({ sortedIds: ids }) * mediaResource.sort({ sortedIds: ids })
* .then(function() { * .then(function() {
* $scope.complete = true; * $scope.complete = true;
* }); * });
* </pre> * </pre>
* @param {Object} args arguments object * @param {Object} args arguments object
* @param {Int} args.parentId the ID of the parent node * @param {Int} args.parentId the ID of the parent node
* @param {Array} options.sortedIds array of node IDs as they should be sorted * @param {Array} options.sortedIds array of node IDs as they should be sorted
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
sort: function (args) { sort: function (args) {
if (!args) { if (!args) {
throw "args cannot be null"; throw "args cannot be null";
@@ -65,37 +65,37 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
} }
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostSort"), $http.post(umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostSort"),
{ {
parentId: args.parentId, parentId: args.parentId,
idSortOrder: args.sortedIds idSortOrder: args.sortedIds
}), }),
'Failed to sort media'); 'Failed to sort media');
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#move * @name umbraco.resources.mediaResource#move
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Moves a node underneath a new parentId * Moves a node underneath a new parentId
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.move({ parentId: 1244, id: 123 }) * mediaResource.move({ parentId: 1244, id: 123 })
* .then(function() { * .then(function() {
* alert("node was moved"); * alert("node was moved");
* }, function(err){ * }, function(err){
* alert("node didnt move:" + err.data.Message); * alert("node didnt move:" + err.data.Message);
* }); * });
* </pre> * </pre>
* @param {Object} args arguments object * @param {Object} args arguments object
* @param {Int} args.idd the ID of the node to move * @param {Int} args.idd the ID of the node to move
* @param {Int} args.parentId the ID of the parent node to move to * @param {Int} args.parentId the ID of the parent node to move to
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
move: function (args) { move: function (args) {
if (!args) { if (!args) {
throw "args cannot be null"; throw "args cannot be null";
@@ -108,121 +108,121 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
} }
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostMove"), $http.post(umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostMove"),
{ {
parentId: args.parentId, parentId: args.parentId,
id: args.id id: args.id
}), }),
{ {
error: function(data){ error: function(data){
var errorMsg = 'Failed to move media'; var errorMsg = 'Failed to move media';
if (data.id !== undefined && data.parentId !== undefined) { if (data.id !== undefined && data.parentId !== undefined) {
if (data.id === data.parentId) { if (data.id === data.parentId) {
errorMsg = 'Media can\'t be moved into itself'; errorMsg = 'Media can\'t be moved into itself';
} }
} }
else if (data.notifications !== undefined) { else if (data.notifications !== undefined) {
if (data.notifications.length > 0) { if (data.notifications.length > 0) {
if (data.notifications[0].header.length > 0) { if (data.notifications[0].header.length > 0) {
errorMsg = data.notifications[0].header; errorMsg = data.notifications[0].header;
} }
if (data.notifications[0].message.length > 0) { if (data.notifications[0].message.length > 0) {
errorMsg = errorMsg + ": " + data.notifications[0].message; errorMsg = errorMsg + ": " + data.notifications[0].message;
}
} }
} }
}
return { return {
errorMsg: errorMsg errorMsg: errorMsg
}; };
} }
}); });
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#getById * @name umbraco.resources.mediaResource#getById
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Gets a media item with a given id * Gets a media item with a given id
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getById(1234) * mediaResource.getById(1234)
* .then(function(media) { * .then(function(media) {
* var myMedia = media; * var myMedia = media;
* alert('its here!'); * alert('its here!');
* }); * });
* </pre> * </pre>
* *
* @param {Int} id id of media item to return * @param {Int} id id of media item to return
* @returns {Promise} resourcePromise object containing the media item. * @returns {Promise} resourcePromise object containing the media item.
* *
*/ */
getById: function (id) { getById: function (id) {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetById", "GetById",
[{ id: id }])), [{ id: id }])),
'Failed to retrieve data for media id ' + id); 'Failed to retrieve data for media id ' + id);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#deleteById * @name umbraco.resources.mediaResource#deleteById
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Deletes a media item with a given id * Deletes a media item with a given id
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.deleteById(1234) * mediaResource.deleteById(1234)
* .then(function() { * .then(function() {
* alert('its gone!'); * alert('its gone!');
* }); * });
* </pre> * </pre>
* *
* @param {Int} id id of media item to delete * @param {Int} id id of media item to delete
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
deleteById: function (id) { deleteById: function (id) {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post( $http.post(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"DeleteById", "DeleteById",
[{ id: id }])), [{ id: id }])),
'Failed to delete item ' + id); 'Failed to delete item ' + id);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#getByIds * @name umbraco.resources.mediaResource#getByIds
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Gets an array of media items, given a collection of ids * Gets an array of media items, given a collection of ids
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getByIds( [1234,2526,28262]) * mediaResource.getByIds( [1234,2526,28262])
* .then(function(mediaArray) { * .then(function(mediaArray) {
* var myDoc = contentArray; * var myDoc = contentArray;
* alert('they are here!'); * alert('they are here!');
* }); * });
* </pre> * </pre>
* *
* @param {Array} ids ids of media items to return as an array * @param {Array} ids ids of media items to return as an array
* @returns {Promise} resourcePromise object containing the media items array. * @returns {Promise} resourcePromise object containing the media items array.
* *
*/ */
getByIds: function (ids) { getByIds: function (ids) {
var idQuery = ""; var idQuery = "";
@@ -231,96 +231,96 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
}); });
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetByIds", "GetByIds",
idQuery)), idQuery)),
'Failed to retrieve data for media ids ' + ids); 'Failed to retrieve data for media ids ' + ids);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#getScaffold * @name umbraco.resources.mediaResource#getScaffold
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Returns a scaffold of an empty media item, given the id of the media item to place it underneath and the media type alias. * Returns a scaffold of an empty media item, given the id of the media item to place it underneath and the media type alias.
* *
* - Parent Id must be provided so umbraco knows where to store the media * - Parent Id must be provided so umbraco knows where to store the media
* - Media Type alias must be provided so umbraco knows which properties to put on the media scaffold * - Media Type alias must be provided so umbraco knows which properties to put on the media scaffold
* *
* The scaffold is used to build editors for media that has not yet been populated with data. * The scaffold is used to build editors for media that has not yet been populated with data.
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getScaffold(1234, 'folder') * mediaResource.getScaffold(1234, 'folder')
* .then(function(scaffold) { * .then(function(scaffold) {
* var myDoc = scaffold; * var myDoc = scaffold;
* myDoc.name = "My new media item"; * myDoc.name = "My new media item";
* *
* mediaResource.save(myDoc, true) * mediaResource.save(myDoc, true)
* .then(function(media){ * .then(function(media){
* alert("Retrieved, updated and saved again"); * alert("Retrieved, updated and saved again");
* }); * });
* }); * });
* </pre> * </pre>
* *
* @param {Int} parentId id of media item to return * @param {Int} parentId id of media item to return
* @param {String} alias mediatype alias to base the scaffold on * @param {String} alias mediatype alias to base the scaffold on
* @returns {Promise} resourcePromise object containing the media scaffold. * @returns {Promise} resourcePromise object containing the media scaffold.
* *
*/ */
getScaffold: function (parentId, alias) { getScaffold: function (parentId, alias) {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetEmpty", "GetEmpty",
[{ contentTypeAlias: alias }, { parentId: parentId }])), [{ contentTypeAlias: alias }, { parentId: parentId }])),
'Failed to retrieve data for empty media item type ' + alias); 'Failed to retrieve data for empty media item type ' + alias);
}, },
rootMedia: function () { rootMedia: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetRootMedia")), "GetRootMedia")),
'Failed to retrieve data for root media'); 'Failed to retrieve data for root media');
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#getChildren * @name umbraco.resources.mediaResource#getChildren
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Gets children of a media item with a given id * Gets children of a media item with a given id
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getChildren(1234, {pageSize: 10, pageNumber: 2}) * mediaResource.getChildren(1234, {pageSize: 10, pageNumber: 2})
* .then(function(contentArray) { * .then(function(contentArray) {
* var children = contentArray; * var children = contentArray;
* alert('they are here!'); * alert('they are here!');
* }); * });
* </pre> * </pre>
* *
* @param {Int} parentid id of content item to return children of * @param {Int} parentid id of content item to return children of
* @param {Object} options optional options object * @param {Object} options optional options object
* @param {Int} options.pageSize if paging data, number of nodes per page, default = 0 * @param {Int} options.pageSize if paging data, number of nodes per page, default = 0
* @param {Int} options.pageNumber if paging data, current page index, default = 0 * @param {Int} options.pageNumber if paging data, current page index, default = 0
* @param {String} options.filter if provided, query will only return those with names matching the filter * @param {String} options.filter if provided, query will only return those with names matching the filter
* @param {String} options.orderDirection can be `Ascending` or `Descending` - Default: `Ascending` * @param {String} options.orderDirection can be `Ascending` or `Descending` - Default: `Ascending`
* @param {String} options.orderBy property to order items by, default: `SortOrder` * @param {String} options.orderBy property to order items by, default: `SortOrder`
* @returns {Promise} resourcePromise object containing an array of content items. * @returns {Promise} resourcePromise object containing an array of content items.
* *
*/ */
getChildren: function (parentId, options) { getChildren: function (parentId, options) {
var defaults = { var defaults = {
@@ -361,110 +361,110 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
} }
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetChildren", "GetChildren",
[ [
{ id: parentId }, { id: parentId },
{ pageNumber: options.pageNumber }, { pageNumber: options.pageNumber },
{ pageSize: options.pageSize }, { pageSize: options.pageSize },
{ orderBy: options.orderBy }, { orderBy: options.orderBy },
{ orderDirection: options.orderDirection }, { orderDirection: options.orderDirection },
{ orderBySystemField: toBool(options.orderBySystemField) }, { orderBySystemField: toBool(options.orderBySystemField) },
{ filter: options.filter } { filter: options.filter }
])), ])),
'Failed to retrieve children for media item ' + parentId); 'Failed to retrieve children for media item ' + parentId);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#save * @name umbraco.resources.mediaResource#save
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Saves changes made to a media item, if the media item is new, the isNew paramater must be passed to force creation * Saves changes made to a media item, if the media item is new, the isNew paramater must be passed to force creation
* if the media item needs to have files attached, they must be provided as the files param and passed separately * if the media item needs to have files attached, they must be provided as the files param and passed separately
* *
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getById(1234) * mediaResource.getById(1234)
* .then(function(media) { * .then(function(media) {
* media.name = "I want a new name!"; * media.name = "I want a new name!";
* mediaResource.save(media, false) * mediaResource.save(media, false)
* .then(function(media){ * .then(function(media){
* alert("Retrieved, updated and saved again"); * alert("Retrieved, updated and saved again");
* }); * });
* }); * });
* </pre> * </pre>
* *
* @param {Object} media The media item object with changes applied * @param {Object} media The media item object with changes applied
* @param {Bool} isNew set to true to create a new item or to update an existing * @param {Bool} isNew set to true to create a new item or to update an existing
* @param {Array} files collection of files for the media item * @param {Array} files collection of files for the media item
* @returns {Promise} resourcePromise object containing the saved media item. * @returns {Promise} resourcePromise object containing the saved media item.
* *
*/ */
save: function (media, isNew, files) { save: function (media, isNew, files) {
return saveMediaItem(media, "save" + (isNew ? "New" : ""), files); return saveMediaItem(media, "save" + (isNew ? "New" : ""), files);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#addFolder * @name umbraco.resources.mediaResource#addFolder
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Shorthand for adding a media item of the type "Folder" under a given parent ID * Shorthand for adding a media item of the type "Folder" under a given parent ID
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.addFolder("My gallery", 1234) * mediaResource.addFolder("My gallery", 1234)
* .then(function(folder) { * .then(function(folder) {
* alert('New folder'); * alert('New folder');
* }); * });
* </pre> * </pre>
* *
* @param {string} name Name of the folder to create * @param {string} name Name of the folder to create
* @param {int} parentId Id of the media item to create the folder underneath * @param {int} parentId Id of the media item to create the folder underneath
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
addFolder: function (name, parentId) { addFolder: function (name, parentId) {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper $http.post(umbRequestHelper
.getApiUrl("mediaApiBaseUrl", "PostAddFolder"), .getApiUrl("mediaApiBaseUrl", "PostAddFolder"),
{ {
name: name, name: name,
parentId: parentId parentId: parentId
}), }),
'Failed to add folder'); 'Failed to add folder');
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#getChildFolders * @name umbraco.resources.mediaResource#getChildFolders
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Retrieves all media children with types used as folders. * Retrieves all media children with types used as folders.
* Uses the convention of looking for media items with mediaTypes ending in * Uses the convention of looking for media items with mediaTypes ending in
* *Folder so will match "Folder", "bannerFolder", "secureFolder" etc, * *Folder so will match "Folder", "bannerFolder", "secureFolder" etc,
* *
* NOTE: This will return a max of 500 folders, if more is required it needs to be paged * NOTE: This will return a max of 500 folders, if more is required it needs to be paged
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.getChildFolders(1234) * mediaResource.getChildFolders(1234)
* .then(function(data) { * .then(function(data) {
* alert('folders'); * alert('folders');
* }); * });
* </pre> * </pre>
* *
* @param {int} parentId Id of the media item to query for child folders * @param {int} parentId Id of the media item to query for child folders
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
getChildFolders: function (parentId) { getChildFolders: function (parentId) {
if (!parentId) { if (!parentId) {
parentId = -1; parentId = -1;
@@ -472,67 +472,67 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
//NOTE: This will return a max of 500 folders, if more is required it needs to be paged //NOTE: This will return a max of 500 folders, if more is required it needs to be paged
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"GetChildFolders", "GetChildFolders",
{ {
id: parentId id: parentId
})), })),
'Failed to retrieve child folders for media item ' + parentId); 'Failed to retrieve child folders for media item ' + parentId);
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#emptyRecycleBin * @name umbraco.resources.mediaResource#emptyRecycleBin
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Empties the media recycle bin * Empties the media recycle bin
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.emptyRecycleBin() * mediaResource.emptyRecycleBin()
* .then(function() { * .then(function() {
* alert('its empty!'); * alert('its empty!');
* }); * });
* </pre> * </pre>
* *
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
emptyRecycleBin: function () { emptyRecycleBin: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post( $http.post(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"EmptyRecycleBin")), "EmptyRecycleBin")),
'Failed to empty the recycle bin'); 'Failed to empty the recycle bin');
}, },
/** /**
* @ngdoc method * @ngdoc method
* @name umbraco.resources.mediaResource#search * @name umbraco.resources.mediaResource#search
* @methodOf umbraco.resources.mediaResource * @methodOf umbraco.resources.mediaResource
* *
* @description * @description
* Paginated search for media items starting on the supplied nodeId * Paginated search for media items starting on the supplied nodeId
* *
* ##usage * ##usage
* <pre> * <pre>
* mediaResource.search("my search", 1, 100, -1) * mediaResource.search("my search", 1, 100, -1)
* .then(function(searchResult) { * .then(function(searchResult) {
* alert('it's here!'); * alert('it's here!');
* }); * });
* </pre> * </pre>
* *
* @param {string} query The search query * @param {string} query The search query
* @param {int} pageNumber The page number * @param {int} pageNumber The page number
* @param {int} pageSize The number of media items on a page * @param {int} pageSize The number of media items on a page
* @param {int} searchFrom NodeId to search from (-1 for root) * @param {int} searchFrom NodeId to search from (-1 for root)
* @returns {Promise} resourcePromise object. * @returns {Promise} resourcePromise object.
* *
*/ */
search: function (query, pageNumber, pageSize, searchFrom) { search: function (query, pageNumber, pageSize, searchFrom) {
var args = [ var args = [
@@ -543,12 +543,12 @@ function mediaResource($q, $http, umbDataFormatter, umbRequestHelper) {
]; ];
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"mediaApiBaseUrl", "mediaApiBaseUrl",
"Search", "Search",
args)), args)),
'Failed to retrieve media items for search: ' + query); 'Failed to retrieve media items for search: ' + query);
} }
}; };
@@ -26,7 +26,7 @@ function relationResource($q, $http, umbRequestHelper) {
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"relationApiBaseUrl", "relationApiBaseUrl",
"GetByChildId", "GetByChildId",
{ childId: id, relationTypeAlias: alias })), [{ childId: id, relationTypeAlias: alias }])),
"Failed to get relation by child ID " + id + " and type of " + alias); "Failed to get relation by child ID " + id + " and type of " + alias);
}, },
@@ -3,7 +3,7 @@
* @name umbraco.resources.templateResource * @name umbraco.resources.templateResource
* @description Loads in data for templates * @description Loads in data for templates
**/ **/
function templateResource($q, $http, umbDataFormatter, umbRequestHelper, localizationService) { function templateResource($q, $http, umbDataFormatter, umbRequestHelper) {
return { return {
@@ -152,16 +152,13 @@ function templateResource($q, $http, umbDataFormatter, umbRequestHelper, localiz
* *
*/ */
deleteById: function(id) { deleteById: function(id) {
var promise = localizationService.localize("template_deleteByIdFailed", [id]);
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post( $http.post(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
"templateApiBaseUrl", "templateApiBaseUrl",
"DeleteById", "DeleteById",
[{ id: id }])), [{ id: id }])),
promise); "Failed to delete item " + id);
}, },
/** /**
@@ -44,28 +44,21 @@ angular.module('umbraco.security.interceptor')
return promise; return promise;
} }
if (originalResponse.status === 401) { //A 401 means that the user is not logged in
if (originalResponse.status === 401 && !originalResponse.config.url.endsWith("umbraco/backoffice/UmbracoApi/Authentication/GetCurrentUser")) {
//A 401 means that the user is not logged in var userService = $injector.get('userService'); // see above
//avoid an infinite loop //Associate the user name with the retry to ensure we retry for the right user
var umbRequestHelper = $injector.get('umbRequestHelper'); promise = userService.getCurrentUser()
var getCurrentUserPath = umbRequestHelper.getApiUrl("authenticationApiBaseUrl", "GetCurrentUser"); .then(function (user) {
if (!originalResponse.config.url.endsWith(getCurrentUserPath)) { var userName = user ? user.name : null;
//The request bounced because it was not authorized - add a new request to the retry queue
var userService = $injector.get('userService'); // see above return queue.pushRetryFn('unauthorized-server', userName, function retryRequest() {
// We must use $injector to get the $http service to prevent circular dependency
//Associate the user name with the retry to ensure we retry for the right user return $injector.get('$http')(originalResponse.config);
promise = userService.getCurrentUser() });
.then(function (user) { });
var userName = user ? user.name : null;
//The request bounced because it was not authorized - add a new request to the retry queue
return queue.pushRetryFn('unauthorized-server', userName, function retryRequest() {
// We must use $injector to get the $http service to prevent circular dependency
return $injector.get('$http')(originalResponse.config);
});
});
}
} }
else if (originalResponse.status === 404) { else if (originalResponse.status === 404) {

Some files were not shown because too many files have changed in this diff Show More