Y por fin!! último problema y acabo ya del todo el módulo Prácticas

Y por fin!! último problema y acabo ya del todo el módulo Prácticas

de Nadyare Pérez -
Número de respuestas: 0
Y ya para finalizar me falla una cosa pero no sé muy bien si en el formulario o dónde, yo creo que en el formulario.

Resulta que en el formulario puse que se introdujera la fecha de inicio de las prácticas para cada uno de los grupos, pero no sé porque me coge null. Y el caso es que también estoy cogiendo el nombre del profesor que va a dar clase a cada grupo y tendría que ser lo mismo, porque están en igual nivel, pero no, el profesor me lo coge bien pero la fecha no.

A ver, os pongo en situación:

- En mod_form.php tengo:
// Horarios
$repeatarray=array();
$repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('group','practical').' {no}');
$repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('schedule','practical').' {no}', 'maxlength="50"');
$repeatarray[] = &MoodleQuickForm::createElement('hidden', 'optionid', 0);
$repeatarray[] = &MoodleQuickForm::createElement('text', 'teacher', get_string('teacher','practical'), 'maxlength="50"');
$repeatarray[] = &MoodleQuickForm::createElement('date_selector', 'starttime', get_string('start','practical'));

Con lo que me aparece en el formulario algo como esto:

Grupo 1 -----------------------------------------------------
|
| Horario 1 (cuadro de texto)
| Profesor (cuadro de texto)
| Fecha de inicio (cuadro de texto)
|---------------------------------------------------------------

Bueno pues luego en el formulario hago un preprocesamiento de los datos así:

$options = get_records_menu('practical_options','practicalid', $this->_instance, 'id', 'id,text');
$options2 = get_records_menu('practical_options','practicalid',$this->_instance, 'id', 'id,maxpositions');
$options3 = get_records_menu('practical_options','practicalid',$this->_instance, 'id', 'id, teacher');

// Almacena los campos id (como clave) y starttime (como valor) de las relaciones de la tabla practical_options que cumplan la restricción
$options4 = get_records_menu('practical_options','practicalid',$this->_instance, 'id', 'id, starttime');

if (!empty($this->_instance) and $options and $options2 and $options3 and $options4) {
$practicalids=array_keys($options); // almacena los ids de los horarios
$options=array_values($options); // almacena los textos de los horarios
$options2=array_values($options2); // almacena el límite de plazas
$options3=array_values($options3); // almacena los profesores encargados
$options4=array_values($options4); // almacena las fechas de incio de los grupos

// Para cada id de horario
foreach (array_keys($options) as $key){
$default_values['option['.$key.']'] = $options[$key]; // almacena su texto correspondiente
$default_values['limit['.$key.']'] = $options2[$key]; // almacena el límite de plazas
$default_values['optionid['.$key.']'] = $practicalids[$key]; // almacena su id correspondiente
$default_values['teacher['.$key.']'] = $options3[$key]; // almacena el profesor encargado
$default_values['starttime['.$key.']'] = $options4[$key]; //almacena la fecha de inicio del grupo
}
}

// Hace que inicialmente esté deshabilitada la restricción temporal
if (empty($default_values['timeopen'])) {
$default_values['timelimitenable'] = 0;
} else {
$default_values['timelimitenable'] = 1;
}

// Hace que inicialmente esté deshabilitada la opción de establecer
// fechas de inicio para las prácticas
if (empty($default_values['starttime'])) {
$default_values['start'] = 0;
} else {
$default_values['start'] = 1;
}
}

Hago exactamente lo mismo que para los profesores.

- Luego en lib.php tengo:

function practical_add_instance($practical) {
$practical->timemodified = time();

// Si no hay restricción temporal, le asigna el valor 0
// a timeopen y timeclose
if (empty($practical->timelimitenable)) {
$practical->timeopen = 0;
$practical->timeclose = 0;
}

// Inserta una relación en la tabla practical y devuelve su identificador
// Si se inserta correctamente, crea la relación correspondiente en la tabla
// practical_options
if ($practical->id = insert_record("practical", $practical)) {

// Para cada una de los horarios disponibles
foreach ($practical->option as $key => $value) {
$value = trim($value); // elimina espacios en blanco del principio y final de una cadena

// Si existe y no es vacío, se crea un nuevo objeto que contiene el horario
// y el identificador de la instancia
if (isset($value) and $value <> '') {

$option = new object();
$option->text = $value;
$option->practicalid = $practical->id;
$option->teacher = $practical->teacher[$key];

// Si hay límite de plazas se le asigna al nuevo objeto en el campo correspondiente
if (isset($practical->limit)) {
$option->maxpositions = $practical->limit;
}

// Si se van a especificar las fechas de inicio de cada grupo de prácticas,
// asignárselo al nuevo objeto en el campo correspondiente
if (isset($practical->start)) {
$option->starttime = $practical->starttime[$key];
}

$option->timemodified = time();

// Inserta las relaciones en la tabla practical_options
insert_record("practical_options", $option);
}
}
}

// Retorna el id de la Práctica
return $practical->id;
}

- Y luego en lib.php tengo otra función para asignarle los parámetros a la variable $practical en la que tengo:

function practical_get_schedules($practicalid) {

// Almacena la primera relación de la tabla practical que cumpla la restricción
$practical = get_record('practical', 'id', $practicalid);

// Si hay alguna
if ($practical) {

// Almacena las relaciones de la tabla practical_options que cumplan la restricción
$options = get_records('practical_options', 'practicalid', $practicalid, 'id');

// Si hay alguna
if ($options) {

// Para cada una de ellas obtiene el texto del horario, el límite de plazas,
// el día de comienzo de las prácticas y el profesor encargado
foreach ($options as $option) {

$practical->option[$option->id] = $option->text;
$practical->maxpositions[$option->id] = $option->maxpositions;
$practical->starttime[$option->id] = $option->starttime;
$practical->teacher[$option->id] = $option->teacher;
}
return $practical;
}
}
return false;
}

- Y llegados a este punto hago var_dump($practical) y me sale todo bien, el profesor y todo pero el starttime=>array3 {NULL, NULL, NULL}. Y si alguien se lo pregunta el start que tengo para habilitar o deshabilitar las fechas de inicio está habilitado y a 1.

Bueno después de todo este rollo... ¿Alguna idea?

Mil gracias a todos!!!
Promedio de valoraciones: -