Exemplo n.º 1
0
 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");
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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());
            }
        }
Exemplo n.º 5
0
 public ActionResult TestFeed(RssFeedCRUDModel model)
 {
     RssItemCRUDModel[] feedItems = null;
     try
     {
         feedItems = UpdateRssFeedsTask.GetFeedItems(model);
     }
     catch (Exception ex)
     {
         ModelState.AddModelError("", ex.ToString());
     }
     return ViewWithAjax(feedItems);
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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();
        }