public static string run(IEnumerable<ProductsDefine.modInfo> mods, bool newFormatOnly = false) { //var logFn = @"q:\temp\EANewDeploy.log"; using (var wr = new StringWriter()) { Parallel.ForEach(mods, new ParallelOptions() { MaxDegreeOfParallelism = 6 }, mod => { StringBuilder sb = new StringBuilder(); //using (StringWriter wr = new StringWriter(err)) { var ctx = new NewEATradosCtx(); string lastExId = null; try { sb.Length = 0; NewEATradosLib.pageGroupStart(ctx); foreach (var ex in mod.exs) { lastExId = ex.Id; StringBuilder err = new StringBuilder(); schools.exStatic meta = new exStatic() { title = ex.Title }; try { string res; if (ex.NewDataFormat) { meta.url = ex.Id; meta.format = ExFormat.rew; res = CourseModel.Lib.Json(err, Machines.basicPath + @"rew\Web4\RwCourses\" + meta.url.Replace('/', '\\') + ".xml"); } else if (!newFormatOnly) { meta.url = ex.Id.Split('/').Last(); meta.format = ExFormat.ea; NewEATradosLib.pageStart(ctx, mod.crsId, meta.url, ex.Id + ".htm"); var cfg = new LMComLib.ConfigNewEA() { ExerciseUrl = ex.Id, CourseLang = urlToSrcLang(ex.Id), Lang = mod.crsId == CourseIds.EnglishE ? "en-gb" : "en-gb", courseId = mod.crsId }; res = LowUtils.DownloadStr(string.Format("http://www.langmaster.com/comcz/framework/deployment/EANew-DeployGenerator.aspx?NewEACfg={0}", HttpUtility.UrlEncode(LowUtils.JSONEncode(cfg)))); } else continue; sb.Append(JsonConvert.SerializeObject(meta)); sb.Append("$$$"); sb.Append(res); sb.Append("$$$"); } finally { if (err.Length > 0) lock (typeof(Exercise)) { wr.WriteLine(">>>> " + ex.Id); wr.WriteLine(err.ToString()); } } } if (!newFormatOnly || sb.Length > 0) { var tradosRes = NewEATradosLib.pageGroupEnd(ctx); //JSON prelozenych retezcu tradosRes[Langs.no] = sb.ToString(); //fake - pridej zdroj EADeployLib.writeFiles(Machines.basicPath + @"rew\Web4\Schools\EAData\", mod.jsonId + ".json", tradosRes); //vypis zdroje i JSON prekladu } } catch (Exception exp) { lock (typeof(Exercise)) { wr.WriteLine("******* ERROR: " + mod.path + "/" + lastExId + ": " + exp.Message); } } }); return wr.ToString(); } }
//Lokalizovane stranky gramatiky, seskupene dle CourseId a LMLevel (= napr. 0,1,2,3,4 pro English) public static string run() { XElement root = XElement.Load(Machines.lmcomData + @"Statistic_Grammar.xml"); StringBuilder sb = new StringBuilder(); var ctx = new NewEATradosCtx(); var logFn = @"q:\temp\EANewDeployGrammar.log"; //******************* stranky gramatiky dle Course a druhe urovne grammar Sitemap (levels-grammar, levels-ku&b) using (var wr = new StreamWriter(logFn)) foreach (var crsRoot in root.Elements("folder")) { var crsId = LowUtils.EnumParse<CourseIds>(crsRoot.AttributeValue("id")); if (!ProductsDefine.Lib.allCourses.Contains(crsId)) continue; //if (crsId != CourseIds.EnglishE) continue; foreach (var lvRoots in crsRoot.Elements("folder").Select((el, idx) => new { el, idx }).GroupBy(ei => getGramLev(crsId, ei.idx))) { var levRoots = lvRoots.Select(i => i.el); //muze byt vice uzlu, napr. gramtika a Kub sb.Length = 0; //***************** Grammar pages generation //vsechny stranky var leafs = levRoots. //listy tree Descendants("folder"). Where(e => !e.Elements("folder").Any()). //podminka - pouze leafs Select(e => new { title = e.AttributeValue("title"), id = e.AttributeValue("spaceId") + "/" + e.AttributeValue("globalId"), node = e }). ToArray(); NewEATradosLib.pageGroupStart(ctx); //capture stranky s gramatikou foreach (var pg in leafs) { var pgInfo = NewEATradosLib.pageStart(ctx, crsId, pg.id, pg.id); //predvypln pgInfo o lokalizaci titulku var title = pg.node.AttributeValue("title"); if (title.StartsWith("{{")) pgInfo.loc = NewEATradosLib.AllLocs.ToDictionary( l => l, l => new Dictionary<string, string> { { title.Substring(2, title.Length - 4), pg.node.Element(l.ToString()).Value } } ); //capture stranky var cfg = new LMComLib.ConfigNewEA() { isGrammar = true, ExerciseUrl = pg.id.Replace(".htm", null), CourseLang = CommonLib.CourseIdToLang(crsId), Lang = crsId == CourseIds.EnglishE ? "en-gb" : "en-gb", courseId = crsId }; try { var page = LowUtils.DownloadStr(string.Format("http://www.langmaster.com/comcz/framework/deployment/EANew-DeployGenerator.aspx?NewEACfg={0}", HttpUtility.UrlEncode(LowUtils.JSONEncode(cfg)))); page = brNormalize.Replace(scriptOut.Replace(page, ""), "<br/>"); schools.exStatic meta = new exStatic() { title = pg.title, url = pg.id }; sb.Append(JsonConvert.SerializeObject(meta)); sb.Append("$$$"); sb.Append(page); sb.Append("$$$"); //sb.Append(pg.id); sb.Append("$$$"); sb.Append(pg.title); sb.Append("$$$"); sb.Append(page); sb.Append("$$$"); } catch (Exception exp) { wr.WriteLine(pg.id + ": " + exp.Message); } //break; } // **************** Output all //pro vsechny stranky (vlozene pomoci NewEATradosLib.pageStart) najdi vsechny jazykove .RESX a zjisti z nich lokalizaci. var tradosRes = NewEATradosLib.pageGroupEnd(ctx); //JSON prelozenych retezcu tradosRes[Langs.no] = sb.ToString(); //pridej source EADeployLib.writeFiles(Machines.basicPath + @"rew\Web4\Schools\EAGrammar\", fileName(crsId, lvRoots.Key) + ".json", tradosRes); //vypis zdroje i JSON prekladu } //break; } return File.ReadAllText(logFn); }
//static lm_scorm fake_root = new lm_scorm(); //static ProjectInfo fake_project = new ProjectInfo(); void Application_BeginRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; string query; ConfigNewEA cfg = null; if ((query = app.Request["ExerciseUrl"]) != null) { cfg = new LMComLib.ConfigNewEA() { ExerciseUrl = query, CourseLang = LowUtils.EnumParse<Langs>(app.Request["CourseLang"]), Lang = "en-gb", courseId = LowUtils.EnumParse<CourseIds>(app.Request["courseId"]), isGrammar = app.Request["isGrammar"] == "true" }; } //else if ((queryObj = app.Request["ExerciseUrl"]) != null) { // cfg = new ConfigNewEA() { ExerciseUrl = queryObj, Lang = "de-de", CourseLang = Langs.en_gb }; //} if (cfg != null) { urlInfo.setCulture(cfg.Lang); cfg.LMS = LMSType.LMCom; cfg.DebugMode = false; cfg.IsExternalDict = true; cfg.IsExternalGrammar = true; cfg.IsListenTalk = true; var oldToNew = app.Request["oldeaDataType"]; CourseMeta.oldeaDataType dt = string.IsNullOrEmpty(oldToNew) ? CourseMeta.oldeaDataType.lmdata : LowUtils.EnumParse<CourseMeta.oldeaDataType>(oldToNew); //XXX1 LMComLib.TradosLib.oldToNewTransform = null; LMComLib.TradosLib.readLMDataFile = null; var fn = OldToNew.exFile.urlToFile("/" + cfg.ExerciseUrl, CourseMeta.oldeaDataType.lmdata); if (File.Exists(fn)) { var fileEx = new OldToNew.exFile(fn); var newExist = fileEx.getMeta().isByHand(); switch (dt) { case CourseMeta.oldeaDataType.lmdata: break; case CourseMeta.oldeaDataType.lmdataNew: if (newExist) { app.Response.ClearContent(); app.Response.WriteFile(fileEx.fileName(CourseMeta.oldeaDataType.lmdataNew)); app.Response.End(); } else { LMComLib.TradosLib.oldToNewTransform = root => { OldToNew.handler.oldToNewTransform(root, fileEx); app.Response.ClearContent(); app.Response.Write(root.ToString()); app.Response.End(); }; } break; case CourseMeta.oldeaDataType.xmlNew: if (newExist) { LMScormLibDOM.oldToNewSound.transformedXml = File.ReadAllText(fileEx.fileName(CourseMeta.oldeaDataType.lmdataNew), Encoding.UTF8); LMComLib.TradosLib.readLMDataFile = () => LMScormLibDOM.oldToNewSound.transformedXml; } else LMComLib.TradosLib.oldToNewTransform = root => OldToNew.handler.oldToNewTransform(root, fileEx); break; } } //LMComLib.TradosLib.oldToNewTransform = dt == CourseMeta.oldeaDataType.lmdata ? (Action<XElement>)null : root => { // OldToNew.handler.oldToNewTransform(root, fileEx); // if (dt == CourseMeta.oldeaDataType.lmdataNew) { // app.Response.ClearContent(); // app.Response.Write(root.ToString()); // app.Response.End(); // } //}; //cfg.oldToNewTransform = dt == CourseMeta.oldeaDataType.lmdata ? null : (Func<string, string>)(fn => OldToNew.handler.onReadNewEAFile(dt, fn)); cfg.SoundPlayer = SoundPlayerType.HTML5; //Lang = "cs-cz", //CourseLang = Langs.en_gb, //ExerciseUrl = null HttpContext.Current.Items[ConfigLow.c_configKey] = cfg; EaUrlInfo.HackEaUrlInfo(cfg.ExerciseUrl); return; } //AppData.AppDataLib.processCrawler(((HttpApplication)sender).Context); //AppData.AppDataLib.returnImg(((HttpApplication)sender).Context); try { if (Machines.isCrawlerEx(app.Context)) { app.Context.Response.Write("<h1>Online výuka jazyku ZDARMA</h1>"); app.Context.Response.Write(@" <p>Váš internet browser byl rozpoznán jako Crawler se jménem <b>" + app.Context.Request.UserAgent + @"</b>, což bezpečnostní pravidla aplikace neumožňují.</p> <p>Pošlete nám prosím na adresu [email protected] jméno crawlera (označené tučně), chybu okamžitě odstraníme. </p> <p>Děkujeme za pochopení</p> <p>váš LANGMaster team.</p>"); app.Context.Response.Flush(); app.Context.Response.End(); } EaUrlInfo eaInfo = new EaUrlInfo(app.Request.Url.AbsolutePath, app.Request.Url.Query); if (!Machines.isLMCom) urlInfo.normalizeCulture(); Logging.Trace(TraceLevel.Verbose, TraceCategory.All, "Handlers.cs/Application_BeginRequest url={0}", eaInfo.oldUrl); //LocalizeLMData.adjustThreadCulture(); app.Context.Trace.Write("Application_BeginRequest: " + eaInfo.oldUrl); switch (eaInfo.redirectType) { case RedirectType.Rewrite: app.Context.RewritePath(eaInfo.RewriteUrl, false); doCache(app.Context.Response.Cache, eaInfo.clientCache); break; case RedirectType.Redirect: app.Context.Response.Redirect(eaInfo.RewriteUrl, false); break; case RedirectType.Execute: //app.Server.Execute(eaInfo.RewriteUrl, false); app.Context.RewritePath(eaInfo.RewriteUrl, false); //doCache(app.Context.Response.Cache, eaInfo.clientCache); break; case RedirectType.WriteFile: app.Context.Response.Clear(); app.Context.Response.WriteFile(eaInfo.RewriteUrl); doCache(app.Context.Response.Cache, eaInfo.clientCache); app.Context.Response.End(); break; } } catch (System.Threading.ThreadAbortException exp) { throw; } catch (Exception exp) { Logging.Trace(TraceLevel.Error, TraceCategory.All, "Handlers.cs/Application_BeginRequest error={0}", exp.Message); throw; } }