public static String GetUserStatsForGUI(XsUser user)
        {
            String userStatsForGUI = String.Empty;

            if (null != user)
            {
                userStatsForGUI = String.Concat(user.QuestionCount.ToString(), " x Q | ", user.AnswerCount.ToString(), " x A");
            }

            return userStatsForGUI;
        }
        public static XsUser GetUserByUsername(String ntUsername)
        {
            XsUser user = null;
            if (!String.IsNullOrEmpty(ntUsername.Trim()))
            {
                IXsUserRepository userRepository = new UserRepository();
                user = userRepository.GetByUsername(ntUsername);

                if (null == user)
                {
                    user = new XsUser();
                    user.Username = ntUsername;
                    user.DisplayName = ntUsername;
                    user = userRepository.Save(user);
                }
            }

            return user;
        }
 public static String GetDisplayNameForGUI(XsUser user)
 {
     String displayNameForGUI = "<Anonymous>";
     if (null != user)
     {
         displayNameForGUI = user.DisplayName;
         if (String.IsNullOrEmpty(displayNameForGUI))
         {
             if (!String.IsNullOrEmpty(user.FirstName))
             {
                 displayNameForGUI = user.FirstName;
             }
             else if (!String.IsNullOrEmpty(user.LastName))
             {
                 displayNameForGUI = user.LastName;
             }
             displayNameForGUI = user.Username;
         }
     }
     return displayNameForGUI;
 }
        public ActionResult Answer(long ID, String AnswerContent)
        {
            XsQuestion questionToUpdate = null;

            try
            {
                questionToUpdate = questionRepository.GetById(ID);
            }
            catch (Exception ex)
            {
                log.Error(String.Format("Question GetById({0}) error: ", ID) + ex.Message);
            }

            if (null == questionToUpdate)
            {
                ViewData["EntityID"] = ID;
                return View("NotFound");
            }
            else
            {
                try
                {
                    XsAnswer answer = new XsAnswer();
                    answer.CreationDT = DateTime.UtcNow;
                    answer.UpdateDT = DateTime.UtcNow;
                    answer.Content = AnswerContent.Replace("<script", "[script").Replace("</script>", "[/script]");
                    answer.ContentHtml = new Markdown().Transform(answer.Content);

                    XsUser author = userRepository.GetByUsername(User.Identity.Name);

                    if (null == author)
                    {
                        author = new XsUser();
                        author.Username = User.Identity.Name;
                        author.AnswerCount = 1;
                    }
                    author.AnswerCount++;
                    answer.Author = author;

                    questionToUpdate.AddAnswer(answer);
                    questionRepository.Save(questionToUpdate);
                }
                catch (Exception ex)
                {
                    log.Error("There was an error when saving the question in the DB " + ex.Message + "Inner Exception " + ex.InnerException);
                    ViewData["ErrorMessage"] = "There was an error when saving the question in the DB!";
                    return View("Error");
                }
            }

            return RedirectToAction("Details", new { id = ID, seoName = questionToUpdate.SlugTitle });
        }
        public ActionResult Create(XsQuestion questionToCreate, String button, String QuestionTags)
        {
            questionToCreate.CreationDT = DateTime.UtcNow;
            questionToCreate.UpdateDT = DateTime.UtcNow;

            if (button.Equals("SaveDraft"))
            {
                questionToCreate.Status = XsStatus.Draft;
            }
            else
            {
                questionToCreate.Status = XsStatus.Published;
                questionToCreate.PublishedDT = DateTime.UtcNow;
            }

            String tags = RemoveExtraSpaces(QuestionTags);

            String[] qTags = tags.Split(' ');

            foreach (String tag in qTags)
            {
                if (!String.IsNullOrEmpty(tag))
                {
                    String tagInvariantName = tag.ToLowerInvariant();

                    XsTag currentTag = tagRepository.GetTagByName(tagInvariantName);

                    if (null == currentTag)
                    {
                        currentTag = new XsTag();
                        currentTag.Name = tagInvariantName;
                    }
                    questionToCreate.AddTag(currentTag);
                }
            }
            questionToCreate.Content = questionToCreate.Content.Replace("<script", "[script").Replace("</script>", "[/script]");
            questionToCreate.ContentHtml = new Markdown().Transform(questionToCreate.Content);
            questionToCreate.Excerpt = Utils.CreateContentExcerpt(questionToCreate.ContentHtml);

            ModelState.AddModelErrors(questionToCreate.GetRuleViolations());

            if (ModelState.IsValid)
            {
                try
                {
                    //TODO: to add other article attributes
                    XsUser author = userRepository.GetByUsername(User.Identity.Name);

                    if (null == author)
                    {
                        author = new XsUser();
                        author.Username = User.Identity.Name;
                        author.QuestionCount = 1;
                    }
                    author.QuestionCount++;
                    questionToCreate.Author = author;
                    questionRepository.Save(questionToCreate);

                    ViewData["QuestionTitle"] = questionToCreate.Title;
                    return View("Confirm");
                }
                catch (Exception ex)
                {
                    log.Error("There was an error when saving the question in the DB " + ex.Message + "Inner Exception " + ex.InnerException );
                    ViewData["ErrorMessage"] = "There was an error when saving the question in the DB!";
                    return View("Error");

                }
            }
            return View();
        }