using System; using System.Collections; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.OnlineMarketing; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_ContactManagement_FormControls_ContactRoleDialog : CMSModalPage { #region "Variables" private int siteId = -1; protected AccountContactInfo aci = null; protected bool isMassAction = false; protected Hashtable mParameters; #endregion #region "Properties" /// /// Stop processing flag. /// public bool StopProcessing { get { return gridElem.StopProcessing; } set { gridElem.StopProcessing = value; } } /// /// Hashtable containing dialog parameters. /// private Hashtable Parameters { get { if (mParameters == null) { string identifier = QueryHelper.GetString("params", null); mParameters = (Hashtable)WindowHelper.GetItem(identifier); } return mParameters; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { if (!QueryHelper.ValidateHash("hash") || Parameters == null) { StopProcessing = true; return; } CurrentMaster.Title.TitleText = GetString("om.contactrole.select"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/OM_ContactRole/object.png"); Page.Title = CurrentMaster.Title.TitleText; // Check if the dialog was opened from mass actions isMassAction = Parameters.ContainsKey("ismassaction"); if (isMassAction) { siteId = ValidationHelper.GetInteger(Parameters["siteid"], 0); } else { int accountContactId = ValidationHelper.GetInteger(Parameters["accountcontactid"], 0); aci = AccountContactInfoProvider.GetAccountContactInfo(accountContactId); if (aci != null) { AccountInfo ai = AccountInfoProvider.GetAccountInfo(aci.AccountID); if (ai != null) { siteId = ai.AccountSiteID; } } } // Show all global configuration to authorized users .. bool allowGlobal = ConfigurationHelper.AuthorizedReadConfiguration(UniSelector.US_GLOBAL_RECORD, false); // .. but just in SiteManager - fake it in CMSDesk so that even Global Admin sees user configuration // as Site Admins (depending on settings). bool isSiteManager = ValidationHelper.GetBoolean(Parameters["issitemanager"], false); allowGlobal &= (isSiteManager || SettingsKeyProvider.GetBoolValue(SiteInfoProvider.GetSiteName(siteId) + ".cmscmglobalconfiguration")); bool allowSite; if (siteId > 0) { allowSite = ConfigurationHelper.AuthorizedReadConfiguration(siteId, false); } else { allowSite = ConfigurationHelper.AuthorizedReadConfiguration(CMSContext.CurrentSiteID, false); } // Check read permission if ((siteId > 0) && !allowSite && !allowGlobal) { RedirectToAccessDenied("cms.contactmanagement", "ReadConfiguration"); return; } else if ((siteId == 0) && !allowGlobal) { RedirectToAccessDenied("cms.contactmanagement", "ReadGlobalConfiguration"); return; } if (siteId > 0) { if (allowSite) { gridElem.WhereCondition = "ContactRoleSiteID = " + siteId; } // Check if global config is allowed for the site if (allowGlobal) { // Add contact roles from global configuration gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, "ContactRoleSiteID IS NULL", "OR"); } } else if ((siteId == 0) && allowGlobal) { gridElem.WhereCondition = "ContactRoleSiteID IS NULL"; } gridElem.OnExternalDataBound += gridElem_OnExternalDataBound; gridElem.Pager.DefaultPageSize = 10; // Display 'Reset' button when 'none' role is allowed if (ValidationHelper.GetBoolean(Parameters["allownone"], false)) { btnReset.Visible = true; btnReset.Click += btn_Click; btnReset.CommandArgument = "0"; } } /// /// Unigrid after data reload handler. /// protected void gridElem_OnAfterDataReload() { if (!gridElem.IsEmpty) { // Add '(none)' record so it is possible to remove contact role DataSet data = gridElem.GridView.DataSource as DataSet; DataRow noneRow = data.Tables[0].NewRow(); noneRow["ContactRoleID"] = 0; noneRow["ContactRoleDisplayName"] = GetString("general.selectnone"); noneRow["ContactRoleSiteID"] = siteId; data.Tables[0].Rows.InsertAt(noneRow, 0); } } /// /// Unigrid external databound handler. /// protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "contactroledisplayname": LinkButton btn = new LinkButton(); DataRowView drv = parameter as DataRowView; btn.Text = HTMLHelper.HTMLEncode(ResHelper.LocalizeString(ValidationHelper.GetString(drv["ContactRoleDisplayName"], null))); btn.Click += new EventHandler(btn_Click); btn.CommandArgument = ValidationHelper.GetString(drv["ContactRoleID"], null); btn.ToolTip = HTMLHelper.HTMLEncode(ValidationHelper.GetString(drv.Row["ContactRoleDescription"], null)); return btn; } return parameter; } /// /// Contact role selected event handler. /// protected void btn_Click(object sender, EventArgs e) { int roleId = ValidationHelper.GetInteger(((IButtonControl)sender).CommandArgument, 0); string script = null; if (!isMassAction) { // Set contact role to specified account-contact relation aci.ContactRoleID = roleId; AccountContactInfoProvider.SetAccountContactInfo(aci); script = ScriptHelper.GetScript(@" if (wopener.Refresh) {wopener.Refresh();} setTimeout('CloseDialog()',200); "); } else { script = ScriptHelper.GetScript(@" wopener.AssignContactRole_" + ValidationHelper.GetString(Parameters["clientid"], string.Empty) + @"(" + roleId + @"); setTimeout('CloseDialog()',200); "); } ScriptHelper.RegisterStartupScript(Page, typeof(string), "CloseWindow", script); } #endregion }