UNIMOODLE / moodle-mod_hybridteaching

P1
Other
2 stars 0 forks source link

refactor: attendance_action.php y situaciones similares #115

Open moodleulpgc opened 8 months ago

moodleulpgc commented 8 months ago

Se incluyen aquí varios bloques de código con múltiples IFs y código repetitivo, spagetificado Por ejemplo

    case 'view':
        if ($view == 'sessionattendance') {
            redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
                ['id' => $moduleid, 'sessionid' => $sessionid, 'view' => 'extendedsessionatt']));
        }

        if ($view == 'extendedsessionatt') {
            redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
                ['id' => $moduleid, 'sessionid' => $sessionid, 'view' => 'attendlog', 'attid' => $attid, 'userid' => $userid]));
        }

        if ($view == 'studentattendance') {
            $log ? $rview = 'attendlog' : $rview = 'extendedsessionatt';
            redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
                ['id' => $moduleid, 'sessionid' => $sessionid, 'view' => $rview, 'attid' => $attid, 'userid' => $userid]));
        }

        if ($view == 'extendedstudentatt') {
            redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
                ['id' => $moduleid, 'sessionid' => 0, 'view' => 'studentattendance', 'attid' => $attid, 'userid' => $userid]));
        }
        if ($view == 'studentattsessions') {
            redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
                ['id' => $moduleid, 'sessionid' => $sessionid, 'view' => 'attendlog', 'userid' => $userid, 'attid' => $attid]));
        }
        break;
    case 'userinf':
        redirect($return = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php',
            ['id' => $moduleid, 'sessionid' => 0, 'view' => 'studentattendance', 'attid' => $attid,
            'userid' => $attendancecontroller::hybridteaching_get_attendance_from_id($attid)->userid, ]));
        break;

Pero incluir $CFG->wwwroot es percetamenet inútil. Y todas la url van a la misma base. Sería mucho más corto declarar antes del blqoue d eiff $url = new moodle_url($CFG->wwwroot . '/mod/hybridteaching/attendance.php', ['id' => $moduleid, 'sessionid' => $sessionid, 'view' => ''])); y luego ir cambiando/añadiendo los parámetros necesarios con $url->param() en cada IF Si acaso el redirect de hace como

$url->param('param', 'value');
redirect( clone $url),

En otras partes se repiten bloques

        echo $OUTPUT->header();
        echo  alguna cosa variable                          //$attendancerenderer->print_attendance_bulk_table($attendsid);
        echo $mform->display();
        echo $OUTPUT->footer();

Que se pueden pasar fuera del case, y se ejecutan para todos, con una variable transitoria para la parte variable, o bien encapsular en una función del renderer: Instanciar el renderer y llamar a un método

$renderer = $PAGE->get_renderer('mod_hybridteaching');

function print_attendance_action($mform, string $beforeform) { echo $this>header(); echo $beforeform); echo $mform->display(); echo $this>footer(); }

También otra refactorización (alternativa o simultánea) consiste en separar la parte en la que se ejecutan acciones (sin ya interfaz, todos lso datos disponibles). Esa parte debe estar colocada al inicio dle script para, en su caso, poder hacer redirect() a la nueva lpágina.

Si ya no hay acciones que procesar, entonces SI se puede llamar a echo $OUTPUT->header(); para inicializar la página y mostrar un interfaz en esta página. Esa simple reorganización evitaría buena parte de esos bloques repetitivos espagetizados.

tmas0 commented 3 weeks ago

Buenas @mcalvoisyccom,

Si observando lo mismo que os comentó en su momento @moodleulpgc

https://github.com/UNIMOODLE/moodle-mod_hybridteaching/blob/1cfb293415322c7e814e8330b3744c369c58730f/attendance.php#L74

Por ejemplo, el optional_param https://github.com/UNIMOODLE/moodle-mod_hybridteaching/blob/1cfb293415322c7e814e8330b3744c369c58730f/attendance.php#L98 sale igual que en la línea https://github.com/UNIMOODLE/moodle-mod_hybridteaching/blob/1cfb293415322c7e814e8330b3744c369c58730f/attendance.php#L75

Un saludo