Compare commits
90 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 76dc311586 | |||
| 581f15b172 | |||
| daf01fb0fa | |||
| 588640037c | |||
| 7b106caf95 | |||
| 828a94bc4f | |||
| efd1ea5b86 | |||
| 376d93de61 | |||
| 33d7598d3c | |||
| 6a74967a49 | |||
| 79351efd36 | |||
| 70c9da93e9 | |||
| 521acc0618 | |||
| 95c3a7386d | |||
| 448a99d5a4 | |||
| 83f705e19f | |||
| 880ae5cb95 | |||
| 476773fce5 | |||
| 953355cddd | |||
| e0801cd05a | |||
| b363a1711a | |||
| 45fca02dd1 | |||
| b426f92e4f | |||
| 3e3372752a | |||
| 4104ffc699 | |||
| f63aa2e2ed | |||
| 57553a5956 | |||
| d2d43255aa | |||
| 9ad767a285 | |||
| b39e218d51 | |||
| 22ff362521 | |||
| 3bbeb6670b | |||
| 581b1b6fbf | |||
| 4053c52dfb | |||
| 6a80cc5708 | |||
| 01ba781e75 | |||
| b477ed726d | |||
| 147d6aa638 | |||
| efca0a904d | |||
| 7e25501ac5 | |||
| 4b581a2182 | |||
| 581eac5369 | |||
| c941ff093c | |||
| 60f9490892 | |||
| 7c864fe2e9 | |||
| 8a52865d22 | |||
| 78e5d6d3ad | |||
| 33cf983cae | |||
| 3ce6eb09aa | |||
| 963015cf4a | |||
| cc35af4eab | |||
| 7c4eb71f07 | |||
| 9282312305 | |||
| fc46569cd9 | |||
| 30f42f4ea8 | |||
| fa777c46b1 | |||
| a01f69807c | |||
| e12498ccae | |||
| 4fc51e4a8b | |||
| 4c3e66e58d | |||
| 17abd53b1b | |||
| 202a3e10b5 | |||
| 925f64c79d | |||
| c28e5f4d55 | |||
| 439c460220 | |||
| ae1702c62a | |||
| 1ed29fb8bb | |||
| c9ea1a5504 | |||
| 10da318989 | |||
| 74e3308017 | |||
| 349d89e4d7 | |||
| 201ac076c3 | |||
| bc2e9936d8 | |||
| e8e9f5ca49 | |||
| b938685db0 | |||
| 39498ad362 | |||
| 92b6e276bf | |||
| a239e92bc0 | |||
| e0025db56d | |||
| 1238c10b3d | |||
| 35177eea9f | |||
| 7cd632302b | |||
| 7142222234 | |||
| fd35d89949 | |||
| 1b3fc9fb21 | |||
| 2e98651d62 | |||
| 704e981284 | |||
| 0f17a27d86 | |||
| 9c24dc71a4 | |||
| bfb5dd91cc |
@@ -1,4 +1,4 @@
|
||||
[](https://ci.appveyor.com/project/Umbraco/umbraco-cms-hs8dx/branch/dev-v7)
|
||||
[](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7)
|
||||
|
||||
Umbraco CMS
|
||||
===========
|
||||
|
||||
@@ -7,45 +7,39 @@ function Build-UmbracoDocs
|
||||
$src = "$($uenv.SolutionRoot)\src"
|
||||
$out = "$($uenv.SolutionRoot)\build.out"
|
||||
$tmp = "$($uenv.SolutionRoot)\build.tmp"
|
||||
|
||||
|
||||
$buildTemp = "$PSScriptRoot\temp"
|
||||
$cache = 2
|
||||
|
||||
|
||||
Prepare-Build -keep $uenv
|
||||
|
||||
################ Do the UI docs
|
||||
# get a temp clean node env (will restore)
|
||||
Sandbox-Node $uenv
|
||||
|
||||
Write-Host "Executing gulp docs"
|
||||
|
||||
push-location "$($uenv.SolutionRoot)\src\Umbraco.Web.UI.Client"
|
||||
write "node version is:" > $tmp\belle-docs.log
|
||||
&node -v >> $tmp\belle-docs.log 2>&1
|
||||
write "npm version is:" >> $tmp\belle-docs.log 2>&1
|
||||
&npm -v >> $tmp\belle-docs.log 2>&1
|
||||
write "executing npm install" >> $tmp\belle-docs.log 2>&1
|
||||
&npm install >> $tmp\belle-docs.log 2>&1
|
||||
write "executing bower install" >> $tmp\belle-docs.log 2>&1
|
||||
&npm install -g bower >> $tmp\belle-docs.log 2>&1
|
||||
write "installing gulp" >> $tmp\belle-docs.log 2>&1
|
||||
&npm install -g gulp >> $tmp\belle-docs.log 2>&1
|
||||
write "installing gulp-cli" >> $tmp\belle-docs.log 2>&1
|
||||
&npm install -g gulp-cli --quiet >> $tmp\belle-docs.log 2>&1
|
||||
write "building docs using gulp" >> $tmp\belle-docs.log 2>&1
|
||||
&gulp docs >> $tmp\belle-docs.log 2>&1
|
||||
pop-location
|
||||
|
||||
# No need to build belle again if it exists
|
||||
$belleAppJs = "$src\Umbraco.Web.UI\Umbraco\js\app.js"
|
||||
if(-not (Test-Path $belleAppJs))
|
||||
{
|
||||
# get a temp clean node env (will restore)
|
||||
Sandbox-Node $uenv
|
||||
|
||||
push-location "$($uenv.SolutionRoot)\src\Umbraco.Web.UI.Client"
|
||||
write "node version is:" > $tmp\belle.log
|
||||
&node -v >> $tmp\belle.log 2>&1
|
||||
write "npm version is:" >> $tmp\belle.log 2>&1
|
||||
&npm -v >> $tmp\belle.log 2>&1
|
||||
write "cleaning npm cache" >> $tmp\belle.log 2>&1
|
||||
&npm cache clean >> $tmp\belle.log 2>&1
|
||||
write "installing bower" >> $tmp\belle.log 2>&1
|
||||
&npm install -g bower >> $tmp\belle.log 2>&1
|
||||
write "installing gulp" >> $tmp\belle.log 2>&1
|
||||
&npm install -g gulp >> $tmp\belle.log 2>&1
|
||||
write "installing gulp-cli" >> $tmp\belle.log 2>&1
|
||||
&npm install -g gulp-cli --quiet >> $tmp\belle.log 2>&1
|
||||
write "executing npm install" >> $tmp\belle.log 2>&1
|
||||
&npm install >> $tmp\belle.log 2>&1
|
||||
write "building docs using gulp" >> $tmp\belle.log 2>&1
|
||||
&gulp docs >> $tmp\belle.log 2>&1
|
||||
pop-location
|
||||
|
||||
# fixme - should we filter the log to find errors?
|
||||
#get-content .\build.tmp\belle-docs.log | %{ if ($_ -match "build") { write $_}}
|
||||
} else {
|
||||
Write-Host "Skipping belle build, $belleAppJs already exists"
|
||||
}
|
||||
Write-Host "Completed gulp docs build"
|
||||
|
||||
# fixme - should we filter the log to find errors?
|
||||
#get-content .\build.tmp\belle-docs.log | %{ if ($_ -match "build") { write $_}}
|
||||
|
||||
# change baseUrl
|
||||
$baseUrl = "https://our.umbraco.org/apidocs/ui/"
|
||||
|
||||
@@ -51,13 +51,19 @@ function Prepare-Build
|
||||
|
||||
if (-not $keep)
|
||||
{
|
||||
Remove-Directory "$tmp"
|
||||
mkdir "$tmp" > $null
|
||||
|
||||
Remove-Directory "$out"
|
||||
mkdir "$out" > $null
|
||||
Remove-Directory "$tmp"
|
||||
Remove-Directory "$out"
|
||||
}
|
||||
|
||||
if (-not (Test-Path "$tmp"))
|
||||
{
|
||||
mkdir "$tmp" > $null
|
||||
}
|
||||
if (-not (Test-Path "$out"))
|
||||
{
|
||||
mkdir "$out" > $null
|
||||
}
|
||||
|
||||
# ensure proper web.config
|
||||
$webUi = "$src\Umbraco.Web.UI"
|
||||
Store-WebConfig $webUi
|
||||
@@ -371,14 +377,6 @@ function Prepare-Packages
|
||||
Copy-Files "$src\Umbraco.Web.UI\umbraco\lib" "*" "$tmp\WebApp\umbraco\lib"
|
||||
Copy-Files "$src\Umbraco.Web.UI\umbraco\views" "*" "$tmp\WebApp\umbraco\views"
|
||||
Copy-Files "$src\Umbraco.Web.UI\umbraco\preview" "*" "$tmp\WebApp\umbraco\preview"
|
||||
|
||||
# prepare WebPI
|
||||
Write-Host "Prepare WebPI"
|
||||
Remove-Directory "$tmp\WebPi"
|
||||
mkdir "$tmp\WebPi" > $null
|
||||
mkdir "$tmp\WebPi\umbraco" > $null
|
||||
Copy-Files "$tmp\WebApp" "*" "$tmp\WebPi\umbraco"
|
||||
Copy-Files "$src\WebPi" "*" "$tmp\WebPi"
|
||||
}
|
||||
|
||||
#
|
||||
@@ -407,17 +405,6 @@ function Package-Zip
|
||||
"$tmp\WebApp\*" `
|
||||
"-x!dotless.Core.*" "-x!Content_Types.xml" "-x!*.pdb"`
|
||||
> $null
|
||||
|
||||
Write-Host "Zip WebPI"
|
||||
&$uenv.Zip a -r "$out\UmbracoCms.WebPI.$($version.Semver).zip" "-x!*.pdb"`
|
||||
"$tmp\WebPi\*" `
|
||||
"-x!dotless.Core.*" `
|
||||
> $null
|
||||
|
||||
# hash the webpi file
|
||||
Write-Host "Hash WebPI"
|
||||
$hash = Get-FileHash "$out\UmbracoCms.WebPI.$($version.Semver).zip"
|
||||
Write $hash | out-file "$out\webpihash.txt" -encoding ascii
|
||||
}
|
||||
|
||||
#
|
||||
@@ -461,6 +448,24 @@ function Restore-NuGet
|
||||
&$uenv.NuGet restore "$src\Umbraco.sln" > "$tmp\nuget.restore.log"
|
||||
}
|
||||
|
||||
#
|
||||
# Copies the Azure Gallery script to output
|
||||
#
|
||||
function Prepare-AzureGallery
|
||||
{
|
||||
param (
|
||||
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
|
||||
)
|
||||
|
||||
$src = "$($uenv.SolutionRoot)\src"
|
||||
$tmp = "$($uenv.SolutionRoot)\build.tmp"
|
||||
$out = "$($uenv.SolutionRoot)\build.out"
|
||||
$psScript = "$($uenv.SolutionRoot)\build\azuregalleryrelease.ps1"
|
||||
|
||||
Write-Host ">> Copy azuregalleryrelease.ps1 to output folder"
|
||||
Copy-Item $psScript $out
|
||||
}
|
||||
|
||||
#
|
||||
# Creates the NuGet packages
|
||||
#
|
||||
@@ -570,6 +575,10 @@ function Build-Umbraco
|
||||
{
|
||||
Compile-Belle $uenv $version
|
||||
}
|
||||
elseif ($target -eq "prepare-azuregallery")
|
||||
{
|
||||
Prepare-AzureGallery $uenv
|
||||
}
|
||||
elseif ($target -eq "all")
|
||||
{
|
||||
Prepare-Build $uenv
|
||||
@@ -584,6 +593,7 @@ function Build-Umbraco
|
||||
Verify-NuGet $uenv
|
||||
Prepare-NuGet $uenv
|
||||
Package-NuGet $uenv $version
|
||||
Prepare-AzureGallery $uenv
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,28 +1,3 @@
|
||||
# returns a string containing the hash of $file
|
||||
function Get-FileHash($file)
|
||||
{
|
||||
try
|
||||
{
|
||||
$crypto = new-object System.Security.Cryptography.SHA1CryptoServiceProvider
|
||||
$stream = [System.IO.File]::OpenRead($file)
|
||||
$hash = $crypto.ComputeHash($stream)
|
||||
$text = ""
|
||||
$hash | foreach `
|
||||
{
|
||||
$text = $text + $_.ToString("x2")
|
||||
}
|
||||
return $text
|
||||
}
|
||||
finally
|
||||
{
|
||||
if ($stream)
|
||||
{
|
||||
$stream.Dispose()
|
||||
}
|
||||
$crypto.Dispose()
|
||||
}
|
||||
}
|
||||
|
||||
# returns the full path if $file is relative to $pwd
|
||||
function Get-FullPath($file)
|
||||
{
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
|
||||
<dependency id="SharpZipLib" version="[0.86.0, 1.0.0)" />
|
||||
<dependency id="MySql.Data" version="[6.9.9, 7.0.0)" />
|
||||
<dependency id="xmlrpcnet" version="[2.5.0, 3.0.0)" />
|
||||
<dependency id="ClientDependency" version="[1.9.2, 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)" />
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
xdt:Locator="Match(application,alias)"
|
||||
xdt:Transform="InsertIfMissing" />
|
||||
|
||||
<add application="settings" alias="scripts" title="Scripts" type="umbraco.loadScripts, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
|
||||
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
|
||||
xdt:Locator="Match(application,alias)"
|
||||
xdt:Transform="SetAttributes()" />
|
||||
<add application="settings" alias="dictionary" title="Dictionary" type="umbraco.loadDictionary, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6"
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
Param(
|
||||
[string]$GitHubPersonalAccessToken,
|
||||
[string]$Directory
|
||||
)
|
||||
$workingDirectory = $Directory
|
||||
CD $workingDirectory
|
||||
|
||||
# Clone repo
|
||||
$fullGitUrl = "https://$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
|
||||
git clone $fullGitUrl 2>&1 | % { $_.ToString() }
|
||||
|
||||
# Remove everything so that unzipping the release later will update everything
|
||||
# Don't remove the readme file nor the git directory
|
||||
Write-Host "Cleaning up git directory before adding new version"
|
||||
Remove-Item -Recurse $workingDirectory\$env:GIT_REPOSITORYNAME\* -Exclude README.md,.git
|
||||
|
||||
# Find release zip
|
||||
$zipsDir = "$workingDirectory\$env:BUILD_DEFINITIONNAME\zips"
|
||||
$pattern = "UmbracoCms.([0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}).zip"
|
||||
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" })
|
||||
|
||||
if($file)
|
||||
{
|
||||
# Get release name
|
||||
$version = [regex]::Match($file.Name, $pattern).captures.groups[1].value
|
||||
$releaseName = "Umbraco $version"
|
||||
Write-Host "Found $releaseName"
|
||||
|
||||
# Unzip into repository to update release
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
||||
Write-Host "Unzipping $($file.FullName) to $workingDirectory\$env:GIT_REPOSITORYNAME"
|
||||
[System.IO.Compression.ZipFile]::ExtractToDirectory("$($file.FullName)", "$workingDirectory\$env:GIT_REPOSITORYNAME")
|
||||
|
||||
# Telling git who we are
|
||||
git config --global user.email "coffee@umbraco.com" 2>&1 | % { $_.ToString() }
|
||||
git config --global user.name "Umbraco HQ" 2>&1 | % { $_.ToString() }
|
||||
|
||||
# Commit
|
||||
CD $env:GIT_REPOSITORYNAME
|
||||
Write-Host "Committing Umbraco $version Release from Build Output"
|
||||
|
||||
git add . 2>&1 | % { $_.ToString() }
|
||||
git commit -m " Release $releaseName from Build Output" 2>&1 | % { $_.ToString() }
|
||||
|
||||
# Tag the release
|
||||
git tag -a "v$version" -m "v$version"
|
||||
|
||||
# Push release to master
|
||||
$fullGitAuthUrl = "https://$($env:GIT_USERNAME):$GitHubPersonalAccessToken@$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
|
||||
git push $fullGitAuthUrl 2>&1 | % { $_.ToString() }
|
||||
|
||||
#Push tag to master
|
||||
git push $fullGitAuthUrl --tags 2>&1 | % { $_.ToString() }
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Error "Umbraco release file not found, searched in $workingDirectory\$zipsDir for a file with pattern $pattern - cancelling"
|
||||
}
|
||||
+2
-2
@@ -11,5 +11,5 @@ using System.Resources;
|
||||
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
|
||||
[assembly: AssemblyFileVersion("7.7.1")]
|
||||
[assembly: AssemblyInformationalVersion("7.7.1")]
|
||||
[assembly: AssemblyFileVersion("7.7.2")]
|
||||
[assembly: AssemblyInformationalVersion("7.7.2")]
|
||||
@@ -357,6 +357,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
|
||||
string IContentSection.LoginBackgroundImage
|
||||
{
|
||||
get { return LoginBackgroundImage; }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -74,6 +74,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
|
||||
|
||||
bool EnablePropertyValueConverters { get; }
|
||||
|
||||
string LoginBackgroundImage { get; }
|
||||
string LoginBackgroundImage { get; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
|
||||
{
|
||||
public class UmbracoVersion
|
||||
{
|
||||
private static readonly Version Version = new Version("7.7.1");
|
||||
private static readonly Version Version = new Version("7.7.2");
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current version of Umbraco.
|
||||
|
||||
@@ -42,6 +42,14 @@ namespace Umbraco.Core.Models.Identity
|
||||
|
||||
private BackOfficeIdentityUser()
|
||||
{
|
||||
_startMediaIds = new int[] { };
|
||||
_startContentIds = new int[] { };
|
||||
_groups = new IReadOnlyUserGroup[] { };
|
||||
_allowedSections = new string[] { };
|
||||
_culture = Configuration.GlobalSettings.DefaultUILanguage;
|
||||
_groups = new IReadOnlyUserGroup[0];
|
||||
_roles = new ObservableCollection<IdentityUserRole<string>>();
|
||||
_roles.CollectionChanged += _roles_CollectionChanged;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -17,7 +17,30 @@ namespace Umbraco.Core.Models.Membership
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the aggregate permissions in the permission set
|
||||
/// Returns the aggregate permissions in the permission set for a single node
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// This value is only calculated once per node
|
||||
/// </remarks>
|
||||
public IEnumerable<string> GetAllPermissions(int entityId)
|
||||
{
|
||||
if (_aggregateNodePermissions == null)
|
||||
_aggregateNodePermissions = new Dictionary<int, string[]>();
|
||||
|
||||
string[] entityPermissions;
|
||||
if (_aggregateNodePermissions.TryGetValue(entityId, out entityPermissions) == false)
|
||||
{
|
||||
entityPermissions = this.Where(x => x.EntityId == entityId).SelectMany(x => x.AssignedPermissions).Distinct().ToArray();
|
||||
_aggregateNodePermissions[entityId] = entityPermissions;
|
||||
}
|
||||
return entityPermissions;
|
||||
}
|
||||
|
||||
private Dictionary<int, string[]> _aggregateNodePermissions;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the aggregate permissions in the permission set for all nodes
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace Umbraco.Core.Persistence
|
||||
{
|
||||
private int _version;
|
||||
private bool _hasVersion;
|
||||
private string _exe;
|
||||
|
||||
#region Availability & Version
|
||||
|
||||
@@ -84,16 +85,31 @@ namespace Umbraco.Core.Persistence
|
||||
{
|
||||
_hasVersion = true;
|
||||
_version = -1;
|
||||
_exe = null;
|
||||
|
||||
var programFiles = Environment.GetEnvironmentVariable("ProgramFiles");
|
||||
if (programFiles == null) return;
|
||||
|
||||
// MS SQL Server installs in e.g. "C:\Program Files\Microsoft SQL Server", so
|
||||
// we want to detect it in "%ProgramFiles%\Microsoft SQL Server" - however, if
|
||||
// Umbraco runs as a 32bits process (e.g. IISExpress configured as 32bits)
|
||||
// on a 64bits system, %ProgramFiles% will point to "C:\Program Files (x86)"
|
||||
// and SQL Server cannot be found. But then, %ProgramW6432% will point to
|
||||
// the original "C:\Program Files". Using it to fix the path.
|
||||
// see also: MSDN doc for WOW64 implementation
|
||||
//
|
||||
var programW6432 = Environment.GetEnvironmentVariable("ProgramW6432");
|
||||
if (string.IsNullOrWhiteSpace(programW6432) == false && programW6432 != programFiles)
|
||||
programFiles = programW6432;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(programFiles)) return;
|
||||
|
||||
// detect 14, 13, 12, 11
|
||||
for (var i = 14; i > 10; i--)
|
||||
{
|
||||
var path = Path.Combine(programFiles, string.Format(@"Microsoft SQL Server\{0}0\Tools\Binn\SqlLocalDB.exe", i));
|
||||
if (File.Exists(path) == false) continue;
|
||||
var exe = Path.Combine(programFiles, string.Format(@"Microsoft SQL Server\{0}0\Tools\Binn\SqlLocalDB.exe", i));
|
||||
if (File.Exists(exe) == false) continue;
|
||||
_version = i;
|
||||
_exe = exe;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -897,16 +913,13 @@ namespace Umbraco.Core.Persistence
|
||||
/// </remarks>
|
||||
private int ExecuteSqlLocalDb(string args, out string output, out string error)
|
||||
{
|
||||
var programFiles = Environment.GetEnvironmentVariable("ProgramFiles");
|
||||
if (programFiles == null)
|
||||
if (_exe == null) // should never happen - we should not execute if not available
|
||||
{
|
||||
output = string.Empty;
|
||||
error = "SqlLocalDB.exe not found";
|
||||
return -1;
|
||||
}
|
||||
|
||||
var path = Path.Combine(programFiles, string.Format(@"Microsoft SQL Server\{0}0\Tools\Binn\SqlLocalDB.exe", _version));
|
||||
|
||||
var p = new Process
|
||||
{
|
||||
StartInfo =
|
||||
@@ -914,7 +927,7 @@ namespace Umbraco.Core.Persistence
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
FileName = path,
|
||||
FileName = _exe,
|
||||
Arguments = args,
|
||||
CreateNoWindow = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
@@ -929,7 +942,7 @@ namespace Umbraco.Core.Persistence
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a Unicode string with the delimiters added to make the input string a valid SQL Server delimited identifier.
|
||||
/// Returns a Unicode string with the delimiters added to make the input string a valid SQL Server delimited identifier.
|
||||
/// </summary>
|
||||
/// <param name="name">The name to quote.</param>
|
||||
/// <param name="quote">A quote character.</param>
|
||||
|
||||
@@ -687,8 +687,8 @@ ORDER BY contentNodeId, versionId, propertytypeid
|
||||
case "NAME":
|
||||
return "umbracoNode.text";
|
||||
case "PUBLISHED":
|
||||
case "OWNER":
|
||||
return "cmsDocument.published";
|
||||
case "OWNER":
|
||||
//TODO: This isn't going to work very nicely because it's going to order by ID, not by letter
|
||||
return "umbracoNode.nodeUser";
|
||||
// Members only
|
||||
|
||||
@@ -124,12 +124,15 @@ namespace Umbraco.Core.Security
|
||||
var found = _userService.GetUserById(asInt.Result);
|
||||
if (found != null)
|
||||
{
|
||||
// we have to remember whether Logins property is dirty, since the UpdateMemberProperties will reset it.
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty("Logins");
|
||||
|
||||
if (UpdateMemberProperties(found, user))
|
||||
{
|
||||
_userService.Save(found);
|
||||
}
|
||||
|
||||
if (user.IsPropertyDirty("Logins"))
|
||||
if (isLoginsPropertyDirty)
|
||||
{
|
||||
var logins = await GetLoginsAsync(user);
|
||||
_externalLoginService.SaveUserLogins(found.Id, logins);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Configuration.Provider;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
@@ -8,6 +9,7 @@ using System.Web;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.Hosting;
|
||||
using System.Web.Security;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Models;
|
||||
|
||||
@@ -677,11 +679,7 @@ namespace Umbraco.Core.Security
|
||||
|
||||
internal static bool IsEmailValid(string email)
|
||||
{
|
||||
const string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
|
||||
+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
|
||||
+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
|
||||
|
||||
return Regex.IsMatch(email, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
return new EmailAddressAttribute().IsValid(email);
|
||||
}
|
||||
|
||||
protected internal string EncryptOrHashPassword(string pass, string salt)
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace Umbraco.Core.Services
|
||||
{
|
||||
private readonly IDatabaseUnitOfWorkProvider _uowProvider;
|
||||
private readonly ReaderWriterLockSlim _locker = new ReaderWriterLockSlim();
|
||||
|
||||
|
||||
private readonly Dictionary<int, TypedId<Guid>> _id2Key = new Dictionary<int, TypedId<Guid>>();
|
||||
private readonly Dictionary<Guid, TypedId<int>> _key2Id = new Dictionary<Guid, TypedId<int>>();
|
||||
|
||||
@@ -39,8 +39,8 @@ namespace Umbraco.Core.Services
|
||||
int? val;
|
||||
using (var uow = _uowProvider.GetUnitOfWork())
|
||||
{
|
||||
val = uow.Database.ExecuteScalar<int?>("SELECT id FROM umbracoNode WHERE uniqueId=@id AND nodeObjectType=@nodeObjectType",
|
||||
new { id = key, nodeObjectType = GetNodeObjectTypeGuid(umbracoObjectType) });
|
||||
val = uow.Database.ExecuteScalar<int?>("SELECT id FROM umbracoNode WHERE uniqueId=@id AND (nodeObjectType=@type OR nodeObjectType=@reservation)",
|
||||
new { id = key, type = GetNodeObjectTypeGuid(umbracoObjectType), reservation = Constants.ObjectTypes.IdReservationGuid });
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
@@ -92,8 +92,8 @@ namespace Umbraco.Core.Services
|
||||
Guid? val;
|
||||
using (var uow = _uowProvider.GetUnitOfWork())
|
||||
{
|
||||
val = uow.Database.ExecuteScalar<Guid?>("SELECT uniqueId FROM umbracoNode WHERE id=@id AND nodeObjectType=@nodeObjectType",
|
||||
new { id, nodeObjectType = GetNodeObjectTypeGuid(umbracoObjectType) });
|
||||
val = uow.Database.ExecuteScalar<Guid?>("SELECT uniqueId FROM umbracoNode WHERE id=@id AND (nodeObjectType=@type OR nodeObjectType=@reservation)",
|
||||
new { id, type = GetNodeObjectTypeGuid(umbracoObjectType), reservation = Constants.ObjectTypes.IdReservationGuid });
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ namespace Umbraco.Core.Services
|
||||
{
|
||||
private readonly T _id;
|
||||
private readonly UmbracoObjectTypes _umbracoObjectType;
|
||||
|
||||
|
||||
public T Id
|
||||
{
|
||||
get { return _id; }
|
||||
|
||||
@@ -26,15 +26,15 @@ namespace Umbraco.Tests.Services
|
||||
public override void TearDown()
|
||||
{
|
||||
base.TearDown();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EntityService_Can_Get_Paged_Content_Children()
|
||||
{
|
||||
|
||||
|
||||
var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage");
|
||||
|
||||
var root = MockedContent.CreateSimpleContent(contentType);
|
||||
|
||||
var root = MockedContent.CreateSimpleContent(contentType);
|
||||
ServiceContext.ContentService.Save(root);
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
@@ -45,7 +45,7 @@ namespace Umbraco.Tests.Services
|
||||
var service = ServiceContext.EntityService;
|
||||
|
||||
long total;
|
||||
var entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total).ToArray();
|
||||
var entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total).ToArray();
|
||||
Assert.That(entities.Length, Is.EqualTo(6));
|
||||
Assert.That(total, Is.EqualTo(10));
|
||||
entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total).ToArray();
|
||||
@@ -72,7 +72,7 @@ namespace Umbraco.Tests.Services
|
||||
var c2 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1);
|
||||
ServiceContext.ContentService.Save(c2);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var service = ServiceContext.EntityService;
|
||||
@@ -181,7 +181,7 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
var root = MockedContent.CreateSimpleContent(contentType);
|
||||
ServiceContext.ContentService.Save(root);
|
||||
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
var c1 = MockedContent.CreateSimpleContent(contentType, "ssss" + Guid.NewGuid(), root);
|
||||
@@ -204,7 +204,7 @@ namespace Umbraco.Tests.Services
|
||||
Assert.That(entities.Length, Is.EqualTo(50));
|
||||
Assert.That(total, Is.EqualTo(50));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void EntityService_Can_Get_Paged_Media_Children()
|
||||
{
|
||||
@@ -227,7 +227,7 @@ namespace Umbraco.Tests.Services
|
||||
Assert.That(total, Is.EqualTo(10));
|
||||
entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 1, 6, out total).ToArray();
|
||||
Assert.That(entities.Length, Is.EqualTo(4));
|
||||
Assert.That(total, Is.EqualTo(10));
|
||||
Assert.That(total, Is.EqualTo(10));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -362,7 +362,7 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
var root = MockedMedia.CreateMediaFolder(folderType, -1);
|
||||
ServiceContext.MediaService.Save(root);
|
||||
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id);
|
||||
@@ -519,7 +519,7 @@ namespace Umbraco.Tests.Services
|
||||
Assert.That(
|
||||
entities.Any(
|
||||
x =>
|
||||
x.AdditionalData.Any(y => y.Value is UmbracoEntity.EntityProperty
|
||||
x.AdditionalData.Any(y => y.Value is UmbracoEntity.EntityProperty
|
||||
&& ((UmbracoEntity.EntityProperty)y.Value).PropertyEditorAlias == Constants.PropertyEditors.UploadFieldAlias)), Is.True);
|
||||
}
|
||||
|
||||
@@ -575,6 +575,30 @@ namespace Umbraco.Tests.Services
|
||||
Assert.IsFalse(result2.Success);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ReserveId()
|
||||
{
|
||||
var service = ServiceContext.EntityService;
|
||||
var guid = Guid.NewGuid();
|
||||
|
||||
// can reserve
|
||||
var reservedId = service.ReserveId(guid);
|
||||
Assert.IsTrue(reservedId > 0);
|
||||
|
||||
// can get it back
|
||||
var id = service.GetIdForKey(guid, UmbracoObjectTypes.DocumentType);
|
||||
Assert.IsTrue(id.Success);
|
||||
Assert.AreEqual(reservedId, id.Result);
|
||||
|
||||
// anything goes
|
||||
id = service.GetIdForKey(guid, UmbracoObjectTypes.Media);
|
||||
Assert.IsTrue(id.Success);
|
||||
Assert.AreEqual(reservedId, id.Result);
|
||||
|
||||
// a random guid won't work
|
||||
Assert.IsFalse(service.GetIdForKey(Guid.NewGuid(), UmbracoObjectTypes.DocumentType).Success);
|
||||
}
|
||||
|
||||
private static bool _isSetup = false;
|
||||
|
||||
private int folderId;
|
||||
@@ -589,7 +613,7 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
//Create and Save folder-Media -> 1050
|
||||
var folderMediaType = ServiceContext.ContentTypeService.GetMediaType(1031);
|
||||
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
|
||||
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
|
||||
ServiceContext.MediaService.Save(folder, 0);
|
||||
folderId = folder.Id;
|
||||
|
||||
@@ -607,9 +631,9 @@ namespace Umbraco.Tests.Services
|
||||
ServiceContext.MediaService.Save(subfolder, 0);
|
||||
var subfolder2 = MockedMedia.CreateMediaFolder(folderMediaType, subfolder.Id);
|
||||
ServiceContext.MediaService.Save(subfolder2, 0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@ namespace Umbraco.Tests.Strings
|
||||
Assert.IsTrue(foo.IsValid("futureTLD@somewhere.fooo"));
|
||||
|
||||
Assert.IsTrue(foo.IsValid("abc@xyz.financial"));
|
||||
Assert.IsTrue(foo.IsValid("admin+gmail-syntax@c.pizza"));
|
||||
Assert.IsTrue(foo.IsValid("admin@c.pizza"));
|
||||
|
||||
Assert.IsFalse(foo.IsValid("fdsa"));
|
||||
Assert.IsFalse(foo.IsValid("fdsa@"));
|
||||
|
||||
@@ -22,5 +22,40 @@ namespace Umbraco.Tests.Web.Mvc
|
||||
var expected = "<div><h1>hello world</h1><p>hello world<br />hello world<br />hello world<br />hello world</p></div>";
|
||||
Assert.AreEqual(expected, output);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TruncateWithElipsis()
|
||||
{
|
||||
var output = _htmlStringUtilities.Truncate("hello world", 5, true, false).ToString();
|
||||
var expected = "hello…";
|
||||
Assert.AreEqual(expected, output);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TruncateWithoutElipsis()
|
||||
{
|
||||
var output = _htmlStringUtilities.Truncate("hello world", 5, false, false).ToString();
|
||||
var expected = "hello";
|
||||
Assert.AreEqual(expected, output);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TruncateShorterWordThanHellip()
|
||||
{
|
||||
//http://issues.umbraco.org/issue/U4-10478
|
||||
var output = _htmlStringUtilities.Truncate("hi", 5, true, false).ToString();
|
||||
var expected = "hi";
|
||||
Assert.AreEqual(expected, output);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TruncateAndRemoveSpaceBetweenHellipAndWord()
|
||||
{
|
||||
var output = _htmlStringUtilities.Truncate("hello world", 6 /* hello plus space */, true, false).ToString();
|
||||
var expected = "hello…";
|
||||
Assert.AreEqual(expected, output);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -361,11 +361,29 @@ Umbraco.Sys.registerNamespace("Umbraco.Application");
|
||||
rootScope : function(){
|
||||
return getRootScope();
|
||||
},
|
||||
|
||||
reloadLocation: function() {
|
||||
var injector = getRootInjector();
|
||||
var $route = injector.get("$route");
|
||||
$route.reload();
|
||||
|
||||
/**
|
||||
This will reload the content frame based on it's current route, if pathToMatch is specified it will only reload it if the current
|
||||
location matches the path
|
||||
*/
|
||||
reloadLocation: function(pathToMatch) {
|
||||
|
||||
var injector = getRootInjector();
|
||||
var doChange = true;
|
||||
if (pathToMatch) {
|
||||
var $location = injector.get("$location");
|
||||
var path = $location.path();
|
||||
if (path != pathToMatch) {
|
||||
doChange = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (doChange) {
|
||||
var $route = injector.get("$route");
|
||||
$route.reload();
|
||||
var $rootScope = injector.get("$rootScope");
|
||||
$rootScope.$apply();
|
||||
}
|
||||
},
|
||||
|
||||
closeModalWindow: function(rVal) {
|
||||
|
||||
@@ -47,8 +47,8 @@ function valEmail(valEmailExpression) {
|
||||
angular.module('umbraco.directives.validation')
|
||||
.directive("valEmail", valEmail)
|
||||
.factory('valEmailExpression', function () {
|
||||
//NOTE: This is the fixed regex which is part of the newer angular
|
||||
var emailRegex = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
|
||||
return {
|
||||
EMAIL_REGEXP: /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i
|
||||
EMAIL_REGEXP: emailRegex
|
||||
};
|
||||
});
|
||||
@@ -269,7 +269,8 @@
|
||||
var isSelected = false;
|
||||
for (var i = 0; selection.length > i; i++) {
|
||||
var selectedItem = selection[i];
|
||||
if (item.id === selectedItem.id || item.key === selectedItem.key) {
|
||||
// if item.id is 2147483647 (int.MaxValue) use item.key
|
||||
if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) {
|
||||
isSelected = true;
|
||||
}
|
||||
}
|
||||
@@ -294,7 +295,8 @@
|
||||
function deselectItem(item, selection) {
|
||||
for (var i = 0; selection.length > i; i++) {
|
||||
var selectedItem = selection[i];
|
||||
if (item.id === selectedItem.id) {
|
||||
// if item.id is 2147483647 (int.MaxValue) use item.key
|
||||
if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) {
|
||||
selection.splice(i, 1);
|
||||
item.selected = false;
|
||||
}
|
||||
@@ -366,7 +368,7 @@
|
||||
var item = items[i];
|
||||
|
||||
if (checkbox.checked) {
|
||||
selection.push({ id: item.id });
|
||||
selection.push({ id: item.id, key: item.key });
|
||||
} else {
|
||||
clearSelection = true;
|
||||
}
|
||||
@@ -405,7 +407,8 @@
|
||||
for (var selectedIndex = 0; selection.length > selectedIndex; selectedIndex++) {
|
||||
var selectedItem = selection[selectedIndex];
|
||||
|
||||
if (item.id === selectedItem.id) {
|
||||
// if item.id is 2147483647 (int.MaxValue) use item.key
|
||||
if ((item.id !== 2147483647 && item.id === selectedItem.id) || item.key === selectedItem.key) {
|
||||
numberOfSelectedItem++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,18 @@
|
||||
{ "value": 3, "name": "Invited", "key": "Invited", "color": "warning" }
|
||||
];
|
||||
|
||||
angular.forEach(userStates, function (userState) {
|
||||
var key = "user_state" + userState.key;
|
||||
localizationService.localize(key).then(function (value) {
|
||||
var reg = /^\[[\S\s]*]$/g;
|
||||
var result = reg.test(value);
|
||||
if (result === false) {
|
||||
// Only translate if key exists
|
||||
userState.name = value;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function getUserStateFromValue(value) {
|
||||
var foundUserState;
|
||||
angular.forEach(userStates, function (userState) {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="email">Email</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="email" name="email" placeholder="you@example.com" required ng-model="installer.current.model.email" val-email />
|
||||
<input type="email" id="email" name="email" placeholder="you@example.com" required ng-model="installer.current.model.email" val-email />
|
||||
<small class="inline-help">Your email will be used as your login</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
position: fixed;
|
||||
overflow: hidden;
|
||||
background: @white;
|
||||
z-index: 7500;
|
||||
z-index: @zindexUmbOverlay;
|
||||
animation: fadeIn 0.2s;
|
||||
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.50);
|
||||
z-index: 2000;
|
||||
z-index: @zindexOverlayBackdrop;
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation: fadeIn 0.2s;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto;
|
||||
color: @black;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.umb-user-card:hover,
|
||||
|
||||
@@ -5,21 +5,20 @@
|
||||
top: -30px;
|
||||
padding-top: 30px;
|
||||
box-shadow: inset 0px -40px 30px 25px rgba(255,255,255,1);
|
||||
border-radius: 0px 0px 200px 200px;
|
||||
-moz-border-radius: 0px 0px 200px 200px;
|
||||
-moz-border-radius: 0px 0px 200px 200px;
|
||||
-webkit-border-radius: 0px 0px 200px 200px;
|
||||
border-radius: 0px 0px 200px 200px;
|
||||
|
||||
small {
|
||||
font-size: 14px;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.umb-loader{
|
||||
.umb-loader {
|
||||
width: 640px;
|
||||
height: 4px;
|
||||
}
|
||||
|
||||
|
||||
.video_player{
|
||||
video {
|
||||
width: 100%;
|
||||
@@ -27,8 +26,8 @@
|
||||
border: 1px solid @gray-9;
|
||||
border-left: none;
|
||||
border-bottom: none;
|
||||
-moz-box-sizing:border-box;
|
||||
box-sizing:border-box;
|
||||
-moz-box-sizing:border-box;
|
||||
}
|
||||
|
||||
input[type="range"] {
|
||||
@@ -67,8 +66,8 @@
|
||||
|
||||
.progress-bar {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing:border-box;
|
||||
-moz-box-sizing:border-box;
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
width: 200px;
|
||||
height: 100%;
|
||||
@@ -112,26 +111,25 @@
|
||||
line-height: 80px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
i, h3 {
|
||||
.icon, h3 {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
i {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -40px;
|
||||
.icon {
|
||||
font-size: 80px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
margin: 0 0 0 20px;
|
||||
line-height: 80px;
|
||||
font-weight: 700;
|
||||
margin-left: 100px;
|
||||
font-size: 36px;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -249,6 +249,11 @@
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
// fix dropdown with checkbox + long text in label
|
||||
.dropdown-menu > li > .flex > label {
|
||||
flex: 1 1 0;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > a {
|
||||
padding: 8px 20px;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ ul.color-picker li a {
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: move;
|
||||
z-index: 6001;
|
||||
z-index: @zindexCropperOverlay;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
@@ -331,7 +331,7 @@ ul.color-picker li a {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 5999;
|
||||
z-index: @zindexCropperOverlay - 1;
|
||||
-moz-opacity: .75;
|
||||
opacity: .75;
|
||||
filter: alpha(opacity=7);
|
||||
@@ -438,6 +438,7 @@ ul.color-picker li a {
|
||||
top: 3px;
|
||||
right: 3px;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.umb-close-cropper:hover {
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
|
||||
.umb-tree div > a.umb-options {
|
||||
visibility: hidden;
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
.umb-tree div:hover > a.umb-options {
|
||||
visibility: visible;
|
||||
@@ -156,8 +157,8 @@
|
||||
|
||||
.umb-tree li > div a:not(.umb-options) {
|
||||
padding: 6px 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
|
||||
.umb-tree li > div:hover a:not(.umb-options) {
|
||||
|
||||
@@ -230,6 +230,12 @@
|
||||
@zindexModalBackdrop: 1040;
|
||||
@zindexModal: 1050;
|
||||
|
||||
@zindexUmbOverlay: 7500;
|
||||
@zindexOverlayBackdrop: 2000;
|
||||
|
||||
// Sticky bar has a z-index of "500", which is set from javascript in directive
|
||||
// so set z-index of cropper should be lower to be behind sticky bar.
|
||||
@zindexCropperOverlay: 499;
|
||||
|
||||
// Sprite icons path
|
||||
// -------------------------
|
||||
|
||||
@@ -31,6 +31,12 @@ app.config(function ($routeProvider) {
|
||||
userService.getCurrentUser({ broadcastEvent: broadcast }).then(function (user) {
|
||||
//is auth, check if we allow or reject
|
||||
if (isRequired) {
|
||||
|
||||
//This checks the current section and will force a redirect to 'content' as the default
|
||||
if ($route.current.params.section.toLowerCase() === "default" || $route.current.params.section.toLowerCase() === "umbraco" || $route.current.params.section === "") {
|
||||
$route.current.params.section = "content";
|
||||
}
|
||||
|
||||
// U4-5430, Benjamin Howarth
|
||||
// We need to change the current route params if the user only has access to a single section
|
||||
// To do this we need to grab the current user's allowed sections, then reject the promise with the correct path.
|
||||
@@ -98,26 +104,24 @@ app.config(function ($routeProvider) {
|
||||
resolve: doLogout()
|
||||
})
|
||||
.when('/:section', {
|
||||
|
||||
//This allows us to dynamically change the template for this route since you cannot inject services into the templateUrl method.
|
||||
template: "<div ng-include='templateUrl'></div>",
|
||||
//This controller will execute for this route, then we can execute some code in order to set the template Url
|
||||
controller: function ($scope, $route, $routeParams, $location, sectionService) {
|
||||
if ($routeParams.section.toLowerCase() === "default" || $routeParams.section.toLowerCase() === "umbraco" || $routeParams.section === "") {
|
||||
$routeParams.section = "content";
|
||||
}
|
||||
|
||||
//We are going to check the currently loaded sections for the user and if the section we are navigating
|
||||
|
||||
//We are going to check the currently loaded sections for the user and if the section we are navigating
|
||||
//to has a custom route path we'll use that
|
||||
sectionService.getSectionsForUser().then(function(sections) {
|
||||
//find the one we're requesting
|
||||
//find the one we're requesting
|
||||
var found = _.find(sections, function(s) {
|
||||
return s.alias === $routeParams.section;
|
||||
})
|
||||
})
|
||||
if (found && found.routePath) {
|
||||
//there's a custom route path so redirect
|
||||
$location.path(found.routePath);
|
||||
}
|
||||
else {
|
||||
else {
|
||||
//there's no custom route path so continue as normal
|
||||
$routeParams.url = "dashboard.aspx?app=" + $routeParams.section;
|
||||
$scope.templateUrl = 'views/common/dashboard.html';
|
||||
@@ -138,8 +142,8 @@ app.config(function ($routeProvider) {
|
||||
})
|
||||
.when('/:section/:tree/:method', {
|
||||
templateUrl: function (rp) {
|
||||
|
||||
//if there is no method registered for this then show the dashboard
|
||||
|
||||
//if there is no method registered for this then show the dashboard
|
||||
if (!rp.method)
|
||||
return "views/common/dashboard.html";
|
||||
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
<a class="umb-node-preview__action" title="Open" href="" ng-if="allowEdit" ng-click="onEdit()"><localize key="general_edit">Edit</localize></a>
|
||||
<a class="umb-node-preview__action" title="Open" href="" ng-if="allowOpen" ng-click="onOpen()"><localize key="general_open">Open</localize></a>
|
||||
<a class="umb-node-preview__action umb-node-preview__action--red" title="Remove" href="" ng-if="allowRemove" ng-click="onRemove()"><localize key="general_remove">Remove</localize></i></a>
|
||||
<div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div style="max-width: 800px; text-align: center; margin: auto; padding: 20px; min-height: 800px;">
|
||||
|
||||
<div class="installer-top"> <!-- ADDED -->
|
||||
<i style="font-size: 80px" class="icon icon-umb-contour"></i>
|
||||
<i class="icon icon-umb-contour"></i>
|
||||
<h3>Umbraco Forms</h3>
|
||||
</div> <!-- ADDED -->
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
//note on the below, we dont assign a view unless it's the right route since if we did that it will load in that controller
|
||||
//for the view which is unecessary and will cause extra overhead/requests to occur
|
||||
vm.page = {};
|
||||
vm.page.name = "User Management";
|
||||
vm.page.name = localizationService.localize("user_userManagement");
|
||||
vm.page.navigation = [
|
||||
{
|
||||
"name": localizationService.localize("sections_users"),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function UserEditController($scope, $timeout, $location, $routeParams, formHelper, usersResource, contentEditingHelper, localizationService, notificationsService, mediaHelper, Upload, umbRequestHelper, usersHelper, authResource, dateHelper) {
|
||||
function UserEditController($scope, $timeout, $location, $routeParams, formHelper, usersResource, userService, contentEditingHelper, localizationService, notificationsService, mediaHelper, Upload, umbRequestHelper, usersHelper, authResource, dateHelper) {
|
||||
|
||||
var vm = this;
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
function getLocalDate(date, format) {
|
||||
function getLocalDate(date, culture, format) {
|
||||
if(date) {
|
||||
var dateVal;
|
||||
var serverOffset = Umbraco.Sys.ServerVariables.application.serverTimeOffset;
|
||||
@@ -105,7 +105,7 @@
|
||||
dateVal = moment(date, "YYYY-MM-DD HH:mm:ss");
|
||||
}
|
||||
|
||||
return dateVal.format(format);
|
||||
return dateVal.locale(culture).format(format);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,11 +393,14 @@
|
||||
}
|
||||
|
||||
function formatDatesToLocal(user) {
|
||||
user.formattedLastLogin = getLocalDate(user.lastLoginDate, "MMMM Do YYYY, HH:mm");
|
||||
user.formattedLastLockoutDate = getLocalDate(user.lastLockoutDate, "MMMM Do YYYY, HH:mm");
|
||||
user.formattedCreateDate = getLocalDate(user.createDate, "MMMM Do YYYY, HH:mm");
|
||||
user.formattedUpdateDate = getLocalDate(user.updateDate, "MMMM Do YYYY, HH:mm");
|
||||
user.formattedLastPasswordChangeDate = getLocalDate(user.lastPasswordChangeDate, "MMMM Do YYYY, HH:mm");
|
||||
// get current backoffice user and format dates
|
||||
userService.getCurrentUser().then(function (currentUser) {
|
||||
user.formattedLastLogin = getLocalDate(user.lastLoginDate, currentUser.locale, "LLL");
|
||||
user.formattedLastLockoutDate = getLocalDate(user.lastLockoutDate, currentUser.locale, "LLL");
|
||||
user.formattedCreateDate = getLocalDate(user.createDate, currentUser.locale, "LLL");
|
||||
user.formattedUpdateDate = getLocalDate(user.updateDate, currentUser.locale, "LLL");
|
||||
user.formattedLastPasswordChangeDate = getLocalDate(user.lastPasswordChangeDate, currentUser.locale, "LLL");
|
||||
});
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</umb-load-indicator>
|
||||
|
||||
<div ng-if="!vm.loading" class="umb-packages-view-wrapper" style="padding: 0;">
|
||||
|
||||
|
||||
<div class="umb-package-details">
|
||||
|
||||
<div class="umb-package-details__main-content">
|
||||
@@ -30,17 +30,19 @@
|
||||
<umb-box-content class="block-form">
|
||||
|
||||
<umb-control-group label="@general_email" required="true">
|
||||
<input
|
||||
type="email"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enteremail"
|
||||
class="input-block-level"
|
||||
|
||||
<input
|
||||
type="email"
|
||||
localize="placeholder"
|
||||
placeholder="@placeholders_enteremail"
|
||||
class="input-block-level"
|
||||
ng-model="vm.user.email"
|
||||
umb-auto-focus name="email"
|
||||
required
|
||||
val-email
|
||||
required
|
||||
val-server-field="Email" />
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="valServerField"></span>
|
||||
<span class="help-inline" val-msg-for="email" val-toggle-msg="valServerField"></span>
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="@general_username" ng-if="!vm.usernameIsEmail" required="true">
|
||||
@@ -51,7 +53,7 @@
|
||||
class="input-block-level"
|
||||
ng-model="vm.user.username"
|
||||
umb-auto-focus name="username"
|
||||
required
|
||||
required
|
||||
val-server-field="Username" />
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="username" val-toggle-msg="valServerField"></span>
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
<umb-button
|
||||
type="button"
|
||||
label="Delete"
|
||||
label-key="general_delete"
|
||||
icon="icon-trash"
|
||||
action="vm.deleteUserGroups()"
|
||||
size="xs">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function UsersController($scope, $timeout, $location, usersResource, userGroupsResource, localizationService, contentEditingHelper, usersHelper, formHelper, notificationsService, dateHelper) {
|
||||
function UsersController($scope, $timeout, $location, usersResource, userGroupsResource, userService, localizationService, contentEditingHelper, usersHelper, formHelper, notificationsService, dateHelper) {
|
||||
|
||||
var vm = this;
|
||||
var localizeSaving = localizationService.localize("general_saving");
|
||||
@@ -20,6 +20,19 @@
|
||||
{ label: "Oldest", key: "CreateDate", direction: "Ascending" },
|
||||
{ label: "Last login", key: "LastLoginDate", direction: "Descending" }
|
||||
];
|
||||
|
||||
angular.forEach(vm.userSortData, function (userSortData) {
|
||||
var key = "user_sort" + userSortData.key + userSortData.direction;
|
||||
localizationService.localize(key).then(function (value) {
|
||||
var reg = /^\[[\S\s]*]$/g;
|
||||
var result = reg.test(value);
|
||||
if (result === false) {
|
||||
// Only translate if key exists
|
||||
userSortData.label = value;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
vm.userStatesFilter = [];
|
||||
vm.newUser.userGroups = [];
|
||||
vm.usersViewState = 'overview';
|
||||
@@ -284,10 +297,10 @@
|
||||
vm.selectedBulkUserGroups = _.clone(firstSelectedUser.userGroups);
|
||||
|
||||
vm.userGroupPicker = {
|
||||
title: "Select user groups",
|
||||
title: localizationService.localize("user_selectUserGroups"),
|
||||
view: "usergrouppicker",
|
||||
selection: vm.selectedBulkUserGroups,
|
||||
closeButtonLabel: "Cancel",
|
||||
closeButtonLabel: localizationService.localize("general_cancel"),
|
||||
show: true,
|
||||
submit: function (model) {
|
||||
usersResource.setUserGroupsOnUsers(model.selection, vm.selection).then(function (data) {
|
||||
@@ -320,10 +333,10 @@
|
||||
|
||||
function openUserGroupPicker(event) {
|
||||
vm.userGroupPicker = {
|
||||
title: "Select user groups",
|
||||
title: localizationService.localize("user_selectUserGroups"),
|
||||
view: "usergrouppicker",
|
||||
selection: vm.newUser.userGroups,
|
||||
closeButtonLabel: "Cancel",
|
||||
closeButtonLabel: localizationService.localize("general_cancel"),
|
||||
show: true,
|
||||
submit: function (model) {
|
||||
// apply changes
|
||||
@@ -583,7 +596,10 @@
|
||||
dateVal = moment(user.lastLoginDate, "YYYY-MM-DD HH:mm:ss");
|
||||
}
|
||||
|
||||
user.formattedLastLogin = dateVal.format("MMMM Do YYYY, HH:mm");
|
||||
// get current backoffice user and format date
|
||||
userService.getCurrentUser().then(function (currentUser) {
|
||||
user.formattedLastLogin = dateVal.locale(currentUser.locale).format("LLL");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@
|
||||
expect(valEmailExpression.EMAIL_REGEXP.test('a@3b.c')).toBe(true);
|
||||
expect(valEmailExpression.EMAIL_REGEXP.test('a@b')).toBe(true);
|
||||
expect(valEmailExpression.EMAIL_REGEXP.test('abc@xyz.financial')).toBe(true);
|
||||
|
||||
expect(valEmailExpression.EMAIL_REGEXP.test('admin@c.pizza')).toBe(true);
|
||||
expect(valEmailExpression.EMAIL_REGEXP.test('admin+gmail-syntax@c.pizza')).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1027,9 +1027,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
|
||||
<WebProjectProperties>
|
||||
<UseIIS>True</UseIIS>
|
||||
<AutoAssignPort>True</AutoAssignPort>
|
||||
<DevelopmentServerPort>7710</DevelopmentServerPort>
|
||||
<DevelopmentServerPort>7720</DevelopmentServerPort>
|
||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||
<IISUrl>http://localhost:7710</IISUrl>
|
||||
<IISUrl>http://localhost:7720</IISUrl>
|
||||
<NTLMAuthentication>False</NTLMAuthentication>
|
||||
<UseCustomServer>False</UseCustomServer>
|
||||
<CustomServerUrl>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@using Umbraco.Web
|
||||
@using Umbraco.Core.Configuration
|
||||
@using Umbraco.Web
|
||||
@using Umbraco.Web.Install.Controllers
|
||||
@{
|
||||
Layout = null;
|
||||
|
||||
@@ -12,13 +12,12 @@
|
||||
<key alias="copy">Kopier</key>
|
||||
<key alias="create">Opret</key>
|
||||
<key alias="createPackage">Opret pakke</key>
|
||||
<key alias="createGroup">Opret gruppe</key>
|
||||
<key alias="delete">Slet</key>
|
||||
<key alias="disable">Deaktivér</key>
|
||||
<key alias="emptyTrashcan">Tøm papirkurv</key>
|
||||
<key alias="enable">Aktivér</key>
|
||||
<key alias="exportDocumentType">Eksportér dokumenttype</key>
|
||||
<key alias="exportDocumentTypeAsCode">Eksportér til .NET</key>
|
||||
<key alias="exportDocumentTypeAsCode-Full">Eksportér til .NET</key>
|
||||
<key alias="importDocumentType">Importér dokumenttype</key>
|
||||
<key alias="importPackage">Importér pakke</key>
|
||||
<key alias="liveEdit">Redigér i Canvas</key>
|
||||
@@ -30,15 +29,48 @@
|
||||
<key alias="unpublish">Fortryd udgivelse</key>
|
||||
<key alias="refreshNode">Genindlæs elementer</key>
|
||||
<key alias="republish">Genudgiv hele sitet</key>
|
||||
<key alias="rename" version="7.3.0">Omdøb</key>
|
||||
<key alias="restore" version="7.3.0">Gendan</key>
|
||||
<key alias="SetPermissionsForThePage">Sæt rettigheder for siden %0%</key>
|
||||
<key alias="chooseWhereToMove">Vælg hvortil du vil flytte</key>
|
||||
<key alias="toInTheTreeStructureBelow">I træstrukturen nedenfor</key>
|
||||
<key alias="rights">Rettigheder</key>
|
||||
<key alias="rollback">Fortryd ændringer</key>
|
||||
<key alias="sendtopublish">Send til udgivelse</key>
|
||||
<key alias="sendToTranslate">Send til oversættelse</key>
|
||||
<key alias="setGroup">Sæt gruppe</key>
|
||||
<key alias="sort">Sortér</key>
|
||||
<key alias="translate">Oversæt</key>
|
||||
<key alias="update">Opdatér</key>
|
||||
<key alias="setPermissions">Sæt rettigheder</key>
|
||||
<key alias="unlock">Lås op</key>
|
||||
<key alias="createblueprint">Opret indholdsskabelon</key>
|
||||
</area>
|
||||
<area alias="actionCategories">
|
||||
<key alias="content">Indhold</key>
|
||||
<key alias="administration">Administration</key>
|
||||
<key alias="structure">Struktur</key>
|
||||
<key alias="other">Andet</key>
|
||||
</area>
|
||||
<area alias="actionDescriptions">
|
||||
<key alias="assignDomain">Tillad adgang til at tildele sprog og domæner</key>
|
||||
<key alias="auditTrail">Tillad adgang for at få vist en nodes historik</key>
|
||||
<key alias="browse">Tillad adgang for at få vist en node</key>
|
||||
<key alias="changeDocType">Tillad adgang til at ændre dokumenttype for en node</key>
|
||||
<key alias="copy">Tillad adgang til at kopiere en node</key>
|
||||
<key alias="create">Tillad adgang til at oprette noder</key>
|
||||
<key alias="delete">Tillad adgang til at slette noder</key>
|
||||
<key alias="move">Tillad adgang til at flytte en node</key>
|
||||
<key alias="protect">Tillad adgang til at indstille og ændre offentlig adgang til en node</key>
|
||||
<key alias="publish">Tillad adgang til at udgive en node</key>
|
||||
<key alias="rights">Tillad adgang til at ændre rettigheder for en node</key>
|
||||
<key alias="rollback">Tillad adgang til at returnere en node til en tidligere tilstand</key>
|
||||
<key alias="sendtopublish">Tillad adgang til at sende en node til godkendelse før den udgives</key>
|
||||
<key alias="sendToTranslate">Tillad adgang til at sende en node til oversættelse</key>
|
||||
<key alias="sort">Tillad adgang til at ændre sorteringsrækkefølge for noder</key>
|
||||
<key alias="translate">Tillad adgang til at oversætte en node</key>
|
||||
<key alias="update">Tillad adgang til at gemme en node</key>
|
||||
<key alias="createblueprint">Tillad adgang til at oprette en indholdsskabelon</key>
|
||||
</area>
|
||||
<area alias="assignDomain">
|
||||
<key alias="permissionDenied">Tilladelse nægtet.</key>
|
||||
@@ -55,6 +87,13 @@
|
||||
<key alias="domainUpdated">Domænet '%0%' er nu opdateret</key>
|
||||
<key alias="orEdit">eller rediger nuværende domæner</key>
|
||||
<key alias="domainHelp">f.eks. ditdomaene.com, www.ditdomaene.com</key>
|
||||
<key alias="inherit">Nedarv</key>
|
||||
<key alias="setLanguage">Sprog</key>
|
||||
<key alias="setLanguageHelp">
|
||||
<![CDATA[Indstil sproget for noder under den aktuelle node,<br /> eller nedarv sprog fra forældre noder. Gælder også<br />
|
||||
for den aktuelle node, medmindre et domæne nedenfor også indstiller et sprog.]]>
|
||||
</key>
|
||||
<key alias="setDomains">Domæner</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">For</key>
|
||||
@@ -92,6 +131,9 @@
|
||||
<key alias="styleShow">Vis koder</key>
|
||||
<key alias="tableInsert">Indsæt tabel</key>
|
||||
<key alias="generateModels">Generer modeller</key>
|
||||
<key alias="saveAndGenerateModels">Gem og generer modeller</key>
|
||||
<key alias="undo">Fortryd</key>
|
||||
<key alias="redo">Genskab</key>
|
||||
</area>
|
||||
<area alias="changeDocType">
|
||||
<key alias="changeDocTypeInstruction">For at skifte det valgte indholds dokumenttype, skal du først vælge en ny dokumenttype, som er gyldig på denne placering.</key>
|
||||
@@ -131,7 +173,10 @@
|
||||
<key alias="itemChanged">Dette punkt er ændret siden udgivelsen</key>
|
||||
<key alias="itemNotPublished">Dette punkt er endnu ikke udgivet</key>
|
||||
<key alias="lastPublished">Sidst udgivet</key>
|
||||
<key alias="noItemsToShow">Der er ingen elementer at vise</key>
|
||||
<key alias="listViewNoItems" version="7.1.5">Der er ingen elementer at vise på listen.</key>
|
||||
<key alias="listViewNoContent">Intet indhold er blevet tilføjet</key>
|
||||
<key alias="listViewNoMembers">Ingen medlemmer er blevet tilføjet</key>
|
||||
<key alias="mediatype">Medietype</key>
|
||||
<key alias="mediaLinks">Link til medie(r)</key>
|
||||
<key alias="membergroup">Medlemsgruppe</key>
|
||||
@@ -142,6 +187,8 @@
|
||||
<key alias="otherElements">Egenskaber</key>
|
||||
<key alias="parentNotPublished">Dette dokument er udgivet, men ikke synligt da den overliggende side '%0%' ikke er udgivet!</key>
|
||||
<key alias="parentNotPublishedAnomaly">Upd: dette dokument er udgiver, men er ikke i cachen (intern fejl)</key>
|
||||
<key alias="getUrlException">Kunne ikke hente url'en</key>
|
||||
<key alias="routeError">Dette dokument er udgivet, men dets url ville kollidere med indholdet %0%</key>
|
||||
<key alias="publish">Udgivet</key>
|
||||
<key alias="publishStatus">Udgivelsesstatus</key>
|
||||
<key alias="releaseDate">Udgivelsesdato</key>
|
||||
@@ -162,6 +209,22 @@
|
||||
<key alias="notmemberof">Ikke medlem af grupper(ne)</key>
|
||||
<key alias="childItems" version="7.0">Undersider</key>
|
||||
<key alias="target" version="7.0">Åben i vindue</key>
|
||||
<key alias="scheduledPublishServerTime">Dette oversætter til den følgende tid på serveren:</key>
|
||||
<key alias="scheduledPublishDocumentation"><![CDATA[<a href="https://our.umbraco.org/documentation/Getting-Started/Data/Scheduled-Publishing/#timezones" target="_blank">Hvad betyder det?</a>]]></key>
|
||||
<key alias="nestedContentDeleteItem">Er du sikker på, at du vil slette dette element?</key>
|
||||
<key alias="nestedContentEditorNotSupported">Egenskaben %0% anvender editoren %1% som ikke er understøttet af Nested Content.</key>
|
||||
<key alias="addTextBox">Tilføj en ny tekstboks</key>
|
||||
<key alias="removeTextBox">Fjern denne tekstboks</key>
|
||||
<key alias="contentRoot">Indholdsrod</key>
|
||||
</area>
|
||||
<area alias="blueprints">
|
||||
<key alias="createBlueprintFrom">Opret en ny indholdsskabelon fra '%0%'</key>
|
||||
<key alias="blankBlueprint">Blank</key>
|
||||
<key alias="selectBlueprint">Vælg en indholdsskabelon</key>
|
||||
<key alias="createdBlueprintHeading">Indholdsskabelon oprettet</key>
|
||||
<key alias="createdBlueprintMessage">En indholdsskabelon blev oprettet fra '%0%'</key>
|
||||
<key alias="duplicateBlueprintMessage">En anden indholdsskabelon med samme navn eksisterer allerede</key>
|
||||
<key alias="blueprintDescription">En indholdskabelon er foruddefineret indhold, som en redaktør kan vælge at bruge som grundlag for at oprette nyt indhold</key>
|
||||
</area>
|
||||
<area alias="media">
|
||||
<key alias="clickToUpload">Klik for at uploade</key>
|
||||
@@ -169,7 +232,9 @@
|
||||
<key alias="urls">Link til medie</key>
|
||||
<key alias="orClickHereToUpload">eller klik her for at vælge filer</key>
|
||||
<key alias="onlyAllowedFiles">Tilladte filtyper er kun</key>
|
||||
<key alias="disallowedFileType">Kan ikke uploade denne fil, den har ikke en godkendt filtype</key>
|
||||
<key alias="maxFileSize">Maks filstørrelse er</key>
|
||||
<key alias="mediaRoot">Medie rod</key>
|
||||
</area>
|
||||
<area alias="member">
|
||||
<key alias="createNewMember">Opret et nyt medlem</key>
|
||||
@@ -178,14 +243,21 @@
|
||||
<area alias="create">
|
||||
<key alias="chooseNode">Hvor ønsker du at oprette den nye %0%</key>
|
||||
<key alias="createUnder">Opret under</key>
|
||||
<key alias="createContentBlueprint">Vælg den dokumenttype, du vil oprette en indholdsskabelon til</key>
|
||||
<key alias="updateData">Vælg en type og skriv en titel</key>
|
||||
<key alias="noDocumentTypes" version="7.0"><![CDATA[Der kunne ikke findes nogen tilladte dokument typer. Du skal tillade disse i indstillinger under <strong>"dokument typer"</strong>.]]></key>
|
||||
<key alias="noMediaTypes" version="7.0"><![CDATA[Der kunne ikke findes nogen tilladte media typer. Du skal tillade disse i indstillinger under <strong>"media typer"</strong>.]]></key>
|
||||
<key alias="documentTypeWithoutTemplate">Dokumenttype uden skabelon</key>
|
||||
<key alias="newEmptyPartialView">Ny tom partial view</key>
|
||||
<key alias="newFolder">Ny mappe</key>
|
||||
<key alias="newDataType">Ny datatype</key>
|
||||
<key alias="newJavascriptFile">Ny javascript fil</key>
|
||||
<key alias="newEmptyPartialView">Ny tom partial view</key>
|
||||
<key alias="newFolder">Ny mappe</key>
|
||||
<key alias="newPartialViewMacro">Ny partial view makro</key>
|
||||
<key alias="newPartialViewFromSnippet">Ny partial view fra snippet</key>
|
||||
<key alias="newEmptyPartialViewMacro">Ny tom partial view makro</key>
|
||||
<key alias="newPartialViewMacroFromSnippet">Ny partial view makro fra snippet</key>
|
||||
<key alias="newPartialViewMacroNoMacro">Ny partial view makro (uden makro)</key>
|
||||
</area>
|
||||
<area alias="dashboard">
|
||||
<key alias="browser">Til dit website</key>
|
||||
@@ -231,6 +303,8 @@
|
||||
<key alias="copiedItemOfItems">Kopierede %0% ud af %1% elementer</key>
|
||||
</area>
|
||||
<area alias="defaultdialogs">
|
||||
<key alias="nodeNameLinkPicker">Link titel</key>
|
||||
<key alias="urlLinkPicker">Link</key>
|
||||
<key alias="anchorInsert">Navn på lokalt link</key>
|
||||
<key alias="assignDomain">Rediger domæner</key>
|
||||
<key alias="closeThisWindow">Luk denne dialog</key>
|
||||
@@ -258,6 +332,9 @@
|
||||
<key alias="macroDoesNotHaveProperties">Denne makro har ingen egenskaber du kan redigere</key>
|
||||
<key alias="paste">Indsæt tekst</key>
|
||||
<key alias="permissionsEdit">Rediger rettigheder for</key>
|
||||
<key alias="permissionsSet">Sæt rettigheder for</key>
|
||||
<key alias="permissionsSetForGroup">Sæt rettigheder for %0% for brugergruppe %1%</key>
|
||||
<key alias="permissionsHelp">Vælg de brugergrupper, du vil angive tilladelser til</key>
|
||||
<key alias="recycleBinDeleting">Elementerne i papirkurven slettes. Luk venligst ikke dette vindue mens sletningen foregår</key>
|
||||
<key alias="recycleBinIsEmpty">Papirkurven er nu tom</key>
|
||||
<key alias="recycleBinWarning">Når elementer slettes fra papirkurven, slettes de for altid</key>
|
||||
@@ -281,20 +358,28 @@
|
||||
<key alias="linkToPage">Link til side</key>
|
||||
<key alias="openInNewWindow">Åben linket i et nyt vindue eller fane</key>
|
||||
<key alias="linkToMedia">Link til medie</key>
|
||||
<key alias="linkToFile">Link til fil</key>
|
||||
<key alias="selectContentStartNode">Vælg indhold startnode</key>
|
||||
<key alias="selectMedia">Vælg medie</key>
|
||||
<key alias="selectIcon">Vælg ikon</key>
|
||||
<key alias="selectItem">Vælg item</key>
|
||||
<key alias="selectLink">Vælg link</key>
|
||||
<key alias="selectMacro">Vælg makro</key>
|
||||
<key alias="selectContent">Vælg indhold</key>
|
||||
<key alias="selectMediaStartNode">Vælg medie startnode</key>
|
||||
<key alias="selectMember">Vælg medlem</key>
|
||||
<key alias="selectMemberGroup">Vælg medlemsgruppe</key>
|
||||
<key alias="selectNode">Vælg node</key>
|
||||
<key alias="selectSections">Vælg sektioner</key>
|
||||
<key alias="selectUsers">Vælg brugere</key>
|
||||
<key alias="noIconsFound">Ingen ikoner blev fundet</key>
|
||||
<key alias="noMacroParams">Der er ingen parametre for denne makro</key>
|
||||
<key alias="noMacros">Der er ikke tilføjet nogen makroer</key>
|
||||
<key alias="linkYour">Link dit</key>
|
||||
<key alias="unLinkYour">Fjern link fra dit</key>
|
||||
<key alias="account">konto</key>
|
||||
<key alias="selectEditor">Vælg editor</key>
|
||||
<key alias="selectSnippet">Vælg snippet</key>
|
||||
</area>
|
||||
<area alias="dictionaryItem">
|
||||
<key alias="description">
|
||||
@@ -313,14 +398,18 @@
|
||||
<area alias="placeholders">
|
||||
<key alias="username">Indtast dit brugernavn</key>
|
||||
<key alias="password">Indtast dit kodeord</key>
|
||||
<key alias="confirmPassword">Bekræft dit kodeord</key>
|
||||
<key alias="nameentity">Navngiv %0%...</key>
|
||||
<key alias="entername">Indtast navn...</key>
|
||||
<key alias="enteremail">Indtast en e-mail...</key>
|
||||
<key alias="enterusername">Indtast et brugernavn...</key>
|
||||
<key alias="label">Label...</key>
|
||||
<key alias="enterDescription">Indtast beskrivelse</key>
|
||||
<key alias="search">Søg...</key>
|
||||
<key alias="filter">Filtrer...</key>
|
||||
<key alias="enterTags">Indtast nøgleord (tryk på Enter efter hvert nøgleord)...</key>
|
||||
<key alias="email">Indtast din e-mail</key>
|
||||
<key alias="enterMessage">Indtast en besked...</key>
|
||||
<key alias="usernameHint">Dit brugernavn er typisk din e-mailadresse</key>
|
||||
</area>
|
||||
<area alias="editcontenttype">
|
||||
@@ -341,6 +430,11 @@
|
||||
<key alias="createListView" version="7.2">Opret brugerdefineret listevisning</key>
|
||||
<key alias="removeListView" version="7.2">Fjern brugerdefineret listevisning</key>
|
||||
</area>
|
||||
<area alias="renamecontainer">
|
||||
<key alias="renamed">Omdøbt</key>
|
||||
<key alias="enterNewFolderName">Indtast et ny mappenavn her</key>
|
||||
<key alias="folderWasRenamed">%0% was renamed to %1%</key>
|
||||
</area>
|
||||
<area alias="editdatatype">
|
||||
<key alias="addPrevalue">Tilføj førværdi</key>
|
||||
<key alias="dataBaseDatatype">Database-datatype</key>
|
||||
@@ -353,6 +447,13 @@
|
||||
<key alias="rteRelatedStylesheets">Relaterede stylesheets</key>
|
||||
<key alias="rteShowLabel">Vis label</key>
|
||||
<key alias="rteWidthAndHeight">Bredde og højde</key>
|
||||
<key alias="allPropTypes">All property types & property data</key>
|
||||
<key alias="willBeDeleted">using this data type will be deleted permanently, please confirm you want to delete these as well</key>
|
||||
<key alias="yesDelete">Ja, slet</key>
|
||||
<key alias="andAllRelated">and all property types & property data using this data type</key>
|
||||
<key alias="selectFolder">Vælg den mappe, der skal flyttes</key>
|
||||
<key alias="inTheTree">til i træstrukturen nedenfor</key>
|
||||
<key alias="wasMoved">blev flyttet under</key>
|
||||
</area>
|
||||
<area alias="errorHandling">
|
||||
<key alias="errorButDataWasSaved">Dine data er blevet gemt, men før du kan udgive denne side er der nogle fejl der skal rettes:</key>
|
||||
@@ -424,15 +525,20 @@
|
||||
<key alias="email">E-mail</key>
|
||||
<key alias="error">Fejl</key>
|
||||
<key alias="findDocument">Find</key>
|
||||
<key alias="first">Første</key>
|
||||
<key alias="groups">Grupper</key>
|
||||
<key alias="height">Højde</key>
|
||||
<key alias="help">Hjælp</key>
|
||||
<key alias="hide">Skjul</key>
|
||||
<key alias="icon">Ikon</key>
|
||||
<key alias="import">Importer</key>
|
||||
<key alias="innerMargin">Indre margen</key>
|
||||
<key alias="insert">Indsæt</key>
|
||||
<key alias="install">Installér</key>
|
||||
<key alias="invalid">Ugyldig</key>
|
||||
<key alias="justify">Justering</key>
|
||||
<key alias="language">Sprog</key>
|
||||
<key alias="last">Sidste</key>
|
||||
<key alias="layout">Layout</key>
|
||||
<key alias="loading">Henter</key>
|
||||
<key alias="locked">Låst</key>
|
||||
@@ -440,6 +546,8 @@
|
||||
<key alias="logoff">Log af</key>
|
||||
<key alias="logout">Log ud</key>
|
||||
<key alias="macro">Makro</key>
|
||||
<key alias="mandatory">Påkrævet</key>
|
||||
<key alias="message">Besked</key>
|
||||
<key alias="move">Flyt</key>
|
||||
<key alias="more">Mere</key>
|
||||
<key alias="name">Navn</key>
|
||||
@@ -450,6 +558,7 @@
|
||||
<key alias="ok">OK</key>
|
||||
<key alias="open">Åben</key>
|
||||
<key alias="or">eller</key>
|
||||
<key alias="orderBy">Sortér efter</key>
|
||||
<key alias="password">Kodeord</key>
|
||||
<key alias="path">Sti</key>
|
||||
<key alias="placeHolderID">Placeholder ID</key>
|
||||
@@ -464,15 +573,18 @@
|
||||
<key alias="rename">Omdøb</key>
|
||||
<key alias="renew">Forny</key>
|
||||
<key alias="required" version="7.0">Påkrævet</key>
|
||||
<key alias="retrieve">Hent</key>
|
||||
<key alias="retry">Prøv igen</key>
|
||||
<key alias="rights">Rettigheder</key>
|
||||
<key alias="search">Søg</key>
|
||||
<key alias="searchNoResult">Beklager, vi kan ikke finde det, du leder efter.</key>
|
||||
<key alias="noItemsInList">Ingen elementer er blevet tilføjet</key>
|
||||
<key alias="server">Server</key>
|
||||
<key alias="show">Vis</key>
|
||||
<key alias="showPageOnSend">Hvilken side skal vises efter at formularen er sendt</key>
|
||||
<key alias="size">Størrelse</key>
|
||||
<key alias="sort">Sortér</key>
|
||||
<key alias="status">Status</key>
|
||||
<key alias="submit">Indsend</key>
|
||||
<!-- TODO: Translate this -->
|
||||
<key alias="type">Type</key>
|
||||
@@ -703,7 +815,40 @@ Mange hilsner fra Umbraco robotten
|
||||
</area>
|
||||
<area alias="packager">
|
||||
<key alias="chooseLocalPackageText">Vælg pakken fra din computer. Umbraco pakker er oftest en ".zip" fil</key>
|
||||
<key alias="packageAuthor">Udvikler</key>
|
||||
<key alias="dropHere">Slip her for at uploade</key>
|
||||
<key alias="orClickHereToUpload">eller klik her for at vælge pakkefil</key>
|
||||
<key alias="uploadPackage">Upload pakke</key>
|
||||
<key alias="localPackageDescription">Installer en lokal pakke ved at vælge den fra din computer. Installer kun pakker fra kilder, du kender og stoler på</key>
|
||||
<key alias="uploadAnother">Upload en anden pakke</key>
|
||||
<key alias="cancelAndUploadAnother">Annuller og upload en anden pakke</key>
|
||||
<key alias="packageLicense">Licens</key>
|
||||
<key alias="accept">Jeg accepterer</key>
|
||||
<key alias="termsOfUse">betingelser for anvendelse</key>
|
||||
<key alias="packageInstall">Installér pakke</key>
|
||||
<key alias="installFinish">Afslut</key>
|
||||
<key alias="installedPackages">Installeret pakker</key>
|
||||
<key alias="noPackages">Du har ingen pakker installeret</key>
|
||||
<key alias="noPackagesDescription"><![CDATA[Du har ikke nogen pakker installeret. Du kan enten installere en lokal pakke ved at vælge den fra din computer eller gennemse de tilgængelige pakker ved hjælp af ikonet <strong>'Pakker'</strong> øverst til højre på din skærm]]></key>
|
||||
<key alias="packageSearch">Søg efter pakker</key>
|
||||
<key alias="packageSearchResults">Resultater for</key>
|
||||
<key alias="packageNoResults">Vi kunne ikke finde resultater for</key>
|
||||
<key alias="packageNoResultsDescription">Prøv venligst at søge efter en anden pakke eller gennemse kategorierne</key>
|
||||
<key alias="packagesPopular">Populære</key>
|
||||
<key alias="packagesNew">Nye udgivelser</key>
|
||||
<key alias="packageHas">har</key>
|
||||
<key alias="packageKarmaPoints">karma points</key>
|
||||
<key alias="packageInfo">Information</key>
|
||||
<key alias="packageOwner">Ejer</key>
|
||||
<key alias="packageContrib">Bidragsydere</key>
|
||||
<key alias="packageCreated">Oprettet</key>
|
||||
<key alias="packageCurrentVersion">Nuværende version</key>
|
||||
<key alias="packageNetVersion">.NET version</key>
|
||||
<key alias="packageDownloads">Downloads</key>
|
||||
<key alias="packageLikes">Likes</key>
|
||||
<key alias="packageCompatibility">Kompatibilitet</key>
|
||||
<key alias="packageCompatibilityDescription">Denne pakke er kompatibel med de følgende versioner af Umbraco, som rapporteret af community-medlemmer. Fuld kompatibilitet kan ikke garanteres for versioner rapporteret nedenfor 100%</key>
|
||||
<key alias="packageExternalSources">Eksterne kilder</key>
|
||||
<key alias="packageAuthor">Forfatter</key>
|
||||
<key alias="packageDemonstration">Demonstration</key>
|
||||
<key alias="packageDocumentation">Dokumentation</key>
|
||||
<key alias="packageMetaData">Pakke meta data</key>
|
||||
@@ -727,7 +872,18 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="packageUpgradeInstructions">Opdateringsinstrukser</key>
|
||||
<key alias="packageUpgradeText">Der er en tilgængelig opdatering til denne pakke. Du kan downloade den direkte fra Umbracos pakke opbevaringsbase.</key>
|
||||
<key alias="packageVersion">Pakke version</key>
|
||||
<key alias="packageVersionHistory">Pakke versionshistorik</key>
|
||||
<key alias="viewPackageWebsite">Se pakkeudviklerens website</key>
|
||||
<key alias="packageAlreadyInstalled">Pakke allerede installeret</key>
|
||||
<key alias="targetVersionMismatch">Denne pakke kan ikke installeres, den kræver en minimum Umbraco version af</key>
|
||||
<key alias="installStateUninstalling">Afinstallerer...</key>
|
||||
<key alias="installStateDownloading">Downloader...</key>
|
||||
<key alias="installStateImporting">Importeret...</key>
|
||||
<key alias="installStateInstalling">Installerer...</key>
|
||||
<key alias="installStateRestarting">Genstarter, vent venligst...</key>
|
||||
<key alias="installStateComplete">Færdig, din browser opdateres nu, vent venligst...</key>
|
||||
<key alias="installStateCompleted">Klik venligst på 'Afslut' for at gennemføre installation og opdatere siden.</key>
|
||||
<key alias="installStateUploading">Uploader pakke...</key>
|
||||
</area>
|
||||
<area alias="paste">
|
||||
<key alias="doNothing">Indsæt med fuld formattering (Anbefales ikke)</key>
|
||||
@@ -791,108 +947,7 @@ Mange hilsner fra Umbraco robotten
|
||||
<area alias="imagecropper">
|
||||
<key alias="reset">Nulstil</key>
|
||||
</area>
|
||||
<area alias="grid">
|
||||
<key alias="insertControl">Vælg indholdstype</key>
|
||||
<key alias="chooseLayout">Vælg layout</key>
|
||||
<key alias="addRows">Tilføj række</key>
|
||||
<key alias="addElement">Tilføj indhold</key>
|
||||
<key alias="dropElement">Slip indhold</key>
|
||||
<key alias="settingsApplied">Indstillinger tilføjet</key>
|
||||
|
||||
<key alias="contentNotAllowed">Indholdet er ikke tilladt her</key>
|
||||
<key alias="contentAllowed">Indholdet er tilladt her</key>
|
||||
|
||||
<key alias="clickToEmbed">Klik for at indlejre</key>
|
||||
<key alias="clickToInsertImage">Klik for at indsætte et billede</key>
|
||||
<key alias="placeholderImageCaption">Billedtekst...</key>
|
||||
<key alias="placeholderWriteHere">Skriv her...</key>
|
||||
|
||||
<key alias="gridLayouts">Gridlayout</key>
|
||||
<key alias="gridLayoutsDetail">Et layout er det overordnede arbejdsområde til dit gitter - du vil typisk kun behøve ét eller to</key>
|
||||
<key alias="addGridLayout">Tilføj gitterlayout</key>
|
||||
<key alias="addGridLayoutDetail">Juster dit layout ved at justere kolonnebredder og tilføj yderligere sektioner</key>
|
||||
|
||||
<key alias="rowConfigurations">Rækkekonfigurationer</key>
|
||||
<key alias="rowConfigurationsDetail">Rækker er foruddefinerede celler, der arrangeres vandret</key>
|
||||
<key alias="addRowConfiguration">Tilføj rækkekonfiguration</key>
|
||||
<key alias="addRowConfigurationDetail">Juster rækken ved at indstille cellebredder og tilføje yderligere celler</key>
|
||||
|
||||
<key alias="columns">Kolonner</key>
|
||||
<key alias="columnsDetails">Det totale antaller kolonner i gitteret</key>
|
||||
|
||||
<key alias="settings">Indstillinger</key>
|
||||
<key alias="settingsDetails">Konfigurer, hvilket indstillinger, brugeren kan ændre</key>
|
||||
|
||||
|
||||
<key alias="styles">Typografi</key>
|
||||
<key alias="stylesDetails">Vælg, hvilke typografiværdier, en redaktør kan ændre</key>
|
||||
|
||||
<key alias="settingDialogDetails">Indstillinger gemmes kun, hvis den indtaste json-konfiguration er gyldig</key>
|
||||
|
||||
<key alias="allowAllEditors">Tillad alle editorer</key>
|
||||
<key alias="allowAllRowConfigurations">Tillad alle rækkekonfigurationer</key>
|
||||
|
||||
<key alias="setAsDefault">Sæt som standard</key>
|
||||
<key alias="chooseExtra">Vælg ekstra</key>
|
||||
<key alias="chooseDefault">Vælg standard</key>
|
||||
<key alias="areAdded">er tilføjet</key>
|
||||
</area>
|
||||
|
||||
<area alias="contentTypeEditor">
|
||||
|
||||
<key alias="compositions">Kompositioner</key>
|
||||
<key alias="noTabs">Du har ikke tilføjet nogle faner</key>
|
||||
<key alias="addNewTab">Tilføj ny fane</key>
|
||||
<key alias="addAnotherTab">Tilføj endnu en fane</key>
|
||||
<key alias="inheritedFrom">Nedarvet fra</key>
|
||||
<key alias="addProperty">Tilføj property</key>
|
||||
<key alias="requiredLabel">Påkrævet label</key>
|
||||
|
||||
<key alias="enableListViewHeading">Aktiver listevisning</key>
|
||||
<key alias="enableListViewDescription">Konfigurer indholdet til at blive vist i en sorterbar og søgbar liste, dens børn vil ikke blive vist i træet</key>
|
||||
|
||||
<key alias="allowedTemplatesHeading">Tilladte skabeloner</key>
|
||||
<key alias="allowedTemplatesDescription">Vælg hvilke skabeloner der er tilladt at bruge på dette indhold</key>
|
||||
|
||||
<key alias="allowAsRootHeading">Tillad på rodniveau</key>
|
||||
<key alias="allowAsRootDescription">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under inhold og mediearkiv</key>
|
||||
<key alias="allowAsRootCheckbox">Ja – indhold af denne type er tilladt i roden</key>
|
||||
|
||||
<key alias="childNodesHeading">Tilladte typer</key>
|
||||
<key alias="childNodesDescription">Tillad at oprette indhold af en specifik type under denne</key>
|
||||
|
||||
<key alias="chooseChildNode">Vælg child node</key>
|
||||
|
||||
<key alias="compositionsDescription">Nedarv faner og egenskaber fra en anden dokumenttype. Nye faner vil blive tilføjet den nuværende dokumenttype eller sammenflettet hvis fanenavnene er ens.</key>
|
||||
<key alias="compositionInUse">Indholdstypen bliver brugt i en komposition og kan derfor ikke blive anvendt som komposition</key>
|
||||
<key alias="noAvailableCompositions">Der er ingen indholdstyper tilgængelige at bruge som komposition</key>
|
||||
|
||||
<key alias="availableEditors">Tilgængelige editors</key>
|
||||
<key alias="reuse">Genbrug</key>
|
||||
<key alias="editorSettings">Editor indstillinger</key>
|
||||
|
||||
<key alias="configuration">Konfiguration</key>
|
||||
|
||||
<key alias="yesDelete">Ja, slet</key>
|
||||
|
||||
<key alias="movedUnderneath">blev flyttet til</key>
|
||||
<key alias="folderToMove">Vælg hvor</key>
|
||||
<key alias="structureBelow">skal flyttes til</key>
|
||||
|
||||
<key alias="allDocumentTypes">Alle dokumenttyper</key>
|
||||
<key alias="allDocuments">Alle dokumenter</key>
|
||||
<key alias="allMediaItems">Alle medier</key>
|
||||
|
||||
<key alias="usingThisDocument">som benytter denne dokumenttype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
<key alias="usingThisMedia">som benytter denne medietype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
<key alias="usingThisMember">som benytter denne medlemstype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
|
||||
<key alias="andAllDocuments">og alle dokumenter, som benytter denne type</key>
|
||||
<key alias="andAllMediaItems">og alle medier, som benytter denne type</key>
|
||||
<key alias="andAllMembers">og alle medlemmer, som benytter denne type</key>
|
||||
|
||||
<key alias="thisEditorUpdateSettings">der bruger denne editor vil blive opdateret med de nye indstillinger</key>
|
||||
</area>
|
||||
|
||||
|
||||
<area alias="rollback">
|
||||
<key alias="currentVersion">Nuværende version</key>
|
||||
@@ -1008,13 +1063,36 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="partialViewSavedText">Partial view gemt uden fejl!</key>
|
||||
<key alias="partialViewErrorHeader">Partial view ikke gemt</key>
|
||||
<key alias="partialViewErrorText">Der opstod en fejl ved at gemme filen.</key>
|
||||
<key alias="permissionsSavedFor">Rettigheder gemt for</key>
|
||||
<key alias="scriptSavedHeader">Script view gemt</key>
|
||||
<key alias="scriptSavedText">Script view gemt uden fejl!</key>
|
||||
<key alias="scriptErrorHeader">Script view ikke gemt</key>
|
||||
<key alias="scriptErrorText">An error occurred saving the file.</key>
|
||||
<key alias="cssErrorText">An error occurred saving the file.</key>
|
||||
<key alias="deleteUserGroupsSuccess">Slettede %0% brugergrupper</key>
|
||||
<key alias="deleteUserGroupSuccess">%0% blev slettet</key>
|
||||
<key alias="enableUsersSuccess">Aktiverede %0% brugere</key>
|
||||
<key alias="enableUsersError">Der opstod en fejl under aktivering af brugerne</key>
|
||||
<key alias="disableUsersSuccess">Deaktiverede %0% brugere</key>
|
||||
<key alias="disableUsersError">Der opstod en fejl under deaktivering af brugerne</key>
|
||||
<key alias="enableUserSuccess">%0% er nu aktiveret</key>
|
||||
<key alias="enableUserError">Der opstod en fejl under aktivering af brugeren</key>
|
||||
<key alias="disableUserSuccess">%0% er nu deaktiveret</key>
|
||||
<key alias="disableUserError">Der opstod en fejl under deaktivering af brugeren</key>
|
||||
<key alias="setUserGroupOnUsersSuccess">Brugergrupper er blevet indstillet</key>
|
||||
<key alias="deleteUserGroupsSuccess">Slettede %0% brugergrupper</key>
|
||||
<key alias="deleteUserGroupSuccess">%0% blev slettet</key>
|
||||
<key alias="unlockUsersSuccess">Låste %0% brugere op</key>
|
||||
<key alias="unlockUsersError">Der opstod en fejl under oplåsning af brugerne</key>
|
||||
<key alias="unlockUserSuccess">%0% er nu låst op</key>
|
||||
<key alias="unlockUserError">Der opstod en fejl under oplåsning af brugeren</key>
|
||||
</area>
|
||||
<area alias="stylesheet">
|
||||
<key alias="aliasHelp">Bruger CSS-syntax f.eks. h1, .redheader, .blueTex</key>
|
||||
<key alias="aliasHelp">Bruger CSS-syntaks f.eks. h1, .redheader, .blueTex</key>
|
||||
<key alias="editstylesheet">Rediger stylesheet</key>
|
||||
<key alias="editstylesheetproperty">Rediger CSS-egenskab</key>
|
||||
<key alias="nameHelp">Navn der identificerer CSS-egenskaben i tekstredigeringsværktøjet</key>
|
||||
<key alias="preview">Vis prøve</key>
|
||||
<key alias="preview">Forhåndsvisning</key>
|
||||
<key alias="styles">Styles</key>
|
||||
</area>
|
||||
|
||||
@@ -1127,7 +1205,111 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="template">Skabelon</key>
|
||||
</area>
|
||||
|
||||
|
||||
<area alias="grid">
|
||||
<key alias="insertControl">Vælg indholdstype</key>
|
||||
<key alias="chooseLayout">Vælg layout</key>
|
||||
<key alias="addRows">Tilføj række</key>
|
||||
<key alias="addElement">Tilføj indhold</key>
|
||||
<key alias="dropElement">Slip indhold</key>
|
||||
<key alias="settingsApplied">Indstillinger tilføjet</key>
|
||||
|
||||
<key alias="contentNotAllowed">Indholdet er ikke tilladt her</key>
|
||||
<key alias="contentAllowed">Indholdet er tilladt her</key>
|
||||
|
||||
<key alias="clickToEmbed">Klik for at indlejre</key>
|
||||
<key alias="clickToInsertImage">Klik for at indsætte et billede</key>
|
||||
<key alias="placeholderImageCaption">Billedtekst...</key>
|
||||
<key alias="placeholderWriteHere">Skriv her...</key>
|
||||
|
||||
<key alias="gridLayouts">Gitterlayout</key>
|
||||
<key alias="gridLayoutsDetail">Et layout er det overordnede arbejdsområde til dit gitter - du vil typisk kun behøve ét eller to</key>
|
||||
<key alias="addGridLayout">Tilføj gitterlayout</key>
|
||||
<key alias="addGridLayoutDetail">Juster dit layout ved at justere kolonnebredder og tilføj yderligere sektioner</key>
|
||||
|
||||
<key alias="rowConfigurations">Rækkekonfigurationer</key>
|
||||
<key alias="rowConfigurationsDetail">Rækker er foruddefinerede celler, der arrangeres vandret</key>
|
||||
<key alias="addRowConfiguration">Tilføj rækkekonfiguration</key>
|
||||
<key alias="addRowConfigurationDetail">Juster rækken ved at indstille cellebredder og tilføje yderligere celler</key>
|
||||
|
||||
<key alias="columns">Kolonner</key>
|
||||
<key alias="columnsDetails">Det totale antaller kolonner i gitteret</key>
|
||||
|
||||
<key alias="settings">Indstillinger</key>
|
||||
<key alias="settingsDetails">Konfigurer, hvilket indstillinger, brugeren kan ændre</key>
|
||||
|
||||
|
||||
<key alias="styles">Typografi</key>
|
||||
<key alias="stylesDetails">Vælg, hvilke typografiværdier, en redaktør kan ændre</key>
|
||||
|
||||
<key alias="settingDialogDetails">Indstillinger gemmes kun, hvis den indtaste json-konfiguration er gyldig</key>
|
||||
|
||||
<key alias="allowAllEditors">Tillad alle editorer</key>
|
||||
<key alias="allowAllRowConfigurations">Tillad alle rækkekonfigurationer</key>
|
||||
|
||||
<key alias="setAsDefault">Sæt som standard</key>
|
||||
<key alias="chooseExtra">Vælg ekstra</key>
|
||||
<key alias="chooseDefault">Vælg standard</key>
|
||||
<key alias="areAdded">er tilføjet</key>
|
||||
|
||||
</area>
|
||||
<area alias="contentTypeEditor">
|
||||
|
||||
<key alias="compositions">Kompositioner</key>
|
||||
<key alias="noTabs">Du har ikke tilføjet nogle faner</key>
|
||||
<key alias="addNewTab">Tilføj ny fane</key>
|
||||
<key alias="addAnotherTab">Tilføj endnu en fane</key>
|
||||
<key alias="inheritedFrom">Nedarvet fra</key>
|
||||
<key alias="addProperty">Tilføj property</key>
|
||||
<key alias="requiredLabel">Påkrævet label</key>
|
||||
|
||||
<key alias="enableListViewHeading">Aktiver listevisning</key>
|
||||
<key alias="enableListViewDescription">Konfigurer indholdet til at blive vist i en sorterbar og søgbar liste, dens børn vil ikke blive vist i træet</key>
|
||||
|
||||
<key alias="allowedTemplatesHeading">Tilladte skabeloner</key>
|
||||
<key alias="allowedTemplatesDescription">Vælg hvilke skabeloner der er tilladt at bruge på dette indhold</key>
|
||||
|
||||
<key alias="allowAsRootHeading">Tillad på rodniveau</key>
|
||||
<key alias="allowAsRootDescription">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under inhold og mediearkiv</key>
|
||||
<key alias="allowAsRootCheckbox">Ja – indhold af denne type er tilladt i roden</key>
|
||||
|
||||
<key alias="childNodesHeading">Tilladte typer</key>
|
||||
<key alias="childNodesDescription">Tillad at oprette indhold af en specifik type under denne</key>
|
||||
|
||||
<key alias="chooseChildNode">Vælg child node</key>
|
||||
|
||||
<key alias="compositionsDescription">Nedarv faner og egenskaber fra en anden dokumenttype. Nye faner vil blive tilføjet den nuværende dokumenttype eller sammenflettet hvis fanenavnene er ens.</key>
|
||||
<key alias="compositionInUse">Indholdstypen bliver brugt i en komposition og kan derfor ikke blive anvendt som komposition</key>
|
||||
<key alias="noAvailableCompositions">Der er ingen indholdstyper tilgængelige at bruge som komposition</key>
|
||||
|
||||
<key alias="availableEditors">Tilgængelige editors</key>
|
||||
<key alias="reuse">Genbrug</key>
|
||||
<key alias="editorSettings">Editor indstillinger</key>
|
||||
|
||||
<key alias="configuration">Konfiguration</key>
|
||||
|
||||
<key alias="yesDelete">Ja, slet</key>
|
||||
|
||||
<key alias="movedUnderneath">blev flyttet til</key>
|
||||
<key alias="folderToMove">Vælg hvor</key>
|
||||
<key alias="structureBelow">skal flyttes til</key>
|
||||
|
||||
<key alias="allDocumentTypes">Alle dokumenttyper</key>
|
||||
<key alias="allDocuments">Alle dokumenter</key>
|
||||
<key alias="allMediaItems">Alle medier</key>
|
||||
|
||||
<key alias="usingThisDocument">som benytter denne dokumenttype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
<key alias="usingThisMedia">som benytter denne medietype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
<key alias="usingThisMember">som benytter denne medlemstype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
|
||||
|
||||
<key alias="andAllDocuments">og alle dokumenter, som benytter denne type</key>
|
||||
<key alias="andAllMediaItems">og alle medier, som benytter denne type</key>
|
||||
<key alias="andAllMembers">og alle medlemmer, som benytter denne type</key>
|
||||
|
||||
<key alias="thisEditorUpdateSettings">der bruger denne editor vil blive opdateret med de nye indstillinger</key>
|
||||
<key alias="memberCanEdit">Medlem kan redigere</key>
|
||||
<key alias="showOnMemberProfile">Vis på medlemsprofil</key>
|
||||
<key alias="tabHasNoSortOrder">fane har ingen sorteringsrækkefølge</key>
|
||||
</area>
|
||||
<area alias="templateEditor">
|
||||
<key alias="alternativeField">Alternativt felt</key>
|
||||
<key alias="alternativeText">Alternativ tekst</key>
|
||||
@@ -1183,6 +1365,9 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="uploadTranslationXml">Upload oversættelse (xml)</key>
|
||||
</area>
|
||||
<area alias="treeHeaders">
|
||||
<key alias="content">Indhold</key>
|
||||
<key alias="contentBlueprints">Indholdsskabeloner</key>
|
||||
<key alias="media">Mediearkiv</key>
|
||||
<key alias="cacheBrowser">Cacheviser</key>
|
||||
<key alias="contentRecycleBin">Papirkurv</key>
|
||||
<key alias="createdPackages">Oprettede pakker</key>
|
||||
@@ -1215,6 +1400,7 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="templates">Skabeloner</key>
|
||||
<key alias="xslt">XSLT-filer</key>
|
||||
<key alias="analytics">Analytics</key>
|
||||
<key alias="users">Brugere</key>
|
||||
</area>
|
||||
<area alias="update">
|
||||
<key alias="updateAvailable">Ny opdatering er klar</key>
|
||||
@@ -1224,23 +1410,41 @@ Mange hilsner fra Umbraco robotten
|
||||
</area>
|
||||
<area alias="user">
|
||||
<key alias="access">Adgang</key>
|
||||
<key alias="accessHelp">Baseret på de tildelte grupper og startnoder har brugeren adgang til følgende noder</key>
|
||||
<key alias="assignAccess">Tildel adgang</key>
|
||||
<key alias="administrators">Administrator</key>
|
||||
<key alias="categoryField">Kategorifelt</key>
|
||||
<key alias="createDate">Bruger oprettet</key>
|
||||
<key alias="changePassword">Skift dit kodeord</key>
|
||||
<key alias="changePhoto">Skift billede</key>
|
||||
<key alias="newPassword">Nyt kodeord</key>
|
||||
<key alias="noLockouts">er ikke blevet låst ude</key>
|
||||
<key alias="noPasswordChange">Kodeordet er ikke blevet ændret</key>
|
||||
<key alias="confirmNewPassword">Gentag dit nye kodeord</key>
|
||||
<key alias="changePasswordDescription">Du kan ændre dit kodeord, som giver dig adgang til Umbraco Back Office ved at udfylde formularen og klikke på knappen 'Skift dit kodeord'</key>
|
||||
<key alias="contentChannel">Indholdskanal</key>
|
||||
<key alias="changePhoto">Skift billede</key>
|
||||
<key alias="createUserHelp">Opret nye brugere for at give dem adgang til Umbraco. Når en ny bruger oprettes, genereres der en adgangskode, som du kan dele med brugeren.</key>
|
||||
<key alias="descriptionField">Beskrivelsesfelt</key>
|
||||
<key alias="disabled">Deaktivér bruger</key>
|
||||
<key alias="documentType">Dokumenttype</key>
|
||||
<key alias="editors">Redaktør</key>
|
||||
<key alias="excerptField">Uddragsfelt</key>
|
||||
<key alias="failedPasswordAttempts">Fejlet loginforsøg</key>
|
||||
<key alias="goToProfile">Gå til brugerprofil</key>
|
||||
<key alias="groupsHelp">Tilføj grupper for at tildele adgang og tilladelser</key>
|
||||
<key alias="inviteAnotherUser">Invitér anden bruger</key>
|
||||
<key alias="inviteUserHelp">Invitér nye brugere til at give dem adgang til Umbraco. En invitation vil blive sendt via e-mail til brugeren med oplysninger om, hvordan man logger ind i Umbraco.</key>
|
||||
<key alias="language">Sprog</key>
|
||||
<key alias="lastLogin">Sidste login</key>
|
||||
<key alias="languageHelp">Indstil det sprog, du vil se i menuer og dialoger</key>
|
||||
<key alias="lastLockoutDate">Seneste låst ude dato</key>
|
||||
<key alias="lastLogin">Senest login</key>
|
||||
<key alias="lastPasswordChangeDate">Kodeord sidst ændret</key>
|
||||
<key alias="loginname">Brugernavn</key>
|
||||
<key alias="mediastartnode">Startnode i mediearkivet</key>
|
||||
<key alias="mediastartnodehelp">Begræns mediebiblioteket til en bestemt startnode</key>
|
||||
<key alias="mediastartnodes">Medie startnoder</key>
|
||||
<key alias="mediastartnodeshelp">Begræns mediebiblioteket til bestemte startnoder</key>
|
||||
<key alias="modules">Moduler</key>
|
||||
<key alias="noConsole">Deaktivér adgang til Umbraco</key>
|
||||
<key alias="noLogin">har endnu ikke logget ind</key>
|
||||
@@ -1259,17 +1463,58 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="permissionReplaceChildren">Erstat underelement-rettigheder</key>
|
||||
<key alias="permissionSelectedPages">Du ændrer i øjeblikket rettigheder for siderne:</key>
|
||||
<key alias="permissionSelectPages">Vælg sider for at ændre deres rettigheder</key>
|
||||
<key alias="removePhoto">Fjern billede</key>
|
||||
<key alias="permissionsDefault">Standard rettigheder</key>
|
||||
<key alias="permissionsGranular">Granulære rettigheder</key>
|
||||
<key alias="permissionsGranularHelp">Sæt rettigheder for specifikke noder</key>
|
||||
<key alias="profile">Profil</key>
|
||||
<key alias="searchAllChildren">Søg alle 'børn'</key>
|
||||
<key alias="startnode">Start node</key>
|
||||
<key alias="stateActive">Aktiv</key>
|
||||
<key alias="stateAll">Alle</key>
|
||||
<key alias="stateDisabled">Deaktiveret</key>
|
||||
<key alias="stateLockedOut">Låst ude</key>
|
||||
<key alias="stateInvited">Inviteret</key>
|
||||
<key alias="sortNameAscending">Navn (A-Å)</key>
|
||||
<key alias="sortNameDescending">Navn (Å-A)</key>
|
||||
<key alias="sortCreateDateDescending">Nyeste</key>
|
||||
<key alias="sortCreateDateAscending">Ældste</key>
|
||||
<key alias="sortLastLoginDateDescending">Senest login</key>
|
||||
<key alias="sectionsHelp">Tilføj sektioner for at give brugerne adgang</key>
|
||||
<key alias="selectUserGroups">Vælg brugergrupper</key>
|
||||
<key alias="noStartNode">Ingen startnode valgt</key>
|
||||
<key alias="noStartNodes">Ingen startnoder valgt</key>
|
||||
<key alias="startnode">Startnode</key>
|
||||
<key alias="startnodehelp">Begræns indholdstræet til en bestemt startnode</key>
|
||||
<key alias="startnodes">Indhold startnoder</key>
|
||||
<key alias="startnodeshelp">Begræns indholdstræet til bestemte startnoder</key>
|
||||
<key alias="updateDate">Bruger sidst opdateret</key>
|
||||
<key alias="userCreated">er blevet oprettet</key>
|
||||
<key alias="userCreatedSuccessHelp">Den nye bruger er blevet oprettet. For at logge ind i Umbraco skal du bruge adgangskoden nedenfor.</key>
|
||||
<key alias="userManagement">Brugeradministration</key>
|
||||
<key alias="username">Navn</key>
|
||||
<key alias="userPermissions">Brugertilladelser</key>
|
||||
<key alias="userGroupPermissions">Brugergruppe tilladelser</key>
|
||||
<key alias="usergroup">Brugergruppe</key>
|
||||
<key alias="userGroups">Brugergrupper</key>
|
||||
<key alias="userInvited">er blevet inviteret</key>
|
||||
<key alias="userInvitedSuccessHelp">En invitation er blevet sendt til den nye bruger med oplysninger om, hvordan man logger ind i Umbraco.</key>
|
||||
<key alias="userinviteWelcomeMessage">Hej og velkommen til Umbraco! På bare 1 minut vil du være klar til at komme i gang, vi skal bare have dig til at oprette en adgangskode og tilføje et billede til din avatar.</key>
|
||||
<key alias="userinviteAvatarMessage">Upload et billede for at gøre det nemt for andre brugere at genkende dig.</key>
|
||||
<key alias="writer">Forfatter</key>
|
||||
<key alias="translator">Oversætter</key>
|
||||
<key alias="change">Skift</key>
|
||||
<key alias="yourProfile">Din profil</key>
|
||||
<key alias="yourHistory">Din historik</key>
|
||||
<key alias="sessionExpires">Session udløber</key>
|
||||
<key alias="inviteUser">Invitér bruger</key>
|
||||
<key alias="createUser">Opret bruger</key>
|
||||
<key alias="sendInvite">Send invitation</key>
|
||||
<key alias="backToUsers">Tilbage til brugere</key>
|
||||
<key alias="inviteEmailCopySubject">Umbraco: Invitation</key>
|
||||
<key alias="inviteEmailCopyFormat">
|
||||
<![CDATA[<html><body><p>Hej %0%, du er blevet inviteret af %1% til Umbraco backoffice.</p><p>Besked fra %1%: <em>%2%</em></p><p>Klik på dette <a href="%3%" target="_blank">link</a> for acceptere invitationen</p><p><small>Hvis du ikke kan klikke på linket, så kopier og indsæt denne URL i dit browservindue<br/><br/>%3%</small></p></body></html>]]>
|
||||
</key>
|
||||
</area>
|
||||
<area alias="validation">
|
||||
<key alias="validation">Validation</key>
|
||||
@@ -1278,6 +1523,14 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="validateAsUrl">Valider som Url</key>
|
||||
<key alias="enterCustomValidation">...eller indtast din egen validering</key>
|
||||
<key alias="fieldIsMandatory">Feltet er påkrævet</key>
|
||||
<key alias="validationRegExp">Indtast et regulært udtryk</key>
|
||||
<key alias="minCount">Du skal tilføje mindst</key>
|
||||
<key alias="maxCount">Du kan kun have</key>
|
||||
<key alias="items">elementer</key>
|
||||
<key alias="itemsSelected">elementer valgt</key>
|
||||
<key alias="invalidDate">Ugyldig dato</key>
|
||||
<key alias="invalidNumber">Ikke et tal</key>
|
||||
<key alias="invalidEmail">Ugyldig e-mail</key>
|
||||
</area>
|
||||
<area alias="redirectUrls">
|
||||
<key alias="disableUrlTracker">Slå URL tracker fra</key>
|
||||
@@ -1296,6 +1549,9 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="enabledConfirm">URL tracker er nu slået fra.</key>
|
||||
<key alias="enableError">Der opstod en fejl under forsøget på at slå URL trackeren til, der findes mere information i logfilen.</key>
|
||||
</area>
|
||||
<area alias="emptyStates">
|
||||
<key alias="emptyDictionaryTree">Ingen ordbog elementer at vælge imellem</key>
|
||||
</area>
|
||||
<area alias="textbox">
|
||||
<key alias="characters_left">Karakterer tilbage</key>
|
||||
</area>
|
||||
|
||||
@@ -1676,15 +1676,27 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="profile">Profile</key>
|
||||
<key alias="searchAllChildren">Search all children</key>
|
||||
<key alias="sectionsHelp">Add sections to give users access</key>
|
||||
<key alias="selectUserGroups">Select user groups</key>
|
||||
<key alias="noStartNode">No start node selected</key>
|
||||
<key alias="noStartNodes">No start nodes selected</key>
|
||||
<key alias="stateActive">Active</key>
|
||||
<key alias="stateAll">All</key>
|
||||
<key alias="stateDisabled">Disabled</key>
|
||||
<key alias="stateLockedOut">Locked out</key>
|
||||
<key alias="stateInvited">Invited</key>
|
||||
<key alias="startnode">Content start node</key>
|
||||
<key alias="startnodehelp">Limit the content tree to a specific start node</key>
|
||||
<key alias="startnodes">Content start nodes</key>
|
||||
<key alias="startnodeshelp">Limit the content tree to specific start nodes</key>
|
||||
<key alias="sortNameAscending">Name (A-Z)</key>
|
||||
<key alias="sortNameDescending">Name (Z-A)</key>
|
||||
<key alias="sortCreateDateDescending">Newest</key>
|
||||
<key alias="sortCreateDateAscending">Oldest</key>
|
||||
<key alias="sortLastLoginDateDescending">Last login</key>
|
||||
<key alias="updateDate">User last updated</key>
|
||||
<key alias="userCreated">has been created</key>
|
||||
<key alias="userCreatedSuccessHelp">The new user has successfully been created. To log in to Umbraco use the password below.</key>
|
||||
<key alias="userManagement">User management</key>
|
||||
<key alias="username">Name</key>
|
||||
<key alias="userPermissions">User permissions</key>
|
||||
<key alias="userGroupPermissions">User group permissions</key>
|
||||
|
||||
@@ -1669,15 +1669,27 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="profile">Profile</key>
|
||||
<key alias="searchAllChildren">Search all children</key>
|
||||
<key alias="sectionsHelp">Add sections to give users access</key>
|
||||
<key alias="selectUserGroups">Select user groups</key>
|
||||
<key alias="noStartNode">No start node selected</key>
|
||||
<key alias="noStartNodes">No start nodes selected</key>
|
||||
<key alias="stateActive">Active</key>
|
||||
<key alias="stateAll">All</key>
|
||||
<key alias="stateDisabled">Disabled</key>
|
||||
<key alias="stateLockedOut">Locked out</key>
|
||||
<key alias="stateInvited">Invited</key>
|
||||
<key alias="startnode">Content start node</key>
|
||||
<key alias="startnodehelp">Limit the content tree to a specific start node</key>
|
||||
<key alias="startnodes">Content start nodes</key>
|
||||
<key alias="startnodeshelp">Limit the content tree to specific start nodes</key>
|
||||
<key alias="sortNameAscending">Name (A-Z)</key>
|
||||
<key alias="sortNameDescending">Name (Z-A)</key>
|
||||
<key alias="sortCreateDateDescending">Newest</key>
|
||||
<key alias="sortCreateDateAscending">Oldest</key>
|
||||
<key alias="sortLastLoginDateDescending">Last login</key>
|
||||
<key alias="updateDate">User last updated</key>
|
||||
<key alias="userCreated">has been created</key>
|
||||
<key alias="userCreatedSuccessHelp">The new user has successfully been created. To log in to Umbraco use the password below.</key>
|
||||
<key alias="userManagement">User management</key>
|
||||
<key alias="username">Name</key>
|
||||
<key alias="userPermissions">User permissions</key>
|
||||
<key alias="userGroupPermissions">User group permissions</key>
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
<key alias="disable">נטרל</key>
|
||||
<key alias="emptyTrashcan">רוקן סל מיחזור</key>
|
||||
<key alias="exportDocumentType">ייצא סוג קובץ</key>
|
||||
<key alias="exportDocumentTypeAsCode">ייצא אל.NET</key>
|
||||
<key alias="exportDocumentTypeAsCode-Full">ייצא אל .NET</key>
|
||||
<key alias="importDocumentType">ייבא סוג מסמך</key>
|
||||
<key alias="importPackage">ייבא חבילה</key>
|
||||
<key alias="liveEdit">ערוך במצב "קנבס"</key>
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
<key alias="disable">비활성</key>
|
||||
<key alias="emptyTrashcan">휴지통 비우기</key>
|
||||
<key alias="exportDocumentType">추출 문서 유형</key>
|
||||
<key alias="exportDocumentTypeAsCode">.NET으로 추출</key>
|
||||
<key alias="exportDocumentTypeAsCode-Full">.NET으로 추출</key>
|
||||
<key alias="importDocumentType">등록 문서 유형</key>
|
||||
<key alias="importPackage">패키지 등록</key>
|
||||
<key alias="liveEdit">캔버스 내용 편집</key>
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
<key alias="disable">Desabilitar</key>
|
||||
<key alias="emptyTrashcan">Esvaziar Lixeira</key>
|
||||
<key alias="exportDocumentType">Exportar Tipo de Documento</key>
|
||||
<key alias="exportDocumentTypeAsCode">Exportar para .NET</key>
|
||||
<key alias="exportDocumentTypeAsCode-Full">Exportar para .NET</key>
|
||||
<key alias="importDocumentType">Importar Tipo de Documento</key>
|
||||
<key alias="importPackage">Importar Pacote</key>
|
||||
<key alias="liveEdit">Editar na Tela</key>
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
<key alias="password">输入您的密码</key>
|
||||
<key alias="confirmPassword">确认密码</key>
|
||||
<key alias="nameentity">命名 %0%...</key>
|
||||
<key alias="entername">输入用户名...</key>
|
||||
<key alias="entername">输入名称...</key>
|
||||
<key alias="label">标签...</key>
|
||||
<key alias="enterDescription">输入说明...</key>
|
||||
<key alias="search">输入搜索关键字...</key>
|
||||
|
||||
@@ -172,9 +172,9 @@ Umbraco.Sys.registerNamespace("Umbraco.Application");
|
||||
|
||||
},
|
||||
|
||||
reloadLocation: function () {
|
||||
reloadLocation: function (pathToMatch) {
|
||||
if (this.mainWindow().UmbClientMgr) {
|
||||
this.mainWindow().UmbClientMgr.reloadLocation();
|
||||
this.mainWindow().UmbClientMgr.reloadLocation(pathToMatch);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -431,9 +431,17 @@ namespace Umbraco.Web.Editors
|
||||
[HttpPost]
|
||||
public Dictionary<int, string[]> GetPermissions(int[] nodeIds)
|
||||
{
|
||||
return Services.UserService
|
||||
.GetPermissions(Security.CurrentUser, nodeIds)
|
||||
.ToDictionary(x => x.EntityId, x => x.AssignedPermissions);
|
||||
var permissions = Services.UserService
|
||||
.GetPermissions(Security.CurrentUser, nodeIds);
|
||||
|
||||
var permissionsDictionary = new Dictionary<int, string[]>();
|
||||
foreach (var nodeId in nodeIds)
|
||||
{
|
||||
var aggregatePerms = permissions.GetAllPermissions(nodeId).ToArray();
|
||||
permissionsDictionary.Add(nodeId, aggregatePerms);
|
||||
}
|
||||
|
||||
return permissionsDictionary;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Umbraco.Web.Editors
|
||||
{
|
||||
//get the first tree in the section and get it's root node route path
|
||||
var sectionTrees = appTreeController.GetApplicationTrees(section.Alias, null, null).Result;
|
||||
section.RoutePath = sectionTrees.IsContainer == false
|
||||
section.RoutePath = sectionTrees.IsContainer == false || sectionTrees.Children.Count == 0
|
||||
? sectionTrees.RoutePath
|
||||
: sectionTrees.Children[0].RoutePath;
|
||||
}
|
||||
|
||||
@@ -550,7 +550,7 @@ namespace Umbraco.Web.Editors
|
||||
|
||||
// if the found user has his email for username, we want to keep this synced when changing the email.
|
||||
// we have already cross-checked above that the email isn't colliding with anything, so we can safely assign it here.
|
||||
if (found.Username == found.Email && userSave.Username != userSave.Email)
|
||||
if (UmbracoConfig.For.UmbracoSettings().Security.UsernameIsEmail && found.Username == found.Email && userSave.Username != userSave.Email)
|
||||
{
|
||||
userSave.Username = userSave.Email;
|
||||
}
|
||||
|
||||
@@ -6,12 +6,14 @@ using System.Web.Http;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Configuration.HealthChecks;
|
||||
using Umbraco.Web.Editors;
|
||||
using Umbraco.Web.WebApi.Filters;
|
||||
|
||||
namespace Umbraco.Web.HealthCheck
|
||||
{
|
||||
/// <summary>
|
||||
/// The API controller used to display the health check info and execute any actions
|
||||
/// </summary>
|
||||
[UmbracoApplicationAuthorize(Core.Constants.Applications.Developer)]
|
||||
public class HealthCheckController : UmbracoAuthorizedJsonController
|
||||
{
|
||||
private readonly IHealthCheckResolver _healthCheckResolver;
|
||||
|
||||
@@ -92,6 +92,8 @@ namespace Umbraco.Web
|
||||
|
||||
using (var outputms = new MemoryStream())
|
||||
{
|
||||
bool lengthReached = false;
|
||||
|
||||
using (var outputtw = new StreamWriter(outputms))
|
||||
{
|
||||
using (var ms = new MemoryStream())
|
||||
@@ -106,7 +108,6 @@ namespace Umbraco.Web
|
||||
using (TextReader tr = new StreamReader(ms))
|
||||
{
|
||||
bool isInsideElement = false,
|
||||
lengthReached = false,
|
||||
insideTagSpaceEncountered = false,
|
||||
isTagClose = false;
|
||||
|
||||
@@ -254,10 +255,15 @@ namespace Umbraco.Web
|
||||
|
||||
//Check to see if there is an empty char between the hellip and the output string
|
||||
//if there is, remove it
|
||||
if (string.IsNullOrWhiteSpace(firstTrim) == false)
|
||||
if (addElipsis && lengthReached && string.IsNullOrWhiteSpace(firstTrim) == false)
|
||||
{
|
||||
result = firstTrim[firstTrim.Length - hellip.Length - 1] == ' ' ? firstTrim.Remove(firstTrim.Length - hellip.Length - 1, 1) : firstTrim;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = firstTrim;
|
||||
}
|
||||
|
||||
return new HtmlString(result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ using Constants = Umbraco.Core.Constants;
|
||||
namespace Umbraco.Web.Trees
|
||||
{
|
||||
[UmbracoTreeAuthorize(Constants.Trees.Users)]
|
||||
[Tree(Constants.Applications.Users, Constants.Trees.Users, "Users", sortOrder: 0)]
|
||||
[Tree(Constants.Applications.Users, Constants.Trees.Users, null, sortOrder: 0)]
|
||||
[PluginController("UmbracoTrees")]
|
||||
[LegacyBaseTree(typeof(loadUsers))]
|
||||
[CoreTree]
|
||||
|
||||
@@ -101,30 +101,19 @@ namespace Umbraco.Web.WebApi.Filters
|
||||
ids.Add(((dynamic)items[i]).Id);
|
||||
}
|
||||
//get all the permissions for these nodes in one call
|
||||
var permissions = _userService.GetPermissions(user, ids.ToArray()).ToArray();
|
||||
var permissions = _userService.GetPermissions(user, ids.ToArray());
|
||||
var toRemove = new List<dynamic>();
|
||||
foreach (dynamic item in items)
|
||||
{
|
||||
var nodePermission = permissions.Where(x => x.EntityId == Convert.ToInt32(item.Id)).ToArray();
|
||||
//if there are no permissions for this id then we need to check what the user's default
|
||||
// permissions are.
|
||||
if (nodePermission.Length == 0)
|
||||
{
|
||||
//get the combined permission set across all user groups for this node
|
||||
//we're in the world of dynamics here so we need to cast
|
||||
var nodePermission = ((IEnumerable<string>)permissions.GetAllPermissions(item.Id)).ToArray();
|
||||
|
||||
//if the permission being checked doesn't exist then remove the item
|
||||
if (nodePermission.Contains(_permissionToCheck.ToString(CultureInfo.InvariantCulture)) == false)
|
||||
{
|
||||
//var defaultP = user.DefaultPermissions
|
||||
|
||||
toRemove.Add(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var n in nodePermission)
|
||||
{
|
||||
//if the permission being checked doesn't exist then remove the item
|
||||
if (n.AssignedPermissions.Contains(_permissionToCheck.ToString(CultureInfo.InvariantCulture)) == false)
|
||||
{
|
||||
toRemove.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (var item in toRemove)
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.SessionState;
|
||||
using System.Web.UI;
|
||||
@@ -117,36 +118,23 @@ namespace umbraco.presentation.dialogs
|
||||
|
||||
if (!IsPostBack) {
|
||||
allVersions.Items.Add(new ListItem(ui.Text("rollback", "selectVersion")+ "...", ""));
|
||||
foreach (DocumentVersionList dl in currentDoc.GetVersions()) {
|
||||
|
||||
foreach (DocumentVersionList dl in currentDoc.GetVersions())
|
||||
{
|
||||
//we don't need to show the current version
|
||||
if (dl.Version == currentDoc.Version)
|
||||
continue;
|
||||
|
||||
allVersions.Items.Add(new ListItem(dl.Text + " (" + ui.Text("content", "createDate") + ": " + dl.Date.ToShortDateString() + " " + dl.Date.ToShortTimeString() + ")", dl.Version.ToString()));
|
||||
}
|
||||
Button1.Text = ui.Text("actions", "rollback");
|
||||
}
|
||||
}
|
||||
|
||||
#region Web Form Designer generated code
|
||||
override protected void OnInit(EventArgs e)
|
||||
{
|
||||
//
|
||||
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
|
||||
//
|
||||
InitializeComponent();
|
||||
base.OnInit(e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
protected void doRollback_Click(object sender, System.EventArgs e)
|
||||
{
|
||||
if (allVersions.SelectedValue.Trim() != "") {
|
||||
if (allVersions.SelectedValue.Trim() != "")
|
||||
{
|
||||
Document d = new Document(int.Parse(helper.Request("nodeId")));
|
||||
d.RollBack(new Guid(allVersions.SelectedValue), base.getUser());
|
||||
|
||||
@@ -159,6 +147,8 @@ namespace umbraco.presentation.dialogs
|
||||
feedBackMsg.Text = ui.Text("rollback", "documentRolledBack", vars, new global::umbraco.BusinessLogic.User(0)) + "</p><p><a href='#' onclick='" + ClientTools.Scripts.CloseModalWindow() + "'>" + ui.Text("closeThisWindow") + "</a>";
|
||||
diffPanel.Visible = false;
|
||||
pl_buttons.Visible = false;
|
||||
|
||||
ClientTools.ReloadLocationIfMatched(string.Format("/content/content/edit/{0}", d.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<WebPlatform>
|
||||
<Links>
|
||||
<AddLink InDashboard="True">
|
||||
<Title>Start Here</Title>
|
||||
<Description>First time here? Complete the installation of your Umbraco Site, select a Starter Kit and Skin to get you started.</Description>
|
||||
<Uri>/install/default.aspx</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/umbraco.png</ImageUri>
|
||||
</AddLink>
|
||||
<AddLink InDashboard="True" InLearn="True">
|
||||
<Title>Getting Started with Umbraco</Title>
|
||||
<Description>So you've finished installing Umbraco in WebMatrix, what next? Learn how to build and configure your new site!</Description>
|
||||
<Uri>http://our.umbraco.org/wiki/how-tos/getting-started-with-umbraco-what-is-next-after-you-install</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/umbraco.png</ImageUri>
|
||||
</AddLink>
|
||||
<AddLink InDashboard="True" InLearn="True">
|
||||
<Title>Extending Umbraco using WebMatrix</Title>
|
||||
<Description>In this 5-minute video tutorial you'll learn how to edit templates, use the Razor syntax to add dynamic functionality and deploy an Umbraco site - all from within WebMatrix.</Description>
|
||||
<Uri>http://umbraco.com/help-and-support/video-tutorials/getting-started/working-with-webmatrix</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/umbraco.png</ImageUri>
|
||||
</AddLink>
|
||||
<AddLink InDashboard="True" InLearn="True">
|
||||
<Title>Umbraco Forum - Where the friendliest CMS community on the planet helps each other</Title>
|
||||
<Description>Search for documentation, get help and guidance from seasoned experts, download and collaborate on plugins and extensions.</Description>
|
||||
<Uri>http://our.umbraco.org/</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/community.png</ImageUri>
|
||||
</AddLink>
|
||||
<AddLink InDashboard="True">
|
||||
<Title>Umbraco Products</Title>
|
||||
<Description>We have additional products and services available to help you get the most out of Umbraco.</Description>
|
||||
<Uri>http://umbraco.com/products</Uri>
|
||||
<Uri xml:lang="es">http://umbraco.com/products</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/products.png</ImageUri>
|
||||
</AddLink>
|
||||
<AddLink InDashboard="True">
|
||||
<Title>Umbraco Community Projects - "The Deli"</Title>
|
||||
<Description>Find free and commercial add-ons, extensions, skins, and starter sites.</Description>
|
||||
<Uri>http://our.umbraco.org/projects</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/deli.png</ImageUri>
|
||||
</AddLink>
|
||||
</Links>
|
||||
|
||||
<Ribbon>
|
||||
<AddRibbonButton>
|
||||
<Label>Site Admin</Label>
|
||||
<Uri>/umbraco/</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/umbraco.png</ImageUri>
|
||||
</AddRibbonButton>
|
||||
|
||||
<AddRibbonButton>
|
||||
<Label>Community</Label>
|
||||
<Uri>http://our.umbraco.org/</Uri>
|
||||
<ImageUri>http://cdn.umbraco.org/cdn/umbraco/images/webmatrix/community.png</ImageUri>
|
||||
</AddRibbonButton>
|
||||
|
||||
</Ribbon>
|
||||
|
||||
<PathProtection>
|
||||
<AllowPath>
|
||||
<RelativePath>install</RelativePath>
|
||||
</AllowPath>
|
||||
<AllowPath AllowNested="False">
|
||||
<RelativePath>web.config</RelativePath>
|
||||
</AllowPath>
|
||||
<ProtectPath>
|
||||
<RelativePath>bin</RelativePath>
|
||||
</ProtectPath>
|
||||
<ProtectPath>
|
||||
<RelativePath>umbraco</RelativePath>
|
||||
</ProtectPath>
|
||||
<ProtectPath>
|
||||
<RelativePath>umbraco_client</RelativePath>
|
||||
</ProtectPath>
|
||||
</PathProtection>
|
||||
|
||||
</WebPlatform>
|
||||
@@ -1,9 +0,0 @@
|
||||
/**********************************************************************/
|
||||
/* Install.SQL */
|
||||
/* Creates a login and makes the user a member of db roles */
|
||||
/* */
|
||||
/* Modifications for SQL AZURE - ON MASTER */
|
||||
/**********************************************************************/
|
||||
|
||||
|
||||
CREATE LOGIN PlaceHolderForUser WITH PASSWORD = 'PlaceHolderForPassword'
|
||||
@@ -1,15 +0,0 @@
|
||||
/**********************************************************************/
|
||||
/* CreateUser.SQL */
|
||||
/* Creates a user and makes the user a member of db roles */
|
||||
/* This script runs against the User database and requires connection string */
|
||||
/* Supports SQL Server and SQL AZURE */
|
||||
/**********************************************************************/
|
||||
|
||||
-- Create database user and map to login
|
||||
-- and add user to the datareader, datawriter, ddladmin and securityadmin roles
|
||||
--
|
||||
|
||||
CREATE USER PlaceHolderForUser FOR LOGIN PlaceHolderForUser;
|
||||
GO
|
||||
EXEC sp_addrolemember 'db_owner', PlaceHolderForUser;
|
||||
GO
|
||||
@@ -1,45 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<msdeploy.iisApp>
|
||||
<iisApp path="umbraco" />
|
||||
<!-- managedRuntimeVersion="v4.0" /> -->
|
||||
<setAcl path="umbraco"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/app_code"
|
||||
setAclAccess="ReadandExecute" />
|
||||
<setAcl path="umbraco/app_browsers"
|
||||
setAclAccess="ReadandExecute" />
|
||||
<setAcl path="umbraco/app_data"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/bin"
|
||||
setAclAccess="Read" />
|
||||
<setAcl path="umbraco/config"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/css"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/macroScripts"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/masterpages"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/media"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/scripts"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/umbraco"
|
||||
setAclAccess="Read" />
|
||||
<setAcl path="umbraco/usercontrols"
|
||||
setAclAccess="Read" />
|
||||
<setAcl path="umbraco/views"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/xslt"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
<setAcl path="umbraco/web.config"
|
||||
setAclResourceType="File"
|
||||
setAclAccess="Read, Write, Modify" />
|
||||
|
||||
<!-- Runs SQL script to create login and assign permissions, requires transacted="false"
|
||||
This script runs as the database administrator provided in parameters.xml
|
||||
-->
|
||||
<dbfullsql path="installSQL1.sql" transacted="false" />
|
||||
<dbfullsql path="installSQL2.sql" transacted="false" />
|
||||
|
||||
</msdeploy.iisApp>
|
||||
@@ -1,161 +0,0 @@
|
||||
<parameters>
|
||||
|
||||
<!-- Prompts where to copy the content files and takes a web site path (such as "contoso.com/app"). -->
|
||||
<parameter name="Application Path" description="It is recommended that Umbraco be installed as a web site root. Leave this parameter empty." tags="iisapp">
|
||||
<parameterValidation type="AllowEmpty" />
|
||||
<parameterEntry type="ProviderPath" scope="iisapp" match="^umbraco$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the root site folder -->
|
||||
<parameter name="SetAclParameter1" description="Sets the ACL on the root site folder" defaultValue="{Application Path}" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the app_code folder -->
|
||||
<parameter name="SetAclParameter2" description="Sets the ACL on the app_code folder" defaultValue="{Application Path}/app_code" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/app_code$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the app_browsers folder -->
|
||||
<parameter name="SetAclParameter15" description="Sets the ACL on the app_code folder" defaultValue="{Application Path}/app_browsers" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/app_browsers$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the app_data folder -->
|
||||
<parameter name="SetAclParameter16" description="Sets the ACL on the app_code folder" defaultValue="{Application Path}/app_data" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/app_data$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs, on the bin folder -->
|
||||
<parameter name="SetAclParameter3" description="Sets the ACL on the bin folder" defaultValue="{Application Path}/bin" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/bin$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the config folder -->
|
||||
<parameter name="SetAclParameter4" description="Sets the ACL on the config folder" defaultValue="{Application Path}/config" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/config$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the css folder -->
|
||||
<parameter name="SetAclParameter5" description="Sets the ACL on the css folder" defaultValue="{Application Path}/css" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="umbraco/css$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the masterpages folder -->
|
||||
<parameter name="SetAclParameter7" description="Sets the ACL on the masterpages folder" defaultValue="{Application Path}/masterpages" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/masterpages$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the media folder -->
|
||||
<parameter name="SetAclParameter8" description="Sets the ACL on the media folder" defaultValue="{Application Path}/media" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/media$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the macroScripts folder -->
|
||||
<parameter name="SetAclParameter9" description="Sets the ACL on the python folder" defaultValue="{Application Path}/macroScripts" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/macroScripts$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the scripts folder -->
|
||||
<parameter name="SetAclParameter10" description="Sets the ACL on the scripts folder" defaultValue="{Application Path}/scripts" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/scripts$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs on the umbraco folder -->
|
||||
<parameter name="SetAclParameter11" description="Sets the ACL on the umbraco folder" defaultValue="{Application Path}/umbraco" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/umbraco$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs, it's set to the application path filled in by the user -->
|
||||
<parameter name="SetAclParameter12" description="Sets the ACL on the usercontrols folder" defaultValue="{Application Path}/usercontrols" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/usercontrols$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs, it's set to the application path filled in by the user -->
|
||||
<parameter name="SetAclParameter13" description="Sets the ACL on the xslt folder" defaultValue="{Application Path}/xslt" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/xslt$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs, it's set to the application path filled in by the user -->
|
||||
<parameter name="SetAclParameter14" description="Sets the ACL on the web.config file" defaultValue="{Application Path}/web.config" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/web.config$" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the parameter that is used to set ACLs, it's set to the application path filled in by the user -->
|
||||
<parameter name="SetAclParameter17" description="Sets the ACL on the views folder" defaultValue="{Application Path}/views" tags="Hidden">
|
||||
<parameterEntry type="ProviderPath" scope="setAcl" match="^umbraco/views$" />
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for database server name, this is used in the connection string parameter later -->
|
||||
<parameter name="Database Server" description="Location of your database server." defaultValue=".\sqlexpress" tags="DBServer, SQL">
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for the database name and fills it into the database scripts -->
|
||||
<parameter name="Database Name" description="Name of the database for your application." defaultValue="umbraco" tags="DBName, SQL">
|
||||
<parameterEntry type="TextFile" scope="installSQL1.sql" match="PlaceHolderForDb" />
|
||||
<parameterEntry type="TextFile" scope="installSQL2.sql" match="PlaceHolderForDb" />
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for the database username and fills it into the database scripts.
|
||||
The SQL tag indicates it is a parameter required for SQL, the DbUsername tag indicates this is a Db username -->
|
||||
<parameter name="Database Username" description="User name to access you application database." defaultValue="umbracouser" tags="SQL, DbUsername">
|
||||
<parameterEntry type="TextFile" scope="installSQL1.sql" match="PlaceHolderForUser" />
|
||||
<parameterEntry type="TextFile" scope="installSQL2.sql" match="PlaceHolderForUser" />
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for the database password and fills it into the database scripts.
|
||||
The SQL tag indicates it is a parameter required for SQL, the DbUserPassword tag indicates this is a Db password -->
|
||||
<parameter name="Database Password" description="Enter Password for the Database Username. Passwords will contain at least 1 upper case letter, at least 1 lower case letter, at least 1 number or special character, and be least 8 characters in length. "
|
||||
tags="New, Password, SQL, DbUserPassword">
|
||||
<parameterValidation type = "RegularExpression" validationString = "(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$" />
|
||||
<parameterEntry type="TextFile" scope="installSQL1.sql" match="PlaceHolderForPassword" />
|
||||
<parameterEntry type="TextFile" scope="installSQL2.sql" match="PlaceHolderForPassword" />
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for the admin creds and uses it for the administrator connection string.
|
||||
This is used to create a login and assign permissions. The SQL tag indicates it is a parameter required for SQL.
|
||||
The DbAdminUsername tag indicates it should be used when the user is creating a new database.
|
||||
If they're not, it can be filled in with the DbUsername value. -->
|
||||
<parameter name="Database Administrator" description="Administrator username for your database." defaultValue="sa" tags="SQL, DbAdminUsername">
|
||||
</parameter>
|
||||
|
||||
<!-- Prompts for the admin password and uses it for the administrator connection string.
|
||||
This is used to create a login and assign permissions. The SQL tags indicates it is a parameter required for SQL.
|
||||
The DbAdminPassword tag indicates it should be used when the user is creating a new database.
|
||||
If they're not, it can be filled in with the DbUserPassword value. -->
|
||||
<parameter name="Database Administrator Password" description="Password that is associated with the database administrator account." tags="Password, SQL, DbAdminPassword,NoStore">
|
||||
</parameter>
|
||||
|
||||
<!-- This is the hidden admin connection string used to run the database scripts -->
|
||||
<parameter name="Connection String Master" description="Automatically sets the connection string for the connection request." defaultValue="Server={Database Server};Database=master;uid={Database Administrator};Pwd={Database Administrator Password};" tags="Hidden,SQL,SQLConnectionString,NoStore">
|
||||
<parameterEntry type="ProviderPath" scope="dbfullsql" match="installSQL1.sql" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the hidden connection string with the newly created db account that is used in the web.config -->
|
||||
<parameter name="Connection String" description="Connection string to enter into config" defaultValue="server={Database Server};database={Database Name};uid={Database Administrator};Pwd={Database Administrator Password};" tags="Hidden,SQL,SQLConnectionString,NoStore">
|
||||
<parameterEntry type="ProviderPath" scope="dbfullsql" match="installSQL2.sql" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="SQLCE Database Preparation" defaultValue="local"
|
||||
tags="SQLCE, Hidden,NoStore">
|
||||
<parameterEntry type="XmlFile" scope="\\web.config$" match="//connectionStrings/add/@name" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the hidden connection string with the newly created db account that is used in the web.config -->
|
||||
<parameter name="Connection String for Config" description="Connection string to enter into config"
|
||||
defaultValue="server={Database Server};database={Database Name};user id={Database Username};password={Database Password}"
|
||||
tags="SQL, Hidden,NoStore">
|
||||
<!-- scope=”web.config” will look for all web.config files under the root directory . Using scope=”\\web.config$” will select only the root web.config -->
|
||||
<parameterEntry type="XmlFile" scope="\\web.config$" match="//connectionStrings/add[@name='umbracoDbDSN']/@connectionString" />
|
||||
</parameter>
|
||||
|
||||
<!-- This is the hidden connection string with the newly created db account that is used in the web.config -->
|
||||
<parameter name="Connection String for Config1" description="Connection string to enter into config"
|
||||
defaultValue="server={Database Server};database={Database Name};user id={Database Username};password={Database Password}"
|
||||
tags="SQL, Hidden,SQLConnectionString">
|
||||
<!-- scope=”web.config” will look for all web.config files under the root directory . Using scope=”\\web.config$” will select only the root web.config -->
|
||||
<parameterEntry type="XmlFile" scope="\\web.config$" match="//connectionStrings/add[@name='umbracoDbDSN']/@connectionString" />
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
@@ -52,7 +52,8 @@ namespace umbraco.BasePages
|
||||
public static string ReloadContentFrameUrlIfPathLoaded(string url) {
|
||||
return string.Format(ClientMgrScript + ".reloadContentFrameUrlIfPathLoaded('{0}');", url);
|
||||
}
|
||||
public static string ReloadLocation { get { return string.Format(ClientMgrScript + ".reloadLocation();"); } }
|
||||
public static string ReloadLocation { get { return ClientMgrScript + ".reloadLocation();"; } }
|
||||
public static string ReloadLocationIfMatched { get { return ClientMgrScript + ".reloadLocation('{0}');"; } }
|
||||
public static string ChildNodeCreated = GetMainTree + ".childNodeCreated();";
|
||||
public static string SyncTree { get { return GetMainTree + ".syncTree('{0}', {1});"; } }
|
||||
public static string ClearTreeCache { get { return GetMainTree + ".clearTreeCache();"; } }
|
||||
@@ -277,21 +278,33 @@ namespace umbraco.BasePages
|
||||
RegisterClientScript(string.Format(Scripts.ReloadActionNode, (!reselect).ToString().ToLower(), (!reloadChildren).ToString().ToLower()));
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When the application searches for a node, it searches for nodes in specific tree types.
|
||||
/// If SyncTree is used, it will sync the tree nodes with the active tree type, therefore if
|
||||
/// a developer wants to sync a specific tree, they can call this method to set the type to sync.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Each branch of a particular tree should theoretically be the same type, however, developers can
|
||||
/// override the type of each branch in their BaseTree's but this is not standard practice. If there
|
||||
/// are multiple types of branches in one tree, then only those branches that have the Active tree type
|
||||
/// will be searched for syncing.
|
||||
/// </remarks>
|
||||
/// <param name="treeType"></param>
|
||||
/// <returns></returns>
|
||||
public ClientTools SetActiveTreeType(string treeType)
|
||||
|
||||
public ClientTools ReloadLocationIfMatched(string routePath)
|
||||
{
|
||||
RegisterClientScript(string.Format(Scripts.ReloadLocationIfMatched, routePath));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ClientTools ReloadLocation()
|
||||
{
|
||||
RegisterClientScript(Scripts.ReloadLocation);
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When the application searches for a node, it searches for nodes in specific tree types.
|
||||
/// If SyncTree is used, it will sync the tree nodes with the active tree type, therefore if
|
||||
/// a developer wants to sync a specific tree, they can call this method to set the type to sync.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Each branch of a particular tree should theoretically be the same type, however, developers can
|
||||
/// override the type of each branch in their BaseTree's but this is not standard practice. If there
|
||||
/// are multiple types of branches in one tree, then only those branches that have the Active tree type
|
||||
/// will be searched for syncing.
|
||||
/// </remarks>
|
||||
/// <param name="treeType"></param>
|
||||
/// <returns></returns>
|
||||
public ClientTools SetActiveTreeType(string treeType)
|
||||
{
|
||||
RegisterClientScript(string.Format(Scripts.SetActiveTreeType, treeType));
|
||||
return this;
|
||||
|
||||
@@ -276,13 +276,12 @@ namespace umbraco.cms.businesslogic
|
||||
{
|
||||
if (_version == Guid.Empty)
|
||||
{
|
||||
string sql = "Select versionId from cmsContentVersion where contentID = " + this.Id +
|
||||
" order by id desc ";
|
||||
|
||||
var sql = string.Format("SELECT versionId FROM cmsDocument where nodeid={0} AND newest = 1 ORDER BY updateDate desc", this.Id);
|
||||
|
||||
using (var sqlHelper = Application.SqlHelper)
|
||||
using (IRecordsReader dr = sqlHelper.ExecuteReader(sql))
|
||||
{
|
||||
if (!dr.Read())
|
||||
if (dr.Read() == false)
|
||||
_version = Guid.Empty;
|
||||
else
|
||||
_version = dr.GetGuid("versionId");
|
||||
|
||||
Reference in New Issue
Block a user