PageRenderTime 74ms CodeModel.GetById 26ms 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

Large files files are truncated, but you can click here to view the full file

  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. btnDeleteAllBa

Large files files are truncated, but you can click here to view the full file