using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { public partial class AdminSnippets : BasePage { protected void Page_Load(object sender, EventArgs e) { AdminMaster.RedirectToLoginIfNeeded(); if(!AdminMaster.CanManageSnippetsAndTemplates(SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames())) UrlTools.Redirect("AccessDenied.aspx"); if(!Page.IsPostBack) { // Load snippets rptSnippetsTemplates.DataBind(); } } protected void rptSnippetsTemplates_DataBinding(object sender, EventArgs e) { List snippets = Snippets.GetSnippets(); List templates = Templates.GetTemplates(); List result = new List(snippets.Count + templates.Count); foreach(Snippet snip in snippets) { result.Add(new SnippetTemplateRow(snip, "S." + snip.Name == txtCurrentElement.Value)); } foreach(ContentTemplate temp in templates) { result.Add(new SnippetTemplateRow(temp, "T." + temp.Name == txtCurrentElement.Value)); } rptSnippetsTemplates.DataSource = result; } protected void rptSnippetsTemplates_ItemCommand(object sender, CommandEventArgs e) { if(e.CommandName == "Select") { txtCurrentElement.Value = e.CommandArgument as string; if(txtCurrentElement.Value.StartsWith("S.")) SelectSnippet(txtCurrentElement.Value.Substring(2)); else SelectTemplate(txtCurrentElement.Value.Substring(2)); providerSelector.Enabled = false; txtName.Text = txtCurrentElement.Value.Substring(2); txtName.Enabled = false; btnCreate.Visible = false; btnSave.Visible = true; btnDelete.Visible = true; pnlList.Visible = false; pnlEditElement.Visible = true; lblResult.CssClass = ""; lblResult.Text = ""; } } /// /// Sets the editing area title for a snippet. /// private void SetTitleForSnippet() { lblEditTitleSnippet.Visible = true; lblEditTitleTemplate.Visible = false; } /// /// Sets the editing area title for a template. /// private void SetTitleForTemplate() { lblEditTitleSnippet.Visible = false; lblEditTitleTemplate.Visible = true; } /// /// Selects a snippet for editing. /// /// The name of the snippet. private void SelectSnippet(string name) { Snippet snippet = Snippets.Find(name); providerSelector.SelectedProvider = snippet.Provider.GetType().FullName; editor.SetContent(snippet.Content, Settings.UseVisualEditorAsDefault); SetTitleForSnippet(); } /// /// Selects a template for editing. /// /// The name of the template. private void SelectTemplate(string name) { ContentTemplate template = Templates.Find(name); providerSelector.SelectedProvider = template.Provider.GetType().FullName; editor.SetContent(template.Content, Settings.UseVisualEditorAsDefault); SetTitleForTemplate(); } protected void btnNewSnippet_Click(object sender, EventArgs e) { pnlList.Visible = false; pnlEditElement.Visible = true; editor.SetContent("", Settings.UseVisualEditorAsDefault); SetTitleForSnippet(); txtCurrentElement.Value = "S"; lblResult.Text = ""; lblResult.CssClass = ""; } protected void btnNewTemplate_Click(object sender, EventArgs e) { pnlList.Visible = false; pnlEditElement.Visible = true; editor.SetContent("", Settings.UseVisualEditorAsDefault); SetTitleForTemplate(); txtCurrentElement.Value = "T"; lblResult.Text = ""; lblResult.CssClass = ""; } protected void cvName_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = Pages.IsValidName(txtName.Text); } protected void btnCreate_Click(object sender, EventArgs e) { lblResult.CssClass = ""; lblResult.Text = ""; if(!Page.IsValid) return; if(txtCurrentElement.Value == "S") CreateSnippet(); else CreateTemplate(); } /// /// Creates a snippet. /// private void CreateSnippet() { Log.LogEntry("Snippet creation requested for " + txtName.Text, EntryType.General, Log.SystemUsername); if(Snippets.AddSnippet(txtName.Text, editor.GetContent(), Collectors.PagesProviderCollector.GetProvider(providerSelector.SelectedProvider))) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.SnippetCreated; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotCreateSnippet; } } /// /// Creates a template. /// private void CreateTemplate() { Log.LogEntry("Content Template creation requested for " + txtName.Text, EntryType.General, Log.SystemUsername); if(Templates.AddTemplate(txtName.Text, editor.GetContent(), Collectors.PagesProviderCollector.GetProvider(providerSelector.SelectedProvider))) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.TemplateCreated; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotCreateTemplate; } } protected void btnSave_Click(object sender, EventArgs e) { lblResult.CssClass = ""; lblResult.Text = ""; if(txtCurrentElement.Value.StartsWith("S.")) SaveSnippet(txtCurrentElement.Value.Substring(2)); else SaveTemplate(txtCurrentElement.Value.Substring(2)); } /// /// Saves a snippet. /// /// The name of the snippet to save. private void SaveSnippet(string name) { Snippet snippet = Snippets.Find(name); Log.LogEntry("Snippet modification requested for " + name, EntryType.General, Log.SystemUsername); if(Snippets.ModifySnippet(snippet, editor.GetContent())) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.SnippetSaved; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotSaveSnippet; } } /// /// Saves a template. /// /// The name of the template to save. private void SaveTemplate(string name) { ContentTemplate template = Templates.Find(name); Log.LogEntry("Content Template modification requested for " + name, EntryType.General, Log.SystemUsername); if(Templates.ModifyTemplate(template, editor.GetContent())) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.TemplateSaved; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotSaveTemplate; } } protected void btnDelete_Click(object sender, EventArgs e) { lblResult.CssClass = ""; lblResult.Text = ""; if(txtCurrentElement.Value.StartsWith("S.")) DeleteSnippet(txtCurrentElement.Value.Substring(2)); else DeleteTemplate(txtCurrentElement.Value.Substring(2)); } /// /// Deletes a snippet. /// /// The name of the snippet to delete. private void DeleteSnippet(string name) { Snippet snippet = Snippets.Find(name); Log.LogEntry("Snippet deletion requested for " + name, EntryType.General, Log.SystemUsername); if(Snippets.RemoveSnippet(snippet)) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.SnippetDeleted; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotDeleteSnippet; } } /// /// Deletes a template. /// /// The name of the template to delete. private void DeleteTemplate(string name) { ContentTemplate snippet = Templates.Find(name); Log.LogEntry("Content Template deletion requested for " + name, EntryType.General, Log.SystemUsername); if(Templates.RemoveTemplate(snippet)) { RefreshList(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.TemplateDeleted; ReturnToList(); } else { lblResult.CssClass = "resulterror"; lblResult.Text = Properties.Messages.CouldNotDeleteTemplate; } } protected void btnCancel_Click(object sender, EventArgs e) { RefreshList(); ReturnToList(); } /// /// Returns to the accounts list. /// private void ReturnToList() { pnlEditElement.Visible = false; pnlList.Visible = true; } /// /// Refreshes the users list. /// private void RefreshList() { txtCurrentElement.Value = ""; ResetEditor(); rptSnippetsTemplates.DataBind(); } /// /// Resets the account editor. /// private void ResetEditor() { providerSelector.Enabled = true; txtName.Text = ""; txtName.Enabled = true; editor.SetContent("", Settings.UseVisualEditorAsDefault); btnCreate.Visible = true; btnSave.Visible = false; btnDelete.Visible = false; lblResult.Text = ""; lblResult.CssClass = ""; } } /// /// Represents a snippet for display purposes. /// public class SnippetTemplateRow { private string type, name, distinguishedName, parameterCount, provider, additionalClass; /// /// Initializes a new instance of the class. /// /// The original snippet. /// A value indicating whether the snippet is selected. public SnippetTemplateRow(Snippet snippet, bool selected) { type = Properties.Messages.Snippet; name = snippet.Name; distinguishedName = "S." + snippet.Name; parameterCount = Snippets.CountParameters(snippet).ToString(); provider = snippet.Provider.Information.Name; additionalClass = selected ? " selected" : ""; } /// /// Initializes a new instance of the class. /// /// The original template. /// A value indicating whether the template is selected. public SnippetTemplateRow(ContentTemplate template, bool selected) { type = Properties.Messages.Template; name = template.Name; distinguishedName = "T." + template.Name; parameterCount = ""; provider = template.Provider.Information.Name; additionalClass = selected ? " selected" : ""; } /// /// Gets the type identifier. /// public string Type { get { return type; } } /// /// Gets the name. /// public string Name { get { return name; } } /// /// Gets the distinguished name. /// public string DistinguishedName { get { return distinguishedName; } } /// /// Gets the parameter count. /// public string ParameterCount { get { return parameterCount; } } /// /// Gets the provider. /// public string Provider { get { return provider; } } /// /// Gets the additional CSS class. /// public string AdditionalClass { get { return additionalClass; } } } }