Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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();
            }
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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);
            }
        }