//const string dataPath = Machines.basicPath + @"rew\Web4\Schools\EAData\"; //const string grammarPath = Machines.basicPath + @"rew\Web4\Schools\EAGrammar\"; static IEnumerable<schools.grammarNode> grItems(IEnumerable<XElement> root) { foreach (var el in root) { var childs = el.Elements("folder").ToArray(); if (childs.Length > 0) { schools.grammarNode fld = new schools.grammarNode() { title = el.AttributeValue("title") }; fld.items = grItems(childs).ToArray(); yield return fld; } else { schools.grammarNode lf = new schools.grammarNode() { title = el.AttributeValue("title"), jsonId = el.AttributeValue("spaceId") + "/" + el.AttributeValue("globalId") }; yield return lf; } } }
//Sitemap gramatiky s lokalizaci //Pouzito v Products.export (= generace sitemap pro kurz) public static Dictionary<Langs, string> getGrammar(ProductsDefine.productDescrLow prod, out schools.grammarNode gramm) { int[] gramLevs = prod.grammarLevels().ToArray(); gramm = null; if (gramLevs.Length == 0) return prod.locs().ToDictionary(l => l, l => "{}"); CourseIds crsId = prod.course; XElement root = XElement.Load(Machines.lmcomData + @"Statistic_Grammar.xml"); var crsNode = root.Elements("folder").FirstOrDefault(nd => LowUtils.EnumParse<CourseIds>(nd.AttributeValue("id")) == crsId); if (crsNode == null) return prod.locs().ToDictionary(l => l, l => "{}"); //******************* grammar sitemap for crsId a lmLevels int gramLev = -1; gramm = new schools.grammarNode() { title = crsNode.AttributeValue("title"), courseId = crsId, items = crsNode.Elements("folder"). Where((e, idx) => gramLevs.Contains(gramLev = getGramLev(crsId, idx))). Select(e => new schools.grammarNode() { title = e.AttributeValue("title"), jsonId = fileName(crsId, gramLev), //napr. english_0 LMLevel = gramLev, items = grItems(e.Elements("folder")).ToArray() }).ToArray() }; if (gramm != null && gramm.items.Length == 1) { gramm = (schools.grammarNode)gramm.items[0]; gramm.courseId = crsId; } //******************* sitemap localization for crsId a lmLevels var rootToLoc = new XElement("folder", new XAttribute("title", crsNode.AttributeValue("title")), crsNode.Elements().Where(el => el.Name.LocalName != "folder")); var s1 = new XElement[] { crsNode }; var s2 = crsNode.Elements("folder").Where((e, idx) => gramLevs.Contains(getGramLev(crsId, idx))); var s3 = s2.SelectMany(n => n.Descendants("folder")); var siteLocs = prod.locs(). Select(l => new { lang = l, locs = JsonConvert.SerializeObject( s1.Concat(s2).Concat(s3). Select(n => n.Elements(l.ToString()).SingleOrDefault()). Where(n => n != null). Select(n => new { id = n.Parent.AttributeValue("title"), title = n.Value }). Where(it => it.id.StartsWith("{{")). ToArray(). ToDictionary(it => it.id.Substring(2, it.id.Length - 4), it => it.title), Newtonsoft.Json.Formatting.Indented, EADeployLib.jsonSet ) }). ToDictionary(l => l.lang, l => l.locs); return siteLocs; }