using System;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.IO;
using CMS.PortalEngine;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.EventLog;
using CMS.CMSHelper;
using CMS.DataEngine;
public partial class CMSModules_PortalEngine_UI_WebParts_Development_WebPart_New : SiteManagerPage
{
#region "Variables"
private string[,] pageTitleTabs = new string[3, 4];
#endregion
protected void Page_Load(object sender, EventArgs e)
{
CurrentMaster.DisplaySiteSelectorPanel = true;
// Setup page title text and image
CurrentMaster.Title.TitleText = GetString("Development-WebPart_Edit.TitleNew");
CurrentMaster.Title.TitleImage = GetImageUrl("Objects/CMS_WebPart/new.png");
CurrentMaster.Title.HelpTopicName = "new_web_part";
CurrentMaster.Title.HelpName = "helpTopic";
// Initialize
btnOk.Text = GetString("general.ok");
rfvWebPartDisplayName.ErrorMessage = GetString("Development-WebPart_Edit.ErrorDisplayName");
rfvWebPartName.ErrorMessage = GetString("Development-WebPart_Edit.ErrorWebPartName");
webpartSelector.ShowInheritedWebparts = false;
lblWebpartList.Text = GetString("DevelopmentWebPartEdit.InheritedWebPart");
// Set breadcrumbs
int i = 0;
pageTitleTabs[i, 0] = GetString("Development-WebPart_Edit.WebParts");
pageTitleTabs[i, 1] = URLHelper.ResolveUrl("~/CMSModules/PortalEngine/UI/WebParts/Development/Category_Frameset.aspx");
pageTitleTabs[i, 2] = "";
pageTitleTabs[i, 3] = "if (parent.frames['webparttree']) { parent.frames['webparttree'].location.href = '" + URLHelper.ResolveUrl("~/CMSModules/PortalEngine/UI/WebParts/Development/WebPart_Tree.aspx") + "'; }";
i++;
int parentid = QueryHelper.GetInteger("parentid", 0);
WebPartCategoryInfo categoryInfo = WebPartCategoryInfoProvider.GetWebPartCategoryInfoById(parentid);
// Check if the parent category is a root category, if not => display both (root + parent)
if ((categoryInfo != null) && (categoryInfo.CategoryParentID != 0))
{
// Add a category tab
pageTitleTabs[i, 0] = HTMLHelper.HTMLEncode(categoryInfo.CategoryDisplayName);
pageTitleTabs[i, 1] = URLHelper.ResolveUrl("~/CMSModules/PortalEngine/UI/WebParts/Development/Category_Frameset.aspx") + "?categoryid=" + categoryInfo.CategoryID;
pageTitleTabs[i, 2] = "";
i++;
}
pageTitleTabs[i, 0] = GetString("Development-WebPart_Edit.New");
pageTitleTabs[i, 1] = "";
pageTitleTabs[i, 2] = "";
CurrentMaster.Title.Breadcrumbs = pageTitleTabs;
FileSystemDialogConfiguration config = new FileSystemDialogConfiguration();
config.DefaultPath = "CMSWebParts";
config.AllowedExtensions = "ascx";
config.ShowFolders = false;
FileSystemSelector.DialogConfig = config;
FileSystemSelector.AllowEmptyValue = false;
FileSystemSelector.SelectedPathPrefix = "~/CMSWebParts/";
}
///
/// Handles radio buttons change.
///
protected void radNewWebPart_CheckedChanged(object sender, EventArgs e)
{
plcFileName.Visible = radNewWebPart.Checked;
plcWebparts.Visible = radInherited.Checked;
}
///
/// Creates new web part.
///
protected void btnOK_Click(object sender, EventArgs e)
{
// Validate the text box fields
string errorMessage = new Validator().IsCodeName(txtWebPartName.Text, GetString("general.invalidcodename")).Result;
// Check file name
if (!chkGenerateFiles.Checked && radNewWebPart.Checked)
{
if (errorMessage == String.Empty)
{
string webpartPath = GetWebPartPhysicalPath(FileSystemSelector.Value.ToString());
if (!radInherited.Checked)
{
errorMessage = new Validator().IsFileName(Path.GetFileName(webpartPath), GetString("WebPart_Clone.InvalidFileName")).Result;
}
}
}
if (errorMessage != String.Empty)
{
ShowError(HTMLHelper.HTMLEncode(errorMessage));
return;
}
// Run in transaction
using (var tr = new CMSTransactionScope())
{
WebPartInfo wi = new WebPartInfo();
// Check if new name is unique
WebPartInfo webpart = WebPartInfoProvider.GetWebPartInfo(txtWebPartName.Text);
if (webpart != null)
{
ShowError(GetString("Development.WebParts.WebPartNameAlreadyExist").Replace("%%name%%", txtWebPartName.Text));
return;
}
string filename = FileSystemSelector.Value.ToString().Trim();
if (filename.ToLowerCSafe().StartsWithCSafe("~/cmswebparts/"))
{
filename = filename.Substring("~/cmswebparts/".Length);
}
wi.WebPartDisplayName = txtWebPartDisplayName.Text.Trim();
wi.WebPartFileName = filename;
wi.WebPartName = txtWebPartName.Text.Trim();
wi.WebPartCategoryID = QueryHelper.GetInteger("parentid", 0);
wi.WebPartDescription = "";
wi.WebPartDefaultValues = "
";
// Initialize WebPartType - fill it with the default value
wi.WebPartType = wi.WebPartType;
// Inherited web part
if (radInherited.Checked)
{
// Check if is selected webpart and isn't category item
if (ValidationHelper.GetInteger(webpartSelector.Value, 0) <= 0)
{
ShowError(GetString("WebPartNew.InheritedCategory"));
return;
}
int parentId = ValidationHelper.GetInteger(webpartSelector.Value, 0);
var parent = WebPartInfoProvider.GetWebPartInfo(parentId);
if (parent != null)
{
wi.WebPartType = parent.WebPartType;
wi.WebPartResourceID = parent.WebPartResourceID;
wi.WebPartSkipInsertProperties = parent.WebPartSkipInsertProperties;
}
wi.WebPartParentID = parentId;
// Create empty default values definition
wi.WebPartProperties = "";
}
else
{
// Check if filename was added
if (!FileSystemSelector.IsValid())
{
ShowError(FileSystemSelector.ValidationError);
return;
}
else
{
wi.WebPartProperties = "";
wi.WebPartParentID = 0;
}
}
// Save the web part
WebPartInfoProvider.SetWebPartInfo(wi);
if (chkGenerateFiles.Checked && radNewWebPart.Checked)
{
string physicalFile = WebPartInfoProvider.GetFullPhysicalPath(wi);
if (!File.Exists(physicalFile))
{
string ascx = null;
string code = null;
string designer = null;
// Write the files
try
{
CodeTemplateGenerator.GenerateWebPartCode(wi, null, out ascx, out code, out designer);
string folder = Path.GetDirectoryName(physicalFile);
// Ensure the folder
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
File.WriteAllText(physicalFile, ascx);
File.WriteAllText(physicalFile + ".cs", code);
// Designer file
if (!String.IsNullOrEmpty(designer))
{
File.WriteAllText(physicalFile + ".designer.cs", designer);
}
}
catch (Exception ex)
{
LogAndShowError("WebParts", "GENERATEFILES", ex, true);
return;
}
}
else
{
ShowError(String.Format(GetString("General.FileExistsPath"), physicalFile));
return;
}
}
// Refresh web part tree
ScriptHelper.RegisterStartupScript(this, typeof(string), "reloadframe", ScriptHelper.GetScript(
"parent.frames['webparttree'].location.replace('" + URLHelper.ResolveUrl("~/CMSModules/PortalEngine/UI/WebParts/Development/WebPart_Tree.aspx") + "?webpartid=" + wi.WebPartID + "');" +
"location.replace('" + URLHelper.ResolveUrl("~/CMSModules/PortalEngine/UI/WebParts/Development/WebPart_Edit_Frameset.aspx") + "?webpartid=" + wi.WebPartID + "')"
));
pageTitleTabs[1, 0] = HTMLHelper.HTMLEncode(wi.WebPartDisplayName);
CurrentMaster.Title.Breadcrumbs = pageTitleTabs;
ShowChangesSaved();
plcTable.Visible = false;
tr.Commit();
}
}
private string GetWebPartPhysicalPath(string webpartPath)
{
webpartPath = webpartPath.Trim();
if (webpartPath.StartsWithCSafe("~/"))
{
return Server.MapPath(webpartPath);
}
string fileName = webpartPath.Trim('/').Replace('/', '\\');
return Path.Combine(Server.MapPath(WebPartInfoProvider.WebPartsDirectory), fileName);
}
}