Ejemplo n.º 1
0
        public static ArticleDocument GetArticle(string url, ref bool isGetContentSuccess)
        {
            try
            {
                Html html = Html.CreatHtml(new Uri(url));
                if (html == null)
                {
                    return(null);
                }
                ArticleDocument doc = GetRequestArticle(html.SourceCode);
                isGetContentSuccess = doc.Content.Length > 0;
                if (doc != null)
                {
                    doc.Url          = url;
                    doc.Content      = doc.Content.Length > 0 ? doc.Content : html.Content;
                    doc.Timestamp    = html.Timestamp;
                    doc.Site         = GetSiteName(html.Title);
                    doc.ChildrenLink = html.ChildrenLink.Select(o => o.ToString()).ToList();
                }

                return(doc);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
            return(null);
        }
Ejemplo n.º 2
0
        protected void gvDocuments_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //Populate dto from session
            GetSessionValues();

            if (ArticleBF.ArticleDto.Documents[e.RowIndex].IsOld)
            {
                //Mark for deletion from database
                ArticleBF.ArticleDto.Documents[e.RowIndex].IsDeleted = true;
            }
            else
            {
                //Get the document
                ArticleDocument artDoc = ArticleBF.ArticleDto.Documents[e.RowIndex];

                try
                {
                    File.Delete(artDoc.FullFileName);
                }
                catch (IOException ioEx)
                {
                    DisplayPopup("An error occured deleting the document.");
                }

                //Remove from documents list
                ArticleBF.ArticleDto.Documents.RemoveAt(e.RowIndex);
            }

            //Update session
            SetSessionValues();

            //Reload the grid
            LoadDocGrid();
        }
Ejemplo n.º 3
0
        public void ConvertHtmlToDoc(int facultyId, int semesterId)
        {
            var listArticleApproved =
                _articleRepository.GetListArticlesApprovedAfterFinalDateByFaculty(facultyId, semesterId);

            foreach (var article in listArticleApproved)
            {
                var articleDocInDb = _dbContext.ArticleDocuments.Where(d => article.Id.Equals(d.ArticleId)).ToList();
                if (articleDocInDb.Any())
                {
                    continue;
                }
                var fileName = Guid.NewGuid() + ".docx";
                var docPath  = GetDocPath(fileName);
                ConvertDocument(article.Content, docPath);

                var articleDoc = new ArticleDocument()
                {
                    ArticleId    = article.Id,
                    DocumentFile = fileName
                };
                _dbContext.ArticleDocuments.Add(articleDoc);
                _dbContext.SaveChanges();
            }
        }
Ejemplo n.º 4
0
        public void InitCommand(Database db, Int32 ArticleId, ArticleDocument artDoc)
        {
            dbCommand = db.GetStoredProcCommand(sqlCommand);

            db.AddInParameter(dbCommand, "ArticleId", DbType.Int32, ArticleId);
            db.AddInParameter(dbCommand, "ArtDocTypeId", DbType.Int32, artDoc.ArtDocTypeId);
            db.AddInParameter(dbCommand, "DocId", DbType.Int32, artDoc.DocId);
        }
Ejemplo n.º 5
0
        public void InitCommand(Database db, Int32 articleId, ArticleDocument artDoc)
        {
            dbCommand = db.GetStoredProcCommand(sqlCommand);

            db.AddInParameter(dbCommand, "ArticleId", DbType.Int32, articleId);
            db.AddInParameter(dbCommand, "ArtDocTypeId", DbType.Int32, artDoc.ArtDocTypeId);
            db.AddInParameter(dbCommand, "Data", DbType.Binary, artDoc.Data);
            db.AddInParameter(dbCommand, "FileName", DbType.String, artDoc.FileName);
            db.AddInParameter(dbCommand, "FileSizeKB", DbType.Int32, artDoc.CalculateFileSizeInKB());
            db.AddInParameter(dbCommand, "Comments", DbType.String, artDoc.Comments);
            db.AddInParameter(dbCommand, "Active", DbType.Int32, ConvBoolToInt32(artDoc.IsActive));
            db.AddInParameter(dbCommand, "CreationUserId", DbType.Int32, artDoc.CreationUserId);
        }
Ejemplo n.º 6
0
        private ArticleDocument GetDocValues()
        {
            ArticleDocument artDoc = new ArticleDocument();

            artDoc.ArtDocTypeId = Convert.ToInt32(ddlArtDocTypes.SelectedValue);

            artDoc.Comments = tbComments.Text.Trim();

            artDoc.CreationUserId = UserInfo.UserDto.UserId;

            artDoc.IsActive = Convert.ToBoolean(Convert.ToInt32(ddlDocStatus.SelectedValue));

            return(artDoc);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 从给定的Html原始文本中获取正文信息
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        private static ArticleDocument GetRequestArticle(string html)
        {
            // 如果换行符的数量小于10,则认为html为压缩后的html
            // 由于处理算法是按照行进行处理,需要为html标签添加换行符,便于处理
            if (html.Count(c => c == '\n') < 10)
            {
                html = html.Replace(">", ">\n");
            }

            // 获取html,body标签内容
            string body       = "";
            string bodyFilter = @"(?is)<body.*?</body>";
            Match  m          = Regex.Match(html, bodyFilter);

            if (m.Success)
            {
                body = m.ToString();
            }
            // 过滤样式,脚本等不相干标签
            foreach (var filter in Html2Article.Filters)
            {
                body = Regex.Replace(body, filter[0], filter[1]);
            }
            // 标签规整化处理,将标签属性格式化处理到同一行
            // 处理形如以下的标签:
            //  <a
            //   href='http://www.baidu.com'
            //   class='test'
            // 处理后为
            //  <a href='http://www.baidu.com' class='test'>
            body = Regex.Replace(body, @"(<[^<>]+)\s*\n\s*", FormatTag);

            string content;
            string contentWithTags;
            string title1;

            GetContent(body, out content, out title1, out contentWithTags);
            string          title2  = GetTitle(html);
            string          title   = GetMostProTitle(title1, title2, content);
            ArticleDocument article = new ArticleDocument
            {
                Title           = title,
                PublishDate     = GetPublishDate(html),
                Content         = content,
                ContentWithTags = contentWithTags
            };

            return(article);
        }
Ejemplo n.º 8
0
        public async Task <ActionResult> Search(string s, int i = 0, int ps = 25)
        {
            SearchModel m = new SearchModel()
            {
                SettingsPath = Server.MapPath("~/articles/settings.json")
            };

            m.SearchText = s;

            var watch = System.Diagnostics.Stopwatch.StartNew();

            m.SearchResults = await ArticleDocument.GetArticleDocumentsAsync(s, i, ps);

            watch.Stop();

            m.SearchTime = watch.Elapsed.TotalSeconds;

            return(View("~/Views/Articles/Search.cshtml", m));
        }
Ejemplo n.º 9
0
        public bool UploadDocument(IFormFileCollection files, int articleId)
        {
            var result = true;

            if (files.Count == 0)
            {
                return(false);
            }

            foreach (var formFile in files)
            {
                var upFileName = formFile.FileName;
                var fileName   = Guid.NewGuid() + Path.GetExtension(upFileName);
                var saveDir    = Path.Combine(_webHostEnvironment.WebRootPath, "files");
                var savePath   = Path.Combine(saveDir, fileName);
                try
                {
                    if (!Directory.Exists(saveDir))
                    {
                        Directory.CreateDirectory(saveDir);
                    }

                    using var fs = File.Create(savePath);
                    formFile.CopyTo(fs);
                    fs.Flush();
                    var newDocument = new ArticleDocument
                    {
                        ArticleId    = articleId,
                        DocumentFile = fileName
                    };
                    _dbContext.ArticleDocuments.Add(newDocument);
                    _dbContext.SaveChanges();
                }
                catch (Exception)
                {
                    result = false;
                }
            }

            return(result);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Indexes an Article in Azure search
        /// </summary>
        /// <param name="article"></param>
        /// <returns></returns>
        static async Task IndexArticlesAsync(List <Article> articles)
        {
            List <ArticleDocument> list = new List <ArticleDocument>();

            // create the index if it does not exist
            Search.CreateIndex();

            // Convert to ArticleDocument
            foreach (Article a in articles)
            {
                if (null == a)
                {
                    continue;
                }

                ArticleDocument d = new ArticleDocument();
                d.FromArticle(a);
                list.Add(d);
            }

            await Search.MergeOrUploadAsync(list);
        }
Ejemplo n.º 11
0
        protected void btnAddDoc_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                //Get session values
                GetSessionValues();

                try
                {
                    if (tbUploadDocument.HasFile && tbUploadDocument.PostedFile != null)
                    {
                        string fileName = SaveDocToTemp(tbUploadDocument);

                        ArticleDocument artDoc = GetDocValues();

                        artDoc.FullFileName = fileName;

                        ArticleBF.ArticleDto.Documents.Add(artDoc);

                        SetSessionValues();

                        LoadDocGrid();

                        ResetDocumentFormValues();
                    }
                    else
                    {
                        DisplayPopup("The document cannot be empty.  Please choose a document with content.");
                    }
                }
                catch (IOException ioEx)
                {
                    throw;
                }
            }
        }
Ejemplo n.º 12
0
        protected void gvDocuments_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType.Equals(DataControlRowType.DataRow))
            {
                if (ArticleBF.ArticleDto.Documents[e.Row.RowIndex].IsDeleted)
                {
                    e.Row.Visible = false;
                }

                Label lblDocType = (Label)e.Row.FindControl("lblDocType");

                ArticleDocument artDoc = (ArticleDocument)e.Row.DataItem;

                if (!(lblDocType == null || artDoc == null))
                {
                    ListItem liItem = ddlArtDocTypes.Items.FindByValue(artDoc.ArtDocTypeId.ToString());

                    if (liItem != null)
                    {
                        lblDocType.Text = liItem.Text;
                    }
                }
            }
        }
Ejemplo n.º 13
0
        public static Article AdminGetArticle(Int32 ArticleId)
        {
            Article art = new Article();

            try
            {
                DataSet articleSet = ArticleQueryHelper.AdminGetArticle(ArticleId);

                if (articleSet.Tables.Count == 2)
                {
                    //Get the issue details
                    if (articleSet.Tables[0].Rows.Count > 0)
                    {
                        DataRow artRow = articleSet.Tables[0].Rows[0];

                        art.ArticleId = (Int32)artRow["ArticleId"];

                        art.Title = (string)artRow["Title"];

                        art.Authors = (string)artRow["Authors"];

                        art.Keywords = (string)artRow["Keywords"];

                        art.PageNumber = (Int32)artRow["PageNumber"];

                        art.IsActive = (bool)artRow["Active"];
                    }

                    //Get the documents
                    if (articleSet.Tables[1].Rows.Count > 0)
                    {
                        ArticleDocument artDoc;

                        art.Documents = new List <ArticleDocument>();

                        foreach (DataRow docRow in articleSet.Tables[1].Rows)
                        {
                            artDoc = new ArticleDocument();

                            artDoc.DocId = (Int32)docRow["DocId"];

                            artDoc.FullFileName = (string)docRow["FileName"];

                            artDoc.ArtDocTypeDescription = (string)docRow["ArtDocTypeDescription"];

                            artDoc.ArtDocTypeId = (Int32)docRow["ArtDocTypeId"];

                            artDoc.IsActive = (bool)docRow["Active"];

                            artDoc.IsNew = false;

                            art.Documents.Add(artDoc);
                        }
                    }
                }

                return(art);
            }
            catch (SqlException sqlEx)
            {
                Console.WriteLine(sqlEx.ToString());

                throw new DataException("An exception occured getting the article details.", sqlEx);
            }
        }