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))); }