protected void OutputRSS()
        {
            IQueryable<NewsItem> res = Enumerable.Empty<NewsItem>().AsQueryable();
            _objectScope = BraftonContext.GetNewObjectScope();
            if (!string.IsNullOrEmpty(this._cat))
            {
                var result = from n in _objectScope.Extent<Category>()
                             where n.Url == this._cat
                             select n;
                if (result.Count() > 0)
                {

                    Category cat = result.First();
                    var items = cat.NewsItems.AsQueryable();
                    if (!string.IsNullOrEmpty(this._sortExpression))
                        items.OrderBy(this._sortExpression);
                    if (items.Count() > 0)
                    {
                        res = items;
                    }
                }
            }
            else
            {
                res = from n in _objectScope.Extent<NewsItem>()
                            select n;
                if (!string.IsNullOrEmpty(this._filter))
                    res.Where(this._filter);
                if (!string.IsNullOrEmpty(this._sortExpression))
                    res.OrderBy(this._sortExpression);
            }

            if (res.Count() > 0)
            {
                HttpResponse response = HttpContext.Current.Response;
                HttpRequest request = HttpContext.Current.Request;
                string url = GetPageUrl();
                response.Clear();
                response.ContentType = "text/xml";
                XmlTextWriter feedWriter
                  = new XmlTextWriter(response.OutputStream, Encoding.UTF8);

                feedWriter.WriteStartDocument();

                // These are RSS Tags
                feedWriter.WriteStartElement("rss");
                feedWriter.WriteAttributeString("version", "2.0");

                feedWriter.WriteStartElement("channel");
                feedWriter.WriteElementString("title", "Pinnacle Business Systems, Inc.");
                string feedUrl = request.Url.ToString();
                feedUrl = feedUrl.Replace("?" + request.QueryString.ToString(), "");
                feedWriter.WriteElementString("link", feedUrl);
                feedWriter.WriteElementString("description", "Pinnacle Business Systems, Inc.");
                feedWriter.WriteElementString("copyright", "Copyright 2010 pbsnow.com. All rights reserved.");

                url = request.Url.Scheme + "://" + request.Url.Host + this.Page.ResolveUrl(url);

                // Write all Posts in the rss feed
                foreach (NewsItem item in res)
                {
                    feedWriter.WriteStartElement("item");
                    feedWriter.WriteElementString("title", item.Headline);
                    feedWriter.WriteElementString("description", item.Extract);
                    feedWriter.WriteElementString("link", url + item.Url + UrlHelper.PageExtension);
                    feedWriter.WriteElementString("pubDate", item.PublishDate.ToString());
                    feedWriter.WriteEndElement();
                }

                // Close all open tags tags
                feedWriter.WriteEndElement();
                feedWriter.WriteEndElement();
                feedWriter.WriteEndDocument();
                feedWriter.Flush();
                feedWriter.Close();

                response.End();
            }
        }
Beispiel #2
0
 // GetDinnerByTitle method retrieves a specific element of the collection that matches the passed name argument.
 public Dinner GetDinnerByTitle(IObjectScope scope, string name)
 {
     return((from cat in scope.Extent <Dinner>()
             where cat.Title == name
             select cat).SingleOrDefault());
 }
        protected override void InitializeControls(Control controlContainer)
        {
            base.InitializeControls(controlContainer);
            switch (this.DisplayMode)
            {
                case DisplayModes.DETAIL:
                    this.Controls.Clear();
                    this.Visible = false;
                    return;
                case DisplayModes.LIST:
                    this.NewsFeed.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                    _objectScope = BraftonContext.GetNewObjectScope();
                    if (!string.IsNullOrEmpty(this._cat))
                    {
                        var result = from n in _objectScope.Extent<Category>()
                                     where n.Url == this._cat
                                     select n;
                        if (result.Count() > 0)
                        {
                            Category cat = result.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                                items = items.OrderByDescending(i => i.PublishDate);
                            this.NewsFeed.DataSource = items;
                            this.NewsFeed.DataBind();
                        }
                    }
                    else if (!string.IsNullOrEmpty(this._year)) //it's a date archive
                    {
                        var result = from n in _objectScope.Extent<NewsItem>()
                                     where n.PublishDate.Year.ToString() == this._year && n.PublishDate.Month.ToString() == this._month
                                     select n;
                        if (result.Count() > 0)
                        {
                            result = result.OrderByDescending(i => i.PublishDate);
                            this.NewsFeed.DataSource = result;
                            this.NewsFeed.DataBind();
                        }
                    }
                    else
                    {
                        var result = from n in _objectScope.Extent<NewsItem>()
                                     select n;
                        if (!string.IsNullOrEmpty(this._filter))
                            result = result.Where(this._filter);
                        result = result.OrderByDescending(i => i.PublishDate);
                        if (this._itemLimit > 0)
                            result = result.Take(3);

                        if (result.Count() > 0)
                        {
                            this.NewsFeed.DataSource = result;
                            this.NewsFeed.DataBind();
                        }

                        //Categories

                        //Pinnacle News Category
                        this.CatPinn.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                        _objectScope = BraftonContext.GetNewObjectScope();
                        var result0 = from n in _objectScope.Extent<Category>()
                                      where n.Url == "pinnacle-news"
                                      select n;
                        if (result0.Count() > 0)
                        {
                            Category cat = result0.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                            items = items.OrderByDescending(i => i.PublishDate).Take(2);
                            this.CatPinn.Visible = true;
                            this.CatPinn.DataSource = items;
                            this.CatPinn.DataBind();
                        }

                        //IBM News Category
                        this.CatOne.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                        _objectScope = BraftonContext.GetNewObjectScope();
                        var result1 = from n in _objectScope.Extent<Category>()
                                      where n.Url == "ibm-news"
                                      select n;
                        if (result1.Count() > 0)
                        {
                            Category cat = result1.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                            items = items.OrderByDescending(i => i.PublishDate).Take(2);
                            this.CatOne.Visible = true;
                            this.CatOne.DataSource = items;
                            this.CatOne.DataBind();
                        }

                        //EMC News Category
                        this.CatTwo.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                        _objectScope = BraftonContext.GetNewObjectScope();
                        var result2 = from n in _objectScope.Extent<Category>()
                                      where n.Url == "emc-news"
                                      select n;
                        if (result2.Count() > 0)
                        {
                            Category cat = result2.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                            items = items.OrderByDescending(i => i.PublishDate).Take(2);
                            this.CatTwo.Visible = true;
                            this.CatTwo.DataSource = items;
                            this.CatTwo.DataBind();
                        }

                        //VM Ware News Category
                        this.CatThree.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                        _objectScope = BraftonContext.GetNewObjectScope();
                        var result3 = from n in _objectScope.Extent<Category>()
                                      where n.Url == "vmware-news"
                                      select n;
                        if (result3.Count() > 0)
                        {
                            Category cat = result3.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                            items = items.OrderByDescending(i => i.PublishDate).Take(2);
                            this.CatThree.Visible = true;
                            this.CatThree.DataSource = items;
                            this.CatThree.DataBind();
                        }

                        //Cisco News Category
                        this.CatFour.ItemDataBound += new RepeaterItemEventHandler(this.NewsFeed_ItemDataBound);
                        _objectScope = BraftonContext.GetNewObjectScope();
                        var result4 = from n in _objectScope.Extent<Category>()
                                      where n.Url == "cisco-news"
                                      select n;
                        if (result4.Count() > 0)
                        {
                            Category cat = result4.First();
                            var items = cat.NewsItems.AsQueryable();
                            //if (!string.IsNullOrEmpty(this._sortExpression))
                            items = items.OrderByDescending(i => i.PublishDate).Take(2);
                            this.CatFour.Visible = true;
                            this.CatFour.DataSource = items;
                            this.CatFour.DataBind();
                        }
                    }
                    break;
                case DisplayModes.RSS:
                    OutputRSS();
                    break;
            }
        }
        protected override void InitializeControls(Control controlContainer)
        {
            base.InitializeControls(controlContainer);
            this.DateFeed.ItemDataBound += new RepeaterItemEventHandler(this.DateFeed_ItemDataBound);

            //establish connection to database containing Brafton info...consider using GetObjectScope() (no "new")
            _objectScope = BraftonContext.GetNewObjectScope();

            //This following chunk, declaring "result", simply pulls all NewsItem objects (read: Articles) from "BraftonContext" (db holding Brafton articles?)
            var result = from n in _objectScope.Extent<NewsItem>()
                         //where n.NewsItems.Count() > 0
                         select n;

            //logic for determining number of months (with respective years), as well as number of posts per month
            //Concept: Iterate through articles, pushing months to a List as they come
            foreach (var item in result)
            {
                bool added = false;

                //if _dates is empty, add first month without checking
                if (_dates.Count < 1)
                {
                    var aDate = new ArtDate(item.PublishDate.Month, item.PublishDate.Year);
                    aDate.Iterate(item);
                    _dates.Add(aDate);
                    added = true;
                    continue;
                }

                //iterate the _dates list, comparing the month/year in each ArtDate in the list to item
                for (int i = 0; i < _dates.Count; i++)
                {
                    if (_dates[i].Month == item.PublishDate.Month && _dates[i].Year == item.PublishDate.Year)
                    {
                        _dates[i].Iterate(item);
                        added = true;

                        break;
                    }
                }
                if (added == false) //no ArtDate objects with article's Month/Year, add a new one!
                {
                    var aDate = new ArtDate(item.PublishDate.Month, item.PublishDate.Year);
                    aDate.Iterate(item);
                    _dates.Add(aDate);
                }
            }

            //check that at least one date has been added to _dates list, bind to DateFeed repeater if so
            if (_dates.Count > 0)
            {
                this.DateFeed.DataSource = _dates;
                this.DateFeed.DataBind();
            }
        }