using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Reflection;
using BlogEngine.Core;
public partial class User_controls_xmanager_SourceEditor : UserControl
{
static protected string _errorMsg = string.Empty;
static protected string _extensionName = string.Empty;
///
/// Handles page load event
///
/// Page
/// Event args
protected void Page_Load(object sender, EventArgs e)
{
btnSave.Enabled = true;
_extensionName = Path.GetFileName(Request.QueryString["ext"]);
txtEditor.Text = ReadFile(GetExtFileName());
}
///
/// Buttons save handler
///
/// Button
/// Event args
protected void btnSave_Click(object sender, EventArgs e)
{
if (WriteFile(GetExtFileName(), txtEditor.Text))
{
Response.Redirect("default.aspx");
}
else
{
txtEditor.Text = _errorMsg;
txtEditor.ForeColor = System.Drawing.Color.Red;
btnSave.Enabled = false;
}
}
///
/// Returns extension file name
///
/// File name
static protected string GetExtFileName()
{
string fileName = HttpContext.Current.Request.PhysicalApplicationPath;
ArrayList codeAssemblies = Utils.CodeAssemblies();
foreach (Assembly a in codeAssemblies)
{
Type[] types = a.GetTypes();
foreach (Type type in types)
{
if (type.Name == _extensionName)
{
string assemblyName = type.Assembly.FullName.Split(".".ToCharArray())[0];
assemblyName = assemblyName.Replace("App_SubCode_", "App_Code\\");
string fileExt = assemblyName.Contains("VB_Code") ? ".vb" : ".cs";
fileName += Path.Combine(Path.Combine(assemblyName, "Extensions"), _extensionName + fileExt);
}
}
}
return fileName;
}
///
/// Read extension source file from disk
///
/// File Name
/// Source file text
string ReadFile(string fileName)
{
string val = "Source for [" + fileName + "] not found";
try
{
val = File.ReadAllText(fileName);
}
catch (Exception)
{
btnSave.Enabled = false;
}
return val;
}
///
/// Writes file to the disk
///
/// File name
/// File source (text)
/// True if successful
static bool WriteFile(string fileName, string val)
{
try
{
StreamWriter sw = File.CreateText(fileName);
sw.Write(val);
sw.Close();
}
catch (Exception e)
{
_errorMsg = e.Message;
return false;
}
return true;
}
}