$found = false; foreach ($data['courses'] as $key => $course) { if ($course['course']['id'] == $cid) { $data['courses'] = array($course); $found = true; break; } } if (!$found) { $data['courses'] = array(); } $user_course_data = $data; Authentication::checkRights($permission, $cid, $uid, $user_course_data); } $_GET = cleanInput($_GET); $types = Marking::getStatusDefinition(); $status = null; foreach ($types as $type) { if (isset($_GET['downloadCSV_' . $type['id']])) { $status = $type['id']; $_GET['downloadCSV'] = $_GET['downloadCSV_' . $type['id']]; break; } } if (isset($_GET['downloadCSV'])) { checkPermission(PRIVILEGE_LEVEL::TUTOR); $sid = cleanInput($_GET['downloadCSV']); $location = $logicURI . '/tutor/user/' . $uid . '/exercisesheet/' . $sid . (isset($status) ? '/status/' . $status : ''); $result = http_get($location, true); echo $result; exit(0);
/** * Function that handles all requests for marking tool. * Used by the functions that are called by Slim when data for the marking * tool is requested * * @author Florian Lücke */ public function markingToolBase($userid, $courseid, $sheetid, $tutorid, $statusid, $shouldfilter, $selector) { $response = array(); //Get neccessary data $URL = "{$this->lURL}/exercisesheet/course/{$courseid}/exercise"; $handler1 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getMarking->getAddress()}/marking/exercisesheet/{$sheetid}"; $handler2 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getUser->getAddress()}/user/course/{$courseid}/status/1"; $handler3 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getGroup->getAddress()}/group/exercisesheet/{$sheetid}"; $handler4 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getSubmission->getAddress()}/submission/exercisesheet/{$sheetid}/selected"; $handler5 = Request_CreateRequest::createGet($URL, array(), ''); $URL = $this->_getExerciseType->getAddress() . '/exercisetype'; $handler6 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getUser->getAddress()}/user/course/{$courseid}/status/2"; $handler7 = Request_CreateRequest::createGet($URL, array(), ''); $URL = "{$this->_getUser->getAddress()}/user/course/{$courseid}/status/3"; $handler8 = Request_CreateRequest::createGet($URL, array(), ''); $multiRequestHandle = new Request_MultiRequest(); $multiRequestHandle->addRequest($handler1); $multiRequestHandle->addRequest($handler2); $multiRequestHandle->addRequest($handler3); $multiRequestHandle->addRequest($handler4); $multiRequestHandle->addRequest($handler5); $multiRequestHandle->addRequest($handler6); $multiRequestHandle->addRequest($handler7); $multiRequestHandle->addRequest($handler8); $answer = $multiRequestHandle->run(); $sheets = json_decode($answer[0]['content'], true); $markings = json_decode($answer[1]['content'], true); $tutors = json_decode($answer[2]['content'], true); $groups = json_decode($answer[3]['content'], true); $submissions = json_decode($answer[4]['content'], true); $possibleExerciseTypes = json_decode($answer[5]['content'], true); $tutors = array_merge($tutors, json_decode($answer[6]['content'], true)); $tutors = array_merge($tutors, json_decode($answer[7]['content'], true)); // order exercise types by id $exerciseTypes = array(); foreach ($possibleExerciseTypes as $exerciseType) { $exerciseTypes[$exerciseType['id']] = $exerciseType; } $namesOfExercises = array(); // find the current sheet and it's exercises foreach ($sheets as &$sheet) { $thisSheetId = $sheet['id']; if ($thisSheetId == $sheetid) { $thisExerciseSheet = $sheet; // create exercise names //an array to descripe the subtasks $alphabet = range('a', 'z'); $count = 0; $count = null; if (isset($sheet['exercises'])) { $exercises = $sheet['exercises']; foreach ($exercises as $key => $exercise) { $exerciseId = $exercise['id']; if ($count === null || $exercises[$count]['link'] != $exercise['link']) { $count = $key; $namesOfExercises[$exerciseId] = $exercise['link']; $subtask = 0; } else { $subtask++; $namesOfExercises[$exerciseId] = $exercise['link'] . $alphabet[$subtask]; $namesOfExercises[$exercises[$count]['id']] = $exercises[$count]['link'] . $alphabet[0]; } } } } unset($sheet['exercises']); } if (isset($thisExerciseSheet) == false) { $this->app->halt(404, '{"code":404,reason":"invalid sheet id"}'); } // save the index of each exercise and add exercise type name $exercises = array(); $exerciseIndices = array(); foreach ($thisExerciseSheet['exercises'] as $idx => $exercise) { $exerciseId = $exercise['id']; $typeId = $exercise['type']; if (isset($exerciseTypes[$typeId])) { $type = $exerciseTypes[$typeId]; $exercise['typeName'] = $type['name']; } else { $exercise['typeName'] = "unknown"; } $exerciseIndices[$exerciseId] = $idx; $exercises[] = $exercise; } // save a reference to each user's group and add exercises to each group $userGroups = array(); foreach ($groups as &$group) { $leaderId = $group['leader']['id']; $userGroups[$leaderId] =& $group; if (isset($group['members'])) { foreach ($group['members'] as $member) { $memberId = $member['id']; $userGroups[$memberId] =& $group; } } $group['exercises'] = $exercises; } foreach ($markings as $key => $marking) { $markings[$key]['submissionId'] = $markings[$key]['submission']['id']; } foreach ($submissions as $submission) { $studentId = $submission['studentId']; $exerciseId = $submission['exerciseId']; $exerciseIndex = $exerciseIndices[$exerciseId]; $group =& $userGroups[$studentId]; $group['exercises'][$exerciseIndex]['submission'] = $submission; } $filteredGroups = array(); foreach ($submissions as $submission) { $marking = LArraySorter::multidimensional_search($markings, array('submissionId' => $submission['id'])); if ($marking !== false) { unset($markings[$marking]['submission']); $submission['marking'] = $markings[$marking]; } // filter out markings by the tutor with id $tutorid if ($shouldfilter == false || $selector($submission, $tutorid, $statusid)) { //echo json_encode($submission); $exerciseId = $submission['exerciseId']; $exerciseIndex = $exerciseIndices[$exerciseId]; $studentId = $submission['studentId']; // assign the submission to its group $group =& $userGroups[$studentId]; $groupExercises =& $group['exercises']; $groupExercises[$exerciseIndex]['submission'] = $submission; $leaderId =& $group['leader']['id']; $filteredGroups[$leaderId] =& $group; } else { $exerciseId = $submission['exerciseId']; $exerciseIndex = $exerciseIndices[$exerciseId]; $studentId = $submission['studentId']; $group =& $userGroups[$studentId]; $groupExercises =& $group['exercises']; unset($groupExercises[$exerciseIndex]); } } if ($statusid === '0') { // remove groups with submissions $tempGroups = array(); foreach ($groups as $key => $group) { $temp2Groups = array(); foreach ($group['exercises'] as $key2 => $exercise) { if (!isset($exercise['submission']) || isset($exercise['submission']['marking']['status']) && $exercise['submission']['marking']['status'] === '0') { $temp2Groups[] = $exercise; } } if (!empty($temp2Groups)) { $group['exercises'] = $temp2Groups; $tempGroups[] = $group; } } $groups = $tempGroups; } $response['groups'] = $shouldfilter == true && $statusid !== '0' ? array_values($filteredGroups) : $groups; $response['tutors'] = $tutors; $response['exerciseSheets'] = $sheets; $response['markingStatus'] = Marking::getStatusDefinition(); $response['namesOfExercises'] = $namesOfExercises; $this->flag = 1; $response['user'] = $this->userWithCourse($userid, $courseid); $this->app->response->setBody(json_encode($response)); }