/CompositeC1/Composite.Workflows/C1Console/Scheduling/DataUnpublishSchedulerWorkflow.cs
C# | 104 lines | 65 code | 21 blank | 18 comment | 4 complexity | 280b49ec6282bc0828068ff4c14ddc00 MD5 | raw file
Possible License(s): LGPL-2.1
- /*
- * The contents of this web application are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this web application except in compliance with
- * the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/.
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the License.
- *
- * The Original Code is owned by and the Initial Developer of the Original Code is
- * Composite A/S (Danish business reg.no. 21744409). All Rights Reserved
- *
- * Section 11 of the License is EXPRESSLY amended to include a provision stating
- * that any dispute, including but not limited to disputes related to the enforcement
- * of the License, to which Composite A/S as owner of the Original Code, as Initial
- * Developer or in any other role, becomes a part to shall be governed by Danish law
- * and be initiated before the Copenhagen City Court ("K�benhavns Byret")
- */
-
- using System.ComponentModel;
- using System.Globalization;
- using Composite.C1Console.Security;
- using Composite.Core;
- using Composite.Core.Types;
- using Composite.Data;
- using Composite.Data.ProcessControlled;
- using Composite.Data.ProcessControlled.ProcessControllers.GenericPublishProcessController;
- using Composite.Data.PublishScheduling;
- using Composite.Data.Transactions;
-
-
- namespace Composite.C1Console.Scheduling
- {
- public sealed class DataUnpublishSchedulerWorkflow : BaseSchedulerWorkflow
- {
- private static readonly string LogTitle = typeof(DataUnpublishSchedulerWorkflow).Name;
-
- [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string DataType { get; set; }
-
- [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public string DataId { get; set; }
-
- protected override void Execute()
- {
- var type = TypeManager.GetType(DataType);
-
- using (new DataScope(DataScopeIdentifier.Administrated, CultureInfo.CreateSpecificCulture(LocaleName)))
- {
- DataEntityToken dataEntityToken;
-
- using (var transaction = TransactionsFacade.CreateNewScope())
- {
- var unpublishSchedule = PublishScheduleHelper.GetUnpublishSchedule(type, DataId, LocaleName);
- Verify.IsNotNull(unpublishSchedule, "Missing an unpublish data schedule record");
-
- DataFacade.Delete(unpublishSchedule);
-
- var deletePublished = false;
-
- var data = (IPublishControlled)DataFacade.GetDataByUniqueKey(type, DataId);
- Verify.IsNotNull(data, "The data with the id {0} does not exist", DataId);
-
- dataEntityToken = data.GetDataEntityToken();
-
- var transitions = ProcessControllerFacade.GetValidTransitions(data).Keys;
-
- if (transitions.Contains(GenericPublishProcessController.Draft))
- {
- data.PublicationStatus = GenericPublishProcessController.Draft;
-
- DataFacade.Update(data);
-
- deletePublished = true;
- }
- else
- {
- Log.LogWarning(LogTitle, "Scheduled unpublishing of data with label '{0}' could not be done because the data is not in a unpublisheble state", data.GetLabel());
- }
-
-
- if (deletePublished)
- {
- using (new DataScope(DataScopeIdentifier.Public))
- {
- var deletedData = (IPublishControlled)DataFacade.GetDataByUniqueKey(type, DataId);
- if (deletedData != null)
- {
- DataFacade.Delete(deletedData, CascadeDeleteType.Disable);
-
- Log.LogVerbose(LogTitle, "Scheduled unpublishing of data with label '{0}' is complete", deletedData.GetLabel());
- }
- }
- }
-
- transaction.Complete();
- }
-
- EntityTokenCacheFacade.ClearCache(dataEntityToken);
- PublishControlledHelper.ReloadDataElementInConsole(dataEntityToken);
- }
- }
- }
- }