示例#1
0
        public async Task <ActionResult> CategoryHeader(int?blogEntry)
        {
            int category;

            Manager.TryGetUrlArg <int>("BlogCategory", out category);
            int entry = (int)(blogEntry ?? 0);

            if (entry != 0)
            {
                using (BlogEntryDataProvider entryDP = new BlogEntryDataProvider()) {
                    BlogEntry data = await entryDP.GetItemAsync(entry);

                    if (data != null)
                    {
                        category = data.CategoryIdentity;
                    }
                }
            }
            if (category != 0)
            {
                using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                    BlogCategory data = await dataProvider.GetItemAsync(category);

                    if (data != null)
                    {
                        DisplayModel model = new DisplayModel();
                        model.SetData(data);
                        Module.Title = data.Category.ToString();
                        return(View(model));
                    }
                }
            }
            return(new EmptyResult());
        }
示例#2
0
        private GridDefinition GetGridModel(int blogCategory)
        {
            return(new GridDefinition {
                ModuleGuid = Module.ModuleGuid,
                SettingsModuleGuid = Module.PermanentGuid,
                RecordType = typeof(BrowseItem),
                AjaxUrl = GetActionUrl(nameof(EntriesBrowse_GridData)),
                ExtraData = new BrowseItem.ExtraData {
                    BlogCategory = blogCategory
                },
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    // filter by category
                    if (blogCategory != 0)
                    {
                        filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                            Field = nameof(BlogEntry.CategoryIdentity), Operator = "==", Value = blogCategory,
                        });
                    }
                    using (BlogEntryDataProvider entryDP = new BlogEntryDataProvider()) {
                        using (BlogCategoryDataProvider categoryDP = new BlogCategoryDataProvider()) {
                            DataProviderGetRecords <BlogEntry> browseItems = await entryDP.GetItemsAsync(skip, take, sort, filters);

                            return new DataSourceResult {
                                Data = (from s in browseItems.Data select new BrowseItem(Module, categoryDP, s)).ToList <object>(),
                                Total = browseItems.Total
                            };
                        }
                    }
                },
            });
        }
        public async Task <ActionResult> Remove(int blogCategory)
        {
            using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                await dataProvider.RemoveItemAsync(blogCategory);

                return(Reload(null, Reload: ReloadEnum.ModuleParts));
            }
        }
示例#4
0
        public async Task <string> RenderAsync(int model)
        {
            using (BlogCategoryDataProvider categoryDP = new BlogCategoryDataProvider()) {
                DataProviderGetRecords <BlogCategory> data = await categoryDP.GetItemsAsync(0, 0, null, null);

                List <SelectionItem <int> > list = (from c in data.Data orderby c.Category.ToString() select new SelectionItem <int> {
                    Text = c.Category.ToString(),
                    Tooltip = c.Description,
                    Value = c.Identity
                }).ToList();

                if (list.Count == 0)
                {
                    list.Insert(0, new SelectionItem <int> {
                        Text    = this.__ResStr("none", "(None Available)"),
                        Tooltip = this.__ResStr("noneTT", "There are no blog categories"),
                        Value   = 0,
                    });
                }
                else
                {
                    bool showSelect = false;
                    bool showAll    = PropData.GetAdditionalAttributeValue("ShowAll", false);
                    if (model == 0 && !showAll)
                    {
                        showSelect = PropData.GetAdditionalAttributeValue("ShowSelectIfNone", false);
                    }
                    if (!showAll && !showSelect)
                    {
                        showSelect = PropData.GetAdditionalAttributeValue("ShowSelect", false);
                    }
                    if (showAll)
                    {
                        list.Insert(0, new SelectionItem <int> {
                            Text    = this.__ResStr("all", "(All)"),
                            Tooltip = this.__ResStr("allTT", "Displays blogs from all available blog categories"),
                            Value   = 0,
                        });
                    }
                    else if (showSelect)
                    {
                        list.Insert(0, new SelectionItem <int> {
                            Text    = this.__ResStr("select", "(select)"),
                            Tooltip = this.__ResStr("selectTT", "Please select one of the available blog categories"),
                            Value   = 0,
                        });
                    }
                }
                return(await DropDownListIntComponent.RenderDropDownListAsync(this, model, list, "yt_yetawf_blog_category"));
            }
        }
示例#5
0
        public async Task <ActionResult> CategoryDisplay(int blogCategory)
        {
            using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                BlogCategory data = await dataProvider.GetItemAsync(blogCategory);

                if (data == null)
                {
                    throw new Error(this.__ResStr("notFound", "Blog category with id {0} not found."), blogCategory);
                }
                DisplayModel model = new DisplayModel();
                model.SetData(data);
                Module.Title = this.__ResStr("modTitle", "Blog Category \"{0}\"", data.Category.ToString());
                return(View(model));
            }
        }
示例#6
0
        public async Task <ActionResult> CategoryAdd_Partial(AddModel model)
        {
            if (!ModelState.IsValid)
            {
                return(PartialView(model));
            }

            using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                if (!await dataProvider.AddItemAsync(model.GetData()))
                {
                    ModelState.AddModelError(nameof(model.Category), this.__ResStr("alreadyExists", "A blog category named \"{0}\" already exists.", model.Category));
                    return(PartialView(model));
                }
                return(FormProcessed(model, this.__ResStr("okSaved", "New blog category saved"), OnPopupClose: OnPopupCloseEnum.ReloadModule));
            }
        }
示例#7
0
            internal async Task UpdateDataAsync()
            {
                BlogConfigData config = await BlogConfigDataProvider.GetConfigAsync();

                GravatarsEnabled = config.ShowGravatar;

                using (BlogCategoryDataProvider categoryDP = new BlogCategoryDataProvider()) {
                    BlogCategory cat = await categoryDP.GetItemAsync(CategoryIdentity);

                    if (cat == null)
                    {
                        throw new InternalError("Category with id {0} not found", CategoryIdentity);
                    }
                    ShowCaptcha  = cat.UseCaptcha;
                    ShowGravatar = GravatarsEnabled;
                }
                OpenForComments = await TestOpenForCommentsAsync(EntryIdentity);
            }
        private GridDefinition GetGridModel()
        {
            return(new GridDefinition {
                ModuleGuid = Module.ModuleGuid,
                SettingsModuleGuid = Module.PermanentGuid,
                RecordType = typeof(BrowseItem),
                AjaxUrl = GetActionUrl(nameof(CategoriesBrowse_GridData)),
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                        DataProviderGetRecords <BlogCategory> browseItems = await dataProvider.GetItemsAsync(skip, take, sort, filters);

                        return new DataSourceResult {
                            Data = (from s in browseItems.Data select new BrowseItem(Module, s)).ToList <object>(),
                            Total = browseItems.Total
                        };
                    }
                },
            });
        }
示例#9
0
        public async Task <ModuleAction> GetAction_RssFeedAsync(int blogCategory = 0)
        {
            BlogConfigData config = await BlogConfigDataProvider.GetConfigAsync();

            if (!config.Feed)
            {
                return(null);
            }
            //if (blogCategory == 0)
            //    manager.TryGetUrlArg<int>("BlogCategory", out blogCategory);
            object qargs = null, qargsHR = null;

            if (blogCategory != 0)
            {
                qargs = new { BlogCategory = blogCategory, };
                using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                    BlogCategory data = await dataProvider.GetItemAsync(blogCategory);

                    if (data != null)
                    {
                        qargsHR = new { Title = data.Category.ToString().Truncate(80) }
                    }
                    ;
                }
            }
            return(new ModuleAction(this)
            {
                Url = Utility.UrlFor(typeof(RssController), nameof(RssController.RssFeed)),
                QueryArgs = qargs,
                QueryArgsHR = qargsHR,
                Image = await CustomIconAsync("RssFeed.png"),
                Style = ModuleAction.ActionStyleEnum.NewWindow,
                LinkText = this.__ResStr("rssLink", "RSS Feed"),
                MenuText = this.__ResStr("rssMenu", "RSS Feed"),
                Tooltip = this.__ResStr("rssTT", "Display the blog's RSS Feed"),
                Legend = this.__ResStr("rssLegend", "Displays the blog's RSS Feed"),
                Category = ModuleAction.ActionCategoryEnum.Read,
                Mode = ModuleAction.ActionModeEnum.Any,
                Location = ModuleAction.ActionLocationEnum.ModuleLinks,
            });
        }
    }
示例#10
0
        public async Task <ActionResult> CategoryEdit_Partial(EditModel model)
        {
            int originalCategory = model.Identity;

            using (BlogCategoryDataProvider dataProvider = new BlogCategoryDataProvider()) {
                // get the original item
                BlogCategory data = await dataProvider.GetItemAsync(originalCategory);

                if (data == null)
                {
                    throw new Error(this.__ResStr("alreadyDeletedId", "The blog category with id {0} has been removed and can no longer be updated.", originalCategory));
                }

                if (!ModelState.IsValid)
                {
                    return(PartialView(model));
                }

                // save updated item
                data = model.GetData(data); // merge new data into original
                model.SetData(data);        // and all the data back into model for final display

                switch (await dataProvider.UpdateItemAsync(data))
                {
                default:
                case UpdateStatusEnum.RecordDeleted:
                    throw new Error(this.__ResStr("alreadyDeleted", "The blog category named \"{0}\" has been removed and can no longer be updated.", model.Category.ToString()));

                case UpdateStatusEnum.NewKeyExists:
                    ModelState.AddModelError(nameof(model.Category), this.__ResStr("alreadyExists", "A blog category named \"{0}\" already exists.", model.Category.ToString()));
                    return(PartialView(model));

                case UpdateStatusEnum.OK:
                    break;
                }
                return(FormProcessed(model, this.__ResStr("okSaved", "Blog category saved"), OnPopupClose: OnPopupCloseEnum.ReloadModule));
            }
        }
示例#11
0
        // Windows RSS Publisher's Guide http://blogs.msdn.com/b/rssteam/archive/2005/08/02/publishersguide.aspx

        public async Task <ActionResult> RssFeed(int?blogCategory)
        {
            BlogConfigData config = await BlogConfigDataProvider.GetConfigAsync();

            if (!config.Feed)
            {
                throw new Error(this.__ResStr("noFeed", "The feed is no longer available"));
            }

            int          categoryIdentity = blogCategory ?? 0;
            BlogCategory category         = null;

            if (categoryIdentity != 0)
            {
                using (BlogCategoryDataProvider categoryDP = new BlogCategoryDataProvider()) {
                    category = await categoryDP.GetItemAsync(categoryIdentity);

                    if (!category.Syndicated)
                    {
                        throw new Error(this.__ResStr("noFeed", "The feed is no longer available"));
                    }
                }
            }

            using (BlogEntryDataProvider dataProvider = new BlogEntryDataProvider()) {
                List <DataProviderSortInfo> sort = new List <DataProviderSortInfo> {
                    new DataProviderSortInfo {
                        Field = nameof(BlogEntry.DatePublished), Order = DataProviderSortInfo.SortDirection.Descending
                    },
                };
                List <DataProviderFilterInfo> filters = new List <DataProviderFilterInfo> {
                    new DataProviderFilterInfo {
                        Field = nameof(BlogEntry.Published), Operator = "==", Value = true
                    },
                };
                if (categoryIdentity != 0)
                {
                    filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                        Field = nameof(BlogEntry.CategoryIdentity), Operator = "==", Value = categoryIdentity
                    });
                }
                DataProviderGetRecords <BlogEntry> data = await dataProvider.GetItemsAsync(0, 0, sort, filters);

                string url = string.IsNullOrWhiteSpace(config.FeedMainUrl) ? Manager.CurrentSite.HomePageUrl : config.FeedMainUrl;

                List <SyndicationItem> items   = new List <SyndicationItem>();
                EntryDisplayModule     dispMod = new EntryDisplayModule();

                DateTime lastUpdated = DateTime.MinValue;
                foreach (BlogEntry blogEntry in data.Data)
                {
                    if (categoryIdentity == 0)
                    {
                        using (BlogCategoryDataProvider categoryDP = new BlogCategoryDataProvider()) {
                            category = await categoryDP.GetItemAsync(blogEntry.CategoryIdentity);

                            if (!category.Syndicated)
                            {
                                continue;
                            }
                        }
                    }
                    ModuleAction viewAction = await dispMod.GetAction_DisplayAsync(blogEntry.Identity);

                    if (viewAction == null)
                    {
                        continue;
                    }
                    SyndicationItem sItem   = new SyndicationItem(blogEntry.Title.ToString(), blogEntry.Text, new Uri(viewAction.GetCompleteUrl()));
                    DateTime        updDate = blogEntry.DateUpdated ?? blogEntry.DateCreated;
                    sItem.LastUpdatedTime = updDate;
                    if (!string.IsNullOrEmpty(category.SyndicationEmail))
                    {
                        sItem.Authors.Add(new SyndicationPerson(category.SyndicationEmail));
                    }
                    sItem.Categories.Add(new SyndicationCategory(category.Category.ToString()));
                    if (!string.IsNullOrEmpty(category.SyndicationCopyright.ToString()))
                    {
                        sItem.Copyright = new TextSyndicationContent(category.SyndicationCopyright.ToString());
                    }
                    sItem.PublishDate = blogEntry.DatePublished;
                    if (!string.IsNullOrEmpty(blogEntry.DisplayableSummary))
                    {
                        sItem.Summary = new TextSyndicationContent(blogEntry.DisplayableSummary);
                    }
                    lastUpdated = updDate > lastUpdated ? updDate : lastUpdated;

                    items.Add(sItem);
                }

                SyndicationFeed feed;
                if (categoryIdentity != 0)
                {
                    feed = new SyndicationFeed(category.Category.ToString(), category.Description.ToString(), new Uri(Manager.CurrentSite.MakeUrl(url)), items);
                }
                else
                {
                    feed = new SyndicationFeed(config.FeedTitle, config.FeedSummary, new Uri(Manager.CurrentSite.MakeUrl(url)), items);
                }
                if (config.FeedImage != null)
                {
                    feed.ImageUrl = new Uri(Manager.CurrentSite.MakeUrl(ImageHTML.FormatUrl(BlogConfigData.ImageType, null, config.FeedImage))); //$$$ caching issue
                }
                if (lastUpdated != DateTime.MinValue)
                {
                    feed.LastUpdatedTime = lastUpdated;
                }
                return(new RssResult(feed));
            }
        }
示例#12
0
 public BrowseItem(EntriesBrowseModule module, BlogCategoryDataProvider categoryDP, BlogEntry data)
 {
     Module = module;
     ObjectSupport.CopyData(data, this);
 }