Fix un/publishing with variants + urls
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.Core.Events;
|
||||
using Umbraco.Core.Exceptions;
|
||||
using Umbraco.Core.IO;
|
||||
@@ -857,6 +858,14 @@ namespace Umbraco.Core.Services.Implement
|
||||
|
||||
// fixme - kill all those raiseEvents
|
||||
|
||||
// fixme
|
||||
// the API is not consistent
|
||||
// SaveAndPublish requires that SetPublishValues / ClearPublishValues is called beforehand
|
||||
// Unpublish will unpublish one culture - no idea what happens if we SetPublishValues / ClearPublishValues beforehand
|
||||
// and there's not way to just plainly unpublish the whole thing - refactor!
|
||||
//
|
||||
// plus, does it make any sense for the 'default' culture to also be 'mandatory'?
|
||||
|
||||
/// <inheritdoc />
|
||||
public OperationResult Save(IContent content, int userId = 0, bool raiseEvents = true)
|
||||
{
|
||||
@@ -944,6 +953,11 @@ namespace Umbraco.Core.Services.Implement
|
||||
/// <inheritdoc />
|
||||
public PublishResult SaveAndPublish(IContent content, int userId = 0, bool raiseEvents = true)
|
||||
{
|
||||
// note: SaveAndPublish does *not* publishes value, it assumes that content.PublishValues()
|
||||
// has been called for the variations that are to be published - those are are already
|
||||
// published remain published - can also be used to simply put the content back into its
|
||||
// previous published state after it had been completely unpublished
|
||||
|
||||
var evtMsgs = EventMessagesFactory.Get();
|
||||
PublishResult result;
|
||||
|
||||
@@ -1028,118 +1042,97 @@ namespace Umbraco.Core.Services.Implement
|
||||
/// <inheritdoc />
|
||||
public UnpublishResult Unpublish(IContent content, string culture = null, string segment = null, int userId = 0)
|
||||
{
|
||||
// unpublish a variation - and that may end up unpublishing the document as a whole,
|
||||
// if the variation was mandatory (ie for a mandatory language - no idea what would happen w/ segments)
|
||||
|
||||
if (!segment.IsNullOrWhiteSpace())
|
||||
throw new NotImplementedException("Segments are not supported.");
|
||||
|
||||
var evtMsgs = EventMessagesFactory.Get();
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
scope.WriteLock(Constants.Locks.ContentTree);
|
||||
|
||||
var tryUnpublishVariation = TryUnpublishVariationInternal(scope, content, evtMsgs, culture, segment, userId);
|
||||
|
||||
if (tryUnpublishVariation) return tryUnpublishVariation.Result;
|
||||
|
||||
//continue the normal Unpublish operation to unpublish the entire content item
|
||||
var result = UnpublishInternal(scope, content, evtMsgs, userId);
|
||||
|
||||
//not succesful, so return it
|
||||
if (!result.Success) return result;
|
||||
|
||||
//else check if there was a status returned from TryUnpublishVariationInternal and if so use that
|
||||
return tryUnpublishVariation.Result ?? result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to unpublish the requested variant if possible
|
||||
/// </summary>
|
||||
/// <param name="scope"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="evtMsgs"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <param name="segment"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns>
|
||||
/// A successful attempt if a variant was unpublished and it wasn't the last, else a failed result if it's an invariant document or if it's the last.
|
||||
/// A failed result indicates that a normal unpublish operation will need to be performed.
|
||||
/// </returns>
|
||||
private Attempt<UnpublishResult> TryUnpublishVariationInternal(IScope scope, IContent content, EventMessages evtMsgs, string culture, string segment, int userId)
|
||||
{
|
||||
if (!culture.IsNullOrWhiteSpace() || !segment.IsNullOrWhiteSpace())
|
||||
{
|
||||
//now we need to check if this is not the last culture/segment that is published
|
||||
if (!culture.IsNullOrWhiteSpace())
|
||||
// not varying, or invariant culture
|
||||
// simply unpublish the document
|
||||
if (!content.ContentType.Variations.DoesSupportCulture() || culture.IsNullOrWhiteSpace())
|
||||
{
|
||||
//capture before we clear the values
|
||||
var publishedCultureCount = content.PublishedCultures.Count();
|
||||
var unpublished = UnpublishScoped(scope, content, evtMsgs, userId);
|
||||
if (unpublished.Success) scope.Complete();
|
||||
return unpublished;
|
||||
}
|
||||
|
||||
//we need to unpublish everything if this is a mandatory language
|
||||
var unpublishAll = _languageRepository.GetMany().Where(x => x.Mandatory).Select(x => x.IsoCode).Contains(culture, StringComparer.InvariantCultureIgnoreCase);
|
||||
// varying, with culture = deal with cultures
|
||||
|
||||
content.ClearPublishedValues(culture, segment);
|
||||
//now we just publish with the name cleared
|
||||
SaveAndPublish(content, userId);
|
||||
// if already unpublished, nothing to do
|
||||
var publishedCultures = content.PublishedCultures.ToList();
|
||||
if (!publishedCultures.Contains(culture, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
scope.Complete();
|
||||
return new UnpublishResult(UnpublishResultType.SuccessAlready, evtMsgs, content);
|
||||
}
|
||||
|
||||
// otherwise, in any case, clear the unpublishing variation
|
||||
content.ClearPublishedValues(culture, segment);
|
||||
|
||||
// would there be any culture left?
|
||||
var mandatoryCultures = _languageRepository.GetMany().Where(x => x.Mandatory).Select(x => x.IsoCode);
|
||||
var isMandatory = mandatoryCultures.Contains(culture, StringComparer.OrdinalIgnoreCase);
|
||||
if (isMandatory || publishedCultures.Count == 1)
|
||||
{
|
||||
// nothing left = unpublish all
|
||||
var unpublished = UnpublishScoped(scope, content, evtMsgs, userId);
|
||||
if (unpublished.Success) scope.Complete();
|
||||
return unpublished;
|
||||
}
|
||||
|
||||
// else we need to republish, without that culture
|
||||
var saved = SaveAndPublish(content, userId);
|
||||
if (saved.Success)
|
||||
{
|
||||
Audit(AuditType.UnPublish, $"UnPublish variation culture: {culture ?? string.Empty}, segment: {segment ?? string.Empty} performed by user", userId, content.Id);
|
||||
|
||||
//We don't need to unpublish all and this is not the last one, so complete the scope and return
|
||||
if (!unpublishAll && publishedCultureCount > 1)
|
||||
{
|
||||
scope.Complete();
|
||||
return Attempt.Succeed(new UnpublishResult(UnpublishResultType.SuccessVariant, evtMsgs, content));
|
||||
}
|
||||
|
||||
if (unpublishAll)
|
||||
{
|
||||
//return a fail with a custom status here so the normal unpublish operation takes place but the result will be this flag
|
||||
return Attempt.Fail(new UnpublishResult(UnpublishResultType.SuccessMandatoryCulture, evtMsgs, content));
|
||||
}
|
||||
scope.Complete();
|
||||
return new UnpublishResult(UnpublishResultType.SuccessVariant, evtMsgs, content);
|
||||
}
|
||||
|
||||
if (!segment.IsNullOrWhiteSpace())
|
||||
{
|
||||
//TODO: When segments are supported, implement this, a discussion needs to happen about what how a segment is 'published' or not
|
||||
// since currently this is very different from a culture.
|
||||
throw new NotImplementedException("Segments are currently not supported in Umbraco");
|
||||
}
|
||||
// failed - map result
|
||||
var r = saved.Result == PublishResultType.FailedCancelledByEvent
|
||||
? UnpublishResultType.FailedCancelledByEvent
|
||||
: UnpublishResultType.Failed;
|
||||
return new UnpublishResult(r, evtMsgs, content);
|
||||
}
|
||||
|
||||
//This is either a non variant document or this is the last one or this was a mandatory variant, so return a failed result which indicates that a normal unpublish operation needs to also take place
|
||||
return Attempt.Fail<UnpublishResult>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs the logic to unpublish an entire document
|
||||
/// Unpublishes an entire document.
|
||||
/// </summary>
|
||||
/// <param name="scope"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="evtMsgs"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
private UnpublishResult UnpublishInternal(IScope scope, IContent content, EventMessages evtMsgs, int userId)
|
||||
private UnpublishResult UnpublishScoped(IScope scope, IContent content, EventMessages evtMsgs, int userId)
|
||||
{
|
||||
var newest = GetById(content.Id); // ensure we have the newest version
|
||||
if (content.VersionId != newest.VersionId) // but use the original object if it's already the newest version
|
||||
content = newest;
|
||||
if (content.Published == false)
|
||||
{
|
||||
scope.Complete();
|
||||
return new UnpublishResult(UnpublishResultType.SuccessAlready, evtMsgs, content); // already unpublished
|
||||
}
|
||||
|
||||
// strategy
|
||||
// if already unpublished, nothing to do
|
||||
if (!content.Published)
|
||||
return new UnpublishResult(UnpublishResultType.SuccessAlready, evtMsgs, content);
|
||||
|
||||
// run strategies
|
||||
// fixme should we still complete the uow? don't want to rollback here!
|
||||
var attempt = StrategyCanUnpublish(scope, content, userId, evtMsgs);
|
||||
if (attempt.Success == false) return attempt; // causes rollback
|
||||
attempt = StrategyUnpublish(scope, content, true, userId, evtMsgs);
|
||||
if (attempt.Success == false) return attempt; // causes rollback
|
||||
|
||||
// save
|
||||
content.WriterId = userId;
|
||||
_documentRepository.Save(content);
|
||||
|
||||
// events and audit
|
||||
scope.Events.Dispatch(UnPublished, this, new PublishEventArgs<IContent>(content, false, false), "UnPublished");
|
||||
scope.Events.Dispatch(TreeChanged, this, new TreeChange<IContent>(content, TreeChangeTypes.RefreshBranch).ToEventArgs());
|
||||
Audit(AuditType.UnPublish, "UnPublish performed by user", userId, content.Id);
|
||||
|
||||
scope.Complete();
|
||||
return new UnpublishResult(evtMsgs, content);
|
||||
}
|
||||
|
||||
|
||||
@@ -147,6 +147,8 @@
|
||||
<key alias="expireDate">Remove at</key>
|
||||
<key alias="itemChanged">This item has been changed after publication</key>
|
||||
<key alias="itemNotPublished">This item is not published</key>
|
||||
<key alias="itemCultureNotPublished">Culture '%0%' for this item is not published</key>
|
||||
<key alias="itemCultureNotAvailable">Culture '%0%' for this item is not available</key>
|
||||
<key alias="lastPublished">Last published</key>
|
||||
<key alias="noItemsToShow">There are no items to show</key>
|
||||
<key alias="listViewNoItems" version="7.1.5">There are no items to show in the list.</key>
|
||||
@@ -770,41 +772,41 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="resetPasswordEmailCopySubject">Umbraco: Reset Password</key>
|
||||
<key alias="resetPasswordEmailCopyFormat">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Password reset requested
|
||||
</h1>
|
||||
@@ -814,12 +816,12 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='%1%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>
|
||||
Click this link to reset your password
|
||||
</a>
|
||||
</td>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -831,22 +833,22 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<font style="-ms-word-break: break-all; word-break: break-all; font-size: 11px; line-height:14px;">
|
||||
<a style='-ms-word-break: break-all; word-break: break-all; color: #392F54; text-decoration: underline; font-size: 11px; line-height:15px;' href='%1%'>%1%</a>
|
||||
</font>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
]]>
|
||||
@@ -889,53 +891,53 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
</key>
|
||||
<key alias="mailBodyHtml">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Hi %0%,
|
||||
</h1>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
This is an automated mail to inform you that the task <strong>'%1%'</strong> has been performed on the page <a style="color: #392F54; text-decoration: none; -ms-word-break: break-all; word-break: break-all;" href="http://%4%/#/content/content/edit/%5%"><strong>'%2%'</strong></a> by the user <strong>'%3%'</strong>
|
||||
</p>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='btn btn-primary' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align='left' style='font-family: sans-serif; font-size: 14px; vertical-align: top; padding-bottom: 15px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'><tbody><tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'><tbody><tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='http://%4%/#/content/content/edit/%5%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>EDIT</a> </td> </tr></tbody></table>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -945,7 +947,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<h3>Update summary:</h3>
|
||||
<table style="width: 100%;">
|
||||
%6%
|
||||
</table>
|
||||
</table>
|
||||
</p>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
Have a nice day!<br /><br />
|
||||
@@ -957,10 +959,10 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
@@ -1519,9 +1521,9 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="isSensitiveDataDescription">Hide this property value from content editors that don't have access to view sensitive information</key>
|
||||
<key alias="showOnMemberProfile">Show on member profile</key>
|
||||
<key alias="showOnMemberProfileDescription">Allow this property value to be displayed on the member profile page</key>
|
||||
|
||||
|
||||
<key alias="tabHasNoSortOrder">tab has no sort order</key>
|
||||
|
||||
|
||||
<key alias="compositionUsageHeading">Where is this composition used?</key>
|
||||
<key alias="compositionUsageSpecification">This composition is currently used in the composition of the following content types:</key>
|
||||
</area>
|
||||
@@ -1775,41 +1777,41 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="inviteEmailCopySubject">Umbraco: Invitation</key>
|
||||
<key alias="inviteEmailCopyFormat">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Hi %0%,
|
||||
</h1>
|
||||
@@ -1827,12 +1829,12 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<td align='left' style='font-family: sans-serif; font-size: 14px; vertical-align: top; padding-bottom: 15px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='%3%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>
|
||||
Click this link to accept the invite
|
||||
</a>
|
||||
</td>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1847,22 +1849,22 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<font style="-ms-word-break: break-all; word-break: break-all; font-size: 11px; line-height:14px;">
|
||||
<a style='-ms-word-break: break-all; word-break: break-all; color: #392F54; text-decoration: underline; font-size: 11px; line-height:15px;' href='%3%'>%3%</a>
|
||||
</font>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
</body>
|
||||
</html>]]>
|
||||
</key>
|
||||
|
||||
@@ -181,6 +181,8 @@
|
||||
<key alias="expireDate">Remove at</key>
|
||||
<key alias="itemChanged">This item has been changed after publication</key>
|
||||
<key alias="itemNotPublished">This item is not published</key>
|
||||
<key alias="itemCultureNotPublished">Culture '%0%' for this item is not published</key>
|
||||
<key alias="itemCultureNotAvailable">Culture '%0%' for this item is not available</key>
|
||||
<key alias="lastPublished">Last published</key>
|
||||
<key alias="noItemsToShow">There are no items to show</key>
|
||||
<key alias="listViewNoItems" version="7.1.5">There are no items to show in the list.</key>
|
||||
@@ -897,41 +899,41 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="resetPasswordEmailCopySubject">Umbraco: Reset Password</key>
|
||||
<key alias="resetPasswordEmailCopyFormat">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Password reset requested
|
||||
</h1>
|
||||
@@ -941,12 +943,12 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='%1%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>
|
||||
Click this link to reset your password
|
||||
</a>
|
||||
</td>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -958,22 +960,22 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<font style="-ms-word-break: break-all; word-break: break-all; font-size: 11px; line-height:14px;">
|
||||
<a style='-ms-word-break: break-all; word-break: break-all; color: #392F54; text-decoration: underline; font-size: 11px; line-height:15px;' href='%1%'>%1%</a>
|
||||
</font>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
]]>
|
||||
@@ -1017,53 +1019,53 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
</key>
|
||||
<key alias="mailBodyHtml">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Hi %0%,
|
||||
</h1>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
This is an automated mail to inform you that the task <strong>'%1%'</strong> has been performed on the page <a style="color: #392F54; text-decoration: none; -ms-word-break: break-all; word-break: break-all;" href="http://%4%/#/content/content/edit/%5%"><strong>'%2%'</strong></a> by the user <strong>'%3%'</strong>
|
||||
</p>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='btn btn-primary' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align='left' style='font-family: sans-serif; font-size: 14px; vertical-align: top; padding-bottom: 15px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'><tbody><tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'><tbody><tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='http://%4%/#/content/content/edit/%5%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>EDIT</a> </td> </tr></tbody></table>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1073,7 +1075,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<h3>Update summary:</h3>
|
||||
<table style="width: 100%;">
|
||||
%6%
|
||||
</table>
|
||||
</table>
|
||||
</p>
|
||||
<p style='color: #392F54; font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0 0 15px;'>
|
||||
Have a nice day!<br /><br />
|
||||
@@ -1085,10 +1087,10 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
@@ -1646,9 +1648,9 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="isSensitiveDataDescription">Hide this property value from content editors that don't have access to view sensitive information</key>
|
||||
<key alias="showOnMemberProfile">Show on member profile</key>
|
||||
<key alias="showOnMemberProfileDescription">Allow this property value to be displayed on the member profile page</key>
|
||||
|
||||
|
||||
<key alias="tabHasNoSortOrder">tab has no sort order</key>
|
||||
|
||||
|
||||
<key alias="compositionUsageHeading">Where is this composition used?</key>
|
||||
<key alias="compositionUsageSpecification">This composition is currently used in the composition of the following content types:</key>
|
||||
</area>
|
||||
@@ -1911,41 +1913,41 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="inviteEmailCopySubject">Umbraco: Invitation</key>
|
||||
<key alias="inviteEmailCopyFormat">
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<html>
|
||||
<head>
|
||||
<meta name='viewport' content='width=device-width'>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
|
||||
</head>
|
||||
<body class='' style='font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; color: #392F54; line-height: 22px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #1d1333; margin: 0; padding: 0;' bgcolor='#1d1333'>
|
||||
<style type='text/css'> @media only screen and (max-width: 620px) {table[class=body] h1 {font-size: 28px !important; margin-bottom: 10px !important; } table[class=body] .wrapper {padding: 32px !important; } table[class=body] .article {padding: 32px !important; } table[class=body] .content {padding: 24px !important; } table[class=body] .container {padding: 0 !important; width: 100% !important; } table[class=body] .main {border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=body] .btn table {width: 100% !important; } table[class=body] .btn a {width: 100% !important; } table[class=body] .img-responsive {height: auto !important; max-width: 100% !important; width: auto !important; } } .btn-primary table td:hover {background-color: #34495e !important; } .btn-primary a:hover {background-color: #34495e !important; border-color: #34495e !important; } .btn a:visited {color:#FFFFFF;} </style>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;" bgcolor="#1d1333">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<tr>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding: 24px;" valign="top">
|
||||
<table style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
<tr>
|
||||
<td background="https://umbraco.com/umbraco/assets/img/application/logo.png" bgcolor="#1d1333" width="28" height="28" valign="top" style="font-family: sans-serif; font-size: 14px; vertical-align: top;">
|
||||
<!--[if gte mso 9]> <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:30px;height:30px;"> <v:fill type="tile" src="https://umbraco.com/umbraco/assets/img/application/logo.png" color="#1d1333" /> <v:textbox inset="0,0,0,0"> <![endif]-->
|
||||
<div> </div>
|
||||
<!--[if gte mso 9]> </v:textbox> </v:rect> <![endif]-->
|
||||
</td>
|
||||
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<table border='0' cellpadding='0' cellspacing='0' class='body' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #1d1333;' bgcolor='#1d1333'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
<td class='container' style='font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 560px; width: 560px; margin: 0 auto; padding: 10px;' valign='top'>
|
||||
<div class='content' style='box-sizing: border-box; display: block; max-width: 560px; margin: 0 auto; padding: 10px;'>
|
||||
<br>
|
||||
<table class='main' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 3px; background: #FFFFFF;' bgcolor='#FFFFFF'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<tr>
|
||||
<td class='wrapper' style='font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 50px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<tr>
|
||||
<td style='line-height: 24px; font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'>
|
||||
<h1 style='color: #392F54; font-family: sans-serif; font-weight: bold; line-height: 1.4; font-size: 24px; text-align: left; text-transform: capitalize; margin: 0 0 30px;' align='left'>
|
||||
Hi %0%,
|
||||
</h1>
|
||||
@@ -1963,12 +1965,12 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<td align='left' style='font-family: sans-serif; font-size: 14px; vertical-align: top; padding-bottom: 15px;' valign='top'>
|
||||
<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<tr>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background: #35C786;' align='center' bgcolor='#35C786' valign='top'>
|
||||
<a href='%3%' target='_blank' style='color: #FFFFFF; text-decoration: none; -ms-word-break: break-all; word-break: break-all; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; text-transform: capitalize; background: #35C786; margin: 0; padding: 12px 30px; border: 1px solid #35c786;'>
|
||||
Click this link to accept the invite
|
||||
</a>
|
||||
</td>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1983,22 +1985,22 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<font style="-ms-word-break: break-all; word-break: break-all; font-size: 11px; line-height:14px;">
|
||||
<a style='-ms-word-break: break-all; word-break: break-all; color: #392F54; text-decoration: underline; font-size: 11px; line-height:15px;' href='%3%'>%3%</a>
|
||||
</font>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</table>
|
||||
<br><br><br>
|
||||
</div>
|
||||
</td>
|
||||
<td style='font-family: sans-serif; font-size: 14px; vertical-align: top;' valign='top'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
</body>
|
||||
</html>]]>
|
||||
</key>
|
||||
|
||||
@@ -37,17 +37,6 @@ namespace Umbraco.Web
|
||||
return content.Url;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the absolute url for the content.
|
||||
/// </summary>
|
||||
/// <param name="content">The content.</param>
|
||||
/// <returns>The absolute url for the content.</returns>
|
||||
//[Obsolete("UrlWithDomain() is obsolete, use the UrlAbsolute() method instead.")]
|
||||
public static string UrlWithDomain(this IPublishedContent content)
|
||||
{
|
||||
return content.UrlAbsolute();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the absolute url for the content.
|
||||
/// </summary>
|
||||
@@ -85,8 +74,12 @@ namespace Umbraco.Web
|
||||
if (!content.ContentType.Variations.Has(ContentVariation.CultureNeutral))
|
||||
return content.UrlSegment;
|
||||
|
||||
// content.GetCulture(culture) will use the 'current' culture (via accessor) in case 'culture'
|
||||
// is null (meaning, 'current') - and can return 'null' if that culture is not published - and
|
||||
// will return 'null' if the content is variant and culture is invariant
|
||||
|
||||
// else try and get the culture info
|
||||
// return the corresponding url segment, or null if none (ie the culture is not published)
|
||||
// return the corresponding url segment, or null if none
|
||||
var cultureInfo = content.GetCulture(culture);
|
||||
return cultureInfo?.UrlSegment;
|
||||
}
|
||||
|
||||
@@ -79,23 +79,18 @@ namespace Umbraco.Web.Routing
|
||||
/// </remarks>
|
||||
public virtual IEnumerable<string> GetOtherUrls(UmbracoContext umbracoContext, int id, Uri current)
|
||||
{
|
||||
//get the invariant route for this item, this will give us the Id of it's domain node if one is assigned
|
||||
var invariantRoute = umbracoContext.ContentCache.GetRouteById(id);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(invariantRoute))
|
||||
{
|
||||
_logger.Debug<DefaultUrlProvider>(() => $"Couldn't find any page with nodeId={id}. This is most likely caused by the page not being published.");
|
||||
return null;
|
||||
}
|
||||
|
||||
var node = umbracoContext.ContentCache.GetById(id);
|
||||
var domainHelper = umbracoContext.GetDomainHelper(_siteDomainHelper);
|
||||
|
||||
// extract domainUri and path
|
||||
// route is /<path> or <domainRootId>/<path>
|
||||
var pos = invariantRoute.IndexOf('/');
|
||||
var path = pos == 0 ? invariantRoute : invariantRoute.Substring(pos);
|
||||
var domainUris = pos == 0 ? null : domainHelper.DomainsForNode(int.Parse(invariantRoute.Substring(0, pos)), current);
|
||||
var n = node;
|
||||
var domainUris = domainHelper.DomainsForNode(n.Id, current, false);
|
||||
while (domainUris == null && n != null) // n is null at root
|
||||
{
|
||||
n = n.Parent; // move to parent node
|
||||
domainUris = n == null ? null : domainHelper.DomainsForNode(n.Id, current, false);
|
||||
}
|
||||
|
||||
// no domains = exit
|
||||
if (domainUris ==null)
|
||||
return Enumerable.Empty<string>();
|
||||
|
||||
@@ -107,8 +102,8 @@ namespace Umbraco.Web.Routing
|
||||
if (route == null) continue;
|
||||
|
||||
//need to strip off the leading ID for the route if it exists (occurs if the route is for a node with a domain assigned)
|
||||
pos = route.IndexOf('/');
|
||||
path = pos == 0 ? route : route.Substring(pos);
|
||||
var pos = route.IndexOf('/');
|
||||
var path = pos == 0 ? route : route.Substring(pos);
|
||||
|
||||
var uri = new Uri(CombinePaths(d.Uri.GetLeftPart(UriPartial.Path), path));
|
||||
uri = UriUtility.UriFromUmbraco(uri, _globalSettings, _requestSettings);
|
||||
|
||||
@@ -1,25 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using LightInject;
|
||||
using Umbraco.Web.Composing;
|
||||
|
||||
namespace Umbraco.Web.Routing
|
||||
{
|
||||
internal static class UrlProviderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the URLs for the content item
|
||||
/// Gets the Urls of the content item.
|
||||
/// </summary>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="umbracoContext"></param>
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// Use this when displaying URLs, if there are errors genertaing the urls the urls themselves will
|
||||
/// contain the errors.
|
||||
/// <para>Use when displaying Urls. If errors occur when generating the Urls, they will show in the list.</para>
|
||||
/// <para>Contains all the Urls that we can figure out (based upon domains, etc).</para>
|
||||
/// </remarks>
|
||||
public static IEnumerable<string> GetContentUrls(this IContent content, UrlProvider urlProvider, ILocalizedTextService textService, IContentService contentService, ILogger logger)
|
||||
{
|
||||
@@ -31,44 +28,87 @@ namespace Umbraco.Web.Routing
|
||||
|
||||
var urls = new HashSet<string>();
|
||||
|
||||
// going to build a list of urls (essentially for the back-office)
|
||||
// which will contain
|
||||
// - the 'main' url, which is what .Url would return, in the current culture
|
||||
// - the 'other' urls we know (based upon domains, etc)
|
||||
//
|
||||
// this essentially happens when producing the urls for the back-office, and then we don't have
|
||||
// a meaningful 'current culture' - so we need to explicitely pass some culture where required,
|
||||
// and deal with whatever might happen
|
||||
//
|
||||
// if content is variant, go with the current culture - and that is NOT safe, there may be
|
||||
// no 'main' url for that culture, deal with it later - otherwise, go with the invariant
|
||||
// culture, and that is safe.
|
||||
var varies = content.ContentType.Variations.DoesSupportCulture();
|
||||
var culture = varies ? Thread.CurrentThread.CurrentUICulture.Name : "";
|
||||
|
||||
if (content.Published == false)
|
||||
{
|
||||
urls.Add(textService.Localize("content/itemNotPublished"));
|
||||
return urls;
|
||||
}
|
||||
|
||||
string url;
|
||||
try
|
||||
string url = null;
|
||||
|
||||
if (varies)
|
||||
{
|
||||
url = urlProvider.GetUrl(content.Id);
|
||||
if (!content.IsCulturePublished(culture))
|
||||
{
|
||||
urls.Add(textService.Localize("content/itemCultureNotPublished", culture));
|
||||
// but keep going, we want to add the 'other' urls
|
||||
url = "#no";
|
||||
}
|
||||
else if (!content.IsCultureAvailable(culture))
|
||||
{
|
||||
urls.Add(textService.Localize("content/itemCultureNotAvailable", culture));
|
||||
// but keep going, we want to add the 'other' urls
|
||||
url = "#no";
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
// get the 'main' url
|
||||
if (url == null)
|
||||
{
|
||||
logger.Error<UrlProvider>("GetUrl exception.", e);
|
||||
url = "#ex";
|
||||
try
|
||||
{
|
||||
url = urlProvider.GetUrl(content.Id, culture);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.Error<UrlProvider>("GetUrl exception.", e);
|
||||
url = "#ex";
|
||||
}
|
||||
}
|
||||
if (url == "#")
|
||||
|
||||
if (url == "#") // deal with 'could not get the url'
|
||||
{
|
||||
// document as a published version yet it's url is "#" => a parent must be
|
||||
// document as a published version yet its url is "#" => a parent must be
|
||||
// unpublished, walk up the tree until we find it, and report.
|
||||
var parent = content;
|
||||
do
|
||||
{
|
||||
parent = parent.ParentId > 0 ? parent.Parent(contentService) : null;
|
||||
}
|
||||
while (parent != null && parent.Published);
|
||||
while (parent != null && parent.Published && (!varies || parent.IsCulturePublished(culture)));
|
||||
|
||||
urls.Add(parent == null
|
||||
? textService.Localize("content/parentNotPublishedAnomaly") // oops - internal error
|
||||
: textService.Localize("content/parentNotPublished", new[] { parent.Name }));
|
||||
}
|
||||
else if (url == "#ex")
|
||||
else if (url == "#ex") // deal with exceptions
|
||||
{
|
||||
urls.Add(textService.Localize("content/getUrlException"));
|
||||
}
|
||||
else
|
||||
else if (url == "#no") // deal with 'there is no main url'
|
||||
{
|
||||
// test for collisions
|
||||
// get the 'other' urls
|
||||
foreach(var otherUrl in urlProvider.GetOtherUrls(content.Id))
|
||||
urls.Add(otherUrl);
|
||||
}
|
||||
else // detect collisions, etc
|
||||
{
|
||||
// test for collisions on the 'main' url
|
||||
var uri = new Uri(url.TrimEnd('/'), UriKind.RelativeOrAbsolute);
|
||||
if (uri.IsAbsoluteUri == false) uri = uri.MakeAbsolute(UmbracoContext.Current.CleanedUmbracoUrl);
|
||||
uri = UriUtility.UriToUmbraco(uri);
|
||||
@@ -105,10 +145,10 @@ namespace Umbraco.Web.Routing
|
||||
else
|
||||
{
|
||||
urls.Add(url);
|
||||
|
||||
// get the 'other' urls
|
||||
foreach(var otherUrl in urlProvider.GetOtherUrls(content.Id))
|
||||
{
|
||||
urls.Add(otherUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
return urls;
|
||||
|
||||
Reference in New Issue
Block a user