Example #1
0
 /// <summary>
 /// Adds a tag to the collection of tags. The same tag will not be added twice (it will be silently ignored)
 /// </summary>
 /// <param name="tag"></param>
 public virtual void AddTag(XsTag tag)
 {
     if (!Tags.Contains(tag))
     {
         tag.AddQuestion(this);
         Tags.Add(tag);
     }
 }
Example #2
0
 /// <summary>
 /// Adds a tag to the collection of tags. The same tag will not be added twice (it will be silently ignored)
 /// </summary>
 /// <param name="tag"></param>
 public virtual void AddTag(XsTag tag)
 {
     if (!Tags.Contains(tag))
     {
         //tag.AddEntity(this);
         Tags.Add(tag);
     }
 }
        public MockWikiArticleRepository()
        {
            if (null == mockArticle)
            {
                mockArticle = new WikiArticle();
                XsUser mockUser = new MockXsUserRepository().GetById(100);

                mockArticle.ID = IdGenerator.GetNextID(ENTITY_TYPE);
                mockArticle.CreationDT = DateTime.UtcNow;
                mockArticle.UpdateDT = DateTime.UtcNow;
                mockArticle.LastUpdator = "Marius";
                mockArticle.Title = "What Was Stack Overflow Built With?";
                mockArticle.Content = "What was Stack Overflow built with? Some even wondered if Stack Overflow was built in Ruby on Rails. I consider that a compliment! This question has been covered in some detail in our podcasts, of course, but I know not everyone has time to listen to a bunch of audio footage to find the answer to their question. So, in that spirit, here’s the technology “stack” of Stack Overflow, the stuff Jarrod, Geoff, and I used to build it:";

                mockArticle.Author = mockUser;
                mockArticle.Status = XsStatus.Published;
                mockArticle.PublishedDT = DateTime.UtcNow;
                XsTag tag1 = new XsTag();
                tag1.Name = ".NET";
                mockArticle.AddTag(tag1);

                XsTag tag2 = new XsTag();
                tag2.Name = "MVC";
                mockArticle.AddTag(tag2);
            }

            if (null == articles)
            {

                articles = new List<WikiArticle>();

                for (int i = 0; i <= 100; i++)
                {
                    WikiArticle article = new WikiArticle();

                    int nextID = IdGenerator.GetNextID(ENTITY_TYPE);
                    article.ID = nextID;
                    article.LastUpdator = "Marius " + String.Format("{000}", nextID);
                    article.Title = "What Was Stack Overflow Built With? " + String.Format("{000}", nextID);
                    article.Content = "What was Stack Overflow built with? Some even wondered if Stack Overflow was built in Ruby on Rails. I consider that a compliment! This question has been covered in some detail in our podcasts, of course, but I know not everyone has time to listen to a bunch of audio footage to find the answer to their question. So, in that spirit, here’s the technology “stack” of Stack Overflow, the stuff Jarrod, Geoff, and I used to build it:";

                    article.Author = new MockXsUserRepository().GetById(nextID);
                    article.Status = XsStatus.Published;
                    article.PublishedDT = DateTime.UtcNow;

                    XsTag tag1 = new XsTag();
                    tag1.Name = ".Net " + String.Format("{000}", nextID);
                    article.AddTag(tag1);

                    XsTag tag2 = new XsTag();
                    tag2.Name = "MVC  " + String.Format("{000}", nextID);
                    article.AddTag(tag2);
                    articles.Add(article);
                }
            }
        }
        public MockXsQuestionRepository()
        {
            if (null == mockQuestion)
            {
                mockQuestion = new XsQuestion();
                XsUser mockUser = new MockXsUserRepository().GetById(100);

                mockQuestion.ID = IdGenerator.GetNextID(ENTITY_TYPE);
                mockQuestion.CreationDT = DateTime.UtcNow;
                mockQuestion.UpdateDT = DateTime.UtcNow;
                mockQuestion.LastUpdator = "Marius";
                mockQuestion.Title = "What Was Stack Overflow Built With?";
                mockQuestion.Content = "What was Stack Overflow built with? Some even wondered if Stack Overflow was built in Ruby on Rails. I consider that a compliment! This question has been covered in some detail in our podcasts, of course, but I know not everyone has time to listen to a bunch of audio footage to find the answer to their question. So, in that spirit, here’s the technology “stack” of Stack Overflow, the stuff Jarrod, Geoff, and I used to build it:";

                mockQuestion.Author = mockUser;
                mockQuestion.Status = XsStatus.Published;
                mockQuestion.PublishedDT = DateTime.UtcNow;
                XsTag tag1 = new XsTag();
                tag1.Name = ".NET";
                mockQuestion.AddTag(tag1);

                XsTag tag2 = new XsTag();
                tag2.Name = "MVC";
                mockQuestion.AddTag(tag2);
            }

            if (null == questions)
            {

                questions = new List<XsQuestion>();

                for (int i = 0; i <= 100; i++)
                {
                    XsQuestion question = new XsQuestion();

                    int nextID = IdGenerator.GetNextID(ENTITY_TYPE);
                    question.ID = nextID;

                    question.LastUpdator = "Marius " + String.Format("{000}", nextID);
                    question.Title = "What Was Stack Overflow Built With? " + String.Format("{000}", nextID);
                    question.Content = "What was Stack Overflow built with? Some even wondered if Stack Overflow was built in Ruby on Rails. I consider that a compliment! This question has been covered in some detail in our podcasts, of course, but I know not everyone has time to listen to a bunch of audio footage to find the answer to their question. So, in that spirit, here’s the technology “stack” of Stack Overflow, the stuff Jarrod, Geoff, and I used to build it:";

                    question.Author = new MockXsUserRepository().GetById(nextID);
                    question.Status = XsStatus.Published;
                    question.PublishedDT = DateTime.UtcNow;

                    //tags
                    XsTag tag1 = new XsTag();
                    tag1.Name = ".Net " + String.Format("{000}", nextID);
                    question.AddTag(tag1);

                    XsTag tag2 = new XsTag();
                    tag2.Name = "MVC  " + String.Format("{000}", nextID);
                    question.AddTag(tag2);

                    //votes
                    int numberOfVotes = new Random().Next(5, 20);
                    for (int voteIndex = 0; voteIndex < numberOfVotes; voteIndex++)
                    {
                        XsVote vote = new XsVote();
                        vote.Type = VoteType.UpDown;
                        vote.User = new MockXsUserRepository().GetById(nextID);
                        vote.Value = Convert.ToInt16( voteIndex % 2);
                        question.AddVote(vote);
                    }

                    int numberOfAnswers = new Random().Next(10);
                    for (int answerIndex = 0; answerIndex < numberOfAnswers; answerIndex++)
                    {
                        XsAnswer answer = new XsAnswer();
                        answer.Content = "What do you really want to do? If you want to learn Clojure||ruby||C do that. If you just want to get it done do whatever is fastest for you to do. And at the very least when you say Clojure and library you are also saying Java and library, there are lots and some are very good(I don't know what they are though). And the same was said for ruby and python above. So what do you want to do?";
                        answer.Author = question.Author = new MockXsUserRepository().GetById(nextID);
                        answer.ID = IdGenerator.GetNextID("Answer");

                        question.AddAnswer(answer);
                    }

                    questions.Add(question);
                }
            }
        }
        public ActionResult Edit(long id, XsQuestion questionToSave, FormCollection collection)
        {
            try
            {
                questionToSave = questionRepository.GetById(id);

                if (null != questionToSave)
                {
                    questionToSave.RemoveAllTags();

                    questionToSave.Tags = new List<XsTag>();

                    String tags = RemoveExtraSpaces(collection["QuestionTags"].ToString());

                    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;
                            }
                            questionToSave.AddTag(currentTag);
                        }
                    }

                    questionToSave.Title = collection["Title"].ToString();
                    questionToSave.Content = collection["Content"].ToString();

                    questionToSave.ContentHtml = new Markdown().Transform(questionToSave.Content);
                    questionToSave.Excerpt = Utils.CreateContentExcerpt(questionToSave.ContentHtml);
                    questionToSave.UpdateDT = DateTime.UtcNow;

                    ModelState.AddModelErrors(questionToSave.GetRuleViolations());

                    if (ModelState.IsValid)
                    {
                        try
                        {
                            questionToSave.ToAddToSearchIndex = true;
                            questionRepository.Save(questionToSave);
                            return RedirectToAction("Details", "Questions", new { id = questionToSave.ID, seoName = questionToSave.SlugTitle });
                        }
                        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");

                        }
                    }
                    else
                    {
                        return View(questionToSave);
                    }
                }
            }
            catch
            {
                return View(questionToSave);
            }

            return View(questionToSave);
        }
        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();
        }