Exemplo n.º 1
0
        public virtual ActionResult AddMedia(AddMediaVM.AddMediaPurpose purpose, AddMediaVM.AddMediaType type, long? memberId)
        {
            ActionResult returnValue = null;
            AddMediaVM viewModel = new AddMediaVM
            {
                Type = type,
                Purpose = purpose
            };
            if (purpose == AddMediaVM.AddMediaPurpose.TinyMce || purpose == AddMediaVM.AddMediaPurpose.ProfileImageAjax)
            {
                returnValue = View(MVC.Shared.Views.AddMediaStandalone, viewModel);
            }
            else if (purpose == AddMediaVM.AddMediaPurpose.ProfileImage)
            {
                returnValue = View("AddMedia", viewModel);
            }
            else
            {
                if (this.Request.IsAjaxRequest())
                {
                    var viewModelError = new AjaxReturnMsgVM
                    {
                        StatusCode = AjaxReturnMsgVM.Status.failure,
                        StatusMessage = "Unsupported purpose"
                    };

                    returnValue = Json(viewModelError);
                }
                else
                {
                    var viewModelError = new MessageVM
                    {
                        Image = ImageLibrary.Alert,
                        CssClassContainer = "failure",
                        Message = "Unsupported purpose ",
                        Title = ErrorStrings.TITLE_ERROR,
                        LinkText = "Continue",
                        LinkHref = Url.Action(MVC.Home.Index()),
                    };

                    returnValue = View("Message", viewModelError);
                }
            }

            return returnValue;
        }
Exemplo n.º 2
0
        public virtual JsonResult AddComment(long articleId, string textComment, long? conversationId)
        {
            ProviderCurrentMember currentMember = ProviderCurrentMember.Instance;
            AjaxReturnMsgVM viewModel = new AjaxReturnMsgVM
            {
                StatusCode = AjaxReturnMsgVM.Status.success,
                StatusMessage = String.Empty
            };

            ContentCheck result = null;
            if (!currentMember.IsSuperAdmin)
            {
                string email = string.Empty;
                string domain = string.Empty;

                if (currentMember.HasValidAltId(ProviderAlternateMemberId.AlternateType.Email))
                {
                    email = currentMember.Emails[0].Email.Address;
                }

                if (currentMember.HasValidAltId(ProviderAlternateMemberId.AlternateType.Domain))
                {
                    domain = currentMember.Domains[0].Domain.AbsoluteUri;
                }

                // The mollom client crashes if passed in special html chars ( ) so strip those before sending it over
                string cleanedTextComment = HtmlParser.StripSpecialChars(textComment);
                MollomClient client = new MollomClient(InsideWordWebSettings.MollomPrivateKey, InsideWordWebSettings.MollomPublicKey);
                result = client.CheckContent(string.Empty, cleanedTextComment,
                                                          currentMember.DisplayAdministrativeName,
                                                          email,
                                                          domain,
                                                          HttpContext.Request.UserHostAddress);
            }

            if (!currentMember.IsLoggedOn)
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "You must be logged in to Comment.";
            }
            else if (!ProviderArticle.Exists(articleId))
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "The article you commented on no longer exists.";
            }
            else if(string.IsNullOrEmpty(textComment) || textComment.Length < 2)
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "A comment needs more than 1 character.";
            }
            else if(textComment.Length > ProviderComment.TextSize)
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "A comment can't be more than "+ProviderComment.TextSize+ " characters.";
            }
            else if (result != null && result.Classification == ContentClassification.Spam)
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "Your comment has been blocked as spam.";
            }
            else if (result != null && result.Quality < InsideWordWebSettings.MollomCommentQuality)
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.StatusMessage = "The quality of your comment is too low. Try improving things such as spelling and grammar.";
            }
            else
            {
                ProviderArticle anArticle = new ProviderArticle(articleId);
                ProviderConversation conversation;
                if (conversationId.HasValue)
                {
                    conversation = new ProviderConversation(conversationId.Value);
                }
                else
                {
                    conversation = new ProviderConversation();
                }

                ProviderComment comment = new ProviderComment();
                CommentBL.AddComment(textComment,
                                     currentMember,
                                     anArticle,
                                     ref conversation,
                                     ref comment);

                ProviderMember author = anArticle.Author;
                long? articleAuthorId = null;
                if (author != null)
                {
                    articleAuthorId = author.Id;
                }

                bool isReply = conversation.Comments.Count > 1;
                if (isReply)
                {
                    CommentVM commentVM = new CommentVM(comment, currentMember, articleAuthorId);
                    commentVM.IsReply = isReply;
                    viewModel.Content = ControllerExtension.RenderPartialViewToString(this, MVC.Child.Views.Comment, (object)commentVM);
                }
                else
                {
                    ConversationVM conversationVM = new ConversationVM(conversation, ProviderCurrentMember.Instance, articleAuthorId);
                    viewModel.Content = ControllerExtension.RenderPartialViewToString(this, MVC.Child.Views.Conversation, (object)conversationVM);
                }

                if (author != null &&
                    author.Id != currentMember.Id &&
                    author.HasValidAltId(ProviderAlternateMemberId.AlternateType.Email))
                {
                    // do some calculations to determine if we should send the e-mail
                    int commentCount = anArticle.CountComments;
                    int n = (int)Math.Log((double)commentCount, 2);
                    if (n < 0) { n = 0; }
                    if (commentCount % (1 << n) == 0)
                    {
                        EmailManager.Instance.SendCommentNotificationEmail(author.Emails[0].Email, anArticle, currentMember);
                    }
                }
            }

            return Json(viewModel);
        }
Exemplo n.º 3
0
        public virtual JsonResult RefreshArticleStatus()
        {
            AjaxReturnMsgVM returnMessage = new AjaxReturnMsgVM
            {
                StatusCode = AjaxReturnMsgVM.Status.failure,
                StatusMessage = string.Empty,
                Content = string.Empty
            };

            if (AsyncRefreshArticleManager.Instance.IsBusy)
            {
                returnMessage.StatusCode = AjaxReturnMsgVM.Status.success;
                returnMessage.StatusMessage = AsyncRefreshArticleManager.Instance.Progress.ToString() + " remaining";
                string errorHtml = string.Empty;
                if (AsyncRefreshArticleManager.Instance.ErrorList.Count > 0)
                {
                    errorHtml = "<ol><li>" + string.Join("</li>\n<li>", AsyncRefreshArticleManager.Instance.ErrorList) + "</li><ol>";
                }
                returnMessage.Content = errorHtml;
            }
            else if (AsyncRefreshArticleManager.Instance.Completed)
            {
                returnMessage.StatusCode = AjaxReturnMsgVM.Status.successAndStop;
                returnMessage.StatusMessage = AsyncRefreshArticleManager.Instance.Progress.ToString() + " remaining";
                string errorHtml = "no errors encountered.";
                if (AsyncRefreshArticleManager.Instance.ErrorList.Count > 0)
                {
                    errorHtml = "<ol><li>" + string.Join("</li>\n<li>", AsyncRefreshArticleManager.Instance.ErrorList) + "</li><ol>";
                }
                returnMessage.Content = errorHtml;
                AsyncRefreshArticleManager.Instance.Clear();
            }

            return Json(returnMessage, JsonRequestBehavior.AllowGet);
        }
Exemplo n.º 4
0
        public virtual JsonResult RefreshArticle(RefreshArticleVM model)
        {
            AjaxReturnMsgVM returnValue = null;

            AsyncRefreshArticleManager.Instance.AddBy(AsyncRefreshArticleManager.LoadEnum.All);

            if(returnValue == null)
            {
                returnValue = new AjaxReturnMsgVM
                {
                    StatusCode = AjaxReturnMsgVM.Status.success,
                    StatusMessage = string.Empty,
                    Content = string.Empty
                };
            }

            return Json(returnValue);
        }
Exemplo n.º 5
0
        public virtual ActionResult AddMedia(AddMediaVM model)
        {
            ActionResult returnValue = null;
            ProviderCurrentMember currentMember = ProviderCurrentMember.Instance;
            ProviderMember aMember = null;

            // try to get the member from the model, otherwise just use current member
            // TODO check this logic
            if (model.MemberId != null)
            {
                aMember = new ProviderMember(model.MemberId.Value);
            }
            else
            {
                aMember = currentMember;
            }

            HttpPostedFileBase filePhoto = Request.Files[model.FilePhotoKey] as HttpPostedFileBase;
            bool isValidPhoto = ProviderPhoto.Validate(filePhoto);
            ProviderPhoto originalPhoto = null;

            if (isValidPhoto)
            {
                originalPhoto = PhotoBL.CreatePhoto(aMember, filePhoto);
            }

            if (model.Purpose == AddMediaVM.AddMediaPurpose.TinyMce)
            {
                if (isValidPhoto)
                {
                    returnValue = View("AddMediaDone", new AddMediaDoneVM { FileURL = originalPhoto.ImageUrl.AbsoluteUri });
                }
                else
                {
                    ModelState.AddModelError("", ErrorStrings.INVALID_IMAGE);
                    returnValue = View(MVC.Shared.Views.AddMediaStandalone, model);
                }
            }
            else if (model.Purpose == AddMediaVM.AddMediaPurpose.ProfileImage || model.Purpose == AddMediaVM.AddMediaPurpose.ProfileImageAjax)
            {
                if(isValidPhoto)
                {
                    aMember.ProfilePhotoId = originalPhoto.Id;
                    aMember.Save();
                }

                if (model.Purpose == AddMediaVM.AddMediaPurpose.ProfileImageAjax)
                {
                    var viewModel = new AjaxReturnMsgVM();
                    if(isValidPhoto)
                    {
                        viewModel.StatusCode = AjaxReturnMsgVM.Status.success;
                        viewModel.StatusMessage = originalPhoto.Thumbnail(ProviderPhotoRecord.ImageTypeEnum.ProfileThumbnail)
                                                               .ImageUrl
                                                               .AbsoluteUri;
                    }
                    else
                    {
                        viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                        viewModel.StatusMessage = ErrorStrings.INVALID_IMAGE;
                    }
                    returnValue = Json(viewModel);
                }
                else if (model.Purpose == AddMediaVM.AddMediaPurpose.ProfileImage)
                {
                    if (isValidPhoto)
                    {
                        var viewModel = new MessageVM
                        {
                            Image = ImageLibrary.Success,
                            CssClassContainer = "success",
                            Message = "Profile Image updated",
                            Title = "Profile Image updated",
                            LinkText = "Continue",
                            LinkHref = Url.Action(MVC.Member.Account(aMember.Id.Value, null)),
                        };
                        returnValue = View("Message", viewModel);
                    }
                    else
                    {
                        ModelState.AddModelError("", ErrorStrings.INVALID_IMAGE);
                        returnValue = View(model);
                    }
                }
            }
            else
            {
                if(this.Request.IsAjaxRequest())
                {
                    var viewModel = new AjaxReturnMsgVM
                    {
                        StatusCode = AjaxReturnMsgVM.Status.failure,
                        StatusMessage = "Unsupported purpose"
                    };

                    returnValue = Json(viewModel);
                }
                else
                {
                    var viewModel = new MessageVM
                    {
                        Image = ImageLibrary.Alert,
                        CssClassContainer = "failure",
                        Message = "Unsupported purpose ",
                        Title = ErrorStrings.TITLE_ERROR,
                        LinkText = "Continue",
                        LinkHref = Url.Action(MVC.Home.Index()),
                    };

                    returnValue = View("Message", viewModel);
                }
            }

            return returnValue;
        }
Exemplo n.º 6
0
        public virtual JsonResult Vote(long articleId, long voteValue)
        {
            // direction: true = vote up, false = vote down

            AjaxReturnMsgVM viewModel = new AjaxReturnMsgVM
            {
                StatusCode = AjaxReturnMsgVM.Status.failure,
                StatusMessage = string.Empty,
                Content = string.Empty
            };

            ProviderCurrentMember currentMember = ProviderCurrentMember.Instance;

            if ( !currentMember.IsLoggedOn )
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.Content = "You must be logged on to vote.";
            }
            else if (!ProviderArticle.Exists(articleId))
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.Content = "The article you voted on no longer exists.";
            }
            else if(ProviderArticleVote.HasVoted(articleId, currentMember.Id.Value))
            {
                viewModel.StatusCode = AjaxReturnMsgVM.Status.failure;
                viewModel.Content = "You have already voted on this article.";
            }
            else
            {
                ProviderArticleVote aVote = new ProviderArticleVote();
                aVote.ArticleId = articleId;
                aVote.MemberId = currentMember.Id.Value;
                aVote.IsUpVote = voteValue > 0;
                aVote.IsDownVote = voteValue < 0;
                aVote.Save();

                ProviderArticle anArticle = new ProviderArticle(articleId);
                viewModel.StatusCode = AjaxReturnMsgVM.Status.success;
                viewModel.Content = InsideWordUtility.FormatVotes(anArticle.CountVotes);
                ProviderMember author = anArticle.Author;
                if (aVote.IsUpVote &&
                    author != null &&
                    author.Id != currentMember.Id &&
                    author.HasValidAltId(ProviderAlternateMemberId.AlternateType.Email))
                {
                    // do some calculations to determine if we should send the e-mail
                    int voteCount = anArticle.CountVotes;
                    int n = (int)Math.Log((double)voteCount, 2);
                    if (n < 0) { n = 0; }
                    if (voteCount % (1 << n) == 0)
                    {
                        EmailManager.Instance.SendVoteNotificationEmail(author.Emails[0].Email, anArticle);
                    }
                }
            }

            return Json(viewModel);
        }