using System; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.FormControls; using CMS.GlobalHelper; using CMS.Polls; using CMS.SiteProvider; using CMS.SettingsProvider; using CMS.UIControls; public partial class CMSModules_Polls_Controls_AnswerEdit : CMSAdminEditControl { #region "Variables" private PollAnswerInfo pollAnswerObj = null; private FormEngineUserControl bizFormElem = null; #endregion #region "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; } } /// /// Gets or sets the answer ID. /// public int PollId { get { return ValidationHelper.GetInteger(ViewState["pollid"], 0); } set { ViewState["pollid"] = (object)value; } } /// /// Gets or sets saved property. /// public bool Saved { get { return ValidationHelper.GetBoolean(ViewState["saved"], false); } set { ViewState["saved"] = (object)value; } } #endregion protected void Page_Load(object sender, EventArgs e) { // Required field validator error messages initialization rfvAnswerText.ErrorMessage = GetString("Polls_Answer_Edit.AnswerTextError"); // Controls initializations lblAnswerText.Text = GetString("Polls_Answer_Edit.AnswerTextLabel"); lblVotes.Text = GetString("Polls_Answer_Edit.Votes"); // Set if it is live site txtAnswerText.IsLiveSite = IsLiveSite; // Load BizForm selector if BizForms module is available if (ModuleEntry.IsModuleLoaded(ModuleEntry.BIZFORM) && ResourceSiteInfoProvider.IsResourceOnSite(ModuleEntry.BIZFORM, CMSContext.CurrentSiteName)) { bizFormElem = (FormEngineUserControl)Page.LoadUserControl("~/CMSModules/BizForms/FormControls/SelectBizForm.ascx"); bizFormElem.ShortID = "bizFormElem"; bizFormElem.SetValue("ShowSiteFilter", false); plcBizFormSelector.Controls.Add(bizFormElem); bizFormElem.Visible = true; UniSelector uniSelector = bizFormElem.GetValue("UniSelector") as UniSelector; if (uniSelector != null) { uniSelector.OnSelectionChanged += new EventHandler(BizFormSelector_OnSelectionChanged); } } if (!RequestHelper.IsPostBack() && !IsLiveSite) { LoadData(); } } /// /// Loads new data for this control. /// public void LoadData() { // If working with existing record if (ItemID > 0) { pollAnswerObj = PollAnswerInfoProvider.GetPollAnswerInfo(ItemID); EditedObject = pollAnswerObj; if (pollAnswerObj != null) { // Fill editing form if (!RequestHelper.IsPostBack()) { ReloadData(); } // When saved, display info message if (Saved) { ShowChangesSaved(); Saved = false; } PollId = pollAnswerObj.AnswerPollID; } } // If creating new record else { plcVotes.Visible = false; txtVotes.Text = "0"; } } /// /// Clears data. /// public override void ClearForm() { base.ClearForm(); txtAnswerText.Text = null; txtVotes.Text = null; } /// /// Reloads answer data. /// public override void ReloadData() { ClearForm(); if (pollAnswerObj == null) { pollAnswerObj = PollAnswerInfoProvider.GetPollAnswerInfo(ItemID); } if (pollAnswerObj != null) { // Load the fields txtAnswerText.Text = pollAnswerObj.AnswerText; chkAnswerEnabled.Checked = pollAnswerObj.AnswerEnabled; txtVotes.Text = pollAnswerObj.AnswerCount.ToString(); pnlGeneral.GroupingText = GetString("general.general"); plcVotes.Visible = true; // Check if bizform module is available (for open-ended answers). if (ModuleEntry.IsModuleLoaded(ModuleEntry.BIZFORM) && ResourceSiteInfoProvider.IsResourceOnSite(ModuleEntry.BIZFORM, CMSContext.CurrentSiteName)) { // Show open-ended answer settings only for site poll PollInfo pi = PollInfoProvider.GetPollInfo(pollAnswerObj.AnswerPollID); plcOpenAnswer.Visible = (pi != null) && (pi.PollSiteID > 0) && (pi.PollGroupID == 0); chkAnswerIsOpenEnded.Checked = plcOpenAnswerSettings.Visible = pollAnswerObj.AnswerIsOpenEnded; bizFormElem.Value = pollAnswerObj.AnswerForm; alternativeFormElem.ClassName = "BizForm." + bizFormElem.Text; alternativeFormElem.Value = pollAnswerObj.AnswerAlternativeForm; chkAnswerHideForm.Checked = pollAnswerObj.AnswerHideForm; pnlAnswerForm.GroupingText = GetString("polls.answerformsettings"); } } else { txtAnswerText.Text = String.Empty; plcVotes.Visible = false; pnlGeneral.GroupingText = string.Empty; } } /// /// Sets data to database. /// protected void btnOK_Click(object sender, EventArgs e) { // Load current answer object if (pollAnswerObj == null) { pollAnswerObj = PollAnswerInfoProvider.GetPollAnswerInfo(ItemID); } // Check permission for answer object (global/site poll) if (!CheckModifyPermission(PollId)) { return; } string errorMessage = null; // Validate the input if (txtVotes.Visible) { errorMessage = new Validator().NotEmpty(txtAnswerText.Text, rfvAnswerText.ErrorMessage) .IsPositiveNumber(txtVotes.Text, GetString("Polls_Answer_Edit.VotesNotNumber"), true) .IsInteger(txtVotes.Text, GetString("Polls_Answer_Edit.VotesNotNumber")).Result; } else { errorMessage = new Validator().NotEmpty(txtAnswerText.Text, rfvAnswerText.ErrorMessage).Result; } if (String.IsNullOrEmpty(errorMessage)) { // If pollAnswer doesn't already exist, create new one if (pollAnswerObj == null) { pollAnswerObj = new PollAnswerInfo(); pollAnswerObj.AnswerOrder = PollAnswerInfoProvider.GetLastAnswerOrder(PollId) + 1; pollAnswerObj.AnswerCount = 0; pollAnswerObj.AnswerPollID = PollId; } // Set the fields pollAnswerObj.AnswerEnabled = chkAnswerEnabled.Checked; pollAnswerObj.AnswerText = txtAnswerText.Text.Trim(); pollAnswerObj.AnswerCount = ValidationHelper.GetInteger(txtVotes.Text, 0); if (plcOpenAnswer.Visible) { string answerForm = ValidationHelper.GetString(bizFormElem.Value, string.Empty); if (chkAnswerIsOpenEnded.Checked && string.IsNullOrEmpty(answerForm)) { ShowError(GetString("Polls_Answer_Edit.SelectForm")); return; } pollAnswerObj.AnswerForm = answerForm; pollAnswerObj.AnswerAlternativeForm = ValidationHelper.GetString(alternativeFormElem.Value, string.Empty); pollAnswerObj.AnswerHideForm = chkAnswerHideForm.Checked; } // Save the data PollAnswerInfoProvider.SetPollAnswerInfo(pollAnswerObj); Saved = true; ItemID = pollAnswerObj.AnswerID; // Raise event; RaiseOnSaved(); } else { // Error message - Validation ShowError(errorMessage); } } /// /// Checks modify permission. Returns false if checking failed. /// /// Poll ID private bool CheckModifyPermission(int pollId) { // Get parent of answer object and see if it is global poll or site poll PollInfo pi = null; if (pollId > 0) // non-zero value when creating new poll { pi = PollInfoProvider.GetPollInfo(pollId); } else if (pollAnswerObj != null) // not null when modifying existing answer { pi = PollInfoProvider.GetPollInfo(pollAnswerObj.AnswerPollID); } if (pi != null) { return (pi.PollSiteID > 0) && CheckPermissions("cms.polls", PERMISSION_MODIFY) || (pi.PollSiteID <= 0) && CheckPermissions("cms.polls", PERMISSION_GLOBALMODIFY); } return false; } /// /// Show/hide open-ended answer settings /// protected void chkAnswerIsOpenEnded_CheckedChanged(object sender, EventArgs e) { plcOpenAnswerSettings.Visible = chkAnswerIsOpenEnded.Checked; if (!chkAnswerIsOpenEnded.Checked) { bizFormElem.Value = string.Empty; alternativeFormElem.Value = string.Empty; } } /// /// Fired when BizForm is selected /// protected void BizFormSelector_OnSelectionChanged(object sender, EventArgs e) { alternativeFormElem.ClassName = "BizForm." + bizFormElem.Text; } }