Beispiel #1
0
 /**
  * Create a new user instance after a valid registration.
  *
  * @param  array  $data
  * @return User
  */
 protected function create(array $data)
 {
     $newUser = User::create(['name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password'])]);
     $role = \App\userRole::create(['userID' => $newUser->id, 'role' => 'student']);
     \App\userPreferredTeamStyle::create(['userID' => $newUser->id, 'teamStyle' => $data['teamStyles']]);
     \App\userKnownLanguages::create(['userID' => $newUser->id, 'languageName' => $data['languages']]);
     if (array_key_exists('course261', $data)) {
         \App\userCourseTaken::create(['userID' => $newUser->id, 'courseCode' => 261]);
     }
     if (array_key_exists('course262', $data)) {
         \App\userCourseTaken::create(['userID' => $newUser->id, 'courseCode' => 262]);
     }
     if (array_key_exists('course306', $data)) {
         \App\userCourseTaken::create(['userID' => $newUser->id, 'courseCode' => 306]);
     }
     if (array_key_exists('course406', $data)) {
         \App\userCourseTaken::create(['userID' => $newUser->id, 'courseCode' => 406]);
     }
     return $newUser;
 }
Beispiel #2
0
 public function update($id, Requests\EditProfileRequest $request)
 {
     $requestArray = $request->all();
     $teamStyle = \App\userPreferredTeamStyle::where('userID', $id);
     $teamStyle->update(['teamStyle' => $requestArray['teamStyles']]);
     $language = \App\userKnownLanguages::where('userID', $id);
     $language->update(['languageName' => $requestArray['languages']]);
     \App\userCourseTaken::where('userID', $id)->delete();
     if (array_key_exists('course261', $requestArray)) {
         \App\userCourseTaken::create(['userID' => $id, 'courseCode' => 261]);
     }
     if (array_key_exists('course262', $requestArray)) {
         \App\userCourseTaken::create(['userID' => $id, 'courseCode' => 262]);
     }
     if (array_key_exists('course306', $requestArray)) {
         \App\userCourseTaken::create(['userID' => $id, 'courseCode' => 306]);
     }
     if (array_key_exists('course406', $requestArray)) {
         \App\userCourseTaken::create(['userID' => $id, 'courseCode' => 406]);
     }
     return redirect('/home');
 }
Beispiel #3
0
 public function redoAssignments(Requests\RedoTeamAssignmentRequest $request)
 {
     $minTeamSize = $request->all()['min'];
     $maxTeamSize = $request->all()['max'];
     // Return to teams page if form was empty
     if ($minTeamSize == "" || $maxTeamSize == "") {
         return redirect('/teams');
     }
     // max must be greater than min for team assignments to work
     if (!($minTeamSize < $maxTeamSize)) {
         return redirect('/teams');
     }
     // Create array of student IDs
     $studentIDs = \App\User::leftJoin('UserRole', 'users.id', '=', 'UserRole.userID')->where('role', 'student')->get()->pluck('id')->toArray();
     // max must be less than the number of students
     if (!($minTeamSize <= count($studentIDs))) {
         return redirect('/teams');
     }
     // Sort students by the number of courses they have taken.
     $sortedStudentIDs = array();
     for ($i = 0; $i <= 4; $i++) {
         foreach ($studentIDs as $studentID) {
             $coursesTaken = \App\userCourseTaken::where('userID', $studentID)->get()->toArray();
             if (count($coursesTaken) == $i) {
                 array_push($sortedStudentIDs, $studentID);
             }
         }
     }
     // Create an array to store the appropriate number of teams
     $teams = array();
     $maxNumberOfTeams = floor(count($studentIDs) / $minTeamSize);
     $teams = array_fill(0, $maxNumberOfTeams, array_fill(0, $maxTeamSize, -1));
     // Place each student in a team using the following priorities:
     // - 1 - try to place student in team with matching language and team style
     // - 2 - try to place student in team with matching language
     // - 3 - try to place student in a brand new team
     // - 4 - try to place student in a team with matching team style
     // - 5 - place the student anywhere
     foreach ($sortedStudentIDs as $studentID) {
         $studentPlaced = false;
         $studentLanguage = \App\userKnownLanguages::where('userID', $studentID)->get()->pluck('languageName')->toArray()[0];
         $studentStyle = \App\userPreferredTeamStyle::where('userID', $studentID)->get()->pluck('teamStyle')->toArray()[0];
         // language + team style
         for ($team = 0; $team < count($teams); $team++) {
             if ($teams[$team][0] == -1) {
                 continue;
             }
             $teamLanguage = \App\userKnownLanguages::where('userID', $teams[$team][0])->get()->pluck('languageName')->toArray()[0];
             $teamStyle = \App\userPreferredTeamStyle::where('userID', $teams[$team][0])->get()->pluck('teamStyle')->toArray()[0];
             if ($studentLanguage == $teamLanguage && $studentStyle == $teamStyle) {
                 for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                     if ($teams[$team][$slot] == -1) {
                         $studentPlaced = true;
                         $teams[$team][$slot] = $studentID;
                         break;
                     }
                 }
                 if ($studentPlaced) {
                     break;
                 }
             }
         }
         if ($studentPlaced) {
             continue;
         }
         // language
         for ($team = 0; $team < count($teams); $team++) {
             if ($teams[$team][0] == -1) {
                 continue;
             }
             $teamLanguage = \App\userKnownLanguages::where('userID', $teams[$team][0])->get()->pluck('languageName')->toArray()[0];
             if ($studentLanguage == $teamLanguage) {
                 for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                     if ($teams[$team][$slot] == -1) {
                         $studentPlaced = true;
                         $teams[$team][$slot] = $studentID;
                         break;
                     }
                 }
                 if ($studentPlaced) {
                     break;
                 }
             }
         }
         if ($studentPlaced) {
             continue;
         }
         // new team
         for ($team = 0; $team < count($teams); $team++) {
             if ($teams[$team][0] == -1) {
                 $studentPlaced = true;
                 $teams[$team][0] = $studentID;
                 break;
             }
         }
         if ($studentPlaced) {
             continue;
         }
         // team style
         for ($team = 0; $team < count($teams); $team++) {
             if ($teams[$team][0] == -1) {
                 continue;
             }
             $teamStyle = \App\userPreferredTeamStyle::where('userID', $teams[$team][0])->get()->pluck('teamStyle')->toArray()[0];
             if ($studentStyle == $teamStyle) {
                 for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                     if ($teams[$team][$slot] == -1) {
                         $studentPlaced = true;
                         $teams[$team][$slot] = $studentID;
                         break;
                     }
                 }
                 if ($studentPlaced) {
                     break;
                 }
             }
         }
         if ($studentPlaced) {
             continue;
         }
         // place anywhere
         for ($team = 0; $team < count($teams); $team++) {
             if ($teams[$team][count($teams[$team]) - 1] == -1) {
                 for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                     if ($teams[$team][$slot] == -1) {
                         $teams[$team][$slot] = $studentID;
                         break;
                     }
                 }
                 break;
             }
         }
     }
     // Locate any teams that are too small
     $studentsRemaining = array();
     $invalidTeams = array();
     for ($team = 0; $team < count($teams); $team++) {
         $studentsInCurrentTeam = array();
         for ($slot = 0; $slot < count($teams[$team]); $slot++) {
             if ($teams[$team][$slot] == -1 && $slot < $minTeamSize) {
                 $studentsRemaining = array_merge($studentsRemaining, $studentsInCurrentTeam);
                 array_push($invalidTeams, $team);
                 break;
             }
             array_push($studentsInCurrentTeam, $teams[$team][$slot]);
         }
     }
     // Determine if students in small teams can be moved to other teams
     $spotsRemaining = 0;
     for ($team = 0; $team < count($teams); $team++) {
         if (!in_array($team, $invalidTeams)) {
             for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                 if ($teams[$team][$slot] == -1) {
                     $spotsRemaining++;
                 }
             }
         }
     }
     // Rearrange students by removing teams that are too small
     if ($spotsRemaining >= count($studentsRemaining) && count($studentsRemaining) > 0) {
         for ($team = 0; $team < count($teams); $team++) {
             if (in_array($team, $invalidTeams)) {
                 $teams[$team] = array_fill(0, $maxTeamSize, -1);
             }
         }
         foreach ($studentsRemaining as $studentID) {
             for ($team = 0; $team < count($teams); $team++) {
                 if ($teams[$team][count($teams[$team]) - 1] == -1 && $teams[$team][0] != -1) {
                     for ($slot = 0; $slot < count($teams[$team]); $slot++) {
                         if ($teams[$team][$slot] == -1) {
                             $teams[$team][$slot] = $studentID;
                             break;
                         }
                     }
                     break;
                 }
             }
         }
     } else {
         if (count($studentsRemaining) > 0) {
             foreach ($invalidTeams as $invalidTeam) {
                 $teamValid = false;
                 while (!$teamValid) {
                     $teamValid = true;
                     $studentToMove = -1;
                     // Find a student to add, and remove them from their old team
                     for ($team = 0; $team < count($teams); $team++) {
                         if (!in_array($team, $invalidTeams) && $teams[$team][$minTeamSize] != -1) {
                             for ($slot = $maxTeamSize - 1; $slot >= 0; $slot--) {
                                 if ($teams[$team][$slot] != -1) {
                                     $studentToMove = $teams[$team][$slot];
                                     $teams[$team][$slot] = -1;
                                 }
                                 if ($studentToMove != -1) {
                                     break;
                                 }
                             }
                         }
                         if ($studentToMove != -1) {
                             break;
                         }
                     }
                     // Add the student to the smaller team
                     for ($slot = 0; $slot < $maxTeamSize; $slot++) {
                         if ($teams[$invalidTeam][$slot] == -1) {
                             $teams[$invalidTeam][$slot] = $studentToMove;
                             if ($slot == $minTeamSize - 1) {
                                 $teamValid = true;
                             }
                             break;
                         }
                     }
                 }
             }
         }
     }
     // Remove empty teams from array
     for ($team = 0; $team < count($teams); $team++) {
         if ($teams[$team][0] == -1) {
             unset($teams[$team]);
         }
     }
     $teams = array_values($teams);
     // Delete and recreate teams
     \App\userTeamAssociation::truncate();
     \App\team::truncate();
     for ($team = 0; $team < count($teams); $team++) {
         if ($teams[$team][0] != -1) {
             $teamName = 'Team ' . ($team + 1);
             $teamLanguage = \App\userKnownLanguages::where('userID', $teams[$team][0])->get()->pluck('languageName')->toArray()[0];
             \App\team::create(['teamName' => $teamName, 'language' => $teamLanguage]);
         }
     }
     // Create new team associations
     for ($team = 0; $team < count($teams); $team++) {
         for ($slot = 0; $slot < count($teams[$team]); $slot++) {
             if ($teams[$team][$slot] != -1) {
                 \App\userTeamAssociation::create(['userID' => $teams[$team][$slot], 'teamID' => $team + 1]);
             }
         }
     }
     return redirect('/teams');
 }