// // ==================================================================================================== // public static string getLayout(BaseClasses.CPBaseClass CP, string layoutName, string layoutGuid, string layoutFilename) { try { // // -- install default detail layout LayoutModel layout = DbBaseModel.create <LayoutModel>(CP, layoutGuid); if ((layout == null)) { // // -- no layout found, create it layout = DbBaseModel.addDefault <LayoutModel>(CP); layout.name = layoutName; layout.ccguid = layoutGuid; layout.save(CP); } if (string.IsNullOrEmpty(layout.layout.content)) { // // -- content is blank, populate with layoutfilename BaseClasses.CPBlockBaseClass block = CP.BlockNew(); block.Load(CP.CdnFiles.Read(layoutFilename)); layout.layout.content = block.GetInner("body"); if (string.IsNullOrEmpty(layout.layout.content)) { layout.layout.content = block.GetHtml(); } layout.save(CP); } // // -- exit if not editing if (!CP.User.IsEditingAnything) { return(layout.layout.content); } // // -- wrap with edit return(CP.Content.GetEditWrapper(layout.layout.content, layout.contentControlId, layout.id)); } catch (Exception ex) { CP.Site.ErrorReport(ex); throw; } }
// public static void process(CPBaseClass cp, HtmlDocument htmlDoc, ref List <string> userMessageList) { // // -- data attribute { string xPath = "//*[@data-layout]"; HtmlNodeCollection nodeList = htmlDoc.DocumentNode.SelectNodes(xPath); if (nodeList != null) { foreach (HtmlNode node in nodeList) { string layoutRecordName = node.Attributes["data-layout"]?.Value; node.Attributes.Remove("data-layout"); // // -- body found, set the htmlDoc to the body var layoutDoc = new HtmlDocument(); layoutDoc.LoadHtml(node.InnerHtml); // // -- process the layout DataDeleteController.process(layoutDoc); MustacheVariableController.process(layoutDoc); MustacheSectionController.process(layoutDoc); MustacheTruthyController.process(layoutDoc); MustacheInvertedSectionController.process(layoutDoc); MustacheValueController.process(layoutDoc); DataAddonController.process(cp, layoutDoc); // // -- save the alyout LayoutModel layout = null; if ((layout == null) && !string.IsNullOrWhiteSpace(layoutRecordName)) { layout = DbBaseModel.createByUniqueName <LayoutModel>(cp, layoutRecordName); if (layout == null) { layout = DbBaseModel.addDefault <LayoutModel>(cp); layout.name = layoutRecordName; } layout.layout.content = layoutDoc.DocumentNode.OuterHtml; layout.save(cp); userMessageList.Add("Saved Layout '" + layoutRecordName + "' from data-layout attribute."); } } } } }
// //==================================================================================================== /// <summary> /// Import a file and process the html. Save the result. /// </summary> /// <param name="cp"></param> /// <param name="htmlSourceTempPathFilename"></param> /// <param name="importTypeId"></param> /// <param name="layoutId">If not 0, the imported html will be saved to the record in this table.</param> /// <param name="pageTemplateId">If not 0, the imported html will be saved to the record in this table.</param> /// <param name="emailTemplateId">If not 0, the imported html will be saved to the record in this table.</param> /// <param name="emailId">If not 0, the imported html will be saved to the record in this table.</param> /// <param name="userMessageList">If there were any processing errors caused by the data, return them here. These can be presented to the user.</param> /// <returns></returns> public static bool processImportFile(CPBaseClass cp, string htmlSourceTempPathFilename, ImporttypeEnum importTypeId, int layoutId, int pageTemplateId, int emailTemplateId, int emailId, ref List <string> userMessageList) { try { if (System.IO.Path.GetExtension(htmlSourceTempPathFilename).Equals(".zip")) { // // -- upload file is a zip and unzip to temp and copy assets to wwwroot cp.TempFiles.UnzipFile(htmlSourceTempPathFilename); cp.TempFiles.DeleteFile(htmlSourceTempPathFilename); // // -- copy non-html files to wwwroot copyNonHtmlFilesToWWW(cp, cp.TempFiles.GetPath(htmlSourceTempPathFilename), ""); } // // -- import all html files in the root folder string tempPath = cp.TempFiles.GetPath(htmlSourceTempPathFilename); bool htmlFileFound = false; foreach (var file in cp.TempFiles.FileList(tempPath)) { if (file.Extension.ToLowerInvariant().Equals(".html")) { // // -- process each html file one at a time userMessageList.Add("Processing file " + cp.CdnFiles.GetFilename(file.Name)); string newRecordName = Path.GetFileNameWithoutExtension(file.Name); htmlFileFound = true; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.Load(cp.TempFiles.PhysicalFilePath + tempPath + file.Name, Encoding.UTF8); if (htmlDoc == null) { // // -- body tag not found, import the whole document userMessageList.Add("The file is empty."); return(false); } // // -- get record names for each import type string layoutRecordName = string.Empty; string pageTemplateRecordName = string.Empty; string emailTemplateRecordName = string.Empty; string emailRecordName = string.Empty; // // -- search for meta name=template|layout content=recordaname var metadataList = htmlDoc.DocumentNode.SelectNodes("//meta"); if (metadataList != null) { foreach (var metadataNode in metadataList) { switch (metadataNode.GetAttributeValue("name", String.Empty).ToLowerInvariant()) { case "layout": { layoutRecordName = metadataNode.GetAttributeValue("content", String.Empty); break; } case "template": case "pagetemplate": { pageTemplateRecordName = metadataNode.GetAttributeValue("content", String.Empty); break; } case "emailtemplate": { emailTemplateRecordName = metadataNode.GetAttributeValue("content", String.Empty); break; } case "email": { emailRecordName = metadataNode.GetAttributeValue("content", String.Empty); break; } default: { break; } } } } // // -- process the document html if (!processHtmlDoc(cp, htmlDoc, importTypeId, ref userMessageList)) { return(false); } // // -- save manual layout LayoutModel layout = null; { if (importTypeId.Equals(ImporttypeEnum.LayoutForAddon) && layoutId.Equals(0) & string.IsNullOrWhiteSpace(layoutRecordName)) { // // -- layout type but no layout selected, and no layout imported, use filename layoutRecordName = newRecordName; } if (importTypeId.Equals(ImporttypeEnum.LayoutForAddon) && !layoutId.Equals(0)) { layout = DbBaseModel.create <LayoutModel>(cp, layoutId); if (layout == null) { userMessageList.Add("The layout selected could not be found."); return(false); } layout.layout.content = htmlDoc.DocumentNode.OuterHtml; layout.save(cp); } // // -- save meta layout if ((layout == null) && !string.IsNullOrWhiteSpace(layoutRecordName)) { layout = DbBaseModel.createByUniqueName <LayoutModel>(cp, layoutRecordName); if (layout == null) { layout = DbBaseModel.addDefault <LayoutModel>(cp); layout.name = layoutRecordName; } layout.layout.content = htmlDoc.DocumentNode.OuterHtml; layout.save(cp); userMessageList.Add("Saved Layout '" + layoutRecordName + "'."); } } // // -- save page template PageTemplateModel pageTemplate = null; { if (importTypeId.Equals(ImporttypeEnum.PageTemplate) && pageTemplateId.Equals(0) & string.IsNullOrWhiteSpace(pageTemplateRecordName)) { // // -- layout type but no layout selected, and no layout imported, use filename pageTemplateRecordName = newRecordName; } if (importTypeId.Equals(ImporttypeEnum.PageTemplate) && !pageTemplateId.Equals(0)) { pageTemplate = DbBaseModel.create <PageTemplateModel>(cp, pageTemplateId); if (pageTemplate == null) { userMessageList.Add("The template selected could not be found."); return(false); } pageTemplate.bodyHTML = htmlDoc.DocumentNode.OuterHtml; pageTemplate.save(cp); userMessageList.Add("Saved Page Template '" + pageTemplateRecordName + "'."); } // // -- save meta template if ((pageTemplate == null) && !string.IsNullOrWhiteSpace(pageTemplateRecordName)) { pageTemplate = DbBaseModel.createByUniqueName <PageTemplateModel>(cp, pageTemplateRecordName); if (pageTemplate == null) { pageTemplate = DbBaseModel.addDefault <PageTemplateModel>(cp); pageTemplate.name = pageTemplateRecordName; } // // -- try to resolve the various relative urls possible into the primary url, then to a reoot relative url string urlProtocolDomainSlash = "https://" + cp.Site.DomainPrimary + "/"; string bodyhtml = htmlDoc.DocumentNode.OuterHtml; bodyhtml = genericController.convertLinksToAbsolute(bodyhtml, urlProtocolDomainSlash); bodyhtml = bodyhtml.Replace(urlProtocolDomainSlash, "/"); // pageTemplate.bodyHTML = bodyhtml; pageTemplate.save(cp); userMessageList.Add("Saved Page Template '" + pageTemplateRecordName + "'."); } } // // -- save email template EmailTemplateModel emailTemplate = null; { if (importTypeId.Equals(ImporttypeEnum.EmailTemplate) && emailTemplateId.Equals(0) & string.IsNullOrWhiteSpace(emailTemplateRecordName)) { // // -- type but no layout selected, and no layout imported, use filename emailTemplateRecordName = newRecordName; } if (importTypeId.Equals(ImporttypeEnum.EmailTemplate) && !emailTemplateId.Equals(0)) { emailTemplate = DbBaseModel.create <EmailTemplateModel>(cp, emailTemplateId); if (emailTemplate == null) { userMessageList.Add("The template selected could not be found."); return(false); } emailTemplate.bodyHTML = htmlDoc.DocumentNode.OuterHtml; emailTemplate.save(cp); } // // -- save meta template if ((emailTemplate == null) && !string.IsNullOrWhiteSpace(emailTemplateRecordName)) { emailTemplate = DbBaseModel.createByUniqueName <EmailTemplateModel>(cp, emailTemplateRecordName); if (emailTemplate == null) { emailTemplate = DbBaseModel.addDefault <EmailTemplateModel>(cp); emailTemplate.name = emailTemplateRecordName; } emailTemplate.bodyHTML = htmlDoc.DocumentNode.OuterHtml; emailTemplate.save(cp); userMessageList.Add("Saved Email Template '" + emailTemplateRecordName + "'."); } } // // -- save email EmailModel email = null; { if (importTypeId.Equals(5) && emailId.Equals(0) & string.IsNullOrWhiteSpace(emailRecordName)) { // // -- layout type but no layout selected, and no layout imported, use filename emailRecordName = newRecordName; } if (!emailId.Equals(0)) { email = DbBaseModel.create <EmailModel>(cp, emailId); if (email == null) { userMessageList.Add("The email selected could not be found."); return(false); } email.copyFilename.content = htmlDoc.DocumentNode.OuterHtml; email.save(cp); userMessageList.Add("Saved Email '" + emailRecordName + "'."); } // // -- save meta template if ((email == null) && !string.IsNullOrWhiteSpace(emailRecordName)) { email = DbBaseModel.createByUniqueName <EmailModel>(cp, emailRecordName); if (email == null) { email = DbBaseModel.addDefault <EmailModel>(cp); email.name = emailRecordName; } email.copyFilename.content = htmlDoc.DocumentNode.OuterHtml; email.save(cp); userMessageList.Add("Saved Email '" + emailRecordName + "'."); } } } } if (!htmlFileFound) { userMessageList.Add("No files were found with .HTML extension. Only files with .HTML extensions are imported."); return(false); } return(true); } catch (Exception ex) { cp.Site.ErrorReport(ex); throw; } }