protected virtual void AddItemsToPublishingQueue(Item item1, ref List <Item> items, bool sharedOnly, bool subitems, bool recurse, Dictionary <ID, bool> deepRelatedTemplates)
        {
            items.AddRange(PublishQueue.GetParents(item1));
            items.Add(item1);
            if (subitems)
            {
                items.AddRange(item1.Children);
            }

            if (deepRelatedTemplates?.ContainsKey(item1.TemplateID) == true && recurse)
            {
                var relatedItems = GetReferences(item1, sharedOnly, deepRelatedTemplates[item1.TemplateID], recurse: false).ToArray();
                items.AddRange(relatedItems);
            }

            var relatedImages = item1.Links.GetValidLinks().Where(link => link.TargetPath.StartsWith(Constants.MediaLibraryPath))
                                .Select(link => link.GetTargetItem()).ToArray();

            if (relatedImages.Any())
            {
                var imageParents = relatedImages.SelectMany(PublishQueue.GetParents);
                items.AddRange(imageParents);
                items.AddRange(relatedImages);
            }
        }
Exemple #2
0
 // Methods
 private IEnumerable <PublishingCandidate> GetSourceItems(PublishOptions options)
 {
     if (options.Mode == PublishMode.Incremental)
     {
         return(PublishQueue.GetPublishQueue(options));
     }
     return(PublishQueue.GetContentBranch(options));
 }
 public override IDList GetPublishQueue(DateTime from, DateTime to, [NotNull] CallContext context)
 {
     lock (this)
     {
         var result = new IDList();
         PublishQueue.Where(r => (r.Date >= from) && (r.Date <= to)).Apply(r => result.Add(r.ItemID));
         return(result);
     }
 }
        public override bool CleanupPublishQueue(DateTime to, [NotNull] CallContext context)
        {
            lock (this)
            {
                PublishQueue = PublishQueue.Where(item => item.Date > to).ToList();

                return(true);
            }
        }
 public override bool AddToPublishQueue(
     [NotNull] ID itemID,
     [NotNull] string action,
     DateTime date,
     [NotNull] CallContext context)
 {
     lock (this)
     {
         PublishQueue.Add(new PublishQueueRow
         {
             ItemID = itemID,
             Action = action,
             Date   = date
         });
         return(true);
     }
 }
Exemple #6
0
        private IEnumerable <Item> GetReferences(Item item, bool sharedOnly, HashSet <ID> processedItems)
        {
            Assert.ArgumentNotNull(item, nameof(item));
            processedItems.Add(item.ID);
            var source = new List <Item>();
            var array  = item.Links.GetValidLinks().Where(link =>
                                                          item.Database.Name.Equals(link.TargetDatabaseName, StringComparison.OrdinalIgnoreCase)).ToArray();

            if (sharedOnly)
            {
                array = array.Where(link =>
                {
                    var sourceItem = link.GetSourceItem();
                    if (sourceItem == null)
                    {
                        return(false);
                    }
                    if (!ID.IsNullOrEmpty(link.SourceFieldID))
                    {
                        return(sourceItem.Fields[link.SourceFieldID].Shared);
                    }
                    return(true);
                }).ToArray();
            }
            foreach (var obj in array.Select(link => link.GetTargetItem()).Where(relatedItem => relatedItem != null)
                     .ToList())
            {
                if (DeepScan && !processedItems.Contains(obj.ID))
                {
                    source.AddRange(GetReferences(obj, sharedOnly, processedItems));
                }
                source.AddRange(PublishQueue.GetParents(obj));
                source.Add(obj);
                source.AddRange(GetAdvancedImageFieldsLinkedMediaItems(obj));
                source.AddRange(GetAdvancedImageGalleryFieldsLinkedMediaItems(obj));
            }

            return(source.Distinct(new ItemIdComparer()));
        }
Exemple #7
0
        /// <summary>
        /// Gets the referenced items.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns></returns>
        private IEnumerable <Item> GetReferences(Item item)
        {
            Assert.ArgumentNotNull(item, "item");
            List <Item> items = new List <Item>();

            ItemLink[] validLinks = item.Links.GetValidLinks();
            validLinks = (
                from link in validLinks
                where item.Database.Name.Equals(link.TargetDatabaseName, StringComparison.OrdinalIgnoreCase)
                select link).ToArray <ItemLink>();

            List <Item> list = (
                from link in (IEnumerable <ItemLink>) validLinks
                select link.GetTargetItem() into relatedItem
                where relatedItem != null
                select relatedItem).ToList <Item>();

            foreach (Item item1 in list)
            {
                items.AddRange(PublishQueue.GetParents(item1));
                items.Add(item1);
            }
            return(items.Distinct(new ItemIdComparer()));
        }
Exemple #8
0
        static void Main(string[] args)
        {
            var connectionString = args[0];


            var logger = new ConsoleLogger();

            using (var tfs = new ThreadsFrames())
            {
                //var sf = new ConsoleCollectionSaverFactory(
                //    );

                var ftn = new FullTableName("_ss");

                var tfnc = new TargetFileNameController(
                    1,
                    @"_bbin",
                    500
                    );

                var sf = new SqlServerCollectionSaverFactory(
                    connectionString,
                    ftn,
                    tfnc
                    );
                sf.PrepareDatabase();

                var r = new SqlServerReader(
                    connectionString,
                    ftn,
                    tfnc
                    );

                using (var pq = new PublishQueue(
                           sf,
                           logger
                           ))
                {
                    var p = new Publisher(
                        pq,
                        tfs
                        );

                    var iec = new Common.IEC(tfs, p, r);

                    iec.Publisher.PublishedEvent +=
                        (
                            collections,
                            count
                        ) =>
                    {
                        var read = iec.Reader.ReadBetween(
                            new DateTime(2000, 1, 1),
                            new DateTime(2030, 1, 1)
                            );

                        Console.WriteLine(read.Last().Body);
                    };

                    ProcessMutable(iec);
                    //ProcessImmutable(iec);
                }
            }

            Console.WriteLine("Finished!");
        }
Exemple #9
0
        /// <summary>
        /// Loads data for the Incremental Publish Queue report (includes all item languages). Utilizes Sitecore.Publishing.Pipelines.Publish.GetPublishQueue(PublishOptions) method as a source of data, then augments it based on item workflow state: only returns items in a final workflow state.
        /// </summary>
        /// <param name="languageCode">Language code to load. Default is "en". Must otherwise use fully-qualified language code (example: "ja-JP").</param>
        /// <returns>Enumerable of publish candidate items.</returns>
        public IEnumerable <PublishQueueItem> IncrementalPublishQueue_GetData()
        {
            Database masterDB             = Database.GetDatabase(Sitecore.Configuration.Settings.GetSetting("SitecoreSpark.SPRK.SourceDatabase"));
            Database webDB                = Database.GetDatabase(Sitecore.Configuration.Settings.GetSetting("SitecoreSpark.SPRK.TargetDatabase"));
            List <PublishQueueItem> model = new List <PublishQueueItem>();

            // Note on language: the actual publish pipeline uses the language parameter; it doesn't matter what we pass in for this usage
            PublishOptions options = new PublishOptions(masterDB, webDB, PublishMode.Incremental, Language.Parse("en"), DateTime.Now.AddDays(1));
            IEnumerable <PublishingCandidate> candidateList = PublishQueue.GetPublishQueue(options);

            if (candidateList != null && candidateList.Count() > 0)
            {
                foreach (PublishingCandidate candidate in candidateList)
                {
                    // Get detailed item information (including workflow info for inclusion/exclusion on report)
                    Item scItem = masterDB.GetItem(itemId: candidate.ItemId);

                    // If scItem is null, it likely means an item was deleted from 'master' before a publish (and still exists in the PublishQueue table); safe to ignore
                    if (scItem == null)
                    {
                        Sitecore.Diagnostics.Log.Warn($"[SPRK] PublishQueue item not found in '{masterDB.Name}' database: {candidate.ItemId}.", this);
                        continue;
                    }

                    // Check for all language versions (Workflow is shared, but Workflow State may be unique across languages)
                    foreach (Language language in scItem.Languages)
                    {
                        Item scLanguageItem = masterDB.GetItem(itemId: scItem.ID, language: language);

                        // Alt language versions do not automatically have a version number, so it's worth a check before proceeded
                        if (scLanguageItem.Versions.Count == 0)
                        {
                            continue;
                        }

                        IWorkflow itemWorkflow = masterDB.WorkflowProvider.GetWorkflow(scLanguageItem);

                        if (itemWorkflow == null)
                        {
                            continue;
                        }

                        WorkflowState state = itemWorkflow.GetState(scLanguageItem);

                        if (state != null && state.FinalState)
                        {
                            // Map to domain model
                            model.Add(new PublishQueueItem()
                            {
                                ItemID         = candidate.ItemId.Guid,
                                ItemName       = scItem.Name,
                                Language       = language.Name,
                                Action         = candidate.PublishAction.ToString(),
                                SourceDatabase = candidate.PublishOptions.SourceDatabase.Name,
                                TargetDatabase = candidate.PublishOptions.TargetDatabase.Name
                            });
                        }
                    }
                }
            }

            return(model);
        }