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 System.Net; using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; using ScrewTurn.Wiki.ImportWiki; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { public partial class Import : BasePage { private HttpWebRequest request; private delegate void delegatePageDownload(); protected void Page_Load(object sender, EventArgs e) { if(Array.Find(SessionFacade.GetCurrentGroupNames(), delegate(string g) { return g == Settings.AdministratorsGroup; }) == null) { UrlTools.Redirect("AccessDenied.aspx"); } Page.Title = "Import - " + Settings.WikiTitle; } protected void lstOperation_SelectedIndexChanged(object sender, EventArgs e) { switch(lstOperation.SelectedValue.ToUpperInvariant()) { case "PAGE": mlwImport.ActiveViewIndex = 0; break; case "WIKI": mlwImport.ActiveViewIndex = 1; break; case "TEXT": mlwImport.ActiveViewIndex = 2; break; } } protected void lstWiki_SelectedIndexChanged(object sender, EventArgs e) { switch(lstWiki.SelectedValue.ToUpperInvariant()) { case "MEDIA": lblWikiUrl.Text = "Wiki URL, in the form http://www.yourserver.com/w/index.php"; lblPageUrl.Text = "Wiki URL, in the form http://www.yourserver.com/w/index.php"; break; case "FLEX": lblWikiUrl.Text = "Wiki URL, in the form http://www.yourserver.com/"; lblPageUrl.Text = "Wiki URL, in the form http://www.yourserver.com/"; break; } } protected void btnGo_click(object sender, EventArgs e) { switch(lstOperation.SelectedValue.ToUpperInvariant()) { case "PAGE": PageAsyncTask task = new PageAsyncTask( new BeginEventHandler(BeginPageRequest), new EndEventHandler(EndPageRequest), new EndEventHandler(TimeoutPageRequest), null); RegisterAsyncTask(task); break; case "WIKI": AddOnPreRenderCompleteAsync( new BeginEventHandler(BeginPagesListRequest), new EndEventHandler(EndPagesListRequest) ); break; case "TEXT": mlwImport.ActiveViewIndex = 3; ITranslator translator = new Translator(); txtTranslated.Text = translator.Translate(txtText.Text); break; } } private string PageRequest(string url) { request = (HttpWebRequest)WebRequest.Create(url); SetProxyAndUserAgent(request); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); return reader.ReadToEnd(); } private void SetProxyAndUserAgent(HttpWebRequest req) { req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7"; string addr = null; int port = -1; if(txtProxyAddress.Text.Length > 0) addr = txtProxyAddress.Text; if(txtProxyPort.Text.Length > 0) port = int.Parse(txtProxyPort.Text); if(addr != null) { if(port > 0) req.Proxy = new WebProxy(addr, port); else req.Proxy = new WebProxy(addr); } else req.Proxy = null; } private void savePage(string text) { string pageName = txtPageName.Text.Replace(":", "_").Replace("/", "_").Replace(@"\", "_").Replace('?', '_'); string pageTitle = txtPageName.Text; Log.LogEntry("Page " + pageName + " created with import whole wiki", EntryType.General, "import"); PageInfo pg = Pages.FindPage(pageName); SaveMode saveMode = SaveMode.Backup; if(pg == null) { Pages.CreatePage(null as string, pageName); pg = Pages.FindPage(pageName); saveMode = SaveMode.Normal; } Log.LogEntry("Page update requested for " + pageName, EntryType.General, "import"); Pages.ModifyPage(pg, pageTitle, "import", DateTime.Now, "", text, null, null, saveMode); } #region TranslateAll protected void btnTranslateAll_click(object sender, EventArgs e) { AddOnPreRenderCompleteAsync( new BeginEventHandler(PageDownload), new EndEventHandler(endPageDownload) ); } private IAsyncResult PageDownload(object sender, EventArgs e, AsyncCallback ac, object state) { IAsyncResult ar = null; return ac.BeginInvoke(ar, ac, null); } private void endPageDownload(IAsyncResult ar) { for(int i = 0; i < pageList.Items.Count; i++) { if(pageList.Items[i].Selected) { string url = ""; Regex textarea = null; Match match = null; ITranslator translator = null; if(lstWiki.SelectedValue.ToUpperInvariant() == "MEDIA") { url = txtWikiUrl.Text + "?title=" + pageList.Items[i].Value + "&action=edit"; textarea = new Regex(@"(?<=(\])*?)\>)(.|\s)+?(?=(\<\/textarea\>))"); translator = new Translator(); } if(lstWiki.SelectedValue.ToUpperInvariant() == "FLEX") { if(txtWikiUrl.Text.EndsWith("/")) url = txtWikiUrl.Text + "wikiedit.aspx?topic=" + pageList.Items[i].Value; else url = txtWikiUrl.Text + "/wikiedit.aspx?topic=" + pageList.Items[i].Value; textarea = new Regex(@"(?<=(\