public override IEnumerable <SearchResultViewModel> Search(string searchText)
        {
            List <SearchResultViewModel> results = new List <SearchResultViewModel>();

            foreach (Page page in Pages.Where(p => p.Title.ToLowerInvariant().Contains(searchText.ToLowerInvariant())))
            {
                results.Add(new SearchResultViewModel()
                {
                    Id             = page.Id,
                    Title          = page.Title,
                    ContentSummary = PageContents.Single(p => p.Page == page).Text
                });
            }

            foreach (PageContent pageContent in PageContents.Where(p => p.Text.ToLowerInvariant().Contains(searchText.ToLowerInvariant())))
            {
                results.Add(new SearchResultViewModel()
                {
                    Id             = pageContent.Page.Id,
                    ContentSummary = pageContent.Text,
                    Title          = pageContent.Page.Title
                });
            }

            return(results);
        }
示例#2
0
文件: Program.cs 项目: jeswin/AgileFx
        private static void CreatePages()
        {
            context.CreateQuery <Category>().LoadRelated(c => c.Website.Templates, c => c.Tenant.Users).ToList()
            .ForEach(category =>
            {
                var author    = category.Tenant.Users.First();
                var templates = category.Website.Templates.ToArray();

                var pageContent = new PageContents();
                pageContent.Add("MainContent", "<strong>Sample MainContent</strong>");
                //if (category.Website.Type != WEBSITE_TYPE.BLOG)
                //{
                //    context.AddObject(Page.Create("index", author, PAGE_CONTENT_TYPE.HTML, pageContent.ToList().ToXml(),
                //        (category.Website.Type == WEBSITE_TYPE.BLOG) ? templates[3] : templates[0], category, new[] { "default", "technology" }, true, CreateDefaultPermissionSet(category.Tenant)));
                //}

                pageContent.Add("Title", "Sample Page Title");
                //context.AddObject(Page.Create("page1", author, PAGE_CONTENT_TYPE.HTML, pageContent.ToList().ToXml(),
                //    (category.Website.Type == WEBSITE_TYPE.BLOG) ? templates[3] : templates[1], category, new[] { "default", "technology" }, true, CreateDefaultPermissionSet(category.Tenant)));

                pageContent.Add("Category", "Good");
                context.AddObject(Page.Create("page2", author, PAGE_CONTENT_TYPE.HTML, pageContent.ToList().ToXml(),
                                              (category.Website.Type == WEBSITE_TYPE.BLOG) ? templates[1] : templates[0], category, new[] { "default", "technology" }, true, CreateDefaultPermissionSet(category.Tenant)));
                context.SaveChanges();
            });
        }
        public async Task <IActionResult> Edit(int id, [Bind("Title,ShortDesc,LongDesc,FooterText,Facebook,Linkedin,Id,File,OurTeamImageFile")] PageContents pageContents)
        {
            if (id != pageContents.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var pc = _context.PageContents.AsNoTracking().First();
                    if (pageContents.SliderVideoURL != null)
                    {
                        string img = pc.SliderVideoURL;
                        if (img != null && System.IO.File.Exists(img))
                        {
                            System.IO.File.Delete(img);
                        }
                    }
                    else
                    {
                        pageContents.SliderVideoURL = pc.SliderVideoURL;
                    }

                    if (pageContents.OurTeamImage != null)
                    {
                        string img = pc.OurTeamImage;
                        if (img != null && System.IO.File.Exists(img))
                        {
                            System.IO.File.Delete(img);
                        }
                    }
                    else
                    {
                        pageContents.OurTeamImage = pc.OurTeamImage;
                    }

                    _context.Update(pageContents);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PageContentsExists(pageContents.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(pageContents));
        }
示例#4
0
        public async Task <IHttpActionResult> GetAsync(string uri)
        {
            PageContents pageContents = await _service.ParseAsync(uri);

            if (pageContents == null)
            {
                return(NotFound());
            }
            return(Ok(pageContents));
        }
        public async Task <IActionResult> Create([Bind("Title,ShortDesc,LongDesc,FooterText,Facebook,Linkedin,Id,File,OurTeamImageFile")] PageContents pageContents)
        {
            if (ModelState.IsValid)
            {
                _context.Add(pageContents);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(pageContents));
        }
示例#6
0
        private string GetPageContents(FormCollection coll)
        {
            var pageContents = new PageContents();
            var prefix       = "Contents-";

            foreach (var key in coll.AllKeys.Where(x => x.StartsWith(prefix)))
            {
                pageContents.Add(key.Substring(prefix.Length), coll[key]);
            }
            return(pageContents.ToXml());
        }
示例#7
0
        public PageContent AddNewPageContentVersion(Page page, string text, string editedBy, DateTime editedOn, int version)
        {
            PageContent content = new PageContent();

            content.Id            = Guid.NewGuid();
            page.ModifiedBy       = content.EditedBy = editedBy;
            page.ModifiedOn       = content.EditedOn = editedOn;
            content.Page          = page;
            content.Text          = text;
            content.VersionNumber = FindPageContentsByPageId(page.Id).Max(x => x.VersionNumber) + 1;
            PageContents.Add(content);

            return(content);
        }
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            PageContents = await _context.PageInfo.FirstOrDefaultAsync(m => m.Id == id);

            if (PageContents == null)
            {
                return(NotFound());
            }
            return(Page());
        }
        public async Task <IActionResult> OnGet(int?Id)
        {
            if (Id == null)
            {
                return(NotFound());
            }

            PageContents = await _Context.PageInfo.FindAsync(Id);

            ViewData["Content"] = PageContents.PageContent;
            if (PageContents == null)
            {
                return(NotFound());
            }
            return(Page());
        }
示例#10
0
        public void UpdatePageContent(PageContent content)
        {
            PageContent existingContent = PageContents.FirstOrDefault(x => x.Id == content.Id);

            if (existingContent == null)
            {
                // Do nothing
            }
            else
            {
                existingContent.EditedOn      = content.EditedOn;
                existingContent.EditedBy      = content.EditedBy;
                existingContent.Text          = content.Text;
                existingContent.VersionNumber = content.VersionNumber;
            }
        }
示例#11
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            PageContents = await _context.PageInfo.FindAsync(id);

            if (PageContents != null)
            {
                _context.PageInfo.Remove(PageContents);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
示例#12
0
        public PageContent AddNewPage(Page page, string text, string editedBy, DateTime editedOn)
        {
            page.Id = Pages.Count + 1;
            Pages.Add(page);

            PageContent content = new PageContent();

            content.Id            = Guid.NewGuid();
            content.EditedBy      = editedBy;
            content.EditedOn      = editedOn;
            content.Page          = page;
            content.Text          = text;
            content.VersionNumber = 1;
            PageContents.Add(content);

            return(content);
        }
        public PageContent GetLatestPageContent(int pageId)
        {
            PageContentEntity entity = PageContents.Where(x => x.Page.Id == pageId).OrderByDescending(x => x.EditedOn).FirstOrDefault();

            return(FromEntity.ToPageContent(entity));
        }
        public PageContent GetPageContentById(Guid id)
        {
            PageContentEntity entity = PageContents.FirstOrDefault(p => p.Id == id);

            return(FromEntity.ToPageContent(entity));
        }
        public IEnumerable <PageContent> AllPageContents()
        {
            List <PageContentEntity> entities = PageContents.ToList();

            return(FromEntity.ToPageContentList(entities));
        }
        public IEnumerable <PageContent> FindPageContentsByPageId(int pageId)
        {
            List <PageContentEntity> entities = PageContents.Where(p => p.Page.Id == pageId).ToList();

            return(FromEntity.ToPageContentList(entities));
        }
示例#17
0
 public PageContent GetPageContentByVersionId(Guid versionId)
 {
     return(PageContents.FirstOrDefault(p => p.Id == versionId));
 }
示例#18
0
 public PageContent GetLatestPageContent(int pageId)
 {
     return(PageContents.Where(p => p.Page.Id == pageId).OrderByDescending(x => x.EditedOn).FirstOrDefault());
 }
示例#19
0
 public IEnumerable <PageContent> AllPageContents()
 {
     return(PageContents.ToList());
 }
        public async Task <PageContents> ParseAsync(string url)
        {
            // instance or static variable
            HttpClient   client       = new HttpClient();
            PageContents pageContents = new PageContents();

            try
            {
                // get answer in non-blocking way
                using (var response = await client.GetAsync(url))
                {
                    using (var content = response.Content)
                    {
                        // get base address of url for images defined relatively
                        Uri uri = new Uri(url);
                        // location after domain
                        int    y           = uri.AbsoluteUri.LastIndexOf(uri.PathAndQuery);
                        string baseAddress = uri.AbsoluteUri.Substring(0, y);

                        // read answer in non-blocking way
                        var result = await content.ReadAsStringAsync();

                        var document = new HtmlDocument();
                        document.LoadHtml(result);
                        var nodes = document.DocumentNode.SelectNodes("//img[@src]");
                        foreach (HtmlNode img in nodes)
                        {
                            HtmlAttribute srcAttribute = img.Attributes["src"];
                            string        src          = srcAttribute.Value;

                            // convert relative path to url
                            if (!src.StartsWith("http"))
                            {
                                src = baseAddress + src;
                            }

                            //prevent duplicates
                            if (!pageContents.ImageUrls.Contains(src))
                            {
                                pageContents.ImageUrls.Add(src);
                            }
                        }

                        // Prepare for word count
                        // only concerned with <body> element
                        string textBody = document.DocumentNode.SelectSingleNode("//body").InnerHtml;

                        // remove HTML tags
                        textBody = Regex.Replace(textBody, "</?[a-z][a-z0-9]*[^<>]*>", " ");

                        // remove HTML comments
                        textBody = Regex.Replace(textBody, @"<!--(.|\s)*?-->", " ");

                        // remove script tags
                        textBody = Regex.Replace(textBody, "<script.*?</script>", " ", RegexOptions.Singleline | RegexOptions.IgnoreCase);

                        // remove styles
                        textBody = Regex.Replace(textBody, "<style.*?</style>", " ", RegexOptions.Singleline | RegexOptions.IgnoreCase);

                        // remove formatting
                        textBody = textBody.Replace("\n", "").Replace("\t", "").Replace("\r", "");

                        // grab all words
                        string[] words = textBody.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        // total number of words
                        pageContents.WordCount = words.Length;

                        // compile counts by word
                        Dictionary <string, int> wordCounts = new Dictionary <string, int>();
                        foreach (string word in words)
                        {
                            if (wordCounts.ContainsKey(word))
                            {
                                wordCounts[word] += 1;
                            }
                            else
                            {
                                wordCounts.Add(word, 1);
                            }
                        }

                        // sort words by count
                        var wordCountsList = wordCounts.ToList();
                        wordCountsList.Sort((pair1, pair2) => pair1.Value.CompareTo(pair2.Value));
                        wordCountsList.Reverse();

                        // grab top 10 words
                        int top10 = (wordCountsList.Count > 10) ? 10 : wordCountsList.Count;
                        for (int i = 0; i < top10; i++)
                        {
                            pageContents.TopTen.Add(wordCountsList[i]);
                        }
                    }
                }
            }
            catch
            {
                return(null);
            }

            return(pageContents);
        }
示例#21
0
 public PageContent GetPageContentByPageIdAndVersionNumber(int id, int versionNumber)
 {
     return(PageContents.FirstOrDefault(p => p.Page.Id == id && p.VersionNumber == versionNumber));
 }
示例#22
0
 public IEnumerable <PageContent> FindPageContentsByPageId(int pageId)
 {
     return(PageContents.Where(p => p.Page.Id == pageId));
 }
示例#23
0
 public PageContent GetPageContentById(Guid id)
 {
     return(PageContents.FirstOrDefault(p => p.Id == id));
 }
示例#24
0
 public void DeletePageContent(PageContent pageContent)
 {
     PageContents.Remove(pageContent);
 }
        private IHtmlContent RenderContentItem(PlaceHolder placeHolder)
        {
            IHtmlContent htmlContentItems = null;

            if (placeHolder != null)
            {
                //string currentResult = "";
                var htmlCurrentResult = new HtmlContentBuilder();

                List <ContentResult> currentResults = new List <ContentResult>();
                List <ContentResult> moduleResult   = null;
                var layoutType = placeHolder.Type;
                ViewContext.ViewData["isEditMode"] = false;


                if (ModuleActionResults.ContainsKey(placeHolder.Id.ToString()))
                {
                    //Modules
                    if (ModuleActionResults.TryGetValue(placeHolder.Id.ToString(), out moduleResult))
                    {
                        //sb.Append(moduleResult);
                        ModuleActionResults.Remove(placeHolder.Id.ToString());
                        currentResults.AddRange(moduleResult);
                    }
                }

                if (PageContents.Any(pc => pc.ContainerId == placeHolder.Id))
                {
                    //Page contents
                    var pageContents = PageContents
                                       .Where(pc => pc.ContainerId == placeHolder.Id)
                                       .OrderBy(pc => pc.SortOrder).ToList();
                    foreach (var pageContent in pageContents)
                    {
                        string  typeName           = pageContent.ContentType.Name;
                        var     contentTranslation = pageContent.PageContentTranslation.FirstOrDefault(t => t.CultureCode.ToLower() == CurrentCulture.ToString().ToLower());
                        dynamic content            = (contentTranslation != null) ? SDJsonConvert.DeserializeObject <dynamic>(contentTranslation.ContentData) : null;

                        if (content != null)
                        {
                            var dynamicContent = new DynamicContent
                            {
                                PageContent = pageContent,
                                Content     = content
                            };

                            string contentTypesViewPath = string.Format(Globals.ContentTypesViewPath, _scopeService.PageContext.SelectedTheme, typeName);

                            var htmlPageContent = _htmlHelper.Partial(contentTypesViewPath, dynamicContent);
                            //var contentResult = GetString(htmlContent);
                            currentResults.Add(new ContentResult
                            {
                                //Result = contentResult,
                                HtmlResult = htmlPageContent,
                                SortOrder  = pageContent.SortOrder
                            });
                        }
                    }
                }

                //var placeHolderResult = RenderContentItems(placeHolder.PlaceHolders);
                //currentResults.Add(new ContentResult
                //{
                //    HtmlResult = placeHolderResult,
                //    SortOrder = placeHolder.SortOrder
                //});

                if (placeHolder.PlaceHolders != null && placeHolder.PlaceHolders.Count > 0)
                {
                    foreach (var childPlaceHolder in placeHolder.PlaceHolders)
                    {
                        var placeHolderResult = RenderContentItem(childPlaceHolder);
                        currentResults.Add(new ContentResult
                        {
                            HtmlResult = placeHolderResult,
                            SortOrder  = childPlaceHolder.SortOrder
                        });
                    }
                }


                var sortedResult = currentResults.OrderBy(r => r.SortOrder).ToList();
                foreach (var contentResult in sortedResult)
                {
                    //currentResult += contentResult.Result;
                    htmlCurrentResult.AppendHtml(contentResult.HtmlResult);
                }

                var layoutContent = new LayoutContent
                {
                    PlaceHolder   = placeHolder,
                    ContentResult = htmlCurrentResult
                };

                htmlContentItems = _htmlHelper.Partial(string.Format(Globals.LayoutTypesPath, _scopeService.PageContext.SelectedTheme, layoutType), layoutContent);
                //var layoutResult = GetString(htmlContent);
                //sb.Append(layoutResult);
            }

            return(htmlContentItems);
        }
        public PageContent GetPageContentByPageIdAndVersionNumber(int id, int versionNumber)
        {
            PageContentEntity entity = PageContents.FirstOrDefault(p => p.Page.Id == id && p.VersionNumber == versionNumber);

            return(FromEntity.ToPageContent(entity));
        }
示例#27
0
 public IEnumerable <PageContent> FindPageContentsEditedBy(string username)
 {
     return(PageContents.Where(p => p.EditedBy == username));
 }
        public IEnumerable <PageContent> GetPageContentByEditedBy(string username)
        {
            List <PageContentEntity> entities = PageContents.Where(p => p.EditedBy == username).ToList();

            return(FromEntity.ToPageContentList(entities));
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (CurrentPage == null)
            {
                output.Content.SetHtmlContent("Page object (sde-page) cannot be null");
                return;
            }

            if (ModuleActionResults == null)
            {
                output.Content.SetHtmlContent("Module action results  (sde-module-results) cannot be null");
                return;
            }

            if (CurrentPage.Layout == null)
            {
                output.Content.SetHtmlContent("Layout is not configured, choose a layout");
                return;
            }

            try
            {
                ((HtmlHelper)_htmlHelper).Contextualize(ViewContext);

                PageLayout pageLayout = new PageLayout();
                pageLayout.Name = CurrentPage.Layout.Name;

                var properties = _propertyRepository.GetProperties();
                pageLayout.PlaceHolders = JsonConvert.DeserializeObject <List <PlaceHolder> >(CurrentPage.Layout.Config);

                GetPropertyValue(pageLayout.PlaceHolders, properties);

                PageContents = Mapper.Map <ICollection <PageContent> >(CurrentPage.PageContent);

                //Copy property options from master data
                if (PageContents != null && PageContents.Count > 0)
                {
                    foreach (var pageContent in PageContents)
                    {
                        if (pageContent.ContentType.Properties != null && pageContent.ContentType.Properties.Count > 0)
                        {
                            foreach (var prop in pageContent.ContentType.Properties)
                            {
                                var propValue = pageContent.Properties.FirstOrDefault(p => p.Id == prop.Id);
                                if (propValue != null)
                                {
                                    propValue.OptionListId = prop.OptionListId;
                                    propValue.OptionList   = prop.OptionList;
                                }
                            }
                        }
                    }
                }

                if (pageLayout.PlaceHolders != null && pageLayout.PlaceHolders.Count > 0)
                {
                    HtmlContentBuilder result = RenderContentItems(pageLayout.PlaceHolders);
                    if (ModuleActionResults.Count > 0)
                    {
                        //One or more modules are not added in containers
                        foreach (var moduleActionResult in ModuleActionResults)
                        {
                            if (moduleActionResult.Value != null && moduleActionResult.Value.Count > 0)
                            {
                                foreach (var contentResult in moduleActionResult.Value)
                                {
                                    //result += contentResult.HtmlResult;
                                    result.AppendHtml(contentResult.HtmlResult);
                                }
                            }
                        }
                    }
                    output.Content.SetHtmlContent(result);

                    //Release all resources
                    pageLayout.RegisterForDispose(ViewContext.HttpContext);
                    PageContents.GetEnumerator().RegisterForDispose(ViewContext.HttpContext);
                    ModuleActionResults.GetEnumerator().RegisterForDispose(ViewContext.HttpContext);
                    pageLayout.RegisterForDispose(ViewContext.HttpContext);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }