private static bool prepareLatestArticleNumberGeneratedInTargetPublication(ArticleMovingParameters parameters) { var masterDb = Sitecore.Data.Database.GetDatabase("master"); var folderInTargetPublication = masterDb.GetItem(new ID(new Guid(parameters.DestinationType == DestinationType.PreserveFolderHierarchy ? parameters.DestinationMainArticlesFolder : parameters.DestinationFolderID))); if (folderInTargetPublication == null) { log("Could not get folderInTargetPublication for generating new Article Number", true); return(false); } Item tempItemInTargetPublication = folderInTargetPublication; while (tempItemInTargetPublication != null && tempItemInTargetPublication.TemplateID.Guid.Equals(new Guid(Constants.SiteRootTempalteID)) == false) { tempItemInTargetPublication = tempItemInTargetPublication.Parent; } if (tempItemInTargetPublication == null) { log("Could not find publication root item for generating new Article Number", true); return(false); } log("Site Root found. ID: " + tempItemInTargetPublication.ID.Guid); prepareLatestArticleNumber(tempItemInTargetPublication.ID.Guid); return(true); }
private static Item GetDestinationFolder_WithHierarchy(Item sourceitem, ArticleMovingParameters parameters) { var masterDb = Sitecore.Data.Database.GetDatabase("master"); Stack <string> folderHierarchy = new Stack <string>(); var currentItem = sourceitem; while (currentItem.Parent != null && !currentItem.Parent.TemplateID.Guid.Equals(new Guid(Constants.MainArticlesFolderTemplateID))) { folderHierarchy.Push(currentItem.Parent.Name); currentItem = currentItem.Parent; } var destinationMainArticlesFolder = masterDb.GetItem(parameters.DestinationMainArticlesFolder); var latestFolderItemFound = destinationMainArticlesFolder; while (folderHierarchy.Count > 0) { string folderName = folderHierarchy.Pop(); var tempFolder = latestFolderItemFound.Children.FirstOrDefault(w => w.Name == folderName); if (tempFolder == null) { latestFolderItemFound = CreateFolder(folderName, latestFolderItemFound); } else { latestFolderItemFound = tempFolder; } } return(latestFolderItemFound); }
public static bool MoveArticleToDestination(List <Item> sourceItems, ArticleMovingParameters parameters) { if (parameters.DestinationType == DestinationType.ToSpecificFolderID) { return(MoveArticlesToSpecificFolderID(sourceItems, parameters)); } else if (parameters.DestinationType == DestinationType.PreserveFolderHierarchy) { return(MoveArticlesAndPreserveHierarchy(sourceItems, parameters)); } return(false); }
public static bool MoveArticlesAndPreserveHierarchy(List <Item> sourceItems, ArticleMovingParameters parameters) { log("-----------------------------------------------------------------------------"); foreach (var item in sourceItems) { Item folder = null; try { log("Getting destination folder item for " + item.ID + " (" + item.Name + ")"); folder = GetDestinationFolder_WithHierarchy(item, parameters); if (folder == null) { throw new Exception("folder retrieved empty"); } } catch (Exception ex) { log("Getting destination folder item for " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); continue; } try { log("Moving item " + item.ID + " (" + item.Name + ")"); item.MoveTo(folder); } catch (Exception ex) { log("Moving item " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); continue; } //if (parameters.PublishDestinationItems) //{ // try // { // log("Publishing item " + item.ID + " (" + item.Name + ")"); // PublishItem(item, false); // } // catch (Exception ex) // { // log("Publishing item " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); // continue; // } //} } return(true); }
public static bool MoveArticlesToSpecificFolderID(List <Item> sourceItems, ArticleMovingParameters parameters) { log("-----------------------------------------------------------------------------"); var masterDb = Sitecore.Data.Database.GetDatabase("master"); var folderID = parameters.DestinationFolderID; var folder = masterDb.GetItem(new ID(new Guid(folderID))); if (folder == null) { log("Folder " + folderID + " does not exist", true); return(false); } if (!folder.TemplateID.Guid.Equals(new Guid(Constants.MainArticlesFolderTemplateID)) && !folder.TemplateID.Guid.Equals(new Guid(Constants.SubArticlesFolderTemplateID))) { log("Folder " + folderID + " is not an articles folder", true); return(false); } foreach (var item in sourceItems) { try { log("Moving item " + item.ID + " (" + item.Name + ")"); item.MoveTo(folder); } catch (Exception ex) { log("Moving item " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); } //if (parameters.PublishDestinationItems) //{ // try // { // log("Publishing item " + item.ID + " (" + item.Name + ")"); // PublishItem(item, false); // } // catch (Exception ex) // { // log("Publishing item " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); // } //} } return(true); }
protected void bntStart_Click(object sender, EventArgs e) { try { lblError.Text = string.Empty; if (IsValidInput() == false) { return; } ArticleMovingParameters parameters = new ArticleMovingParameters(); parameters.SourceType = SourceType.ArticleIDs; // rdMoveByArticleIDs.Checked ? SourceType.ArticleIDs : SourceType.FolderIDs; parameters.SourceIDs = txtIDs.Text.Trim(); parameters.SourceIDType = rdIsItemIDs.Checked ? SourceIDType.ItemID : SourceIDType.ArticleID; parameters.DestinationType = rdPreserveDateFoldersHier.Checked ? DestinationType.PreserveFolderHierarchy : DestinationType.ToSpecificFolderID; parameters.DestinationMainArticlesFolder = rdPreserveDateFoldersHier.Checked ? txtDestinationArticlesFolder.Text.Trim() : string.Empty; parameters.DestinationFolderID = rdMoveToFolderID.Checked ? txtToFolderID.Text.Trim() : string.Empty; //parameters.MoveChildrenWithoutParentFolder = rdMoveToFolderID.Checked ? chkWithoutParentFolder.Checked : false; parameters.GenerateNewArticleNumbers = chkGenerateNumber.Checked; parameters.ClearTaxonomy = chkClearTaxonomy.Checked; parameters.NewTaxonomyIDsToAdd = chkNewTaxonomyFields.Checked ? txtNewTaxonomyFields.Text.Trim() : string.Empty; parameters.PublishDestinationItems = chkPublishDestination.Checked; string resultStatus; bool result = ArticleMoverUtility.Process(parameters, out resultStatus); if (result) { lblError.ForeColor = System.Drawing.Color.Green; lblError.Text = resultStatus; } else { lblError.ForeColor = System.Drawing.Color.Red; lblError.Text = resultStatus; } } catch (Exception ex) { lblError.Text = "An error has occured: " + ex.ToString(); } }
public static bool MoveByArticleIDs(ArticleMovingParameters parameters, out List <Item> items) { log("-----------------------------------------------------------------------------"); log("Moving By IDs started"); var masterDb = Sitecore.Data.Database.GetDatabase("master"); List <Item> articlesToMove = new List <Item>(); List <Informa.Models.Informa.Models.sitecore.templates.User_Defined.Pages.IArticle> articlesByArticleNumber = new List <IArticle>(); if (parameters.SourceIDType == SourceIDType.ArticleID) { articlesByArticleNumber = ArticleMoverUtility.SearchArticlesByArticleNumbers(parameters.SourceIDs.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList()); log("Searched: " + string.Join(", ", articlesByArticleNumber?.Select(s => string.Format("{0} - {1}", s?._Id, s?.Article_Number)))); } foreach (var id in parameters.SourceIDs.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)) { try { log("Retrieving items"); if (parameters.SourceIDType == SourceIDType.ItemID) { var item = masterDb.GetItem(new ID(new Guid(id))); log("Retrieved Item " + id + " (" + item.Name + ")"); if (!item.TemplateID.Guid.Equals(new Guid(Constants.ArticlesTemplateID))) { log("**Item " + id + " is not an article"); continue; } articlesToMove.Add(item); } else { var article = articlesByArticleNumber?.FirstOrDefault(w => w?.Article_Number == id); if (article == null) { log("**Article ID " + id + ": does not exist"); continue; } var item = masterDb.GetItem(new ID(article._Id)); log("Retrieved Item " + id + " (" + item.Name + ")"); if (!item.TemplateID.Guid.Equals(new Guid(Constants.ArticlesTemplateID))) { log("**Item " + id + " is not an article"); continue; } articlesToMove.Add(item); } } catch (Exception ex) { log("failed to retrieve Item " + id + ". " + ex.ToString(), true); } } items = articlesToMove; return(MoveArticleToDestination(articlesToMove, parameters)); }
public static bool Process(ArticleMovingParameters parameters, out string resultStatus) { _resultStatus = string.Empty; try { log("Processing Articles started"); var masterDb = Sitecore.Data.Database.GetDatabase("master"); List <Item> items = null; bool result = true; if (parameters.GenerateNewArticleNumbers) { result = prepareLatestArticleNumberGeneratedInTargetPublication(parameters); resultStatus = _resultStatus; } if (result) { if (parameters.SourceType == SourceType.ArticleIDs) { result = MoveByArticleIDs(parameters, out items); resultStatus = _resultStatus; } } if (result) { if (parameters.GenerateNewArticleNumbers) { log("-----------------------------------------------------------------------------"); foreach (var item in items) { try { var newNumber = getNewArticleNumber(); if (newNumber == string.Empty) { throw new Exception("New article number is empty"); } log("Generating new article Numbers for item " + item.Fields["Article Number"].Value + "|" + item.ID + " (" + item.Name + ") ----> " + newNumber); item.Editing.BeginEdit(); item.Fields["Article Number"].Value = newNumber; item.Editing.EndEdit(); } catch (Exception ex) { log("Could not generate new article number for item " + item.ID + " (" + item.Name + "). " + ex.ToString(), true); } } } if (parameters.ClearTaxonomy && items != null && items.Any()) { log("-----------------------------------------------------------------------------"); foreach (var item in items) { try { log("Clearing taxonomy from item " + item.ID + " (" + item.Name + ")"); item.Editing.BeginEdit(); item.Fields["Taxonomy"].Value = string.Empty; item.Editing.EndEdit(); } catch (Exception ex) { log("Could not clear Taxonomy from item " + item.ID + " (" + item.Name + "). " + ex.ToString(), true); } } } if (parameters.NewTaxonomyIDsToAdd != string.Empty && items != null && items.Any()) { log("-----------------------------------------------------------------------------"); foreach (var item in items) { try { log("Adding taxonomy (" + parameters.NewTaxonomyIDsToAdd + ") to item " + item.ID + " (" + item.Name + ")"); item.Editing.BeginEdit(); if (string.IsNullOrEmpty(item.Fields["Taxonomy"].Value)) { item.Fields["Taxonomy"].Value = parameters.NewTaxonomyIDsToAdd; } else { item.Fields["Taxonomy"].Value = "|" + parameters.NewTaxonomyIDsToAdd; } item.Editing.EndEdit(); } catch (Exception ex) { log("Could not set Taxonomy to item " + item.ID + " (" + item.Name + ")" + ex.ToString(), true); } } } if (parameters.PublishDestinationItems) { log("-----------------------------------------------------------------------------"); foreach (var item in items) { try { log("Publishing item " + item.ID + " (" + item.Name + ")"); PublishItem(item, false); } catch (Exception ex) { log("Publishing item " + item.ID + " (" + item.Name + ") failed. " + ex.Message, true); continue; } } } } log("Processing Complete"); resultStatus = _resultStatus; return(result); } catch (Exception ex) { log(ex.ToString(), true); resultStatus = _resultStatus; return(false); } }