using System;
using System.Data;
using System.Web.UI;
using CMS.CMSHelper;
using CMS.ExtendedControls;
using CMS.FormEngine;
using CMS.GlobalHelper;
using CMS.Reporting;
using CMS.SettingsProvider;
using CMS.Synchronization;
using CMS.UIControls;
public partial class CMSModules_Reporting_Tools_ReportValue_Edit : CMSReportingModalPage
{
#region "Variables"
protected ReportValueInfo valueInfo = null;
protected int valueId;
protected ReportInfo reportInfo = null;
private bool newValue = false;
#endregion
#region "Properties"
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
///
/// Tab state (edit, preview, version)
///
private int SelectedTab
{
get
{
return ValidationHelper.GetInteger(hdnSelectedTab.Value, 0);
}
set
{
hdnSelectedTab.Value = value.ToString();
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
ucSelectString.Scope = PredefinedObjectType.REPORT;
ConnectionStringRow.Visible = CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "SetConnectionString");
txtQuery.FullScreenParentElementID = pnlWebPartForm_Properties.ClientID;
// Test permission for query
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries"))
{
txtQuery.Enabled = false;
}
else
{
txtQuery.Enabled = true;
}
versionList.OnAfterRollback += new EventHandler(versionList_onAfterRollback);
string[,] tabs = new string[4, 4];
tabs[0, 0] = GetString("general.general");
tabs[0, 1] = "SetHelpTopic('helpTopic', 'report_value_properties')";
tabs[1, 0] = GetString("general.preview");
tabs[0, 1] = "SetHelpTopic('helpTopic', 'report_value_properties')";
tabControlElem.Tabs = tabs;
tabControlElem.UsePostback = true;
CurrentMaster.Title.HelpName = "helpTopic";
CurrentMaster.Title.HelpTopicName = "report_value_properties";
CurrentMaster.Title.TitleCssClass = "PageTitleHeader";
// Own javascript tab change handling -> because tab control raises changetab after prerender - too late
// Own selected tab change handling
RegisterTabScript(hdnSelectedTab.ClientID, tabControlElem);
RegisterResizeAndRollbackScript(divFooter.ClientID, divScrolable.ClientID);
rfvCodeName.ErrorMessage = GetString("general.requirescodename");
rfvDisplayName.ErrorMessage = GetString("general.requiresdisplayname");
int reportId = QueryHelper.GetInteger("reportid", 0);
bool preview = QueryHelper.GetBoolean("preview", false);
if (reportId > 0)
{
reportInfo = ReportInfoProvider.GetReportInfo(reportId);
}
if (reportInfo != null) //must be valid reportid parameter
{
ucSelectString.DefaultConnectionString = reportInfo.ReportConnectionString;
// If preview by URL -> select preview tab
bool isPreview = QueryHelper.GetBoolean("preview", false);
if (isPreview && !RequestHelper.IsPostBack())
{
SelectedTab = 1;
}
if (PersistentEditedObject == null)
{
int id = QueryHelper.GetInteger("itemid", 0);
if (id > 0)
{
PersistentEditedObject = ReportValueInfoProvider.GetReportValueInfo(id);
valueInfo = PersistentEditedObject as ReportValueInfo;
}
}
else
{
valueInfo = PersistentEditedObject as ReportValueInfo;
}
if (valueInfo != null)
{
CurrentMaster.Title.TitleText = GetString("Reporting_ReportValue_Edit.TitleText");
CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportValue/object_light.png");
valueId = valueInfo.ValueID;
if (ObjectVersionManager.DisplayVersionsTab(valueInfo))
{
tabs[2, 0] = GetString("objectversioning.tabtitle");
tabs[2, 1] = "SetHelpTopic('helpTopic', 'objectversioning_general');";
versionList.Object = valueInfo;
versionList.IsLiveSite = false;
}
}
else //new item
{
CurrentMaster.Title.TitleText = GetString("Reporting_ReportValue_Edit.NewItemTitleText");
CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportValue/new_light.png");
chkSubscription.Checked = true;
newValue = true;
if (!RequestHelper.IsPostBack())
{
ucSelectString.Value = String.Empty;
}
}
// set help key
CurrentMaster.Title.HelpTopicName = "report_value_properties";
if (!RequestHelper.IsPostBack())
{
LoadData();
}
}
else
{
btnOk.Visible = false;
ShowError(GetString("Reporting_ReportValue_Edit.InvalidReportId"));
}
btnOk.Text = GetString("General.OK");
btnCancel.Text = GetString("General.Cancel");
btnApply.Text = GetString("General.Apply");
if (preview && !RequestHelper.IsPostBack())
{
tabControlElem.SelectedTab = 1;
ShowPreview();
}
}
///
/// PreRender event handler.
///
protected override void OnPreRender(EventArgs e)
{
// Set correct help topic
Control pbCtrl = ControlsHelper.GetPostBackControl(this);
if ((tabControlElem.SelectedTab == 2) && ((pbCtrl != null) && !pbCtrl.ClientID.StartsWithCSafe(tabControlElem.ClientID)))
{
ScriptHelper.RegisterStartupScript(this, typeof(string), "SetTabHelpTopic", ScriptHelper.GetScript("SetHelpTopic('helpTopic', 'objectversioning_general');"));
HideActionButtons();
}
else
{
ShowActionButtons();
}
divScrolable.CssClass = (tabControlElem.SelectedTab == 0) ? "ScrollableContent" : "";
base.OnPreRender(e);
}
///
/// Load data from db.
///
protected void LoadData()
{
if (valueInfo != null)
{
txtDisplayName.Text = valueInfo.ValueDisplayName;
txtCodeName.Text = valueInfo.ValueName;
txtQuery.Text = valueInfo.ValueQuery;
chkIsProcedure.Checked = valueInfo.ValueQueryIsStoredProcedure;
txtFormatString.Text = valueInfo.ValueFormatString;
chkSubscription.Checked = ValidationHelper.GetBoolean(valueInfo.ValueSettings["SubscriptionEnabled"], true);
ucSelectString.Value = valueInfo.ValueConnectionString;
}
}
///
/// Saves the data and close the editor.
///
/// Button save
/// Params
protected void btnOK_Click(object sender, EventArgs e)
{
if (Save(true))
{
ltlScript.Text += ScriptHelper.GetScript("RefreshContent();CloseDialog();");
}
else
{
tabControlElem.SelectedTab = 0;
pnlPreview.Visible = false;
divPanelHolder.Visible = true;
categoryList.Visible = true;
}
}
///
/// Apply data changes.
///
/// Button apply
/// Params
protected void btnApply_Click(object sender, EventArgs e)
{
if (!Save(true))
{
tabControlElem.SelectedTab = 0;
pnlPreview.Visible = false;
divPanelHolder.Visible = true;
categoryList.Visible = true;
}
else
// Redirect for new reports
if (newValue)
{
URLHelper.Redirect(ResolveUrl("~/CMSModules/Reporting/Tools/ReportValue_Edit.aspx?reportId=" + valueInfo.ValueReportID + "&itemId=" + valueInfo.ValueID));
}
}
///
/// Save data.
///
/// return true if save was successful
protected bool Save(bool save)
{
string errorMessage = String.Empty;
if (save)
{
// Check 'Modify' permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "Modify"))
{
RedirectToAccessDenied("cms.reporting", "Modify");
}
errorMessage = new Validator()
.NotEmpty(txtDisplayName.Text, rfvDisplayName.ErrorMessage)
.NotEmpty(txtCodeName.Text, rfvCodeName.ErrorMessage)
.NotEmpty(txtQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result;
if ((errorMessage == "") && (!ValidationHelper.IsIdentifier(txtCodeName.Text.Trim())))
{
errorMessage = GetString("general.erroridentifierformat");
}
string fullName = reportInfo.ReportName + "." + txtCodeName.Text.Trim();
ReportValueInfo codeNameCheck = ReportValueInfoProvider.GetReportValueInfo(fullName);
if ((errorMessage == "") && (codeNameCheck != null) && (codeNameCheck.ValueID != valueId))
{
errorMessage = GetString("Reporting_ReportValue_Edit.ErrorCodeNameExist");
}
}
//test query in all cases
if (!save)
{
errorMessage = new Validator().NotEmpty(txtQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result;
}
if ((errorMessage == ""))
{
//new Value
if (valueInfo == null)
{
valueInfo = new ReportValueInfo();
}
valueInfo.ValueDisplayName = txtDisplayName.Text.Trim();
valueInfo.ValueName = txtCodeName.Text.Trim();
if (CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries"))
{
valueInfo.ValueQuery = txtQuery.Text.Trim();
}
valueInfo.ValueQueryIsStoredProcedure = chkIsProcedure.Checked;
valueInfo.ValueFormatString = txtFormatString.Text.Trim();
valueInfo.ValueReportID = reportInfo.ReportID;
valueInfo.ValueSettings["SubscriptionEnabled"] = chkSubscription.Checked.ToString();
valueInfo.ValueConnectionString = ValidationHelper.GetString(ucSelectString.Value, String.Empty);
if (save)
{
ReportValueInfoProvider.SetReportValueInfo(valueInfo);
}
}
else
{
ShowError(errorMessage);
return false;
}
return true;
}
///
/// Show preview.
///
private void ShowPreview()
{
if (reportInfo != null)
{
pnlPreview.Visible = true;
divPanelHolder.Visible = false;
categoryList.Visible = false;
pnlVersions.Visible = false;
FormInfo fi = new FormInfo(reportInfo.ReportParameters);
// Get datarow with required columns
DataRow dr = fi.GetDataRow();
fi.LoadDefaultValues(dr, true);
//reportGraph.ContextParameters
ctrlReportValue.ReportParameters = dr;
ctrlReportValue.Visible = true;
ctrlReportValue.ValueInfo = valueInfo;
ctrlReportValue.ReloadData(true);
}
}
///
/// Hide buttons that are connected with reporting object.
///
private void HideActionButtons()
{
btnApply.Visible = false;
btnOk.Visible = false;
btnCancel.Text = GetString("general.close");
}
///
/// Show buttons that are connected with reporting object.
///
private void ShowActionButtons()
{
btnApply.Visible = true;
btnOk.Visible = true;
btnCancel.Text = GetString("general.cancel");
}
///
/// Tab change.
///
/// Tab control
/// Event params
protected void tabControlElem_clicked(object sender, EventArgs ea)
{
ShowActionButtons();
divScrolable.CssClass = "";
if (tabControlElem.SelectedTab == 2)
{
divPanelHolder.Visible = false;
categoryList.Visible = false;
pnlPreview.Visible = false;
if (valueInfo != null)
{
pnlVersions.Visible = true;
ScriptHelper.RegisterStartupScript(this, typeof(string), "SetTabHelpTopic", ScriptHelper.GetScript("SetHelpTopic('helpTopic', 'objectversioning_general');"));
}
HideActionButtons();
}
else if (tabControlElem.SelectedTab == 1)
{
//createGraphImage
if (Save(false))
{
ShowPreview();
}
else
{
tabControlElem.SelectedTab = 0;
divScrolable.CssClass = "ScrollableContent";
}
}
else
{
divScrolable.CssClass = "ScrollableContent";
pnlPreview.Visible = false;
pnlVersions.Visible = false;
divPanelHolder.Visible = true;
categoryList.Visible = true;
}
}
///
/// Get info from PersistentEditedObject and reload data
///
private void ReloadDataAfrterRollback()
{
// Load rollbacked info
GeneralizedInfo gi = PersistentEditedObject as GeneralizedInfo;
if (gi != null)
{
valueInfo = gi.MainObject as ReportValueInfo;
}
LoadData();
}
protected void versionList_onAfterRollback(object sender, EventArgs e)
{
ReloadDataAfrterRollback();
}
}