using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.DataEngine; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.UIControls; using CMS.ExtendedControls; public partial class CMSModules_SystemTables_Controls_Views_SQLList : CMSUserControl { #region "Private variables" private bool mViews = true; #endregion #region "Public properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { plcMess.IsLiveSite = value; base.IsLiveSite = value; } } public bool Views { get { return mViews; } set { mViews = value; } } public string EditPage { get; set; } #endregion protected void Page_Load(object sender, EventArgs e) { if (Views) { gridViews.GridName = "~/CMSModules/SystemTables/Controls/Views/Views_List.xml"; fltViews.Column = "TABLE_NAME"; gridViews.OrderBy = "IsCustom DESC, TABLE_NAME ASC"; } else { gridViews.GridName = "~/CMSModules/SystemTables/Controls/Views/Procedures_List.xml"; fltViews.Column = "ROUTINE_NAME"; gridViews.OrderBy = "IsCustom DESC, ROUTINE_NAME ASC"; } gridViews.OnAction += new OnActionEventHandler(gridViews_OnAction); gridViews.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridViews_OnExternalDataBound); if (drpCustom.Items.Count <= 0) { drpCustom.Items.Add(new ListItem(GetString("general.any"), "")); drpCustom.Items.Add(new ListItem(GetString("general.yes"), "1")); drpCustom.Items.Add(new ListItem(GetString("general.no"), "0")); } ReloadData(); } /// /// Reloads grid. /// public void ReloadData() { string where = null; if (!String.IsNullOrEmpty(drpCustom.SelectedValue)) { switch (drpCustom.SelectedValue) { case "1": where = "{0} LIKE '{1}%'"; break; case "0": where = "{0} NOT LIKE '{1}%'"; break; } if (Views) { where = String.Format(where, "TABLE_NAME", "View_Custom_"); } else { where = String.Format(where, "ROUTINE_NAME", "Proc_Custom_"); } } where = SqlHelperClass.AddWhereCondition(where, fltViews.GetCondition()); TableManager tm = new TableManager(null); if (Views) { gridViews.DataSource = tm.GetList(where, "TABLE_NAME, TABLE_SCHEMA, IsCustom=CASE SUBSTRING(TABLE_NAME,0,13) WHEN 'View_Custom_' THEN 1 ELSE 0 END", true); } else { where = SqlHelperClass.AddWhereCondition(where, "ROUTINE_TYPE LIKE 'PROCEDURE'"); gridViews.DataSource = tm.GetList(where, "ROUTINE_NAME, ROUTINE_SCHEMA, IsCustom=CASE SUBSTRING(ROUTINE_NAME,0,13) WHEN 'Proc_Custom_' THEN 1 ELSE 0 END", false); } } #region "Events" protected void btnShow_Click(object sender, EventArgs e) { ReloadData(); } #endregion #region "GridView handling" private void gridViews_OnAction(string actionName, object actionArgument) { string objName = null; switch (actionName) { // Editing of the item was fired case "edit": if (!String.IsNullOrEmpty(EditPage)) { // Get object name objName = ValidationHelper.GetString(actionArgument, null); if (!String.IsNullOrEmpty(objName)) { string query = "?objname=" + HTMLHelper.HTMLEncode(objName); query += "&hash=" + QueryHelper.GetHash(query, true); URLHelper.Redirect(EditPage + query); } } break; // Deleting of the item was fired case "delete": objName = ValidationHelper.GetString(actionArgument, null); try { TableManager tm = new TableManager(null); tm.DeleteObject(objName, Views); ReloadData(); ShowConfirmation(GetString("sysdev.views.objectdeleted")); } catch (Exception e) { ShowError(e.Message); } break; case "refresh": objName = ValidationHelper.GetString(actionArgument, null); if (!String.IsNullOrEmpty(objName)) { TableManager tm = new TableManager(null); tm.RefreshView(objName); ShowConfirmation(GetString("sysdev.views.viewrefreshed")); } break; default: return; } } private object gridViews_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "iscustom": bool isCustom = ValidationHelper.GetBoolean(parameter, false); return UniGridFunctions.ColoredSpanYesNo(isCustom); case "delete": if (!SettingsKeyProvider.DevelopmentMode) { // Disable "delete" button for system objects bool delete = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["IsCustom"], false); if (!delete) { ImageButton button = ((ImageButton)sender); button.Attributes.Add("src", GetImageUrl("Design/Controls/UniGrid/Actions/DeleteDisabled.png")); button.Enabled = false; } } break; } return sender; } #endregion /// /// Refresh all views. /// public void RefresViews() { if (Views) { DataSet ds = (DataSet)gridViews.DataSource; if (!DataHelper.DataSourceIsEmpty(ds)) { TableManager tm = new TableManager(null); foreach (DataRow dr in ds.Tables[0].Rows) { tm.RefreshView(ValidationHelper.GetString(dr["TABLE_NAME"], null)); } } } } }