PageRenderTime 57ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 1ms

/Wiki/ScrewTurnWiki/Admin.aspx.cs

#
C# | 2522 lines | 2244 code | 251 blank | 27 comment | 330 complexity | 23e56a38e07dfa8449dd940f0fd5e442 MD5 | raw file
Possible License(s): GPL-2.0
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Globalization;
  7. using System.IO;
  8. using System.Text.RegularExpressions;
  9. using System.Threading;
  10. using System.Web;
  11. using System.Web.Configuration;
  12. using System.Web.Security;
  13. using System.Web.UI;
  14. using System.Web.UI.WebControls;
  15. using System.Web.UI.WebControls.WebParts;
  16. using System.Web.UI.HtmlControls;
  17. using System.Net;
  18. using ScrewTurn.Wiki.PluginFramework;
  19. using System.Text;
  20. namespace ScrewTurn.Wiki {
  21. public partial class Admin : BasePage {
  22. #region ViewStateCompression
  23. protected override object LoadPageStateFromPersistenceMedium() {
  24. if(Settings.EnableViewStateCompression) {
  25. string viewState = Request.Form["__VSTATE"];
  26. byte[] bytes = Convert.FromBase64String(viewState);
  27. bytes = Compressor.Decompress(bytes);
  28. LosFormatter formatter = new LosFormatter();
  29. return formatter.Deserialize(Convert.ToBase64String(bytes));
  30. }
  31. else {
  32. return base.LoadPageStateFromPersistenceMedium();
  33. }
  34. }
  35. protected override void SavePageStateToPersistenceMedium(object viewState) {
  36. if(Settings.EnableViewStateCompression) {
  37. LosFormatter formatter = new LosFormatter();
  38. StringWriter writer = new StringWriter();
  39. formatter.Serialize(writer, viewState);
  40. string viewStateString = writer.ToString();
  41. byte[] bytes = Convert.FromBase64String(viewStateString);
  42. bytes = Compressor.Compress(bytes);
  43. ClientScript.RegisterHiddenField("__VSTATE", Convert.ToBase64String(bytes));
  44. }
  45. else {
  46. base.SavePageStateToPersistenceMedium(viewState);
  47. }
  48. }
  49. #endregion
  50. #region Initialization
  51. protected void Page_Load(object sender, EventArgs e) {
  52. Page.Title = Resources.Messages.AdminTitle + " - " + Settings.WikiTitle;
  53. if(!string.IsNullOrEmpty(Request.UserAgent) && Request.UserAgent.ToLowerInvariant().Contains("konqueror") ||
  54. Request.UserAgent.ToLowerInvariant().Contains("safari")) {
  55. lblBrowserSupport.Visible = true;
  56. }
  57. if(SessionFacade.LoginKey == null) {
  58. Response.Redirect("Login.aspx?Redirect=Admin.aspx" + (Request["ActivationMode"] != null ? Tools.UrlEncode("?ActivationMode=1") : ""));
  59. }
  60. if(!SessionFacade.Admin) {
  61. Response.Redirect("AccessDenied.aspx");
  62. }
  63. if(!SessionFacade.Username.Equals("admin") && !Settings.ConfigVisibleToAdmins) {
  64. btnSelectConfig.Visible = false;
  65. }
  66. else if(!SessionFacade.Username.Equals("admin")) {
  67. chkConfigVisibleToAdmins.Enabled = false;
  68. }
  69. if(!Page.IsPostBack) {
  70. if(SessionFacade.AdminView >= 0) {
  71. mlvAdmin.ActiveViewIndex = SessionFacade.AdminView;
  72. }
  73. else {
  74. mlvAdmin.ActiveViewIndex = 9;
  75. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  76. }
  77. if(Request["ActivationMode"] != null) {
  78. mlvAdmin.ActiveViewIndex = 0;
  79. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  80. chkViewActive.Checked = false;
  81. }
  82. PrintFileEditing();
  83. PrintSystemStatus();
  84. PrintDateTimeFormats();
  85. PrintStrings();
  86. SetupButtons();
  87. LoadUsers();
  88. LoadPages(true);
  89. LoadConfig();
  90. LoadSnippets();
  91. LoadCategories();
  92. LoadNavPaths();
  93. LoadProviders();
  94. LoadDlls();
  95. LoadRegExp();
  96. LoadValidationLocalizations();
  97. }
  98. }
  99. private void LoadUsers() {
  100. Users users = Users.Instance;
  101. lstUsers.Items.Clear();
  102. for(int i = 0; i < users.AllUsers.Count; i++) {
  103. if(users.AllUsers[i].Admin) {
  104. if(chkViewAdmins.Checked) {
  105. if(users.AllUsers[i].Active) {
  106. if(chkViewActive.Checked) {
  107. lstUsers.Items.Add(new ListItem(PrintUser(users.AllUsers[i]), users.AllUsers[i].Username));
  108. }
  109. }
  110. else {
  111. if(chkViewInactive.Checked) {
  112. lstUsers.Items.Add(new ListItem(PrintUser(users.AllUsers[i]), users.AllUsers[i].Username));
  113. }
  114. }
  115. }
  116. }
  117. else {
  118. if(chkViewUsers.Checked) {
  119. if(users.AllUsers[i].Active) {
  120. if(chkViewActive.Checked) {
  121. lstUsers.Items.Add(new ListItem(PrintUser(users.AllUsers[i]), users.AllUsers[i].Username));
  122. }
  123. }
  124. else {
  125. if(chkViewInactive.Checked) {
  126. lstUsers.Items.Add(new ListItem(PrintUser(users.AllUsers[i]), users.AllUsers[i].Username));
  127. }
  128. }
  129. }
  130. }
  131. }
  132. }
  133. private string PrintUser(UserInfo user) {
  134. string shift = "";
  135. if(Request.Cookies[Settings.CultureCookieName] != null) shift = Request.Cookies[Settings.CultureCookieName]["T"];
  136. string displayName = user.ToString();
  137. if(displayName.Contains(user.GetType().ToString()) || string.IsNullOrEmpty(displayName)) displayName = user.Username;
  138. StringBuilder sb = new StringBuilder(displayName);
  139. if(displayName != user.Username) sb.AppendFormat(" ({0})", user.Username);
  140. if(!user.Active) sb.Append(", Inactive");
  141. if(user.Admin) sb.Append(", Admin");
  142. sb.AppendFormat(" ({0})", user.Email);
  143. sb.AppendFormat(" [{0}]", user.Provider.Information.Name);
  144. sb.AppendFormat(" {0}", Tools.AlignWithPreferences(user.DateTime, shift).ToString(Settings.DateTimeFormat));
  145. return sb.ToString();
  146. }
  147. private void LoadPages(bool cleanBackupList) {
  148. Pages pages = Pages.Instance;
  149. lstPages.Items.Clear();
  150. for(int i = 0; i < pages.AllPages.Count; i++) {
  151. if(pages.AllPages[i].Status == PageStatus.Locked) {
  152. if(chkViewLocked.Checked) {
  153. lstPages.Items.Add(new ListItem(pages.AllPages[i].ToString(), pages.AllPages[i].Name));
  154. }
  155. }
  156. else if(pages.AllPages[i].Status == PageStatus.Public) {
  157. if(chkViewPublic.Checked) {
  158. lstPages.Items.Add(new ListItem(pages.AllPages[i].ToString(), pages.AllPages[i].Name));
  159. }
  160. }
  161. else {
  162. if(chkViewNormal.Checked) {
  163. lstPages.Items.Add(new ListItem(pages.AllPages[i].ToString(), pages.AllPages[i].Name));
  164. }
  165. }
  166. }
  167. if(cleanBackupList) {
  168. lstPageBackups.Items.Clear();
  169. lstPageBackups.Items.Add(new ListItem(" --- ", ""));
  170. btnDeleteAllBackups.Enabled = false;
  171. btnDeleteOlderBackups.Enabled = false;
  172. btnRollback.Enabled = false;
  173. }
  174. }
  175. private void LoadConfig() {
  176. txtWikiTitle.Text = Settings.WikiTitle;
  177. txtMainUrl.Text = Settings.MainUrl;
  178. string[] themes = Tools.AvailableThemes;
  179. lstTheme.Items.Clear();
  180. for(int i = 0; i < themes.Length; i++) {
  181. lstTheme.Items.Add(new ListItem(themes[i], themes[i]));
  182. if(lstTheme.Items[i].Value.Equals(Settings.Theme)) {
  183. lstTheme.Items[i].Selected = true;
  184. }
  185. }
  186. txtContactEmail.Text = Settings.ContactEmail;
  187. txtSenderEmail.Text = Settings.SenderEmail;
  188. txtSmtpServer.Text = Settings.SmtpServer;
  189. txtSmtpUsername.Text = Settings.SmtpUsername;
  190. //txtSmtpPassword.Text = Settings.SmtpPassword; // This is not rendered by ASP.NET, use "value" attribute instead
  191. txtSmtpPassword.Attributes.Add("value", Settings.SmtpPassword);
  192. txtSmtpPort.Text = Settings.SmtpPort != -1 ? Settings.SmtpPort.ToString() : "";
  193. chkSmtpSsl.Checked = Settings.SmtpSsl;
  194. lstDefaultPage.Items.Clear();
  195. Pages pages = Pages.Instance;
  196. bool sel = false; // Select only ONE page
  197. for(int i = 0; i < pages.AllPages.Count; i++) {
  198. lstDefaultPage.Items.Add(new ListItem(pages.AllPages[i].Name, pages.AllPages[i].Name));
  199. if(!sel && lstDefaultPage.Items[i].Value.Equals(Settings.DefaultPage)) {
  200. sel = true;
  201. lstDefaultPage.Items[i].Selected = true;
  202. }
  203. }
  204. chkEnableDoubleClickEditing.Checked = Settings.EnableDoubleClickEditing;
  205. chkDisableBreadcrumbsTrail.Checked = Settings.DisableBreadcrumbsTrail;
  206. chkProcessSingleLineBreaks.Checked = Settings.ProcessSingleLineBreaks;
  207. // This feature is currently DISABLED
  208. //if(Settings.KeptBackupNumber >= 0) txtKeptBackupsNumber.Text = Settings.KeptBackupNumber.ToString();
  209. //else txtKeptBackupsNumber.Text = "";
  210. txtDateTimeFormat.Text = Settings.DateTimeFormat;
  211. lstDefaultLanguage.Items.Clear();
  212. lstDefaultLanguage.Items.Add(new ListItem("English", "en-US"));
  213. for(int i = 0; i < Tools.AvailableCultures.Length; i++) {
  214. lstDefaultLanguage.Items.Add(new ListItem(Tools.AvailableCultures[i].Split('|')[1], Tools.AvailableCultures[i].Split('|')[0]));
  215. }
  216. for(int i = 0; i < lstDefaultLanguage.Items.Count; i++) {
  217. lstDefaultLanguage.Items[i].Selected = false;
  218. if(lstDefaultLanguage.Items[i].Value.Equals(Settings.DefaultLanguage)) {
  219. lstDefaultLanguage.Items[i].Selected = true;
  220. break;
  221. }
  222. }
  223. for(int i = 0; i < lstDefaultTimezone.Items.Count; i++) {
  224. lstDefaultTimezone.Items[i].Selected = false;
  225. if(lstDefaultTimezone.Items[i].Value.Equals(Settings.DefaultTimezone)) {
  226. lstDefaultTimezone.Items[i].Selected = true;
  227. break;
  228. }
  229. }
  230. chkUsersCanRegister.Checked = Settings.UsersCanRegister;
  231. for(int i = 0; i < lstAccountActivationMode.Items.Count; i++) {
  232. lstAccountActivationMode.Items[i].Selected = false;
  233. if(lstAccountActivationMode.Items[i].Value.Equals(Settings.AccountActivationMode)) {
  234. lstAccountActivationMode.Items[i].Selected = true;
  235. break;
  236. }
  237. }
  238. chkDisableCaptchaControl.Checked = Settings.DisableCaptchaControl;
  239. for(int i = 0; i < lstDiscussionPermissions.Items.Count; i++) {
  240. lstDiscussionPermissions.Items[i].Selected = false;
  241. if(lstDiscussionPermissions.Items[i].Value.ToLowerInvariant().Equals(Settings.DiscussionPermissions.ToLowerInvariant())) {
  242. lstDiscussionPermissions.Items[i].Selected = true;
  243. break;
  244. }
  245. }
  246. chkUsersCanCreateNewPages.Checked = Settings.UsersCanCreateNewPages;
  247. chkUsersCanCreateNewCategories.Checked = Settings.UsersCanCreateNewCategories;
  248. chkUsersCanManagePageCategories.Checked = Settings.UsersCanManagePageCategories;
  249. chkUsersCanViewFiles.Checked = Settings.UsersCanViewFiles;
  250. if(Settings.UsersCanViewFiles) {
  251. chkUsersCanUploadFiles.Checked = Settings.UsersCanUploadFiles;
  252. chkUsersCanDeleteFiles.Checked = Settings.UsersCanDeleteFiles;
  253. chkUsersCanUploadFiles.Enabled = true;
  254. chkUsersCanDeleteFiles.Enabled = true;
  255. }
  256. else {
  257. chkUsersCanUploadFiles.Checked = false;
  258. chkUsersCanDeleteFiles.Checked = false;
  259. chkUsersCanUploadFiles.Enabled = false;
  260. chkUsersCanDeleteFiles.Enabled = false;
  261. }
  262. chkPrivateAccess.Checked = Settings.PrivateAccess;
  263. if(Settings.PrivateAccess) {
  264. chkPublicAccess.Enabled = false;
  265. chkPublicAccess.Checked = false;
  266. chkFileManagementInPublicAccessAllowed.Enabled = false;
  267. chkFileManagementInPublicAccessAllowed.Checked = false;
  268. }
  269. else {
  270. if(Settings.PublicAccess) {
  271. chkPrivateAccess.Enabled = false;
  272. chkPrivateAccess.Checked = false;
  273. chkPublicAccess.Enabled = true;
  274. chkPublicAccess.Checked = true;
  275. chkFileManagementInPublicAccessAllowed.Enabled = true;
  276. chkFileManagementInPublicAccessAllowed.Checked = Settings.FileManagementInPublicAccessAllowed;
  277. }
  278. else {
  279. chkPrivateAccess.Enabled = true;
  280. chkPrivateAccess.Checked = false;
  281. chkPublicAccess.Enabled = true;
  282. chkPublicAccess.Checked = false;
  283. chkFileManagementInPublicAccessAllowed.Enabled = false;
  284. chkFileManagementInPublicAccessAllowed.Checked = false;
  285. }
  286. }
  287. chkDisableConcurrentEditing.Checked = Settings.DisableConcurrentEditing;
  288. txtAllowedFileTypes.Text = "";
  289. string[] aft = Settings.AllowedFileTypes;
  290. for(int i = 0; i < aft.Length; i++) {
  291. txtAllowedFileTypes.Text += aft[i];
  292. if(i != aft.Length - 1) txtAllowedFileTypes.Text += ", ";
  293. }
  294. chkScriptTagsAllowed.Checked = Settings.ScriptTagsAllowed;
  295. lstLoggingLevel.SelectedIndex = 3 - Settings.LoggingLevel;
  296. txtMaxLogSize.Text = Settings.MaxLogSize.ToString();
  297. chkConfigVisibleToAdmins.Checked = Settings.ConfigVisibleToAdmins;
  298. // Advanced Options
  299. chkDisableAutomaticVersionCheck.Checked = Settings.DisableAutomaticVersionCheck;
  300. txtMaxFileSize.Text = Settings.MaxFileSize.ToString();
  301. txtCacheSize.Text = Settings.CacheSize.ToString();
  302. txtCacheCutSize.Text = Settings.CacheCutSize.ToString();
  303. chkDisableCache.Checked = Settings.DisableCache;
  304. txtCacheSize.Enabled = !Settings.DisableCache;
  305. txtCacheCutSize.Enabled = !Settings.DisableCache;
  306. txtFileAccessTries.Text = Settings.FileAccessTries.ToString();
  307. txtFileAccessTryDelay.Text = Settings.FileAccessTryDelay.ToString();
  308. chkEnableViewStateCompression.Checked = Settings.EnableViewStateCompression;
  309. chkEnableHttpCompression.Checked = Settings.EnableHttpCompression;
  310. txtUsernameRegex.Text = Settings.UsernameRegex;
  311. txtPasswordRegex.Text = Settings.PasswordRegex;
  312. }
  313. public void PrintSystemStatus() {
  314. StringBuilder sb = new StringBuilder();
  315. sb.Append(Resources.Messages.OnlineUsers + ": <b>" + Users.OnlineUsers.ToString() + "</b><br />" + "\n");
  316. int inactive = 0;
  317. for(int i = 0; i < Users.Instance.AllUsers.Count; i++) {
  318. if(!Users.Instance.AllUsers[i].Active) inactive++;
  319. }
  320. sb.Append(Resources.Messages.UserCount + ": <b>" + Users.Instance.AllUsers.Count.ToString() + "</b> (" + inactive.ToString() + " " + Resources.Messages.InactiveUsers + ")<br />" + "\n");
  321. sb.Append(Resources.Messages.CachedPages + ": <b>" + Content.CacheUsage + "/" + Pages.Instance.AllPages.Count.ToString() + "</b><br />" + "\n");
  322. sb.Append(Resources.Messages.WikiVersion + ": <b>" + Settings.WikiVersion + "</b>" + "\n");
  323. if(!Page.IsPostBack) {
  324. sb.Append(CheckVersion());
  325. }
  326. sb.Append("<br />");
  327. sb.Append(Resources.Messages.ServerUptime + ": <b>" + Tools.TimeSpanToString(Tools.SystemUptime) + "</b> (" + Resources.Messages.MayBeInaccurate + ")");
  328. lblSystemStatusContent.Text = sb.ToString();
  329. }
  330. private string CheckVersion() {
  331. if(Settings.DisableAutomaticVersionCheck) return "";
  332. StringBuilder sb = new StringBuilder();
  333. sb.Append("(");
  334. HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.screwturn.eu/Version/Wiki/2.htm");
  335. try {
  336. HttpWebResponse res = (HttpWebResponse)req.GetResponse();
  337. StreamReader sr = new StreamReader(res.GetResponseStream());
  338. string ver = sr.ReadToEnd();
  339. sr.Close();
  340. string[] versions = ver.Split('|');
  341. bool upToDate = false;
  342. for(int i = 0; i < versions.Length; i++) {
  343. ver = versions[i];
  344. if(versions[i].Equals(Settings.WikiVersion)) {
  345. if(i == versions.Length - 1) upToDate = true;
  346. else upToDate = false;
  347. ver = versions[versions.Length - 1];
  348. break;
  349. }
  350. }
  351. if(!upToDate) {
  352. sb.Append(@"<span style=""color: #009900;"">" + Resources.Messages.NewVersionFound + ": <b>" + ver + "</b></span>");
  353. }
  354. else {
  355. sb.Append(@"<span style=""color: #009900;"">" + Resources.Messages.WikiUpToDate + "</span>");
  356. }
  357. }
  358. catch {
  359. sb.Append(@"<span style=""color: #FF0000;"">" + Resources.Messages.VersionCheckError + "</span>");
  360. }
  361. sb.Append(")");
  362. return sb.ToString();
  363. }
  364. public void PrintFileEditing() {
  365. StringBuilder sb = new StringBuilder();
  366. sb.Append("<ul>" + "\n");
  367. // Files that can be edited are specified in Settings.EditableFiles
  368. FileInfo fileInfo;
  369. fileInfo = new FileInfo(Settings.HeaderFile);
  370. sb.Append("<li>");
  371. sb.Append("<b>" + Resources.Messages.HeaderFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  372. sb.Append("</li>" + "\n");
  373. fileInfo = new FileInfo(Settings.SidebarFile);
  374. sb.Append("<li>");
  375. sb.Append("<b>" + Resources.Messages.SidebarFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  376. sb.Append("</li>" + "\n");
  377. fileInfo = new FileInfo(Settings.FooterFile);
  378. sb.Append("<li>");
  379. sb.Append("<b>" + Resources.Messages.FooterFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  380. sb.Append("</li>" + "\n");
  381. fileInfo = new FileInfo(Settings.AccountActivationMessageFile);
  382. sb.Append("<li>");
  383. sb.Append("<b>" + Resources.Messages.AccountActivationMessageFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  384. sb.Append("</li>" + "\n");
  385. fileInfo = new FileInfo(Settings.PasswordResetMessageFile);
  386. sb.Append("<li>");
  387. sb.Append("<b>" + Resources.Messages.PasswordResetMessageFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  388. sb.Append("</li>" + "\n");
  389. fileInfo = new FileInfo(Settings.EditNoticeFile);
  390. sb.Append("<li>");
  391. sb.Append("<b>" + Resources.Messages.EditNoticeFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  392. sb.Append("</li>" + "\n");
  393. fileInfo = new FileInfo(Settings.LoginNoticeFile);
  394. sb.Append("<li>");
  395. sb.Append("<b>" + Resources.Messages.LoginNoticeFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  396. sb.Append("</li>");
  397. fileInfo = new FileInfo(Settings.HtmlHeadFile);
  398. sb.Append("<li>");
  399. sb.Append("<b>" + Resources.Messages.HtmlHeadFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  400. sb.Append("</li>" + "\n");
  401. fileInfo = new FileInfo(Settings.PageHeaderFile);
  402. sb.Append("<li>");
  403. sb.Append("<b>" + Resources.Messages.PageHeaderFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  404. sb.Append("</li>");
  405. fileInfo = new FileInfo(Settings.PageFooterFile);
  406. sb.Append("<li>");
  407. sb.Append("<b>" + Resources.Messages.PageFooterFile + "</b> (" + Tools.BytesToString(fileInfo.Length) + @") - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=View"">" + Resources.Messages.View + @"</a> - <a href=""Edit.aspx?File=" + fileInfo.Name + @"&amp;Action=Edit"">" + Resources.Messages.Edit + @"</a>");
  408. sb.Append("</li>");
  409. sb.Append("</ul>" + "\n");
  410. lblFileEditingContent.Text = sb.ToString();
  411. }
  412. private void LoadSnippets() {
  413. lstSnippets.Items.Clear();
  414. for(int i = 0; i < Snippets.Instance.AllSnippets.Count; i++) {
  415. lstSnippets.Items.Add(new ListItem(Snippets.Instance.AllSnippets[i].Name + " [" + Snippets.Instance.AllSnippets[i].Provider.Information.Name + "]", Snippets.Instance.AllSnippets[i].Name));
  416. }
  417. }
  418. private void LoadCategories() {
  419. lstCategories.Items.Clear();
  420. lstMergeCategory.Items.Clear();
  421. lstMergeCategory.Enabled = false;
  422. for(int i = 0; i < Pages.Instance.AllCategories.Count; i++) {
  423. lstCategories.Items.Add(new ListItem(Pages.Instance.AllCategories[i].Name + " (" + Pages.Instance.AllCategories[i].Pages.Length.ToString() + ") [" + Pages.Instance.AllCategories[i].Provider.Information.Name + "]", Pages.Instance.AllCategories[i].Name));
  424. }
  425. }
  426. private void LoadNavPaths() {
  427. lstNavPaths.Items.Clear();
  428. for(int i = 0; i < NavigationPaths.Instance.Paths.Count; i++) {
  429. string pages = "";
  430. for(int k = 0; k < NavigationPaths.Instance.Paths[i].Pages.Count; k++) {
  431. pages += NavigationPaths.Instance.Paths[i].Pages[k];
  432. if(k != NavigationPaths.Instance.Paths[i].Pages.Count - 1) pages += ", ";
  433. }
  434. lstNavPaths.Items.Add(new ListItem(NavigationPaths.Instance.Paths[i].Name + " - " + pages + " [" + NavigationPaths.Instance.Paths[i].Provider.Information.Name + "]", NavigationPaths.Instance.Paths[i].Name));
  435. }
  436. }
  437. private void LoadProviders() {
  438. lstProviders.Items.Clear();
  439. lstDefaultPagesProvider.Items.Clear();
  440. lstCategoryProvider.Items.Clear();
  441. lstDefaultUsersProvider.Items.Clear();
  442. lstUserProvider.Items.Clear();
  443. lstNavPathProvider.Items.Clear();
  444. lstSnippetProvider.Items.Clear();
  445. lstPagesProviderFrom.Items.Clear();
  446. lstUsersProviderFrom.Items.Clear();
  447. string pd = Settings.DefaultPagesProvider;
  448. string ud = Settings.DefaultUsersProvider;
  449. int count = 0;
  450. lstPagesProviderFrom.Items.Add(new ListItem("", "-"));
  451. IPagesStorageProvider[] pgs = Collectors.PagesProviderCollector.AllProviders;
  452. for(int i = 0; i < pgs.Length; i++) {
  453. lstProviders.Items.Add(new ListItem("[P] " + pgs[i].Information.Name, "[P]" + pgs[i].GetType().ToString()));
  454. lstPagesProviderFrom.Items.Add(new ListItem(pgs[i].Information.Name, pgs[i].GetType().ToString()));
  455. if(!pgs[i].ReadOnly) {
  456. lstDefaultPagesProvider.Items.Add(new ListItem(pgs[i].Information.Name, pgs[i].GetType().ToString()));
  457. lstCategoryProvider.Items.Add(new ListItem(pgs[i].Information.Name, pgs[i].GetType().ToString()));
  458. lstNavPathProvider.Items.Add(new ListItem(pgs[i].Information.Name, pgs[i].GetType().ToString()));
  459. lstSnippetProvider.Items.Add(new ListItem(pgs[i].Information.Name, pgs[i].GetType().ToString()));
  460. if(pgs[i].GetType().ToString().Equals(pd)) {
  461. lstDefaultPagesProvider.Items[count].Selected = true;
  462. lstCategoryProvider.Items[count].Selected = true;
  463. lstNavPathProvider.Items[count].Selected = true;
  464. lstSnippetProvider.Items[count].Selected = true;
  465. }
  466. count++;
  467. }
  468. }
  469. count = 0;
  470. lstUsersProviderFrom.Items.Add(new ListItem("", "-"));
  471. IUsersStorageProvider[] urs = Collectors.UsersProviderCollector.AllProviders;
  472. for(int i = 0; i < urs.Length; i++) {
  473. lstProviders.Items.Add(new ListItem("[U] " + urs[i].Information.Name, "[U]" + urs[i].GetType().ToString()));
  474. lstUsersProviderFrom.Items.Add(new ListItem(urs[i].Information.Name, urs[i].GetType().ToString()));
  475. if(!urs[i].ReadOnly) {
  476. lstDefaultUsersProvider.Items.Add(new ListItem(urs[i].Information.Name, urs[i].GetType().ToString()));
  477. lstUserProvider.Items.Add(new ListItem(urs[i].Information.Name, urs[i].GetType().ToString()));
  478. if(urs[i].GetType().ToString().Equals(ud)) {
  479. lstDefaultUsersProvider.Items[count].Selected = true;
  480. lstUserProvider.Items[count].Selected = true;
  481. }
  482. count++;
  483. }
  484. }
  485. IFormatterProvider[] frs = Collectors.FormatterProviderCollector.AllProviders;
  486. for(int i = 0; i < frs.Length; i++) {
  487. lstProviders.Items.Add(new ListItem("[F] " + frs[i].Information.Name, "[F]" + frs[i].GetType().ToString()));
  488. }
  489. pgs = Collectors.DisabledPagesProviderCollector.AllProviders;
  490. for(int i = 0; i < pgs.Length; i++) {
  491. lstProviders.Items.Add(new ListItem("[P] " + pgs[i].Information.Name + " - " + Resources.Messages.Disabled, "[P]" + pgs[i].GetType().ToString()));
  492. }
  493. urs = Collectors.DisabledUsersProviderCollector.AllProviders;
  494. for(int i = 0; i < urs.Length; i++) {
  495. lstProviders.Items.Add(new ListItem("[U] " + urs[i].Information.Name + " - " + Resources.Messages.Disabled, "[U]" + urs[i].GetType().ToString()));
  496. }
  497. frs = Collectors.DisabledFormatterProviderCollector.AllProviders;
  498. for(int i = 0; i < frs.Length; i++) {
  499. lstProviders.Items.Add(new ListItem("[F] " + frs[i].Information.Name + " - " + Resources.Messages.Disabled, "[F]" + frs[i].GetType().ToString()));
  500. }
  501. }
  502. private void LoadDlls() {
  503. string[] files = Directory.GetFiles(Settings.PluginsDirectory, "*.dll");
  504. lstDlls.Items.Clear();
  505. for(int i = 0; i < files.Length; i++) {
  506. lstDlls.Items.Add(new ListItem(Path.GetFileName(files[i]), Path.GetFileName(files[i])));
  507. }
  508. }
  509. private void LoadRegExp() {
  510. // Load RegExp's from Web.Config
  511. //User
  512. rxvEmail.ValidationExpression = Settings.EmailRegex;
  513. rxvUserName.ValidationExpression = Settings.UsernameRegex;
  514. rxvPassword1.ValidationExpression = Settings.PasswordRegex;
  515. //Config
  516. rxvWikiTitle.ValidationExpression = Settings.WikiTitleRegex;
  517. rxvMainUrl.ValidationExpression = Settings.MainUrlRegex;
  518. rxvContactEmail.ValidationExpression = Settings.EmailRegex;
  519. rxvSenderEmail.ValidationExpression = Settings.EmailRegex;
  520. rxvSmtpServer.ValidationExpression = Settings.SmtpServerRegex;
  521. }
  522. private void LoadValidationLocalizations() {
  523. string image = @"<img src=""Images/InputError.png"" alt=""Error"" />";
  524. // User validators
  525. rfvUsername.ErrorMessage = Resources.Messages.RequiredField;
  526. rfvUsername.ToolTip = Resources.Messages.RequiredField;
  527. rfvUsername.Text = image;
  528. rfvEmail.ErrorMessage = Resources.Messages.RequiredField;
  529. rfvEmail.ToolTip = Resources.Messages.RequiredField;
  530. rfvEmail.Text = image;
  531. rfvPassword1.ErrorMessage = Resources.Messages.RequiredField;
  532. rfvPassword1.ToolTip = Resources.Messages.RequiredField;
  533. rfvPassword1.Text = image;
  534. rfvPassword2.ErrorMessage = Resources.Messages.RequiredField;
  535. rfvPassword2.ToolTip = Resources.Messages.RequiredField;
  536. rfvPassword2.Text = image;
  537. rxvUserName.ErrorMessage = Resources.Messages.InvalidUsername;
  538. rxvUserName.ToolTip = Resources.Messages.InvalidUsername;
  539. rxvUserName.Text = image;
  540. rxvEmail.ErrorMessage = Resources.Messages.InvalidEmail;
  541. rxvEmail.ToolTip = Resources.Messages.InvalidEmail;
  542. rxvEmail.Text = image;
  543. rxvPassword1.ErrorMessage = Resources.Messages.InvalidPassword;
  544. rxvPassword1.ToolTip = Resources.Messages.InvalidPassword;
  545. rxvPassword1.Text = image;
  546. cvUsername.ErrorMessage = Resources.Messages.UsernameAlreadyExists;
  547. cvUsername.ToolTip = Resources.Messages.UsernameAlreadyExists;
  548. cvUsername.Text = image;
  549. cvPassword1.ErrorMessage = Resources.Messages.PasswordsNotEqual;
  550. cvPassword1.ToolTip = Resources.Messages.PasswordsNotEqual;
  551. cvPassword1.Text = image;
  552. cvPassword2.ErrorMessage = Resources.Messages.PasswordsNotEqual;
  553. cvPassword2.ToolTip = Resources.Messages.PasswordsNotEqual;
  554. cvPassword2.Text = image;
  555. // Config Validators
  556. // General
  557. rfvWikiTitle.ErrorMessage = Resources.Messages.RequiredField;
  558. rfvWikiTitle.ToolTip = Resources.Messages.RequiredField;
  559. rfvWikiTitle.Text = image;
  560. rfvMainUrl.ErrorMessage = Resources.Messages.RequiredField;
  561. rfvMainUrl.ToolTip = Resources.Messages.RequiredField;
  562. rfvMainUrl.Text = image;
  563. rfvContactEmail.ErrorMessage = Resources.Messages.RequiredField;
  564. rfvContactEmail.ToolTip = Resources.Messages.RequiredField;
  565. rfvContactEmail.Text = image;
  566. rfvSenderEmail.ErrorMessage = Resources.Messages.RequiredField;
  567. rfvSenderEmail.ToolTip = Resources.Messages.RequiredField;
  568. rfvSenderEmail.Text = image;
  569. rfvSmtpServer.ErrorMessage = Resources.Messages.RequiredField;
  570. rfvSmtpServer.ToolTip = Resources.Messages.RequiredField;
  571. rfvSmtpServer.Text = image;
  572. cvSmtpAuth.ErrorMessage = Resources.Messages.UsernameIsRequired;
  573. cvSmtpAuth.ToolTip = Resources.Messages.UsernameIsRequired;
  574. cvSmtpAuth.Text = image;
  575. rvSmtpPort.ErrorMessage = Resources.Messages.InvalidPort;
  576. rvSmtpPort.ToolTip = Resources.Messages.InvalidPort;
  577. rvSmtpPort.Text = image;
  578. rxvWikiTitle.ErrorMessage = Resources.Messages.InvalidWikiTitle;
  579. rxvWikiTitle.ToolTip = Resources.Messages.InvalidWikiTitle;
  580. rxvWikiTitle.Text = image;
  581. rxvMainUrl.ErrorMessage = Resources.Messages.InvalidMainUrl;
  582. rxvMainUrl.ToolTip = Resources.Messages.InvalidMainUrl;
  583. rxvMainUrl.Text = image;
  584. rxvContactEmail.ErrorMessage = Resources.Messages.InvalidContactEmail;
  585. rxvContactEmail.ToolTip = Resources.Messages.InvalidContactEmail;
  586. rxvContactEmail.Text = image;
  587. rxvSenderEmail.ErrorMessage = Resources.Messages.InvalidSenderEmail;
  588. rxvSenderEmail.ToolTip = Resources.Messages.InvalidSenderEmail;
  589. rxvSenderEmail.Text = image;
  590. rxvSmtpServer.ErrorMessage = Resources.Messages.InvalidSmtpServer;
  591. rxvSmtpServer.ToolTip = Resources.Messages.InvalidSmtpServer;
  592. rxvSmtpServer.Text = image;
  593. //rvKeptBackupsNumber.ErrorMessage = Resources.Messages.InvalidBackupNumber;
  594. //rvKeptBackupsNumber.ToolTip = Resources.Messages.InvalidBackupNumber;
  595. //rvKeptBackupsNumber.Text = image;
  596. rfvDateTimeFormat.ErrorMessage = Resources.Messages.RequiredField;
  597. rfvDateTimeFormat.ToolTip = Resources.Messages.RequiredField;
  598. rfvDateTimeFormat.Text = image;
  599. cvDateTimeFormat.ErrorMessage = Resources.Messages.InvalidDateTimeFormat;
  600. cvDateTimeFormat.ToolTip = Resources.Messages.InvalidDateTimeFormat;
  601. cvDateTimeFormat.Text = image;
  602. rfvMaxLogSize.ErrorMessage = Resources.Messages.RequiredField;
  603. rfvMaxLogSize.ToolTip = Resources.Messages.RequiredField;
  604. rfvMaxLogSize.Text = image;
  605. rvMaxLogSize.ErrorMessage = Resources.Messages.InvalidMaxLogSize;
  606. rvMaxLogSize.ToolTip = Resources.Messages.InvalidMaxLogSize;
  607. rvMaxLogSize.Text = image;
  608. // Advanced
  609. rfvMaxFileSize.ErrorMessage = Resources.Messages.RequiredField;
  610. rfvMaxFileSize.ToolTip = Resources.Messages.RequiredField;
  611. rfvMaxFileSize.Text = image;
  612. rfvCacheSize.ErrorMessage = Resources.Messages.RequiredField;
  613. rfvCacheSize.ToolTip = Resources.Messages.RequiredField;
  614. rfvCacheSize.Text = image;
  615. rfvCacheCutSize.ErrorMessage = Resources.Messages.RequiredField;
  616. rfvCacheCutSize.ToolTip = Resources.Messages.RequiredField;
  617. rfvCacheCutSize.Text = image;
  618. rfvFileAccessTries.ErrorMessage = Resources.Messages.RequiredField;
  619. rfvFileAccessTries.ToolTip = Resources.Messages.RequiredField;
  620. rfvFileAccessTries.Text = image;
  621. rfvFileAccessTryDelay.ErrorMessage = Resources.Messages.RequiredField;
  622. rfvFileAccessTryDelay.ToolTip = Resources.Messages.RequiredField;
  623. rfvFileAccessTryDelay.Text = image;
  624. rvMaxFileSize.ErrorMessage = Resources.Messages.InvalidMaxFileSize;
  625. rvMaxFileSize.ToolTip = Resources.Messages.InvalidMaxFileSize;
  626. rvMaxFileSize.Text = image;
  627. rvCacheSize.ErrorMessage = Resources.Messages.InvalidCacheSize;
  628. rvCacheSize.ToolTip = Resources.Messages.InvalidCacheSize;
  629. rvCacheSize.Text = image;
  630. rvCacheCutSize.ErrorMessage = Resources.Messages.InvalidCacheCutSize;
  631. rvCacheCutSize.ToolTip = Resources.Messages.InvalidCacheCutSize;
  632. rvCacheCutSize.Text = image;
  633. rvFileAccessTries.ErrorMessage = Resources.Messages.InvalidFileAccessTries;
  634. rvFileAccessTries.ToolTip = Resources.Messages.InvalidFileAccessTries;
  635. rvFileAccessTries.Text = image;
  636. rvFileAccessTryDelay.ErrorMessage = Resources.Messages.InvalidFileAccessTryDelay;
  637. rvFileAccessTryDelay.ToolTip = Resources.Messages.InvalidFileAccessTryDelay;
  638. rvFileAccessTryDelay.Text = image;
  639. cmpvCacheCutSize.ErrorMessage = Resources.Messages.InvalidCacheCutSize;
  640. cmpvCacheCutSize.ToolTip = Resources.Messages.InvalidCacheCutSize;
  641. cmpvCacheCutSize.Text = image;
  642. }
  643. #endregion
  644. #region Users
  645. protected void chkViewUsers_CheckedChanged(object sender, EventArgs e) {
  646. LoadUsers();
  647. }
  648. protected void chkViewAdmins_CheckedChanged(object sender, EventArgs e) {
  649. LoadUsers();
  650. }
  651. protected void chkViewActive_CheckedChanged(object sender, EventArgs e) {
  652. LoadUsers();
  653. }
  654. protected void chkViewInactive_CheckedChanged(object sender, EventArgs e) {
  655. LoadUsers();
  656. }
  657. protected void btnDeleteUser_Click(object sender, EventArgs e) {
  658. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  659. if(user == null) {
  660. lblUserResult.CssClass = "resulterror";
  661. lblUserResult.Text = Resources.Messages.UserNotFound;
  662. return;
  663. }
  664. Log.LogEntry("User removal requested for " + user.Username, EntryType.General, SessionFacade.Username);
  665. Users.Instance.RemoveUser(user);
  666. lblUserResult.CssClass = "resultok";
  667. lblUserResult.Text = Resources.Messages.UserDeleted;
  668. LoadUsers();
  669. }
  670. protected void btnDeactivateUser_Click(object sender, EventArgs e) {
  671. int index = lstUsers.SelectedIndex;
  672. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  673. if(user == null) {
  674. lblUserResult.CssClass = "resulterror";
  675. lblUserResult.Text = Resources.Messages.UserNotFound;
  676. return;
  677. }
  678. Log.LogEntry("User deactivation requested for " + user.Username, EntryType.General, SessionFacade.Username);
  679. Users.Instance.SetActivationStatus(user, false);
  680. lblUserResult.CssClass = "resultok";
  681. lblUserResult.Text = Resources.Messages.UserDeactivated;
  682. LoadUsers();
  683. try {
  684. lstUsers.SelectedIndex = index;
  685. }
  686. catch { }
  687. }
  688. protected void btnActivateUser_Click(object sender, EventArgs e) {
  689. int index = lstUsers.SelectedIndex;
  690. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  691. if(user == null) {
  692. lblUserResult.CssClass = "resulterror";
  693. lblUserResult.Text = Resources.Messages.UserNotFound;
  694. return;
  695. }
  696. Log.LogEntry("User activation requested for " + user.Username, EntryType.General, SessionFacade.Username);
  697. Users.Instance.SetActivationStatus(user, true);
  698. lblUserResult.CssClass = "resultok";
  699. lblUserResult.Text = Resources.Messages.UserActivated;
  700. LoadUsers();
  701. try {
  702. lstUsers.SelectedIndex = index;
  703. }
  704. catch { }
  705. }
  706. protected void btnPromoteUser_Click(object sender, EventArgs e) {
  707. int index = lstUsers.SelectedIndex;
  708. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  709. if(user == null) {
  710. lblUserResult.CssClass = "resulterror";
  711. lblUserResult.Text = Resources.Messages.UserNotFound;
  712. return;
  713. }
  714. Log.LogEntry("User promotion requested for " + user.Username, EntryType.General, SessionFacade.Username);
  715. Users.Instance.SetAdministratorStatus(user, true);
  716. lblUserResult.CssClass = "resultok";
  717. lblUserResult.Text = Resources.Messages.UserPromoted;
  718. LoadUsers();
  719. try {
  720. lstUsers.SelectedIndex = index;
  721. }
  722. catch { }
  723. }
  724. protected void btnDowngradeUser_Click(object sender, EventArgs e) {
  725. int index = lstUsers.SelectedIndex;
  726. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  727. if(user == null) {
  728. lblUserResult.CssClass = "resulterror";
  729. lblUserResult.Text = Resources.Messages.UserNotFound;
  730. return;
  731. }
  732. Log.LogEntry("User downgrading requested for " + user.Username, EntryType.General, SessionFacade.Username);
  733. Users.Instance.SetAdministratorStatus(user, false);
  734. lblUserResult.CssClass = "resultok";
  735. lblUserResult.Text = Resources.Messages.AdminDowngraded;
  736. LoadUsers();
  737. try {
  738. lstUsers.SelectedIndex = index;
  739. }
  740. catch { }
  741. }
  742. protected void btnSendMessage_Click(object sender, EventArgs e) {
  743. UserInfo user = Users.Instance.Find(lstUsers.SelectedValue);
  744. if(user == null) {
  745. lblUserResult.CssClass = "resulterror";
  746. lblUserResult.Text = Resources.Messages.UserNotFound;
  747. return;
  748. }
  749. Response.Redirect("Message.aspx?Username=" + Tools.UrlEncode(user.Username));
  750. }
  751. protected void btnCreateNewAccount_Click(object sender, EventArgs e) {
  752. txtUsername.Enabled = true;
  753. mlvUsers.ActiveViewIndex = 1;
  754. }
  755. protected void btnCreateAccount_Click(object sender, EventArgs e) {
  756. lblCreateAccountResult.Text = "";
  757. if(!Page.IsValid) return;
  758. // Ready to save the user
  759. Log.LogEntry("Account creation requested for " + txtUsername.Text, EntryType.General, SessionFacade.Username);
  760. Users.Instance.AddUser(txtUsername.Text, txtPassword1.Text, txtEmail.Text, true, chkAdmin.Checked, Collectors.UsersProviderCollector.GetProvider(lstUserProvider.SelectedValue));
  761. ClearUserFields();
  762. mlvUsers.ActiveViewIndex = 0;
  763. LoadUsers();
  764. }
  765. protected void btnCancelAccountCreation_Click(object sender, EventArgs e) {
  766. ClearUserFields();
  767. mlvUsers.ActiveViewIndex = 0;
  768. }
  769. protected void lstUsers_SelectedIndexChanged(object sender, EventArgs e) {
  770. if(lstUsers.SelectedIndex != -1) {
  771. btnDeleteUser.Enabled = true;
  772. btnActivateUser.Enabled = true;
  773. btnDeactivateUser.Enabled = true;
  774. btnPromoteUser.Enabled = true;
  775. btnDowngradeUser.Enabled = true;
  776. }
  777. else {
  778. btnDeleteUser.Enabled = false;
  779. btnActivateUser.Enabled = false;
  780. btnDeactivateUser.Enabled = false;
  781. btnPromoteUser.Enabled = false;
  782. btnDowngradeUser.Enabled = false;
  783. }
  784. }
  785. private void ClearUserFields() {
  786. txtUsername.Text = "";
  787. txtPassword1.Text = "";
  788. txtPassword2.Text = "";
  789. txtEmail.Text = "";
  790. chkAdmin.Checked = false;
  791. txtUsername.Enabled = true;
  792. chkAdmin.Visible = true;
  793. lblPasswordChange.Visible = false;
  794. lblUserProvider.Visible = true;
  795. lstUserProvider.Visible = true;
  796. btnCreateAccount.Visible = true;
  797. btnModifyAccount.Visible = false;
  798. }
  799. protected void btnMassEmail_Click(object sender, EventArgs e) {
  800. btnSendMassEmail.Visible = true;
  801. btnCancelMassEmail.Visible = true;
  802. btnBack.Visible = false;
  803. lblMassEmailResult.Text = "";
  804. txtSubject.Text = "";
  805. txtBody.Text = "";
  806. mlvUsers.ActiveViewIndex = 2;
  807. }
  808. protected void btnSendMassEmail_Click(object sender, EventArgs e) {
  809. if(txtSubject.Text.Length == 0 || txtBody.Text.Length == 0) {
  810. lblMassEmailResult.CssClass = "resulterror";
  811. lblMassEmailResult.Text = Resources.Messages.SubjectBodyNeeded;
  812. return;
  813. }
  814. List<string> emails = new List<string>();
  815. bool users = chkSendUsers.Checked, admins = chkSendAdministrator.Checked;
  816. for(int i = 0; i < Users.Instance.AllUsers.Count; i++) {
  817. if(Users.Instance.AllUsers[i].Active &&
  818. ((users && !Users.Instance.AllUsers[i].Admin) || (admins && Users.Instance.AllUsers[i].Admin))) {
  819. emails.Add(Users.Instance.AllUsers[i].Email);
  820. }
  821. }
  822. UserInfo user = Users.Instance.Find(SessionFacade.Username);
  823. if(user == null && SessionFacade.Username.Equals("admin")) user = new UserInfo("admin", Settings.ContactEmail, true, DateTime.Now, true, null);
  824. Log.LogEntry("Sending Mass Email to " + emails.Count.ToString() + " users", EntryType.General, SessionFacade.Username);
  825. EmailSender.SendMassEmail(emails.ToArray(), user.Email, txtSubject.Text, txtBody.Text, false);
  826. lblMassEmailResult.CssClass = "resultok";
  827. lblMassEmailResult.Text = Resources.Messages.MassEmailSent;
  828. btnSendMassEmail.Visible = false;
  829. btnCancelMassEmail.Visible = false;
  830. btnBack.Visible = true;
  831. }
  832. protected void btnCancelMassEmail_Click(object sender, EventArgs e) {
  833. mlvUsers.ActiveViewIndex = 0;
  834. }
  835. protected void btnBack_Click(object sender, EventArgs e) {
  836. mlvUsers.ActiveViewIndex = 0;
  837. }
  838. protected void btnEditAccount_Click(object sender, EventArgs e) {
  839. UserInfo u = Users.Instance.Find(lstUsers.SelectedValue);
  840. if(u == null) {
  841. lblUserResult.CssClass = "resulterror";
  842. lblUserResult.Text = Resources.Messages.UserNotFound;
  843. return;
  844. }
  845. txtUsername.Enabled = false;
  846. txtUsername.Text = u.Username;
  847. txtEmail.Text = u.Email;
  848. chkAdmin.Visible = false;
  849. lblPasswordChange.Visible = true;
  850. lblUserProvider.Visible = false;
  851. lstUserProvider.Visible = false;
  852. btnCreateAccount.Visible = false;
  853. btnModifyAccount.Visible = true;
  854. mlvUsers.ActiveViewIndex = 1;
  855. }
  856. protected void btnModifyAccount_Click(object sender, EventArgs e) {
  857. rfvEmail.Validate();
  858. rxvEmail.Validate();
  859. if(txtPassword1.Text.Length > 0 || txtPassword2.Text.Length > 0) {
  860. cvPassword1.Validate();
  861. cvPassword2.Validate();
  862. }
  863. if(!Page.IsValid) return;
  864. UserInfo u = Users.Instance.Find(txtUsername.Text);
  865. if(!u.Email.Equals(txtEmail.Text)) {
  866. Log.LogEntry("Email change requested for " + u.Username, EntryType.General, SessionFacade.Username);
  867. Users.Instance.ChangeEmail(u, txtEmail.Text);
  868. }
  869. if(txtPassword1.Text.Length > 0) {
  870. Log.LogEntry("Password change requested for " + u.Username, EntryType.General, SessionFacade.Username);
  871. Users.Instance.ChangePassword(u, txtPassword1.Text);
  872. }
  873. ClearUserFields();
  874. lblUserResult.CssClass = "resultok";
  875. lblUserResult.Text = Resources.Messages.UserAccountSaved;
  876. LoadUsers();
  877. mlvUsers.ActiveViewIndex = 0;
  878. }
  879. #endregion
  880. #region Pages
  881. protected void btnPagesPostback_Click(object sender, EventArgs e) {
  882. // No code needed
  883. }
  884. protected void chkViewLocked_CheckedChanged(object sender, EventArgs e) {
  885. LoadPages(true);
  886. }
  887. protected void chkViewNormal_CheckedChanged(object sender, EventArgs e) {
  888. LoadPages(true);
  889. }
  890. protected void chkViewPublic_CheckedChanged(object sender, EventArgs e) {
  891. LoadPages(true);
  892. }
  893. protected void btnGoToPage_Click(object sender, EventArgs e) {
  894. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  895. if(page == null) {
  896. lblPageResult.CssClass = "resulterror";
  897. lblPageResult.Text = Resources.Messages.PageNotFound;
  898. return;
  899. }
  900. Response.Redirect(page.Name + Settings.PageExtension);
  901. }
  902. protected void btnDeletePage_Click(object sender, EventArgs e) {
  903. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  904. if(page == null) {
  905. lblPageResult.CssClass = "resulterror";
  906. lblPageResult.Text = Resources.Messages.PageNotFound;
  907. return;
  908. }
  909. Log.LogEntry("Page deletion requested for " + page.Name, EntryType.General, SessionFacade.Username);
  910. Pages.Instance.DeletePage(page);
  911. lblPageResult.CssClass = "resultok";
  912. lblPageResult.Text = Resources.Messages.PageDeleted;
  913. txtPageName.Text = "";
  914. LoadPages(true);
  915. }
  916. protected void btnClearPageDiscussion_Click(object sender, EventArgs e) {
  917. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  918. if(page == null) {
  919. lblPageResult.CssClass = "resulterror";
  920. lblPageResult.Text = Resources.Messages.PageNotFound;
  921. return;
  922. }
  923. Log.LogEntry("Page Discussion deletion requested for " + page.Name, EntryType.General, SessionFacade.Username);
  924. Message[] messages = Pages.Instance.GetPageMessages(page);
  925. for(int i = 0; i < messages.Length; i++) {
  926. Pages.Instance.RemoveMessage(page, messages[i].ID, true);
  927. }
  928. lblPageResult.CssClass = "resultok";
  929. lblPageResult.Text = Resources.Messages.PageDiscussionCleared;
  930. }
  931. protected void btnSetPageStatus_Click(object sender, EventArgs e) {
  932. int index = lstPages.SelectedIndex;
  933. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  934. if(page == null) {
  935. lblPageResult.CssClass = "resulterror";
  936. lblPageResult.Text = Resources.Messages.PageNotFound;
  937. return;
  938. }
  939. switch(lstPageStatus.SelectedValue) {
  940. case "N":
  941. Log.LogEntry("Page Status change requested for " + page.Name + " (Normal)", EntryType.General, SessionFacade.Username);
  942. Pages.Instance.SetPageStatus(page, PageStatus.Normal);
  943. lblPageResult.CssClass = "resultok";
  944. lblPageResult.Text = Resources.Messages.PageSetNormal;
  945. break;
  946. case "P":
  947. Log.LogEntry("Page Status change requested for " + page.Name + " (Public)", EntryType.General, SessionFacade.Username);
  948. Pages.Instance.SetPageStatus(page, PageStatus.Public);
  949. lblPageResult.CssClass = "resultok";
  950. lblPageResult.Text = Resources.Messages.PageSetPublic;
  951. break;
  952. case "L":
  953. Log.LogEntry("Page Status change requested for " + page.Name + " (Locked)", EntryType.General, SessionFacade.Username);
  954. Pages.Instance.SetPageStatus(page, PageStatus.Locked);
  955. lblPageResult.CssClass = "resultok";
  956. lblPageResult.Text = Resources.Messages.PageSetLocked;
  957. break;
  958. }
  959. LoadPages(false);
  960. try {
  961. lstPages.SelectedIndex = index;
  962. }
  963. catch { }
  964. }
  965. protected void btnDeleteAllBackups_Click(object sender, EventArgs e) {
  966. int index = lstPages.SelectedIndex;
  967. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  968. if(page == null) {
  969. lblPageResult.CssClass = "resulterror";
  970. lblPageResult.Text = Resources.Messages.PageNotFound;
  971. return;
  972. }
  973. Log.LogEntry("Page Backups (all) deletion requested for " + page.Name, EntryType.General, SessionFacade.Username);
  974. Pages.Instance.DeleteBackups(page);
  975. lblPageResult.CssClass = "resultok";
  976. lblPageResult.Text = Resources.Messages.PageBackupsDeleted;
  977. LoadPages(true);
  978. try {
  979. lstPages.SelectedIndex = index;
  980. }
  981. catch { }
  982. }
  983. protected void btnDeleteOlderBackups_Click(object sender, EventArgs e) {
  984. int index = lstPages.SelectedIndex;
  985. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  986. if(page == null) {
  987. lblPageResult.CssClass = "resulterror";
  988. lblPageResult.Text = Resources.Messages.PageNotFound;
  989. return;
  990. }
  991. string selectedBackup = lstPageBackups.SelectedValue;
  992. if(selectedBackup == null || selectedBackup.Length == 0 || selectedBackup.Equals(" --- ")) {
  993. lblPageResult.CssClass = "resulterror";
  994. lblPageResult.Text = Resources.Messages.PleaseSelectValidBackup;
  995. return;
  996. }
  997. int version = int.Parse(selectedBackup);
  998. Log.LogEntry("Page Backups (0-" + version.ToString() + ") deletion requested for " + page.Name, EntryType.General, SessionFacade.Username);
  999. Pages.Instance.DeleteBackups(page, version);
  1000. lblPageResult.CssClass = "resultok";
  1001. lblPageResult.Text = Resources.Messages.PageBackupsDeleted;
  1002. LoadPages(true);
  1003. try {
  1004. lstPages.SelectedIndex = index;
  1005. lstPages_SelectedIndexChanged(this, null); // Reload backups list
  1006. }
  1007. catch { }
  1008. }
  1009. protected void btnRollback_Click(object sender, EventArgs e) {
  1010. int index = lstPages.SelectedIndex;
  1011. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  1012. if(page == null) {
  1013. lblPageResult.CssClass = "resulterror";
  1014. lblPageResult.Text = Resources.Messages.PageNotFound;
  1015. return;
  1016. }
  1017. string selectedBackup = lstPageBackups.SelectedValue;
  1018. if(selectedBackup == null || selectedBackup.Length == 0 || selectedBackup.Equals(" --- ")) {
  1019. lblPageResult.CssClass = "resulterror";
  1020. lblPageResult.Text = Resources.Messages.PleaseSelectValidBackup;
  1021. return;
  1022. }
  1023. int version = int.Parse(selectedBackup);
  1024. Log.LogEntry("Rollback to version " + version.ToString() + " requested for " + page.Name, EntryType.General, SessionFacade.Username);
  1025. Pages.Instance.Rollback(page, version);
  1026. lblPageResult.CssClass = "resultok";
  1027. lblPageResult.Text = Resources.Messages.RollbackCompleted;
  1028. LoadPages(true);
  1029. try {
  1030. lstPages.SelectedIndex = index;
  1031. lstPages_SelectedIndexChanged(this, null);
  1032. }
  1033. catch { }
  1034. }
  1035. protected void btnRenamePage_Click(object sender, EventArgs e) {
  1036. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  1037. if(page == null) {
  1038. lblPageResult.CssClass = "resulterror";
  1039. lblPageResult.Text = Resources.Messages.PageNotFound;
  1040. return;
  1041. }
  1042. if(!Pages.IsValidName(txtPageName.Text)) {
  1043. lblPageResult.CssClass = "resulterror";
  1044. lblPageResult.Text = Resources.Messages.InvalidPageName;
  1045. return;
  1046. }
  1047. if(Pages.Instance.FindPage(txtPageName.Text) != null) {
  1048. lblPageResult.CssClass = "resulterror";
  1049. lblPageResult.Text = Resources.Messages.PageAlreadyExists;
  1050. return;
  1051. }
  1052. Log.LogEntry("Page Rename requested for " + page.Name + " to " + txtPageName.Text, EntryType.General, SessionFacade.Username);
  1053. Pages.Instance.RenamePage(page, txtPageName.Text);
  1054. lblPageResult.CssClass = "resultok";
  1055. lblPageResult.Text = Resources.Messages.PageRenamed;
  1056. LoadPages(true);
  1057. for(int i = 0; i < lstPages.Items.Count; i++) {
  1058. if(lstPages.Items[i].Text.StartsWith(txtPageName.Text + ",")) {
  1059. lstPages.SelectedIndex = i;
  1060. break;
  1061. }
  1062. }
  1063. txtPageName.Text = "";
  1064. }
  1065. protected void lstPages_SelectedIndexChanged(object sender, EventArgs e) {
  1066. PageInfo page = Pages.Instance.FindPage(lstPages.SelectedValue);
  1067. if(page == null) {
  1068. lblPageResult.CssClass = "resulterror";
  1069. lblPageResult.Text = Resources.Messages.PageNotFound;
  1070. return;
  1071. }
  1072. lstPageBackups.Items.Clear();
  1073. List<int> backups = Pages.Instance.GetBackups(page);;
  1074. backups.Reverse();
  1075. for(int i = 0; i < backups.Count; i++) {
  1076. lstPageBackups.Items.Add(
  1077. new ListItem("Rev " + backups[i].ToString() + ", " +
  1078. string.Format("{0:yyyy'/'MM'/'dd' 'HH':'mm':'ss}", Pages.Instance.GetBackupContent(page, backups[i]).LastModified),
  1079. backups[i].ToString()));
  1080. }
  1081. if(lstPageBackups.Items.Count == 0) {
  1082. lstPageBackups.Items.Add(new ListItem(" --- ", ""));
  1083. btnDeleteAllBackups.Enabled = false;
  1084. btnDeleteOlderBackups.Enabled = false;
  1085. btnRollback.Enabled = false;
  1086. }
  1087. else {
  1088. btnDeleteAllBackups.Enabled = true;
  1089. btnDeleteOlderBackups.Enabled = true;
  1090. btnRollback.Enabled = true;
  1091. }
  1092. if(lstPages.SelectedIndex != -1) {
  1093. btnDeletePage.Enabled = true;
  1094. btnClearPageDiscussion.Enabled = true;
  1095. btnGoToPage.Enabled = true;
  1096. btnSetPageStatus.Enabled = true;
  1097. lstPageStatus.Enabled = true;
  1098. btnRenamePage.Enabled = true;
  1099. switch(page.Status) {
  1100. case PageStatus.Normal:
  1101. lstPageStatus.SelectedIndex = 0;
  1102. break;
  1103. case PageStatus.Public:
  1104. lstPageStatus.SelectedIndex = 1;
  1105. break;
  1106. case PageStatus.Locked:
  1107. lstPageStatus.SelectedIndex = 2;
  1108. break;
  1109. }
  1110. }
  1111. else {
  1112. btnDeletePage.Enabled = false;
  1113. btnSetPageStatus.Enabled = false;
  1114. lstPageStatus.Enabled = false;
  1115. btnRenamePage.Enabled = false;
  1116. }
  1117. // Populate txtPageName
  1118. txtPageName.Text = page.Name;
  1119. lblPageResult.Text = "";
  1120. }
  1121. #endregion
  1122. #region Misc
  1123. protected void chkViewMessages_CheckedChanged(object sender, EventArgs e) {
  1124. }
  1125. protected void chkViewWarnings_CheckedChanged(object sender, EventArgs e) {
  1126. }
  1127. protected void chkViewErrors_CheckedChanged(object sender, EventArgs e) {
  1128. }
  1129. protected void btnClearLog_Click(object sender, EventArgs e) {
  1130. Log.ClearLog();
  1131. }
  1132. protected void btnComputeSpaceUsage_Click(object sender, EventArgs e) {
  1133. FileInfo info = new FileInfo(Settings.LogFile);
  1134. string txt = Resources.Messages.TotalDiskUsage + ": <b>" + Tools.BytesToString(Tools.DiskUsage(Settings.PublicDirectory)) + "</b>";
  1135. txt += "<ul>";
  1136. txt += "<li>" + Resources.Messages.PagesDiskUsage + ": <b>" + Tools.BytesToString(Tools.DiskUsage(Settings.PagesDirectory)) + "</b></li>";
  1137. txt += "<li>" + Resources.Messages.FilesDiskUsage + ": <b>" + Tools.BytesToString(Tools.DiskUsage(Settings.UploadDirectory)) + "</b></li>";
  1138. txt += "<li>" + Resources.Messages.LogDiskUsage + ": <b>" + Tools.BytesToString(info.Length) + "</b></li>";
  1139. txt += "<li>" + Resources.Messages.TempDiskUsage + ": <b>" + Tools.BytesToString(Tools.DiskUsage(Settings.TempDirectory)) + "</b></li>";
  1140. txt += "</ul><br />";
  1141. lblDiskUsageResult.Text = txt;
  1142. }
  1143. protected void btnDownloadBackup_Click(object sender, EventArgs e) {
  1144. Log.LogEntry("Backup ZIP requested", EntryType.General, SessionFacade.Username);
  1145. Response.Redirect("Zip.aspx");
  1146. }
  1147. protected void btnClearTemp_Click(object sender, EventArgs e) {
  1148. Log.LogEntry("TempDirectory cleanup requested", EntryType.General, SessionFacade.Username);
  1149. string[] files = Directory.GetFiles(Settings.TempDirectory);
  1150. for(int i = 0; i < files.Length; i++) {
  1151. try {
  1152. File.Delete(files[i]);
  1153. }
  1154. catch { }
  1155. }
  1156. }
  1157. public void PrintStrings() {
  1158. StringBuilder sb = new StringBuilder();
  1159. sb.Append(@"<script type=""text/javascript"">" + "\n<!--\n");
  1160. sb.Append(@"var __ConfirmOperationMessage = """ + Resources.Messages.ConfirmOperation + @""";");
  1161. sb.Append("// -->\n</script>");
  1162. lblStrings.Text = sb.ToString();
  1163. }
  1164. protected void btnClearCache_Click(object sender, EventArgs e) {
  1165. Redirections.Instance.Clear();
  1166. Content.PseudoCache.Clear();
  1167. Content.InvalidateAll();
  1168. PrintSystemStatus();
  1169. }
  1170. protected void btnRestartApp_Click(object sender, EventArgs e) {
  1171. btnRestartAppConfirm.Enabled = true;
  1172. btnRestartApp.Visible = false;
  1173. btnRestartAppCancel.Visible = true;
  1174. }
  1175. protected void btnRestartAppConfirm_Click(object sender, EventArgs e) {
  1176. Log.LogEntry("WebApp shutdown requested", EntryType.General, SessionFacade.Username);
  1177. Response.Clear();
  1178. Response.Write(@"Web Application has been shut down, please go to the <a href=""Default.aspx"">home page</a>." + "\n\n");
  1179. Response.Flush();
  1180. Response.Close();
  1181. Log.LogEntry("Executing WebApp shutdown", EntryType.General, "SYSTEM");
  1182. HttpRuntime.UnloadAppDomain();
  1183. }
  1184. protected void btnRestartAppCancel_Click(object sender, EventArgs e) {
  1185. btnRestartAppConfirm.Enabled = false;
  1186. btnRestartApp.Visible = true;
  1187. btnRestartAppCancel.Visible = false;
  1188. }
  1189. public void PrintDateTimeFormats() {
  1190. StringBuilder sb = new StringBuilder();
  1191. DateTime test = DateTime.Now;
  1192. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('ddd, dd MMM yyyy HH\':\'mm');"">" + test.ToString("ddd, dd MMM yyyy HH':'mm") + "</a>");
  1193. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('dddd, dd MMMM yyyy HH\':\'mm');"">" + test.ToString("dddd, dd MMMM yyyy HH':'mm") + "</a>");
  1194. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('yyyy\'/\'MM\'/\'dd\' \'HH\':\'mm');"">" + test.ToString("yyyy'/'MM'/'dd' 'HH':'mm") + "</a>");
  1195. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('MM\'/\'dd\'/\'yyyy\' \'HH\':\'mm');"">" + test.ToString("MM'/'dd'/'yyyy' 'HH':'mm") + "</a>");
  1196. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('dd\'/\'MM\'/\'yyyy\' \'HH\':\'mm');"">" + test.ToString("dd'/'MM'/'yyyy' 'HH':'mm") + "</a>");
  1197. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('ddd, dd MMM yyyy hh\':\'mm\' \'tt');"">" + test.ToString("ddd, dd MMM yyyy hh':'mm' 'tt") + "</a>");
  1198. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('dddd, dd MMMM yyyy hh\':\'mm\' \'tt');"">" + test.ToString("dddd, dd MMMM yyyy hh':'mm' 'tt") + "</a>");
  1199. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('yyyy\'/\'MM\'/\'dd\' \'hh\':\'mm\' \'tt');"">" + test.ToString("yyyy'/'MM'/'dd' 'hh':'mm' 'tt") + "</a>");
  1200. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('MM\'/\'dd\'/\'yyyy\' \'hh\':\'mm\' \'tt');"">" + test.ToString("MM'/'dd'/'yyyy' 'hh':'mm' 'tt") + "</a>");
  1201. sb.Append(@"<a href=""#"" class=""datepicklink"" onclick=""javascript:return __SetDateFormat('dd\'/\'MM\'/\'yyyy\' \'hh\':\'mm\' \'tt');"">" + test.ToString("dd'/'MM'/'yyyy' 'hh':'mm' 'tt") + "</a>");
  1202. lblDateTimeFormatsContent.Text = sb.ToString();
  1203. }
  1204. #endregion
  1205. #region Config
  1206. protected void btnSave_Click(object sender, EventArgs e) {
  1207. lblConfigResult.Text = "";
  1208. lblConfigResult.CssClass = "";
  1209. if(!Page.IsValid) return;
  1210. // Save parameters
  1211. Settings.WikiTitle = txtWikiTitle.Text;
  1212. Settings.MainUrl = txtMainUrl.Text;
  1213. Settings.Theme = lstTheme.SelectedValue;
  1214. Settings.ContactEmail = txtContactEmail.Text;
  1215. Settings.SenderEmail = txtSenderEmail.Text;
  1216. Settings.SmtpServer = txtSmtpServer.Text;
  1217. Settings.SmtpUsername = txtSmtpUsername.Text;
  1218. Settings.SmtpPassword = txtSmtpPassword.Text;
  1219. Settings.SmtpPort = txtSmtpPort.Text.Length > 0 ? int.Parse(txtSmtpPort.Text) : -1;
  1220. Settings.SmtpSsl = chkSmtpSsl.Checked;
  1221. Settings.DefaultPage = lstDefaultPage.SelectedValue;
  1222. Settings.EnableDoubleClickEditing = chkEnableDoubleClickEditing.Checked;
  1223. Settings.DisableBreadcrumbsTrail = chkDisableBreadcrumbsTrail.Checked;
  1224. Settings.ProcessSingleLineBreaks = chkProcessSingleLineBreaks.Checked;
  1225. // This feature is currently DISABLED
  1226. /*if(txtKeptBackupsNumber.Text.Length > 0) {
  1227. Settings.KeptBackupNumber = int.Parse(txtKeptBackupsNumber.Text);
  1228. }
  1229. else Settings.KeptBackupNumber = -1;*/
  1230. Settings.DateTimeFormat = txtDateTimeFormat.Text;
  1231. Settings.DefaultLanguage = lstDefaultLanguage.SelectedValue;
  1232. Settings.DefaultTimezone = lstDefaultTimezone.SelectedValue;
  1233. Settings.UsersCanRegister = chkUsersCanRegister.Checked;
  1234. Settings.AccountActivationMode = lstAccountActivationMode.SelectedValue;
  1235. Settings.DisableCaptchaControl = chkDisableCaptchaControl.Checked;
  1236. Settings.DiscussionPermissions = lstDiscussionPermissions.SelectedValue;
  1237. Settings.UsersCanCreateNewPages = chkUsersCanCreateNewPages.Checked;
  1238. Settings.UsersCanCreateNewCategories = chkUsersCanCreateNewCategories.Checked;
  1239. Settings.UsersCanManagePageCategories = chkUsersCanManagePageCategories.Checked;
  1240. Settings.UsersCanViewFiles = chkUsersCanViewFiles.Checked;
  1241. if(chkUsersCanViewFiles.Checked) {
  1242. Settings.UsersCanUploadFiles = chkUsersCanUploadFiles.Checked;
  1243. Settings.UsersCanDeleteFiles = chkUsersCanDeleteFiles.Checked;
  1244. }
  1245. else {
  1246. Settings.UsersCanUploadFiles = false;
  1247. Settings.UsersCanDeleteFiles = false;
  1248. }
  1249. Settings.PrivateAccess = chkPrivateAccess.Checked;
  1250. if(chkPrivateAccess.Checked) {
  1251. Settings.PublicAccess = false;
  1252. Settings.FileManagementInPublicAccessAllowed = false;
  1253. }
  1254. else {
  1255. Settings.PublicAccess = chkPublicAccess.Checked;
  1256. if(chkPublicAccess.Checked)
  1257. Settings.FileManagementInPublicAccessAllowed = chkFileManagementInPublicAccessAllowed.Checked;
  1258. else Settings.FileManagementInPublicAccessAllowed = false;
  1259. }
  1260. Settings.DisableConcurrentEditing = chkDisableConcurrentEditing.Checked;
  1261. Settings.AllowedFileTypes = txtAllowedFileTypes.Text.Replace(" ", "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  1262. Settings.ScriptTagsAllowed = chkScriptTagsAllowed.Checked;
  1263. Settings.LoggingLevel = int.Parse(lstLoggingLevel.SelectedValue);
  1264. Settings.MaxLogSize = int.Parse(txtMaxLogSize.Text);
  1265. Settings.ConfigVisibleToAdmins = chkConfigVisibleToAdmins.Checked;
  1266. Settings.DisableAutomaticVersionCheck = chkDisableAutomaticVersionCheck.Checked;
  1267. Settings.MaxFileSize = int.Parse(txtMaxFileSize.Text);
  1268. Settings.DisableCache = chkDisableCache.Checked;
  1269. Settings.CacheSize = int.Parse(txtCacheSize.Text);
  1270. Settings.CacheCutSize = int.Parse(txtCacheCutSize.Text);
  1271. Settings.FileAccessTries = int.Parse(txtFileAccessTries.Text);
  1272. Settings.FileAccessTryDelay = int.Parse(txtFileAccessTryDelay.Text);
  1273. Settings.EnableViewStateCompression = chkEnableViewStateCompression.Checked;
  1274. Settings.EnableHttpCompression = chkEnableHttpCompression.Checked;
  1275. Settings.UsernameRegex = txtUsernameRegex.Text;
  1276. Settings.PasswordRegex = txtPasswordRegex.Text;
  1277. // Dump Config
  1278. Log.LogEntry("Config dump requested", EntryType.General, SessionFacade.Username);
  1279. Settings.DumpConfig();
  1280. // Clear invalid cache entries
  1281. Content.PseudoCache.Clear();
  1282. Content.InvalidateAll();
  1283. LoadConfig();
  1284. lblConfigResult.CssClass = "resultok";
  1285. lblConfigResult.Text = Resources.Messages.ConfigSaved;
  1286. }
  1287. protected void btnCancel_Click(object sender, EventArgs e) {
  1288. LoadConfig();
  1289. lblConfigResult.CssClass = "resultok";
  1290. lblConfigResult.Text = Resources.Messages.ConfigValuesReset;
  1291. }
  1292. protected void chkPrivateAccess_CheckedChanged(object sender, EventArgs e) {
  1293. if(chkPrivateAccess.Checked) {
  1294. chkPublicAccess.Enabled = false;
  1295. chkPublicAccess.Checked = false;
  1296. chkFileManagementInPublicAccessAllowed.Enabled = false;
  1297. chkFileManagementInPublicAccessAllowed.Checked = false;
  1298. }
  1299. else {
  1300. chkPublicAccess.Enabled = true;
  1301. chkFileManagementInPublicAccessAllowed.Enabled = false;
  1302. }
  1303. }
  1304. protected void chkPublicAccess_CheckedChanged(object sender, EventArgs e) {
  1305. if(chkPublicAccess.Checked) {
  1306. chkFileManagementInPublicAccessAllowed.Enabled = true;
  1307. chkPrivateAccess.Enabled = false;
  1308. chkPrivateAccess.Checked = false;
  1309. }
  1310. else {
  1311. chkFileManagementInPublicAccessAllowed.Enabled = false;
  1312. chkFileManagementInPublicAccessAllowed.Checked = false;
  1313. chkPrivateAccess.Enabled = true;
  1314. }
  1315. }
  1316. protected void chkUsersCanViewFiles_CheckedChanged(object sender, EventArgs e) {
  1317. if(!chkUsersCanViewFiles.Checked) {
  1318. chkUsersCanUploadFiles.Checked = false;
  1319. chkUsersCanDeleteFiles.Checked = false;
  1320. chkUsersCanUploadFiles.Enabled = false;
  1321. chkUsersCanDeleteFiles.Enabled = false;
  1322. }
  1323. else {
  1324. chkUsersCanUploadFiles.Checked = false;
  1325. chkUsersCanDeleteFiles.Checked = false;
  1326. chkUsersCanUploadFiles.Enabled = true;
  1327. chkUsersCanDeleteFiles.Enabled = true;
  1328. }
  1329. }
  1330. protected void chkDisableCache_CheckedChanged(object sender, EventArgs e) {
  1331. if(chkDisableCache.Checked) {
  1332. txtCacheSize.Enabled = false;
  1333. txtCacheCutSize.Enabled = false;
  1334. }
  1335. else {
  1336. txtCacheSize.Enabled = true;
  1337. txtCacheCutSize.Enabled = true;
  1338. }
  1339. }
  1340. #endregion
  1341. #region Tabs Buttons
  1342. protected void btnSelectUsersAdmins_Click(object sender, EventArgs e) {
  1343. mlvAdmin.ActiveViewIndex = 0;
  1344. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1345. SetupButtons();
  1346. }
  1347. protected void btnSelectPages_Click(object sender, EventArgs e) {
  1348. mlvAdmin.ActiveViewIndex = 1;
  1349. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1350. SetupButtons();
  1351. }
  1352. protected void btnSelectFiles_Click(object sender, EventArgs e) {
  1353. mlvAdmin.ActiveViewIndex = 2;
  1354. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1355. SetupButtons();
  1356. }
  1357. protected void btnSelectLog_Click(object sender, EventArgs e) {
  1358. mlvAdmin.ActiveViewIndex = 3;
  1359. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1360. SetupButtons();
  1361. }
  1362. protected void btnSelectDisk_Click(object sender, EventArgs e) {
  1363. mlvAdmin.ActiveViewIndex = 4;
  1364. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1365. SetupButtons();
  1366. }
  1367. protected void btnSelectConfig_Click(object sender, EventArgs e) {
  1368. mlvAdmin.ActiveViewIndex = 5;
  1369. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1370. SetupButtons();
  1371. }
  1372. protected void btnSelectDataBackup_Click(object sender, EventArgs e) {
  1373. mlvAdmin.ActiveViewIndex = 6;
  1374. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1375. SetupButtons();
  1376. }
  1377. protected void btnSelectSnippets_Click(object sender, EventArgs e) {
  1378. mlvAdmin.ActiveViewIndex = 7;
  1379. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1380. SetupButtons();
  1381. }
  1382. protected void btnSelectCategories_Click(object sender, EventArgs e) {
  1383. mlvAdmin.ActiveViewIndex = 8;
  1384. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1385. SetupButtons();
  1386. }
  1387. protected void btnSelectAdminHome_Click(object sender, EventArgs e) {
  1388. mlvAdmin.ActiveViewIndex = 9;
  1389. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1390. SetupButtons();
  1391. }
  1392. protected void btnSelectNavPaths_Click(object sender, EventArgs e) {
  1393. mlvAdmin.ActiveViewIndex = 10;
  1394. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1395. SetupButtons();
  1396. }
  1397. protected void btnSelectProviders_Click(object sender, EventArgs e) {
  1398. mlvAdmin.ActiveViewIndex = 11;
  1399. SessionFacade.AdminView = mlvAdmin.ActiveViewIndex;
  1400. SetupButtons();
  1401. }
  1402. private void SetupButtons() {
  1403. btnSelectUsersAdmins.CssClass = "tab";
  1404. btnSelectPages.CssClass = "tab";
  1405. btnSelectFiles.CssClass = "tab";
  1406. btnSelectLog.CssClass = "tab";
  1407. btnSelectDisk.CssClass = "tab";
  1408. btnSelectConfig.CssClass = "tab";
  1409. btnSelectDataBackup.CssClass = "tab";
  1410. btnSelectSnippets.CssClass = "tab";
  1411. btnSelectCategories.CssClass = "tab";
  1412. btnSelectAdminHome.CssClass = "tab";
  1413. btnSelectNavPaths.CssClass = "tab";
  1414. btnSelectProviders.CssClass = "tab";
  1415. switch(SessionFacade.AdminView) {
  1416. case 0:
  1417. SetButton(btnSelectUsersAdmins);
  1418. break;
  1419. case 1:
  1420. SetButton(btnSelectPages);
  1421. break;
  1422. case 2:
  1423. SetButton(btnSelectFiles);
  1424. break;
  1425. case 3:
  1426. SetButton(btnSelectLog);
  1427. break;
  1428. case 4:
  1429. SetButton(btnSelectDisk);
  1430. break;
  1431. case 5:
  1432. SetButton(btnSelectConfig);
  1433. break;
  1434. case 6:
  1435. SetButton(btnSelectDataBackup);
  1436. break;
  1437. case 7:
  1438. SetButton(btnSelectSnippets);
  1439. break;
  1440. case 8:
  1441. SetButton(btnSelectCategories);
  1442. break;
  1443. case 9:
  1444. SetButton(btnSelectAdminHome);
  1445. break;
  1446. case 10:
  1447. SetButton(btnSelectNavPaths);
  1448. break;
  1449. case 11:
  1450. SetButton(btnSelectProviders);
  1451. break;
  1452. }
  1453. }
  1454. private void SetButton(Button btn) {
  1455. btn.CssClass = "tabselected";
  1456. }
  1457. #endregion
  1458. #region Snippets
  1459. protected void btnDeleteSnippet_Click(object sender, EventArgs e) {
  1460. Snippet s = Snippets.Instance.Find(lstSnippets.SelectedValue);
  1461. if(s == null) {
  1462. lblSnippetResult.CssClass = "resulterror";
  1463. lblSnippetResult.Text = Resources.Messages.SnippetNotFound;
  1464. LoadSnippets();
  1465. return;
  1466. }
  1467. Log.LogEntry("Snippet deletion requested for " + s.Name, EntryType.General, SessionFacade.Username);
  1468. Snippets.Instance.RemoveSnippet(s);
  1469. lblSnippetResult.CssClass = "resultok";
  1470. lblSnippetResult.Text = Resources.Messages.SnippetDeleted;
  1471. LoadSnippets();
  1472. Content.InvalidateAll();
  1473. Content.PseudoCache.Clear();
  1474. }
  1475. protected void btnEditSnippet_Click(object sender, EventArgs e) {
  1476. Snippet s = Snippets.Instance.Find(lstSnippets.SelectedValue);
  1477. if(s == null) {
  1478. lblSnippetResult.CssClass = "resulterror";
  1479. lblSnippetResult.Text = Resources.Messages.SnippetNotFound;
  1480. return;
  1481. }
  1482. mlvSnippets.ActiveViewIndex = 1;
  1483. txtSnippetName.Text = s.Name;
  1484. txtSnippetName.Enabled = false;
  1485. txtSnippetName.Style.Clear();
  1486. txtSnippetContent.Text = s.Content;
  1487. lblSnippetProvider.Visible = false;
  1488. lstSnippetProvider.Visible = false;
  1489. lblSaveSnippetResult.Text = "";
  1490. }
  1491. protected void btnNewSnippet_Click(object sender, EventArgs e) {
  1492. mlvSnippets.ActiveViewIndex = 1;
  1493. txtSnippetName.Text = "";
  1494. txtSnippetName.Enabled = true;
  1495. txtSnippetName.Style.Clear();
  1496. txtSnippetContent.Text = "";
  1497. lblSnippetProvider.Visible = true;
  1498. lstSnippetProvider.Visible = true;
  1499. lblSaveSnippetResult.Text = "";
  1500. }
  1501. protected void btnSaveSnippet_Click(object sender, EventArgs e) {
  1502. if(txtSnippetName.Enabled) {
  1503. if(txtSnippetName.Text.Replace(" ", "").Length == 0 || !Pages.IsValidName(txtSnippetName.Text)) {
  1504. lblSaveSnippetResult.CssClass = "resulterror";
  1505. lblSaveSnippetResult.Text = Resources.Messages.InvalidSnippetName;
  1506. return;
  1507. }
  1508. for(int i = 0; i < Snippets.Instance.AllSnippets.Count; i++) {
  1509. if(Snippets.Instance.AllSnippets[i].Name.ToLower(CultureInfo.CurrentCulture).Equals(txtSnippetName.Text.ToLower(CultureInfo.CurrentCulture))) {
  1510. lblSaveSnippetResult.CssClass = "resulterror";
  1511. lblSaveSnippetResult.Text = Resources.Messages.SnippetAlreadyExists;
  1512. return;
  1513. }
  1514. }
  1515. Log.LogEntry("Snippet creation requested for " + txtSnippetName.Text, EntryType.General, SessionFacade.Username);
  1516. Snippets.Instance.AddSnippet(txtSnippetName.Text, txtSnippetContent.Text, Collectors.PagesProviderCollector.GetProvider(lstSnippetProvider.SelectedValue));
  1517. }
  1518. else {
  1519. Log.LogEntry("Snippet update requested for " + txtSnippetName.Text, EntryType.General, SessionFacade.Username);
  1520. Snippets.Instance.ModifySnippet(Snippets.Instance.Find(txtSnippetName.Text), txtSnippetContent.Text);
  1521. }
  1522. lblSnippetResult.CssClass = "resultok";
  1523. lblSnippetResult.Text = Resources.Messages.SnippetSaved;
  1524. mlvSnippets.ActiveViewIndex = 0;
  1525. LoadSnippets();
  1526. Content.InvalidateAll();
  1527. Content.PseudoCache.Clear();
  1528. }
  1529. protected void btnCancelSnippet_Click(object sender, EventArgs e) {
  1530. mlvSnippets.ActiveViewIndex = 0;
  1531. lblSnippetResult.Text = "";
  1532. }
  1533. #endregion
  1534. #region Categories
  1535. protected void lstCategories_SelectedIndexChanged(object sender, EventArgs e) {
  1536. lstMergeCategory.Items.Clear();
  1537. CategoryInfo selected = Pages.Instance.FindCategory(lstCategories.SelectedValue);
  1538. if(selected != null) {
  1539. lstMergeCategory.Enabled = true;
  1540. txtCategoryName.Text = selected.Name;
  1541. CategoryInfo[] cats = Pages.Instance.GetMatchingCategories(selected);
  1542. for(int i = 0; i < cats.Length; i++) {
  1543. lstMergeCategory.Items.Add(new ListItem(cats[i].Name, cats[i].Name));
  1544. }
  1545. }
  1546. else lstMergeCategory.Enabled = false;
  1547. }
  1548. protected void btnDeleteCategory_Click(object sender, EventArgs e) {
  1549. string cat = lstCategories.SelectedValue;
  1550. if(Pages.Instance.FindCategory(cat) == null) {
  1551. lblCategoryResult.CssClass = "resulterror";
  1552. lblCategoryResult.Text = Resources.Messages.CategoryNotFound;
  1553. return;
  1554. }
  1555. Log.LogEntry("Category removal requested for " + cat, EntryType.General, SessionFacade.Username);
  1556. Pages.Instance.RemoveCategory(Pages.Instance.FindCategory(cat));
  1557. LoadCategories();
  1558. lblCategoryResult.CssClass = "resultok";
  1559. lblCategoryResult.Text = Resources.Messages.CategoryDeleted;
  1560. }
  1561. protected void btnRenameCategory_Click(object sender, EventArgs e) {
  1562. string cat = lstCategories.SelectedValue;
  1563. if(Pages.Instance.FindCategory(cat) == null) {
  1564. lblCategoryResult.CssClass = "resulterror";
  1565. lblCategoryResult.Text = Resources.Messages.CategoryNotFound;
  1566. return;
  1567. }
  1568. if(!Pages.IsValidName(txtCategoryName.Text)) {
  1569. lblCategoryResult.CssClass = "resulterror";
  1570. lblCategoryResult.Text = Resources.Messages.InvalidCategoryName;
  1571. return;
  1572. }
  1573. if(Pages.Instance.FindCategory(txtCategoryName.Text) != null) {
  1574. lblCategoryResult.CssClass = "resulterror";
  1575. lblCategoryResult.Text = Resources.Messages.InvalidCategoryName;
  1576. return;
  1577. }
  1578. Log.LogEntry("Category rename requested for " + cat + " (" + txtCategoryName.Text + ")", EntryType.General, SessionFacade.Username);
  1579. Pages.Instance.RenameCategory(Pages.Instance.FindCategory(cat), txtCategoryName.Text);
  1580. LoadCategories();
  1581. txtCategoryName.Text = "";
  1582. lblCategoryResult.CssClass = "resultok";
  1583. lblCategoryResult.Text = Resources.Messages.CategoryRenamed;
  1584. }
  1585. protected void btnNewCategory_Click(object sender, EventArgs e) {
  1586. if(!Pages.IsValidName(txtCategoryName.Text)) {
  1587. lblCategoryResult.CssClass = "resulterror";
  1588. lblCategoryResult.Text = Resources.Messages.InvalidCategoryName;
  1589. return;
  1590. }
  1591. Log.LogEntry("Category creation requested for " + txtCategoryName.Text, EntryType.General, SessionFacade.Username);
  1592. Pages.Instance.CreateCategory(txtCategoryName.Text, Collectors.PagesProviderCollector.GetProvider(lstCategoryProvider.SelectedValue));
  1593. LoadCategories();
  1594. txtCategoryName.Text = "";
  1595. lblCategoryResult.CssClass = "resultok";
  1596. lblCategoryResult.Text = Resources.Messages.CategorySaved;
  1597. }
  1598. protected void btnMergeCategory_Click(object sender, EventArgs e) {
  1599. CategoryInfo source = Pages.Instance.FindCategory(lstCategories.SelectedValue);
  1600. if(source == null) {
  1601. lblCategoryResult.CssClass = "resulterror";
  1602. lblCategoryResult.Text = Resources.Messages.CategoryNotFound;
  1603. return;
  1604. }
  1605. Log.LogEntry("Categories Merging requested for " + source.Name + " into " + lstMergeCategory.SelectedValue, EntryType.General, SessionFacade.Username);
  1606. Pages.Instance.MergeCategories(source, Pages.Instance.FindCategory(lstMergeCategory.SelectedValue));
  1607. LoadCategories();
  1608. lblCategoryResult.CssClass = "resultok";
  1609. lblCategoryResult.Text = Resources.Messages.CategoriesMerged;
  1610. }
  1611. #endregion
  1612. #region Nav Paths
  1613. protected void btnDeleteNavPath_Click(object sender, EventArgs e) {
  1614. if(lstNavPaths.SelectedIndex == -1) {
  1615. lblNavPathResult.CssClass = "resulterror";
  1616. lblNavPathResult.Text =Resources.Messages.NavPathNotFound;
  1617. return;
  1618. }
  1619. Log.LogEntry("NavPath removal requested for " + lstNavPaths.SelectedValue, EntryType.General, SessionFacade.Username);
  1620. NavigationPaths.Instance.RemovePath(lstNavPaths.SelectedValue);
  1621. lblNavPathResult.CssClass = "resultok";
  1622. lblNavPathResult.Text = Resources.Messages.NavPathDeleted;
  1623. LoadNavPaths();
  1624. }
  1625. protected void btnEditNavPath_Click(object sender, EventArgs e) {
  1626. if(lstNavPaths.SelectedIndex == -1) {
  1627. lblNavPathResult.CssClass = "resulterror";
  1628. lblNavPathResult.Text = Resources.Messages.NavPathNotFound;
  1629. return;
  1630. }
  1631. NavigationPath p = NavigationPaths.Instance.Find(lstNavPaths.SelectedValue);
  1632. txtNavPathName.Text = p.Name;
  1633. txtNavPathName.Enabled = false;
  1634. string s = "";
  1635. for(int i = 0; i < p.Pages.Count; i++) {
  1636. s += p.Pages[i];
  1637. if(i != p.Pages.Count - 1) s += ", ";
  1638. }
  1639. txtNavPath.Text = s;
  1640. lblEditNavPathResult.Text = "";
  1641. lblNavPathProvider.Visible = false;
  1642. lstNavPathProvider.Visible = false;
  1643. mlvNavPaths.ActiveViewIndex = 1;
  1644. }
  1645. protected void btnNewNavPath_Click(object sender, EventArgs e) {
  1646. txtNavPathName.Text = "";
  1647. txtNavPathName.Enabled = true;
  1648. txtNavPath.Text = "";
  1649. lblEditNavPathResult.Text = "";
  1650. lblNavPathProvider.Visible = true;
  1651. lstNavPathProvider.Visible = true;
  1652. mlvNavPaths.ActiveViewIndex = 1;
  1653. }
  1654. protected void btnSaveNavPath_Click(object sender, EventArgs e) {
  1655. txtNavPath.Text = txtNavPath.Text.Replace("\r", "").Replace("\n", "");
  1656. if(!Pages.IsValidName(txtNavPathName.Text)) {
  1657. lblEditNavPathResult.CssClass = "resulterror";
  1658. lblEditNavPathResult.Text = Resources.Messages.InvalidNavPathName;
  1659. return;
  1660. }
  1661. if(txtNavPathName.Enabled) {
  1662. if(NavigationPaths.Instance.Exists(txtNavPathName.Text)) {
  1663. lblEditNavPathResult.CssClass = "resulterror";
  1664. lblEditNavPathResult.Text = Resources.Messages.NavPathAlreadyExists;
  1665. return;
  1666. }
  1667. }
  1668. string[] pages = txtNavPath.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  1669. if(pages.Length < 2) {
  1670. lblEditNavPathResult.CssClass = "resulterror";
  1671. lblEditNavPathResult.Text = Resources.Messages.InvalidNavPath;
  1672. return;
  1673. }
  1674. IPagesStorageProvider prov = null;
  1675. if(lstNavPathProvider.Visible) prov = Collectors.PagesProviderCollector.GetProvider(lstNavPathProvider.SelectedValue);
  1676. else prov = NavigationPaths.Instance.Find(txtNavPathName.Text).Provider;
  1677. PageInfo[] infos = new PageInfo[pages.Length];
  1678. for(int i = 0; i < pages.Length; i++) {
  1679. pages[i] = pages[i].Trim();
  1680. if(Pages.Instance.FindPage(pages[i], prov) == null) {
  1681. lblEditNavPathResult.CssClass = "resulterror";
  1682. lblEditNavPathResult.Text = Resources.Messages.PageDoesNotExistInProvider.Replace("##PAGENAME##", "<b>" + pages[i] + "</b>");
  1683. return;
  1684. }
  1685. infos[i] = Pages.Instance.FindPage(pages[i]);
  1686. }
  1687. if(txtNavPathName.Enabled) {
  1688. Log.LogEntry("NavPath creation requested for " + txtNavPath.Text, EntryType.General, SessionFacade.Username);
  1689. NavigationPaths.Instance.AddPath(txtNavPathName.Text, new List<PageInfo>(infos), Collectors.PagesProviderCollector.GetProvider(lstNavPathProvider.SelectedValue));
  1690. }
  1691. else {
  1692. Log.LogEntry("NavPath update requested for " + txtNavPath.Text, EntryType.General, SessionFacade.Username);
  1693. NavigationPaths.Instance.ModifyPath(txtNavPathName.Text, new List<PageInfo>(infos));
  1694. }
  1695. LoadNavPaths();
  1696. lblNavPathResult.CssClass = "resultok";
  1697. lblNavPathResult.Text = Resources.Messages.NavPathSaved;
  1698. mlvNavPaths.ActiveViewIndex = 0;
  1699. }
  1700. protected void btnCancelNavPath_Click(object sender, EventArgs e) {
  1701. lblNavPathResult.Text = "";
  1702. mlvNavPaths.ActiveViewIndex = 0;
  1703. }
  1704. #endregion
  1705. #region Providers
  1706. protected void btnSaveDefaultProviders_Click(object sender, EventArgs e) {
  1707. Settings.DefaultPagesProvider = lstDefaultPagesProvider.SelectedValue;
  1708. Settings.DefaultUsersProvider = lstDefaultUsersProvider.SelectedValue;
  1709. Settings.DumpConfig();
  1710. }
  1711. protected void btnCancelDefaultProviders_Click(object sender, EventArgs e) {
  1712. LoadProviders();
  1713. }
  1714. protected void btnConfigureProvider_Click(object sender, EventArgs e) {
  1715. lblProviderResult.Text = "";
  1716. lblProviderResult.CssClass = "";
  1717. string sel = lstProviders.SelectedValue;
  1718. if(sel == null || sel.Length == 0) {
  1719. lblProviderResult.CssClass = "resulterror";
  1720. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  1721. return;
  1722. }
  1723. string name = sel.Substring(3);
  1724. string type = sel.Substring(0, 3).ToUpperInvariant();
  1725. string config = "";
  1726. switch(type) {
  1727. case "[U]":
  1728. IUsersStorageProvider u = Collectors.UsersProviderCollector.GetProvider(name);
  1729. if(u == null) u = Collectors.DisabledUsersProviderCollector.GetProvider(name);
  1730. if(u == null) throw new Exception();
  1731. config = ProviderLoader.LoadConfiguration(u.GetType().ToString());
  1732. break;
  1733. case "[P]":
  1734. IPagesStorageProvider p = Collectors.PagesProviderCollector.GetProvider(name);
  1735. if(p == null) p = Collectors.DisabledPagesProviderCollector.GetProvider(name);
  1736. if(p == null) throw new Exception();
  1737. config = ProviderLoader.LoadConfiguration(p.GetType().ToString());
  1738. break;
  1739. case "[F]":
  1740. IFormatterProvider f = Collectors.FormatterProviderCollector.GetProvider(name);
  1741. if(f == null) f = Collectors.DisabledFormatterProviderCollector.GetProvider(name);
  1742. if(f == null) throw new Exception();
  1743. config = ProviderLoader.LoadConfiguration(f.GetType().ToString());
  1744. break;
  1745. default:
  1746. throw new Exception();
  1747. }
  1748. txtProviderConfiguration.Text = config;
  1749. pnlProviderConfiguration.Visible = true;
  1750. lstProviders.Enabled = false;
  1751. btnConfigureProvider.Enabled = false;
  1752. btnEnableProvider.Enabled = false;
  1753. btnDisableProvider.Enabled = false;
  1754. pnlPoviderInfo.Visible = false;
  1755. }
  1756. protected void btnSaveProviderConfiguration_Click(object sender, EventArgs e) {
  1757. lblProviderResult.Text = "";
  1758. string sel = lstProviders.SelectedValue;
  1759. if(sel == null || sel.Length == 0) {
  1760. lblProviderResult.CssClass = "resulterror";
  1761. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  1762. return;
  1763. }
  1764. string name = sel.Substring(3);
  1765. string type = sel.Substring(0, 3).ToUpperInvariant();
  1766. bool err = false;
  1767. bool disabled = false;
  1768. switch(type) {
  1769. case "[U]":
  1770. IUsersStorageProvider u = Collectors.UsersProviderCollector.GetProvider(name);
  1771. if(u == null) {
  1772. u = Collectors.DisabledUsersProviderCollector.GetProvider(name);
  1773. disabled = true;
  1774. }
  1775. if(u == null) throw new Exception();
  1776. try {
  1777. u.Init(Host.Instance, txtProviderConfiguration.Text);
  1778. ProviderLoader.SaveConfiguration(u.GetType().ToString(), txtProviderConfiguration.Text);
  1779. if(!disabled) Users.Instance.ReloadFrom(u);
  1780. LoadUsers();
  1781. }
  1782. catch(InvalidConfigurationException) {
  1783. err = true;
  1784. }
  1785. break;
  1786. case "[P]":
  1787. IPagesStorageProvider p = Collectors.PagesProviderCollector.GetProvider(name);
  1788. if(p == null) {
  1789. p = Collectors.DisabledPagesProviderCollector.GetProvider(name);
  1790. disabled = true;
  1791. }
  1792. if(p == null) throw new Exception();
  1793. try {
  1794. p.Init(Host.Instance, txtProviderConfiguration.Text);
  1795. ProviderLoader.SaveConfiguration(p.GetType().ToString(), txtProviderConfiguration.Text);
  1796. if(!disabled) {
  1797. Content.InvalidateAll();
  1798. Content.PseudoCache.Clear();
  1799. Pages.Instance.ReloadFrom(p);
  1800. }
  1801. LoadPages(true);
  1802. LoadCategories();
  1803. LoadSnippets();
  1804. LoadNavPaths();
  1805. }
  1806. catch(InvalidConfigurationException) {
  1807. err = true;
  1808. }
  1809. break;
  1810. case "[F]":
  1811. IFormatterProvider f = Collectors.FormatterProviderCollector.GetProvider(name);
  1812. if(f == null) {
  1813. f = Collectors.DisabledFormatterProviderCollector.GetProvider(name);
  1814. disabled = true;
  1815. }
  1816. if(f == null) throw new Exception();
  1817. try {
  1818. f.Init(Host.Instance, txtProviderConfiguration.Text);
  1819. ProviderLoader.SaveConfiguration(f.GetType().ToString(), txtProviderConfiguration.Text);
  1820. if(!disabled) {
  1821. Content.InvalidateAll();
  1822. Content.PseudoCache.Clear();
  1823. }
  1824. }
  1825. catch(InvalidConfigurationException) {
  1826. err = true;
  1827. }
  1828. break;
  1829. default:
  1830. throw new Exception();
  1831. }
  1832. if(err) {
  1833. lblProviderResult.CssClass = "resulterror";
  1834. lblProviderResult.Text = Resources.Messages.ProviderRefusedConfiguration;
  1835. }
  1836. else {
  1837. lblProviderResult.CssClass = "resultok";
  1838. lblProviderResult.Text = Resources.Messages.ProviderConfigurationSaved;
  1839. lblProviderConfiguration.Text = txtProviderConfiguration.Text;
  1840. pnlProviderConfiguration.Visible = false;
  1841. lstProviders.Enabled = true;
  1842. btnConfigureProvider.Enabled = true;
  1843. btnEnableProvider.Enabled = true;
  1844. btnDisableProvider.Enabled = true;
  1845. pnlPoviderInfo.Visible = true;
  1846. lstProviders_SelectedIndexChanged(sender, e);
  1847. }
  1848. }
  1849. protected void btnCancelProviderConfiguration_Click(object sender, EventArgs e) {
  1850. pnlProviderConfiguration.Visible = false;
  1851. lstProviders.Enabled = true;
  1852. btnConfigureProvider.Enabled = true;
  1853. btnEnableProvider.Enabled = true;
  1854. btnDisableProvider.Enabled = true;
  1855. pnlPoviderInfo.Visible = true;
  1856. }
  1857. protected void btnEnableProvider_Click(object sender, EventArgs e) {
  1858. lblProviderResult.Text = "";
  1859. string sel = lstProviders.SelectedValue;
  1860. if(sel == null || sel.Length == 0) {
  1861. lblProviderResult.CssClass = "resulterror";
  1862. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  1863. return;
  1864. }
  1865. string name = sel.Substring(3);
  1866. string type = sel.Substring(0, 3).ToUpperInvariant();
  1867. bool err = false;
  1868. switch(type) {
  1869. case "[U]":
  1870. IUsersStorageProvider u = Collectors.DisabledUsersProviderCollector.GetProvider(name);
  1871. if(u != null) {
  1872. try {
  1873. u.Init(Host.Instance, ProviderLoader.LoadConfiguration(u.GetType().ToString()));
  1874. Collectors.DisabledUsersProviderCollector.RemoveProvider(u);
  1875. Collectors.UsersProviderCollector.AddProvider(u);
  1876. Users.Instance.LoadFrom(u, true);
  1877. LoadUsers();
  1878. }
  1879. catch {
  1880. err = true;
  1881. }
  1882. }
  1883. break;
  1884. case "[P]":
  1885. IPagesStorageProvider p = Collectors.DisabledPagesProviderCollector.GetProvider(name);
  1886. if(p != null) {
  1887. try {
  1888. p.Init(Host.Instance, ProviderLoader.LoadConfiguration(p.GetType().ToString()));
  1889. Collectors.DisabledPagesProviderCollector.RemoveProvider(p);
  1890. Collectors.PagesProviderCollector.AddProvider(p);
  1891. Content.InvalidateAll();
  1892. Content.PseudoCache.Clear();
  1893. Pages.Instance.LoadFrom(p, true);
  1894. Snippets.Instance.LoadFrom(p, true);
  1895. NavigationPaths.Instance.LoadFrom(p, true);
  1896. LoadPages(true);
  1897. LoadCategories();
  1898. LoadSnippets();
  1899. LoadNavPaths();
  1900. }
  1901. catch {
  1902. err = true;
  1903. }
  1904. }
  1905. break;
  1906. case "[F]":
  1907. IFormatterProvider f = Collectors.DisabledFormatterProviderCollector.GetProvider(name);
  1908. if(f != null) {
  1909. try {
  1910. f.Init(Host.Instance, ProviderLoader.LoadConfiguration(f.GetType().ToString()));
  1911. Collectors.DisabledFormatterProviderCollector.RemoveProvider(f);
  1912. Collectors.FormatterProviderCollector.AddProvider(f);
  1913. Content.InvalidateAll();
  1914. Content.PseudoCache.Clear();
  1915. }
  1916. catch {
  1917. err = true;
  1918. }
  1919. }
  1920. break;
  1921. default:
  1922. throw new Exception();
  1923. }
  1924. if(!err) {
  1925. ProviderLoader.SaveStatus(name, true);
  1926. lblProviderResult.CssClass = "resultok";
  1927. lblProviderResult.Text = Resources.Messages.ProviderEnabled;
  1928. LoadProviders();
  1929. }
  1930. else {
  1931. lblProviderResult.CssClass = "resulterror";
  1932. lblProviderResult.Text = Resources.Messages.ProviderRefusedConfiguration;
  1933. }
  1934. }
  1935. protected void btnDisableProvider_Click(object sender, EventArgs e) {
  1936. lblProviderResult.Text = "";
  1937. string sel = lstProviders.SelectedValue;
  1938. if(sel == null || sel.Length == 0) {
  1939. lblProviderResult.CssClass = "resulterror";
  1940. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  1941. return;
  1942. }
  1943. string name = sel.Substring(3);
  1944. string type = sel.Substring(0, 3).ToUpperInvariant();
  1945. switch(type) {
  1946. case "[U]":
  1947. IUsersStorageProvider u = Collectors.UsersProviderCollector.GetProvider(name);
  1948. if(u != null) {
  1949. if(u.GetType().ToString().Equals(Settings.DefaultUsersProvider)) {
  1950. lblProviderResult.CssClass = "resulterror";
  1951. lblProviderResult.Text = Resources.Messages.CannotDisableDefaultProvider;
  1952. return;
  1953. }
  1954. Collectors.UsersProviderCollector.RemoveProvider(u);
  1955. Collectors.DisabledUsersProviderCollector.AddProvider(u);
  1956. Users.Instance.UnloadFrom(u);
  1957. u.Shutdown();
  1958. LoadUsers();
  1959. }
  1960. break;
  1961. case "[P]":
  1962. IPagesStorageProvider p = Collectors.PagesProviderCollector.GetProvider(name);
  1963. if(p != null) {
  1964. if(p.GetType().ToString().Equals(Settings.DefaultPagesProvider)) {
  1965. lblProviderResult.CssClass = "resulterror";
  1966. lblProviderResult.Text = Resources.Messages.CannotDisableDefaultProvider;
  1967. return;
  1968. }
  1969. Collectors.PagesProviderCollector.RemoveProvider(p);
  1970. Collectors.DisabledPagesProviderCollector.AddProvider(p);
  1971. Content.InvalidateAll();
  1972. Content.PseudoCache.Clear();
  1973. Pages.Instance.UnloadFrom(p);
  1974. Snippets.Instance.UnloadFrom(p);
  1975. NavigationPaths.Instance.UnloadFrom(p);
  1976. p.Shutdown();
  1977. LoadPages(true);
  1978. LoadCategories();
  1979. LoadSnippets();
  1980. LoadNavPaths();
  1981. }
  1982. break;
  1983. case "[F]":
  1984. IFormatterProvider f = Collectors.FormatterProviderCollector.GetProvider(name);
  1985. if(f != null) {
  1986. Collectors.FormatterProviderCollector.RemoveProvider(f);
  1987. Collectors.DisabledFormatterProviderCollector.AddProvider(f);
  1988. f.Shutdown();
  1989. Content.InvalidateAll();
  1990. Content.PseudoCache.Clear();
  1991. }
  1992. break;
  1993. default:
  1994. throw new Exception();
  1995. }
  1996. ProviderLoader.SaveStatus(name, false);
  1997. lblProviderResult.CssClass = "resultok";
  1998. lblProviderResult.Text = Resources.Messages.ProviderDisabled;
  1999. LoadProviders();
  2000. }
  2001. protected void btnUnloadProvider_Click(object sender, EventArgs e) {
  2002. lblProviderResult.Text = "";
  2003. string sel = lstProviders.SelectedValue;
  2004. if(sel == null || sel.Length == 0) {
  2005. lblProviderResult.CssClass = "resulterror";
  2006. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  2007. return;
  2008. }
  2009. string name = sel.Substring(3);
  2010. string type = sel.Substring(0, 3).ToUpperInvariant();
  2011. switch(type) {
  2012. case "[U]":
  2013. IUsersStorageProvider u = Collectors.UsersProviderCollector.GetProvider(name);
  2014. if(u == null) u = Collectors.DisabledUsersProviderCollector.GetProvider(name);
  2015. if(u == null) return;
  2016. if(u.GetType().ToString().Equals(Settings.DefaultUsersProvider)) {
  2017. lblProviderResult.CssClass = "resulterror";
  2018. lblProviderResult.Text = Resources.Messages.CannotUnloadDefaultProvider;
  2019. return;
  2020. }
  2021. Collectors.UsersProviderCollector.RemoveProvider(u);
  2022. Collectors.DisabledUsersProviderCollector.RemoveProvider(u);
  2023. Users.Instance.UnloadFrom(u);
  2024. u.Shutdown();
  2025. LoadUsers();
  2026. break;
  2027. case "[P]":
  2028. IPagesStorageProvider p = Collectors.PagesProviderCollector.GetProvider(name);
  2029. if(p == null) p = Collectors.DisabledPagesProviderCollector.GetProvider(name);
  2030. if(p == null) return;
  2031. if(p.GetType().ToString().Equals(Settings.DefaultPagesProvider)) {
  2032. lblProviderResult.CssClass = "resulterror";
  2033. lblProviderResult.Text = Resources.Messages.CannotUnloadDefaultProvider;
  2034. return;
  2035. }
  2036. Collectors.PagesProviderCollector.RemoveProvider(p);
  2037. Collectors.DisabledPagesProviderCollector.RemoveProvider(p);
  2038. Content.InvalidateAll();
  2039. Content.PseudoCache.Clear();
  2040. Pages.Instance.UnloadFrom(p);
  2041. Snippets.Instance.UnloadFrom(p);
  2042. NavigationPaths.Instance.UnloadFrom(p);
  2043. p.Shutdown();
  2044. LoadPages(true);
  2045. LoadCategories();
  2046. LoadSnippets();
  2047. LoadNavPaths();
  2048. break;
  2049. case "[F]":
  2050. IFormatterProvider f = Collectors.FormatterProviderCollector.GetProvider(name);
  2051. if(f == null) f = Collectors.DisabledFormatterProviderCollector.GetProvider(name);
  2052. if(f == null) return;
  2053. Collectors.FormatterProviderCollector.RemoveProvider(f);
  2054. Collectors.DisabledFormatterProviderCollector.RemoveProvider(f);
  2055. Content.InvalidateAll();
  2056. Content.PseudoCache.Clear();
  2057. f.Shutdown();
  2058. break;
  2059. default:
  2060. throw new Exception();
  2061. }
  2062. lblProviderResult.CssClass = "resultok";
  2063. lblProviderResult.Text = Resources.Messages.ProviderUnloaded;
  2064. LoadProviders();
  2065. }
  2066. protected void btnRemoveDll_Click(object sender, EventArgs e) {
  2067. try {
  2068. File.Delete(Settings.PluginsDirectory + lstDlls.SelectedValue);
  2069. }
  2070. catch { }
  2071. LoadDlls();
  2072. }
  2073. protected void btnUploadDll_Click(object sender, EventArgs e) {
  2074. lblUploadDllResult.Text = "";
  2075. if(!updDll.HasFile) {
  2076. lblUploadDllResult.CssClass = "resulterror";
  2077. lblUploadDllResult.Text = Resources.Messages.YouMustProvideAFile;
  2078. return;
  2079. }
  2080. string filename = updDll.FileName;
  2081. if(!Path.GetExtension(filename).ToLowerInvariant().Equals(".dll")) {
  2082. lblUploadDllResult.CssClass = "resulterror";
  2083. lblUploadDllResult.Text = Resources.Messages.OnlyDllFilesAllowed;
  2084. return;
  2085. }
  2086. if(File.Exists(Settings.PluginsDirectory + filename)) {
  2087. lblUploadDllResult.CssClass = "resulterror";
  2088. lblUploadDllResult.Text = Resources.Messages.FileAlreadyExists;
  2089. return;
  2090. }
  2091. updDll.SaveAs(Settings.PluginsDirectory + filename);
  2092. ProviderLoader.LoadFromAuto(Settings.PluginsDirectory + filename);
  2093. LoadDlls();
  2094. LoadProviders();
  2095. Pages.Instance.Reload();
  2096. Users.Instance.Reload();
  2097. LoadPages(true);
  2098. LoadCategories();
  2099. LoadSnippets();
  2100. LoadNavPaths();
  2101. LoadUsers();
  2102. }
  2103. protected void lstProviders_SelectedIndexChanged(object sender, EventArgs e) {
  2104. string sel = lstProviders.SelectedValue;
  2105. if(sel == null || sel.Length == 0) {
  2106. lblProviderResult.CssClass = "resulterror";
  2107. lblProviderResult.Text = Resources.Messages.ProviderNotFound;
  2108. return;
  2109. }
  2110. lblProviderResult.Text = "";
  2111. string name = sel.Substring(3);
  2112. string type = sel.Substring(0, 3).ToUpperInvariant();
  2113. string url, author, dll, config;
  2114. switch(type) {
  2115. case "[U]":
  2116. IUsersStorageProvider u = Collectors.UsersProviderCollector.GetProvider(name);
  2117. if(u == null) u = Collectors.DisabledUsersProviderCollector.GetProvider(name);
  2118. name = u.Information.Name;
  2119. author = u.Information.Author;
  2120. url = u.Information.Url;
  2121. dll = u.GetType().Assembly.FullName;
  2122. config = ProviderLoader.LoadConfiguration(u.GetType().ToString());
  2123. break;
  2124. case "[P]":
  2125. IPagesStorageProvider p = Collectors.PagesProviderCollector.GetProvider(name);
  2126. if(p == null) p = Collectors.DisabledPagesProviderCollector.GetProvider(name);
  2127. name = p.Information.Name;
  2128. author = p.Information.Author;
  2129. url = p.Information.Url;
  2130. dll = p.GetType().Assembly.FullName;
  2131. config = ProviderLoader.LoadConfiguration(p.GetType().ToString());
  2132. break;
  2133. case "[F]":
  2134. IFormatterProvider f = Collectors.FormatterProviderCollector.GetProvider(name);
  2135. if(f == null) f = Collectors.DisabledFormatterProviderCollector.GetProvider(name);
  2136. name = f.Information.Name;
  2137. author = f.Information.Author;
  2138. url = f.Information.Url;
  2139. dll = f.GetType().Assembly.FullName;
  2140. config = ProviderLoader.LoadConfiguration(f.GetType().ToString());
  2141. break;
  2142. default:
  2143. throw new Exception();
  2144. }
  2145. dll = dll.Substring(0, dll.IndexOf(",")) + ".dll";
  2146. StringBuilder sb = new StringBuilder();
  2147. sb.Append("<big><b>");
  2148. sb.Append(name);
  2149. sb.Append("</b></big><br />");
  2150. sb.Append(@"<a href=""");
  2151. sb.Append(url);
  2152. sb.Append(@""" target=""_blank"">");
  2153. sb.Append(author);
  2154. sb.Append("</a><br />");
  2155. sb.Append(Resources.Messages.LocatedIn);
  2156. sb.Append(": <b>");
  2157. sb.Append(dll);
  2158. sb.Append("</b><br /><br />");
  2159. sb.Append(Resources.Messages.ConfigurationString);
  2160. sb.Append(":<br />");
  2161. sb.Append(@"<code>");
  2162. sb.Append(HttpContext.Current.Server.HtmlEncode(config));
  2163. sb.Append("</code>");
  2164. lblProviderInfo.Text = sb.ToString();
  2165. }
  2166. protected void lstPagesProviderFrom_SelectedIndexChanged(object sender, EventArgs e) {
  2167. lstPagesProviderTo.Items.Clear();
  2168. if(lstPagesProviderFrom.SelectedValue.Equals("-")) {
  2169. btnMovePages.Enabled = false;
  2170. return;
  2171. }
  2172. IPagesStorageProvider[] provs = Collectors.PagesProviderCollector.AllProviders;
  2173. for(int i = 0; i < provs.Length; i++) {
  2174. if(!provs[i].GetType().ToString().Equals(lstPagesProviderFrom.SelectedValue) &&
  2175. !provs[i].ReadOnly) {
  2176. lstPagesProviderTo.Items.Add(new ListItem(provs[i].Information.Name, provs[i].GetType().ToString()));
  2177. }
  2178. }
  2179. if(lstPagesProviderTo.Items.Count > 0) btnMovePages.Enabled = true;
  2180. else btnMovePages.Enabled = false;
  2181. }
  2182. protected void btnMovePages_Click(object sender, EventArgs e) {
  2183. IPagesStorageProvider from = Collectors.PagesProviderCollector.GetProvider(lstPagesProviderFrom.SelectedValue);
  2184. IPagesStorageProvider to = Collectors.PagesProviderCollector.GetProvider(lstPagesProviderTo.SelectedValue);
  2185. DataMover.MovePages(from, to);
  2186. Content.PseudoCache.Clear();
  2187. Content.InvalidateAll();
  2188. Pages.Instance.Reload();
  2189. LoadPages(true);
  2190. LoadCategories();
  2191. LoadSnippets();
  2192. LoadNavPaths();
  2193. }
  2194. protected void lstUsersProviderFrom_SelectedIndexChanged(object sender, EventArgs e) {
  2195. lstUsersProviderTo.Items.Clear();
  2196. if(lstUsersProviderFrom.SelectedValue.Equals("-")) {
  2197. btnMoveUsers.Enabled = false;
  2198. return;
  2199. }
  2200. IUsersStorageProvider[] provs = Collectors.UsersProviderCollector.AllProviders;
  2201. for(int i = 0; i < provs.Length; i++) {
  2202. if(!provs[i].GetType().ToString().Equals(lstUsersProviderFrom.SelectedValue) &&
  2203. !provs[i].ReadOnly) {
  2204. lstUsersProviderTo.Items.Add(new ListItem(provs[i].Information.Name, provs[i].GetType().ToString()));
  2205. }
  2206. }
  2207. if(lstUsersProviderTo.Items.Count > 0) btnMoveUsers.Enabled = true;
  2208. else btnMoveUsers.Enabled = false;
  2209. }
  2210. protected void btnMoveUsers_Click(object sender, EventArgs e) {
  2211. IUsersStorageProvider from = Collectors.UsersProviderCollector.GetProvider(lstUsersProviderFrom.SelectedValue);
  2212. IUsersStorageProvider to = Collectors.UsersProviderCollector.GetProvider(lstUsersProviderTo.SelectedValue);
  2213. DataMover.MoveUsers(from, to);
  2214. Users.Instance.Reload();
  2215. LoadUsers();
  2216. }
  2217. #endregion
  2218. #region Custom Validators
  2219. protected void cvUsername_ServerValidate(object source, ServerValidateEventArgs args) {
  2220. if ((string.Compare(txtUsername.Text.ToLowerInvariant(), "admin") == 0) || (string.Compare(txtUsername.Text.ToLowerInvariant(), "guest") == 0) ) {
  2221. args.IsValid = false;
  2222. return;
  2223. }
  2224. Users u = Users.Instance;
  2225. args.IsValid = (u.Find(txtUsername.Text) == null);
  2226. }
  2227. protected void cvPassword1_ServerValidate(object source, ServerValidateEventArgs args) {
  2228. args.IsValid = (string.Compare(txtPassword1.Text, txtPassword2.Text, true) == 0);
  2229. }
  2230. protected void cvPassword2_ServerValidate(object source, ServerValidateEventArgs args) {
  2231. args.IsValid = true;
  2232. }
  2233. protected void cvDateTimeFormat_ServerValidate(object source, ServerValidateEventArgs args) {
  2234. try {
  2235. if(txtDateTimeFormat.Text.Length == 0) throw new Exception();
  2236. string.Format("{0:" + txtDateTimeFormat.Text + "}", DateTime.Now);
  2237. args.IsValid = true;
  2238. }
  2239. catch {
  2240. args.IsValid = false;
  2241. }
  2242. }
  2243. protected void cvSmtpAuth_ServerValidate(object source, ServerValidateEventArgs args) {
  2244. if(txtSmtpPassword.Text.Length > 0 && txtSmtpUsername.Text.Length == 0) args.IsValid = false;
  2245. else args.IsValid = true;
  2246. }
  2247. #endregion
  2248. }
  2249. }