Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save merkle-sitecore-gists/d663e76d20694aad814656f2cfe46aa3 to your computer and use it in GitHub Desktop.
Save merkle-sitecore-gists/d663e76d20694aad814656f2cfe46aa3 to your computer and use it in GitHub Desktop.
CustomerNameUpdatePublishingStatistics.cs
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