Beispiel #1
0
    $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);
Beispiel #2
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));
 }