$team = blended_get_team($id_team); //Comprobar que el ussuario actual: currentuserid es el leader: $team_leader = $team->leaderid; if ($team_leader != $USER->id) { echo $OUTPUT->notification('El usuario no es líder del equipo', "selectassignment.php?id=" . $cm->id); } else { $choosenewleader = false; //Bucle MEMBERS foreach ($members as $member) { // Se obtiene el valor del checkbox que marca los que desea eliminar $deleteuser = optional_param($member->id, 'nodelete', PARAM_ALPHA); // Si el líder elimina al miembro if ($deleteuser == 'delete') { // Si el lider del equipo se elimina a si mismo $choosenewleader = $member->id == $team_leader; blended_remove_team_member($team, $member->id); $a = new stdClass(); $a->username = fullname($member); $a->teamname = $team->name; echo $OUTPUT->notification(get_string('userremovedfromteam', 'blended', $a)); } } // Si el lider elimina todos los miembros del equipo se borra el equipo if (!($members = blended_get_team_members($id_team))) { blended_delete_team($id_team); echo $OUTPUT->notification(get_string('teamremoved', 'blended', $team)); } else { foreach ($members as $member) { // Si el lider del equipo se elimina a si mismo, y quedan miembros, // el siguiente miembro pasa a ser el nuevo lider del equipo if ($choosenewleader) {
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; }