rendered paste bodyusing System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Mvc;
using System.Web.SessionState;
using CoopQI.Helpers;
using CoopQI.Models;
namespace CoopQI.Controllers
{
public class ServicesController : Controller
{
#region Json Actions
[HttpGet]
public JsonResult Index(int quizId)
{
Question currentQuestion = GetQuestion(quizId);
JsonResult result = Json(new
{
visitors = GetNbVisitors(quizId),
state = GetState(quizId),
question = currentQuestion == null ? -1 : currentQuestion.ID
});
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
}
[HttpPost]
public JsonResult GetQuiz(int quizId)
{
AddToConnectedPeople(quizId);
Quiz quiz = Quiz.GetFuckingEverything(quizId);
return Json(new JsonQuiz(quiz));
}
[HttpPost]
public JsonResult SubmitAnswer(int questionId, int answer, int quizId)
{
Question questionAnswered = Question.GetQuestion(questionId);
Question currentQuestion = GetQuestion(quizId);
if (answer < 1 || questionAnswered.NbAnswers < answer)
{
return Json(new
{
error = "answer out of bound",
visitors = GetNbVisitors(quizId),
state = GetState(quizId),
question = currentQuestion == null ? -1 : currentQuestion.ID,
count1 = questionAnswered.Answer1Count,
count2 = questionAnswered.Answer2Count,
count3 = questionAnswered.Answer3Count,
count4 = questionAnswered.Answer4Count,
countAll = questionAnswered.Answer1Count +
questionAnswered.Answer2Count +
questionAnswered.Answer3Count ?? 0 +
questionAnswered.Answer4Count ?? 0
});
}
switch (answer)
{
case 1:
questionAnswered.Answer1Count++;
break;
case 2:
questionAnswered.Answer2Count++;
break;
case 3:
questionAnswered.Answer3Count++;
break;
case 4:
questionAnswered.Answer4Count++;
break;
default: //Shouldn't happen
return Json(new
{
error = "answer out of bound",
visitors = GetNbVisitors(quizId),
state = GetState(quizId),
question = currentQuestion == null ? -1 : currentQuestion.ID,
count1 = questionAnswered.Answer1Count,
count2 = questionAnswered.Answer2Count,
count3 = questionAnswered.Answer3Count,
count4 = questionAnswered.Answer4Count,
countAll = questionAnswered.Answer1Count +
questionAnswered.Answer2Count +
questionAnswered.Answer3Count +
questionAnswered.Answer4Count
});
}
questionAnswered.Save();
return Json(new
{
visitors = GetNbVisitors(quizId),
state = GetState(quizId),
question = currentQuestion == null ? -1 : currentQuestion.ID,
count1 = questionAnswered.Answer1Count,
count2 = questionAnswered.Answer2Count,
count3 = questionAnswered.Answer3Count,
count4 = questionAnswered.Answer4Count,
countAll = questionAnswered.Answer1Count +
questionAnswered.Answer2Count +
questionAnswered.Answer3Count +
questionAnswered.Answer4Count
});
}
[HttpPost]
public JsonResult GetAnswers(int questionId, int quizId)
{
Question question = Question.GetQuestion(questionId);
Question currentQuestion = GetQuestion(quizId);
return Json(new
{
visitors = GetNbVisitors(quizId),
state = GetState(quizId),
question = currentQuestion == null ? -1 : currentQuestion.ID,
count1 = question.Answer1Count,
count2 = question.Answer2Count,
count3 = question.Answer3Count,
count4 = question.Answer4Count,
countAll = question.Answer1Count +
question.Answer2Count +
question.Answer3Count +
question.Answer4Count
});
}
[HttpPost]
public JsonResult SetState(string state, int quizId)
{
SetState(quizId, state);
return Index(quizId);
}
[HttpPost]
public JsonResult SetQuestion(int questionId, int quizId, FormCollection dummy)
{
SetQuestion(quizId, questionId);
return Index(quizId);
}
#endregion
#region Private Methods
private int GetNbVisitors(int quizId)
{
if (HttpContext.Application["Sessions" + quizId] == null)
{
HttpContext.Application["Sessions" + quizId] = new List<string>();
}
List<string> colSessions = (List<string>)HttpContext.Application["Sessions" + quizId];
return colSessions.Count;
}
private void AddToConnectedPeople(int quizId)
{
Session["quizId"] = quizId;
List<string> connectedPeople = ((List<string>)HttpContext.Application["Sessions" + quizId]) ??
new List<string>();
if (!connectedPeople.Contains(Session.SessionID))
{
connectedPeople.Add(Session.SessionID);
}
HttpContext.Application["Sessions" + quizId] = connectedPeople;
}
private string GetState(int quizId)
{
List<SqlParameter> colParams = new List<SqlParameter> { new SqlParameter("@key", "state" + quizId) };
var result = AccesBD.Current.ExecuteScalar("SELECT Value FROM Config WHERE [Key] = @key",
colParams, CommandType.Text);
return (result is DBNull || result == null) ? null : result.ToString();
}
private void SetState(int quizId, string state)
{
List<SqlParameter> colParams = new List<SqlParameter>
{
new SqlParameter("@key", "state" + quizId),
new SqlParameter("@state", state)
};
AccesBD.Current.ExecuteNonQuery("IF (SELECT COUNT(*) FROM Config WHERE [Key] = @key)>0 UPDATE Config SET Value = @state WHERE [Key] = @key ELSE INSERT Config ([Key], Value) VALUES (@key, @state)",
colParams, CommandType.Text);
}
private Question GetQuestion(int quizId)
{
List<SqlParameter> colParams = new List<SqlParameter> { new SqlParameter("@key", "question" + quizId) };
var result = AccesBD.Current.ExecuteScalar("SELECT Value FROM Config WHERE [Key] = @key",
colParams, CommandType.Text);
return (result is DBNull || result == null) ? null : Question.GetQuestion(int.Parse(result.ToString()));
}
private void SetQuestion(int quizId, int questionId, string state = null)
{
List<SqlParameter> colParams = new List<SqlParameter>
{
new SqlParameter("@key", "question" + quizId),
new SqlParameter("@state", questionId)
};
AccesBD.Current.ExecuteNonQuery("IF (SELECT COUNT(*) FROM Config WHERE [Key] = @key)>0 UPDATE Config SET Value = @state WHERE [Key] = @key ELSE INSERT Config ([Key], Value) VALUES (@key, @state)",
colParams, CommandType.Text);
}
#endregion
}
}