Merge remote-tracking branch 'origin/release/10.1.0' into v10/dev

This commit is contained in:
Bjarke Berg
2022-08-02 13:10:56 +02:00
11 changed files with 411 additions and 272 deletions

View File

@@ -26,7 +26,7 @@
<div id="overlay" ng-cloak ng-animate="'fade'" ng-show="installer.done"></div>
<div id="installer" class="absolute-center clearfix"
<div id="installer"
ng-cloak
ng-animate="'fade'"
ng-show="installer.configuring">

View File

@@ -2528,7 +2528,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
<key alias="settingsPublishedStatus">Published Status</key>
<key alias="settingsModelsBuilder">Models Builder</key>
<key alias="settingsHealthCheck">Health Check</key>
<key alias="settingsAnalytics">Analytics</key>
<key alias="settingsAnalytics">Telemetry data</key>
<key alias="settingsProfiler">Profiling</key>
<key alias="memberIntro">Getting Started</key>
<key alias="formsInstall">Install Umbraco Forms</key>
@@ -2886,8 +2886,8 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
<key alias="searchResults">items returned</key>
</area>
<area alias="analytics">
<key alias="consentForAnalytics">Consent for analytics</key>
<key alias="analyticsLevelSavedSuccess">Analytics level saved!</key>
<key alias="consentForAnalytics">Consent for telemetry data</key>
<key alias="analyticsLevelSavedSuccess">Telemetry level saved!</key>
<key alias="analyticsDescription">
<![CDATA[
In order to improve Umbraco and add new functionality based on as relevant information as possible,
@@ -2903,12 +2903,13 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
<key alias="detailedLevelDescription">
<![CDATA[
We will send:
<br>- Anonymized site ID, umbraco version, and packages installed.
<br>- Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
<br>- System information: Webserver, server OS, server framework, server OS language, and database provider.
<br>- Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
<br>
<br><i>We might change what we send on the Detailed level in the future. If so, it will be listed above.
<ul>
<li>Anonymized site ID, umbraco version, and packages installed.</li>
<li>Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.</li>
<li>System information: Webserver, server OS, server framework, server OS language, and database provider.</li>
<li>Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.</li>
</ul>
<i>We might change what we send on the Detailed level in the future. If so, it will be listed above.
<br>By choosing "Detailed" you agree to current and future anonymized information being collected.</i>
]]>
</key>

View File

@@ -46,7 +46,7 @@ public interface IRedirectUrlRepository : IReadWriteQueryRepository<Guid, IRedir
/// </summary>
/// <param name="url">The Umbraco redirect URL route.</param>
/// <returns>The most recent redirect URL corresponding to the route.</returns>
Task<IRedirectUrl?> GetMostRecentUrlAsync(string url);
Task<IRedirectUrl?> GetMostRecentUrlAsync(string url) => Task.FromResult(GetMostRecentUrl(url));
/// <summary>
/// Gets the most recent redirect URL corresponding to an Umbraco redirect URL route.
@@ -62,7 +62,7 @@ public interface IRedirectUrlRepository : IReadWriteQueryRepository<Guid, IRedir
/// <param name="url">The Umbraco redirect URL route.</param>
/// <param name="culture">The culture the domain is associated with</param>
/// <returns>The most recent redirect URL corresponding to the route.</returns>
Task<IRedirectUrl?> GetMostRecentUrlAsync(string url, string culture);
Task<IRedirectUrl?> GetMostRecentUrlAsync(string url, string culture) => Task.FromResult(GetMostRecentUrl(url, culture));
/// <summary>
/// Gets all redirect URLs for a content item.

View File

@@ -60,7 +60,7 @@ public interface IRedirectUrlService : IService
/// <param name="url">The Umbraco redirect URL route.</param>
/// <param name="culture">The culture of the request.</param>
/// <returns>The most recent redirect URLs corresponding to the route.</returns>
Task<IRedirectUrl?> GetMostRecentRedirectUrlAsync(string url, string? culture);
Task<IRedirectUrl?> GetMostRecentRedirectUrlAsync(string url, string? culture) => Task.FromResult(GetMostRecentRedirectUrl(url, culture));
/// <summary>
/// Gets all redirect URLs for a content item.

View File

@@ -1797,6 +1797,11 @@ public class ContentController : ContentControllerBase
private IEnumerable<string> GetPublishedCulturesFromAncestors(IContent? content)
{
if (content?.ParentId is not -1 && content?.HasIdentity is false)
{
content = _contentService.GetById(content.ParentId);
}
if (content?.ParentId == -1)
{
return content.PublishedCultures;

View File

@@ -1,144 +1,188 @@
<div ng-controller="Umbraco.Installer.DataBaseController">
<h1>Configure your database</h1>
<p>
Enter connection and authentication details for the database you want to
install Umbraco on
</p>
<h1>Configure your database</h1>
<p>
Enter connection and authentication details for the database you want to install Umbraco on
</p>
<form
name="myForm"
class="form-horizontal -no-margin-bottom"
novalidate
ng-submit="validateAndForward();"
>
<div class="control-group">
<legend>What type of database do you use?</legend>
<label class="control-label" for="dbType">Database type</label>
<div class="controls">
<select
id="dbType"
ng-options="db as db.displayName for db in dbs"
required
ng-model="selectedDbMeta"
></select>
</div>
</div>
<form name="myForm" class="form-horizontal" novalidate ng-submit="validateAndForward();">
<div class="control-group">
<legend>What type of database do you use?</legend>
<label class="control-label" for="dbType">Database type</label>
<div ng-if="isCustom()">
<legend>What is the exact connection string we should use?</legend>
<div class="control-group">
<label class="control-label" for="Custom_connectionString"
>Connection string</label
>
<div class="controls">
<textarea
id="Custom_connectionString"
class="input-block-level"
required
ng-model="installer.current.model.connectionString"
rows="5"
></textarea>
<small class="inline-help"
>Enter a valid database connection string.</small
>
</div>
</div>
<div class="control-group">
<label class="control-label" for="Custom_providerName"
>Provider Name</label
>
<div class="controls">
<select
id="dbType"
ng-options="providerName for providerName in providerNames"
required
ng-model="installer.current.model.providerName"
></select>
</div>
</div>
</div>
<div ng-if="!isCustom()">
<div class="row">
<legend>Where do we find your database?</legend>
<div ng-if="selectedDbMeta.requiresServer">
<div class="span6">
<div class="control-group">
<label class="control-label" for="Sql_Server">Server</label>
<div class="controls">
<input
type="text"
id="Sql_Server"
placeholder="{{selectedDbMeta.serverPlaceholder}}"
required
ng-model="installer.current.model.server"
/>
<small class="inline-help">Enter server domain or IP</small>
</div>
</div>
</div>
</div>
<div class="span6">
<div class="control-group">
<label class="control-label" for="Sql_databaseName"
>Database name</label
>
<div class="controls">
<select id="dbType"
ng-options="db as db.displayName for db in dbs"
required
ng-model="selectedDbMeta">
</select>
<input
type="text"
id="Sql_databaseName"
placeholder="umbraco-cms"
required
ng-model="installer.current.model.databaseName"
/>
<small class="inline-help">Enter the name of the database</small>
</div>
</div>
</div>
</div>
<div ng-if="isCustom()">
<legend>What is the exact connection string we should use?</legend>
<div class="control-group">
<label class="control-label" for="Custom_connectionString">Connection string</label>
<div class="controls">
<textarea id="Custom_connectionString"
class="input-block-level"
required
ng-model="installer.current.model.connectionString"
rows="5"></textarea>
<small class="inline-help">Enter a valid database connection string.</small>
</div>
</div>
<div class="control-group">
<label class="control-label" for="Custom_providerName">Provider Name</label>
<div class="controls">
<select id="dbType"
ng-options="providerName for providerName in providerNames"
required
ng-model="installer.current.model.providerName">
</select>
</div>
</div>
</div>
<div ng-if="!isCustom()">
<div class="row">
<legend>Where do we find your database?</legend>
<div ng-if="selectedDbMeta.requiresServer">
<div class="span6">
<div class="control-group">
<label class="control-label" for="Sql_Server">Server</label>
<div class="controls">
<input type="text" id="Sql_Server"
placeholder="{{selectedDbMeta.serverPlaceholder}}"
required
ng-model="installer.current.model.server" />
<small class="inline-help">Enter server domain or IP</small>
</div>
</div>
</div>
</div>
<div class="span6">
<div class="control-group">
<label class="control-label" for="Sql_databaseName">Database name</label>
<div class="controls">
<input type="text" id="Sql_databaseName"
placeholder="umbraco-cms"
required
ng-model="installer.current.model.databaseName" />
<small class="inline-help">Enter the name of the database</small>
</div>
</div>
</div>
</div>
<div ng-if="selectedDbMeta.requiresCredentials">
<div class="row">
<legend>What credentials are used to access the database?</legend>
<div class="span6">
<div class="control-group" ng-if="!installer.current.model.integratedAuth">
<label class="control-label" for="Sql_login">Login</label>
<div class="controls">
<input type="text" id="Sql_login"
placeholder="umbraco-db-user"
required
ng-model="installer.current.model.login" />
<small class="inline-help">Enter the database user name</small>
</div>
</div>
</div>
<div class="span6">
<div class="control-group" ng-if="!installer.current.model.integratedAuth">
<label class="control-label" for="Sql_password">Password</label>
<div class="controls">
<input type="password" id="Sql_password"
placeholder="umbraco-db-password"
required
ng-model="installer.current.model.password" />
<small class="inline-help">Enter the database password</small>
</div>
</div>
</div>
<div class="span12 control-group" ng-if="selectedDbMeta.supportsIntegratedAuthentication">
<div class="controls">
<label class="checkbox">
<input type="checkbox" ng-model="installer.current.model.integratedAuth" />
Use integrated authentication
</label>
</div>
</div>
</div>
</div>
</div>
<div ng-if="selectedDbMeta.requiresCredentials">
<div class="row">
<div class="control-group">
<div class="controls">
<input type="submit" value="Install" class="btn btn-success"
ng-disabled="myForm.$invalid || checking"
ng-class="{disabled:myForm.$invalid}" />
<button class="btn btn-info" ng-click="restart()">Go back</button>
<span class="inline-help" ng-if="checking" ng-animate="'fade'">
Validating your database connection...
</span>
<span class="inline-help error" ng-if="invalidDbDns" ng-animate="'fade'">
Could not connect to database
</span>
</div>
<legend>What credentials are used to access the database?</legend>
<div class="span6">
<div
class="control-group"
ng-if="!installer.current.model.integratedAuth"
>
<label class="control-label" for="Sql_login">Login</label>
<div class="controls">
<input
type="text"
id="Sql_login"
placeholder="umbraco-db-user"
required
ng-model="installer.current.model.login"
/>
<small class="inline-help">Enter the database user name</small>
</div>
</div>
</div>
<div class="span6">
<div
class="control-group"
ng-if="!installer.current.model.integratedAuth"
>
<label class="control-label" for="Sql_password">Password</label>
<div class="controls">
<input
type="password"
id="Sql_password"
placeholder="umbraco-db-password"
required
ng-model="installer.current.model.password"
/>
<small class="inline-help">Enter the database password</small>
</div>
</div>
</div>
<div
class="span12 control-group"
ng-if="selectedDbMeta.supportsIntegratedAuthentication"
>
<div class="controls">
<label class="checkbox">
<input
type="checkbox"
ng-model="installer.current.model.integratedAuth"
/>
Use integrated authentication
</label>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="row">
<div class="control-actions controls-space-between">
<button class="btn btn-info" ng-click="restart()">Go back</button>
<button
class="btn btn-success"
ng-disabled="myForm.$invalid || checking"
ng-class="{disabled:myForm.$invalid}"
>
Install
</button>
</div>
<div>
<span ng-if="checking" class="inline-help" ng-animate="'fade'">
Validating your database connection...
</span>
<span
ng-if="invalidDbDns"
class="inline-help error"
ng-animate="'fade'"
>
Could not connect to database
</span>
</div>
</div>
</form>
</div>

View File

@@ -3,7 +3,7 @@ angular.module("umbraco.install").controller("Umbraco.Install.UserController", f
$scope.majorVersion = Umbraco.Sys.ServerVariables.application.version;
$scope.passwordPattern = /.*/;
$scope.installer.current.model.subscribeToNewsLetter = $scope.installer.current.model.subscribeToNewsLetter || false;
$scope.installer.current.model.telemetryLevel = $scope.installer.current.model.telemetryLevel || $scope.installer.current.model.consentLevels[1].level;
setTelemetryLevelAndDescription($scope.installer.current.model.telemetryIndex ?? 1);
if ($scope.installer.current.model.minNonAlphaNumericLength > 0) {
var exp = "";
@@ -15,11 +15,6 @@ angular.module("umbraco.install").controller("Umbraco.Install.UserController", f
$scope.passwordPattern = new RegExp(exp);
}
$scope.consentTooltip = {
show: false,
event: null
};
if ('noUiSlider' in window) {
let consentSliderStartLevel = 2;
const initialConsentLevel = $scope.installer.current.model.consentLevels.findIndex(x => x.level === $scope.installer.current.model.telemetryLevel);
@@ -36,6 +31,7 @@ angular.module("umbraco.install").controller("Umbraco.Install.UserController", f
"min": 1,
"max": 3
},
behaviour: 'smooth-steps-tap',
pips: {
mode: 'values',
density: 50,
@@ -63,22 +59,6 @@ angular.module("umbraco.install").controller("Umbraco.Install.UserController", f
});
pips.forEach(function (pip) {
pip.addEventListener('mouseenter', function (e) {
$scope.$apply(function () {
const value = pip.getAttribute('data-value');
$scope.consentTooltip.show = true;
$scope.consentTooltip.event = e;
$scope.consentTooltip.description = $sce.trustAsHtml($scope.installer.current.model.consentLevels[value - 1].description);
});
});
pip.addEventListener('mouseleave', function () {
$scope.$apply(function () {
$scope.consentTooltip.show = false;
$scope.consentTooltip.event = null;
$scope.consentTooltip.description = '';
});
});
pip.addEventListener('click', function () {
const value = pip.getAttribute('data-value');
@@ -99,8 +79,16 @@ angular.module("umbraco.install").controller("Umbraco.Install.UserController", f
};
function onChangeConsent(values) {
const result = Number(values[0]);
$scope.installer.current.model.telemetryLevel = $scope.installer.current.model.consentLevels[result - 1].level;
const result = Number(values[0]) - 1;
$scope.$apply(() => {
setTelemetryLevelAndDescription(result);
});
};
function setTelemetryLevelAndDescription(idx) {
$scope.telemetryDescription = $sce.trustAsHtml($scope.installer.current.model.consentLevels[idx].description);
$scope.installer.current.model.telemetryIndex = idx;
$scope.installer.current.model.telemetryLevel = $scope.installer.current.model.consentLevels[idx].level;
}
});

View File

@@ -1,88 +1,168 @@
<div ng-controller="Umbraco.Install.UserController">
<h1>Install Umbraco</h1>
<p>Enter your name, email and password to install Umbraco with its default settings, alternatively you can customize
your installation</p>
<p>
Enter credentials for the default administrator user and choose the level of
consent for telemetry data of your Umbraco installation.
</p>
<form name="myForm" class="form-horizontal" novalidate ng-submit="validateAndInstall();">
<div class="row">
<div class="span8">
<div class="pull-right">
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
<input type="text" id="name" name="name" placeholder="Full name" required
ng-model="installer.current.model.name" />
</div>
<form
class="-no-margin-bottom"
name="myForm"
novalidate
ng-submit="validateAndInstall();"
>
<div class="installer-cols">
<div class="installer-col user-col">
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
<input
type="text"
id="name"
name="name"
placeholder="Full name"
required
ng-model="installer.current.model.name"
/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="email" id="email" name="email" placeholder="you@example.com" val-email required
ng-model="installer.current.model.email" />
<small class="inline-help">Your email will be used as your login</small>
</div>
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input
type="email"
id="email"
name="email"
placeholder="you@example.com"
val-email
required
ng-model="installer.current.model.email"
/>
<small class="inline-help"
>Your email will be used as your login</small
>
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<!-- why isn't this masked: https://www.nngroup.com/articles/stop-password-masking/ -->
<input type="text" name="installer.current.model.password"
ng-minlength="{{installer.current.model.minCharLength}}" ng-pattern="passwordPattern" autocorrect="off"
autocapitalize="off" autocomplete="off" required ng-model="installer.current.model.password"
id="password" />
<small class="inline-help">At least {{installer.current.model.minCharLength}} characters long</small>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<!-- why isn't this masked: https://www.nngroup.com/articles/stop-password-masking/ -->
<input
type="text"
name="installer.current.model.password"
ng-minlength="{{installer.current.model.minCharLength}}"
ng-pattern="passwordPattern"
autocorrect="off"
autocapitalize="off"
autocomplete="off"
required
ng-model="installer.current.model.password"
id="password"
/>
<small class="inline-help"
>At least {{installer.current.model.minCharLength}} characters
long</small
>
<small ng-if="installer.current.model.minNonAlphaNumericLength > 0" class="inline-help">
At least {{installer.current.model.minNonAlphaNumericLength}}
symbol{{installer.current.model.minNonAlphaNumericLength > 1 ? 's' : ''}}
</small>
</div>
<small
ng-if="installer.current.model.minNonAlphaNumericLength > 0"
class="inline-help"
>
At least {{installer.current.model.minNonAlphaNumericLength}}
symbol{{installer.current.model.minNonAlphaNumericLength > 1 ? 's'
: ''}}
</small>
</div>
</div>
<div class="control-group">
<div class="controls">
<label>
<input
type="checkbox"
id="subscribeToNewsLetter"
name="subscribeToNewsLetter"
ng-model="installer.current.model.subscribeToNewsLetter"
/>
Keep me updated on Umbraco Versions, Security Bulletins and
Community News
</label>
</div>
</div>
<div
ng-if="installer.current.model.quickInstallSettings"
style="margin-top: auto"
>
<div class="control-group">
<label class="control-label">Telemetry</label>
<div class="controls">
<div id="consentSliderWrapper">
<div id="consentSlider"></div>
<umb-tooltip ng-if="consentTooltip.show" event="consentTooltip.event">
<div ng-bind-html="consentTooltip.description"></div>
</umb-tooltip>
<label class="control-label" for="dbType">Database</label>
<div class="controls -with-border">
<div class="input-readonly-text">
<strong>Provider:</strong>
{{installer.current.model.quickInstallSettings.displayName}}
<br /><strong>Name:</strong>
{{installer.current.model.quickInstallSettings.defaultDatabaseName}}
</div>
</div>
</div>
</div>
</div>
<div class="control-group">
<div class="controls">
<label>
<input type="checkbox" id="subscribeToNewsLetter" name="subscribeToNewsLetter"
ng-model="installer.current.model.subscribeToNewsLetter" />
Keep me updated on Umbraco Versions, Security Bulletins and Community News
</label>
<div class="installer-col telemetry-col">
<div class="control-group">
<label class="control-label">
Consent for telemetry data
<br /><small>
This can be changed later in the Settings panel.
</small>
</label>
<div class="controls">
<div id="consentSliderWrapper">
<div id="consentSlider"></div>
</div>
</div>
<div class="control-group" ng-class="{disabled:myForm.$invalid}">
<div class="controls">
<input ng-if="installer.current.model.quickInstallAvailable" type="submit" ng-disabled="myForm.$invalid"
value="Install" class="btn btn-success" />
<button
ng-if="installer.current.model.quickInstallAvailable && installer.current.model.customInstallAvailable"
class="btn btn-info control-customize" ng-disabled="myForm.$invalid"
ng-click="validateAndForward()">Customize</button>
<button ng-if="!installer.current.model.quickInstallAvailable" class="btn btn-primary control-customize"
ng-disabled="myForm.$invalid" ng-click="validateAndForward()">Next</button>
</div>
</div>
<p>
<small>
In order to improve Umbraco and add new functionality based on as
relevant information as possible, we would like to collect system-
and usage information from your installation.
</small>
</p>
<p><small ng-bind-html="telemetryDescription"></small></p>
</div>
</div>
</div>
</form>
<div class="control-actions" ng-class="{disabled:myForm.$invalid}">
<div
class="controls-space-between"
ng-if="installer.current.model.quickInstallSettings"
>
<button
ng-if="installer.current.model.quickInstallSettings && installer.current.model.customInstallAvailable"
class="btn btn-info control-customize"
ng-disabled="myForm.$invalid"
ng-click="validateAndForward()"
>
Change Database
</button>
<button ng-disabled="myForm.$invalid" class="btn btn-success">
Install
</button>
</div>
<button
ng-if="!installer.current.model.quickInstallSettings"
class="btn btn-primary control-customize"
ng-disabled="myForm.$invalid"
ng-click="validateAndForward()"
>
Next
</button>
</div>
</form>
</div>

View File

@@ -29,27 +29,25 @@
display: none !important;
}
html {
body {
background: url('../img/installer.svg') no-repeat center center fixed;
background-size: cover;
}
body {
margin: 0;
padding: 0;
height: 100%;
height: 100vh;
width: 100%;
font-family: @baseFontFamily;
font-size: @baseFontSize;
line-height: @baseLineHeight;
color: @textColor;
vertical-align: middle;
text-align: center;
// better font rendering
-webkit-font-smoothing: antialiased;
font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
// center items
display: grid;
place-items: center center;
}
#logo {
@@ -61,16 +59,14 @@ body {
}
#installer {
margin: auto;
background: @white;
width: 80%;
max-width: 750px;
height: 640px;
width: min-content;
min-width: 500px;
text-align: left;
padding: 30px;
padding: 3rem;
z-index: 667;
border-radius: 6px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.16);
box-shadow: 0 0 2px 4px rgba(0, 0, 0, 0.16);
}
#overlay {
@@ -144,6 +140,14 @@ legend {
font-weight: bold
}
#installer input {
width: 100%;
&[type=checkbox] {
width: auto;
}
}
input.ng-dirty.ng-invalid {
border-color: @pink;
color: @pink;
@@ -153,6 +157,21 @@ input.ng-dirty.ng-invalid {
opacity: 0.6;
}
.installer-cols {
display: grid;
grid-template-columns: repeat(2, minmax(300px, 1fr));
gap: 120px;
}
.user-col {
display: flex;
flex-direction: column;
}
.telemetry-col {
min-height: 500px
}
#installer label.control-label,
#installer .constrol-label {
@@ -166,6 +185,19 @@ input.ng-dirty.ng-invalid {
display: block;
color: @gray-3;
}
&.-with-border {
border: 1px solid @inputBorder;
}
}
.control-actions {
margin-top: 2rem;
}
.controls-space-between {
display: flex;
justify-content: space-between;;
}
#installer .input-readonly-text {
@@ -176,15 +208,6 @@ input.ng-dirty.ng-invalid {
clear: both;
}
.absolute-center {
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.fade-hide,
.fade-show {
transition: all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
@@ -282,10 +305,12 @@ select {
}
#consentSliderWrapper {
margin-bottom: 40px;
margin-bottom: 60px;
}
#consentSlider {
width: 300px;
.noUi-target {
background: linear-gradient(to bottom, @grayLighter 0%, @grayLighter 100%);
box-shadow: none;

View File

@@ -24,6 +24,7 @@
"min": 1,
"max": 3
},
behaviour: 'smooth-steps-tap',
pips: {
mode: 'values',
density: 50,

View File

@@ -2,7 +2,7 @@
<umb-box>
<umb-box-content>
<h3 class="bold">
<localize key="analytics_consentForAnalytics">Consent for analytics</localize>
<localize key="analytics_consentForAnalytics">Consent for telemetry data</localize>
</h3>
<div class="umb-healthcheck-help-text">
<localize key="analytics_analyticsDescription">
@@ -23,29 +23,24 @@
</div>
<div ng-if="vm.sliderVal === 'Minimal'">
<b>{{vm.sliderVal}}</b>
<br>
<localize key="analytics_minimalLevelDescription">We'll only send an anonymous site ID to let us know that the
site exists.
</localize>
</div>
<div ng-if="vm.sliderVal === 'Basic'">
<b>{{vm.sliderVal}}</b>
<br>
<localize key="analytics_basicLevelDescription">We'll send site ID, umbraco version and packages installed
</localize>
</div>
<div ng-if="vm.sliderVal === 'Detailed'">
<b>{{vm.sliderVal}}</b>
<br>
<localize key="analytics_detailedLevelDescription">
We will send:
<br>- Anonymized site ID, umbraco version, and packages installed.
<br>- Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
<br>- System information: Webserver, server OS, server framework, server OS language, and database provider.
<br>- Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
<br>
<br><i>We might change what we send on the Detailed level in the future. If so, it will be listed above.
We will send:
<ul>
<li>Anonymized site ID, umbraco version, and packages installed.</li>
<li>Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.</li>
<li>System information: Webserver, server OS, server framework, server OS language, and database provider.</li>
<li>Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.</li>
</ul>
<i>We might change what we send on the Detailed level in the future. If so, it will be listed above.
<br>By choosing "Detailed" you agree to current and future anonymized information being collected.</i>
</localize>
</div>