PageRenderTime 32ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/Tag/Nsurvey16_DNN3_PA/UserControls/FilterOptionControl.ascx.cs

#
C# | 393 lines | 301 code | 37 blank | 55 comment | 24 complexity | bf716f0d6e795f8f8bd92f688c5fb49e MD5 | raw file
Possible License(s): GPL-2.0
  1. /**************************************************************************************************
  2. NSurvey - The web survey and form engine
  3. Copyright (c) 2004, Thomas Zumbrunn. (http://www.nsurvey.org)
  4. Dotnetnuke PA module
  5. Copyright (c) 2004, Oliver Hine (oliver.hine@gmail.com)
  6. This program is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU General Public License
  8. as published by the Free Software Foundation; either version 2
  9. of the License, or (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. ************************************************************************************************/
  18. namespace Votations.NSurvey.WebAdmin.UserControls
  19. {
  20. using System;
  21. using System.Web;
  22. using System.Web.UI;
  23. using System.Web.UI.WebControls;
  24. using Votations.NSurvey;
  25. using Votations.NSurvey.Data;
  26. using Votations.NSurvey.DataAccess;
  27. using Votations.NSurvey.BusinessRules;
  28. using Votations.NSurvey.Enums;
  29. using Microsoft.VisualBasic;
  30. /// <summary>
  31. /// Survey data CU methods
  32. /// </summary>
  33. public class FilterOptionControl : PageBase
  34. {
  35. public event EventHandler OptionChanged;
  36. protected System.Web.UI.WebControls.Label MessageLabel;
  37. protected System.Web.UI.WebControls.TextBox TextBox1;
  38. protected System.Web.UI.WebControls.DropDownList DropDownList1;
  39. protected System.Web.UI.WebControls.Button UpdateFilterButton;
  40. protected System.Web.UI.WebControls.Button DeleteFilterButton;
  41. protected System.Web.UI.WebControls.Button CreatefilterButton;
  42. protected System.Web.UI.WebControls.PlaceHolder EditplaceHolder;
  43. protected System.Web.UI.WebControls.TextBox FilterNameTextBox;
  44. protected System.Web.UI.WebControls.DropDownList LogicalOperatorDropDownList;
  45. protected System.Web.UI.WebControls.Repeater RulesRepeater;
  46. protected System.Web.UI.WebControls.DropDownList AnswerFilterDropdownlist;
  47. protected System.Web.UI.WebControls.Label AnswerLabel;
  48. protected System.Web.UI.WebControls.Label FilterText;
  49. protected System.Web.UI.WebControls.TextBox TextFilterTextbox;
  50. protected System.Web.UI.WebControls.DropDownList QuestionFilterDropdownlist;
  51. protected System.Web.UI.WebControls.Button AddRuleButton;
  52. protected System.Web.UI.WebControls.Literal FilterNameLabel;
  53. protected System.Web.UI.WebControls.Literal RuleOperatorLabel;
  54. protected System.Web.UI.WebControls.Literal NewRuleTitle;
  55. protected System.Web.UI.WebControls.Literal QuestionLabel;
  56. protected System.Web.UI.WebControls.Literal FilterRulesTitle;
  57. protected System.Web.UI.WebControls.Label filtertitle;
  58. /// <summary>
  59. /// Id of the answer type to edit
  60. /// if no id is given put the
  61. /// usercontrol in creation mode
  62. /// </summary>
  63. public int FilterId
  64. {
  65. get { return (ViewState["FilterId"]==null) ? -1 : int.Parse(ViewState["FilterId"].ToString()); }
  66. set { ViewState["FilterId"] = value; }
  67. }
  68. /// <summary>
  69. /// Id of the survey to which the type belongs
  70. /// </summary>
  71. public new int SurveyId
  72. {
  73. get { return (ViewState["SurveyID"]==null) ? -1 : int.Parse(ViewState["SurveyID"].ToString()); }
  74. set { ViewState["SurveyID"] = value; }
  75. }
  76. private void Page_Load(object sender, System.EventArgs e)
  77. {
  78. LocalizePage();
  79. MessageLabel.Visible = false;
  80. // Check if any answer type id has been assigned
  81. if (FilterId == -1)
  82. {
  83. SwitchToCreationMode();
  84. }
  85. else
  86. {
  87. SwitchToEditionMode();
  88. }
  89. }
  90. private void LocalizePage()
  91. {
  92. FilterNameLabel.Text = GetPageResource("FilterNameLabel");
  93. RuleOperatorLabel.Text = GetPageResource("RuleOperatorLabel");
  94. if (!Page.IsPostBack)
  95. {
  96. LogicalOperatorDropDownList.Items.Add(new ListItem(GetPageResource("AndOperator"),"0"));
  97. LogicalOperatorDropDownList.Items.Add(new ListItem(GetPageResource("OrOperator"),"1"));
  98. }
  99. NewRuleTitle.Text = GetPageResource("NewRuleTitle");
  100. QuestionLabel.Text = GetPageResource("QuestionLabel");
  101. AnswerLabel.Text = GetPageResource("AnswerLabel");
  102. FilterText.Text = GetPageResource("FilterText");
  103. FilterRulesTitle.Text = GetPageResource("FilterRulesTitle");
  104. AddRuleButton.Text = GetPageResource("AddRuleButton");
  105. UpdateFilterButton.Text = GetPageResource("UpdateFilterButton");
  106. DeleteFilterButton.Text = GetPageResource("DeleteFilterButton");
  107. CreatefilterButton.Text = GetPageResource("CreatefilterButton");
  108. }
  109. /// <summary>
  110. /// Setup the control in creation mode
  111. /// </summary>
  112. private void SwitchToCreationMode()
  113. {
  114. // Creation mode
  115. filtertitle.Text = GetPageResource("AddNewFilterTitle");
  116. CreatefilterButton.Visible = true;
  117. EditplaceHolder.Visible = false;
  118. UpdateFilterButton.Visible = false;
  119. DeleteFilterButton.Visible = false;
  120. }
  121. /// <summary>
  122. /// Setup the control in edition mode
  123. /// </summary>
  124. private void SwitchToEditionMode()
  125. {
  126. filtertitle.Text = GetPageResource("EditFilterTitle");
  127. CreatefilterButton.Visible = false;
  128. EditplaceHolder.Visible = true;
  129. UpdateFilterButton.Visible = true;
  130. DeleteFilterButton.Visible = true;
  131. }
  132. /// <summary>
  133. /// Get the current DB data and fill
  134. /// the fields with them
  135. /// </summary>
  136. public void BindFields()
  137. {
  138. FilterData filterData = new Filters().GetFilterById(FilterId);
  139. FilterNameTextBox.Text = filterData.Filters[0].Description;
  140. LogicalOperatorDropDownList.SelectedValue = filterData.Filters[0].LogicalOperatorTypeID.ToString();
  141. RulesRepeater.DataSource = new Filters().GetRulesForFilter(FilterId);
  142. RulesRepeater.DataMember = "FilterRules";
  143. RulesRepeater.DataBind();
  144. QuestionFilterDropdownlist.DataSource = new Questions().GetAnswerableQuestionList(SurveyId);
  145. QuestionFilterDropdownlist.DataTextField = "QuestionText";
  146. QuestionFilterDropdownlist.DataValueField = "QuestionID";
  147. QuestionFilterDropdownlist.DataBind();
  148. QuestionFilterDropdownlist.Items.Insert(0, new ListItem(GetPageResource("SelectQuestionMessage"), "-1"));
  149. AddRuleButton.Enabled = false;
  150. AnswerLabel.Visible = false;
  151. AnswerFilterDropdownlist.Visible = false;
  152. TextFilterTextbox.Visible = false;
  153. FilterText.Visible = false;
  154. }
  155. protected string FormatRule(string questionText, string answerText, string textFilter )
  156. {
  157. if (answerText.Length == 0)
  158. {
  159. return string.Format(GetPageResource("FilterRuleNoAnswer"),
  160. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(questionText, "<[^>]*>", " ")));
  161. }
  162. else if (textFilter.Length == 0)
  163. {
  164. return string.Format(GetPageResource("FilterRuleAnswer"),
  165. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(questionText, "<[^>]*>", " ")),
  166. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(answerText, "<[^>]*>", " ")));
  167. }
  168. else
  169. {
  170. return string.Format(GetPageResource("FilterRuleAnswerWithText"),
  171. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(questionText, "<[^>]*>", " ")),
  172. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(answerText, "<[^>]*>", " ")),
  173. Server.HtmlEncode(System.Text.RegularExpressions.Regex.Replace(textFilter, "<[^>]*>", " ")));
  174. }
  175. }
  176. private void QuestionFilterDropdownlist_SelectedIndexChanged(object sender, System.EventArgs e)
  177. {
  178. if (QuestionFilterDropdownlist.SelectedValue != "-1")
  179. {
  180. AddRuleButton.Enabled = true;
  181. AnswerLabel.Visible = true;
  182. AnswerFilterDropdownlist.Visible = true;
  183. BindAnswerDropDownList();
  184. }
  185. else
  186. {
  187. AddRuleButton.Enabled = true;
  188. AnswerLabel.Visible = false;
  189. AnswerFilterDropdownlist.Items.Clear();
  190. AnswerFilterDropdownlist.Visible = false;
  191. TextFilterTextbox.Visible = false;
  192. TextFilterTextbox.Text = string.Empty;
  193. FilterText.Visible = false;
  194. }
  195. }
  196. /// <summary>
  197. /// Bind the list and mark field answer
  198. /// with a negative answer id value
  199. /// </summary>
  200. private void BindAnswerDropDownList()
  201. {
  202. AnswerData answers = new Answers().GetAnswersList(int.Parse(QuestionFilterDropdownlist.SelectedValue));
  203. AnswerFilterDropdownlist.Items.Clear();
  204. AnswerFilterDropdownlist.Items.Add(new ListItem(GetPageResource("AnyAnswerMessage"), "0"));
  205. foreach (AnswerData.AnswersRow answerRow in answers.Answers)
  206. {
  207. if ((((AnswerTypeMode)answerRow.TypeMode & AnswerTypeMode.Field) > 0) ||
  208. (((AnswerTypeMode)answerRow.TypeMode & AnswerTypeMode.Custom) > 0) ||
  209. (((AnswerTypeMode)answerRow.TypeMode & AnswerTypeMode.DataSource) > 0))
  210. {
  211. // Mark field answer with a negative answerid
  212. AnswerFilterDropdownlist.Items.Add(new ListItem(answerRow.AnswerText + " " +
  213. GetPageResource("TextEntryInfo"), (-answerRow.AnswerId).ToString()));
  214. }
  215. else
  216. {
  217. AnswerFilterDropdownlist.Items.Add(new ListItem(answerRow.AnswerText + " " +
  218. GetPageResource("SelectionInfo"), answerRow.AnswerId.ToString()));
  219. }
  220. }
  221. }
  222. private void AnswerFilterDropdownlist_SelectedIndexChanged(object sender, System.EventArgs e)
  223. {
  224. if (int.Parse(AnswerFilterDropdownlist.SelectedValue) < 0)
  225. {
  226. TextFilterTextbox.Visible = true;
  227. FilterText.Visible = true;
  228. }
  229. else
  230. {
  231. TextFilterTextbox.Text = string.Empty;
  232. TextFilterTextbox.Visible = false;
  233. FilterText.Visible = false;
  234. }
  235. }
  236. #region Web Form Designer generated code
  237. private void InitializeComponent()
  238. {
  239. this.UpdateFilterButton.Click += new System.EventHandler(this.UpdateFilterButton_Click);
  240. this.DeleteFilterButton.Click += new System.EventHandler(this.DeleteFilterButton_Click);
  241. this.CreatefilterButton.Click += new System.EventHandler(this.CreatefilterButton_Click);
  242. this.QuestionFilterDropdownlist.SelectedIndexChanged += new System.EventHandler(this.QuestionFilterDropdownlist_SelectedIndexChanged);
  243. this.AnswerFilterDropdownlist.SelectedIndexChanged += new System.EventHandler(this.AnswerFilterDropdownlist_SelectedIndexChanged);
  244. this.AddRuleButton.Click += new System.EventHandler(this.AddRuleButton_Click);
  245. this.RulesRepeater.ItemCommand += new System.Web.UI.WebControls.RepeaterCommandEventHandler(this.RulesRepeater_ItemCommand);
  246. this.Load += new System.EventHandler(this.Page_Load);
  247. }
  248. override protected void OnInit(EventArgs e)
  249. {
  250. //
  251. // CODEGEN: This call is required by the ASP.NET Web Form Designer.
  252. //
  253. InitializeComponent();
  254. base.OnInit(e);
  255. }
  256. #endregion
  257. private void AddRuleButton_Click(object sender, System.EventArgs e)
  258. {
  259. FilterRuleData filterRuleData = new FilterRuleData();
  260. FilterRuleData.FilterRulesRow filterRule = filterRuleData.FilterRules.NewFilterRulesRow();
  261. int questionId = int.Parse(QuestionFilterDropdownlist.SelectedValue),
  262. answerId = int.Parse(AnswerFilterDropdownlist.SelectedValue);
  263. if (answerId == 0)
  264. {
  265. filterRule.SetAnswerIdNull();
  266. }
  267. else if ( answerId < 0)
  268. {
  269. filterRule.AnswerId = -answerId;
  270. }
  271. else
  272. {
  273. filterRule.AnswerId = answerId;
  274. }
  275. filterRule.QuestionId = questionId;
  276. if (TextFilterTextbox.Visible)
  277. {
  278. filterRule.TextFilter = TextFilterTextbox.Text;
  279. }
  280. filterRule.FilterId = FilterId;
  281. filterRuleData.FilterRules.AddFilterRulesRow(filterRule);
  282. new Filter().AddRule(filterRuleData);
  283. MessageLabel.Visible = true;
  284. MessageLabel.Text = GetPageResource("FilterRuleAddedMessage");
  285. BindFields();
  286. }
  287. private void RulesRepeater_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
  288. {
  289. new Filter().DeleteRule(int.Parse(e.CommandArgument.ToString()));
  290. MessageLabel.Visible = true;
  291. MessageLabel.Text = GetPageResource("FilterRuleDeletedMessage");
  292. BindFields();
  293. }
  294. private void DeleteFilterButton_Click(object sender, System.EventArgs e)
  295. {
  296. new Filter().DeleteFilter(FilterId);
  297. MessageLabel.Visible = true;
  298. MessageLabel.Text = GetPageResource("FilterDeletedMessage");
  299. this.Visible = false;
  300. OnOptionChanged();
  301. }
  302. protected void OnOptionChanged()
  303. {
  304. if (OptionChanged != null)
  305. {
  306. OptionChanged(this, EventArgs.Empty);
  307. }
  308. }
  309. private void UpdateFilterButton_Click(object sender, System.EventArgs e)
  310. {
  311. if (FilterNameTextBox.Text.Length == 0)
  312. {
  313. MessageLabel.Visible = true;
  314. MessageLabel.Text = GetPageResource("InvalidFilterDescriptionMessage");
  315. }
  316. else
  317. {
  318. FilterData filterData = new FilterData();
  319. FilterData.FiltersRow filterRow = filterData.Filters.NewFiltersRow();
  320. filterRow.LogicalOperatorTypeID = short.Parse(LogicalOperatorDropDownList.SelectedValue);
  321. filterRow.Description = FilterNameTextBox.Text;
  322. filterRow.FilterId = FilterId;
  323. filterData.Filters.AddFiltersRow(filterRow);
  324. new Filter().UpdateFilter(filterData);
  325. MessageLabel.Visible = true;
  326. MessageLabel.Text = GetPageResource("FilterUpdatedMessage");
  327. }
  328. }
  329. private void CreatefilterButton_Click(object sender, System.EventArgs e)
  330. {
  331. if (FilterNameTextBox.Text.Length == 0)
  332. {
  333. MessageLabel.Visible = true;
  334. MessageLabel.Text = GetPageResource("InvalidFilterDescriptionMessage");
  335. }
  336. else
  337. {
  338. FilterData filterData = new FilterData();
  339. FilterData.FiltersRow filterRow = filterData.Filters.NewFiltersRow();
  340. filterRow.LogicalOperatorTypeID = short.Parse(LogicalOperatorDropDownList.SelectedValue);
  341. filterRow.Description = FilterNameTextBox.Text;
  342. filterRow.SurveyId = SurveyId;
  343. filterData.Filters.AddFiltersRow(filterRow);
  344. new Filter().AddFilter(filterData);
  345. UINavigator.NavigateToFilterEditor(SurveyId, MenuIndex);
  346. }
  347. }
  348. }
  349. }