Created
March 14, 2016 11:46
-
-
Save mtrl/e2a51c09620a7afbd346 to your computer and use it in GitHub Desktop.
ReleaseEvents.cs
This file contains hidden or 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 Tridion.ContentManager.ContentManagement; | |
using Tridion.ContentManager.Extensibility; | |
using Tridion.ContentManager.Extensibility.Events; | |
using Tridion.ContentManager.CommunicationManagement; | |
using System; | |
using Tridion.ContentManager; | |
using System.IO; | |
using System.Web; | |
namespace Example.ReleaseEvents | |
{ | |
[TcmExtension("Release Events")] | |
public class ReleaseEvents : TcmExtension | |
{ | |
private string _logFile = "c:\\log\\ReleaseEventsLog.txt"; | |
private bool _isLoggingEnabled = false; | |
private const string RELEASE_PACKAGES_FOLDER = "Release Packages"; | |
public ReleaseEvents() | |
{ | |
EventSystem.Subscribe<VersionedItem, CheckInEventArgs>(VersionedItemSave, EventPhases.TransactionCommitted); | |
EventSystem.Subscribe<OrganizationalItem, SaveEventArgs>(ItemSave, EventPhases.TransactionCommitted); | |
EventSystem.Subscribe<Keyword, SaveEventArgs>(ItemSave, EventPhases.TransactionCommitted); | |
EventSystem.Subscribe<RepositoryLocalObject, LocalizeEventArgs>(ItemLocalize, EventPhases.TransactionCommitted); | |
} | |
private void VersionedItemSave(VersionedItem item, CheckInEventArgs args, EventPhases phases) | |
{ | |
this.LogMessage("Versioned item saved " + item.Title); | |
AddItemToReleaseBundle(item); | |
} | |
private void ItemSave(RepositoryLocalObject item, SaveEventArgs args, EventPhases phases) | |
{ | |
this.LogMessage("Item save"); | |
if ((item is Folder && item.Title!=RELEASE_PACKAGES_FOLDER) || item is StructureGroup || item is Category || item is Keyword) | |
{ | |
this.LogMessage("Item saved " + item.Title); | |
AddItemToReleaseBundle(item); | |
} | |
} | |
private void ItemLocalize(RepositoryLocalObject item, LocalizeEventArgs args, EventPhases phases) | |
{ | |
this.LogMessage("Item localised " + item.Title); | |
AddItemToReleaseBundle(item); | |
} | |
private void AddItemToReleaseBundle(RepositoryLocalObject item) | |
{ | |
this.LogMessage(item.Title + " entered AddItemToReleaseBundle"); | |
Bundle bundle = GetOrCreateReleaseBundle(item.ContextRepository); | |
this.LogMessage("Got bundle from contextrepo: " + bundle.Title); | |
if (item.ContextRepository.Id.ItemId == bundle.ContextRepository.Id.ItemId) | |
{ | |
this.LogMessage(item.Title + " Item contextrepo ID same as bundle repo ID"); | |
bundle.AddItem(item); | |
bundle.Save(); | |
} | |
} | |
private Bundle GetOrCreateReleaseBundle(Repository repository) | |
{ | |
var session = repository.Session; | |
Bundle bundle = GetObject(session, GetReleaseBundleWebDavUrl(repository)) as Bundle; | |
if (bundle == null) | |
{ | |
LogMessage("Bundle is null, creating bundle"); | |
bundle = new Bundle(session, GetReleaseFolderUri(repository)); | |
bundle.Title = repository.Title; | |
bundle.Save(); | |
LogMessage("Bundle " + bundle.Title + " created"); | |
} | |
else | |
{ | |
LogMessage("Bundle is not null, returning bundle"); | |
} | |
return bundle; | |
} | |
private string GetReleaseBundleWebDavUrl(Repository repository) | |
{ | |
LogMessage("Attempting to get repository bundle"); | |
string pubBit = repository.WebDavUrl.Substring("/webdav/".Length); | |
LogMessage("pubBit var = " + pubBit); | |
string releaseBundleWebDavUrl = String.Format("{0}/{1}/{2}", repository.RootFolder.WebDavUrl, Uri.EscapeDataString(RELEASE_PACKAGES_FOLDER), pubBit); | |
LogMessage("Release bundle WebDav URL = " + releaseBundleWebDavUrl); | |
return releaseBundleWebDavUrl; | |
} | |
private TcmUri GetReleaseFolderUri(Repository repository) | |
{ | |
Folder folder = GetObject(repository.Session,repository.RootFolder.WebDavUrl + "/" + RELEASE_PACKAGES_FOLDER) as Folder; | |
if (folder == null) | |
{ | |
int contextPublicationId = repository.Id.ItemId; | |
repository = GetRootRepository(repository); | |
folder = new Folder(repository.Session, repository.RootFolder.Id); | |
folder.Title = RELEASE_PACKAGES_FOLDER; | |
folder.Save(); | |
return new TcmUri(folder.Id.ItemId,ItemType.Folder,contextPublicationId); | |
} | |
return folder.Id; | |
} | |
private Repository GetRootRepository(Repository repository) | |
{ | |
if (repository.Parents.Count == 0) | |
{ | |
return repository; | |
} | |
else | |
{ | |
return GetRootRepository(repository.Parents[0]); | |
} | |
} | |
private IdentifiableObject GetObject(Session session, string uriOrWebdavUrl) | |
{ | |
if (session.IsExistingObject(uriOrWebdavUrl)) | |
{ | |
return session.GetObject(uriOrWebdavUrl); | |
} | |
return null; | |
} | |
private void LogMessage(string message) | |
{ | |
if (_isLoggingEnabled) | |
{ | |
File.AppendAllText(_logFile, DateTime.Now.ToString() + "\t" + message + "\r\n"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment