Last active
November 2, 2020 07:15
-
-
Save merkle-sitecore-gists/d663e76d20694aad814656f2cfe46aa3 to your computer and use it in GitHub Desktop.
CustomerNameUpdatePublishingStatistics.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Sitecore; | |
using Sitecore.Data; | |
using Sitecore.Data.Items; | |
using Sitecore.Diagnostics; | |
using Sitecore.Globalization; | |
using Sitecore.Publishing.Pipelines.PublishItem; | |
using Sitecore.SecurityModel; | |
using Version = Sitecore.Data.Version; | |
namespace CustomerName.Web.Core.Pipelines | |
{ | |
public class CustomerNameUpdatePublishingStatistics : PublishItemProcessor | |
{ | |
private const string PublishedFieldName = "__Published"; | |
private const string PublishedByFieldName = "__Published By"; | |
public override void Process(PublishItemContext context) | |
{ | |
SetPublishingStatisticsFields(context); | |
} | |
private void SetPublishingStatisticsFields(PublishItemContext context) | |
{ | |
Assert.ArgumentNotNull(context, "context"); | |
Assert.ArgumentNotNull(context.PublishOptions, "context.PublishOptions"); | |
Assert.ArgumentNotNull(context.PublishOptions.SourceDatabase, "context.PublishOptions.SourceDatabase"); | |
Assert.ArgumentNotNull(context.PublishOptions.TargetDatabase, "context.PublishOptions.TargetDatabase"); | |
Assert.ArgumentCondition(!ID.IsNullOrEmpty(context.ItemId), "context.ItemId", "context.ItemId must be set!"); | |
Assert.ArgumentNotNull(context.User, "context.User"); | |
if (context.VersionToPublish == null || context.VersionToPublish.Versions.Count <= 0) | |
{ | |
return; | |
} | |
SetPublishingStatisticsFields(context.PublishOptions.SourceDatabase, context.ItemId, context.User.Name, context.VersionToPublish.Language, context.VersionToPublish.Version); | |
SetPublishingStatisticsFields(context.PublishOptions.TargetDatabase, context.ItemId, context.User.Name, context.VersionToPublish.Language, context.VersionToPublish.Version); | |
} | |
private void SetPublishingStatisticsFields(Database database, ID itemId, string userName, Language lang, Version version) | |
{ | |
Assert.ArgumentNotNull(database, "database"); | |
var item = TryGetItem(database, itemId, lang, version) | |
?? TryGetItem(database, itemId, lang) | |
?? TryGetItem(database, itemId, Language.Parse("en")); | |
if (item != null && HasPublishingStatisticsFields(item)) | |
{ | |
SetPublishingStatisticsFields(item, DateUtil.IsoNow, userName); | |
} | |
} | |
private void SetPublishingStatisticsFields(Item item, string isoDateTime, string userName) | |
{ | |
Assert.ArgumentNotNull(item, "item"); | |
Assert.ArgumentNotNullOrEmpty(isoDateTime, "isoDateTime"); | |
Assert.ArgumentNotNullOrEmpty(userName, "userName"); | |
using (new SecurityDisabler()) | |
{ | |
item.Editing.BeginEdit(); | |
item.Fields[PublishedFieldName].Value = DateUtil.IsoNow; | |
item.Fields[PublishedByFieldName].Value = userName; | |
item.Editing.EndEdit(false, true); | |
} | |
//using(new LanguageSwitcher()) | |
} | |
private Item TryGetItem(Database database, ID itemId, Language lang, Version version) | |
{ | |
try | |
{ | |
return database.GetItem(itemId, lang, version); | |
} | |
catch (Exception ex) | |
{ | |
Log.Error(ToString(), ex, this); | |
} | |
return null; | |
} | |
private Item TryGetItem(Database database, ID itemId, Language lang) | |
{ | |
try | |
{ | |
return database.GetItem(itemId, lang); | |
} | |
catch (Exception ex) | |
{ | |
Log.Error(ToString(), ex, this); | |
} | |
return null; | |
} | |
private static bool HasPublishingStatisticsFields(Item item) | |
{ | |
Assert.ArgumentNotNull(item, "item"); | |
return item.Fields[PublishedFieldName] != null | |
&& item.Fields[PublishedByFieldName] != null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment