/** * Delete a personal message * * This function is used to delete a message, including any attachments it may have * * @param int $msg_id The message id * @return bool True if the deletion was succesful * @version 0.1 * @deprecated */ public static function eF_deletePersonalMessage($msg_id) { if (eF_checkParameter($msg_id, 'id')) { $res = eF_getTableData("f_personal_messages", "users_LOGIN, attachments, f_folders_ID", "id=" . $msg_id); if ($_SESSION['s_login'] == $res[0]['users_LOGIN'] || $_SESSION['s_type'] == 'administrator') { eF_deleteTableData("f_personal_messages", "id=" . $msg_id); if ($res[0]['attachments'] != '') { $attached_file = new EfrontFile($res[0]['attachments']); $attached_file->delete(); } return true; } else { $message = 'You cannot delete this message'; return $message; } } else { $message = _INVALIDID; return $message; } }
/** * Uncompress exported file and get data * * This function uncompresses the exported course file and reads the serialized database * data into an array * * @param EfrontFile $file The exported file * @return array The serialized course data * @since 3.6.1 * @access private */ private function getCourseDataFromExportedFile($file) { $fileList = $file->uncompress(); $fileList = array_unique(array_reverse($fileList, true)); $dataFile = new EfrontFile($file['directory'] . '/data.dat'); $filedata = file_get_contents($dataFile['path']); $dataFile->delete(); $data = unserialize($filedata); unset($data['courses'][0]['id']); unset($data['courses'][0]['instance_source']); return $data; }
$layoutTheme->layout['positions']['rightList'] = $rightList; $layoutTheme->layout['positions']['layout'] = $_POST['layout']; $layoutTheme->persist(); echo "set"; exit; } else { if (isset($_GET['ajax']) && $_GET['ajax'] == 'reset_layout') { $layoutTheme->applySettings('layout'); echo "reset"; exit; } else { if (isset($_GET['delete_block'])) { //Remove the block's file if (is_file($file = G_EXTERNALPATH . $customBlocks[$_GET['delete_block']]['name'] . '.tpl')) { $file = new EfrontFile($file); $file->delete(); } //Remove the block from the custom blocks list unset($customBlocks[$_GET['delete_block']]); $layoutTheme->layout['custom_blocks'] = $customBlocks; //Remove the deleted block from any position it may occupy foreach ($layoutTheme->layout['positions'] as $key => $value) { if (is_array($value) && ($offset = array_search($_GET['delete_block'], $value)) !== false) { array_splice($layoutTheme->layout['positions'][$key], $offset, 1); } } $layoutTheme->persist(); exit; } else { if (isset($_GET['toggle_block'])) { if (isset($layoutTheme->layout['positions']['enabled'][$_GET['toggle_block']])) {
/** * Export lesson * * This function is used to export the current lesson's data to * a file, which can then be imported to other systems. Apart from * the lesson content, the user may optinally specify additional * information to export, using the $exportEntities array. If * $exportEntities is 'all', everything that can be exported, is * exported * * <br/>Example: * <code> * $exportedFile = $lesson -> export('all'); * </code> * * @param array $exportEntities The additional data to export * @param boolean $rename Whether to rename the exported file with the same name as the lesson * @param boolean $exportFiles Whether to export files as well * @return EfrontFile The object of the exported data file * @since 3.5.0 * @access public */ public function export($exportEntities, $rename = true, $exportFiles = true) { if (!$exportEntities) { $exportEntities = array('export_surveys' => 1, 'export_announcements' => 1, 'export_glossary' => 1, 'export_calendar' => 1, 'export_comments' => 1, 'export_rules' => 1); } $data['lessons'] = $this->lesson; unset($data['lessons']['share_folder']); unset($data['lessons']['instance_source']); unset($data['lessons']['originating_course']); $content = eF_getTableData("content", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($content) > 0) { $contentIds = array(); for ($i = 0; $i < sizeof($content); $i++) { $content[$i]['data'] = str_replace(G_SERVERNAME, "##SERVERNAME##", $content[$i]['data']); $content[$i]['data'] = str_replace("content/lessons/" . ($this->lesson['share_folder'] ? $this->lesson['share_folder'] : $this->lesson['id']), "##LESSONSLINK##", $content[$i]['data']); $contentIds[] = $content[$i]['id']; } $content_list = implode(",", array_values($contentIds)); $data['content'] = $content; $questions = eF_getTableData("questions", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($questions) > 0) { for ($i = 0; $i < sizeof($questions); $i++) { $questions[$i]['text'] = str_replace(G_SERVERNAME, "##SERVERNAME##", $questions[$i]['text']); $questions[$i]['text'] = str_replace("content/lessons/" . ($this->lesson['share_folder'] ? $this->lesson['share_folder'] : $this->lesson['id']), "##LESSONSLINK##", $questions[$i]['text']); } $data['questions'] = $questions; } $tests = eF_getTableData("tests", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($tests)) { $testsIds = array(); foreach ($tests as $key => $value) { $testsIds[] = $value['id']; } $tests_list = implode(",", array_values($testsIds)); $tests_to_questions = eF_getTableData("tests_to_questions", "*", "tests_ID IN ({$tests_list})"); for ($i = 0; $i < sizeof($tests); $i++) { $tests[$i]['description'] = str_replace(G_SERVERNAME, "##SERVERNAME##", $tests[$i]['description']); $tests[$i]['description'] = str_replace("content/lessons/" . ($this->lesson['share_folder'] ? $this->lesson['share_folder'] : $this->lesson['id']), "##LESSONSLINK##", $tests[$i]['description']); } $data['tests'] = $tests; $data['tests_to_questions'] = $tests_to_questions; } if (isset($exportEntities['export_rules'])) { $rules = eF_getTableData("rules", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($rules) > 0) { $data['rules'] = $rules; } } if (isset($exportEntities['export_comments'])) { $comments = eF_getTableData("comments", "*", "content_ID IN ({$content_list})"); if (sizeof($comments) > 0) { $data['comments'] = $comments; } } } if (isset($exportEntities['export_calendar'])) { $calendar = calendar::getLessonCalendarEvents($this); $calendar = array_values($calendar); if (sizeof($calendar) > 0) { $data['calendar'] = $calendar; } } if (isset($exportEntities['export_glossary'])) { $glossary = eF_getTableData("glossary", "*", "lessons_ID = " . $this->lesson['id']); if (sizeof($glossary) > 0) { $data['glossary'] = $glossary; } } if (isset($exportEntities['export_announcements'])) { $news = eF_getTableData("news", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($news) > 0) { $data['news'] = $news; } } if (isset($exportEntities['export_surveys'])) { $surveys = eF_getTableData("surveys", "*", "lessons_ID=" . $this->lesson['id']); //prepei na ginei to lesson_ID -> lessons_ID sti basi (ayto isos to parampsoyme eykola) if (sizeof($surveys) > 0) { $data['surveys'] = $surveys; $surveys_ = array(); foreach ($surveys as $key => $value) { $surveys_[$value['id']] = $value; } $surveys_list = implode(",", array_keys($surveys_)); $questions_to_surveys = eF_getTableData("questions_to_surveys", "*", "surveys_ID IN ({$surveys_list})"); // oposipote omos to survey_ID -> surveys_ID sti basi if (sizeof($questions_to_surveys) > 0) { $data['questions_to_surveys'] = $questions_to_surveys; } } } $lesson_conditions = eF_getTableData("lesson_conditions", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($lesson_conditions) > 0) { $data['lesson_conditions'] = $lesson_conditions; } $projects = eF_getTableData("projects", "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($projects) > 0) { $data['projects'] = $projects; } $lesson_files = eF_getTableData("files", "*", "path like '" . str_replace(G_ROOTPATH, '', EfrontDirectory::normalize($this->getDirectory())) . "%'"); if (sizeof($lesson_files) > 0) { $data['files'] = $lesson_files; } if (G_VERSIONTYPE != 'community') { #cpp#ifndef COMMUNITY if (G_VERSIONTYPE != 'standard') { #cpp#ifndef STANDARD //Export scorm tables from here over $scormLessonTables = array('scorm_sequencing_adlseq_map_info', 'scorm_sequencing_content_to_organization', 'scorm_sequencing_maps_info', 'scorm_sequencing_organizations'); foreach ($scormLessonTables as $table) { $scorm_data = eF_getTableData($table, "*", "lessons_ID=" . $this->lesson['id']); if (sizeof($scorm_data) > 0) { $data[$table] = $scorm_data; } } $scormContentTables = array('scorm_sequencing_completion_threshold', 'scorm_sequencing_constrained_choice', 'scorm_sequencing_control_mode', 'scorm_sequencing_delivery_controls', 'scorm_sequencing_hide_lms_ui', 'scorm_sequencing_limit_conditions', 'scorm_sequencing_maps', 'scorm_sequencing_map_info', 'scorm_sequencing_objectives', 'scorm_sequencing_rollup_considerations', 'scorm_sequencing_rollup_controls', 'scorm_sequencing_rollup_rules', 'scorm_sequencing_rules'); if ($content_list) { foreach ($scormContentTables as $table) { $scorm_data = eF_getTableData($table, "*", "content_ID IN ({$content_list})"); if (sizeof($scorm_data) > 0) { $data[$table] = $scorm_data; } if ($table == 'scorm_sequencing_rollup_rules' && sizeof($scorm_data) > 0) { $ids = array(); foreach ($scorm_data as $value) { $ids[] = $value['id']; } $result = eF_getTableData('scorm_sequencing_rollup_rule', "*", "scorm_sequencing_rollup_rules_ID IN (" . implode(",", $ids) . ")"); $data['scorm_sequencing_rollup_rule'] = $result; } if ($table == 'scorm_sequencing_rules' && sizeof($scorm_data) > 0) { $ids = array(); foreach ($scorm_data as $value) { $ids[] = $value['id']; } $result = eF_getTableData('scorm_sequencing_rule', "*", "scorm_sequencing_rules_ID IN (" . implode(",", $ids) . ")"); $data['scorm_sequencing_rule'] = $result; } } } } #cpp#endif } #cpp#endif //'scorm_sequencing_rollup_rule', 'scorm_sequencing_rule', // MODULES - Export module data // Get all modules (NOT only the ones that have to do with the user type) $modules = eF_loadAllModules(); foreach ($modules as $module) { if ($moduleData = $module->onExportLesson($this->lesson['id'])) { $data[$module->className] = $moduleData; } } file_put_contents($this->directory . '/' . "data.dat", serialize($data)); //Create database dump file if ($exportFiles) { $lessonDirectory = new EfrontDirectory($this->directory); $file = $lessonDirectory->compress($this->lesson['id'] . '_exported.zip', false); //Compress the lesson files } else { $dataFile = new EfrontFile($this->directory . '/' . "data.dat"); $file = $dataFile->compress($this->lesson['id'] . '_exported.zip'); } $newList = FileSystemTree::importFiles($file['path']); //Import the file to the database, so we can download it $file = new EfrontFile(current($newList)); if (empty($GLOBALS['currentUser'])) { if ($_SESSION['s_login']) { $GLOBALS['currentUser'] = EfrontUserFactory::factory($_SESSION['s_login']); $userTempDir = $GLOBALS['currentUser']->user['directory'] . '/temp'; } else { $userTempDir = sys_get_temp_dir(); } } else { $userTempDir = $GLOBALS['currentUser']->user['directory'] . '/temp'; } if (!is_dir($userTempDir)) { //If the user's temp directory does not exist, create it $userTempDir = EfrontDirectory::createDirectory($userTempDir, false); $userTempDir = $userTempDir['path']; } try { $existingFile = new EfrontFile($userTempDir . '/' . EfrontFile::encode($this->lesson['name']) . '.zip'); //Delete any previous exported files $existingFile->delete(); } catch (Exception $e) { } if ($rename) { $newName = str_replace(array('"', '>', '<', '*', '?', ':'), array('"', '>', '<', '*', '?', ':'), $this->lesson['name']); $file->rename($userTempDir . '/' . EfrontFile::encode($newName) . '.zip', true); } unlink($this->directory . '/' . "data.dat"); //Delete database dump file return $file; }
public function getControlPanelModule() { $smarty = $this->getSmartyVar(); $smarty->assign("T_MODULE_BASEDIR", $this->moduleBaseDir); $smarty->assign("T_MODULE_BASELINK", $this->moduleBaseLink); $smarty->assign("T_MODULE_BASEURL", $this->moduleBaseUrl); $smarty->assign("T_MODULE_OPTIONS", array(array('text' => _MODULE_SECURITY_PAGE, 'image' => "{$this->moduleBaseLink}img/go_into.png", 'href' => $this->moduleBaseUrl))); $feeds = $this->getRssFeeds(); $smarty->assign("T_SECURITY_FEEDS", $feeds); try { if ($GLOBALS['configuration']['module_security_last_check'] < time() - 2 * 86400) { //check every 2 days EfrontConfiguration::setValue('module_security_last_check', time()); $file = new EfrontFile($this->getLocalListName()); $file->delete(); } $localIssues = $this->checkLocalIssues(); $smarty->assign("T_LOCAL_ISSUES", $localIssues); } catch (Exception $e) { } //Do nothing in the control panel in case of an exception return true; }
/** * Reset the project completion * * This function is used to reset the current project completion. * All related information is lost, as well as files associated * with the project. * <br/>Example: * <code> * $project = new EfrontProject(12); //Instantiate project with id 12 * $project -> reset($login); //Reset project completion for $login and all associated information * </code> * * @since 3.5.0 * @access public * @todo delete project files */ public function reset($login = false) { $users = $this->getUsers(); if (!in_array($login, array_keys($users))) { throw new EfrontContentException(_USERDOESNOTHAVETHISPROJECT, EfrontContentException::INVALID_LOGIN); } $fields = array('grade' => NULL, 'comments' => NULL, 'upload_timestamp' => NULL, 'filename' => NULL, 'text_grade' => NULL, 'professor_upload_filename' => NULL); eF_updateTableData("users_to_projects", $fields, "users_LOGIN='******' and projects_ID=" . $this->project['id']); try { $file = new EfrontFile($users[$login]['filename']); $file->delete(); } catch (Exception $e) { /*Do nothing if a file does not exist*/ } return true; }
$attached_file->delete(); } } catch (Exception $e) { header("HTTP/1.0 500 "); echo rawurlencode($e->getMessage()) . ' (' . $e->getCode() . ')'; } exit; } elseif (isset($_GET['ajax']) && isset($_GET['delete_messages'])) { try { $messages = json_decode($_GET['delete_messages']); foreach ($messages as $message) { $result = eF_getTableData("f_personal_messages", "users_LOGIN, attachments, f_folders_ID", "id=" . $message); eF_deleteTableData("f_personal_messages", "id=" . $message); if ($result[0]['attachments'] != '') { $attached_file = new EfrontFile($result[0]['attachments']); $attached_file->delete(); } } } catch (Exception $e) { handleAjaxExceptions($e); } exit; } elseif (isset($_GET['ajax']) && isset($_GET['move_messages'])) { try { $messages = json_decode($_GET['move_messages']); foreach ($messages as $message) { eF_updateTableData("f_personal_messages", array("f_folders_ID" => $_GET['folder']), "id=" . $message); } } catch (Exception $e) { handleAjaxExceptions($e); }
/** * Handle AJAX actions * * This function is used to perform the necessary ajax actions, * that may be fired by the file manager * <br/>Example: * <code> * $basedir = $currentLesson -> getDirectory(); * $filesystem = new FileSystemTree($basedir); * $filesystem -> handleAjaxActions(); * </code> * * @param EfrontUser $currentUser The current user * @since 3.5.0 * @access public */ public function handleAjaxActions($currentUser) { if (isset($_GET['delete_file']) && (eF_checkParameter($_GET['delete_file'], 'id') || strpos(urldecode($_GET['delete_file']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['delete_file'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->delete(); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } else { if (isset($_GET['share']) && (eF_checkParameter($_GET['share'], 'id') || strpos(urldecode($_GET['share']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['share'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->share(); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } else { if (isset($_GET['unshare']) && (eF_checkParameter($_GET['unshare'], 'id') || strpos(urldecode($_GET['unshare']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['unshare'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->unshare(); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } else { if (isset($_GET['uncompress']) && (eF_checkParameter($_GET['uncompress'], 'id') || strpos(urldecode($_GET['uncompress']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['uncompress'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->uncompress(); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } elseif (isset($_GET['delete_folder']) && (eF_checkParameter($_GET['delete_folder'], 'id') || strpos(urldecode($_GET['delete_folder']), $this->dir['path']) !== false)) { try { $directory = new EfrontDirectory(urldecode($_GET['delete_folder'])); if (strpos($directory['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $directory->delete(); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } elseif (isset($_GET['download']) && (eF_checkParameter($_GET['download'], 'id') || strpos(urldecode($_GET['download']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['download'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->sendFile(true); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } elseif (isset($_GET['view']) && (eF_checkParameter($_GET['view'], 'id') || strpos(urldecode($_GET['view']), $this->dir['path']) !== false)) { try { $file = new EfrontFile(urldecode($_GET['view'])); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $file->sendFile(false); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } elseif (isset($_GET['update']) && (eF_checkParameter($_GET['update'], 'id') || strpos(urldecode($_GET['update']), $this->dir['path']) !== false)) { try { $_GET['type'] == 'file' ? $file = new EfrontFile(urldecode($_GET['update'])) : ($file = new EfrontDirectory(urldecode($_GET['update']))); if (strpos($file['path'], $this->dir['path']) === false) { throw new EfrontFileException(_YOUCANNOTACCESSTHEREQUESTEDRESOURCE, EfrontFileException::UNAUTHORIZED_ACTION); } $previousName = $file['name']; if ($file['name'] != $_GET['name']) { $file->rename(dirname($file['path']) . '/' . EfrontFile::encode(urldecode($_GET['name']))); } echo json_encode(array('previousName' => $previousName, 'name' => $file['name'])); } catch (Exception $e) { handleAjaxExceptions($e); } exit; } } } } }
/** * Handle AJAX actions * * This function is used to perform the necessary ajax actions, * that may be used in tests * <br/>Example: * <code> * $result = eF_getTableData("completed_tests", "*", "id=".$_GET['show_solved_test']); * $showTest = unserialize($result[0]['test']); * $status = $showTest -> getStatus($result[0]['users_LOGIN']); * $testString = $showTest -> toHTMLQuickForm(new HTML_Quickform(), false, true, true); * $testString = $showTest -> toHTMLSolved($testString, true); * if (isset($_GET['ajax'])) { * $showTest -> handleAjaxActions(); * } * </code> * * @since 3.5.2 * @access public */ public function handleAjaxActions() { try { if (isset($_GET['test_score'])) { if (mb_strpos($_GET['test_score'], ",") !== false) { $_GET['test_score'] = str_replace(",", ".", $_GET['test_score']); } if (is_numeric($_GET['test_score']) && $_GET['test_score'] <= 100 && $_GET['test_score'] >= 0) { $this->completedTest['score'] = $_GET['test_score']; foreach ($this->questions as $id => $question) { if ($question->pending) { $this->questions[$id]->pending = 0; $this->questions[$id]->score = $this->completedTest['score']; } } if ($this->test['mastery_score'] && $this->test['mastery_score'] > $this->completedTest['score']) { $this->completedTest['status'] = 'failed'; } else { if ($this->test['mastery_score'] && $this->test['mastery_score'] <= $this->completedTest['score']) { $this->completedTest['status'] = 'passed'; } } $this->completedTest['pending'] = 0; $this->save(); $result = eF_getTableData("completed_tests", "archive", "id=" . $this->completedTest['id']); if (!$result[0]['archive']) { $testUser = EfrontUserFactory::factory($this->completedTest['login']); if ($this->completedTest['status'] == 'failed') { $testUser->setSeenUnit($this->test['content_ID'], $this->test['lessons_ID'], 0); } else { $testUser->setSeenUnit($this->test['content_ID'], $this->test['lessons_ID'], 1); } } echo $this->completedTest['status']; } else { throw new EfrontTestException(_INVALIDSCORE . ': ' . $_GET['test_score'], EfrontTestException::INVALID_SCORE); } exit; } else { if (isset($_GET['test_feedback'])) { $this->completedTest['feedback'] = $_GET['test_feedback']; $this->save(); echo $_GET['test_feedback']; exit; } else { if (isset($_GET['redo_test']) && eF_checkParameter($_GET['redo_test'], 'id')) { $result = eF_getTableData("completed_tests", "tests_ID, users_LOGIN", "id=" . $_GET['redo_test']); $test = new EfrontTest($result[0]['tests_ID']); $test->redo($result[0]['users_LOGIN']); exit; } else { if (isset($_GET['redo_wrong_test']) && eF_checkParameter($_GET['redo_wrong_test'], 'id')) { $result = eF_getTableData("completed_tests", "tests_ID, users_LOGIN", "id=" . $_GET['redo_wrong_test']); $test = new EfrontTest($result[0]['tests_ID']); $test->redoOnlyWrong($result[0]['users_LOGIN']); exit; } else { if (isset($_GET['delete_done_test'])) { if (isset($_GET['all'])) { $this->undo($this->completedTest['login']); //eF_deleteTableData("completed_tests", "users_LOGIN='******'login']."' and tests_ID=".$this -> completedTest['testsId']); } else { $this->undo($this->completedTest['login'], $this->completedTest['id']); //eF_deleteTableData("completed_tests", "id=".$this -> completedTest['id']); } exit; } else { if (isset($_GET['question_score'])) { if (mb_strpos($_GET['question_score'], ",") !== false) { $_GET['question_score'] = str_replace(",", ".", $_GET['question_score']); } if (in_array($_GET['question'], array_keys($this->questions))) { if (is_numeric($_GET['question_score']) && $_GET['question_score'] <= 100 && $_GET['question_score'] >= 0) { $this->questions[$_GET['question']]->score = $_GET['question_score']; $this->questions[$_GET['question']]->scoreInTest = round($_GET['question_score'] * $this->getQuestionWeight($_GET['question']), 3); $this->questions[$_GET['question']]->pending = 0; $score = 0; foreach ($this->questions as $question) { $this->completedTest['scoreInTest'][$question->question['id']] = $question->scoreInTest; $score += $question->scoreInTest; } $this->completedTest['score'] = round($score, 2); $testUser = EfrontUserFactory::factory($this->completedTest['login']); if ($this->test['mastery_score'] && $this->test['mastery_score'] > $this->completedTest['score']) { if ($this->getPotentialScore() < $this->test['mastery_score']) { $this->completedTest['status'] = 'failed'; $flag = 0; //$testUser -> setSeenUnit($this -> test['content_ID'], $this -> test['lessons_ID'], 0); } } else { if ($this->test['mastery_score'] && $this->test['mastery_score'] <= $this->completedTest['score']) { $this->completedTest['status'] = 'passed'; $flag = 1; //$testUser -> setSeenUnit($this -> test['content_ID'], $this -> test['lessons_ID'], 1); } } $this->completedTest['pending'] = 0; foreach ($this->getQuestions(true) as $question) { if ($question->pending) { $this->completedTest['pending'] = 1; } } try { $lesson = new EfrontLesson($this->test['lessons_ID']); $lesson_name = $lesson->lesson['name']; } catch (EfrontLessonException $e) { $lesson_name = _SKILLGAPTESTS; } if (!$this->completedTest['pending']) { EfrontEvent::triggerEvent(array("type" => EfrontEvent::TEST_MARKED, "users_LOGIN" => $this->completedTest['login'], "lessons_ID" => $this->test['lessons_ID'], "lessons_name" => $lesson_name, "entity_ID" => $this->test['id'], "entity_name" => $this->test['name'])); } if ($this->completedTest['status'] == 'failed' && $this->completedTest['pending'] != 1) { EfrontEvent::triggerEvent(array("type" => EfrontEvent::TEST_FAILURE, "users_LOGIN" => $this->completedTest['login'], "lessons_ID" => $this->test['lessons_ID'], "lessons_name" => $lesson_name, "entity_ID" => $this->test['id'], "entity_name" => $this->test['name'])); } $this->save(); $testUser->setSeenUnit($this->test['content_ID'], $this->test['lessons_ID'], $flag); echo json_encode($this->completedTest); } else { throw new EfrontTestException(_INVALIDSCORE . ': ' . $_GET['test_score'], EfrontTestException::INVALID_SCORE); } } else { throw new EfrontTestException(_INVALIDID . ': ' . $_GET['question'], EfrontTestException::QUESTION_NOT_EXISTS); } exit; } else { if (isset($_GET['question_feedback'])) { if (in_array($_GET['question'], array_keys($this->questions))) { $this->questions[$_GET['question']]->feedback = $_GET['question_feedback']; $this->save(); echo $_GET['question_feedback']; } else { throw new EfrontTestException(_INVALIDID . ': ' . $_GET['question'], EfrontTestException::QUESTION_NOT_EXISTS); } exit; } else { if (isset($_GET['delete_file'])) { $file = new EfrontFile($_GET['delete_file']); $testDirectory = $this->getDirectory(); if (strpos($file['path'], $testDirectory['path']) !== false) { $file->delete(); } exit; } } } } } } } } } catch (Exception $e) { handleAjaxExceptions($e); } }