public JsonResult Save( int id = 0, int status = 0, string _title = "", string _slug = "", string _thumbnail = "", string _sapo = "", string _content = "", string _related = "", string _cates = "", string _cates_slug = "", string _tags = "", string _tags_slug = "", string _meta_keywords = "", string _meta_description = "") { var stt = false; var msg = ""; #region Phân tích request/submit form (nếu có) if (_title == null || _title.Trim() == "") { msg = "Tên gian hàng không được để trống"; } if (_slug == null || _slug.Trim() == "") { msg = "Slug không được để trống"; } else { if (id < 1) { #region Thêm bài viết var exited = DBLibs.ExecuteScalar($"SELECT COUNT(*) FROM News WHERE slug = N'{_slug.Replace("'", "''").Trim()}' OR title = N'{_title.Replace("'", "''").Trim()}'", _cnn); if (exited != null && int.Parse(exited.ToString()) > 0) { return(Json(new { status = false, message = "Đã có bài viết có cùng tiêu đề hoặc url!" })); } var newid = DBLibs.ExecuteScalar($@" INSERT INTO dbo.News ( Slug , UnitId , Title , Thumbnail , Summary , FullContent , related_news , Cates , Tags , Status , CreatedAt , CreatedBy , PublishAt, meta_keywords , meta_descriptions ) VALUES ( '{_slug.Replace("'", "''").Trim()}' , -- Slug - varchar(250) {SysBaseInfor.GetCurrentUnitId()} , -- UnitId - int N'{_title.Replace("'", "''").Trim()}' , -- Title - nvarchar(200) N'{_thumbnail.Replace("'", "''").Trim()}' , -- Thumbnail - nvarchar(500) N'{_sapo.Replace("'", "''").Trim()}' , -- Summary - nvarchar(1000) N'{_content.Replace("'", "''").Trim()}' , -- FullContent - ntext N'{_related.Replace("'", "''").Trim()}' , -- related_news - nvarchar(45) N'{_cates.Replace("'", "''").Trim()}' , -- Cates - nvarchar(1000) N'{_tags.Replace("'", "''").Trim()}' , -- Tags - nvarchar(1000) {status} , -- Status - tinyint {CLibs.DatetimeToTimestampOrgin(DateTime.Now)} , -- CreatedAt - int {(status == 1 ? CLibs.DatetimeToTimestampOrgin(DateTime.Now) : 0)} , -- PublishAt - int {SysBaseInfor.GetIdNguoiDung()} , -- CreatedBy - int N'{_meta_keywords.Replace("'", "''").Trim()}' , -- meta_keywords - nvarchar(50) N'{_meta_description.Replace("'", "''").Trim()}' -- meta_descriptions - nvarchar(550) ) SELECT SCOPE_IDENTITY() ", _cnn); int.TryParse(newid == null ? "0" : newid.ToString(), out id); if (newid != null) { stt = true; } else { msg = "Không thêm dữ liệu vào được!"; } #endregion } else { #region Update bài viết var exited = DBLibs.ExecuteScalar($"SELECT COUNT(*) FROM News WHERE id <> {id} AND (slug = N'{_slug.Replace("'", "''").Trim()}' OR title = N'{_title.Replace("'", "''").Trim()}')", _cnn); if (exited != null && int.Parse(exited.ToString()) > 0) { return(Json(new { status = false, message = "Đã có bài viết có cùng tiêu đề hoặc url!" })); } var eff = DBLibs.ExecuteNonQuery($@" UPDATE News SET Slug = '{_slug.Replace("'", "''").Trim()}' , -- Slug - varchar(250) Title = N'{_title.Replace("'", "''").Trim()}' , -- Title - nvarchar(200) Thumbnail = N'{_thumbnail.Replace("'", "''").Trim()}' , -- Thumbnail - nvarchar(500) Summary = N'{_sapo.Replace("'", "''").Trim()}' , -- Summary - nvarchar(1000) FullContent = N'{_content.Replace("'", "''").Trim()}' , -- FullContent - ntext related_news = N'{_related.Replace("'", "''").Trim()}' , -- related_news - nvarchar(45) Cates = N'{_cates.Replace("'", "''").Trim()}' , -- Cates - nvarchar(1000) Tags = N'{_tags.Replace("'", "''").Trim()}' , -- Tags - nvarchar(1000) Status = {status} , -- Status - tinyint UpdatedAt = {CLibs.DatetimeToTimestampOrgin(DateTime.Now)} , -- UpdatedAt - int PublishAt = {(status == 1 ? CLibs.DatetimeToTimestampOrgin(DateTime.Now) : 0)} , -- PublishAt - int UpdatedBy = {SysBaseInfor.GetIdNguoiDung()} , -- UpdatedBy - int meta_keywords = N'{_meta_keywords.Replace("'", "''").Trim()}' , -- meta_keywords - nvarchar(50) meta_descriptions = N'{_meta_description.Replace("'", "''").Trim()}' -- meta_descriptions - nvarchar(550) WHERE id = {id}", _cnn); if (eff > 0) { stt = true; } else { msg = "Không cập nhật dữ liệu được!"; } #endregion } #region Cache lại ảnh trong bài viết var h = new WebLibs.HttpRequest(); foreach (Match m in Regex.Matches(_content, "<img.+?src=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData/{SysBaseInfor.GetIdNguoiDung()}/{id}/"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } h.DownloadFileFullToDisk(src.Replace("&", "&"), fullpath); var dest = fullpath.Replace(Server.MapPath("~"), "/"); _content = _content.Replace(src, dest); } } foreach (Match m in Regex.Matches(_content, "<img.+?rel=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData/{SysBaseInfor.GetIdNguoiDung()}/{id}/"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } h.DownloadFileFullToDisk(src.Replace("&", "&"), fullpath); var dest = fullpath.Replace(Server.MapPath("~"), "/"); _content = _content.Replace(src, dest); } } foreach (Match m in Regex.Matches(_content, "<img.+?data-original=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData/{SysBaseInfor.GetIdNguoiDung()}/{id}/"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } h.DownloadFileFullToDisk(src.Replace("&", "&"), fullpath); var dest = fullpath.Replace(Server.MapPath("~"), "/"); _content = _content.Replace(src, dest); } } DBLibs.ExecuteNonQuery($"UPDATE News SET FullContent = N'{_content.Replace("'", "''").Trim()}' WHERE id = {id}", _cnn); #endregion #region Update/Insert tags var tags = _tags.Split(','); var tags_slug = _tags_slug.Split(','); var cates = (_cates == "0" ? "" : _cates).Split(','); var cates_slug = (_cates_slug == "0" ? "" : _cates_slug).Split(','); for (int i = 0; i < tags.Length; i++) { if (tags_slug[i].Trim(" -".ToCharArray()).ToLower() == "") { continue; } DBLibs.ExecuteNonQuery($@" BEGIN TRAN UPDATE Tags WITH (SERIALIZABLE) SET [used] = ([used] + 1) WHERE slug = '{tags_slug[i].Trim(" -".ToCharArray()).ToLower()}' IF @@rowcount = 0 BEGIN INSERT INTO Tags ([name], [slug], created_at) VALUES (N'{tags[i].Trim(" -".ToCharArray()).ToLower()}', '{tags_slug[i].Trim(" -".ToCharArray()).ToLower()}', {CLibs.DatetimeToTimestampOrgin(DateTime.Now)}) END COMMIT TRAN ", _cnn); } for (int i = 0; i < cates.Length; i++) { if (cates_slug[i].Trim(" -".ToCharArray()).ToLower() == "") { continue; } DBLibs.ExecuteNonQuery($@" BEGIN TRAN UPDATE Tags WITH (SERIALIZABLE) SET [used] = ([used] + 1) WHERE slug = '{cates_slug[i].Trim(" -".ToCharArray()).ToLower()}' IF @@rowcount = 0 BEGIN INSERT INTO Tags ([name], [slug], created_at) VALUES (N'{cates[i].Trim(" -".ToCharArray()).ToLower()}', '{cates_slug[i].Trim(" -".ToCharArray()).ToLower()}', {CLibs.DatetimeToTimestampOrgin(DateTime.Now)}) END COMMIT TRAN ", _cnn); } #endregion } #endregion return(Json(new { status = stt, message = msg })); }
public JsonResult Save( int id = 0, string _title = "", string _DateShow = "", string _DateHide = "", string _content = "", int status = 0) { var stt = false; var msg = ""; #region Phân tích request/submit form (nếu có) if (_title == null || _title.Trim() == "") { msg = "Tên tiêu đề không được để trống"; } else { if (id < 1) { #region Thêm bài viết var newid = DBLibs.ExecuteScalar($@" INSERT INTO dbo.NotifiPopup ( Title , DateShow , DateHide , FullContent , Status , ) VALUES ( N'{_title.Replace("'", "''").Trim()}' , '{ _DateShow.MapDate().ToString("yyyy-dd-MM")}' , '{_DateHide.MapDate().ToString("yyyy-dd-MM")}' , N'{_content.Replace("'", "''").Trim()}' , {status} ) SELECT SCOPE_IDENTITY() ", _cnn); int.TryParse(newid == null ? "0" : newid.ToString(), out id); if (newid != null) { stt = true; } else { msg = "Không thêm dữ liệu vào được!"; } #endregion } else { #region Update bài viết var exited = DBLibs.ExecuteScalar($"SELECT COUNT(*) FROM News WHERE id <> {id} AND (title = N'{_title.Replace("'", "''").Trim()}')", _cnn); if (exited != null && int.Parse(exited.ToString()) > 0) { return(Json(new { status = false, message = "Đã có bài viết có cùng tiêu đề !" })); } var eff = DBLibs.ExecuteNonQuery($@" UPDATE NotifiPopup SET Title = N'{_title.Replace("'", "''").Trim()}' , DateShow = '{_DateShow.MapDate().ToString("yyyy-dd-MM")}' , -- Title - nvarchar(200) DateHide = '{_DateHide.MapDate().ToString("yyyy-dd-MM")}' , -- Thumbnail - nvarchar(500) FullContent = N'{_content.Replace("'", "''").Trim()}' , -- FullContent - ntext Status = {status} WHERE id = {id}", _cnn); if (eff > 0) { stt = true; } else { msg = "Không cập nhật dữ liệu được!"; } #endregion } #region Cache lại ảnh trong bài viết var h = new WebLibs.HttpRequest(); foreach (Match m in Regex.Matches(_content, "<img.+?src=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData\\{SysBaseInfor.GetIdNguoiDung()}\\{id}\\"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } var base64Data = Regex.Match(src.Replace("&", "&"), @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; var binData = Convert.FromBase64String(base64Data); using (var stream = new MemoryStream(binData)) { Bitmap bitmap = new Bitmap(stream); bitmap.Save(fullpath); } var dest = fullpath.Replace(Server.MapPath("~"), "\\").Replace("\\", "/"); _content = _content.Replace(src, dest); } } foreach (Match m in Regex.Matches(_content, "<input.+?src=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData\\{SysBaseInfor.GetIdNguoiDung()}\\{id}\\"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } var base64Data = Regex.Match(src.Replace("&", "&"), @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; var binData = Convert.FromBase64String(base64Data); using (var stream = new MemoryStream(binData)) { Bitmap bitmap = new Bitmap(stream); bitmap.Save(fullpath); } var dest = fullpath.Replace(Server.MapPath("~"), "\\").Replace("\\", "/"); _content = _content.Replace(src, dest); } } foreach (Match m in Regex.Matches(_content, "<img.+?rel=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData/{SysBaseInfor.GetIdNguoiDung()}/{id}/"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } var base64Data = Regex.Match(src.Replace("&", "&"), @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; var binData = Convert.FromBase64String(base64Data); using (var stream = new MemoryStream(binData)) { Bitmap bitmap = new Bitmap(stream); bitmap.Save(fullpath); } var dest = fullpath.Replace(Server.MapPath("~"), "\\").Replace("\\", "/"); _content = _content.Replace(src, dest); } } foreach (Match m in Regex.Matches(_content, "<img.+?data-original=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase | RegexOptions.Multiline)) { string src = m.Groups[1].Value.Trim(); if (src.StartsWith("/UserData/")) { continue; } if (!src.ToLower().StartsWith(Request.Url.Host.ToLower())) { var path = Server.MapPath("~") + $"UserData/{SysBaseInfor.GetIdNguoiDung()}/{id}/"; var fullpath = path + CLibs.GenPassCode(false, 12); fullpath += (src.Contains(".jpg") || src.Contains(".jpeg") || src.Contains(".gif") || src.Contains(".png") ? src.Substring(src.LastIndexOf('.')).Trim() : ".jpg"); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } var base64Data = Regex.Match(src.Replace("&", "&"), @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; var binData = Convert.FromBase64String(base64Data); using (var stream = new MemoryStream(binData)) { Bitmap bitmap = new Bitmap(stream); bitmap.Save(fullpath); } var dest = fullpath.Replace(Server.MapPath("~"), "\\").Replace("\\", "/"); _content = _content.Replace(src, dest); } } DBLibs.ExecuteNonQuery($"UPDATE News SET FullContent = N'{_content.Replace("'", "''").Trim()}' WHERE id = {id}", _cnn); #endregion } #endregion return(Json(new { status = stt, message = msg }, JsonRequestBehavior.AllowGet)); }