using System;
using System.Collections.Generic;
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.ExtendedControls;
using CMS.GlobalHelper;
using CMS.UIControls;
public partial class CMSModules_AdminControls_Controls_MetaFiles_FileUploader : CMSUserControl
{
#region "Variables"
///
/// Resource string for "Add another file" link.
///
private string strRemove = null;
///
/// List containing all uploader controls.
///
private List uploadersList = null;
private int mMaxUploadFields = 5;
private int mDefaultUploadFields = 0;
private string mAddButtonImagePath = null;
#endregion
#region "Properties"
///
/// Gets or sets the path to the image displayed next to add attachment link.
///
public string AddButtonImagePath
{
get
{
return mAddButtonImagePath;
}
set
{
mAddButtonImagePath = value;
}
}
///
/// Gets or sets the maximal allowed number of uploaders.
///
public int MaxUploadFields
{
get
{
return mMaxUploadFields;
}
set
{
mMaxUploadFields = value;
}
}
///
/// Gets or sets the number of displayed files after the control is initialized.
///
public int DefaultUploadFields
{
get
{
return mDefaultUploadFields;
}
set
{
mDefaultUploadFields = value;
}
}
///
/// Gets the array of posted files from uploaders.
///
public HttpPostedFile[] PostedFiles
{
get
{
List retval = new List();
foreach (CMSFileUpload uploader in uploadersList)
{
if (uploader.HasFile)
{
retval.Add(uploader.PostedFile);
}
}
return retval.ToArray();
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
// Hide everything and do nothing when no uploaders should be displayed
if (mMaxUploadFields < 1)
{
pnlAdd.Visible = false;
pnlUploaders.Visible = false;
return;
}
strRemove = GetString("general.remove");
// Initialize the list
uploadersList = new List(mMaxUploadFields);
// Generate the controls dynamically and initialize JS variables
GenerateUploaders();
if (String.IsNullOrEmpty(mAddButtonImagePath))
{
imgAdd.Visible = false;
}
else
{
imgAdd.ImageUrl = mAddButtonImagePath;
}
lnkAdd.NavigateUrl = "#";
lnkAdd.Attributes.Add("onclick", "addFile(); return false;");
}
///
/// Generates the uploaders, saves them to the hastable and returns ClientID of the first uploader
/// which should be visible when "Add file" link is clicked.
///
private void GenerateUploaders()
{
string availableUploaders = "";
string visibleUploaders = "";
// Maximum visible field at the begenning is the smaller number of those two
int stillVisible = Math.Min(mMaxUploadFields, mDefaultUploadFields);
for (int i = 0; i < mMaxUploadFields; i++)
{
// Create new panel and put it to page
Panel pnlUploader = new Panel();
pnlUploaders.Controls.Add(pnlUploader);
CMSFileUpload uploader = new CMSFileUpload();
pnlUploader.Controls.Add(uploader);
uploadersList.Add(uploader);
pnlUploader.Controls.Add(new LiteralControl(" "));
HyperLink lnkRemove = new HyperLink();
lnkRemove.Text = strRemove;
lnkRemove.CssClass = "NewItemLink";
lnkRemove.NavigateUrl = "#";
lnkRemove.Attributes.Add("onclick", "removeFile('" + pnlUploader.ClientID + "', '" + uploader.ClientID + "'); return false;");
pnlUploader.Controls.Add(lnkRemove);
// Set correct visibility
if (stillVisible > 0)
{
pnlUploader.Attributes.Add("style", "display: block;");
visibleUploaders += ", '" + pnlUploader.ClientID + "'";
stillVisible--;
}
else
{
availableUploaders += ", '" + pnlUploader.ClientID + "'";
pnlUploader.Attributes.Add("style", "display: none;");
}
}
visibleUploaders = visibleUploaders.Trim(',');
availableUploaders = availableUploaders.Trim(',');
// Initialize JS variables
ltlScript.Text += ScriptHelper.GetScript(
"var addLinkElemPanel = document.getElementById('" + pnlAdd.ClientID + "');\n" +
"var addLinkElem = document.getElementById('" + lnkAdd.ClientID + "'); \n\n" +
"var strAddAnotherFile = '" + GetString("fileuploader.addanotherfile") + "'; \n" +
"var strAttachFile = '" + GetString("fileuploader.attachfile") + "'; \n\n" +
"var uploadersVisible = new Array(" + visibleUploaders + "); \n" +
"var uploadersAvailable = new Array(" + availableUploaders + "); \n\n" +
"reorderUploaders(); \n\n");
}
}