using System;
using System.ComponentModel;
using System.Data;
using CMS.CMSHelper;
using CMS.Ecommerce;
using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.GlobalHelper;
using CMS.IO;
using CMS.SettingsProvider;
using CMS.SiteProvider;
public partial class CMSModules_Ecommerce_FormControls_SelectEproductFiles : FormEngineUserControl
{
string allowedExtensions = null;
private int mSKUID = 0;
private int mSiteID = -1;
#region "Properties"
///
/// Gets or sets the e-product SKU ID.
///
public int SKUID
{
get
{
if (mSKUID > 0)
{
return mSKUID;
}
return 0;
}
set
{
mSKUID = value;
}
}
///
/// Gets or sets the site ID.
///
public int SiteID
{
get
{
if (mSiteID >= 0)
{
return mSiteID;
}
return CMSContext.CurrentSiteID;
}
set
{
mSiteID = value;
}
}
///
/// Gets the e-product files count.
///
public override object Value
{
get
{
EnsureChildControls();
if (SKUID == 0)
{
return null;
}
return fileListElem.FileCount;
}
set
{
}
}
///
/// Gets or sets the value that indicates if the information and error messages are display by the control itself.
///
public bool ShowMessages
{
get
{
return plcMessages.Visible;
}
set
{
plcMessages.Visible = value;
}
}
///
/// Gets a messages placeholder control.
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
if ((Form != null) && (Form.MessagesPlaceHolder != null))
{
return Form.MessagesPlaceHolder;
}
return plcMessages;
}
}
///
/// Gets or sets the enabled state of the control.
///
public override bool Enabled
{
get
{
return base.Enabled;
}
set
{
base.Enabled = value;
fileElem.Enabled = value;
fileListElem.Enabled = value;
}
}
///
/// Gets type of ECommerce object (SKU or SKUOption).
///
public string SKUObjectType
{
get;
set;
}
#endregion
#region "Lifecycle"
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (StopProcessing)
{
fileListElem.StopProcessing = true;
return;
}
TryInitByForm();
if (SiteID == 0)
{
allowedExtensions = SettingsKeyProvider.GetStringValue("CMSUploadExtensions");
}
else if (SiteID > 0)
{
allowedExtensions = SettingsKeyProvider.GetStringValue(SiteInfoProvider.GetSiteName(SiteID) + ".CMSUploadExtensions");
}
InitUploaders();
}
#endregion
#region "Initialization"
private void TryInitByForm()
{
if (Form == null)
{
return;
}
if (Form.Data.ContainsColumn("SKUSiteID"))
{
SiteID = ValidationHelper.GetInteger(Form.Data.GetValue("SKUSiteID"), 0);
}
if (Form.Data.ContainsColumn("SKUID"))
{
SKUID = ValidationHelper.GetInteger(Form.Data.GetValue("SKUID"), 0);
}
if (Form.AdditionalData.ContainsKey("IsInCompare"))
{
Enabled = !ValidationHelper.GetBoolean(Form.AdditionalData["IsInCompare"], true);
}
if (Form.AdditionalData.ContainsKey("SKUObjectType"))
{
SKUObjectType = ValidationHelper.GetString(Form.AdditionalData["SKUObjectType"], ECommerceObjectType.SKU);
}
}
private void InitUploaders()
{
// Init the file uploader
fileElem.ObjectType = SKUObjectType;
fileElem.Category = MetaFileInfoProvider.OBJECT_CATEGORY_EPRODUCT;
fileElem.SiteID = SiteID;
fileElem.AllowedExtensions = allowedExtensions;
// Init the file list uploader
fileListElem.IsLiveSite = IsLiveSite;
fileListElem.ObjectType = SKUObjectType;
fileListElem.Category = MetaFileInfoProvider.OBJECT_CATEGORY_EPRODUCT;
fileListElem.ObjectID = SKUID;
fileListElem.SiteID = SiteID;
fileListElem.AllowedExtensions = allowedExtensions;
// Enable uploaders if user has sufficient permissions
if (ECommerceContext.IsUserAuthorizedToModifySKU(SiteID == 0))
{
fileListElem.AllowEdit = true;
fileElem.Enabled &= true;
}
if (SKUID == 0)
{
// Use the file uploader for the new e-product
plcNewProduct.Visible = true;
fileListElem.StopProcessing = true;
if (Form != null)
{
Form.OnUploadFile += delegate(object sender, EventArgs args)
{
TryInitByForm();
if ((fileElem.PostedFile != null) && (fileElem.PostedFile.ContentLength > 0))
{
int skuFileId = ProcessUploadForNewEproduct();
if (skuFileId > 0)
{
ShowChangesSaved();
}
else
{
ShowError(ErrorMessage);
}
}
};
}
}
else
{
// Use the file list uploader for the existing e-product
plcExistingProduct.Visible = true;
fileListElem.ReloadData(true);
fileElem.StopProcessing = true;
fileListElem.OnAfterUpload += delegate(object sender, EventArgs args)
{
int skuFileId = ProcessUploadForExistingEproduct();
if (skuFileId > 0)
{
ShowChangesSaved();
}
else
{
ShowError(ErrorMessage);
}
};
fileListElem.OnBeforeDelete += delegate(object sender, CancelEventArgs args)
{
bool result = ProcessDeleteForExistingEproduct();
if (result)
{
ShowChangesSaved();
}
else
{
args.Cancel = true;
ShowError(ErrorMessage);
}
};
}
}
#endregion
#region "Save"
///
/// Validates the form control and returns true if it is valid, otherwise sets the validation error message and returns false.
///
public override bool IsValid()
{
if (SKUID == 0)
{
if (!fileElem.IsValid())
{
ValidationError = fileElem.ValidationError;
return false;
}
}
return true;
}
///
/// Processes a meta file upload for a new e-product.
/// Returns the ID of the related SKU file object if it was created or updated successfully, otherwise returns 0.
///
private int ProcessUploadForNewEproduct()
{
if (SKUID == 0)
{
// SKU does not exist
return 0;
}
// Upload the file
fileElem.ObjectID = SKUID;
fileElem.UploadFile();
MetaFileInfo metaFile = fileElem.CurrentlyHandledMetaFile;
if (metaFile == null)
{
// The file was not uploaded
return 0;
}
// Create a new SKU file
SKUFileInfo skuFile = new SKUFileInfo()
{
FileSKUID = SKUID,
FileMetaFileGUID = metaFile.MetaFileGUID,
FileName = metaFile.MetaFileName,
FilePath = MetaFileInfoProvider.GetMetaFileUrl(metaFile.MetaFileGUID, metaFile.MetaFileName),
FileType = MediaSourceEnum.MetaFile.ToString()
};
SKUFileInfoProvider.SetSKUFileInfo(skuFile);
return skuFile.FileID;
}
///
/// Processes a meta file upload for an existing e-product.
/// Returns the ID of the related SKU file object if it was created or updated successfully, otherwise returns 0.
///
private int ProcessUploadForExistingEproduct()
{
if (SKUID == 0)
{
// SKU does not exist
return 0;
}
MetaFileInfo metaFile = fileListElem.CurrentlyHandledMetaFile;
SKUFileInfo skuFile = null;
DataSet skuFiles = SKUFileInfoProvider.GetSKUFiles(String.Format("FileMetaFileGUID = '{0}'", metaFile.MetaFileGUID), null);
if (DataHelper.DataSourceIsEmpty(skuFiles))
{
// Create a new SKU file
skuFile = new SKUFileInfo()
{
FileSKUID = SKUID,
FileMetaFileGUID = metaFile.MetaFileGUID
};
}
else
{
// Get an existing SKU file
skuFile = new SKUFileInfo(skuFiles.Tables[0].Rows[0]);
}
skuFile.FileName = metaFile.MetaFileName;
skuFile.FilePath = MetaFileInfoProvider.GetMetaFileUrl(metaFile.MetaFileGUID, metaFile.MetaFileName);
skuFile.FileType = MediaSourceEnum.MetaFile.ToString();
SKUFileInfoProvider.SetSKUFileInfo(skuFile);
return skuFile.FileID;
}
///
/// Checks and processes the dependencies of the meta file and related SKU file that is being deleted.
/// Returns true if the related SKU file object that is being deleted has no existing dependencies and it can be deleted, otherwise returns false.
///
private bool ProcessDeleteForExistingEproduct()
{
MetaFileInfo metaFile = fileListElem.CurrentlyHandledMetaFile;
DataSet skuFiles = SKUFileInfoProvider.GetSKUFiles(String.Format("FileMetaFileGUID = '{0}'", metaFile.MetaFileGUID), null);
if (!DataHelper.DataSourceIsEmpty(skuFiles))
{
SKUFileInfo skuFile = new SKUFileInfo(skuFiles.Tables[0].Rows[0]);
if (skuFile != null)
{
if (!SKUFileInfoProvider.CheckDependencies(skuFile))
{
SKUFileInfoProvider.DeleteSKUFileInfo(skuFile);
}
else
{
ErrorMessage = GetString("ecommerce.deletedisabled");
return false;
}
}
}
return true;
}
#endregion
}