using System; using System.Data; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.IO; using CMS.MediaLibrary; using CMS.SiteProvider; using MediaHelper = CMS.GlobalHelper.MediaHelper; public partial class CMSModules_MediaLibrary_Controls_LiveControls_MediaFilePreview : MediaFilePreview { #region "Variables" private DataRow mData = null; private int mWidth = 0; private int mHeight = 0; private int mMaxSideSize = 0; private string mDefaultImageUrl = null; /// /// Indicates whether control was binded. /// private bool binded = false; #endregion #region "Properties" /// /// Output object width (image/video/flash) /// public int Width { get { return mWidth; } set { mWidth = value; } } /// /// Output object height (image/video/flash) /// public int Height { get { return mHeight; } set { mHeight = value; } } /// /// Output image max side size. /// public int MaxSideSize { get { return mMaxSideSize; } set { mMaxSideSize = value; } } /// /// URL of the default teaser image. /// public string DefaultImageUrl { get { return mDefaultImageUrl; } set { mDefaultImageUrl = value; } } #endregion protected override void OnDataBinding(EventArgs e) { base.OnDataBinding(e); // Get data row mData = GetData(this); } protected override void Render(HtmlTextWriter writer) { base.Render(writer); bool writeHtml = !binded; // Reload data ReloadData(false); if (writeHtml) { writer.Write(ltlOutput.Text); } } protected void Page_PreRender(object sender, EventArgs e) { ReloadData(false); } /// /// Initializes the control properties. /// public void ReloadData(bool forceReload) { if (!binded || forceReload) { if (mData != null) { MediaFileInfo mfi = new MediaFileInfo(mData); if (mfi != null) { bool completeUrl = false; // Get the site SiteInfo si = null; SiteInfo currentSite = CMSContext.CurrentSite; if (mfi.FileSiteID == currentSite.SiteID) { si = currentSite; } else { si = SiteInfoProvider.GetSiteInfo(mfi.FileSiteID); } if (si != null) { // Complete URL only for other site than current if (si.SiteID != currentSite.SiteID) { completeUrl = true; } string url = ""; if (UseSecureLinks) { if (completeUrl) { url = MediaFileInfoProvider.GetMediaFileAbsoluteUrl(si.SiteName, mfi.FileGUID, mfi.FileName); } else { url = MediaFileInfoProvider.GetMediaFileUrl(mfi.FileGUID, mfi.FileName); } } else { MediaLibraryInfo li = MediaLibraryInfoProvider.GetMediaLibraryInfo(mfi.FileLibraryID); if (li != null) { if (completeUrl) { url = MediaFileInfoProvider.GetMediaFileAbsoluteUrl(si.SiteName, li.LibraryFolder, mfi.FilePath); } else { url = MediaFileInfoProvider.GetMediaFileUrl(si.SiteName, li.LibraryFolder, mfi.FilePath); } } } if (DisplayActiveContent) { if (ImageHelper.IsImage(mfi.FileExtension) && File.Exists(MediaFileInfoProvider.GetMediaFilePath(mfi.FileLibraryID, mfi.FilePath))) { // Get new dimensions int[] newDims = ImageHelper.EnsureImageDimensions(Width, Height, MaxSideSize, mfi.FileImageWidth, mfi.FileImageHeight); // If dimensions changed use secure link if ((newDims[0] != mfi.FileImageWidth) || (newDims[1] != mfi.FileImageHeight)) { if (completeUrl) { url = MediaFileInfoProvider.GetMediaFileAbsoluteUrl(si.SiteName, mfi.FileGUID, mfi.FileName); } else { url = MediaFileInfoProvider.GetMediaFileUrl(mfi.FileGUID, mfi.FileName); } } else { // Use width and height from properties in case dimensions are bigger than original newDims[0] = Width; newDims[1] = Height; } // Initialize image parameters ImageParameters imgParams = new ImageParameters(); imgParams.Alt = mfi.FileDescription; imgParams.Width = newDims[0]; imgParams.Height = newDims[1]; imgParams.Url = url; ltlOutput.Text = MediaHelper.GetImage(imgParams); } else if (MediaHelper.IsFlash(mfi.FileExtension)) { // Initialize flash parameters FlashParameters flashParams = new FlashParameters(); flashParams.Url = url; flashParams.Width = Width; flashParams.Height = Height; ltlOutput.Text = MediaHelper.GetFlash(flashParams); } else if (MediaHelper.IsAudio(mfi.FileExtension)) { // Initialize audio/video parameters AudioVideoParameters audioParams = new AudioVideoParameters(); audioParams.SiteName = CMSContext.CurrentSiteName; audioParams.Url = url; audioParams.Width = Width; audioParams.Height = Height; audioParams.Extension = mfi.FileExtension; ltlOutput.Text = MediaHelper.GetAudioVideo(audioParams); } else if (MediaHelper.IsVideo(mfi.FileExtension)) { // Initialize audio/video parameters AudioVideoParameters videoParams = new AudioVideoParameters(); videoParams.SiteName = CMSContext.CurrentSiteName; videoParams.Url = url; videoParams.Width = Width; videoParams.Height = Height; videoParams.Extension = mfi.FileExtension; ltlOutput.Text = MediaHelper.GetAudioVideo(videoParams); } else { ltlOutput.Text = MediaLibraryHelper.ShowPreviewOrIcon(mfi, Width, Height, MaxSideSize, PreviewSuffix, IconSet, Page, DefaultImageUrl); } } else { ltlOutput.Text = MediaLibraryHelper.ShowPreviewOrIcon(mfi, Width, Height, MaxSideSize, PreviewSuffix, IconSet, Page, DefaultImageUrl); } } } } binded = true; } } #region "Private methods" /// /// Returns DataRow from current binding item. /// /// Control private DataRow GetData(Control ctrl) { while (ctrl != null) { if (ctrl is IDataItemContainer) { return ((DataRowView)((IDataItemContainer)ctrl).DataItem).Row; } ctrl = ctrl.Parent; } return null; } #endregion }