diff --git a/Kooboo.CMS/Kooboo.CMS.Membership/Services/MembershipUserManager.cs b/Kooboo.CMS/Kooboo.CMS.Membership/Services/MembershipUserManager.cs index 1152303a..1e98105e 100644 --- a/Kooboo.CMS/Kooboo.CMS.Membership/Services/MembershipUserManager.cs +++ b/Kooboo.CMS/Kooboo.CMS.Membership/Services/MembershipUserManager.cs @@ -17,6 +17,7 @@ using System.Text.RegularExpressions; using Kooboo.CMS.Common.DataViolation; using Kooboo.CMS.Membership.OAuthClients; +using Kooboo.Globalization; namespace Kooboo.CMS.Membership.Services @@ -67,11 +68,11 @@ public virtual MembershipUser Create(Kooboo.CMS.Membership.Models.Membership mem List violations = new List(); if (membershipUser.AsActual() != null) { - violations.Add(new DataViolationItem("UserName", userName, "DuplicateUserName")); + violations.Add(new DataViolationItem("UserName", userName, "DuplicateUserName".Localize())); } if (_provider.QueryUserByEmail(membership, email) != null) { - violations.Add(new DataViolationItem("Email", email, "DuplicateEmail")); + violations.Add(new DataViolationItem("Email", email, "DuplicateEmail".Localize())); } if (violations.Count > 0) { @@ -237,11 +238,11 @@ public virtual bool Validate(Kooboo.CMS.Membership.Models.Membership membership, } if (!membershipUser.IsApproved) { - violations.Add(new DataViolationItem("UserName", userName, "The member still not actived.")); + violations.Add(new DataViolationItem("UserName", userName, "The member still not actived.".Localize())); } if (membershipUser.IsLockedOut) { - violations.Add(new DataViolationItem("UserName", userName, "The member was locked out.")); + violations.Add(new DataViolationItem("UserName", userName, "The member was locked out.".Localize())); } if (violations.Count > 0) { @@ -275,11 +276,11 @@ public virtual bool Activate(Kooboo.CMS.Membership.Models.Membership membership, List violations = new List(); if (membershipUser == null) { - violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.")); + violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.".Localize())); } if (string.IsNullOrEmpty(activateCode)) { - violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is null.")); + violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is null.".Localize())); } if (membershipUser.IsApproved) { @@ -340,7 +341,7 @@ public virtual MembershipUser ForgotPassword(Kooboo.CMS.Membership.Models.Member List violations = new List(); if (membershipUser == null) { - violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.")); + violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.".Localize())); } if (violations.Count > 0) { @@ -364,11 +365,11 @@ public virtual bool ResetPassword(Kooboo.CMS.Membership.Models.Membership member List violations = new List(); if (membershipUser == null) { - violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.")); + violations.Add(new DataViolationItem("UserName", userName, "The member does not exists.".Localize())); } if (string.IsNullOrEmpty(activateCode)) { - violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is null.")); + violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is null.".Localize())); } var valid = !string.IsNullOrEmpty(membershipUser.ActivateCode) && membershipUser.ActivateCode == activateCode; @@ -380,7 +381,7 @@ public virtual bool ResetPassword(Kooboo.CMS.Membership.Models.Membership member } else { - violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is invalid.")); + violations.Add(new DataViolationItem("ActivateCode", userName, "Activate code is invalid.".Localize())); } if (violations.Count > 0) { diff --git a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Controllers/MediaContentController.cs b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Controllers/MediaContentController.cs index 749b6729..25a31fd0 100644 --- a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Controllers/MediaContentController.cs +++ b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Controllers/MediaContentController.cs @@ -18,6 +18,7 @@ using Kooboo.CMS.Web.Authorizations; using Kooboo.CMS.Web.Models; using Kooboo.Drawing; +using Kooboo.Drawing.Filters; using Kooboo.Globalization; using Kooboo.IO; using Kooboo.Web.Mvc; @@ -690,6 +691,89 @@ public virtual ActionResult IsFileNameAvailable(string name, string folderName, return Json(true, JsonRequestBehavior.AllowGet); } #endregion + + #region Watermark + + [Kooboo.CMS.Web.Authorizations.Authorization(AreaName = "Contents", Group = "", Name = "Content", Order = 1)] + [HttpPost] + public virtual ActionResult Watermark( string folderName, string[] docs ) + { + var data = new JsonResultData(ModelState); + data.RunWithTry(( resultData ) => + { + if( !string.IsNullOrWhiteSpace(folderName) && docs != null ) + { + var folder = FolderManager.Get(Repository, folderName).AsActual(); + var uuids = from uuid in docs where !string.IsNullOrEmpty(uuid) select uuid; + foreach( var uuid in uuids ) + { + var content = folder.CreateQuery().WhereEquals("UUID", uuid).First(); + var provider = Providers.DefaultProviderFactory.GetProvider(); + using( var sourceStream = new MemoryStream(provider.GetContentStream(content)) ) + { + var imageFormat = GetImageFormat(Path.GetExtension(content.FileName)); + if( imageFormat == null ) + { + continue; + } + var stream = Watermark(Repository, sourceStream, imageFormat); + ContentManager.Update(Repository, folder, uuid, content.FileName, stream, User.Identity.Name); + } + } + } + resultData.ReloadPage = true; + }); + return Json(data); + } + + public static ImageFormat GetImageFormat( string extension ) + { + switch( extension.ToLower() ) + { + case ".jpg": + case ".jpeg": + return ImageFormat.Jpeg; + case ".gif": + return ImageFormat.Gif; + case ".png": + return ImageFormat.Png; + case ".bmp": + return ImageFormat.Bmp; + } + return null; + } + private Stream Watermark( Repository repository, Stream stream, ImageFormat imageFormat ) + { + var waterImageFile = GetWaterImage(repository); + if (System.IO.File.Exists(waterImageFile)) + { + var waterImage = Image.FromFile(waterImageFile); + + var rawImage = Image.FromStream(stream); + + var filter = new ImageWatermarkFilter + { + WaterMarkImage = waterImage, + Alpha = 0.7f, + Valign = WaterMarkFilter.VAlign.Right, + Halign = WaterMarkFilter.HAlign.Bottom + }; + var image = filter.ExecuteFilter(rawImage); + + var ms = new MemoryStream(); + image.Save(ms, imageFormat); + ms.Seek(0, SeekOrigin.Begin); + return ms; + } + return stream; + } + private string GetWaterImage( Repository repository ) + { + var path = new RepositoryPath(repository); + + return Path.Combine(path.PhysicalPath, "Watermark.png"); + } + #endregion } public class TextFileModel diff --git a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index.cshtml b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index.cshtml index a50ca012..77fbf5ff 100644 --- a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index.cshtml +++ b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index.cshtml @@ -58,6 +58,14 @@ @("Export".Localize()) +
  • + + @("Watermark".Localize()) + +
  • @foreach (var group in Kooboo.CMS.Sites.Extension.UI.TopToolbar.ToolbarButtons.GetToolbarButtons(ViewContext.RequestContext)) diff --git a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index_Grid.cshtml b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index_Grid.cshtml index 4294512e..bdf9227e 100644 --- a/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index_Grid.cshtml +++ b/Kooboo.CMS/Kooboo.CMS.Web/Areas/Contents/Views/MediaContent/Index_Grid.cshtml @@ -62,6 +62,14 @@ @("Export".Localize()) +
  • + + @("Watermark".Localize()) + +
  • @foreach (var group in Kooboo.CMS.Sites.Extension.UI.TopToolbar.ToolbarButtons.GetToolbarButtons(ViewContext.RequestContext)) diff --git a/Kooboo.CMS/Kooboo.CMS.Web/I18N/ru-RU.resx b/Kooboo.CMS/Kooboo.CMS.Web/I18N/ru-RU.resx index e29a6868..db06f098 100644 --- a/Kooboo.CMS/Kooboo.CMS.Web/I18N/ru-RU.resx +++ b/Kooboo.CMS/Kooboo.CMS.Web/I18N/ru-RU.resx @@ -1,11 +1,7 @@  @@ -382,4 +441,10 @@ Save + + Email is already taken + + + Username is already taken + \ No newline at end of file diff --git a/Kooboo.CMS/Publish/Default/I18N/ru-RU.resx b/Kooboo.CMS/Publish/Default/I18N/ru-RU.resx index e29a6868..9a20a046 100644 --- a/Kooboo.CMS/Publish/Default/I18N/ru-RU.resx +++ b/Kooboo.CMS/Publish/Default/I18N/ru-RU.resx @@ -1,11 +1,7 @@