/** * A student is an user that participates in a course 'moodle/course:view' * and can't manage groups 'moodle/course:managegroups' * @global type $USER * @global type $DB * @param type $blended * @param type $course * @param type $context_course * @return \stdClass */ function alert_messages($blended, $course, $context_course) { global $USER, $DB; $alert = new stdClass(); //Ningún estudiante está matriculado $alert->no_students_in_course_alert = true; // Ningún estudiante está activo $alert->none_is_active_alert = true; // Hay estudiantes inactivos $alert->student_not_active_alert = false; $alert->iamstudent = false; $alert->no_DNI_alert = false; $alert->no_userinfodata_alert = false; list($students, $non_students, $activeuserids, $user_records) = blended_get_users_by_type($context_course); if ($students) { $alert->no_students_in_course_alert = false; // Comprobamos que al menos hay un estudiante activo (ha entrado al menos una vez) // en el curso. Nos devuelve array con todos los estudiantes if (count($activeuserids) > 0) { // Se desactiva la alerta de que ningún estudiante está activo si el array tiene // al menos un elemento $alert->none_is_active_alert = false; } } // Devuelve un array que contiene todos los valores de $alluserids que no // aparezcan $activeuserids, es decir, los estudiantes inactivos $inactivemembers = array_diff($students, $activeuserids); //Comprobamos si el usuario está activo if (count($inactivemembers) > 0) { $alert->student_not_active_alert = true; $alert->inactive_students = $inactivemembers; } foreach ($students as $student) { // $user = get_record('user','id',$student->id); $user = $student; $code = blended_gen_idvalue($user_records[$student], $blended); //print $code.'<BR>'; // Código EAN a partir de `idnumber` (dni): el estudiante no lo ha introducido // en su perfil: $code == -1 if ($code == -1 && $blended->idtype == 2) { $alert->no_DNI_alert = true; } else { if ($code == -2 && ($blended->idtype = 3)) { $alert->no_userinfodata_alert = true; } } // Comprobar si el usuario actual del modulo es un estudiante if ($user_records[$student]->id === $USER->id) { $alert->iamstudent = true; break; } } return $alert; }
$strnone = get_string('noselected', 'blended'); $strnosigned = get_string('nodefinedteams', 'blended'); // Print the main part of the page ----------------------------------------------- $link = "selectassignment.php?id=" . $cm->id; $PAGE->navbar->add($strsignupteampage, $link); $PAGE->navbar->add('Inscribirse'); echo $OUTPUT->header(); echo $OUTPUT->spacer(array('height' => 20)); echo $OUTPUT->heading(format_string($strsignupteampage) . ' ' . blended_get_item_name($item) . $OUTPUT->help_icon('signupteampage', 'blended')); echo $OUTPUT->spacer(array('height' => 20)); // Get all teams in the current activity--------------------------------------- $grouping = blended_get_grouping($item, $blended); $teams = blended_get_teams($item, true); $not_DNI_out = false; $not_DNI_in = false; $code = blended_gen_idvalue($USER, $blended); // Si el id es el dni y el estudiante no lo ha introducido en su perfil if ($code == -1) { $not_DNI_in = true; $not_DNI_out = true; } $url14 = "selectassignment.php?id={$cm->id}"; if ($not_DNI_in) { echo $OUTPUT->notification("Hasta que posea código de identififación no puede inscribirse en ningun equipo", $url14); } // Flags de control -------------------------------------------------------------- // Flag para imprimir el boton "Eliminar miembros" $printdeletebutton = false; $current_member_enrolled = false; // Compruebo si el profesor ha creado previamente un agrupamiento para esa tarea $groupingid = blended_get_groupingid($item);
function blended_print_student_label($pdf, $blended, $codebartype, $style, $identifyLabels, $user, $columnsWidth, $rowsHeight) { $x = $pdf->getX(); $y = $pdf->getY(); $align = ''; $code = blended_gen_idvalue($user, $blended); // if($identifyLabels!='none') $identifyHeight = 3; // else // $identifyHeight=0; switch ($identifyLabels) { case 'fullname': $idText = fullname($user); break; case 'id': $idText = $code; break; //blended_gen_cleanidvalue($user,$blended);break; // cleanidvalue do not include checksum needed for EAN13 //blended_gen_cleanidvalue($user,$blended);break; // cleanidvalue do not include checksum needed for EAN13 case 'none': $idText = ''; break; case 'code': $idText = "ID:{$code}"; } if ($code == -1 || $code == -2) { $pdf->writeHTMLCell($columnsWidth, $rowsHeight - $identifyHeight, '', '', fullname($user) . ": No posee código de identificación.", 0, 2, 0, true, 'C'); } else { switch ($codebartype) { case 'EAN13': if ($identifyLabels != 'none' && $identifyLabels != 'code') { $pdf->Cell($columnsWidth, $identifyHeight, $idText, '', 2, 'L', 0, '', 0); } $pdf->SetXY($x, $identifyHeight + $y); $pdf->write1DBarcode($code, $codebartype, '', '', $columnsWidth, $rowsHeight - $identifyHeight, 0.2, $style, $align); default: $dim = min($columnsWidth, $rowsHeight); if ($identifyLabels != 'none') { // $pdf->SetXY($x+$dim,$identifyHeight+$y); $pdf->writeHTMLCell($columnsWidth - $dim, $rowsHeight, '', '', $idText, 0, 0); } else { $pdf->writeHTMLCell($columnsWidth - $dim, $rowsHeight, '', '', "ID not shown.", 0, 0); } $pdf->SetXY($x + $columnsWidth - $dim, $y); $pdf->write2DBarcode($code, $codebartype, $x + $columnsWidth - $dim + 2, $y + 2, $dim - 4, $dim - 4); // $pdf->writeBlended2DBarcode($code,'QRCode,Q',$x+$columnsWidth-$dim,$y,$dim,$dim); break; } } $pdf->Rect($x, $y, $columnsWidth, $rowsHeight); }
// $emptyteam=false; if (!($user = $DB->get_record('user', array('id' => $memberuserid)))) { $emptyteam = true; } if (!$emptyteam) { // Foto y vinculo a perfil de `user` if ($piclink = has_capability('moodle/user:viewdetails', $context) || has_capability('moodle/user:viewdetails', $usercontext)) { $userpic = $OUTPUT->user_picture($user); $profilelink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '&course=' . $course->id . '">' . fullname($user, true) . '</a>'; } // Estudiante lider de un equipo if (isset(current($members)->leader) && current($members)->leader == 1) { $profilelink = '<strong>' . $profilelink . ' (leader)' . '</strong>'; } // ID del miembro del equipo $membervalue = blended_gen_idvalue(current($members), $blended); if ($membervalue == -1) { $membervalue = "\"\""; $stridnumber = get_string('withoutidnumber', 'blended'); } else { if ($membervalue == -2) { $membervalue = "\"\""; $stridnumber = get_string('withoutuserinfodata', 'blended'); } else { $stridnumber = ""; $membervalue = blended_generate_memberid_field(current($members), $blended); } } if ($membervalue == ' ') { prev($members); continue;
function blended_generate_groups_table($item, $blended, $is_grading = true) { global $DB, $OUTPUT, $CFG; $context_course = context_course::instance($item->courseid); $context = context_module::instance($blended->id); //Obtenci�n de los grupos del agrupamiento asociado a la tarea elegida //Obtengo los parámetros del agrupamiento $grouping = blended_get_grouping($item, $blended); $groups = groups_get_all_groups($item->courseid, null, $grouping->id); $i = 0; //Introducci�n de los miembros del agrupamiento en un vector // array[groupid][userid] for group/members $group_members = []; $users_in_teams = []; $numteams = count($groups) + 1; $nummembers = 0; foreach ($groups as $gr) { $members_loc = groups_get_members($gr->id); // obtengo el numero de cuadros a poner en el formulario segun la // maxima longitud del mayor equipo if ($nummembers < count($members_loc)) { $nummembers = count($members_loc); } $group_members[$gr->id] = $members_loc; $users_in_teams = array_merge($users_in_teams, $members_loc); } //Contador del numero de repticiones de cada miembro $repetir_miembro = blended_num_members($context_course, $group_members, 'teamsmanagement'); //Introduzco un cuadro m�s por si se desea introducir otro miembro $nummembers = $nummembers + 1; $t = 0; $stridteam = get_string('idteam', 'blended'); $stridmembers = get_string('idmembers', 'blended'); $strgrade = get_string('grade', 'blended'); $stralertcol = get_string('viewalertsdesc', "blended"); $strnone = get_string('nograded', 'blended'); $strrewritegrades = get_string('rewritegrades', 'blended'); //Grading //Obtengo las calificaciones(Si existen) de los miembros tanto de la tabla "blended_grade" con de "grade_grades" if ($is_grading) { $user_grades = blended_get_users_grades($item, $users_in_teams); $gradearray = blended_get_scale_array($item); $grademax = $item->grademax; $gradelength = 3; } $table = new html_table(); $table->align = array("left"); if ($is_grading) { $table->head = array($stridteam, $stridmembers, $strgrade, $stralertcol); } else { $table->head = array($stridteam, $stridmembers, $stralertcol); } $table->headspan = array(1, $nummembers, 1, 1); // Realizo el formulario rellenado con los campos que corresponden foreach ($groups as $group) { $rewriteteam = "rewrite_team_" . $t; $fontsize = 1; $gradealert = ""; $idteam = "team_" . $t . "_id"; $teamname = "team_" . $t . "_name"; $tablerow = new html_table_row(); //Obtengo los grupos por su id $teamfield = "<input type=\"hidden\" name=\"{$idteam}\" id=\"{$group->id}\" value=\"{$group->id}\" >" . "<input type=\"text\" name=\"{$teamname}\" id=\"{$teamname}\" value=\"{$group->name}\" size=\"6\" maxlength=\"8\" align=\"center\">"; $tablerow->cells[] = $teamfield; // Obtengo los miembros de cada grupo $mem = $group_members[$group->id]; // bucle miembros for ($f = 0; $f < $nummembers; $f++) { $membername = "team_" . $t . "_member_" . $f; // Nombre actual del campo de texto "Identificador" (utilizando el contador) $emptyteam = false; $member = current($mem); if ($f < count($mem)) { // Objeto `user` $memberuserid = $member->id; if (!($user = $DB->get_record('user', array('id' => $memberuserid)))) { $emptyteam = true; } if (!$emptyteam) { // Foto y vinculo a perfil de `user` if ($piclink = has_capability('moodle/user:viewdetails', $context) || has_capability('moodle/user:viewdetails', $usercontext)) { $userpic = $OUTPUT->user_picture($user); $profilelink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '&course=' . $item->courseid . '">' . fullname($user, true) . '</a>'; } // Estudiante lider de un equipo if (isset($member->leader) && $member->leader == 1) { $profilelink = '<strong>' . $profilelink . ' (leader)' . '</strong>'; } // ID del miembro del equipo $membervalue = blended_gen_idvalue($member, $blended); if ($membervalue == -1) { $membervalue = "\"\""; $stridnumber = get_string('withoutidnumber', 'blended'); } else { if ($membervalue == -2) { $membervalue = "\"\""; $stridnumber = get_string('withoutuserinfodata', 'blended'); } else { $stridnumber = ""; $membervalue = blended_generate_memberid_field($member, $blended); } } if ($membervalue == ' ') { prev($mem); continue; } $teammember_field = $userpic; /* Si la calificaci�n de "blended_grade" y "grade_grades" * no coincide se muestra un mensaje de alerta al usuario */ if ($is_grading) { $user_grade = $user_grades[$memberuserid]; if ($user_grade->blended != '' && $user_grade->grade != '' && (double) $user_grade->blended != (double) $user_grade->grade) { $grade_string = grade_format_gradevalue($user_grade->grade, $item); $icon_url = $OUTPUT->pix_url('alerta', 'blended'); // $teammember_field = "$userpic <img alt=\"$stralertanota.Nota individual: $cal_gr_int\" title=\"$stralertanota.Nota individual: $cal_gr_int\" src=\"../../../mod/blended/pix/alerta.jpg\">"; $a = new stdClass(); $a->grade = $grade_string; $a->finalgrade = $user_grade->grade; $stralertanota = get_string('alertgrade', "blended", $a); $stralertanota = htmlentities($stralertanota); $teammember_grade_alert = " <img alt=\"{$stralertanota}\" title=\"{$stralertanota}\" src=\"{$icon_url}\">"; $teammember_field .= $teammember_grade_alert; } } /* Si existe un miembro repetido en distintos grupos se recuadra * el miembro en color rojo */ if ($repetir_miembro[$memberuserid] == 1) { $teammember_field .= "<input type=\"text\" name=\"{$membername}\" id=\"ac-userid\" value=\"{$membervalue}\" size=\"7\"\r\n maxlength=\"8\" align=\"center\"><br><font size=\"1\">{$profilelink}<font size=\"1\" color=\"#FF0000\">{$stridnumber}</font>"; } else { $teammember_field .= "<input type=\"text\" style=\"border-color:red\" title=\"Id repetido la calificacion individual puede ser distinta a la grupal\" name=\"{$membername}\" id=\"ac-userid\" value=\"{$membervalue}\" size=\"7\"\r\n maxlength=\"8\" align=\"center\"><br><font size=\"1\">{$profilelink}<font size=\"1\" color=\"#FF0000\">{$stridnumber}</font>"; } next($mem); } else { // Campo de texto "Identificador" vacio. $teammember_field = "<input type=\"text\" name=\"{$membername}\" id=\"ac-userid\" value=\"\" size=\"7\"\r\n maxlength=\"8\" align=\"center\">"; } } else { // Campo de texto "Identificador" vacio. $teammember_field = "<input type=\"text\" name=\"{$membername}\" id=\"ac-userid\" value=\"\" size=\"7\" maxlength=\"8\" align=\"center\">"; } // $tablerow->cells[] = $teammember_field; } //Fin del bucle MEMBERS //GRADES: $alert = false; $rewriteteam = "rewrite_team_" . $t; // Si equipo vac�o if ($emptyteam == true) { $gradealert = get_string('teamempty', 'blended'); } if ($is_grading) { list($grade, $alert) = blended_get_team_grade($group, $item); // Nombre del campo de texto "Calificación" $grade_text_input_name = "team_" . $t . "_grade"; // Nombre para las opciones de la lista deplegable "Calificación" $grade_select_input_name = "team_" . $t . "_gradelist"; //Si equipo no calificado if (!$grade) { if ($emptyteam == true) { $gradealert = get_string('teamempty', 'blended'); } else { $gradealert = get_string('teamnotgraded', 'blended'); } //Fin if-else $gvalue = null; $fontsize = 2; $gradehidden_field = ''; } else { // Si calificación individual distinta a la de grupo if ($alert) { $gradealert = $strrewritegrades; $gradealert = $gradealert . "<center><input type=\"checkbox\" name=\"{$rewriteteam}\" id=\"{$rewriteteam}\" value=\"rewrite\" checked=\"true\"></center>"; $fontsize = 1; } else { $gradealert = "" . "<input type=\"hidden\" name=\"{$rewriteteam}\" id=\"{$rewriteteam}\" value=\"rewrite\">"; $fontsize = null; } //Fin if-else if (empty($teamsfromassignmentid) || !empty($grade)) { // `id` de la tabla "blended_grade" $idgradevalue = $grade->id; // `grade` de la tabla "blended_grade" $gvalue = $grade->grade; // Nombre del campo oculto `id` de "blended_grade" $idgrade = "team_" . $t . "_gradeid"; // Campo oculto con `id` de la tabla "blended_grade" $gradehidden_field = "<input type=\"hidden\" name=\"{$idgrade}\" id=\"{$idgrade}\" value= \"{$idgradevalue}\" >"; } else { $gvalue = null; } //Fin if-else } // Fin if-else if ($gradearray !== null) { // Campo de texto "Calificación" // Lista desplegable "Calificación" $gvalue = $gvalue !== null ? (int) $gvalue : null; // scales uses integer values $grade_select_field = "<select name=\"{$grade_select_input_name}\" id=\"{$grade_select_input_name}\" align=\"left\" onchange=\"setGradeTextField(this,{$grade_text_input_name})\">"; $grade_select_field .= "<option value=\"-1\">{$strnone}</option>"; foreach ($gradearray as $key => $val) { if ($gvalue !== null && $key == $gvalue) { $grade_select_field .= "<option value=\"{$key}\" selected=\"selected\">{$val}</option>"; } else { $grade_select_field .= "<option value=\"{$key}\">{$val}</option>"; } } $grade_select_field .= "</select>"; } else { $grade_select_field = ''; } $grade_field = "<input type=\"text\" name=\"{$grade_text_input_name}\" id=\"{$grade_text_input_name}\" value=\"{$gvalue}\" size=\"{$gradelength}\" maxlength=\"{$gradelength}\" align=\"center\" onkeyup=\"setGradeSelect(this,{$grade_select_input_name},{$gradelength},null,{$grademax})\">"; // $grade_field="<input type=\"text\" name=\"$gname\" id=\"$gname\" value=\"$gvalue\" size=\"$gradelength\" maxlength=\"$gradelength\" align=\"center\" >"; $tablerow->cells[] = $gradehidden_field . $grade_field . $grade_select_field; } $tablerow->cells[] = $gradealert; $t++; $table->data[] = $tablerow; } //Fin bucle TEAMS groups $tablerow = new html_table_row(); //Introducci�n de un grupo vac�o $groups = groups_get_all_groups($item->courseid); $idteam = "team_" . $t . "_id"; $teamname = "team_" . $t . "_name"; $tablerow->cells[] = "<input type=\"hidden\" name=\"{$idteam}\" id=\"newTeam\" value=\"\" > <input type=\"text\" name=\"{$teamname}\" id=\"newTeamName\" value=\"\" size=\"6\"\r\n\t\t\t maxlength=\"8\" align=\"center\">"; // mostramos los identificadores de los miembros del grupo // bucle miembros for ($f = 0; $f < $nummembers; $f++) { $membername = "team_" . $t . "_member_" . $f; // Campo de texto "Identificador" vacio. $tablerow->cells[] = "<input type=\"text\" name=\"{$membername}\" id=\"ac-userid\" value=\"\" size=\"7\" maxlength=\"8\" align=\"center\">"; } $gradealert = get_string('teamempty', 'blended'); if ($is_grading) { $gvalue = null; $fontsize = 2; // Nombre del campo de texto "Calificación" $grade_text_input_name = "team_" . $t . "_grade"; // Nombre para las opciones de la lista deplegable "Calificación" $grade_select_input_name = "team_" . $t . "_gradelist"; // Campo de texto "Calificación" $gradehidden_field = "<input type=\"text\" name=\"{$grade_text_input_name}\" id=\"{$grade_text_input_name}\" value=\"{$gvalue}\" size=\"{$gradelength}\" maxlength=\"{$gradelength}\" align=\"center\" onkeyup=\"setGradeSelect(this,{$grade_select_input_name},{$gradelength},null,{$grademax})\">"; // $gradehidden_field = "<input type=\"text\" name=\"$gname\" id=\"$gname\" value=\"$gvalue\" size=\"$gradelength\" maxlength=\"$gradelength\" align=\"center\" >"; // Lista desplegable "Calificación" $grade_select_field = "<select name=\"{$grade_select_input_name}\" id=\"{$grade_select_input_name}\" align=\"left\" onchange=\"setGradeTextField(this,{$grade_text_input_name})\">"; $grade_select_field .= "<option value=\"-1\">{$strnone}</option>"; foreach ($gradearray as $key => $val) { if ($gvalue !== null && $val == $gvalue) { $grade_select_field = $grade_select_field . "<option value=\"{$key}\" selected=\"selected\">{$val}</option>"; } else { $grade_select_field = $grade_select_field . "<option value=\"{$key}\">{$val}</option>"; } } $grade_select_field .= "</select>"; $tablerow->cells[] = "{$gradehidden_field} {$grade_select_field}"; } $tablerow->cells[] = $gradealert; $table->data[] = $tablerow; //Fin de la tabla return $table; }
$not_DNI_out = false; $not_userinfodata_out = false; $not_active_out = false; foreach ($userids as $userid) { $not_DNI_in = false; $not_userinfodata_in = false; $not_active_in = false; //Comprobamos si el usuario esta activo if (!array_search($userid, $activeids)) { $not_active_in = true; $not_active_out = true; } // Obtenemos el objeto 'user' de cada estudiante del curso $user = $users[$userid]; // Obtenemos el codigo EAN de la etiqueta de cada estudiante $code = blended_gen_idvalue($user, $blended); // Si el id es el dni y el estudiante no lo ha introducido en su perfil if ($code == -1) { $not_DNI_in = true; $not_DNI_out = true; } else { if ($code == -2) { $not_userinfodata_in = true; $not_userinfodata_out = true; } } // Obtenemos el nombre completo de cada estudiante $fullname = fullname($user, true); if ($not_active_in) { $fullname = $fullname . " (*)"; }