PageRenderTime 25ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/apps/frontapp/modules/survey/actions/actions.class.php

https://github.com/erickjth/SurveysAdmin
PHP | 356 lines | 235 code | 67 blank | 54 comment | 44 complexity | 6485fda6963eaf38f97f3f1c33a8dff6 MD5 | raw file
  1. <?php
  2. /**
  3. * survey actions.
  4. *
  5. * @package sf_sandbox
  6. * @subpackage survey
  7. * @author Your name here
  8. * @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
  9. */
  10. class surveyActions extends sfActions {
  11. /**
  12. * Executes index action
  13. *
  14. * @param sfRequest $request A request object
  15. */
  16. public function executeIndex(sfWebRequest $request) {
  17. if ($moodle_user_id = $this->getUser()->getUserMoodle()) {
  18. $courses = Doctrine::getTable("MdlCourse")->getCourseByUser($moodle_user_id, 5);
  19. if (count($courses)) {
  20. $assign_total_count = 0;
  21. $status_count = 0;
  22. //Instancio conexion a la base de datos en MongoDB
  23. $ss_instance = MongoManager::getConention();
  24. //Obtengo una instancia de la coleccion
  25. $assignments = $ss_instance->getCollection("assignments");
  26. $surveys = $ss_instance->getCollection("surveys");
  27. //Almacen de encuestas asignidas
  28. $survey_assignments = array();
  29. foreach ($courses as $key => $course) {
  30. //Consultar asignaciones del curso.
  31. $course_assignment = $assignments->find(array('course_id' => (int)$course["id"]));
  32. if( !$course_assignment->count() )
  33. continue;
  34. foreach($course_assignment as $_id => $assign){
  35. //Obtengo información de la encuesta asignada
  36. $survey = $surveys->findOne(
  37. array(
  38. "_id"=>new MongoId($assign["survey_id"])
  39. ),array("_title")
  40. );
  41. if(!count($survey))continue;
  42. $collection_result_survey = $ss_instance->getCollection("r".$survey["_id"]);
  43. $result = $collection_result_survey->findOne(
  44. array(
  45. "assign_id"=>(string)$assign["_id"],
  46. "user_id"=>$moodle_user_id,
  47. )
  48. );
  49. $assign_total_count++;
  50. $status_count += ( (count($result))?( ($result["state"])?1:0 ):-1 );
  51. //Guardo información de la encuesta
  52. $survey_assignments[] = array(
  53. "assign_id"=> $_id,
  54. "survey_name"=> $survey["_title"],
  55. "state"=>( (count($result))?( ($result["state"])?1:0 ):-1 )
  56. );
  57. }
  58. }
  59. //Cierro la conexion de la instancia
  60. $ss_instance->close();
  61. if($status_count == $assign_total_count){
  62. if( $request->isXmlHttpRequest() ){
  63. return sfView::NONE;
  64. }
  65. ////NO TIENE CURSOS
  66. }else{
  67. if( $request->isXmlHttpRequest() ){
  68. //$this->target_link = "target='_BLANK'";
  69. }
  70. }
  71. //PARA VISUALIZAR EN LA VISTA
  72. $this->survey_assignments = $survey_assignments;
  73. } else {
  74. //NO TIENE CURSOS
  75. return sfView::NONE;
  76. }
  77. }else {
  78. //NO ESTA LOGEADO
  79. return sfView::NONE;
  80. }
  81. }
  82. /**
  83. * Executes ViewSurvey action
  84. *Visualiza la encuesta para la asignación.
  85. * @param int $aid a Assignment ID
  86. * @param sfRequest $request A request object
  87. */
  88. public function executeViewSurvey(sfWebRequest $request) {
  89. if (!$moodle_user_id = $this->getUser()->getUserMoodle()) {
  90. //NO ESTA LOGEADO
  91. return sfView::NONE;
  92. }
  93. $assig_id = $request->getParameter("aid");
  94. if (!$assig_id) {
  95. $this->getUser()->setFlash("error", "No existe referencia para asignación!");
  96. //NO HAY REFERENCIA DE ENCUESTAS
  97. $this->redirect("survey/index");
  98. }
  99. //Instancio conexion a la base de datos en MongoDB
  100. $ss_instance = MongoManager::getConention();
  101. //Obtengo una instancia de la coleccion
  102. $assignments_collection = $ss_instance->getCollection("assignments");
  103. $surveys_collection = $ss_instance->getCollection("surveys");
  104. $course_assignment = $assignments_collection->findOne(array('_id' => new MongoID($assig_id)));
  105. if (!count($course_assignment)) {
  106. //NO EXISTE ASIGNACIÓN REFERENCIADA
  107. $this->getUser()->setFlash("error", "No existe asignación!");
  108. $ss_instance->close();
  109. $this->redirect("survey/index");
  110. }
  111. //no es del curso asignado el usuario
  112. if(! Doctrine::getTable("MdlCourse")->isUserInCourse($course_assignment["course_id"],$moodle_user_id)){
  113. $this->getUser()->setFlash("error", "Acceso denegado a la encuesta que trata de realizar!");
  114. $ss_instance->close();
  115. $this->redirect("survey/index");
  116. }
  117. $survey = $surveys_collection->findOne( array("_id"=>new MongoId($course_assignment["survey_id"]) ) );
  118. if(!count($survey)){
  119. //NO EXISTE ENCUESTA REFERENCIADA
  120. $this->getUser()->setFlash("error", "No existe encuesta. Por favor contactar al administrador!");
  121. $ss_instance->close();
  122. $this->redirect("survey/index");
  123. }
  124. $result_collection = $ss_instance->getCollection("r".$course_assignment["survey_id"]);
  125. $result = array();
  126. $result_survey = $result_collection->findOne(array(
  127. "user_id"=>$moodle_user_id,
  128. "assign_id"=>$assig_id
  129. ));
  130. if(!count($result_survey)){
  131. $result_survey = array();
  132. }
  133. $ss_instance->close();
  134. $this->result = $result_survey;
  135. $this->assignment = $course_assignment;
  136. $this->survey = $survey;
  137. }
  138. public function executeSaveAnswerSurvey(sfWebRequest $request) {
  139. //if request is ajax
  140. if (!$request->isXmlHttpRequest() && !$request->isMethod("POST")) {
  141. return $this->renderText("REQUEST ERROR");
  142. }
  143. if (!$moodle_user_id = $this->getUser()->getUserMoodle()) {
  144. //NO ESTA LOGEADO
  145. return sfView::NONE;
  146. }
  147. $assig_id = $request->getParameter("aid");
  148. //group de la pregunta
  149. $g = $request->getParameter("g");
  150. //numero de la pregunta
  151. $q = $request->getParameter("q");
  152. //subpreguntas
  153. $k = $request->getParameter("k");
  154. //valor de la pregunta
  155. $v = $request->getParameter("v");
  156. if (!$assig_id) {
  157. //NO HAY REFERENCIA DE ENCUESTAS
  158. echo "Error: Dont exist reference!!";
  159. return sfView::NONE;
  160. }
  161. if( (!is_numeric($q) && $q >= 0) && (!is_numeric($g) && $g>=0) ){return sfView::NONE;}
  162. if(!$k == "null" && !is_numeric($k) ){return sfView::NONE;}
  163. //Instancio conexion a la base de datos en MongoDB
  164. $ss_instance = MongoManager::getConention();
  165. //Obtengo una instancia de la coleccion
  166. $assignments_collection = $ss_instance->getCollection("assignments");
  167. $surveys_collection = $ss_instance->getCollection("surveys");
  168. $course_assignment = $assignments_collection->findOne(array('_id' => new MongoID($assig_id)));
  169. if (!count($course_assignment)) {
  170. //NO EXISTE ASIGNACIÓN REFERENCIADA
  171. $ss_instance->close();
  172. echo "Error: Dont exist assignment reference!!";
  173. return sfView::NONE;
  174. }
  175. $survey = $surveys_collection->findOne(
  176. array("_id"=>new MongoId( $course_assignment["survey_id"] ) )
  177. );
  178. if(!count($survey)){
  179. $ss_instance->close();
  180. echo "Error: Dont exist survey reference!!";
  181. return sfView::NONE;
  182. }
  183. $question = $survey["groups"][$g]["questions"][$q]["type"];
  184. $required = true;
  185. if($this->getUser()->validTypeQuestion($question["name"],$question["structure"],$v) || empty($v) ){
  186. $collection_name = "r".$survey["_id"];
  187. MongoManager::addRateToMongo(
  188. $collection_name,
  189. $moodle_user_id,
  190. $assig_id,
  191. $q, $v, $g, $k
  192. );
  193. echo "Saved succesfull!";
  194. } else {
  195. echo "Error!";
  196. }
  197. $ss_instance->close();
  198. return sfView::NONE;
  199. }
  200. public function executeFinishSurvey(sfWebRequest $request){
  201. if (!$request->isMethod("POST")) {
  202. return $this->renderText("REQUEST ERROR");
  203. }
  204. if (!$moodle_user_id = $this->getUser()->getUserMoodle()) {
  205. //NO ESTA LOGEADO
  206. return sfView::NONE;
  207. }
  208. $assig_id = $request->getParameter("aid");
  209. if (!$assig_id) {
  210. //NO HAY REFERENCIA DE ENCUESTAS
  211. $this->getUser()->setFlash("error", "No existe referencia para asignación!");
  212. $this->redirect("survey/index");
  213. }
  214. //Instancio conexion a la base de datos en MongoDB
  215. $ss_instance = MongoManager::getConention();
  216. //Obtengo una instancia de la coleccion
  217. $assignments_collection = $ss_instance->getCollection("assignments");
  218. $surveys_collection = $ss_instance->getCollection("surveys");
  219. $course_assignment = $assignments_collection->findOne(array('_id' => new MongoID($assig_id)));
  220. if (!count($course_assignment)) {
  221. //NO EXISTE ASIGNACIÓN REFERENCIADA
  222. $this->getUser()->setFlash("error", "No existe asignación! ");
  223. $ss_instance->close();
  224. $this->redirect("survey/index");
  225. }
  226. $survey = $surveys_collection->findOne(
  227. array("_id"=>new MongoId( $course_assignment["survey_id"] ) )
  228. );
  229. if(!count($survey)){
  230. $ss_instance->close();
  231. //NO EXISTE ENCUESTA REFERENCIADA
  232. $this->getUser()->setFlash("error", "No existe encuesta. Por favor contactar al administrador!");
  233. $this->redirect("survey/index");
  234. }
  235. $q = $request->getParameter("q");
  236. $collection_name = "r".$survey["_id"];
  237. $valid = true;
  238. foreach( $survey["groups"] as $k_g => $group ){
  239. foreach($group["questions"] as $k_q => $question ){
  240. $type = $question["type"];
  241. if(is_array($q[$k_g][$k_q] )){
  242. foreach($q[$k_g][$k_q] as $k_m => $sub ){
  243. if($this->getUser()->validTypeQuestion($type["name"],$type["structure"],$sub) || (!$required && empty ($sub) ) ){
  244. MongoManager::addRateToMongo(
  245. $collection_name,
  246. $moodle_user_id,
  247. $assig_id,
  248. $k_q, $sub, $k_g, $k_m
  249. );
  250. }else{
  251. $error = $type["name"].",q:".$k_q.",v: ".$v;
  252. $valid = false;
  253. }
  254. }
  255. }else{
  256. $v= $q[$k_g][$k_q];
  257. $required = true;
  258. if($this->getUser()->validTypeQuestion($type["name"],$type["structure"],$v ) || (!$required && empty ($v) ) ){
  259. MongoManager::addRateToMongo(
  260. $collection_name,
  261. $moodle_user_id,
  262. $assig_id,
  263. $k_q, $v, $k_g, null
  264. );
  265. }else{
  266. $error = $type["name"].",_,q:".$k_q.",v: ".$v;
  267. $valid = false;
  268. }
  269. }
  270. }
  271. }
  272. if( $valid ){
  273. $collection_survey = $ss_instance->getCollection($collection_name);
  274. $collection_survey->update(
  275. array('assign_id' => $assig_id, 'user_id' => $moodle_user_id),
  276. array('$set' => array("time" => time(), "state" => 1)),
  277. true
  278. );
  279. $this->getUser()->setFlash("notice", "Encuesta guardada correctamente. Gracias por participar. ");
  280. }else{
  281. $ss_instance->close();
  282. $this->getUser()->setFlash("error", "Algunos datos no son correctos, o no estan diligenciados. Por favor intente nuevamente!. ERROR: ".$error);
  283. $this->redirect("survey/viewSurvey?aid=$assig_id");
  284. }
  285. $ss_instance->close();
  286. $this->redirect("survey/index");
  287. return sfView::NONE;
  288. }
  289. }