/// <exclude />
        public static void AddNewMetaDataToExistingPage(this IPage page, string metaDataDefinitionName, Type metaDataType, IData newDataTemplate)
        {
            IData data = page.GetMetaData(metaDataDefinitionName, metaDataType);

            if (data != null)
            {
                return;
            }

            IPublishControlled newData = DataFacade.BuildNew(metaDataType) as IPublishControlled;

            newDataTemplate.FullCopyChangedTo(newData);
            newData.PublicationStatus = GenericPublishProcessController.Draft;

            PageMetaDataFacade.AssignMetaDataSpecificValues(newData, metaDataDefinitionName, page);

            ILocalizedControlled localizedData = newData as ILocalizedControlled;

            if (localizedData != null)
            {
                localizedData.SourceCultureName = page.SourceCultureName;
            }

            newData = (IPublishControlled)DataFacade.AddNew((IData)newData); // Cast is needed for the DataFacade to work correctly

            if (newData.PublicationStatus != page.PublicationStatus)
            {
                newData.PublicationStatus = page.PublicationStatus;
                DataFacade.Update(newData);
            }
        }
        private static void AddNewMetaDataToExistingPages(IEnumerable <IPage> affectedPages, string metaDataDefinitionName, Type metaDataType, IData newDataTemplate)
        {
            foreach (IPage affectedPage in affectedPages)
            {
                IData data = affectedPage.GetMetaData(metaDataDefinitionName, metaDataType);
                if (data != null)
                {
                    continue;
                }

                IPublishControlled newData = DataFacade.BuildNew(metaDataType) as IPublishControlled;
                newDataTemplate.FullCopyChangedTo(newData);
                newData.PublicationStatus = GenericPublishProcessController.Draft;
                PageMetaDataFacade.AssignMetaDataSpecificValues(newData, metaDataDefinitionName, affectedPage);

                ILocalizedControlled localizedData = newData as ILocalizedControlled;
                if (localizedData != null)
                {
                    localizedData.SourceCultureName = UserSettings.ActiveLocaleCultureInfo.Name;
                }

                newData = DataFacade.AddNew((IData)newData) as IPublishControlled;

                if (newData.PublicationStatus != affectedPage.PublicationStatus)
                {
                    newData.PublicationStatus = affectedPage.PublicationStatus;
                    DataFacade.Update(newData);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Checks whether the specified data item can be translated.
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static bool IsTranslatable(this IData data)
        {
            IPublishControlled publishControlled = data as IPublishControlled;

            if (!GlobalSettingsFacade.OnlyTranslateWhenApproved || publishControlled == null)
            {
                return(true);
            }

            switch (publishControlled.PublicationStatus)
            {
            case GenericPublishProcessController.Draft:
            case GenericPublishProcessController.AwaitingApproval:
                using (new DataScope(data.DataSourceId.LocaleScope))
                {
                    return(DataFacade.GetDataFromOtherScope(data, DataScopeIdentifier.Public).Any());
                }

            case GenericPublishProcessController.AwaitingPublication:
            case GenericPublishProcessController.Published:
                return(true);

            default:
                throw new InvalidOperationException("Unexpected publication status: " + (publishControlled.PublicationStatus ?? "(null)"));
            }
        }
        private static void OnAfterDataUpdated(object sender, DataEventArgs dataEventArgs)
        {
            IPublishControlled publishControlled = dataEventArgs.Data as IPublishControlled;

            if (publishControlled == null)
            {
                return;
            }

            IPage page = dataEventArgs.Data as IPage;

            if (page == null)
            {
                return;
            }

            var metaDataToBeUpdated = page.GetMetaData().Evaluate();

            foreach (IData data in metaDataToBeUpdated)
            {
                IPublishControlled pc = data as IPublishControlled;

                if (pc.PublicationStatus != publishControlled.PublicationStatus)
                {
                    pc.PublicationStatus = publishControlled.PublicationStatus;

                    // THIS UPDATE WAS ALWAYS EXECUTED - OUTSIDE THE versionControlled CHECK - WAS THIS NEEDED?
                    DataFacade.Update(data, false, false, false);
                }
            }
        }
Ejemplo n.º 5
0
        private void saveCodeActivity_UpdateData_ExecuteCode(object sender, EventArgs e)
        {
            UpdateTreeRefresher updateTreeRefresher = this.CreateUpdateTreeRefresher(this.EntityToken);

            IData data = ((DataEntityToken)this.EntityToken).Data;

            bool isValid = ValidateBindings();

            if (!BindAndValidate(this.FormsHelper, data))
            {
                isValid = false;
            }

            var fieldsWithBrokenReferences = new List <string>();

            if (!data.TryValidateForeignKeyIntegrity(fieldsWithBrokenReferences))
            {
                isValid = false;

                foreach (string fieldName in fieldsWithBrokenReferences)
                {
                    ShowFieldMessage(fieldName, LocalizationFiles.Composite_Management.Validation_BrokenReference);
                }
            }

            if (isValid)
            {
                if (data is IPublishControlled)
                {
                    IPublishControlled publishControlledData = (IPublishControlled)data;
                    if (publishControlledData.PublicationStatus == GenericPublishProcessController.Published)
                    {
                        publishControlledData.PublicationStatus = GenericPublishProcessController.Draft;
                    }
                }

                DataFacade.Update(data);

                EntityTokenCacheFacade.ClearCache(EntityToken);

                updateTreeRefresher.PostRefreshMesseges(this.EntityToken);

                PublishControlledHelper.PublishIfNeeded(data, _doPublish, Bindings, ShowMessage);
            }

            SetSaveStatus(isValid);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Returns the data item either from "Administrated" or from "Public" scope depending on, which has to be used as translation source.
        /// If onlyTranslateWhenApproved="true" or publication status is not "awaiting publishion" - item from the public scope will be returned.
        /// </summary>
        /// <param name="dataFromAdministratedScope">The data item</param>
        /// <returns></returns>
        public static T GetTranslationSource <T>(this T dataFromAdministratedScope) where T : class, IData
        {
            IPublishControlled publishControlled = dataFromAdministratedScope as IPublishControlled;

            if (!GlobalSettingsFacade.OnlyTranslateWhenApproved ||
                publishControlled == null ||
                publishControlled.PublicationStatus == GenericPublishProcessController.AwaitingPublication)
            {
                return(dataFromAdministratedScope);
            }

            using (new DataScope(dataFromAdministratedScope.DataSourceId.LocaleScope))
            {
                return((DataFacade.GetDataFromOtherScope(dataFromAdministratedScope as IData, DataScopeIdentifier.Public)
                        .FirstOrDefault()
                        ?? dataFromAdministratedScope) as T);
            }
        }
Ejemplo n.º 7
0
        private void editCodeActivity_DisplayForm_ExecuteCode(object sender, EventArgs e)
        {
            IData data = ((DataEntityToken)this.EntityToken).Data;

            if (!PermissionsFacade.GetPermissionsForCurrentUser(EntityToken).Contains(PermissionType.Publish) ||
                !(data is IPublishControlled))
            {
                FormData formData = WorkflowFacade.GetFormData(InstanceId, true);

                if (formData.ExcludedEvents == null)
                {
                    formData.ExcludedEvents = new List <string>();
                }

                formData.ExcludedEvents.Add("SaveAndPublish");
            }

            if (data is IPublishControlled)
            {
                IPublishControlled publishControlledData = (IPublishControlled)data;
                if (publishControlledData.PublicationStatus == GenericPublishProcessController.Published)
                {
                    publishControlledData.PublicationStatus = GenericPublishProcessController.Draft;
                }
            }

            this.FormsHelper.UpdateWithBindings(data, this.Bindings);
            this.FormsHelper.LayoutLabel = data.GetLabel(true);

            this.DeliverFormData(
                this.TypeName,
                StandardUiContainerTypes.Document,
                this.FormsHelper.GetForm(),
                this.Bindings,
                this.FormsHelper.GetBindingsValidationRules(data)
                );
        }
Ejemplo n.º 8
0
        public static ResourceHandle GetIcon(this IData data)
        {
            IPublishControlled publishControlled = data as IPublishControlled;

            if (publishControlled == null)
            {
                return(DataIcon);
            }

            switch (publishControlled.PublicationStatus)
            {
            case GenericPublishProcessController.Draft:
                return(DataDraftIcon);

            case GenericPublishProcessController.AwaitingApproval:
                return(DataAwaitingApprovalIcon);

            case GenericPublishProcessController.AwaitingPublication:
                return(DataAwaitingPublicationIcon);

            case GenericPublishProcessController.Published:
                return(DataPublishedIcon);

            default:
                var allowedPublicationStatuses = new[] {
                    GenericPublishProcessController.Draft,
                    GenericPublishProcessController.AwaitingApproval,
                    GenericPublishProcessController.AwaitingPublication,
                    GenericPublishProcessController.Published
                };

                string allowedValues = string.Join(", ", allowedPublicationStatuses.Select(status => "'" + status + "'"));

                throw new InvalidOperationException("Unexpected publication status '{0}'. Allowed values: {1}"
                                                    .FormatWith(publishControlled.PublicationStatus ?? "(null)", allowedValues));
            }
        }
Ejemplo n.º 9
0
        public static bool SubmitForm(ParameterList parameters, string captchaText)
        {
            try
            {
                _compiler.SaveControlProperties();
            }
            catch (Exception)
            { }
            webUiControl.InitializeViewState();

            Dictionary <string, string> errorMessages = formHelper.BindingsToObject(bindings, newData);

            DataTypeDescriptor dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(newData.DataSourceId.InterfaceType);

            foreach (var property in newData.DataSourceId.InterfaceType.GetProperties())
            {
                if (property.PropertyType == typeof(string) && (string)property.GetValue(newData, null) == string.Empty)
                {
                    property.SetValue(newData, null, null);
                }
            }


            ValidationResults validationResults = ValidationFacade.Validate(newData.DataSourceId.InterfaceType, newData);

            var isValid    = true;
            var useCaptcha = parameters.GetParameter <bool>("UseCaptcha");

            if (useCaptcha)
            {
                var Session = HttpContext.Current.Session;
                if (Session["FormsRendererCaptcha"] == null || !Captcha.IsValid(captchaText, Session["FormsRendererCaptcha"].ToString()))
                {
                    ErrorSummary.AddError(StringResourceSystemFacade.GetString("Composite.Forms.Renderer", "Composite.Forms.Captcha.CaptchaText.error"));
                    isValid = false;
                }
            }

            if (validationResults.IsValid == false)
            {
                isValid = false;

                Dictionary <string, string> errorSummary = new Dictionary <string, string>();

                foreach (ValidationResult result in validationResults)
                {
                    var label = result.Key;
                    var help  = result.Message;

                    try
                    {
                        label = dataTypeDescriptor.Fields[result.Key].FormRenderingProfile.Label;

                        help = dataTypeDescriptor.Fields[result.Key].FormRenderingProfile.HelpText;

                        //if no HelpText specified - use standard C1 error
                        if (help == string.Empty)
                        {
                            help = result.Message;
                        }

                        string error = GetLocalized(label) + ": " + GetLocalized(help);

                        if (!errorSummary.ContainsValue(error))
                        {
                            errorSummary.Add(errorSummary.Count().ToString(), error);
                        }
                    }
                    catch { }
                }

                // add errors to ErrorSummary
                foreach (var dict in errorSummary)
                {
                    ErrorSummary.AddError(dict.Value);
                }
            }
            //TODO: Looks like rudimentary code related to old C1 errros with binding?
            if (errorMessages != null)
            {
                isValid = false;
                foreach (var kvp in errorMessages)
                {
                    var label = kvp.Key;
                    try
                    {
                        label = dataTypeDescriptor.Fields[kvp.Key].FormRenderingProfile.Label;
                    }
                    catch { }
                    ErrorSummary.AddError(GetLocalized(label) + ": " + GetLocalized(kvp.Value));
                }
            }

            if (isValid)
            {
                using (new DataScope(DataScopeIdentifier.Administrated))
                {
                    IPublishControlled publishControlled = newData as IPublishControlled;
                    if (publishControlled != null)
                    {
                        publishControlled.PublicationStatus = GenericPublishProcessController.Draft;
                    }
                    DataFacade.AddNew(newData);

                    using (var datascope = new FormsRendererDataScope(newData))
                    {
                        var formEmailHeaders = parameters.GetParameter("Email") as IEnumerable <FormEmail>;

                        if (formEmailHeaders != null)
                        {
                            foreach (var formEmail in formEmailHeaders)
                            {
                                ParameterFacade.ResolveProperties(formEmail);
                                var inputXml = GetXElement(newData);
                                var body     = new XhtmlDocument();

                                body.AppendDocument(formEmail.Body);

                                if (formEmail.AppendFormData)
                                {
                                    var formData     = new XDocument();
                                    var xslTransform = new XslCompiledTransform();

                                    xslTransform.LoadFromPath(FormsRendererLocalPath + "Xslt/MailBody.xslt");

                                    using (var writer = formData.CreateWriter())
                                    {
                                        xslTransform.Transform(inputXml.CreateReader(), writer);
                                    }

                                    body.AppendDocument(formData);
                                }

                                Reflection.CallStaticMethod <object>("Composite.Core.WebClient.Renderings.Page.PageRenderer", "NormalizeXhtmlDocument", body);

                                var mailMessage = new MailMessage();
                                try
                                {
                                    mailMessage.From = new MailAddress(formEmail.From);
                                }
                                catch (Exception e)
                                {
                                    LoggingService.LogError(string.Format("Mail sending(From: '{0}')", formEmail.From), e.Message);
                                    continue;
                                }
                                try
                                {
                                    mailMessage.To.Add(formEmail.To);
                                }
                                catch (Exception e)
                                {
                                    LoggingService.LogError(string.Format("Mail sending(To: '{0}')", formEmail.To), e.Message);
                                    continue;
                                }
                                if (!string.IsNullOrEmpty(formEmail.Cc))
                                {
                                    try
                                    {
                                        mailMessage.CC.Add(formEmail.Cc);
                                    }
                                    catch (Exception e)
                                    {
                                        LoggingService.LogError(string.Format("Mail sending(Cc: '{0}')", formEmail.Cc), e.Message);
                                    }
                                }

                                try
                                {
                                    mailMessage.Subject    = formEmail.Subject;
                                    mailMessage.IsBodyHtml = true;
                                    mailMessage.Body       = body.ToString();

                                    new SmtpClient().Send(mailMessage);
                                }
                                catch (Exception e)
                                {
                                    throw new InvalidOperationException("Unable to send mail. Please ensure that web.config has correct /configuration/system.net/mailSettings: " + e.Message);
                                }
                            }
                        }
                    }
                }
            }
            return(isValid);
        }
Ejemplo n.º 10
0
            public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
            {
                DataEntityToken token = (DataEntityToken)entityToken;

                IPublishControlled publishControlled = (IPublishControlled)DataFacade.GetDataFromDataSourceId(token.DataSourceId);

                ValidationResults validationResults = ValidationFacade.Validate((IData)publishControlled);

                if (validationResults.IsValid)
                {
                    UpdateTreeRefresher treeRefresher = new UpdateTreeRefresher(token.Data.GetDataEntityToken(), flowControllerServicesContainer);

                    if (actionToken is PublishActionToken)
                    {
                        publishControlled.PublicationStatus = Published;
                    }
                    else if (actionToken is DraftActionToken)
                    {
                        publishControlled.PublicationStatus = Draft;
                    }
                    else if (actionToken is AwaitingApprovalActionToken)
                    {
                        publishControlled.PublicationStatus = AwaitingApproval;
                    }
                    else if (actionToken is AwaitingPublicationActionToken)
                    {
                        publishControlled.PublicationStatus = AwaitingPublication;
                    }
                    else if (actionToken is UnpublishActionToken)
                    {
                        publishControlled.PublicationStatus = Draft;

                        using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
                        {
                            IData data = DataFacade.GetDataFromOtherScope(token.Data, DataScopeIdentifier.Public).SingleOrDefault();

                            if (data != null)
                            {
                                IPage page = data as IPage;
                                if (page != null)
                                {
                                    IEnumerable <IData> referees;
                                    using (new DataScope(DataScopeIdentifier.Public))
                                    {
                                        referees = page.GetMetaData();
                                    }

                                    DataFacade.Delete(referees, CascadeDeleteType.Disable);
                                }


                                DataFacade.Delete(data, CascadeDeleteType.Disable);
                            }

                            transactionScope.Complete();
                        }
                    }
                    else if (actionToken is UndoPublishedChangesActionToken)
                    {
                        using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
                        {
                            using (ProcessControllerFacade.NoProcessControllers)
                            {
                                var   administrativeData = (IPublishControlled)token.Data;
                                IData publishedData      = DataFacade.GetDataFromOtherScope(token.Data, DataScopeIdentifier.Public).Single();

                                publishedData.FullCopyChangedTo(administrativeData);
                                administrativeData.PublicationStatus = Draft;

                                DataFacade.Update(administrativeData);
                            }

                            transactionScope.Complete();
                        }
                    }
                    else
                    {
                        throw new ArgumentException("Unknown action token", "actionToken");
                    }

                    DataFacade.Update(publishControlled);

                    treeRefresher.PostRefreshMesseges(publishControlled.GetDataEntityToken());
                }
                else
                {
                    var managementConsoleMessageService = flowControllerServicesContainer.GetService <IManagementConsoleMessageService>();

                    StringBuilder sb = new System.Text.StringBuilder();
                    sb.AppendLine(StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "ValidationErrorMessage"));
                    foreach (ValidationResult result in validationResults)
                    {
                        sb.AppendLine(result.Message);
                    }

                    managementConsoleMessageService.ShowMessage(DialogType.Error, StringResourceSystemFacade.GetString("Composite.Plugins.GenericPublishProcessController", "ValidationErrorTitle"), sb.ToString());
                }

                return(null);
            }
        private void initializeCodeActivity_Copy_ExecuteCode(object sender, EventArgs e)
        {
            var castedEntityToken = (DataEntityToken)this.EntityToken;

            IPage newPage;

            using (var transactionScope = TransactionsFacade.CreateNewScope())
            {
                CultureInfo sourceCultureInfo = UserSettings.ForeignLocaleCultureInfo;

                IPage sourcePage;
                List <IPagePlaceholderContent> sourcePagePlaceholders;
                List <IData> sourceMetaDataSet;

                using (new DataScope(sourceCultureInfo))
                {
                    var  pageFromEntityToken = (IPage)castedEntityToken.Data;
                    Guid sourcePageId        = pageFromEntityToken.Id;
                    Guid sourcePageVersionId = pageFromEntityToken.VersionId;

                    using (new DataScope(DataScopeIdentifier.Administrated))
                    {
                        sourcePage = DataFacade.GetData <IPage>(f => f.Id == sourcePageId).Single();
                        sourcePage = sourcePage.GetTranslationSource();

                        using (new DataScope(sourcePage.DataSourceId.DataScopeIdentifier))
                        {
                            sourcePagePlaceholders = DataFacade
                                                     .GetData <IPagePlaceholderContent>(f => f.PageId == sourcePageId && f.VersionId == sourcePageVersionId)
                                                     .ToList();
                            sourceMetaDataSet = sourcePage.GetMetaData().ToList();
                        }
                    }
                }


                CultureInfo targetCultureInfo = UserSettings.ActiveLocaleCultureInfo;

                using (new DataScope(targetCultureInfo))
                {
                    newPage = DataFacade.BuildNew <IPage>();
                    sourcePage.ProjectedCopyTo(newPage);

                    newPage.SourceCultureName = targetCultureInfo.Name;
                    newPage.PublicationStatus = GenericPublishProcessController.Draft;
                    newPage = DataFacade.AddNew <IPage>(newPage);

                    foreach (IPagePlaceholderContent sourcePagePlaceholderContent in sourcePagePlaceholders)
                    {
                        IPagePlaceholderContent newPagePlaceholderContent = DataFacade.BuildNew <IPagePlaceholderContent>();
                        sourcePagePlaceholderContent.ProjectedCopyTo(newPagePlaceholderContent);

                        newPagePlaceholderContent.SourceCultureName = targetCultureInfo.Name;
                        newPagePlaceholderContent.PublicationStatus = GenericPublishProcessController.Draft;
                        DataFacade.AddNew <IPagePlaceholderContent>(newPagePlaceholderContent);
                    }

                    foreach (IData metaData in sourceMetaDataSet)
                    {
                        ILocalizedControlled localizedData = metaData as ILocalizedControlled;

                        if (localizedData == null)
                        {
                            continue;
                        }

                        IEnumerable <ReferenceFailingPropertyInfo> referenceFailingPropertyInfos = DataLocalizationFacade.GetReferencingLocalizeFailingProperties(localizedData).Evaluate();

                        if (!referenceFailingPropertyInfos.Any())
                        {
                            IData newMetaData = DataFacade.BuildNew(metaData.DataSourceId.InterfaceType);
                            metaData.ProjectedCopyTo(newMetaData);

                            ILocalizedControlled localizedControlled = newMetaData as ILocalizedControlled;
                            localizedControlled.SourceCultureName = targetCultureInfo.Name;

                            IPublishControlled publishControlled = newMetaData as IPublishControlled;
                            publishControlled.PublicationStatus = GenericPublishProcessController.Draft;

                            DataFacade.AddNew(newMetaData);
                        }
                        else
                        {
                            foreach (ReferenceFailingPropertyInfo referenceFailingPropertyInfo in referenceFailingPropertyInfos)
                            {
                                Log.LogVerbose("LocalizePageWorkflow",
                                               "Meta data of type '{0}' is not localized because the field '{1}' is referring some not yet localzed data"
                                               .FormatWith(metaData.DataSourceId.InterfaceType, referenceFailingPropertyInfo.DataFieldDescriptor.Name));
                            }
                        }
                    }
                }

                EntityTokenCacheFacade.ClearCache(sourcePage.GetDataEntityToken());
                EntityTokenCacheFacade.ClearCache(newPage.GetDataEntityToken());

                foreach (var folderType in PageFolderFacade.GetDefinedFolderTypes(newPage))
                {
                    EntityTokenCacheFacade.ClearCache(new AssociatedDataElementProviderHelperEntityToken(
                                                          TypeManager.SerializeType(typeof(IPage)),
                                                          PageElementProvider.DefaultConfigurationName,
                                                          newPage.Id.ToString(),
                                                          TypeManager.SerializeType(folderType)));
                }


                transactionScope.Complete();
            }

            ParentTreeRefresher parentTreeRefresher = this.CreateParentTreeRefresher();

            parentTreeRefresher.PostRefreshMesseges(newPage.GetDataEntityToken(), 2);

            this.ExecuteWorklow(newPage.GetDataEntityToken(), typeof(EditPageWorkflow));
        }
Ejemplo n.º 12
0
        private void localizeDataCodeActivity_Localize_ExecuteCode(object sender, EventArgs e)
        {
            DataEntityToken      dataEntityToken = (DataEntityToken)this.EntityToken;
            ILocalizedControlled data            = dataEntityToken.Data as ILocalizedControlled;

            CultureInfo targetCultureInfo = UserSettings.ActiveLocaleCultureInfo;

            if (ExistsInLocale(data, targetCultureInfo))
            {
                this.ShowMessage(
                    DialogType.Message,
                    StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "LocalizeData.ShowError.Layout.Label"),
                    StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "LocalizeData.ShowError.AlreadyTranslated")
                    );

                return;
            }


            IEnumerable <ReferenceFailingPropertyInfo> referenceFailingPropertyInfos = DataLocalizationFacade.GetReferencingLocalizeFailingProperties(data).Evaluate();

            IData newData;

            using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
            {
                data = data.GetTranslationSource();

                using (new DataScope(targetCultureInfo))
                {
                    newData = DataFacade.BuildNew(data.DataSourceId.InterfaceType);

                    data.ProjectedCopyTo(newData);

                    ILocalizedControlled localizedControlled = newData as ILocalizedControlled;
                    localizedControlled.SourceCultureName = targetCultureInfo.Name;

                    if (newData is IPublishControlled)
                    {
                        IPublishControlled publishControlled = newData as IPublishControlled;
                        publishControlled.PublicationStatus = GenericPublishProcessController.Draft;
                    }

                    foreach (ReferenceFailingPropertyInfo referenceFailingPropertyInfo in referenceFailingPropertyInfos)
                    {
                        PropertyInfo propertyInfo = data.DataSourceId.InterfaceType.GetPropertiesRecursively().Single(f => f.Name == referenceFailingPropertyInfo.DataFieldDescriptor.Name);
                        if (propertyInfo.PropertyType.IsGenericType &&
                            propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>))
                        {
                            propertyInfo.SetValue(newData, null, null);
                        }
                        else if (propertyInfo.PropertyType == typeof(string))
                        {
                            propertyInfo.SetValue(newData, null, null);
                        }
                        else
                        {
                            propertyInfo.SetValue(newData, referenceFailingPropertyInfo.DataFieldDescriptor.DefaultValue.Value, null);
                        }
                    }

                    newData = DataFacade.AddNew(newData);
                }

                EntityTokenCacheFacade.ClearCache(data.GetDataEntityToken());
                EntityTokenCacheFacade.ClearCache(newData.GetDataEntityToken());

                transactionScope.Complete();
            }

            ParentTreeRefresher parentTreeRefresher = this.CreateParentTreeRefresher();

            parentTreeRefresher.PostRefreshMesseges(newData.GetDataEntityToken(), 2);
        }
        private void localizeCodeActivity_ExecuteCode(object sender, EventArgs e)
        {
            DataEntityToken      dataEntityToken = (DataEntityToken)this.EntityToken;
            ILocalizedControlled data            = dataEntityToken.Data as ILocalizedControlled;

            CultureInfo targetCultureInfo = UserSettings.ActiveLocaleCultureInfo;

            if (ExistsInLocale(data, targetCultureInfo))
            {
                string title       = Texts.LocalizeDataWorkflow_ShowError_LayoutLabel;
                string description = Texts.LocalizeDataWorkflow_ShowError_AlreadyTranslated;

                var messageBox = new MessageBoxMessageQueueItem
                {
                    DialogType = DialogType.Message,
                    Message    = description,
                    Title      = title
                };

                ConsoleMessageQueueFacade.Enqueue(messageBox, GetCurrentConsoleId());
                return;
            }

            IEnumerable <ReferenceFailingPropertyInfo> referenceFailingPropertyInfos = DataLocalizationFacade.GetReferencingLocalizeFailingProperties(data).Evaluate();

            IData newData;

            using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
            {
                data = data.GetTranslationSource();

                using (new DataScope(targetCultureInfo))
                {
                    newData = DataFacade.BuildNew(data.DataSourceId.InterfaceType);

                    data.ProjectedCopyTo(newData);

                    ILocalizedControlled localizedControlled = newData as ILocalizedControlled;
                    localizedControlled.SourceCultureName = targetCultureInfo.Name;

                    if (newData is IPublishControlled)
                    {
                        IPublishControlled publishControlled = newData as IPublishControlled;
                        publishControlled.PublicationStatus = GenericPublishProcessController.Draft;
                    }

                    foreach (ReferenceFailingPropertyInfo referenceFailingPropertyInfo in referenceFailingPropertyInfos)
                    {
                        PropertyInfo propertyInfo = data.DataSourceId.InterfaceType.GetPropertiesRecursively().Single(f => f.Name == referenceFailingPropertyInfo.DataFieldDescriptor.Name);
                        if (propertyInfo.PropertyType.IsGenericType &&
                            propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>))
                        {
                            propertyInfo.SetValue(newData, null, null);
                        }
                        else if (propertyInfo.PropertyType == typeof(string))
                        {
                            propertyInfo.SetValue(newData, null, null);
                        }
                        else
                        {
                            propertyInfo.SetValue(newData, referenceFailingPropertyInfo.DataFieldDescriptor.DefaultValue.Value, null);
                        }
                    }

                    newData = DataFacade.AddNew(newData, false, false, true);
                }

                EntityTokenCacheFacade.ClearCache(data.GetDataEntityToken());
                EntityTokenCacheFacade.ClearCache(newData.GetDataEntityToken());

                transactionScope.Complete();
            }

            ParentTreeRefresher parentTreeRefresher = this.CreateParentTreeRefresher();

            parentTreeRefresher.PostRefreshMesseges(newData.GetDataEntityToken());

            if (this.Payload == "Global")
            {
                this.ExecuteWorklow(newData.GetDataEntityToken(), typeof(EditDataWorkflow));
            }
            else if (this.Payload == "Pagefolder")
            {
                this.ExecuteWorklow(newData.GetDataEntityToken(), WorkflowFacade.GetWorkflowType("Composite.C1Console.Elements.ElementProviderHelpers.AssociatedDataElementProviderHelper.EditAssociatedDataWorkflow"));
            }
        }
Ejemplo n.º 14
0
        public static IPage TranslatePage(IPage sourcePage, CultureInfo sourceCultureInfo, CultureInfo targetCultureInfo)
        {
            IPage newPage;

            using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                List <IPagePlaceholderContent> sourcePagePlaceholders;
                List <IData> sourceMetaDataSet;

                using (new DataScope(sourceCultureInfo))
                {
                    using (new DataScope(DataScopeIdentifier.Administrated))
                    {
                        sourcePage = sourcePage.GetTranslationSource();

                        using (new DataScope(sourcePage.DataSourceId.DataScopeIdentifier))
                        {
                            sourcePagePlaceholders = DataFacade.GetData <IPagePlaceholderContent>(f => f.PageId == sourcePage.Id).ToList();
                            sourceMetaDataSet      = sourcePage.GetMetaData().ToList();
                        }
                    }
                }

                using (new DataScope(targetCultureInfo))
                {
                    newPage = DataFacade.BuildNew <IPage>();
                    sourcePage.ProjectedCopyTo(newPage);

                    newPage.SourceCultureName = targetCultureInfo.Name;
                    newPage.PublicationStatus = GenericPublishProcessController.Draft;
                    newPage = DataFacade.AddNew <IPage>(newPage);

                    foreach (IPagePlaceholderContent sourcePagePlaceholderContent in sourcePagePlaceholders)
                    {
                        IPagePlaceholderContent newPagePlaceholderContent = DataFacade.BuildNew <IPagePlaceholderContent>();
                        sourcePagePlaceholderContent.ProjectedCopyTo(newPagePlaceholderContent);

                        newPagePlaceholderContent.SourceCultureName = targetCultureInfo.Name;
                        newPagePlaceholderContent.PublicationStatus = GenericPublishProcessController.Draft;
                        DataFacade.AddNew <IPagePlaceholderContent>(newPagePlaceholderContent);
                    }

                    foreach (IData metaData in sourceMetaDataSet)
                    {
                        ILocalizedControlled localizedData = metaData as ILocalizedControlled;

                        if (localizedData == null)
                        {
                            continue;
                        }

                        IEnumerable <ReferenceFailingPropertyInfo> referenceFailingPropertyInfos = DataLocalizationFacade.GetReferencingLocalizeFailingProperties(localizedData).Evaluate();

                        if (!referenceFailingPropertyInfos.Any())
                        {
                            IData newMetaData = DataFacade.BuildNew(metaData.DataSourceId.InterfaceType);
                            metaData.ProjectedCopyTo(newMetaData);

                            ILocalizedControlled localizedControlled = newMetaData as ILocalizedControlled;
                            localizedControlled.SourceCultureName = targetCultureInfo.Name;

                            IPublishControlled publishControlled = newMetaData as IPublishControlled;
                            publishControlled.PublicationStatus = GenericPublishProcessController.Draft;

                            DataFacade.AddNew(newMetaData);
                        }
                        else
                        {
                            foreach (ReferenceFailingPropertyInfo referenceFailingPropertyInfo in referenceFailingPropertyInfos)
                            {
                                Log.LogVerbose("LocalizePageWorkflow",
                                               "Meta data of type '{0}' is not localized because the field '{1}' is referring some not yet localzed data"
                                               .FormatWith(metaData.DataSourceId.InterfaceType, referenceFailingPropertyInfo.DataFieldDescriptor.Name));
                            }
                        }
                    }
                }



                transactionScope.Complete();
            }
            return(newPage);
        }