private void SaveCMSItem(string key, HttpFile file, DateTime dateToBePublished) { using (var db = DataDocumentStore.DocumentStore.OpenSession()) { var cmsItem = db.Query <CMSItem>().SingleOrDefault(x => x.Key == key); if (cmsItem == null) { cmsItem = new CMSItem { DateCreated = DateTime.Now, Key = key }; } var newVersion = new Version { ContentType = file.ContentType, DateCreated = DateTime.Now, DateToBePublished = dateToBePublished, AttachmentLocation = "content/" + key + "/" + cmsItem.Versions.Count + 1 }; cmsItem.AddVersion(newVersion); db.Store(cmsItem); DataDocumentStore.DocumentStore.DatabaseCommands. PutAttachment(newVersion.AttachmentLocation, null, file.Value, new RavenJObject()); db.SaveChanges(); } }
/// <summary> /// Retrieves the stylesheets of the layout from the database. /// </summary> /// <param name="item">Layout item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetLayout(CMSItem item) { LayoutInfo layoutInfo = null; if (item.Name != null) { layoutInfo = LayoutInfoProvider.GetLayoutInfo(item.Name); } else { layoutInfo = LayoutInfoProvider.GetLayoutInfo(item.ID); } if (layoutInfo == null) { return null; } // Get last modified date with dependency on external storage DateTime lastModified = layoutInfo.LayoutLastModified; FileInfo fi = layoutInfo.GetFileInfo(LayoutInfo.EXTERNAL_COLUMN_CSS); if (fi != null) { lastModified = fi.LastWriteTime.ToUniversalTime(); } // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(layoutInfo.LayoutCSS, URLHelper.ApplicationPath), LastModified = lastModified, Etag = "layout|" + layoutInfo.LayoutVersionGUID, FileName = ValidationHelper.GetSafeFileName(layoutInfo.LayoutCodeName), Extension = ".css" }; // Add file dependency on component css file if (fi != null) { resource.ComponentFiles.Add(layoutInfo.GetVirtualFileRelativePath(LayoutInfo.EXTERNAL_COLUMN_CSS)); } return resource; }
/// <summary> /// Retrieves the stylesheet from file /// </summary> /// <param name="item">File item</param> /// <param name="extension">File extension</param> /// <param name="resolveCSSUrls">If true, the CSS URLs are resolved in the output</param> /// <param name="binary">If true, the file is a binary file</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetFile(CMSItem item, string extension, bool resolveCSSUrls, bool binary) { string url = item.Name; string path = URLHelper.GetPhysicalPath(URLHelper.GetVirtualPath(url)); // Get the file content string fileContent = null; byte[] binaryData = null; if (binary) { // Binary file binaryData = ReadBinaryFile(path, extension); } else { // Text file fileContent = ReadFile(path, extension); if (resolveCSSUrls) { fileContent = HTMLHelper.ResolveCSSClientUrls(fileContent, URLHelper.GetAbsoluteUrl(url)); } } var lastModified = File.GetLastWriteTime(path); // Build the result var resource = new CMSOutputResource() { Data = fileContent, BinaryData = binaryData, Name = path, Etag = "file|" + lastModified.ToString(), LastModified = lastModified, ContentType = MimeTypeHelper.GetMimetype(extension), FileName = Path.GetFileName(path), Extension = extension }; return resource; }
/// <summary> /// Retrieves the stylesheets of the device layout from the database. /// </summary> /// <param name="item">Device layout item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetDeviceLayout(CMSItem item) { PageTemplateDeviceLayoutInfo layoutInfo = null; if (item.Name != null) { // Not supported, device layout doesn't contain name } else { layoutInfo = PageTemplateDeviceLayoutInfoProvider.GetTemplateDeviceLayoutInfo(item.ID); } if (layoutInfo == null) { return null; } // Get last modified date with dependency on external storage DateTime lastModified = layoutInfo.LayoutLastModified; FileInfo fi = layoutInfo.GetFileInfo(PageTemplateDeviceLayoutInfo.EXTERNAL_COLUMN_CSS); if (fi != null) { lastModified = fi.LastWriteTime.ToUniversalTime(); } // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(layoutInfo.LayoutCSS, URLHelper.ApplicationPath), LastModified = lastModified, Etag = "layout|" + layoutInfo.LayoutVersionGUID, FileName = Convert.ToString(layoutInfo.LayoutID), Extension = ".css" }; // Add file dependency on component css file if (fi != null) { resource.ComponentFiles.Add(layoutInfo.GetVirtualFileRelativePath(PageTemplateDeviceLayoutInfo.EXTERNAL_COLUMN_CSS)); } return resource; }
/// <summary> /// Retrieves the stylesheets of the web part container from the database. /// </summary> /// <param name="item">Container item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetContainer(CMSItem item) { WebPartContainerInfo containerInfo = null; if (item.Name != null) { containerInfo = WebPartContainerInfoProvider.GetWebPartContainerInfo(item.Name); } else { containerInfo = WebPartContainerInfoProvider.GetWebPartContainerInfo(item.ID); } if (containerInfo == null) { return null; } DateTime lastModified = containerInfo.ContainerLastModified; // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(containerInfo.ContainerCSS, URLHelper.ApplicationPath), LastModified = lastModified, Etag = "webpartcontainer|" + lastModified.ToString(), FileName = ValidationHelper.GetSafeFileName(containerInfo.ContainerName), Extension = ".css" }; return resource; }
/// <summary> /// Retrieves the stylesheet of the web part from the database. /// </summary> /// <param name="item">Web part item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetWebPart(CMSItem item) { WebPartInfo webPartInfo = null; if (item.Name != null) { webPartInfo = WebPartInfoProvider.GetWebPartInfo(item.Name); } else { webPartInfo = WebPartInfoProvider.GetWebPartInfo(item.ID); } if (webPartInfo == null) { return null; } // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(webPartInfo.WebPartCSS, URLHelper.ApplicationPath), LastModified = webPartInfo.WebPartLastModified, Etag = "webpart|" + webPartInfo.WebPartName, FileName = ValidationHelper.GetSafeFileName(webPartInfo.WebPartName) + ".css", Extension = ".css" }; return resource; }
/// <summary> /// Retrieves the stylesheets of the web part layout from the database. /// </summary> /// <param name="item">Layout item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetTransformation(CMSItem item) { TransformationInfo transformationInfo = null; if (item.Name != null) { transformationInfo = TransformationInfoProvider.GetTransformation(item.Name); } else { transformationInfo = TransformationInfoProvider.GetTransformation(item.ID); } if (transformationInfo == null) { return null; } // Get last modified date with dependency on external storage DateTime lastModified = transformationInfo.TransformationLastModified; FileInfo fi = transformationInfo.GetFileInfo(TransformationInfo.EXTERNAL_COLUMN_CSS); if (fi != null) { lastModified = fi.LastWriteTime.ToUniversalTime(); } // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(transformationInfo.TransformationCSS, URLHelper.ApplicationPath), LastModified = lastModified, Etag = "transformation|" + transformationInfo.TransformationVersionGUID, FileName = ValidationHelper.GetSafeFileName(transformationInfo.TransformationFullName) + ".css", Extension = ".css" }; // Add file dependency on component css file if (fi != null) { resource.ComponentFiles.Add(transformationInfo.GetVirtualFileRelativePath(TransformationInfo.EXTERNAL_COLUMN_CSS)); } return resource; }
/// <summary> /// Retrieves the stylesheets of the page template from the database. /// </summary> /// <param name="item">Template item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetTemplate(CMSItem item) { // Try to get global one PageTemplateInfo templateInfo = null; if (item.Name != null) { string templateName = item.Name; templateInfo = PageTemplateInfoProvider.GetPageTemplateInfo(templateName); // Try to get site one (ad-hoc) if not found if (templateInfo == null) { templateInfo = PageTemplateInfoProvider.GetPageTemplateInfo(templateName, CMSContext.CurrentSiteID); } } else { templateInfo = PageTemplateInfoProvider.GetPageTemplateInfo(item.ID); } if (templateInfo == null) { return null; } // Get last modified date with dependency on external storage DateTime lastModified = templateInfo.PageTemplateLastModified; FileInfo fi = templateInfo.GetFileInfo(PageTemplateInfo.EXTERNAL_COLUMN_CSS); if (fi != null) { lastModified = fi.LastWriteTime.ToUniversalTime(); } // Build the result var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(templateInfo.PageTemplateCSS, URLHelper.ApplicationPath), LastModified = lastModified, Etag = "template|" + templateInfo.PageTemplateVersionGUID, FileName = ValidationHelper.GetSafeFileName(templateInfo.CodeName), Extension = ".css" }; // Add file dependency on component css file if (fi != null) { resource.ComponentFiles.Add(templateInfo.GetVirtualFileRelativePath(PageTemplateInfo.EXTERNAL_COLUMN_CSS)); } return resource; }
/// <summary> /// Retrieve the stylesheet either from the database or file if checked out. /// </summary> /// <param name="item">Stylesheet item</param> /// <returns>The stylesheet data (plain version only)</returns> private static CMSOutputResource GetStylesheet(CMSItem item) { // Get the stylesheet CssStylesheetInfo stylesheetInfo = null; if (item.Name != null) { stylesheetInfo = CssStylesheetInfoProvider.GetCssStylesheetInfo(item.Name); } else { stylesheetInfo = CssStylesheetInfoProvider.GetCssStylesheetInfo(item.ID); } if (stylesheetInfo == null) { return null; } // Get last modified date with dependency on external storage DateTime lastModified = stylesheetInfo.StylesheetLastModified; FileInfo fi = stylesheetInfo.GetFileInfo(CssStylesheetInfo.EXTERNAL_COLUMN_CSS); if (fi != null) { lastModified = fi.LastWriteTime.ToUniversalTime(); } string stylesheetName = stylesheetInfo.StylesheetName; // Build the output var resource = new CMSOutputResource() { Data = HTMLHelper.ResolveCSSUrls(stylesheetInfo.StylesheetText, URLHelper.ApplicationPath), Name = stylesheetName, LastModified = lastModified, Etag = "cssstylesheet|" + stylesheetInfo.StylesheetVersionGUID.ToString(), FileName = stylesheetName + ".css", Extension = ".css" }; // Add file dependency on component css file if (fi != null) { resource.ComponentFiles.Add(stylesheetInfo.GetVirtualFileRelativePath(CssStylesheetInfo.EXTERNAL_COLUMN_CSS)); } return resource; }