using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GZTW.AyaNova.BLL;
using Telerik.Web.UI;
using Telerik.Web.UI.Widgets;
using System.IO;
public partial class WikiEdit : BaseEditPage
{
#region BizObject
public WikiPage mWikiPage;
protected WikiPage CurrentWikiPage
{
get
{
if (mWikiPage != null) return mWikiPage;
string idstring = Request.QueryString["id"];
Guid oID = Guid.Empty;
if (!string.IsNullOrEmpty(idstring))
oID = new Guid(idstring);
mWikiPage = (WikiPage)Session["wikipage"];
//ensure if object in session is the same as the one requested
if (mWikiPage == null || (oID != Guid.Empty && mWikiPage.ID != oID))//Case 912
{
try
{
if (oID != Guid.Empty)
mWikiPage = WikiPage.GetItem(oID);
else
{
throw new System.NotSupportedException("WikiEdit->No WikiPage found for object");
}
Session["wikipage"] = mWikiPage;
}
catch (System.Security.SecurityException)
{
CloseMe();
}
}
//if (!WikiPage.CanEditWikiPage(mWikiPage.ExactRootObjectType, mWikiPage.RootObjectID))//case 1584
//{
// Util.Denied(Context);
// return null;
//}
return mWikiPage;
}
}
#endregion
#region Page events
protected void Page_Init()
{
}
#region customize editor
public void RemoveButtons()
{
ed.EnsureToolsFileLoaded();
//Customize the editor toolbar buttons
ed.EnsureToolsFileLoaded();
//Removing spell check turns off error about dictionaries
RemoveButton("AjaxSpellCheck");
RemoveButton("ModuleManager");
//TAble related
RemoveButton("InsertTable");
RemoveButton("ToggleTableBorder");
RemoveButton("Zoom");
RemoveButton("ToggleDocking");
RemoveButton("AboutDialog");
RemoveButton("ImageMapDialog");
RemoveButton("AbsolutePosition");
RemoveButton("InsertSnippet");
RemoveButton("InsertFormElement");
RemoveButton("FlashManager");
RemoveButton("MediaManager");
RemoveButton("DocumentManager");
RemoveButton("LinkManager");
RemoveButton("Unlink");
RemoveButton("InsertCustomLink");
RemoveButton("TemplateManager");
RemoveButton("InsertHorizontalRule");
RemoveButton("FormatCodeBlock");
RemoveButton("ApplyClass");
RemoveButton("InsertGroupBox");
}
public void RemoveButton(string name)
{
foreach (Telerik.Web.UI.EditorToolGroup group in ed.Tools)
{
EditorTool tool = group.FindTool(name);
if (tool != null)
{
group.Tools.Remove(tool);
//hack to remove group with nothing but separators in it
//because none of the built in toolbars we want
//has less than three icons in them
if (group.Tools.Count <3 )
ed.Tools.Remove(group);
break;
}
}
}
#endregion customize editor
protected void Page_Load(object sender, EventArgs e)
{
//string s=System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
//don't process the following on an ajax callback
if (IsCallback) return;
//Initialize controls on first page load
if (!this.IsPostBack)
{
//Item zero is always the print menu
//Master.Menu.Items[0].Hidden=true;
}
RemoveButtons();
ed.ImageManager.ContentProviderTypeName = typeof(WBIContentProvider).AssemblyQualifiedName;
ed.ImageManager.ViewPaths = new string[] { this.CurrentWikiPage.ID.ToString(), "IMAGE" };
ed.ImageManager.UploadPaths = new string[] { "ImageUploadPath" };
ed.ImageManager.EnableImageEditor = false;
ed.DisableFilter(Telerik.Web.UI.EditorFilters.ConvertFontToSpan);
//ed.DocumentManager.ContentProviderTypeName = typeof(WBIContentProvider).AssemblyQualifiedName;
//ed.DocumentManager.ViewPaths = new string[] { this.CurrentWikiPage.ID.ToString(), "FILE" };
//ed.DocumentManager.UploadPaths = new string[] { "DOCUploadPath" };
//ed.DocumentManager.SearchPatterns = new string[] { "*.*" };
}
protected void Page_LoadComplete(object sender, EventArgs e)
{
////don't process the following on an ajax callback
//if (IsCallback) return;
////Get data logic
//if (this.IsPostBack)//Only on a postback
//{
// //Only if user isn't closing form outright without saving
// if (Master.AyMessage == null || Master.AyMessage.Message != "LT:UI.Command.Close")
// {
// GetData();
// }
// if (Master.AyMessage != null)
// HandleAyMessage();
//}
//Case 308 replicated following block from client form
//Get data logic
if (this.IsPostBack && !IsAjaxCallback)//Only on a postback and not a callback
{
GetData();
}
//Load and set data in initial form load
//and in all postbacks that are not a result of a rad
//manager callback
if (!IsAjaxCallback)
{
//Localize the page
Util.Localize(this.Page);
SetData();
}
if (Master.AyMessage != null)
HandleAyMessage();
}
#endregion page events
#region Set / get data
private void SetData()
{
WikiPage o = CurrentWikiPage;
this.Title = Util.LocaleText("O.WikiPage") + " - " + NameFetcher.GetItem(new TypeAndID(mWikiPage.RootObjectType, mWikiPage.RootObjectID)).RecordName;
ed.Content = o.GetContentAsWBIReadyHTML(true);
}
private void GetData()
{
WikiPage o = CurrentWikiPage;
//string s = ed.Content;
o.SetContentFromWBI(ed.Content);
}
#endregion
#region Toolbar and other master page messages
///
/// Messages from master page
///
void HandleAyMessage()
{
switch (Master.AyMessage.MessageType)
{
case AYMessageType.ToolBarClick:
{
switch (Master.AyMessage.Message)
{
case "LT:UI.Command.Close":
CloseForm();
break;
case "LT:UI.Command.Save":
SaveRecord();
break;
case "LT:UI.Command.SaveClose":
if (SaveRecord())
CloseForm();
break;
case "LT:UI.Command.Delete":
WikiPage.DeleteItem(CurrentWikiPage.ID);
CloseForm();
break;
case "LT:UI.Command.SaveNew":
if (SaveRecord())
{
Session.Remove("wikipage");
mWikiPage = null;
Response.Redirect("WikiPageEdit.aspx");
}
break;
case "LT:UI.Command.RecordHistory":
Util.PopupAlert(this.Page,Util.RecordHistoryText(
CurrentWikiPage.Creator,
CurrentWikiPage.Modifier,
CurrentWikiPage.Created,
CurrentWikiPage.Modified
));
break;
//case "LT:AssignedDoc.Label.List":
// Response.Redirect("stub.aspx");
// break;
}
}
break;
}
}
private bool SaveRecord()
{
if (!CurrentWikiPage.IsDirty) return true;
if (CurrentWikiPage.IsSavable)
{
Session["wikipage"] = mWikiPage = (WikiPage)mWikiPage.Save();
this.Master.SetErrors("");
return true;
}
else
{
//display broken rules, or whatever, see book
this.Master.SetErrors(mWikiPage.BrokenRulesText);
return false;
}
}
private void CloseForm()
{
Session.Remove("wikipage");
CloseMe();
}
#endregion
}
#region Custom content provider
///
/// Summary description for WBIContentProvider
///
public class WBIContentProvider : FileBrowserContentProvider
{
//http://demos.telerik.com/ASPNET/prometheus/Editor/Examples/DBFileBrowserContentProvider/DefaultCS.aspx
private PathPermissions fullPermissions = PathPermissions.Read | PathPermissions.Delete | PathPermissions.Upload;
public WBIContentProvider(HttpContext context, string[] searchPatterns,
string[] viewPaths, string[] uploadPaths, string[] deletePaths, string selectedUrl,
string selectedItemTag)
:
base(context, searchPatterns, viewPaths, uploadPaths, deletePaths, selectedUrl, selectedItemTag)
{
mWikiPageID = new Guid(viewPaths[0]);
mlist = AyaFileList.GetList(mWikiPageID);
mFileType = viewPaths[1];
}
string mFileType = "";
AyaFileList mlist = null;
Guid mWikiPageID = Guid.Empty;
public override string CreateDirectory(string path, string name)
{
throw new NotImplementedException();
}
public override string DeleteDirectory(string path)
{
throw new NotImplementedException();
}
public override string DeleteFile(string path)
{
throw new NotImplementedException();
}
public override System.IO.Stream GetFile(string url)
{
string sFileName = Path.GetFileName(url);
if (this.mlist.Contains(sFileName))
{
//return it as a stream
AyaFileList.AyaFileListInfo? i=mlist[sFileName];
if(i.HasValue)
{
AyaFile af = AyaFile.GetItem(i.Value.LT_O_AyaFile.Value);
return af.GetContent();
}
}
return null;
}
public override string GetFileName(string url)
{
throw new NotImplementedException();
}
public override string GetPath(string url)
{
throw new NotImplementedException();
}
public override DirectoryItem ResolveDirectory(string path)
{
throw new NotImplementedException();
}
public override DirectoryItem[] ResolveRootDirectoryAsList(string path)
{
throw new NotImplementedException();
}
private int nRootsAdded = 0;
public override DirectoryItem ResolveRootDirectoryAsTree(string path)
{
if (nRootsAdded > 0) return null;
DirectoryItem di = new DirectoryItem("AyaFiles","","","",fullPermissions,GetChildFiles(path),new DirectoryItem[] { });
nRootsAdded++;
return di;
//throw new NotImplementedException();//ifst
}
public override string StoreBitmap(System.Drawing.Bitmap bitmap, string url, System.Drawing.Imaging.ImageFormat format)
{
throw new NotImplementedException();
}
public override string StoreFile(Telerik.Web.UI.UploadedFile file, string path, string name, params string[] arguments)
{
//replacing a file?
if (mlist.Contains(name))
{ //delete the old one first so no dupes hanging around
AyaFile.DeleteItem(mlist[name].Value.LT_O_AyaFile.Value);
}
//Store the file
AyaFile af = AyaFile.NewItem();
af.FileType = AyaFileType.EmbeddedWikiImage;
af.Name = name;
af.RootObjectID = mWikiPageID;
af.RootObjectType = RootObjectTypes.WikiPage;
af.SetContent(file.InputStream);
af.Save();
//mlist = AyaFileList.GetList(mWikiPageID);
return string.Empty;
}
private FileItem[] GetChildFiles(string _path)
{
ArrayList files = new ArrayList();
foreach (AyaFileList.AyaFileListInfo i in mlist)
{
string name = i.LT_O_AyaFile.Display;
string itemurl = "";
if (mFileType == "IMAGE" && i.FileType== AyaFileType.EmbeddedWikiImage)
{
itemurl = "AyaImage.ashx?id=" + i.LT_O_AyaFile.Value.ToString();
files.Add(
new FileItem(name, Path.GetExtension(name), (long)i.FileSizeBytes, string.Empty, itemurl,
i.LT_O_AyaFile.Value.ToString(), fullPermissions));
continue;
}
if (mFileType == "FILE" && i.FileType!= AyaFileType.EmbeddedWikiImage)
{
itemurl = "AyaFileHandler.ashx?id=" + i.LT_O_AyaFile.Value.ToString();
files.Add(
new FileItem(name, Path.GetExtension(name), (long)i.FileSizeBytes, string.Empty, itemurl,
i.LT_O_AyaFile.Value.ToString(), fullPermissions));
}
}
return (FileItem[])files.ToArray(typeof(FileItem));
}
}
#endregion