Exemple #1
0
        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;
    }