private void TrySendMessage(Article article)
        {
            if (article.CurrentMessageText == null)
            {
                return;
            }

            var user  = User.GetApplicationUser(db);
            var email = user.Email.Equals(Constants.MainEmail, StringComparison.OrdinalIgnoreCase) ? article.Owner.Email : Constants.MainEmail;

            var title = $"Коментраий к статье '{article.ShortArtTitles}'";
            var text  = $@"<html>
<body>
</body>
<p><i>Это автоматическое уведомление. <b>Не отвечайте</b> на него.</i> Для ответа перейдите по ссылке ниже.</p>
<p>Добавлен коментарий к статье <a href='{this.Action("Edit", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}.</p>

<p>Текст сообщения:<br />
{article.CurrentMessageText.Replace(Environment.NewLine, "<br />\r\n")}
</p>
</html>";

            MailMessageService.SendMail(email, title, text);
            MailMessageService.SendMail(Constants.MainEmail, title, text + "<br/>\r\n<br/>\r\n" + "Послано по адресу: <b>" + email + "</b>");
        }
Example #2
0
        public void SeveFile(HttpPostedFileBase file, Func <string, string> mapPath, string prefix = null)
        {
            var fullPath = MakeFileName(file, mapPath, prefix);

            var ext = Path.GetExtension(fullPath);

            if (string.IsNullOrWhiteSpace(ext))
            {
                var stackTrace = new StackTrace(true);
                var builder    = new StringBuilder();
                foreach (var r in stackTrace.GetFrames())
                {
                    builder.AppendLine($"Filename: {r.GetFileName()} Method: {r.GetMethod()} Line: {r.GetFileLineNumber()} Column: {r.GetFileColumnNumber()}  ");
                }

                MailMessageService.SendMail(Constants.MainEmail, Constants.ErrorCaption,
                                            $@"Файл без расширения!
fullPath: '{fullPath}'
file.ContentLength: {file.ContentLength}
file.ContentType: '{file.ContentType}'
file.FileName: '{file.FileName}'
file: '{file}'
StackTrace: {builder}
");
                throw new ApplicationException("Надопустимо загружать файлы без расширений!");
            }

            file.SaveAs(fullPath);

            if (string.IsNullOrEmpty(prefix))
            {
                File.SetLastWriteTimeUtc(fullPath, this.ArticleDate.ToUniversalTime());
            }
        }
        public IHttpActionResult PostMail([FromBody] dtoMailMessage mailToSend)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                return(Ok(mailMessageService.SendMail(mailToSend)));
            }
            catch (Exception ex)
            {
                return(InternalServerError(new Exception(ex.Message)));
            }
        }
        private void TrySendMessage(Article article, Message msg)
        {
            var parent = article.Messages.FindParentMessageOpt(msg);

            ApplicationUser parentWriter = parent == null ? article.Owner : parent.Writer;
            ApplicationUser writer       = User.GetApplicationUser(db);

            MailMessageService.SendMail(parentWriter.Email, $"Коментраий к статье {article.GetAuthorsBriefFios()} '{article.ShortArtTitles}'",
                                        $@"<html>
<body>
</body>
<p><i>Это автоматическое уведомление. <b>Не отвечайте</b> на него.</i> Для ответа перейдите по ссылке ниже.</p>
<p>Добавлен коментарий к статье <a href='{this.Action("Edit", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}.</p>
<p>Автор: {writer.UserName} ({writer.Email})<br />
В ответ: {parentWriter.UserName} ({parentWriter.Email})</p>

<p>Текст сообщения:<br />
{msg.Text.Replace(Environment.NewLine, "<br />\r\n")}
</p>
</html>");
        }
        private void SaveArticleFile(Article article, HttpPostedFileBase articleFile, ArticleStatus prevStatus)
        {
            var versionsOld = article.GetFileVersions(Server.MapPath);

            article.SeveFile(articleFile, Server.MapPath);

            if (prevStatus != ArticleStatus.RequiresVerification && article.Status != ArticleStatus.NewVersion)
            {
                article.Status = ArticleStatus.NewVersion;
                var versionsNew = article.GetFileVersions(Server.MapPath);

                MailMessageService.SendMail(Constants.MainEmail, $"Изменена версия файла к статье id{article.Id} '{article.ShortArtTitles}', авторов: {article.GetAuthorsBriefFios()}",
                                            $@"<html>
<body>
</body>
<p><i>Это автоматическое уведомление.</p>
<p>В статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: <b>{article.GetAuthorsBriefFios()}</b>
  был <b>изменен файл</b> статьи.
</p>
<p>Предыдущий статус: {prevStatus}</p>
</html>");
            }
        }
        public ActionResult UploadAntiplagiat([Bind(Include = "Id")] Article article)
        {
            Article orig = db.Articles.Include(a => a.Messages).Include(a => a.Authors.Select(x => x.Owner)).Include(a => a.Authors).Include(a => a.Owner).Include(a => a.Issue)
                           .FilterByOwner(User)
                           .SingleOrDefault(a => a.Id == article.Id);

            if (orig == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            HttpPostedFileBase antiplagiatApdx = Request.Files["antiplagiatApdx"];
            HttpPostedFileBase antiplagiatPdf  = Request.Files["antiplagiatPdf"];

            if (antiplagiatPdf?.ContentLength > 0 && antiplagiatApdx?.ContentLength > 0)
            {
                if (!Path.GetExtension(antiplagiatPdf.FileName).Equals(".pdf", StringComparison.OrdinalIgnoreCase))
                {
                    ModelState.AddModelError("UploadAntiplagiatValidation", "В первом поле должен быть .pdf!");
                    return(View("Details", orig));
                }

                if (!Path.GetExtension(antiplagiatApdx.FileName).Equals(".apdx", StringComparison.OrdinalIgnoreCase))
                {
                    ModelState.AddModelError("UploadAntiplagiatValidation", "Во втором поле должен быть .apdx!");
                    return(View("Details", orig));
                }

                orig.SeveFile(antiplagiatApdx, Server.MapPath, Constants.AntiplagiatApdxPrefix);
                orig.SeveFile(antiplagiatPdf, Server.MapPath, Constants.AntiplagiatPdfPrefix);

                MailMessageService.SendMail(orig.Owner.Email, $"Загружен отчет antiplagiat.ru к статье id{orig.Id} '{orig.ShortArtTitles}', автор{orig.AuthorsPlural}: {orig.GetAuthorsBriefFios()}",
                                            $@"<html>
<body>
<p><i>Это автоматическое уведомление.</p>
<p>Обратите внимание на то, что <b>статья еще не обработана редактором</b>. Это всего лишь оповещение о ходе обработки статьи. 
  Через некоторое время <b>Вам будет выслано уведомление о принятии статьи или письмо с замечаниями</b>, которые нужно исправить. 
</p>
<p>К статье '<a href='{this.Action("Details", "Articles", new { id = orig.Id })}'>{orig.ShortArtTitles}</a>', автор{orig.AuthorsPlural}: <b>{orig.GetAuthorsBriefFios()}</b>
  был добавлен отчет Antiplagiat.ru.
</p>
<p>Вы можете скачать его <a href='{this.Action("AntiplagiatPdf", "Articles", new { id = orig.Id })}'>PDF-версию</a>.</p>
<p>Или его <a href='{this.Action("AntiplagiatApdx", "Articles", new { id = orig.Id })}'>APDX-версию</a>.</p>
<p>Для просмотра APDX-версии Вам придется загрузить <a href='http://www.antiplagiat.ru/Page/Antiplagiat-report-viewer'>Antiplagiat ReportViewer</a>.</p>
</body>
</html>");
                switch (orig.Status)
                {
                case ArticleStatus.RequiresVerification:
                case ArticleStatus.AddedToAntiplagiat:
                case ArticleStatus.NewVersion:
                    orig.Status = ArticleStatus.AntiplagiatReportLoaded;
                    orig.Agreed = true;
                    db.SaveChanges();
                    break;
                }
            }
            else
            {
                ModelState.AddModelError("UploadAntiplagiatValidation", "Вы дожны задать одноверменно обва варианта отчета antiplagiat.ru .apdx и .pdf!");
                return(View("Details", orig));
            }

            return(RedirectToAction("Details", new { id = article.Id }));
        }
        private void TryAddAcceptedMessage(Article article, ArticleStatus prevStatus)
        {
            if (article.Status == ArticleStatus.Accepted && prevStatus != ArticleStatus.Accepted)
            {
                var title = $"Статья № {article.Id} принята к публикации. Сокращенное название: '{article.ShortArtTitles}'";
                var text  = $@"<html>
<body>
<p><i>Это автоматическое уведомление!</p>
<p>Статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}
  <b>принята</b> к публикации в № {article.IssueNumber} за {article.IssueYear}.
</p>
</body>
</html>";
                MailMessageService.SendMail(Constants.ImposerEmail, title, text);
                var month = BlackHolesExtensions.PublicationMonth(article.IssueNumber);
                text = $@"<html>
<body>
<p><i>Это автоматическое уведомление!</p>
<p>
  Ваша статья принята к публикации в № {article.IssueNumber} за {article.IssueYear} год журнала {Constants.Jur}, который <b>выйдет в {month}</b>.
  При сдаче номера в печать Вы получите уведомление, содержащее: номера страниц, титульный лист, оглавление и PDF вашей статьи.
  Реквизиты для оплаты публикации: http://www.k-press.ru/bh/Articles/PaymentDetails/{article.Id}
</p>
</body>
</html>";
                MailMessageService.SendMail(article.Owner.Email, title, text);
                MailMessageService.SendMail(Constants.MainEmail, title, text);
            }
            else if (article.Status == ArticleStatus.Paid && prevStatus != ArticleStatus.Paid)
            {
                var title = $"Получена оплата по статье № {article.Id}. Сокращенное название: '{article.ShortArtTitles}'";
                var text  = $@"
<html>
<body>
<p>
  Получена оплата (без доставки) по статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}
</p>
</body>
</html>";
                MailMessageService.SendMail(article.Owner.Email, title, text);
                MailMessageService.SendMail(Constants.MainEmail, title, text);
            }
            else if (article.Status == ArticleStatus.PaidDelivery && prevStatus != ArticleStatus.PaidDelivery)
            {
                var hasAdress = article.Authors.Any(a => !string.IsNullOrWhiteSpace(a.PostalAddress));
                var builder   = new StringBuilder();
                if (hasAdress)
                {
                    builder.AppendLine("<p>Проверьте адреса по которым будут направлены журналы, в случае оплаты доставки:</p>");
                }
                else
                {
                    builder.AppendLine($@"<p><b>Внимание!</b> Ни у одного автора не указаны реквизиты доставки. 
            Укажите адрес доставки в реквизитах одного из авторов.</p>");
                    builder.AppendLine();
                }

                foreach (var a in article.Authors)
                {
                    var address = string.IsNullOrWhiteSpace(a.PostalAddress) ? "Адрес не указан!" : a.PostalAddress;
                    var index   = string.IsNullOrWhiteSpace(a.Postcode) ? @"<b>Не указан индекс!</b> " : $"{a.Postcode}, ";
                    var line    = $@"{index}<a href='http://www.k-press.ru/bh/Authors/Edit/{a.Id}#PostRequisites'>{address}</a><br/>";
                    builder.AppendLine(line);
                }

                var title = $"Получена оплата по статье № {article.Id}. Сокращенное название: '{article.ShortArtTitles}'";
                var text  = $@"
<html>
<body>
<p>
  Получена оплата по статье <a href='{this.Action("Details", "Articles", new { id = article.Id })}'>{article.ShortArtTitles}</a>, авторов: {article.GetAuthorsBriefFios()}
</p>
{builder}
</body>
</html>";
                MailMessageService.SendMail(article.Owner.Email, title, text);
                MailMessageService.SendMail(Constants.MainEmail, title, text);
            }
        }