public ActionResult Delete(RssFeedCRUDModel model) { var item = RepositoryFactory.Action<IRssFeedAction>().FindByPk(model.Id); using (var tran = RepositoryFactory.StartTransaction()) { RepositoryFactory.Action<IRssFeedAction>().Delete(model); tran.Commit(); } return RedirectToActionWithAjax("Index"); }
public ActionResult Create(RssFeedCRUDModel model) { if (ModelState.IsValid) { var crudOperations = RepositoryFactory.Action<IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { crudOperations.Create(model); tran.Commit(); } return RedirectToActionWithAjax("Index"); } return ViewWithAjax(model); }
public void Test_update() { using (RepositoryFactory.StartUnitOfWork()) { var item = new RssFeedCRUDModel() { Name = "new_feed1", Url = "new_feed_url", AuthorRegex = "author_regex_new", ContentParseRegex = "content_parse_regex", GetDirectContent = true, DisplayFullContent = false }; var crudActions = RepositoryFactory.Action<IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Create(item); tran.Commit(); } WaitForIndexing(); // check created item var storedItem = crudActions.FindByPk(item.Id); Assert.AreEqual(item.Id, storedItem.Id); Assert.AreEqual(item.Name, storedItem.Name); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex); Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex); Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent); Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent); // change item item.Name = item.Name + "change"; item.Url = item.Url + "change"; item.AuthorRegex = item.AuthorRegex + "change"; item.ContentParseRegex = item.ContentParseRegex + "change"; item.GetDirectContent = !item.GetDirectContent; item.DisplayFullContent = !item.DisplayFullContent; using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Update(item); tran.Commit(); } // check changed item storedItem = crudActions.FindByPk(item.Id); Assert.AreEqual(item.Id, storedItem.Id); Assert.AreEqual(item.Name, storedItem.Name); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex); Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex); Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent); Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent); } }
public void Test_delete() { using (RepositoryFactory.StartUnitOfWork()) { var initialCount = SessionFactory<RssFeed>.Count(); var item = new RssFeedCRUDModel() { Name = "new_feed1", Url = "new_feed_url", AuthorRegex = "author_regex_new", ContentParseRegex = "content_parse_regex", GetDirectContent = true, DisplayFullContent = false }; var crudActions = RepositoryFactory.Action<IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Create(item); tran.Commit(); } WaitForIndexing(); Assert.AreEqual(initialCount + 1, SessionFactory<RssFeed>.Count()); using (var tran = RepositoryFactory.StartTransaction()) { crudActions.Delete(item); tran.Commit(); } WaitForIndexing(); Assert.AreEqual(initialCount, SessionFactory<RssFeed>.Count()); } }
public ActionResult TestFeed(RssFeedCRUDModel model) { RssItemCRUDModel[] feedItems = null; try { feedItems = UpdateRssFeedsTask.GetFeedItems(model); } catch (Exception ex) { ModelState.AddModelError("", ex.ToString()); } return ViewWithAjax(feedItems); }
public ActionResult Edit(RssFeedCRUDModel model) { if (ModelState.IsValid) { var crudOperations = RepositoryFactory.Action<IRssFeedAction>(); // get original item to test change permissions var originalItem = crudOperations.FindByPk(model.Id); if (originalItem != null) { using (var tran = RepositoryFactory.StartTransaction(IoC.Resolve<SearchUpdateContext>())) { crudOperations.Update(model); tran.Commit(); } return RedirectToActionWithAjax("Index"); } ModelState.AddModelError(string.Empty, ModelResources.ItemNotExistsError); } return ViewWithAjax(model); }
/// <summary> /// Gets the feed items. /// </summary> /// <param name="feed">The feed.</param> /// <returns>Feed items to save.</returns> public static RssItemCRUDModel[] GetFeedItems(RssFeedCRUDModel feed) { List<RssItemCRUDModel> result = new List<RssItemCRUDModel>(); var connectionAction = RepositoryFactory.Action<IRssFeedConnection>(); // get items from remote url var items = connectionAction.GetFeedUrlItems(feed.Url); foreach (var rssItemRawData in items) { // if no author regex or author regex match if (string.IsNullOrEmpty(feed.AuthorRegex) || Regex.IsMatch(rssItemRawData.Author, feed.AuthorRegex, RegexOptions.Singleline)) { var item = new RssItemCRUDModel { FeedItemId = rssItemRawData.Id, Url = rssItemRawData.Url, Published = rssItemRawData.Published, Author = rssItemRawData.Author, Title = AntiXss.GetSafeHtmlFragment(rssItemRawData.Title), FeedId = feed.Id }; string content = rssItemRawData.Text; // if display full content, then get content url if (feed.GetDirectContent) { try { content = connectionAction.GetArticle(item.Url); } catch (Exception ex) { LogManager.GetCurrentClassLogger().ErrorException( string.Format("Unable to get article content for feed '{0}' for item url '{1}'. \nException: {2}", feed.Name, item.Url), ex); } } // apply content regex if (!string.IsNullOrEmpty(feed.ContentParseRegex)) { var match = Regex.Match(content, feed.ContentParseRegex, RegexOptions.Singleline); if (match.Success && match.Groups.Count > 0) { content = match.Groups[1].Value; } item.Text = AntiXss.GetSafeHtmlFragment(content); } item.Text = AntiXss.GetSafeHtmlFragment(content); item.Description = content.RemoveTags().Shorten(ModelConstants.DescriptionMaxLenghtConst); result.Add(item); } } return result.ToArray(); }