@@ -76,7 +76,7 @@ $routes->group('admin', ['filter' => 'admin_filter'], static function ($routes) | |||
$routes->get('encuesta/eliminar/(:segment)', 'Admin::eliminarEncuesta/$1', ['as' => 'admin_encuesta_eliminar']); | |||
$routes->get('respuestas/', 'Admin::respuestas', ['as' => 'admin_respuestas']); | |||
$routes->get('respuesta/(:segment)/(:segment)', 'Admin::respuesta/$1/$2', ['as' => 'admin_respuesta']); | |||
$routes->get('respuestas/(:segment)', 'Admin::respuestasEncuesta/$1', ['as' => 'admin_respuestas_encuesta']); | |||
$routes->get('encuesta/(:segment)/respuestas', 'Admin::respuestasEncuesta/$1', ['as' => 'admin_respuestas_encuesta']); | |||
// PREGUNTAS | |||
$routes->match(['get', 'post'], 'encuesta/(:segment)/pregunta/', 'Admin::nuevaPregunta/$1', ['as' => 'admin_pregunta_nueva']); | |||
@@ -312,7 +312,39 @@ class Admin extends BaseController | |||
public function respuestasEncuesta($surveyId) | |||
{ | |||
echo 'todas las respuestas de esta encuesta'; | |||
if (!$respuestas = model(RespuestaModel::class)->getRespuestasAll($surveyId)) { | |||
return redirect()->route('admin_respuestas')->with('msg', array( | |||
'type' => 'danger', | |||
'body' => 'No se encontraron respuestas de para esta encuesta.', | |||
)); | |||
} | |||
// Agrupar respuestas por usuario | |||
$respuestas = array_reduce($respuestas, function (array $accumulator, array $element) { | |||
$accumulator[$element['user_id']][] = $element; | |||
return $accumulator; | |||
}, []); | |||
// reset array keys | |||
$respuestas = array_values($respuestas); | |||
// Agrupar respuestas de opción múltiple | |||
foreach ($respuestas as &$respuesta) { | |||
$respuesta = array_reduce($respuesta, function (array $accumulator, array $element) { | |||
$accumulator[$element['question_id']][] = $element; | |||
return $accumulator; | |||
}, []); | |||
$respuesta = array_values($respuesta); | |||
} | |||
unset($respuesta); | |||
$data = [ | |||
'tituloEncuesta' => model(EncuestaModel::class)->find($surveyId)['title'], | |||
'preguntas' => model(PreguntaModel::class)->getPreguntas($surveyId), | |||
'respuestas' => $respuestas, | |||
]; | |||
// dd($respuestas); | |||
return view('Admin/respuestasGenerales', $data); | |||
} | |||
public function respuesta($surveyId, $userId) | |||
@@ -29,4 +29,15 @@ class RespuestaModel extends Model | |||
->where($where) | |||
->findAll(); | |||
} | |||
public function getRespuestasAll($survey_id) | |||
{ | |||
$db = db_connect(); | |||
$where = 'answers.survey_id = ' . $db->escape($survey_id); | |||
return $this | |||
->select('answers.id, answers.survey_id, answers.user_id, answers.answer,answers.question_id, questions.question, questions.type') | |||
->join('questions', 'answers.question_id = questions.id') | |||
->where($where) | |||
->findAll(); | |||
} | |||
} |
@@ -0,0 +1,78 @@ | |||
<?= $this->extend('templates/baseAdmin') ?> | |||
<?= $this->section('content') ?> | |||
<script src="https://code.jquery.com/jquery-3.5.1.js"></script> | |||
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script> | |||
<script src="https://cdn.datatables.net/1.12.1/js/dataTables.bootstrap5.min.js"></script> | |||
<h1><?= $tituloEncuesta ?></h1> | |||
<div class="card"> | |||
<div class="card-body"> | |||
<table id="table-solicitudes" class="table table-bordered table-striped"> | |||
<thead> | |||
<th>ID usuario</th> | |||
<?php foreach ($preguntas as $pregunta) : ?> | |||
<th><?= $pregunta['question'] ?></th> | |||
<?php endforeach ?> | |||
</thead> | |||
<tbody> | |||
<?php foreach ($respuestas as $user) : ?> | |||
<tr> | |||
<td><?= $user[0][0]['user_id'] ?></td> | |||
<?php foreach ($user as $respuesta) : ?> | |||
<!-- Respuestas de opción múltiple --> | |||
<?php if ($respuesta[0]['type'] === '3') : ?> | |||
<td> | |||
<?php foreach ($respuesta as $opcion) : ?> | |||
<?= $opcion['answer'] ?> | |||
<br> | |||
<?php endforeach ?> | |||
</td> | |||
<?php else : ?> | |||
<td><?= $respuesta[0]['answer'] ?></td> | |||
<?php endif ?> | |||
<?php endforeach ?> | |||
</tr> | |||
<?php endforeach ?> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<script> | |||
document.addEventListener('DOMContentLoaded', function() { | |||
let table = new DataTable('#table-solicitudes', { | |||
'searching': true, | |||
'ordering': true, | |||
'language': { | |||
"decimal": "", | |||
"emptyTable": "No hay información", | |||
"info": "Mostrando _START_ a _END_ de _TOTAL_ registros", | |||
"infoEmpty": "Mostrando 0 to 0 of 0 registros", | |||
"infoFiltered": "(Filtrado de _MAX_ total registros)", | |||
"infoPostFix": "", | |||
"thousands": ",", | |||
"lengthMenu": "Mostrar _MENU_ registros", | |||
"loadingRecords": "Cargando...", | |||
"processing": "Procesando...", | |||
"search": "Buscar:", | |||
"zeroRecords": "No se encontraron resultados", | |||
"paginate": { | |||
"first": "Primero", | |||
"last": "Ultimo", | |||
"next": "Siguiente", | |||
"previous": "Anterior" | |||
} | |||
}, | |||
'order': [], | |||
}); | |||
}); | |||
</script> | |||
<?= $this->endSection() ?> |