Exemplo n.º 1
0
        private bool Validate(MasterPage masterPage, out EntityToken newEntityToken)
        {
            newEntityToken = null;

            if(!(this.EntityToken is PageTemplateEntityToken))
            {
                return true;
            }

            var pageTemplate = GetPageTemplate();

            var templateDefinition = masterPage as MasterPagePageTemplate;
            if(templateDefinition == null)
            {
                if(!pageTemplate.IsValid)
                {
                    return true;
                }

                ShowWarning(GetText("EditTemplate.Validation.IncorrectBaseClass")
                            .FormatWith(typeof(MasterPagePageTemplate).FullName));
                return false;
            }

            Guid templateId;

            try
            {
                templateId = templateDefinition.TemplateId;
            }
            catch (Exception ex)
            {
                ShowPropertyError("TemplateId", ex);
                return false;
            }

            try
            {
                string newTitle = templateDefinition.TemplateTitle;
            }
            catch (Exception ex)
            {
                ShowPropertyError("TemplateTitle", ex);
                return false;
            }

            if(pageTemplate.IsValid)
            {
                if (templateId != pageTemplate.Id)
                {
                    ShowWarning(GetText("EditTemplate.Validation.TemplateIdChanged").FormatWith(pageTemplate.Id));
                    return false;
                }
            }
            else
            {
                newEntityToken = new PageTemplateEntityToken(templateId);
            }

            return true;
        }
        private void codeActivity2_ExecuteCode(object sender, EventArgs e)
        {
            AddNewTreeRefresher addNewTreeRefresher = this.CreateAddNewTreeRefresher(this.EntityToken);

            Guid newTemplateId = Guid.NewGuid();
            string newTitle = this.GetBinding<string>(Binding_Title);

            string newPageTemplateMarkup, folderPath;

            Guid copyOfId = this.GetBinding<Guid>("CopyOfId");
            if (copyOfId == Guid.Empty)
            {
                newPageTemplateMarkup = DefaultRazorTemplateMarkup;
                folderPath = GetRazorTemplatesRootFolder();
            }
            else
            {
                ParseExistingTemplateForCopying(copyOfId, out newPageTemplateMarkup, out folderPath);
            }

            newPageTemplateMarkup = newPageTemplateMarkup
                    .Replace(Marker_TemplateId, newTemplateId.ToString())
                    .Replace(Marker_TemplateTitle, CSharpEncodeString(newTitle));

            
            string filePath = GeneratedCshtmlFileName(folderPath, newTitle, newTemplateId);

            C1File.WriteAllText(filePath, newPageTemplateMarkup);

            var entityToken = new PageTemplateEntityToken(newTemplateId);

            PageTemplateProviderRegistry.FlushTemplates();

            addNewTreeRefresher.PostRefreshMesseges(entityToken);

            this.ExecuteAction(entityToken, new WorkflowActionToken(typeof(EditRazorPageTemplateWorkflow)));
        }
        private bool ValidateMarkup(string virtualPath, string content, out EntityToken newEntityToken)
        {
            newEntityToken = null;

            string filePath = PathUtil.Resolve(virtualPath);
            string fileName = Path.GetFileName(filePath);

            string tempFileName = RazorPageTemplateProvider.TempFilePrefix + fileName;
            string tempFileVirtualPath = virtualPath.Substring(0, virtualPath.Length - fileName.Length) + tempFileName;
            string tempFile = Path.Combine(Path.GetDirectoryName(filePath), tempFileName);

            try
            {
                C1File.WriteAllText(tempFile, content);

                WebPageBase webPageBase;

                try
                {
                    webPageBase = WebPage.CreateInstanceFromVirtualPath(tempFileVirtualPath);
                }
                catch (Exception ex)
                {
                    Log.LogWarning(LogTitle, "Compilation failed while validating changes to '{0}'", virtualPath);
                    Log.LogWarning(LogTitle, ex);

                    string message = ex.Message;

                    if(message.StartsWith(tempFile, StringComparison.OrdinalIgnoreCase))
                    {
                        message = fileName + message.Substring(tempFile.Length);
                    }

                    ShowWarning(GetText("EditTemplate.Validation.CompilationFailed")
                                .FormatWith(message));
                    return false;
                }

                if (!(webPageBase is RazorPageTemplate))
                {
                    if(IsPageTemplate) 
                    {
                        var templateDescriptor = GetPageTemplateDescriptor();
                        
                        if(templateDescriptor.IsValid)
                        {
                            ShowWarning(GetText("EditTemplate.Validation.IncorrectBaseClass")
                                    .FormatWith(typeof(RazorPageTemplate).FullName));
                            return false;    
                        }

                        newEntityToken = new SharedCodeFileEntityToken(virtualPath);
                        return true;
                    }

                    return true;
                }

                Guid templateId;

                var pageTemplate = webPageBase as RazorPageTemplate;
                pageTemplate.Configure();

                try
                {
                    templateId = pageTemplate.TemplateId;
                }
                catch (Exception ex)
                {
                    ShowPropertyError("TemplateId", ex);
                    return false;
                }

                try
                {
                    string templateTitle = pageTemplate.TemplateTitle;
                }
                catch (Exception ex)
                {
                    ShowPropertyError("TemplateTitle", ex);
                    return false;
                }

                if(!IsPageTemplate)
                {
                    newEntityToken = new PageTemplateEntityToken(templateId);
                    return true;
                }

                var pageTemplateDescriptor = GetPageTemplateDescriptor();

                if (pageTemplateDescriptor.IsValid)
                {
                    // Forbidding to change template id from this workflow in order to avoid mistakes
                    if (templateId != pageTemplateDescriptor.Id)
                    {
                        ShowWarning(GetText("EditTemplate.Validation.TemplateIdChanged").FormatWith(pageTemplateDescriptor.Id));
                        return false;
                    }
                }
                else
                {
                    newEntityToken = new PageTemplateEntityToken(templateId);
                }
            }
            finally
            {
                C1File.Delete(tempFile);
            }

            return true;
        }
        private void codeActivity2_ExecuteCode(object sender, EventArgs e)
        {
            AddNewTreeRefresher addNewTreeRefresher = this.CreateAddNewTreeRefresher(this.EntityToken);

            Guid newTemplateId = Guid.NewGuid();
            string newTitle = this.GetBinding<string>(Binding_Title);

            string newPageTemplate_Markup, newPageTemplate_Codebehind, templateFolder;

            Guid copyOfId = this.GetBinding<Guid>("CopyOfId");
            if (copyOfId == Guid.Empty)
            {
                newPageTemplate_Markup = NewMasterPage_Markup;
                newPageTemplate_Codebehind = NewMasterPage_Codebehind;

                templateFolder = GetMasterPagesRootFolder();
            }
            else
            {
                ParseTemplateForCopying(copyOfId, out newPageTemplate_Markup, out newPageTemplate_Codebehind, out templateFolder);
            }

            string masterFilePath, codeFilePath;
            GenerateFileNames(templateFolder, newTitle, newTemplateId, out masterFilePath, out codeFilePath);

            newPageTemplate_Markup = newPageTemplate_Markup.Replace(Marker_Codebehind, Path.GetFileName(codeFilePath));
            newPageTemplate_Codebehind = newPageTemplate_Codebehind
                .Replace(Marker_TemplateId, newTemplateId.ToString())
                .Replace(Marker_TemplateTitle, CSharpEncodeString(newTitle));

            C1File.WriteAllText(codeFilePath, newPageTemplate_Codebehind);
            C1File.WriteAllText(masterFilePath, newPageTemplate_Markup);

            var entityToken = new PageTemplateEntityToken(newTemplateId);
            PageTemplateProviderRegistry.FlushTemplates();

            addNewTreeRefresher.PostRefreshMesseges(entityToken);

            this.ExecuteAction(entityToken, new WorkflowActionToken(typeof(EditMasterPageWorkflow)));
        }