using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.DataEngine; using CMS.ExtendedControls; using CMS.ExtendedControls.ActionsConfig; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.UIControls; using CMS.UIControls.UniGridConfig; public partial class CMSModules_BizForms_Controls_BizFormEditData : CMSAdminEditControl { #region "Variables" protected int formId = 0; protected BizFormInfo bfi = null; protected DataClassInfo dci = null; protected FormInfo mFormInfo = null; protected bool mShowNewRecordButton = true; protected bool mShowSelectFieldsButton = true; protected string className = null; protected string primaryColumn = null; protected string columnNames = null; private bool isDialog = false; #endregion #region "Properties" /// /// Gets the form info. /// private FormInfo FormInfo { get { if (mFormInfo == null) { if (dci != null) { mFormInfo = FormHelper.GetFormInfo(dci.ClassName, false); } } return mFormInfo; } } /// /// Gets or sets the value that indicates whether New Record button should be visible. /// public bool ShowNewRecordButton { get { return mShowNewRecordButton; } set { mShowNewRecordButton = value; } } /// /// Gets or sets the value that indicates whether Select Fields button should be visible. /// public bool ShowSelectFieldsButton { get { return mShowSelectFieldsButton; } set { mShowSelectFieldsButton = value; } } #endregion #region "Methods" protected void Page_Init(object sender, EventArgs e) { // Get edited object if (CMSContext.EditedObject != null) { bfi = (BizFormInfo)CMSContext.EditedObject; formId = bfi.FormID; } isDialog = QueryHelper.GetBoolean("dialogmode", false); InitHeaderActions(); } protected void Page_Load(object sender, EventArgs e) { // Check 'ReadData' permission CheckPermissions("ReadData"); // Register scripts ScriptHelper.RegisterDialogScript(Page); if (mShowSelectFieldsButton) { ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "SelectFields", ScriptHelper.GetScript("function SelectFields() { modalDialog('" + ResolveUrl("~/CMSModules/BizForms/Tools/BizForm_Edit_Data_SelectFields.aspx") + "?formid=" + formId + "' ,'BizFormFields', 500, 500); }")); } ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "Edit", ScriptHelper.GetScript( "function EditRecord(formId, recordId) { " + " document.location.replace('" + ResolveUrl("~/CMSModules/BizForms/Tools/BizForm_Edit_EditRecord.aspx") + "?formID=' + formId + '&formRecordID=' + recordId); } ")); // Initialize unigrid gridData.OnExternalDataBound += gridData_OnExternalDataBound; gridData.OnLoadColumns += gridData_OnLoadColumns; gridData.OnAction += gridData_OnAction; if (bfi != null) { dci = DataClassInfoProvider.GetDataClass(bfi.FormClassID); if (dci != null) { className = dci.ClassName; // Set alternative form and data container gridData.ObjectType = BizFormItemProvider.GetObjectType(className); gridData.FilterFormName = className + "." + "filter"; gridData.FilterFormData = bfi; // Get primary column name gridData.OrderBy = primaryColumn = GetPrimaryColumn(FormInfo, bfi.FormName); } } } /// /// Initializes header action control. /// private void InitHeaderActions() { if (mShowNewRecordButton) { AddHeaderAction(new HeaderAction() { Text = GetString("bizform_edit_data.newrecord"), RedirectUrl = ResolveUrl("~/CMSModules/BizForms/Tools/BizForm_Edit_EditRecord.aspx?formid=" + formId.ToString()), ImageUrl = GetImageUrl("CMSModules/CMS_Form/newrecord.png") }); } if (ShowSelectFieldsButton) { AddHeaderAction(new HeaderAction() { Text = GetString("bizform_edit_data.selectdisplayedfields"), OnClientClick = "javascript:SelectFields();", ImageUrl = GetImageUrl("CMSModules/CMS_Form/selectfields16.png") }); } } protected void gridData_OnAction(string actionName, object actionArgument) { switch (actionName.ToLowerCSafe()) { case "delete": CheckPermissions("DeleteData"); // Get record ID int formRecordID = ValidationHelper.GetInteger(actionArgument, 0); // Get BizFormInfo object if (bfi != null) { // Get class object if (dci != null) { // Get record object IDataClass formRecord = DataClassFactory.NewDataClass(dci.ClassName, formRecordID); if (!formRecord.IsEmpty()) { // Delete all files of the record BizFormInfoProvider.DeleteBizFormRecordFiles(dci.ClassFormDefinition, formRecord, CMSContext.CurrentSiteName); // Delete the form record formRecord.Delete(); // Update number of entries in BizFormInfo if (bfi != null) { BizFormInfoProvider.RefreshDataCount(bfi.FormName, bfi.FormSiteID); } } } } break; } } protected object gridData_OnExternalDataBound(object sender, string sourceName, object parameter) { ImageButton button = sender as ImageButton; GridViewRow grv = parameter as GridViewRow; DataRowView drv = grv.DataItem as DataRowView; switch (sourceName.ToLowerCSafe()) { case "edit": if (button != null) { if (!isDialog) { button.OnClientClick = "EditRecord(" + formId + ", " + drv[primaryColumn] + "); return false;"; } else { button.Visible = false; } } break; case "delete": if (button != null) { button.CommandArgument = Convert.ToString(drv[primaryColumn]); } break; } return parameter; } protected void gridData_OnLoadColumns() { if (bfi != null) { var columnList = new List(); string columns = bfi.FormReportFields; if (string.IsNullOrEmpty(columns)) { columnList = GetExistingColumns(); } else { // Get existing columns names var existingColumns = GetExistingColumns(); // Get selected columns var selectedColumns = GetSelectedColumns(columns); columns = string.Empty; columnNames = string.Empty; StringBuilder sb = new StringBuilder(); // Remove nonexisting columns foreach (string col in selectedColumns) { if (existingColumns.Contains(col)) { columnList.Add(col); sb.Append(",[").Append(col).Append("]"); } } columnNames = sb.ToString(); // Ensure primary key if (!(columnNames.Contains(primaryColumn) || columnNames.Contains(primaryColumn))) { columnNames = ",[" + primaryColumn + "]" + columnNames; } columnNames = columnNames.TrimStart(','); } string column = null; string fieldCaption = null; FormFieldInfo ffi = null; // Loop trough all columns for (int i = 0; i < columnList.Count; i++) { column = columnList[i].ToString(); // Get field caption ffi = FormInfo.GetFormField(column); if (ffi == null) { fieldCaption = column; } else { fieldCaption = (string.IsNullOrEmpty(ffi.Caption)) ? column : ResHelper.LocalizeString(ffi.Caption); } Column columnDefinition = new Column { Caption = fieldCaption, Source = column, AllowSorting = true, Wrap = false }; if (i == columnList.Count - 1) { // Stretch last column columnDefinition.Width = "100%"; } gridData.GridColumns.Columns.Add(columnDefinition); } } } /// /// Overridden SetValue. /// /// Name of the property to set /// Value to set public override void SetValue(string propertyName, object value) { base.SetValue(propertyName, value); switch (propertyName.ToLowerCSafe()) { case "shownewrecordbutton": ShowNewRecordButton = ValidationHelper.GetBoolean(value, false); break; case "showselectfieldsbutton": ShowSelectFieldsButton = ValidationHelper.GetBoolean(value, false); break; } } /// /// Checks the specified permission. /// private void CheckPermissions(string permissionName) { // Check 'Modify' permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.form", permissionName)) { CMSPage.RedirectToCMSDeskAccessDenied("cms.form", permissionName); } } /// /// Get form columns. /// private List GetExistingColumns() { return FormInfo.GetColumnNames(); } /// /// Get list of columns that have been selected to be visible. /// /// Selected columns private List GetSelectedColumns(string columns) { return columns.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList(); } /// /// Returns name of the primary key column. /// /// Form info /// Bizform code name private static string GetPrimaryColumn(FormInfo fi, string bizFormName) { string result = null; if ((fi != null) && (!string.IsNullOrEmpty(bizFormName))) { // Seek primary key column in all fields var query = from field in fi.GetFields(true, true) where field.PrimaryKey == true select field.Name; // Try to get field with the name 'bizformnameID' result = query.FirstOrDefault(x => x.ToLowerCSafe() == (bizFormName + "ID").ToLowerCSafe()); if (String.IsNullOrEmpty(result)) { result = query.FirstOrDefault(); } } return result; } #endregion }