/// <summary>
        /// Handles a click on the OK button. Creates a task for publishing the selected item.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The arguments.</param>
        protected override void OnOK(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");

            PublishSchedule publishSchedule = new PublishSchedule
            {
                ItemToPublish   = InnerItem,
                PublishDate     = SelectedPublishDate,
                SourceDatabase  = _database,
                TargetDatabases = SelectedTargets,
                TargetLanguages = SelectedLanguages,
                Unpublish       = Unpublish,
                PublishMode     = SmartPublish.Checked ? PublishMode.Smart : PublishMode.Full,
                PublishChildren = PublishChildren.Checked,
                SchedulerEmail  = Context.User.Profile.Email,
                IsPublished     = false
            };

            ValidationResult validationResult = ScheduledPublishValidator.Validate(publishSchedule);

            if (!validationResult.IsValid)
            {
                SheerResponse.Alert(string.Join(Environment.NewLine, validationResult.ValidationErrors));
                return;
            }

            _scheduledPublishRepo.CreatePublishSchedule(publishSchedule);

            base.OnOK(sender, args);
        }
        public static ValidationResult Validate(PublishSchedule publishSchedule)
        {
            ValidationResult result = new ValidationResult
            {
                IsValid = true
            };

            if (publishSchedule == null)
            {
                result.ValidationErrors.Add("Null reference");
                result.IsValid = false;

                return(result);
            }

            if (!IsFutureDate(publishSchedule.PublishDate))
            {
                result.ValidationErrors.Add("Please, select future date.");
                result.IsValid = false;
            }

            if (publishSchedule.TargetDatabases == null || !publishSchedule.TargetDatabases.Any())
            {
                result.ValidationErrors.Add("Please, select at least one publish target.");
                result.IsValid = false;
            }

            if (publishSchedule.Unpublish)
            {
                return(result);
            }

            if (publishSchedule.TargetLanguages == null || !publishSchedule.TargetLanguages.Any())
            {
                result.ValidationErrors.Add("Please, select at least one publish language.");
                result.IsValid = false;
            }

            if (publishSchedule.PublishMode == PublishMode.Unknown)
            {
                result.ValidationErrors.Add("Unknown publish mode.");
                result.IsValid = false;
            }

            if (!IsPublishableItem(publishSchedule.ItemToPublish, publishSchedule.PublishDate))
            {
                result.ValidationErrors.Add("Item is not publishable at that time.");
                result.IsValid = false;
            }

            if (publishSchedule.RecurrenceType == RecurrenceType.Hourly && publishSchedule.HoursToNextPublish == 0)
            {
                result.ValidationErrors.Add("Please, enter a valid, whole number value in 'Hour(s)' field.");
                result.IsValid = false;
            }

            return(result);
        }
        /// <summary>
        /// Handles item publish.
        /// </summary>
        /// <param name="publishSchedule">A <see cref="ScheduledPublish.Models.PublishSchedule"/> schedule to publish.</param>
        /// <returns>A <see cref="T:Sitecore.Handle"/> publish handle.</returns>
        private static Handle PublishItem(PublishSchedule publishSchedule)
        {
            if (publishSchedule.ItemToPublish == null)
            {
                Log.Error("Scheduled Publish: Scheduled Publish Task didn't execute because PublishSchedule.ItemToPublish is null", new object());
                return(null);
            }

            Handle handle = null;

            try
            {
                if (publishSchedule.Unpublish)
                {
                    using (new SecurityDisabler())
                    {
                        publishSchedule.ItemToPublish.Editing.BeginEdit();
                        publishSchedule.ItemToPublish.Publishing.NeverPublish = true;
                        publishSchedule.ItemToPublish.Editing.AcceptChanges();
                        publishSchedule.ItemToPublish.Editing.EndEdit();
                    }
                }

                handle = PublishManager.PublishItem(
                    publishSchedule.ItemToPublish,
                    publishSchedule.TargetDatabases.ToArray(),
                    publishSchedule.TargetLanguages != null ?
                    publishSchedule.TargetLanguages.ToArray() :
                    publishSchedule.ItemToPublish.Languages.ToArray(),
                    publishSchedule.PublishChildren,
                    publishSchedule.PublishMode == PublishMode.Smart);

                WaitPublish(handle);

                if (publishSchedule.Unpublish)
                {
                    using (new SecurityDisabler())
                    {
                        publishSchedule.ItemToPublish.Editing.BeginEdit();
                        publishSchedule.ItemToPublish.Publishing.NeverPublish = false;
                        publishSchedule.ItemToPublish.Editing.AcceptChanges();
                        publishSchedule.ItemToPublish.Editing.EndEdit();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(
                    string.Format("Scheduled Publish: Scheduled Publish Task failed for {0} {1} {2}",
                                  publishSchedule.ItemToPublish.Name,
                                  publishSchedule.ItemToPublish.ID,
                                  ex), new object());
            }

            return(handle);
        }
        /// <summary>
        /// Handles website publish.
        /// </summary>
        /// <param name="publishSchedule">A <see cref="ScheduledPublish.Models.PublishSchedule"/> schedule to publish.</param>
        /// <returns>A <see cref="T:Sitecore.Handle"/> publish handle.</returns>
        private static Handle PublishWebsite(PublishSchedule publishSchedule)
        {
            Handle handle = null;

            try
            {
                switch (publishSchedule.PublishMode)
                {
                case PublishMode.Smart:
                {
                    handle = PublishManager.PublishSmart(
                        publishSchedule.SourceDatabase,
                        publishSchedule.TargetDatabases.ToArray(),
                        publishSchedule.TargetLanguages.ToArray());
                    break;
                }

                case PublishMode.Full:
                {
                    handle = PublishManager.Republish(
                        publishSchedule.SourceDatabase,
                        publishSchedule.TargetDatabases.ToArray(),
                        publishSchedule.TargetLanguages.ToArray());
                    break;
                }

                case PublishMode.Incremental:
                {
                    handle = PublishManager.PublishIncremental(
                        publishSchedule.SourceDatabase,
                        publishSchedule.TargetDatabases.ToArray(),
                        publishSchedule.TargetLanguages.ToArray());
                    break;
                }

                default:
                {
                    Log.Error("Scheduled Publish: Scheduled Publish Task didn't execute because invalid PublishMode", new object());
                    break;
                }
                }

                WaitPublish(handle);
            }
            catch (Exception ex)
            {
                Log.Error(
                    string.Format("Scheduled Publish: Scheduled Publish Task failed for Website Publish in {0} Mode {1}",
                                  publishSchedule.PublishMode,
                                  ex), new object());
            }

            return(handle);
        }
Beispiel #5
0
        /// <summary>
        /// Sets 'IsPublished' field of already published schedule to 'true'
        /// </summary>
        /// <param name="publishSchedule">Publish Schedule</param>
        private void MarkAsPublished(PublishSchedule publishSchedule)
        {
            if (publishSchedule == null)
            {
                return;
            }

            publishSchedule.IsPublished = true;

            _scheduledPublishRepo.UpdatePublishSchedule(publishSchedule);
        }
        /// <summary>
        /// Handles a click on the OK button. Save the new publishing schedules
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The arguments.</param>
        protected override void OnOK(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");

            using (new LanguageSwitcher(LanguageManager.DefaultLanguage))
            {
                foreach (string key in Context.ClientPage.ClientRequest.Form.Keys)
                {
                    if (key != null && key.StartsWith("dt_", StringComparison.InvariantCulture))
                    {
                        string id = StringUtil.Mid(key, 3, 38);

                        DateTimePicker dtEditPicker = AllSchedules.FindControl("dt_" + id) as DateTimePicker;

                        Assert.IsNotNull(dtEditPicker, "dtEditPicker");

                        DateTime        dateTime        = DateUtil.IsoDateToDateTime(dtEditPicker.Value);
                        PublishSchedule publishSchedule = new PublishSchedule(_database.GetItem(new ID(id)));

                        //Scheudled time has changed
                        if (publishSchedule.PublishDate != dateTime)
                        {
                            publishSchedule.PublishDate = dateTime;

                            ValidationResult validationResult = ScheduledPublishValidator.Validate(publishSchedule);
                            if (!validationResult.IsValid)
                            {
                                SheerResponse.Alert(string.Join(Environment.NewLine, validationResult.ValidationErrors));
                                return;
                            }

                            _scheduledPublishRepo.UpdatePublishSchedule(publishSchedule);
                        }
                    }
                    else if (key != null && key.StartsWith("del_", StringComparison.InvariantCulture))
                    {
                        string   id             = StringUtil.Mid(key, 4, 38);
                        Checkbox deleteCheckbox = AllSchedules.FindControl("del_" + id) as Checkbox;

                        Assert.IsNotNull(deleteCheckbox, "deleteCheckbox");

                        bool doDelete = deleteCheckbox.Checked;
                        if (doDelete)
                        {
                            Item publishOption = _database.GetItem(new ID(id));
                            _scheduledPublishRepo.DeleteItem(publishOption);
                        }
                    }
                }
            }

            base.OnOK(sender, args);
        }
        /// <summary>
        /// Creates a <see cref="T:ScheduledPublish.Models.PublishSchedule"/> publish schedule item in Sitecore.
        /// </summary>
        /// <param name="publishSchedule">A <see cref="T:ScheduledPublish.Models.PublishSchedule"/> publish schedule to create an item for.</param>
        public void CreatePublishSchedule(PublishSchedule publishSchedule)
        {
            string action = publishSchedule.Unpublish ? Constants.UNPUBLISH_TEXT : Constants.PUBLISH_TEXT;

            try
            {
                using (new SecurityDisabler())
                {
                    TemplateItem publishOptionsTemplate = _database.GetTemplate(Constants.PUBLISH_SCHEDULE_TEMPLATE_ID);
                    string       publishOptionsName     = BuildPublishScheduleName();
                    Item         optionsFolder          = GetOrCreateFolder(publishSchedule.PublishDate);
                    Item         publishOptionsItem     = optionsFolder.Add(publishOptionsName, publishOptionsTemplate);

                    publishOptionsItem.Editing.BeginEdit();

                    publishOptionsItem[PublishSchedule.SchedulerUsernameId] = publishSchedule.SchedulerUsername;
                    publishOptionsItem[PublishSchedule.UnpublishId]         = publishSchedule.Unpublish ? "1" : string.Empty;
                    if (publishSchedule.ItemToPublish != null)
                    {
                        publishOptionsItem[PublishSchedule.ItemToPublishId] = publishSchedule.ItemToPublish.Paths.FullPath;
                    }
                    publishOptionsItem[PublishSchedule.PublishModeId]         = publishSchedule.PublishMode.ToString();
                    publishOptionsItem[PublishSchedule.PublishChildrenId]     = publishSchedule.PublishChildren ? "1" : string.Empty;
                    publishOptionsItem[PublishSchedule.PublishRelatedItemsId] = publishSchedule.PublishRelatedItems ? "1" : string.Empty;
                    publishOptionsItem[PublishSchedule.TargetLanguagesId]     =
                        string.Join("|", publishSchedule.TargetLanguages.Select(x => x.Name));
                    publishOptionsItem[PublishSchedule.SourceDatabaseId]     = publishSchedule.SourceDatabase.Name;
                    publishOptionsItem[PublishSchedule.TargetDatabasesId]    = string.Join("|", publishSchedule.TargetDatabases.Select(x => x.Name));
                    publishOptionsItem[PublishSchedule.PublishDateId]        = DateUtil.ToIsoDate(DateUtil.ToUniversalTime(publishSchedule.PublishDate));
                    publishOptionsItem[PublishSchedule.RecurrenceTypeId]     = publishSchedule.RecurrenceType.ToString();
                    publishOptionsItem[PublishSchedule.HoursToNextPublishId] =
                        publishSchedule.HoursToNextPublish.ToString();

                    publishOptionsItem.Editing.AcceptChanges();
                    publishOptionsItem.Editing.EndEdit();

                    Log.Info(
                        string.Format("Scheduled Publish: Created Publish Schedule: {0}: {1} {2} {3}",
                                      action,
                                      publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.Name : Constants.WEBSITE_PUBLISH_TEXT,
                                      publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.ID.ToString() : Constants.WEBSITE_PUBLISH_TEXT,
                                      DateTime.Now), new object());
                }
            }
            catch (Exception ex)
            {
                Log.Error(
                    string.Format("Scheduled Publish: Failed creating Publish Schedule: {0}: {1} {2} {3}",
                                  action,
                                  publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.Name : Constants.WEBSITE_PUBLISH_TEXT,
                                  publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.ID.ToString() : Constants.WEBSITE_PUBLISH_TEXT,
                                  ex), new object());
            }
        }
        public static ValidationResult Validate(PublishSchedule publishSchedule)
        {
            ValidationResult result = new ValidationResult
            {
                IsValid = true
            };

            if (publishSchedule == null)
            {
                result.ValidationErrors.Add("Null reference");
                result.IsValid = false;

                return(result);
            }

            if (!IsFutureDate(publishSchedule.PublishDate))
            {
                result.ValidationErrors.Add("Please select future date.");
                result.IsValid = false;
            }

            if (publishSchedule.TargetDatabases == null || !publishSchedule.TargetDatabases.Any())
            {
                result.ValidationErrors.Add("Please select at least one publish target.");
                result.IsValid = false;
            }

            if (publishSchedule.Unpublish)
            {
                return(result);
            }

            if (publishSchedule.TargetLanguages == null || !publishSchedule.TargetLanguages.Any())
            {
                result.ValidationErrors.Add("Please select at least one publish language.");
                result.IsValid = false;
            }

            if (publishSchedule.PublishMode == PublishMode.Unknown)
            {
                result.ValidationErrors.Add("Unknow publish mode.");
                result.IsValid = false;
            }

            if (!IsPublishableItem(publishSchedule.ItemToPublish, publishSchedule.PublishDate))
            {
                result.ValidationErrors.Add("Item is not publishable at that time.");
                result.IsValid = false;
            }

            return(result);
        }
        /// <summary>
        /// Handles a click on the OK button. Creates a task for publishing the selected item.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The arguments.</param>
        protected override void OnOK(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");

            using (new LanguageSwitcher(LanguageManager.DefaultLanguage))
            {
                PublishSchedule publishSchedule = new PublishSchedule
                {
                    ItemToPublish       = InnerItem,
                    PublishDate         = SelectedPublishDate,
                    SourceDatabase      = _database,
                    TargetDatabases     = SelectedTargets,
                    TargetLanguages     = SelectedLanguages,
                    Unpublish           = Unpublish,
                    PublishMode         = SmartPublish.Checked ? PublishMode.Smart : PublishMode.Full,
                    PublishChildren     = PublishChildren.Checked,
                    PublishRelatedItems = PublishRelatedItems.Checked,
                    SchedulerUsername   = Context.User.Name,
                    RecurrenceType      = RecurrenceType,
                    HoursToNextPublish  = HoursToNextPublishValue,
                    IsPublished         = false
                };

                if (Unpublish)
                {
                    publishSchedule.TargetLanguages = LanguageManager.GetLanguages(_database);
                }

                ValidationResult validationResult = ScheduledPublishValidator.Validate(publishSchedule);
                if (!validationResult.IsValid)
                {
                    SheerResponse.Alert(string.Join(Environment.NewLine, validationResult.ValidationErrors));
                    return;
                }

                _scheduledPublishRepo.CreatePublishSchedule(publishSchedule);
            }

            base.OnOK(sender, args);
        }
 /// <summary>
 /// Handles the publish action.
 /// </summary>
 /// <param name="publishSchedule"></param>
 /// <returns>A <see cref="T:Sitecore.Handle"/> publish handle.</returns>
 public static Handle Publish(PublishSchedule publishSchedule)
 {
     return(publishSchedule.ItemToPublish != null
         ? PublishItem(publishSchedule)
         : PublishWebsite(publishSchedule));
 }
Beispiel #11
0
        /// <summary>
        /// Modifies an existing <see cref="T:ScheduledPublish.Models.PublishSchedule"/> publish schedule item in Sitecore.
        /// </summary>
        /// <param name="publishSchedule">A <see cref="T:ScheduledPublish.Models.PublishSchedule"/> publish schedule according to which to modify the Sitecore item.</param>
        public void UpdatePublishSchedule(PublishSchedule publishSchedule)
        {
            if (publishSchedule.InnerItem == null)
            {
                Log.Error("Scheduled Publish: Scheduled Update Failed. Item is null.", new object());
                return;
            }

            string action = publishSchedule.Unpublish ? Constants.UNPUBLISH_TEXT : Constants.PUBLISH_TEXT;

            try
            {
                using (new SecurityDisabler())
                {
                    publishSchedule.InnerItem.Editing.BeginEdit();

                    publishSchedule.InnerItem[PublishSchedule.SchedulerEmailId] = publishSchedule.SchedulerEmail;
                    publishSchedule.InnerItem[PublishSchedule.UnpublishId]      = publishSchedule.Unpublish ? "1" : string.Empty;
                    if (publishSchedule.ItemToPublish != null)
                    {
                        publishSchedule.InnerItem[PublishSchedule.ItemToPublishId] = publishSchedule.ItemToPublish.Paths.FullPath;
                    }
                    publishSchedule.InnerItem[PublishSchedule.PublishModeId]         = publishSchedule.PublishMode.ToString();
                    publishSchedule.InnerItem[PublishSchedule.PublishChildrenId]     = publishSchedule.PublishChildren ? "1" : string.Empty;
                    publishSchedule.InnerItem[PublishSchedule.PublishRelatedItemsId] = publishSchedule.PublishRelatedItems ? "1" : string.Empty;
                    publishSchedule.InnerItem[PublishSchedule.TargetLanguagesId]     = string.Join("|",
                                                                                                   publishSchedule.TargetLanguages.Select(x => x.Name));
                    publishSchedule.InnerItem[PublishSchedule.SourceDatabaseId]  = publishSchedule.SourceDatabase.Name;
                    publishSchedule.InnerItem[PublishSchedule.TargetDatabasesId] = string.Join("|", publishSchedule.TargetDatabases.Select(x => x.Name));
                    publishSchedule.InnerItem[PublishSchedule.IsPublishedId]     = publishSchedule.IsPublished ? "1" : string.Empty;

                    DateTime oldPublishDate =
                        DateUtil.IsoDateToDateTime(publishSchedule.InnerItem[PublishSchedule.PublishDateId]);
                    publishSchedule.InnerItem[PublishSchedule.PublishDateId] = DateUtil.ToIsoDate(publishSchedule.PublishDate);

                    publishSchedule.InnerItem.Editing.AcceptChanges();
                    publishSchedule.InnerItem.Editing.EndEdit();

                    if (oldPublishDate != publishSchedule.PublishDate)
                    {
                        Item newFolder = GetOrCreateFolder(publishSchedule.PublishDate);
                        publishSchedule.InnerItem.MoveTo(newFolder);
                    }

                    Log.Info(
                        string.Format("Scheduled Publish: Updated Publish Schedule: {0}: {1} {2} {3}",
                                      action,
                                      publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.Name : Constants.WEBSITE_PUBLISH_TEXT,
                                      publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.ID.ToString() : Constants.WEBSITE_PUBLISH_TEXT,
                                      DateTime.Now), new object());
                }
            }
            catch (Exception ex)
            {
                Log.Error(
                    string.Format("Scheduled Publish: Failed updating Publish Schedule: {0}: {1} {2} {3}",
                                  action,
                                  publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.Name : Constants.WEBSITE_PUBLISH_TEXT,
                                  publishSchedule.ItemToPublish != null ? publishSchedule.ItemToPublish.ID.ToString() : Constants.WEBSITE_PUBLISH_TEXT,
                                  ex), new object());
            }
        }