using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Data;
using CMS.CMSHelper;
using CMS.DataEngine;
using CMS.EventLog;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.IO;
using CMS.MediaLibrary;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.Synchronization;
using CMS.UIControls;
public partial class CMSModules_MediaLibrary_Controls_Dialogs_DirectFileUploader_DirectMediaFileUploaderControl : DirectFileUploader
{
#region "Variables"
private MediaLibraryInfo mLibraryInfo = null;
#endregion
#region "Private properties"
///
/// Library info uploaded file is related to.
///
private MediaLibraryInfo LibraryInfo
{
get
{
if (LibraryID > 0)
{
mLibraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo(LibraryID);
}
return mLibraryInfo;
}
set
{
mLibraryInfo = value;
}
}
#endregion
#region "Public properties"
///
/// Uploaded file.
///
public override HttpPostedFile PostedFile
{
get
{
return ucFileUpload.PostedFile;
}
}
///
/// File upload user control.
///
public override CMSFileUpload FileUploadControl
{
get
{
return ucFileUpload;
}
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
if (StopProcessing)
{
// Do nothing
Visible = false;
}
else
{
Page.Error += new EventHandler(Page_Error);
// Initialize uploader
FileUploadControl.Attributes.Add("class", "fileUpload");
FileUploadControl.Attributes.Add("style", "cursor: pointer;");
FileUploadControl.Attributes.Add("onchange", String.Format("if (typeof(parent.DFU) !== 'undefined') {{ parent.DFU.OnUploadBegin('{0}'); {1}; }}", QueryHelper.GetString("containerid", ""), Page.ClientScript.GetPostBackEventReference(btnHidden, null, false)));
// DFU init script
string dfuScript = String.Format("if (typeof(parent.DFU) !== 'undefined'){{parent.DFU.init(document.getElementById('{0}')); window.resize = parent.DFU.init(document.getElementById('{0}'));}}", ucFileUpload.ClientID);
ScriptHelper.RegisterStartupScript(this, typeof(string), "DFUScript_" + ucFileUpload.ClientID, ScriptHelper.GetScript(dfuScript));
btnHidden.Attributes.Add("style", "display:none;");
ScriptHelper.RegisterStartupScript(this, typeof(string), "DFU_Display_" + ucFileUpload.ClientID, "document.getElementById('uploaderDiv').style.display = 'block';", true);
}
}
protected void btnHidden_Click(object sender, EventArgs e)
{
if (!StopProcessing)
{
try
{
switch (SourceType)
{
case MediaSourceEnum.MediaLibraries:
HandleLibrariesUpload();
break;
default:
break;
}
}
catch (Exception ex)
{
EventLogProvider.LogException("DIRECTFILEUPLOADER", "UPLOADFILE", ex);
OnError(e);
}
}
}
#endregion
#region "Media libraries"
///
/// Provides operations necessary to create and store new library file.
///
private void HandleLibrariesUpload()
{
// Get related library info
if (LibraryInfo != null)
{
MediaFileInfo mediaFile = null;
// Get the site name
SiteInfo si = SiteInfoProvider.GetSiteInfo(LibraryInfo.LibrarySiteID);
string siteName = (si != null) ? si.SiteName : CMSContext.CurrentSiteName;
string message = string.Empty;
try
{
// Check the allowed extensions
CheckAllowedExtensions();
if (MediaFileID > 0)
{
#region "Check permissions"
if (!MediaLibraryInfoProvider.IsUserAuthorizedPerLibrary(LibraryInfo, "FileModify"))
{
throw new Exception(GetString("media.security.nofilemodify"));
}
#endregion
mediaFile = MediaFileInfoProvider.GetMediaFileInfo(MediaFileID);
if (mediaFile != null)
{
// Ensure object version
SynchronizationHelper.EnsureObjectVersion(mediaFile);
if (IsMediaThumbnail)
{
string newFileExt = Path.GetExtension(ucFileUpload.FileName).TrimStart('.');
if ((ImageHelper.IsImage(newFileExt)) && (newFileExt.ToLowerCSafe() != "ico") &&
(newFileExt.ToLowerCSafe() != "wmf"))
{
// Update or creation of Media File update
string previewSuffix = MediaLibraryHelper.GetMediaFilePreviewSuffix(siteName);
if (!String.IsNullOrEmpty(previewSuffix))
{
string previewExtension = Path.GetExtension(ucFileUpload.PostedFile.FileName);
string previewName = Path.GetFileNameWithoutExtension(MediaLibraryHelper.GetPreviewFileName(mediaFile.FileName, mediaFile.FileExtension, previewExtension, siteName, previewSuffix));
string previewFolder = DirectoryHelper.CombinePath(MediaLibraryHelper.EnsurePath(LibraryFolderPath.TrimEnd('/')), MediaLibraryHelper.GetMediaFileHiddenFolder(siteName));
byte[] previewFileBinary = new byte[ucFileUpload.PostedFile.ContentLength];
ucFileUpload.PostedFile.InputStream.Read(previewFileBinary, 0, ucFileUpload.PostedFile.ContentLength);
// Delete current preview thumbnails
MediaFileInfoProvider.DeleteMediaFilePreview(siteName, mediaFile.FileLibraryID, mediaFile.FilePath, false);
// Save preview file
MediaFileInfoProvider.SaveFileToDisk(siteName, LibraryInfo.LibraryFolder, previewFolder, previewName, previewExtension, mediaFile.FileGUID, previewFileBinary, false, false);
// Log synchronization task
SynchronizationHelper.LogObjectChange(mediaFile, TaskTypeEnum.UpdateObject);
}
// Drop the cache dependencies
CacheHelper.TouchKeys(MediaFileInfoProvider.GetDependencyCacheKeys(mediaFile, true));
}
else
{
message = GetString("media.file.onlyimgthumb");
}
}
else
{
// Get folder path
string path = Path.GetDirectoryName(DirectoryHelper.CombinePath(MediaLibraryInfoProvider.GetMediaLibraryFolderPath(LibraryInfo.LibraryID), mediaFile.FilePath));
// If file system permissions are sufficient for file update
if (DirectoryHelper.CheckPermissions(path, false, true, true, true))
{
// Delete existing media file
MediaFileInfoProvider.DeleteMediaFile(LibraryInfo.LibrarySiteID, LibraryInfo.LibraryID, mediaFile.FilePath, true, false);
// Update media file preview
if (MediaLibraryHelper.HasPreview(siteName, LibraryInfo.LibraryID, mediaFile.FilePath))
{
// Get new unique file name
string newName = URLHelper.GetSafeFileName(ucFileUpload.PostedFile.FileName, siteName);
// Get new file path
string newPath = DirectoryHelper.CombinePath(path, newName);
newPath = MediaLibraryHelper.EnsureUniqueFileName(newPath);
newName = Path.GetFileName(newPath);
// Rename preview
MediaLibraryHelper.MoveMediaFilePreview(mediaFile, newName);
// Delete preview thumbnails
MediaFileInfoProvider.DeleteMediaFilePreviewThumbnails(mediaFile);
}
// Receive media info on newly posted file
mediaFile = GetUpdatedFile(mediaFile.Generalized.DataClass);
// Save media file information
MediaFileInfoProvider.SetMediaFileInfo(mediaFile);
}
else
{
// Set error message
message = String.Format(GetString("media.accessdeniedtopath"), path);
}
}
}
}
else
{
#region "Check permissions"
// Creation of new media file
if (!MediaLibraryInfoProvider.IsUserAuthorizedPerLibrary(LibraryInfo, "FileCreate"))
{
throw new Exception(GetString("media.security.nofilecreate"));
}
#endregion
// No file for upload specified
if (!ucFileUpload.HasFile)
{
throw new Exception(GetString("media.newfile.errorempty"));
}
// Create new media file record
mediaFile = new MediaFileInfo(ucFileUpload.PostedFile, LibraryID, LibraryFolderPath, ResizeToWidth, ResizeToHeight, ResizeToMaxSideSize, LibraryInfo.LibrarySiteID);
mediaFile.FileDescription = "";
// Save the new file info
MediaFileInfoProvider.SetMediaFileInfo(mediaFile);
}
}
catch (Exception ex)
{
// Creation of new media file failed
message = ex.Message;
}
finally
{
// Create media file info string
string mediaInfo = "";
if ((mediaFile != null) && (mediaFile.FileID > 0) && (IncludeNewItemInfo))
{
mediaInfo = mediaFile.FileID + "|" + LibraryFolderPath.Replace('\\', '>').Replace("'", "\\'");
}
// Ensure message text
message = HTMLHelper.EnsureLineEnding(message, " ");
if (RaiseOnClick)
{
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "UploaderOnClick", ScriptHelper.GetScript("if (parent.UploaderOnClick) { parent.UploaderOnClick('" + MediaFileName.Replace(" ", "").Replace(".", "").Replace("-", "") + "'); }"));
}
string script = String.Format(@"
if (typeof(parent.DFU) !== 'undefined') {{
parent.DFU.OnUploadCompleted('{0}');
}}
if ((window.parent != null) && (/parentelemid={1}/i.test(window.location.href)) && (window.parent.InitRefresh_{1} != null)){{
window.parent.InitRefresh_{1}({2}, false, '{3}'{4});
}}", QueryHelper.GetString("containerid", ""), ParentElemID, ScriptHelper.GetString(message.Trim()), mediaInfo, (InsertMode ? ", 'insert'" : ", 'update'"));
// Call function to refresh parent window
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "RefreshParrent", ScriptHelper.GetScript(script));
}
}
}
///
/// Gets media file info object representing the updated version of original file.
///
/// Original file data
private MediaFileInfo GetUpdatedFile(IDataClass originalFile)
{
// Get info on media file from uploaded file
MediaFileInfo mediaFile = new MediaFileInfo(ucFileUpload.PostedFile, LibraryID, LibraryFolderPath, ResizeToWidth, ResizeToHeight, ResizeToMaxSideSize, LibraryInfo.LibrarySiteID);
// Create new file based on original
MediaFileInfo updatedMediaFile = new MediaFileInfo(originalFile)
{
// Update necessary information
FileName = mediaFile.FileName,
FileExtension = mediaFile.FileExtension,
FileSize = mediaFile.FileSize,
FileMimeType = mediaFile.FileMimeType,
FilePath = mediaFile.FilePath,
FileModifiedByUserID = mediaFile.FileModifiedByUserID,
FileBinary = mediaFile.FileBinary,
FileImageHeight = mediaFile.FileImageHeight,
FileImageWidth = mediaFile.FileImageWidth,
FileBinaryStream = mediaFile.FileBinaryStream
};
return updatedMediaFile;
}
#endregion
}