using System;
using System.Data;
using System.Web;
using System.Web.UI;
using CMS.CMSHelper;
using CMS.DataEngine;
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_FileUpload : FileUpload
{
#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;
}
}
///
/// File upload user control.
///
public override CMSFileUpload FileUploadControl
{
get
{
return ucFileUpload;
}
}
#endregion
#region "Button handling"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Library info initialization
LibraryID = QueryHelper.GetInteger("libraryid", 0);
MediaFileID = QueryHelper.GetInteger("mediafileid", 0);
MediaFileName = QueryHelper.GetString("filename", null);
IsMediaThumbnail = QueryHelper.GetBoolean("ismediathumbnail", false);
LibraryFolderPath = QueryHelper.GetString("path", "");
IncludeNewItemInfo = QueryHelper.GetBoolean("includeinfo", false);
}
protected void Page_Load(object sender, EventArgs e)
{
ScriptHelper.RegisterWOpenerScript(Page);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
lblError.Visible = (lblError.Text != "");
}
protected void btnOK_Click(object senderObject, EventArgs e)
{
if (!ucFileUpload.HasFile)
{
lblError.Text = GetString("attach.selectfile");
}
else
{
switch (SourceType)
{
case MediaSourceEnum.MediaLibraries:
HandleLibrariesUpload();
break;
default:
break;
}
}
}
#endregion
#region "Media libraries upload"
///
/// 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
string siteName = CMSContext.CurrentSiteName;
SiteInfo si = SiteInfoProvider.GetSiteInfo(LibraryInfo.LibrarySiteID);
if (si != null)
{
siteName = si.SiteName;
}
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
{
// 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 file path
string newPath = DirectoryHelper.CombinePath(Path.GetDirectoryName(mediaFile.FilePath).TrimEnd('/'), ucFileUpload.PostedFile.FileName);
newPath = MediaLibraryHelper.EnsureUniqueFileName(newPath);
// Get new unique file name
string 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);
MediaFileInfoProvider.SetMediaFileInfo(mediaFile);
}
}
}
else
{
// Creation of new media file
#region "Check permissions"
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, " ");
// Call function to refresh parent window
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "refresh", ScriptHelper.GetScript("if ((wopener.parent != null) && (wopener.parent.InitRefresh_" + ParentElemID + " != null)){wopener.parent.InitRefresh_" + ParentElemID + "(" + ScriptHelper.GetString(message.Trim()) + ", false" + ((mediaInfo != "") ? ", '" + mediaInfo + "'" : "") + (InsertMode ? ", 'insert'" : ", 'update'") + ");}CloseDialog();"));
}
}
}
///
/// 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
updatedMediaFile.FileID = MediaFileID;
updatedMediaFile.FileName = mediaFile.FileName;
updatedMediaFile.FileExtension = mediaFile.FileExtension;
updatedMediaFile.FileSize = mediaFile.FileSize;
updatedMediaFile.FileMimeType = mediaFile.FileMimeType;
updatedMediaFile.FilePath = mediaFile.FilePath;
updatedMediaFile.FileCreatedWhen = mediaFile.FileCreatedWhen;
updatedMediaFile.FileCreatedByUserID = mediaFile.FileCreatedByUserID;
updatedMediaFile.FileModifiedByUserID = mediaFile.FileModifiedByUserID;
updatedMediaFile.FileBinary = mediaFile.FileBinary;
updatedMediaFile.FileImageHeight = mediaFile.FileImageHeight;
updatedMediaFile.FileImageWidth = mediaFile.FileImageWidth;
updatedMediaFile.FileBinaryStream = mediaFile.FileBinaryStream;
return updatedMediaFile;
}
#endregion
}