Mmm... podrías usar la extensión (en desarrollo) Survey, aunque no tiene eventos PHP para usar, y no estoy seguro si sería factible, pero de serlo podrías usar la función
group_user_add()
y
group_user_del()
para añadir y eliminar del grupo.
En el caso de
group_user_add()
ya cuenta con verificación si existe el usuario en el grupo, regresará la cadena
GROUP_USERS_EXIST
; en
group_user_del()
la sentencia SQL simplemente será ignorada.
Suponiendo que las opciones de cada pregunta tienen los mismos valores, para contar los resultados podrías recorrer el array de preguntas
phpbb\request\request::variable_names()
, comparar los valores (con
phpbb\request\request::variable()
) e ir sumando los valores, ya con ello tienes más de la mitad del problema resuelto.
Te dejo un ejemplo muy cutre en PHP puro, ignora los ciclos
for
ya que solo fueron para generar las preguntas más fácilmente.
Código: Seleccionar todo
<?php
$html = '';
$resultados = [
'gespecial1' => 0,
'gespecial2' => 0,
'gespecial3' => 0,
'gespecial4' => 0
];
if (isset($_POST['submit'])) {
foreach ($_POST as $key => $value) {
if ($key == 'submit') {
continue;
}
foreach ($resultados as $k => $v) {
if ($value !== $k) {
continue;
}
$resultados[$value] += 1;
}
}
echo '<pre><code>';
var_dump($resultados);
echo '</code></pre>';
}
$html .= '<form action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '" method="POST">';
for($i = 1; $i <= 10; $i++) {
$html .= '<fieldset>';
$html .= '<legend>Pregunta ' . $i . '</legend>';
for ($j = 1; $j <= 4; $j++) {
switch($j) {
case 2:
$inciso = 'B';
break;
case 3:
$inciso = 'C';
break;
case 4:
$inciso = 'D';
break;
default:
$inciso = 'A';
break;
}
$html .= vsprintf(
'<input type="radio" name="pregunta_%1$d" value="gespecial%2$d" />%3$s',
[$i, $j, $inciso]
);
}
$html .= '</fieldset>';
}
$html .= PHP_EOL . '<button type="submit" name="submit">Enviar</button>';
$html .= '</form>';
echo $html;
Puedes probar el código en phptester.net
https://www.phpbb.com/community/viewtopic.php?t=2333241
https://github.com/phpbb/phpbb/blob/3.2 ... .php#L2672