private bool PublishArticlesAndTags(PublishConfiguration pc, out int count) { count = 0; using (var db = new FusekiContext()) { var articleIds = new List <int>(); try { foreach (var article in db.Articles .Include(el => el.Tags) .Where(el => el.Published == true)) { var filename = article.MakeFilename(false); Console.WriteLine($"Writing: {filename}"); var path = MakePath(pc, filename); //todo add in better title generation code here. var combined = Renderer.GenerateArticleString(Settings, article, false); System.IO.File.WriteAllText(path, combined); articleIds.Add(article.Id); Logger.LogMessage($"Published: {article.Title}"); count++; } } catch (Exception ex) { Console.WriteLine(ex); } //todo only publish tags where the article is published. var tags = db.Tags.Where(t => articleIds.Contains(t.ArticleId)).ToHashSet(); var tagDir = pc.TempBase + "/tags"; if (!System.IO.Directory.Exists(tagDir)) { System.IO.Directory.CreateDirectory(tagDir); } foreach (var tag in tags) { PublishTag(pc, tag, false); } RecreateHtaccess(pc); } return(true); }
public IActionResult ViewArticle(string title) { using (var db = new FusekiContext()) { var article = db.Articles .Include(ee => ee.Tags) .FirstOrDefault(el => el.Title.StartsWith(title)); //startswith to fix question mark thing. if (article == null) { return(RedirectToAction("List"));; } var related = ArticleData.GetRelatedArticles(article); var liveUrl = string.Format(Settings.LiveUrlTemplate, article.MakeFilename(true)); var editUrl = string.Format(Settings.EditUrlTemplate, article.Title, false); var articleString = Renderer.GenerateArticleString(Settings, article, true); var model = new ArticleModel(article, liveUrl, editUrl, articleString, related); ViewData["Title"] = $"{article.Title}"; return(View("Article", model)); } }