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); } }
protected override void Execute() { using (new DataScope(DataScopeIdentifier.Administrated, CultureInfo.CreateSpecificCulture(LocaleName))) { IPage page; using (var transaction = TransactionsFacade.CreateNewScope()) { var pageUnpublishSchedule = PublishScheduleHelper.GetUnpublishSchedule(typeof(IPage), PageId.ToString(), LocaleName); Verify.IsNotNull(pageUnpublishSchedule, "Missing an unpublish page schedule record."); DataFacade.Delete(pageUnpublishSchedule); var deletePublished = false; page = DataFacade.GetData <IPage>(p => p.Id == PageId).FirstOrDefault(); var transitions = ProcessControllerFacade.GetValidTransitions(page).Keys; if (transitions.Contains(GenericPublishProcessController.Draft)) { page.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.Update(page); deletePublished = true; } else { Log.LogWarning(LogTitle, "Scheduled unpublishing of page with title '{0}' could not be done because the page is not in a unpublisheble state", page.Title); } if (deletePublished) { using (new DataScope(DataScopeIdentifier.Public)) { var deletePage = DataFacade.GetData <IPage>(p => p.Id == PageId).FirstOrDefault(); if (deletePage != null) { var metaDataSet = deletePage.GetMetaData(DataScopeIdentifier.Public).Evaluate(); DataFacade.Delete(deletePage, CascadeDeleteType.Disable); DataFacade.Delete(metaDataSet, CascadeDeleteType.Disable); Log.LogVerbose(LogTitle, "Scheduled unpublishing of page with title '{0}' is complete", deletePage.Title); } } } transaction.Complete(); } PublishControlledHelper.ReloadPageElementInConsole(page); } }
protected virtual void DeleteChildrenCategories(IPage page) { var children = page.GetChildren().Where(p => p.PageTypeId == CategoryPages.CategoryPageTypeId || p.PageTypeId == CategoryPages.CategoryLandingPageTypeId).ToArray(); foreach (var child in children) { DeleteChildrenCategories(child); } //if (!ExistInOtherLocale(GetCultures(), page)) // RemoveAllFolderAndMetaDataDefinitions(page); page.DeletePageStructure(); ProcessControllerFacade.FullDelete(page); }
protected override void Execute() { Type type = TypeManager.GetType(DataType); using (new DataScope(DataScopeIdentifier.Administrated, CultureInfo.CreateSpecificCulture(LocaleName))) { DataEntityToken dataEntityToken; using (var transaction = TransactionsFacade.CreateNewScope()) { var publishSchedule = PublishScheduleHelper.GetPublishSchedule(type, DataId, LocaleName); DataFacade.Delete(publishSchedule); var data = (IPublishControlled)DataFacade.TryGetDataByUniqueKey(type, DataId); if (data == null) { Log.LogWarning(LogTitle, $"Failed to find data of type '{type}' by id '{DataId}'."); transaction.Complete(); return; } dataEntityToken = data.GetDataEntityToken(); var transitions = ProcessControllerFacade.GetValidTransitions(data).Keys; if (transitions.Contains(GenericPublishProcessController.Published)) { data.PublicationStatus = GenericPublishProcessController.Published; DataFacade.Update(data); Log.LogVerbose(LogTitle, $"Scheduled publishing of data with label '{data.GetLabel()}' is complete"); } else { Log.LogWarning(LogTitle, $"Scheduled publishing of data with label '{data.GetLabel()}' could not be done because the data is not in a publisheble state"); } transaction.Complete(); } EntityTokenCacheFacade.ClearCache(dataEntityToken); PublishControlledHelper.ReloadDataElementInConsole(dataEntityToken); } }
/// <summary> /// Deletes the versions of the given page in its current localization scope. /// </summary> public static void DeletePage(IPage page) { using (var transactionScope = TransactionsFacade.CreateNewScope()) { using (var conn = new DataConnection()) { conn.DisableServices(); var cultures = DataLocalizationFacade.ActiveLocalizationCultures.ToList(); cultures.Remove(page.DataSourceId.LocaleScope); List <IPage> pagesToDelete = page.GetSubChildren().ToList(); foreach (IPage childPage in pagesToDelete) { if (!ExistInOtherLocale(cultures, childPage)) { RemoveAllFolderAndMetaDataDefinitions(childPage); } childPage.DeletePageStructure(false); ProcessControllerFacade.FullDelete(childPage); } if (!ExistInOtherLocale(cultures, page)) { RemoveAllFolderAndMetaDataDefinitions(page); } page.DeletePageStructure(); Guid pageId = page.Id; var pageVersions = DataFacade.GetData <IPage>(p => p.Id == pageId).ToList(); ProcessControllerFacade.FullDelete(pageVersions); } transactionScope.Complete(); } }
private void finalizeCodeActivity_DeteleData_ExecuteCode(object sender, System.EventArgs e) { DeleteTreeRefresher deleteTreeRefresher = this.CreateDeleteTreeRefresher(this.EntityToken); IData data = ((DataEntityToken)this.EntityToken).Data; if (DataFacade.WillDeleteSucceed(data)) { ProcessControllerFacade.FullDelete(data); deleteTreeRefresher.PostRefreshMesseges(true); } else { this.ShowMessage( DialogType.Error, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "TreeGenericDelete.CascadeDeleteErrorTitle"), StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "TreeGenericDelete.CascadeDeleteErrorMessage") ); } }
public void DeleteTemplate() { IFile file = IFileServices.GetFile <IPageTemplateFile>(_pageTemplate.PageTemplateFilePath); ProcessControllerFacade.FullDelete(_pageTemplate); if (file != null && file is FileSystemFileBase) { FileSystemFileBase baseFile = file as FileSystemFileBase; C1File.Delete(baseFile.SystemPath); try { C1File.Delete(baseFile.SystemPath); } catch { LoggingService.LogWarning(LogTitle, "Failed to delete page template file: '{0}'".FormatWith(baseFile.SystemPath)); } } }
protected override void Execute() { using (new DataScope(DataScopeIdentifier.Administrated, CultureInfo.CreateSpecificCulture(LocaleName))) { IPage page; using (var transaction = TransactionsFacade.CreateNewScope()) { var pagePublishSchedule = PublishScheduleHelper.GetPublishSchedule(typeof(IPage), PageId.ToString(), LocaleName); DataFacade.Delete(pagePublishSchedule); page = DataFacade.GetData <IPage>(p => p.Id == PageId).FirstOrDefault(); Verify.IsNotNull(page, "The page with the id {0} does not exist", PageId); var transitions = ProcessControllerFacade.GetValidTransitions(page).Keys; if (transitions.Contains(GenericPublishProcessController.Published)) { page.PublicationStatus = GenericPublishProcessController.Published; DataFacade.Update(page); Log.LogVerbose(LogTitle, "Scheduled publishing of page with title '{0}' is complete", page.Title); } else { Log.LogWarning(LogTitle, "Scheduled publishing of page with title '{0}' could not be done because the page is not in a publisheble state", page.Title); } transaction.Complete(); } PublishControlledHelper.ReloadPageElementInConsole(page); } }
private static void DoInitialize() { int startTime = Environment.TickCount; Guid installationId = InstallationInformationFacade.InstallationId; Log.LogVerbose(LogTitle, "Initializing the system core - installation id = " + installationId); using (new LogExecutionTime(LogTitle, "Initialization of the static data types")) { DataProviderRegistry.InitializeDataTypes(); } using (new LogExecutionTime(LogTitle, "Auto update of static data types")) { bool typesUpdated = AutoUpdateStaticDataTypes(); if (typesUpdated) { using (new LogExecutionTime(LogTitle, "Reinitialization of the static data types")) { SqlTableInformationStore.Flush(); DataProviderRegistry.Flush(); DataProviderPluginFacade.Flush(); DataProviderRegistry.InitializeDataTypes(); } CodeGenerationManager.GenerateCompositeGeneratedAssembly(true); } } using (new LogExecutionTime(LogTitle, "Ensure data stores")) { bool dataStoresCreated = DataStoreExistenceVerifier.EnsureDataStores(); if (dataStoresCreated) { Log.LogVerbose(LogTitle, "Initialization of the system was halted, performing a flush"); _initializing = false; GlobalEventSystemFacade.FlushTheSystem(); return; } } using (new LogExecutionTime(LogTitle, "Initializing data process controllers")) { ProcessControllerFacade.Initialize_PostDataTypes(); } using (new LogExecutionTime(LogTitle, "Initializing data type references")) { DataReferenceRegistry.Initialize_PostDataTypes(); } using (new LogExecutionTime(LogTitle, "Initializing data type associations")) { DataAssociationRegistry.Initialize_PostDataTypes(); } using (new LogExecutionTime(LogTitle, "Initializing internal urls")) { InternalUrls.Initialize_PostDataTypes(); } using (new LogExecutionTime(LogTitle, "Initializing functions")) { MetaFunctionProviderRegistry.Initialize_PostDataTypes(); } Log.LogVerbose(LogTitle, "Starting initialization of administrative secondaries"); if (SystemSetupFacade.IsSystemFirstTimeInitialized && !SystemSetupFacade.SetupIsRunning) { using (new LogExecutionTime(LogTitle, "Initializing workflow runtime")) { WorkflowFacade.EnsureInitialization(); } } if (!RuntimeInformation.IsUnittest) { using (new LogExecutionTime(LogTitle, "Initializing flow system")) { FlowControllerFacade.Initialize(); } using (new LogExecutionTime(LogTitle, "Initializing console system")) { ConsoleFacade.Initialize(); } } using (new LogExecutionTime(LogTitle, "Auto installing packages")) { DoAutoInstallPackages(); } using (new LogExecutionTime(LogTitle, "Loading element providers")) { ElementProviderLoader.LoadAllProviders(); } int executionTime = Environment.TickCount - startTime; Log.LogVerbose(LogTitle, "Done initializing of the system core. ({0} ms)".FormatWith(executionTime)); }
private void codeActivity2_ExecuteCode(object sender, EventArgs e) { bool hasSubPages = this.GetBinding <bool>("HasSubPages"); DataEntityToken dataEntityToken = (DataEntityToken)this.EntityToken; IPage selectedPage = (IPage)dataEntityToken.Data; using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope()) { if (DataFacade.WillDeleteSucceed <IPage>(selectedPage) == false) { this.ShowMessage( DialogType.Error, StringResourceSystemFacade.GetString("Composite.Plugins.PageElementProvider", "DeletePageWorkflow.CascadeDeleteErrorTitle"), StringResourceSystemFacade.GetString("Composite.Plugins.PageElementProvider", "DeletePageWorkflow.CascadeDeleteErrorMessage") ); return; } List <CultureInfo> cultures = DataLocalizationFacade.ActiveLocalizationCultures.ToList(); cultures.Remove(selectedPage.DataSourceId.LocaleScope); if (hasSubPages) { List <IPage> pagesToDelete = selectedPage.GetSubChildren().ToList(); foreach (IPage page in pagesToDelete) { if (DataFacade.WillDeleteSucceed <IPage>(page) == false) { this.ShowMessage( DialogType.Error, StringResourceSystemFacade.GetString("Composite.Plugins.PageElementProvider", "DeletePageWorkflow.CascadeDeleteErrorTitle"), StringResourceSystemFacade.GetString("Composite.Plugins.PageElementProvider", "DeletePageWorkflow.CascadeDeleteErrorMessage") ); return; } } foreach (IPage page in pagesToDelete) { if (ExistInOtherLocale(cultures, page) == false) { RemoveAllFolderAndMetaDataDefinitions(page); } page.DeletePageStructure(); ProcessControllerFacade.FullDelete(page); } } if (ExistInOtherLocale(cultures, selectedPage) == false) { RemoveAllFolderAndMetaDataDefinitions(selectedPage); } ParentTreeRefresher parentTreeRefresher = this.CreateParentTreeRefresher(); parentTreeRefresher.PostRefreshMesseges(selectedPage.GetDataEntityToken(), 2); selectedPage.DeletePageStructure(); ProcessControllerFacade.FullDelete(selectedPage); transactionScope.Complete(); } }
private static void AddBuildinActions(string providerName, string manageUserPermissionsOnBranchLabel, string manageUserPermissionsItemLabel, string manageUserPermissionsToolTip, string relationshipGraphLabel, string relationshipGraphToolTip, string relationshipOrientedGraphLabel, string relationshipOrientedGraphToolTip, string showElementInformationLabel, string showElementInformationToolTip, Element element) { if ((element.ElementExternalActionAdding & ElementExternalActionAdding.AllowGlobal) == ElementExternalActionAdding.AllowGlobal) { element.AddAction(new ElementAction(new ActionHandle(new RelationshipGraphActionToken("ShowGraph"))) { VisualData = new ActionVisualizedData { Label = relationshipGraphLabel, ToolTip = relationshipGraphToolTip, Icon = Composite.Core.ResourceSystem.Icons.CommonElementIcons.Nodes, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.DeveloperMode, IsInFolder = false, IsInToolbar = false, ActionGroup = AppendedActionGroup } } }); element.AddAction(new ElementAction(new ActionHandle(new RelationshipGraphActionToken("ShowOrientedGraph"))) { VisualData = new ActionVisualizedData { Label = relationshipOrientedGraphLabel, ToolTip = relationshipOrientedGraphToolTip, Icon = Composite.Core.ResourceSystem.Icons.CommonElementIcons.Nodes, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.DeveloperMode, IsInFolder = false, IsInToolbar = false, ActionGroup = AppendedActionGroup } } }); element.AddAction(new ElementAction(new ActionHandle(new ShowElementInformationActionToken())) { VisualData = new ActionVisualizedData { Label = showElementInformationLabel, ToolTip = showElementInformationToolTip, Icon = Composite.Core.ResourceSystem.Icons.CommonElementIcons.Search, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.DeveloperMode, IsInFolder = false, IsInToolbar = false, ActionGroup = AppendedActionGroup } } }); //element.AddAction(new ElementAction(new ActionHandle(new SearchActionToken(providerName))) //{ // VisualData = new ActionVisualizedData // { // Label = StringResourceSystemFacade.GetString("Composite.Management", "RelationshipGraphActionExecutor.Search"), // ToolTip = StringResourceSystemFacade.GetString("Composite.Management", "RelationshipGraphActionExecutor.SearchToolTip"), // Icon = Composite.Core.ResourceSystem.Icons.CommonCommandIcons.Search, // Disabled = false, // ActionLocation = new ActionLocation // { // ActionType = ActionType.Other, // IsInFolder = false, // IsInToolbar = false, // ActionGroup = AppendedActionGroup // } // } //}); if (RuntimeInformation.IsDebugBuild) { } } if ((element.ElementExternalActionAdding & ElementExternalActionAdding.AllowManageUserPermissions) == ElementExternalActionAdding.AllowManageUserPermissions) { if (!element.Actions.Any(f => f.ActionHandle.ActionToken is ManageUserPermissionsActionToken)) // Fixing problem with the buggy virtual element provider { element.AddAction(new ElementAction(new ActionHandle(new ManageUserPermissionsActionToken())) { VisualData = new ActionVisualizedData { Label = (element.VisualData.HasChildren ? manageUserPermissionsOnBranchLabel : manageUserPermissionsItemLabel), ToolTip = manageUserPermissionsToolTip, Icon = ManageSecurityIcon, Disabled = false, ActionLocation = new ActionLocation { ActionType = ActionType.Other, IsInFolder = false, IsInToolbar = false, ActionGroup = AppendedActionGroup } } }); } } if ((element.ElementExternalActionAdding & ElementExternalActionAdding.AllowProcessController) == ElementExternalActionAdding.AllowProcessController) { if (element.ElementHandle.EntityToken is DataEntityToken) { DataEntityToken token = (DataEntityToken)element.ElementHandle.EntityToken; Type elementProviderType; if (ElementProviderRegistry.ElementProviderNames.Contains(providerName)) { elementProviderType = ElementProviderRegistry.GetElementProviderType(providerName); } else { elementProviderType = ElementAttachingProviderRegistry.GetElementProviderType(providerName); } List <ElementAction> actions = ProcessControllerFacade.GetActions(token.Data, elementProviderType); foreach (ElementAction action in actions) { element.AddAction(action); } } } }
private void saveCodeActivity_ExecuteCode(object sender, EventArgs e) { var updateTreeRefresher = CreateUpdateTreeRefresher(EntityToken); var selectedPage = GetBinding <IPage>("SelectedPage"); var originalPage = DataFacade.GetData <IPage>(f => f.Id == selectedPage.Id && f.VersionId == selectedPage.VersionId).SingleOrDefault(); var viewLabelUpdated = originalPage == null || selectedPage.MenuTitle != originalPage.MenuTitle || selectedPage.Title != originalPage.Title; var treeviewRequiresRefreshing = false; var dataToAdd = new Dictionary <string, IData>(); var dataToUpdate = new Dictionary <string, IData>(); var dataValidated = true; try { using (var transactionScope = TransactionsFacade.CreateNewScope()) { dataValidated = PrepareAddUpdateMetaData(selectedPage, dataToAdd, dataToUpdate); if (dataValidated) { if (selectedPage.PageTypeId != originalPage.PageTypeId) { // Adding metadata fields var oldPageMetaDataDefinitions = originalPage.GetAllowedMetaDataDefinitions().Except(selectedPage.GetAllowedMetaDataDefinitions(), new PageMetaDataDefinitionEqualityComparer()); foreach (var pageMetaDataDefinition in oldPageMetaDataDefinitions) { var oldMetaData = selectedPage.GetMetaData(pageMetaDataDefinition.Name, pageMetaDataDefinition.MetaDataTypeId); if (oldMetaData != null) { ProcessControllerFacade.FullDelete(oldMetaData); } } bool newDataAdded = PageServices.AddPageTypePageFoldersAndApplications(selectedPage); if (newDataAdded) { treeviewRequiresRefreshing = true; } } foreach (var data in dataToAdd.Values) { DataFacade.AddNew(data); } foreach (var data in dataToUpdate.Values) { var publishControlled = data as IPublishControlled; publishControlled.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.Update(data); } treeviewRequiresRefreshing |= (originalPage.Title != selectedPage.Title) || (originalPage.Description != selectedPage.Description) || (originalPage.PublicationStatus != selectedPage.PublicationStatus); // NOTE: updating originalPage object, in order to make XML & SQL provider work in the same way originalPage.TemplateId = selectedPage.TemplateId; originalPage.PageTypeId = selectedPage.PageTypeId; originalPage.Title = selectedPage.Title; originalPage.MenuTitle = selectedPage.MenuTitle; originalPage.UrlTitle = selectedPage.UrlTitle; originalPage.FriendlyUrl = selectedPage.FriendlyUrl; originalPage.Description = selectedPage.Description; originalPage.PublicationStatus = selectedPage.PublicationStatus; originalPage.SourceCultureName = selectedPage.SourceCultureName; DataFacade.Update(originalPage); var contentDictionary = GetBinding <Dictionary <string, string> >("NamedXhtmlFragments"); var existingContents = DataFacade.GetData <IPagePlaceholderContent>(f => f.PageId == selectedPage.Id && f.VersionId == selectedPage.VersionId).ToList(); foreach (var existingContent in existingContents) { if (contentDictionary.ContainsKey(existingContent.PlaceHolderId)) { existingContent.Content = contentDictionary[existingContent.PlaceHolderId]; existingContent.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.Update(existingContent); } else { DataFacade.Delete(existingContent); } } foreach (var contentDictionaryElement in contentDictionary.Where(f => existingContents.Any(existing => existing.PlaceHolderId == f.Key) == false)) { var newContent = DataFacade.BuildNew <IPagePlaceholderContent>(); newContent.PageId = selectedPage.Id; newContent.VersionId = selectedPage.VersionId; newContent.PlaceHolderId = contentDictionaryElement.Key; newContent.Content = contentDictionaryElement.Value; newContent.SourceCultureName = UserSettings.ActiveLocaleCultureInfo.Name; newContent.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.AddNew(newContent); } } transactionScope.Complete(); } if (_doPublish) { var actionToken = new GenericPublishProcessController.PublishActionToken(); var serviceContainer = WorkflowFacade.GetFlowControllerServicesContainer(WorkflowEnvironment.WorkflowInstanceId); ActionExecutorFacade.Execute(EntityToken, actionToken, serviceContainer); treeviewRequiresRefreshing = false; } if (treeviewRequiresRefreshing) { updateTreeRefresher.PostRefreshMesseges(selectedPage.GetDataEntityToken()); } UpdateBinding("OldPublicationStatus", selectedPage.PublicationStatus); if (viewLabelUpdated) { RerenderView(); } } catch (Exception ex) { var mostSpecificException = ex; while (mostSpecificException.InnerException != null) { mostSpecificException = mostSpecificException.InnerException; } ShowMessage(DialogType.Error, "Save failed", $"Save failed: {mostSpecificException.Message}"); Log.LogError("Page save", ex); } finally { SetSaveStatus(dataValidated); } }
private void saveCodeActivity_ExecuteCode(object sender, EventArgs e) { var updateTreeRefresher = CreateUpdateTreeRefresher(EntityToken); var selectedPage = GetBinding <IPage>("SelectedPage"); var originalPage = DataFacade.GetData <IPage>(f => f.Id == selectedPage.Id).SingleOrDefault(); var viewLabelUpdated = originalPage == null || selectedPage.MenuTitle != originalPage.MenuTitle || selectedPage.Title != originalPage.Title; var treeviewRequiresRefreshing = false; var dataToAdd = new Dictionary <string, IData>(); var dataToUpdate = new Dictionary <string, IData>(); var dataValidated = true; WorkflowInstance publishWorkflowInstance = null; WorkflowInstance unpublishWorkflowInstance = null; try { using (var transactionScope = TransactionsFacade.CreateNewScope()) { dataValidated = PrepareAddUpdateMetaData(selectedPage, dataToAdd, dataToUpdate); if (dataValidated) { PublishControlledHelper.HandlePublishUnpublishWorkflows(selectedPage, UserSettings.ActiveLocaleCultureInfo.Name, PublishDate, UnpublishDate, ref publishWorkflowInstance, ref unpublishWorkflowInstance); if (selectedPage.PageTypeId != originalPage.PageTypeId) { // Adding metadata fields var oldPageMetaDataDefinitions = originalPage.GetAllowedMetaDataDefinitions().Except(selectedPage.GetAllowedMetaDataDefinitions(), new PageMetaDataDefinitionEqualityComparer()); foreach (var pageMetaDataDefinition in oldPageMetaDataDefinitions) { var oldMetaData = selectedPage.GetMetaData(pageMetaDataDefinition.Name, pageMetaDataDefinition.MetaDataTypeId); if (oldMetaData != null) { ProcessControllerFacade.FullDelete(oldMetaData); } } // Adding page folders var pageTypeDataFolderTypeLinks = DataFacade.GetData <IPageTypeDataFolderTypeLink>(). Where(f => f.PageTypeId == selectedPage.PageTypeId). Evaluate(). RemoveDeadLinks(); foreach (var pageTypeDataFolderTypeLink in pageTypeDataFolderTypeLinks) { if (selectedPage.GetFolderDefinitionId(pageTypeDataFolderTypeLink.DataTypeId) != Guid.Empty) { continue; } selectedPage.AddFolderDefinition(pageTypeDataFolderTypeLink.DataTypeId); treeviewRequiresRefreshing = true; } // Adding applications var pageTypeTreeLinks = DataFacade.GetData <IPageTypeTreeLink>(). Where(f => f.PageTypeId == selectedPage.PageTypeId). Evaluate(). RemoveDeadLinks(); foreach (var pageTypeTreeLink in pageTypeTreeLinks) { var tree = TreeFacade.GetTree(pageTypeTreeLink.TreeId); if (tree.HasAttachmentPoints(selectedPage.GetDataEntityToken())) { continue; } TreeFacade.AddPersistedAttachmentPoint(pageTypeTreeLink.TreeId, typeof(IPage), selectedPage.Id); treeviewRequiresRefreshing = true; } } foreach (var data in dataToAdd.Values) { DataFacade.AddNew(data); } foreach (var data in dataToUpdate.Values) { var publishControlled = data as IPublishControlled; publishControlled.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.Update(data); } treeviewRequiresRefreshing |= (originalPage.Title != selectedPage.Title) || (originalPage.Description != selectedPage.Description) || (originalPage.PublicationStatus != selectedPage.PublicationStatus); // NOTE: updating originalPage object, in order to make XML & SQL provider work in the same way originalPage.TemplateId = selectedPage.TemplateId; originalPage.PageTypeId = selectedPage.PageTypeId; originalPage.Title = selectedPage.Title; originalPage.MenuTitle = selectedPage.MenuTitle; originalPage.UrlTitle = selectedPage.UrlTitle; originalPage.FriendlyUrl = selectedPage.FriendlyUrl; originalPage.Description = selectedPage.Description; originalPage.PublicationStatus = selectedPage.PublicationStatus; originalPage.SourceCultureName = selectedPage.SourceCultureName; DataFacade.Update(originalPage); var contentDictionary = GetBinding <Dictionary <string, string> >("NamedXhtmlFragments"); var existingContents = DataFacade.GetData <IPagePlaceholderContent>(f => f.PageId == selectedPage.Id).ToList(); foreach (var existingContent in existingContents) { if (contentDictionary.ContainsKey(existingContent.PlaceHolderId)) { existingContent.Content = contentDictionary[existingContent.PlaceHolderId]; existingContent.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.Update(existingContent); } else { DataFacade.Delete(existingContent); } } foreach (var contentDictionaryElement in contentDictionary.Where(f => existingContents.Any(existing => existing.PlaceHolderId == f.Key) == false)) { var newContent = DataFacade.BuildNew <IPagePlaceholderContent>(); newContent.PageId = selectedPage.Id; newContent.PlaceHolderId = contentDictionaryElement.Key; newContent.Content = contentDictionaryElement.Value; newContent.SourceCultureName = UserSettings.ActiveLocaleCultureInfo.Name; newContent.PublicationStatus = GenericPublishProcessController.Draft; DataFacade.AddNew(newContent); } } transactionScope.Complete(); } if (publishWorkflowInstance != null) { publishWorkflowInstance.Start(); WorkflowFacade.RunWorkflow(publishWorkflowInstance); } if (unpublishWorkflowInstance != null) { unpublishWorkflowInstance.Start(); WorkflowFacade.RunWorkflow(unpublishWorkflowInstance); } if (_doPublish) { if (publishWorkflowInstance == null || PublishDate < DateTime.Now) { var actionToken = new GenericPublishProcessController.PublishActionToken(); var serviceContainer = WorkflowFacade.GetFlowControllerServicesContainer(WorkflowEnvironment.WorkflowInstanceId); ActionExecutorFacade.Execute(EntityToken, actionToken, serviceContainer); treeviewRequiresRefreshing = false; } else { var title = StringResourceSystemFacade.GetString("Composite.Management", "Website.Forms.Administrative.EditPage.PublishDatePreventPublishTitle"); var message = StringResourceSystemFacade.GetString("Composite.Management", "Website.Forms.Administrative.EditPage.PublishDatePreventPublish"); ShowMessage(DialogType.Warning, title, message); } } if (treeviewRequiresRefreshing) { updateTreeRefresher.PostRefreshMesseges(selectedPage.GetDataEntityToken()); } UpdateBinding("OldPublicationStatus", selectedPage.PublicationStatus); if (viewLabelUpdated) { RerenderView(); } } catch (Exception ex) { var mostSpecificException = ex; while (mostSpecificException.InnerException != null) { mostSpecificException = mostSpecificException.InnerException; } ShowMessage(DialogType.Error, "Save failed", string.Format("Save failed: {0}", mostSpecificException.Message)); Log.LogError("Page save", ex); } finally { SetSaveStatus(dataValidated); } }