Example #1
0
Language::loadLanguageFile('de', $langTemplate, 'json', dirname(__FILE__) . '/');
if (isset($_POST['action']) && $_POST['action'] == 'TutorUpload') {
    if (isset($_FILES['MarkingFile'])) {
        $file = $_FILES['MarkingFile'];
        $error = $file['error'];
        if ($error == 0) {
            $filePath = $file['tmp_name'];
            $displayName = $file['name'];
            $type = $file["type"];
            // checks file ending
            if (MimeReader::get_mime($filePath) == "application/zip") {
                // creates the JSON object containing the file
                $file = new File();
                $file->setBody(Reference::createReference($filePath));
                $file->setTimeStamp(time());
                $file->setDisplayName($displayName);
                $file = File::encodeFile($file);
                // sends the JSON object to the logic
                $URI = $logicURI . "/tutor/user/{$uid}/course/{$cid}";
                $error = http_post_data($URI, $file, true, $message);
                if ($message == "201" || $message == "200") {
                    $successmsg = Language::Get('main', 'sucessFileUpload', $langTemplate);
                    $notifications[] = MakeNotification('success', $successmsg);
                } else {
                    $errors = @json_decode($error);
                    if ($errors !== null) {
                        foreach ($errors as $err) {
                            $notifications[] = MakeNotification('error', $err);
                        }
                    } else {
                        $errormsg = Language::Get('main', 'unknownError', $langTemplate);
Example #2
0
 public function uploadZip($userid, $courseid)
 {
     // error array of strings
     $errors = array();
     LTutor::generatepath($this->config['DIR']['temp']);
     $tempDir = $this->tempdir($this->config['DIR']['temp'], 'extractZip', $mode = 0775);
     $body = File::decodeFile($this->app->request->getBody());
     //1 file-Object
     $filename = $tempDir . '/' . $courseid . '.zip';
     file_put_contents($filename, $body->getBody(true));
     unset($body);
     $zip = new ZipArchive();
     $zip->open($filename);
     $zip->extractTo($tempDir . '/files');
     $zip->close();
     unlink($filename);
     ///$this->deleteDir(dirname($filename));
     unset($zip);
     $files = $tempDir . '/files';
     // check if csv file exists
     if (file_exists($files . '/Liste.csv')) {
         $csv = fopen($files . '/Liste.csv', "r");
         if (($transactionId = fgetcsv($csv, 0, ';')) === false) {
             fclose($csv);
             $this->deleteDir($tempDir);
             $this->app->response->setStatus(409);
             $errors[] = 'empty .csv file';
             $this->app->response->setBody(json_encode($errors));
             $this->app->stop();
         }
         $result = Request::routeRequest('GET', '/transaction/authentication/TutorCSV_' . $userid . '_' . $courseid . '/transaction/' . $transactionId[0], array(), '', $this->_getTransaction, 'transaction');
         if (isset($result['status']) && $result['status'] == 200 && isset($result['content'])) {
             $transaction = Transaction::decodeTransaction($result['content']);
             $transaction = json_decode($transaction->getContent(), true);
             unset($result);
             $defaultOrder = array('ID', 'NAME', 'USERNAME', 'POINTS', 'MAXPOINTS', 'OUTSTANDING', 'STATUS', 'TUTORCOMMENT', 'STUDENTCOMMENT', 'FILE');
             $currectOrder = $defaultOrder;
             $markings = array();
             while (($row = fgetcsv($csv, 0, ';')) !== false) {
                 if (substr($row[0], 0, 2) == '--') {
                     $row[0] = substr($row[0], 2);
                     if (in_array(strtoupper($row[0]), $defaultOrder)) {
                         $currectOrder = array();
                         foreach ($row as $ro) {
                             $currectOrder[strtoupper($ro)] = count($currectOrder);
                         }
                     }
                 } elseif (implode('', $row) != '' && substr($row[0], 0, 2) != '--') {
                     if (isset($currectOrder['ID']) && !isset($row[$currectOrder['ID']]) || isset($currectOrder['POINTS']) && !isset($row[$currectOrder['POINTS']]) || isset($currectOrder['FILE']) && !isset($row[$currectOrder['FILE']]) || isset($currectOrder['TUTORCOMMENT']) && !isset($row[$currectOrder['TUTORCOMMENT']]) || isset($currectOrder['OUTSTANDING']) && !isset($row[$currectOrder['OUTSTANDING']]) || isset($currectOrder['STATUS']) && !isset($row[$currectOrder['STATUS']])) {
                         $errors[] = 'invalid Liste.csv';
                         fclose($csv);
                         $this->deleteDir($tempDir);
                         $this->app->response->setStatus(409);
                         $this->app->response->setBody(json_encode($errors));
                         $this->app->stop();
                     }
                     $markingId = isset($currectOrder['ID']) ? $row[$currectOrder['ID']] : null;
                     $points = isset($currectOrder['POINTS']) ? $row[$currectOrder['POINTS']] : null;
                     $points = str_replace(',', '.', $points);
                     $markingFile = isset($currectOrder['FILE']) ? $row[$currectOrder['FILE']] : null;
                     // check if markingId exists in transaction
                     if (!isset($transaction['markings'][$markingId])) {
                         // unknown markingId
                         fclose($csv);
                         $this->deleteDir($tempDir);
                         $this->app->response->setStatus(409);
                         $errors[] = "unknown ID: {$markingId}";
                         $this->app->response->setBody(json_encode($errors));
                         $this->app->stop();
                     }
                     ///var_dump($transaction['markings'][$markingId]);
                     $markingData = $transaction['markings'][$markingId];
                     // checks whether the points are less or equal to the maximum points
                     if ($points > $markingData['maxPoints'] || $points < 0) {
                         // too much points
                         ///fclose($csv);
                         ///$this->deleteDir($tempDir);
                         ///$this->app->response->setStatus(409);
                         ///$errors[] = "incorrect points in marking: {$markingId}";
                         ///$this->app->response->setBody(json_encode($errors));
                         ///$this->app->stop();
                     }
                     // checks if file with this markingid exists
                     if ($markingFile == null || $markingFile == '' || file_exists($files . '/' . $markingFile)) {
                         if ($markingFile != '' && $markingFile != null) {
                             $fileAddress = $files . '/' . $markingFile;
                             ///file_get_contents($files.'/'.$markingFile);
                             // file
                             $fileInfo = pathinfo($markingFile);
                             $file = new File();
                             $file->setDisplayName($fileInfo['basename']);
                             $file->setBody(Reference::createReference($fileAddress));
                         } else {
                             $file = null;
                         }
                         if (isset($transaction['markings'][$markingId]['submissionId']) && $transaction['markings'][$markingId]['submissionId'] < 0) {
                             // create new submission object
                             $submissionId = $transaction['markings'][$markingId]['submissionId'];
                             $studentId = $transaction['markings'][$markingId]['studentId'];
                             $exerciseId = $transaction['markings'][$markingId]['exerciseId'];
                             $submission = Submission::createSubmission(null, $studentId, null, $exerciseId, null, 1, time(), null, $leaderId, 1);
                             $submission->setSelectedForGroup('1');
                             ///echo json_encode($submission);return;
                             $result = Request::routeRequest('POST', '/submission', array(), json_encode($submission), $this->_postSubmission, 'submission');
                             if ($result['status'] == 201) {
                                 $transaction['markings'][$markingId]['submissionId'] = json_decode($result['content'], true)['id'];
                             }
                         }
                         // create new marking object
                         $marking = Marking::createMarking($markingId < 0 ? null : $markingId, $userid, null, $transaction['markings'][$markingId]['submissionId'], isset($currectOrder['TUTORCOMMENT']) ? $row[$currectOrder['TUTORCOMMENT']] : null, isset($currectOrder['OUTSTANDING']) ? $row[$currectOrder['OUTSTANDING']] : null, isset($currectOrder['STATUS']) ? $row[$currectOrder['STATUS']] : null, $points, time(), $file == null ? 1 : 0);
                         $marking->setFile($file);
                         /*array(
                           'id' => ($markingId<0 ? null : $markingId),
                           'points' => $points,
                           'outstanding' => isset($currectOrder['OUTSTANDING']) ? $row[$currectOrder['OUTSTANDING']] : null,
                           'tutorId' => $userid,
                           'tutorComment' => isset($currectOrder['TUTORCOMMENT']) ? $row[$currectOrder['TUTORCOMMENT']] : null,
                           'file' => $file,
                           'status' => isset($currectOrder['STATUS']) ? $row[$currectOrder['STATUS']] : null,
                           'date' => time(),
                           'hideFile' => 
                           );*/
                         $markings[] = $marking;
                     } else {
                         //if file with this markingid not exists
                         $errors[] = 'File does not exist: ' . $markingFile;
                         fclose($csv);
                         $this->deleteDir($tempDir);
                         $this->app->response->setStatus(409);
                         $this->app->response->setBody(json_encode($errors));
                         $this->app->stop();
                     }
                 }
             }
             $mark = @json_encode($markings);
             if ($mark !== false) {
                 ///echo json_encode($markings); return;
                 //request to database to edit the markings
                 $result = Request::routeRequest('POST', '/marking', array(), $mark, $this->_postMarking, 'marking');
                 /// TODO: prüfen ob jede hochgeladen wurde
                 if ($result['status'] != 201) {
                     $errors[] = 'send markings failed';
                 }
             } else {
                 $errors[] = 'invalid input';
             }
         } else {
             $errors[] = 'no transaction data';
         }
         fclose($csv);
     } else {
         // if csv file does not exist
         $errors[] = '.csv file does not exist in uploaded zip-Archiv';
     }
     $this->deleteDir($tempDir);
     $this->app->response->setBody(json_encode($errors));
     if (!($errors == array())) {
         $this->app->response->setStatus(409);
     }
 }