예제 #1
0
 public void StartContentMigration(PullItemModel model)
 {
     _model = model;
     if (model.PullParent)
     {
         foreach (var id in model.Ids.Select(Guid.Parse).Where(x => _sitecoreAccess.GetItemData(x) == null))
         {
             var item   = _remoteContent.GetRemoteItemData(id, model.Server);
             var parent = _sitecoreAccess.GetItemData(item.ParentId);
             while (parent == null)
             {
                 item = _remoteContent.GetRemoteItemData(item.ParentId, model.Server);
                 _puller.ItemsToInstall.Add(item);
                 parent = _sitecoreAccess.GetItemData(item.ParentId);
             }
         }
     }
     Task.Run(() =>
     {
         if (model.RemoveLocalNotInRemote)
         {
             _installer.SetupTrackerForUnwantedLocalItems(model.Ids.Select(Guid.Parse));
         }
         _puller.StartGatheringItems(model.Ids.Select(Guid.Parse), _registration.GetScsRegistration <ContentMigrationRegistration>()?.RemoteThreads ?? 1, model.Children, model.Server, _cancellation.Token, model.IgnoreRevId);
         _installer.StartInstallingItems(model, _puller.ItemsToInstall, _registration.GetScsRegistration <ContentMigrationRegistration>()?.WriterThreads ?? 1, _cancellation.Token);
     });
 }
예제 #2
0
        public ActionResult GetItemYaml(string id)
        {
            Assert.ArgumentNotNullOrEmpty(id, "id");
            using (var stream = new MemoryStream())
            {
                _yamlSerializationService.WriteSerializedItem(_sitecore.GetItemData(Guid.Parse(id)), stream);
                stream.Seek(0, SeekOrigin.Begin);

                using (var reader = new StreamReader(stream))
                {
                    return(Content(reader.ReadToEnd()));
                }
            }
        }
 internal void GatherItems(bool getChildren, string server, CancellationToken cancellationToken, bool ignoreRevId)
 {
     while (!Completed)
     {
         try
         {
             Guid id;
             if (!ProcessingIds.TryTake(out id, int.MaxValue, cancellationToken))
             {
                 break;
             }
             lock (_locker)
                 _processing++;
             ChildrenItemDataModel remoteContentItem = _remoteContent.GetRemoteItemDataWithChildren(id, server, ignoreRevId ? null : _sitecore.GetItemAndChildrenRevision(id));
             foreach (var item in (getChildren ? remoteContentItem.Items : remoteContentItem.Items.Where(x => x.Key == id)))
             {
                 if (item.Value != null)
                 {
                     IItemData itemData = _yamlSerializationService.DeserializeYaml(item.Value, item.Key.ToString());
                     GatheredRemoteItems.Add(itemData, cancellationToken);
                 }
                 else
                 {
                     GatheredRemoteItems.Add(_sitecore.GetItemData(item.Key), cancellationToken);
                 }
             }
             if (getChildren && remoteContentItem.GrandChildren != null)
             {
                 foreach (var child in remoteContentItem.GrandChildren)
                 {
                     ProcessingIds.Add(child, cancellationToken);
                 }
             }
         }
         catch (OperationCanceledException e)
         {
             _log.Warn("Content migration operation was cancelled", e, this);
             break;
         }
         catch (Exception e)
         {
             _log.Error("error processing ids to gather remote content", e, this);
         }
         lock (_locker)
         {
             _processing--;
             if (_processing > 0 || ProcessingIds.Count != 0)
             {
                 continue;
             }
         }
         Completed = true;
         ProcessingIds.CompleteAdding();
         GatheredRemoteItems.CompleteAdding();
     }
 }
 public void CleanUnwantedLocalItems()
 {
     foreach (Guid id in AllowedItems)
     {
         try
         {
             _sitecore.RecycleItem(id);
             var data = _sitecore.GetItemData(id);
             _logger.BeginEvent(data, LogStatus.Recycle, _sitecore.GetIconSrc(data), false);
         }
         catch (Exception e)
         {
             _logger.BeginEvent(new ErrorItemData()
             {
                 Name = id.ToString("B"), Path = e.ToString()
             }, LogStatus.Error, "", false);
         }
     }
 }
예제 #5
0
        private object GetContentTree(ContentTreeModel data)
        {
            if (string.IsNullOrWhiteSpace(data.Id))
            {
                return(null);
            }

            var item = _sitecore.GetItemData(data.Id, data.Database);

            return(new ContentTreeNode(item));
        }
        private object GetContentTree(ContentTreeModel data)
        {
            if (string.IsNullOrWhiteSpace(data.Id))
            {
                return(Root);
            }

            IItemData item = _sitecoreDataAccessSerivce.GetItemData(data.Id, data.Database);

            return(new ContentTreeNode(item));
        }
예제 #7
0
        private string BuildArrayQuery(IEnumerable <object> terms, string key, Dictionary <string, bool> databases)
        {
            if (key == "descendants")
            {
                var tmp = new List <object>();
                foreach (var id in terms)
                {
                    tmp.Add(_sitecoreDataAccessSerivce.GetItemData(id.ToString()).Path.Trim('/'));
                }
                terms = tmp;
                key   = "path";
            }
            StringBuilder sb = new StringBuilder("(");

            foreach (string term in terms)
            {
                if (term != "*")
                {
                    sb.Append($"{key}:{(key=="path" ? '"'+ReplaceReservedChars(term)+'"' : ReplaceReservedChars(term))} OR ");
                }
            }
            if (sb.Length > 1)
            {
                sb.Remove(sb.Length - 4, 4);
                sb.Append(")");
            }

            if (!databases.Any(x => x.Value))
            {
                return(sb.ToString());
            }
            if (sb.Length > 1)
            {
                sb.Append(" AND (");
            }
            sb.Append("database:");
            sb.Append(string.Join(" OR database:", databases.Where(x => x.Value).Select(x => x.Key)));
            sb.Append(")");

            return(sb.ToString());
        }
예제 #8
0
 public void CleanUnwantedLocalItems()
 {
     foreach (Guid id in AllowedItems)
     {
         try
         {
             var data = _sitecore.GetItemData(id);
             _logger.BeginEvent(data, LogStatus.Recycle, _sitecore.GetIconSrc(data), false);
             string status = $"{DateTime.Now:h:mm:ss tt} [RECYCLED] Recycled old item {data?.Name} - {id}";
             _logger.LoggerOutput.Add(status);
             if (data != null)
             {
                 _sitecore.RecycleItem(id);
             }
         }
         catch (Exception e)
         {
             _logger.BeginEvent(new ErrorItemData()
             {
                 Name = id.ToString("B"), Path = e.ToString()
             }, LogStatus.Error, "", false);
         }
     }
 }
예제 #9
0
        public void BuildRoot(XmlNode node)
        {
            string dbName = "master";

            if (!string.IsNullOrWhiteSpace(node.Attributes?["database"]?.Value))
            {
                dbName = node.Attributes["database"].Value;
            }

            var item = _sitecoreDataAccessService.GetItemData(node.InnerText, dbName);

            if (item != null)
            {
                Root.Nodes.Add(new CompareContentTreeNode(item, false));
            }
        }
예제 #10
0
        private string BuildArrayQuery(IEnumerable <object> terms, string key, Dictionary <string, bool> databases)
        {
            if (key == "event")
            {
                key = "EventId";
            }
            if (key == "id")
            {
                key = "ItemId";
            }
            if (key == "user")
            {
                key = "UserId";
            }
            if (key == "descendants")
            {
                var tmp = new List <object>();
                foreach (var id in terms)
                {
                    tmp.Add(_sitecoreDataAccessSerivce.GetItemData(id.ToString()).Path.Trim('/'));
                }
                terms = tmp;
                key   = "path";
            }
            StringBuilder sb = new StringBuilder("(");

            foreach (string term in terms)
            {
                var replacedTerm = ReplaceReservedChars(term);
                if (term != "*" && (key == "content" || key == "path"))
                {
                    sb.Append($"[{key}] like '%{replacedTerm}%' OR ");
                }
                else if (term != "*" && key == "ItemId")
                {
                    sb.Append($"[{key}] = '{replacedTerm.Replace('*', '-')}' OR ");
                }
                else if (term != "*" && key == "UserId")
                {
                    sb.Append($"[{key}] = '{GetUserId(replacedTerm)}' OR ");
                }
                else if (term != "*")
                {
                    sb.Append($"[{key}] = '{replacedTerm}' OR ");
                }
            }
            if (sb.Length > 1)
            {
                sb.Remove(sb.Length - 4, 4);
                sb.Append(")");
            }

            if (!databases.Any(x => x.Value))
            {
                return(sb.ToString());
            }
            if (sb.Length > 1)
            {
                sb.Append(" AND (");
            }
            sb.Append("[database] = ");
            sb.Append(string.Join(" OR [database] = ", databases.Where(x => x.Value).Select(x => $"'{x.Key}'")));
            sb.Append(")");

            return(sb.ToString());
        }
예제 #11
0
 public ContentTreeNode(string id) : this()
 {
     Initialize(_sitecoreDataAccessService.GetItemData(id), false);
 }