$PAGE->set_pagelayout('standard'); $item = blended_get_item($itemid); $groupingid = blended_get_groupingid($item); // Print the page header --------------------------------------------------------- $teams = blended_get_teams_from_form($item); $teams = blended_get_grades_from_form($teams); //Actualizaci�n del agrupamiento $outputmessages = blended_actualizar_agrupamiento($teams, $item, $blended, $delete_empty); if (!empty($array_return)) { $strinserted = blended_get_error_alert($array_return, "insert"); } //Para cada equipo: foreach ($teams as $team) { //Si se ha introducido calificaci�n: if (!empty($team->grade)) { $current_team = blended_get_team($team->id); if (!$current_team) { continue; } $rawgrade = $team->grade->grade == -1 ? null : $team->grade->grade; $newfinalgrade = !isset($team->grade->grade) || $team->grade->grade == -1 ? null : $item->adjust_raw_grade($team->grade->grade, $item->grademin, $item->grademax); // $outputmessages.="<p>New finalgrade $newfinalgrade for team $current_team->name</p>"; blended_grade_team($item, $current_team, $newfinalgrade); foreach ($team->members as $memberid) { // if ($team->grade->rewrite) //Introduzco de nuevo las calificaciones $grade_prev = $item->get_grade($memberid); // $outputmessages.="<p>User $memberid had grade $grade_prev->finalgrade</p>"; if (!isset($grade_prev->finalgrade) && !isset($newfinalgrade)) { // skip students with no changes continue;
$a->teamname = $name_team; echo $OUTPUT->notification(get_string('userenrolledtoteam', 'blended', $a)); } else { if ($action == 'signup' && $blended->teammethod != TEAMS_BY_TEACHERS) { //Comprobar que: //-no esta en otro equipo //- que el tamaño no supere el tamaño maximo propuesto por el profesor $id_team = required_param('team', PARAM_INT); //id equipo $members = blended_get_team_members($id_team, $blended); if (count($members) >= $blended->nummembers || $grouping->maxmembers !== null && count($members) >= $grouping->maxmembers) { echo $OUTPUT->notification(get_string('teamisfull', 'blended')); } else { if (blended_enrol_user_to_team($id_team, $USER->id, $item, $blended)) { $a = new stdClass(); $a->username = fullname($USER); $a->teamname = blended_get_team($id_team)->name; echo $OUTPUT->notification(get_string('userenrolledtoteam', 'blended', $a)); } } } else { print_error('nopermissions', 'blended'); } } } // Print the page and finish up -------------------------------------------------- // echo $OUTPUT->continue_button(new moodle_url('signupteam.php',array('id'=>$id,'itemid'=>$itemid))); redirect(new moodle_url('signupteam.php', array('id' => $id, 'itemid' => $itemid))); ?>
function blended_actualizar_agrupamiento($updated_teams, grade_item $item, $blended, $delete_empty) { global $DB; $output = ''; $r = 0; //obtengo el identificador del curso $grouping = blended_get_grouping($item, $blended); //groups_get_grouping($groupingid,'*',MUST_EXIST);//$DB->get_record('groupings',array('id'=>$groupingid)); $courseid = $grouping->courseid; //Obtención de la lista de id de los usuarios introducidos en el curso: $lista_usuarios = get_enrolled_users(context_course::instance($courseid), '', 0, 'u.id,u.idnumber'); $lista_idnumbers = array(); // //Obtenci�n de la lista de 'idnumber' de estos usuarios foreach ($lista_usuarios as $id => $lista) { if (!empty($lista->idnumber)) { $lista_idnumbers[$id] = $lista->idnumber; } // $r++; } // $r=0; // $lista_id=array(); // foreach($lista_idnumbers as $lista){ // $lista_id[$r]=blended_clean_idnumber($lista); // $r++; // } $members_processed = array(); /* Actualizo los grupos actualizando el nombre del grupo y volviendo a introducir los miembros comprobando que el usuario introducido existe */ $r = 0; foreach ($updated_teams as $i => $updatedteam) { // Check members $form_members = array(); foreach ($updatedteam->members as $memberid) { //compruebo que el usuario introducido existe y si es as� que lo guarde if (key_exists($memberid, $lista_idnumbers)) { // user is specified by moodle id if (array_search($memberid, $form_members) === false) { $form_members[] = $memberid; } } else { if (key_exists($memberid, $lista_usuarios)) { // user is specified by id_number if (array_search($memberid, $form_members) === false) { $form_members[] = $memberid; } } } } // Update/Create/delete Group // Create/Update Group information // if (count($form_members) == 0 && $delete_empty) { // An empty membership deletes the group ?? groups_delete_group($updatedteam->id); } else { //guardo los miembros en un array $current_team = blended_get_team($updatedteam->id); if ($current_team) { //si existe lo actualizo $current_team->name = $updatedteam->name; groups_update_group($current_team); } else { if (count($form_members) > 0 || $updatedteam->name != '') { //si no existe lo creo $itemname = blended_get_item_name($item); $data = new stdClass(); $data->courseid = $courseid; $data->name = $updatedteam->name; $data->description_editor['text'] = "Group for activity: '{$itemname}'."; $data->description_editor['format'] = FORMAT_PLAIN; $updatedteam->id = groups_create_group($data); groups_assign_grouping($grouping->id, $updatedteam->id, time(), true); } else { continue; // team with no id, no name, and no components } } $current_team = blended_get_team($updatedteam->id, true); $current_members = array_keys($current_team->members); // find members to remove $members_to_delete = array_diff($current_members, $form_members); $members_to_add = array_diff($form_members, $current_members); // remove old members $need_reelect_leader = false; foreach ($members_to_delete as $memberid) { $need_reelect_leader = $current_team->leaderid == $memberid; blended_remove_team_member($current_team, $memberid); // groups_remove_member($team->id, $member->id); } // update team conf $current_team = blended_get_team($current_team); // Add current members foreach ($members_to_add as $memberid) { groups_add_member($current_team->id, $memberid); if ($memberid == $current_team->leaderid) { $need_reelect_leader = false; } if (key_exists($memberid, $members_processed)) { $members_processed[$memberid]++; } else { $members_processed[$memberid] = 1; } } if (!isset($current_team->leaderid)) { $need_reelect_leader = true; } // check leadership if (count($members_to_add) > 0 && count($members_to_delete) > 0 && $need_reelect_leader) { // elect new leader blended_set_team_leaderid($current_team->id, $form_members[0]); global $OUTPUT, $DB; $a = new stdClass(); $a->username = fullname($DB->get_record('user', array('id' => $form_members[0]))); $a->teamname = $current_team->name; $output .= $OUTPUT->notification(get_string('userpromotedtoleader', 'blended', $a)); } } } return $output; // //Actualizaci�n de las calificaciones(si existen) : comparar los miembros con los de "grade_grades" y si // //no estan en el vector borrarlos de la tabla $grades_moodle = grade_get_grades($courseid, $item->itemtype, $item->itemmodule, $item->iteminstance); $grades_item = $grades_moodle->items[0]; $grades = $grades_item->grades; //Para cada miembro de la tabla miro si esta en el vector $miembros_grupos $cont_gr = 0; $cont_group = 0; foreach ($grades as $grade) { foreach ($miembros_grupos as $miembro_gr) { foreach ($miembro_gr as $miembro) { if ($grade->userid != $miembro->id) { $cont_gr++; } if ($cont_gr == count($miembro_gr)) { $cont_group++; continue; } } if ($cont_gr == count($miembros_grupos)) { print_error("borra en tabla!!"); //Entonces ese id no esta en los mimebros y hay que borrarlo de la tabla $DB->delete_records('grade_grades', array('itemid' => $grade_item->id, 'userid' => $grade->userid)); continue; } } } // $DB->delete_records('grade_grades',array('itemid'=>$grade_item->id)); //Comprobaci�n de la repetici�n de miembros en distintos equipos: $contador = array(); foreach ($lista_idnumbers as $t) { $valor = 1; foreach ($miembros_grupos as $miembro_gr) { foreach ($miembro_gr as $miembro) { if ($miembro->idnumber == $t) { //meto en un contador para el valor del id de cada usuario las veces que se repite $contador[$miembro->id] = $valor; $valor++; } } } } return $contador; }