Fix un/publishing with variants + urls

This commit is contained in:
Stephan
2018-06-12 17:05:37 +02:00
parent 9c3e8b8e3c
commit a697608529
6 changed files with 377 additions and 352 deletions

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;