Explorar el Código

Mostrar respuestas de todos los usuarios

encuestas-excel
Sergio hace 2 años
padre
commit
3322239d42
Se han modificado 4 ficheros con 123 adiciones y 2 borrados
  1. +1
    -1
      app/Config/Routes.php
  2. +33
    -1
      app/Controllers/Admin.php
  3. +11
    -0
      app/Models/RespuestaModel.php
  4. +78
    -0
      app/Views/Admin/respuestasGenerales.php

+ 1
- 1
app/Config/Routes.php Ver fichero

@@ -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']);


+ 33
- 1
app/Controllers/Admin.php Ver fichero

@@ -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)


+ 11
- 0
app/Models/RespuestaModel.php Ver fichero

@@ -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();
}
}

+ 78
- 0
app/Views/Admin/respuestasGenerales.php Ver fichero

@@ -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() ?>

Cargando…
Cancelar
Guardar