using System; using System.Collections; using System.Data; using System.Security.Principal; using System.Threading; using CMS.DataEngine; using CMS.EventLog; using CMS.GlobalHelper; using CMS.OnlineMarketing; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_ContactManagement_Pages_Tools_Activities_Activity_Delete : CMSContactManagementActivitiesPage { #region "Variables" private Hashtable mParameters = null; private static readonly Hashtable mErrors = new Hashtable(); private string mReturnScript = null; private int mSiteID; private int mContactID; #endregion #region "Properties" /// /// Hashtable containing dialog parameters. /// private Hashtable Parameters { get { if (mParameters == null) { string identifier = QueryHelper.GetString("params", null); mParameters = (Hashtable)WindowHelper.GetItem(identifier); } return mParameters; } } /// /// Current log context. /// public LogContext CurrentLog { get { return EnsureLog(); } } /// /// Current Error. /// private string CurrentError { get { return ValidationHelper.GetString(mErrors["DeleteError_" + ctlAsync.ProcessGUID], string.Empty); } set { mErrors["DeleteError_" + ctlAsync.ProcessGUID] = value; } } /// /// Returns script for returning back to list page. /// private string ReturnScript { get { if (string.IsNullOrEmpty(mReturnScript) && (Parameters != null)) { mReturnScript = ValidationHelper.GetString(Parameters["returnlocation"], null); if (String.IsNullOrEmpty(mReturnScript)) { mReturnScript = "document.location.href = 'List.aspx?siteid=" + SiteID + (SiteManager ? "&issitemanager=1" : string.Empty) + "';"; } else { mReturnScript = "document.location.href = '" + mReturnScript + "';"; } } return mReturnScript; } } /// /// Where condition used for multiple actions. /// private string WhereCondition { get { string where = string.Empty; if (Parameters != null) { where = ValidationHelper.GetString(Parameters["where"], string.Empty); } return where; } } /// /// Site ID retrieved from dialog parameters. /// public override int SiteID { get { if ((mSiteID == 0) && (Parameters != null)) { mSiteID = ValidationHelper.GetInteger(Parameters["siteid"], 0); } return mSiteID; } } /// /// Site manager flag retrieved from dialog parameters. /// private bool SiteManager { get { bool issitemanager = false; if (Parameters != null) { issitemanager = ValidationHelper.GetBoolean(Parameters["issitemanager"], false); } return issitemanager; } } /// /// Contact ID retrieved from dialog parameters. /// public int ContactID { get { if ((mContactID == 0) && (Parameters != null)) { mContactID = ValidationHelper.GetInteger(Parameters["contactid"], 0); } return mContactID; } } #endregion #region "Page methods" protected void Page_Load(object sender, EventArgs e) { // Check hash validity if (QueryHelper.ValidateHash("hash")) { // Initialize events ctlAsync.OnFinished += ctlAsync_OnFinished; ctlAsync.OnError += ctlAsync_OnError; ctlAsync.OnRequestLog += ctlAsync_OnRequestLog; ctlAsync.OnCancel += ctlAsync_OnCancel; pnlContent.Visible = true; pnlLog.Visible = false; if (!RequestHelper.IsCallback()) { btnCancel.Attributes.Add("onclick", ctlAsync.GetCancelScript(true) + "return false;"); // Setup page title text and image CurrentMaster.Title.TitleText = GetString("om.activity.deletetitle"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/OM_Activity/delete.png"); titleElemAsync.TitleText = GetString("om.activity.deleting"); titleElemAsync.TitleImage = GetImageUrl("Objects/OM_Activity/delete.png"); } } else { pnlContent.Visible = false; } } protected override void OnPreRender(EventArgs e) { btnNo.OnClientClick = ReturnScript + "return false;"; base.OnPreRender(e); } protected void btnOK_Click(object sender, EventArgs e) { ActivityHelper.AuthorizedManageActivity(SiteID, true); EnsureAsyncLog(); RunAsyncDelete(); } #endregion #region "Async control event handlers" private void ctlAsync_OnCancel(object sender, EventArgs e) { ctlAsync.Parameter = null; string canceled = GetString("om.deletioncanceled"); AddLog(canceled); ltlScript.Text += ScriptHelper.GetScript("var __pendingCallbacks = new Array();RefreshCurrent();"); if (!String.IsNullOrEmpty(CurrentError)) { ShowError(CurrentError); } ShowConfirmation(canceled); CurrentLog.Close(); } private void ctlAsync_OnRequestLog(object sender, EventArgs e) { ctlAsync.Log = CurrentLog.Log; } private void ctlAsync_OnError(object sender, EventArgs e) { if (ctlAsync.Status == AsyncWorkerStatusEnum.Running) { ctlAsync.Stop(); } ctlAsync.Parameter = null; if (!String.IsNullOrEmpty(CurrentError)) { ShowError(CurrentError); } CurrentLog.Close(); } private void ctlAsync_OnFinished(object sender, EventArgs e) { CurrentLog.Close(); if (!string.IsNullOrEmpty(CurrentError)) { ctlAsync.Parameter = null; if (!String.IsNullOrEmpty(CurrentError)) { ShowError(CurrentError); } } if (ctlAsync.Parameter != null) { // Return to the list page after successful deletion ltlScript.Text += ScriptHelper.GetScript(ctlAsync.Parameter.ToString()); // Do not set the window title anymore CurrentMaster.Title.SetWindowTitle = false; } } #endregion #region "Delete methods" /// /// Starts asynchronous deleting of contacts. /// private void RunAsyncDelete() { ctlAsync.Parameter = ReturnScript; ctlAsync.RunAsync(Delete, WindowsIdentity.GetCurrent()); } /// /// Deletes activities. /// private void Delete(object parameter) { string whereCondition = WhereCondition; try { whereCondition = CheckSitePermissions(whereCondition); DeleteItems(whereCondition); } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state != CMSThread.ABORT_REASON_STOP) { LogExceptionToEventLog(ex); } } catch (Exception ex) { LogExceptionToEventLog(ex); } } /// /// Check activity permissions. /// private string CheckSitePermissions(string whereCondition) { DataSet ds = ConnectionHelper.ExecuteQuery(GetQuery(), null, WhereCondition, "ActivitySiteID", -1, "DISTINCT ActivitySiteID"); if (!DataHelper.DataSourceIsEmpty(ds)) { foreach (DataRow dr in ds.Tables[0].Rows) { int activitySiteID = ValidationHelper.GetInteger(dr["ActivitySiteID"], 0); if (!CurrentUser.IsAuthorizedPerObject(PermissionsEnum.Modify, "om.activity", activitySiteID.ToString())) { SiteInfo notAllowedSite = SiteInfoProvider.GetSiteInfo(activitySiteID); AddError(String.Format(GetString("accessdeniedtopage.info"), ResHelper.LocalizeString(notAllowedSite.DisplayName))); whereCondition = SqlHelperClass.AddWhereCondition(whereCondition, "ActivitySiteID <> " + activitySiteID); } } return whereCondition; } return whereCondition; } /// /// Delete items. /// private void DeleteItems(string whereCondition) { DataSet ds = ConnectionHelper.ExecuteQuery(GetQuery(), null, whereCondition, "ActivityID", -1, "ActivityID, ActivityType, ActivityTitle"); if (!DataHelper.DataSourceIsEmpty(ds)) { foreach (DataRow dr in ds.Tables[0].Rows) { string activityTitle = ValidationHelper.GetString(dr["ActivityTitle"], null); string activityType = ValidationHelper.GetString(dr["ActivityType"], null); int activityId = ValidationHelper.GetInteger(dr["ActivityID"], 0); LogContext.AppendLine(activityTitle + " - " + activityType); ActivityInfoProvider.DeleteActivityInfo(activityId); } } } /// /// Returns correct query. /// private string GetQuery() { if (ContactID > 0) { return "om.activity.selectall"; } return "om.activity.selectactivitylist"; } #endregion #region "Log methods" /// /// When exception occurs, log it to event log. /// /// Exception to log private void LogExceptionToEventLog(Exception ex) { EventLogProvider.LogException("Contact management", "DELETEACTIVITY", ex); AddError(GetString("om.activity.deletefailed") + ": " + ex.Message); } /// /// Adds the error to collection of errors. /// /// Error message protected void AddError(string error) { AddLog(error); CurrentError = (error + "
" + CurrentError); } /// /// Adds the log information. /// /// New log information private void AddLog(string newLog) { EnsureLog(); LogContext.AppendLine(newLog); } /// /// Ensures log for asynchronous control /// private void EnsureAsyncLog() { pnlLog.Visible = true; pnlContent.Visible = false; CurrentError = string.Empty; CurrentLog.Close(); EnsureLog(); } /// /// Ensures the logging context. /// protected LogContext EnsureLog() { LogContext log = LogContext.EnsureLog(ctlAsync.ProcessGUID); log.Reversed = true; log.LineSeparator = "
"; return log; } #endregion }