$form->addElement('select', 'ctg_type', _CONTENTTYPE, array('theory' => _THEORY, 'examples' => _EXAMPLES), 'class = "inputSelect"'); //A select drop down for content type.... Exercises went away in version 3 (2007/07/10) makriria if (G_VERSIONTYPE != 'community') { #cpp#ifndef COMMUNITY if (G_VERSIONTYPE != 'standard') { #cpp#ifndef STANDARD $form->addElement('text', 'complete_time', _COMPLETEAFTERSECONDS, 'id = "complete_time" onclick = "setCompletion(this);" size = "5"'); $completeUnitSelect[EfrontUnit::COMPLETION_OPTIONS_COMPLETEAFTERSECONDS] = _COMPLETEAFTERTIMEELAPSED; } #cpp#endif } #cpp#endif //in order to display inactive parent units (#903) $iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST)); //Default iterator excludes non-active units $form->addElement('select', 'parent_content_ID', _UNITPARENT, array(0 => _NOPARENT) + $currentContent->toHTMLSelectOptions($iterator)); $form->addElement('file', 'pdf_upload', _PDFFILE, null); $form->addElement('submit', 'submit_insert_content', _SAVECHANGES, 'class = "flatButton"'); $form->setMaxFileSize(FileSystemTree::getUploadMaxSize() * 1024); if (strpos($currentUnit['ctg_type'], 'scorm') !== false || strpos($currentUnit['scorm_version'], 'tincan') !== false) { $form->addElement('text', 'scorm_size', _EXPLICITIFRAMESIZE, 'class = "inputText" style = "width:50px"'); //Set an explicit size for the SCORM content $form->addElement('select', 'reentry_action', _ACTIONONRENTRYCOMPLETED, array(0 => _LETCONTENTDECIDE, 1 => _DONTCHANGE), 'class = "inputText"'); //Set what action should be performed when a user re-enters a visited content if (!$currentUnit['scorm_version'] || $currentUnit['scorm_version'] == '1.2' || $currentUnit['scorm_version'] == 'tincan') { $form->addElement('select', 'embed_type', _EMBEDTYPE, array('iframe' => _INLINEIFRAME, 'popup' => _NEWWINDOWPOPUP), 'class = "inputSelect"'); $form->addElement('text', 'popup_parameters', _POPUPPARAMETERS, 'class = "inputText" style = "width:600px"'); if (strpos($currentUnit['data'], 'window.open') !== false) { preg_match("/\"scormFrameName\".*\"\\)'/U", $currentUnit['data'], $matches); $popupParameter = mb_substr($matches[0], mb_strpos($matches[0], '"scormFrameName", "') + mb_strlen('"scormFrameName", "'), mb_strpos($matches[0], ")'")); $form->setDefaults(array('popup_parameters' => $popupParameter));
public function getSmartyTpl() { $smarty = $this->getSmartyVar(); $currentUser = $this->getCurrentUser(); $currentLesson = $this->getCurrentLesson(); $currentLessonID = $currentLesson->lesson['id']; if ($currentUser->getRole($this->getCurrentLesson()) == 'professor' || $currentUser->getRole($this->getCurrentLesson()) == 'student') { // XXX $workbookLessonName = _WORKBOOK_NAME . ' [' . $this->getWorkbookLessonName($currentLessonID) . ']'; $smarty->assign("T_WORKBOOK_LESSON_NAME", $workbookLessonName); $lessonQuestions = $this->getLessonQuestions($currentLessonID); $workbookLessons = $this->isWorkbookInstalledByUser($currentUser, $currentUser->getRole($this->getCurrentLesson()), $currentLessonID); $workbookItems = $this->getWorkbookItems($currentLessonID); $nonOptionalQuestionsNr = $this->getNonOptionalQuestionsNr($workbookItems); if ($nonOptionalQuestionsNr != 0) { $questionPercentage = (double) (100 / $nonOptionalQuestionsNr); $questionPercentage = round($questionPercentage, 2); } $isWorkbookPublished = $this->isWorkbookPublished($currentLessonID); } if ($currentUser->getRole($this->getCurrentLesson()) == 'student') { $workbookSettings = $this->getWorkbookSettings($currentLessonID); $smarty->assign("T_WORKBOOK_SETTINGS", $workbookSettings); } $smarty->assign("T_WORKBOOK_BASEURL", $this->moduleBaseUrl); $smarty->assign("T_WORKBOOK_BASELINK", $this->moduleBaseLink); global $popup; isset($popup) && $popup == 1 ? $popup_ = '&popup=1' : ($popup_ = ''); if (isset($_REQUEST['question_preview']) && $_REQUEST['question_preview'] == '1' && isset($_REQUEST['question_id']) && eF_checkParameter($_REQUEST['question_id'], 'id')) { $id = $_REQUEST['question_id']; if (!in_array($id, array_keys($lessonQuestions))) { // reused item $reusedQuestion = $this->getReusedQuestionDetails($id); $type = $reusedQuestion['type']; } else { $type = $lessonQuestions[$id]['type']; } echo $this->questionToHtml($id, $type); exit; } if (isset($_REQUEST['get_progress']) && $_REQUEST['get_progress'] == '1') { $isWorkbookCompleted = $this->isWorkbookCompleted($currentUser->user['login'], $currentLessonID, array_keys($workbookItems), $nonOptionalQuestionsNr); $studentProgress = $this->getStudentProgress($currentUser->user['login'], $currentLessonID); if ($isWorkbookCompleted['is_completed'] == 1) { $unitToComplete = $workbookSettings['unit_to_complete']; $result = eF_updateTableData('module_workbook_progress', array('completion_date' => time()), "lessons_ID='" . $currentLessonID . "' AND users_LOGIN='******'login'] . "'"); if ($unitToComplete != -1) { $currentUser->setSeenUnit($unitToComplete, $currentLessonID, true); } } echo $studentProgress . '-' . $isWorkbookCompleted['id']; exit; } if (isset($_GET['edit_settings']) && $_GET['edit_settings'] == '1') { if ($_SESSION['s_type'] != 'professor') { $message = _WORKBOOK_NOACCESS; $message_type = 'failure'; $this->setMessageVar(urlencode($message), $message_type); } $content = new EfrontContentTree($currentLessonID); $iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($content->tree), RecursiveIteratorIterator::SELF_FIRST), array('ctg_type' => 'theory')); $contentOptions = $content->toHTMLSelectOptions($iterator); $contentOptions = array(-1 => '-------------') + $contentOptions; $workbookSettings = $this->getWorkbookSettings($currentLessonID); if ($isWorkbookPublished == 1) { $contentOptions[$workbookSettings['unit_to_complete']] = str_replace(' ', '', $contentOptions[$workbookSettings['unit_to_complete']]); $contentOptions[$workbookSettings['unit_to_complete']] = str_replace('»', '', $contentOptions[$workbookSettings['unit_to_complete']]); } $form = new HTML_QuickForm("edit_settings_form", "post", $this->moduleBaseUrl . "&edit_settings=1", "", null, true); $form->addElement('text', 'lesson_name', _WORKBOOK_LESSON_NAME, 'class="inputText"'); $form->addRule('lesson_name', _THEFIELD . ' "' . _WORKBOOK_LESSON_NAME . '" ' . _ISMANDATORY, 'required', null, 'client'); $form->addElement('advcheckbox', 'allow_print', _WORKBOOK_ALLOW_PRINT, null, 'class="inputCheckBox"', array(0, 1)); $form->addElement('advcheckbox', 'allow_export', _WORKBOOK_ALLOW_EXPORT, null, 'class="inputCheckBox"', array(0, 1)); $form->addElement('advcheckbox', 'edit_answers', _WORKBOOK_EDIT_ANSWERS, null, 'class="inputCheckBox"', array(0, 1)); $form->addElement('select', 'unit_to_complete', _WORKBOOK_UNIT_TO_COMPLETE, $contentOptions); $form->addElement('submit', 'submit', _UPDATE, 'class="flatButton"'); if ($isWorkbookPublished == 1) { $form->freeze('unit_to_complete'); } $form->setDefaults($workbookSettings); if ($form->isSubmitted() && $form->validate()) { $values = $form->exportValues(); $fields = array("lesson_name" => $values['lesson_name'], "allow_print" => $values['allow_print'], "allow_export" => $values['allow_export'], "edit_answers" => $values['edit_answers'], "unit_to_complete" => $values['unit_to_complete']); if (eF_updateTableData("module_workbook_settings", $fields, "id=" . $workbookSettings['id'])) { $smarty->assign("T_WORKBOOK_MESSAGE", _WORKBOOK_SETTINGS_SUCCESSFULLY_EDITED); $smarty->assign("T_WORKBOOK_MESSAGE_TYPE", 'success'); } else { $smarty->assign("T_WORKBOOK_MESSAGE", _WORKBOOK_SETTINGS_EDIT_PROBLEM); $smarty->assign("T_WORKBOOK_MESSAGE_TYPE", 'failure'); } } $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $renderer->setRequiredTemplate('{$html}{if $required} <span class="formRequired">*</span>{/if}'); $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR); $form->setRequiredNote(_REQUIREDNOTE); $form->accept($renderer); $smarty->assign('T_WORKBOOK_EDIT_SETTINGS_FORM', $renderer->toArray()); } if (isset($_GET['reuse_item']) && $_GET['reuse_item'] == '1') { if ($_SESSION['s_type'] != 'professor') { $message = _WORKBOOK_NOACCESS; $message_type = 'failure'; $this->setMessageVar(urlencode($message), $message_type); } $form = new HTML_QuickForm("reuse_item_form", "post", $this->moduleBaseUrl . "&reuse_item=1", "", null, true); $form->addElement('text', 'item_id', _WORKBOOK_ITEM_ID, 'class="inputText"'); $form->addRule('item_id', _THEFIELD . ' "' . _WORKBOOK_ITEM_ID . '" ' . _ISMANDATORY, 'required', null, 'client'); $form->addElement('submit', 'submit', _WORKBOOK_REUSE_ITEM, 'class="flatButton"'); if ($form->isSubmitted() && $form->validate()) { $values = $form->exportValues(); $existingIDs = $this->getItemsUniqueIDs(); if (!in_array($values['item_id'], $existingIDs)) { $message = _WORKBOOK_INVALID_UNIQUE_ID; $message_type = 'failure'; $this->setMessageVar(urlencode($message), $message_type); } else { $item = $this->getItemByUniqueID($values['item_id']); $fields = array("item_title" => $item['item_title'], "item_text" => $item['item_text'], "item_question" => $item['item_question'], "question_text" => $item['question_text'], "check_answer" => $item['check_answer'], "lessons_ID" => $currentLessonID, "unique_ID" => $this->generateItemID(), "position" => $this->itemPosition($currentLessonID)); if (eF_insertTableData("module_workbook_items", $fields)) { $smarty->assign("T_WORKBOOK_MESSAGE", urlencode(_WORKBOOK_ITEM_SUCCESSFULLY_ADDED)); $smarty->assign("T_WORKBOOK_MESSAGE_TYPE", 'success'); } else { $smarty->assign("T_WORKBOOK_MESSAGE", _WORKBOOK_ITEM_ADD_PROBLEM); $smarty->assign("T_WORKBOOK_MESSAGE_TYPE", 'failure'); } } } $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $renderer->setRequiredTemplate('{$html}{if $required} <span class="formRequired">*</span>{/if}'); $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR); $form->setRequiredNote(_REQUIREDNOTE); $form->accept($renderer); $smarty->assign('T_WORKBOOK_REUSE_ITEM_FORM', $renderer->toArray()); } if (isset($_GET['move_item']) && eF_checkParameter($_GET['move_item'], 'id') && in_array($_GET['move_item'], array_keys($workbookItems))) { if ($_SESSION['s_type'] != 'professor') { $message = _WORKBOOK_NOACCESS; $message_type = 'failure'; $this->setMessageVar(urlencode($message), $message_type); } $smarty->assign("T_WORKBOOK_ITEMS_COUNT", count($workbookItems)); $itemPosition = $workbookItems[$_GET['move_item']]['position']; $availablePositions = array(); foreach ($workbookItems as $key => $value) { if ($value['position'] != $itemPosition) { $availablePositions[$value['position']] = $value['position']; } } $form = new HTML_QuickForm("move_item_form", "post", $this->moduleBaseUrl . "&move_item=" . $_GET['move_item'], "", null, true); $form->addElement('select', 'item_position', _WORKBOOK_ITEM_NEW_POSITION, $availablePositions, ''); $form->addElement('submit', 'submit', _WORKBOOK_MOVE_ITEM, 'class="flatButton"'); if ($form->isSubmitted() && $form->validate()) { $values = $form->exportValues(); $newPosition = $values['item_position']; if ($newPosition > $itemPosition) { foreach ($workbookItems as $key => $value) { if ($value['position'] > $itemPosition && $value['position'] <= $newPosition) { eF_updateTableData("module_workbook_items", array('position' => $value['position'] - 1), "id=" . $key); } } } else { foreach ($workbookItems as $key => $value) { if ($value['position'] < $itemPosition && $value['position'] >= $newPosition) { eF_updateTableData("module_workbook_items", array('position' => $value['position'] + 1), "id=" . $key); } } } eF_updateTableData("module_workbook_items", array('position' => $newPosition), "id=" . $_GET['move_item']); $smarty->assign("T_WORKBOOK_MESSAGE", _WORKBOOK_ITEM_SUCCESSFULLY_MOVED); $smarty->assign("T_WORKBOOK_MESSAGE_TYPE", 'success'); } $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $renderer->setRequiredTemplate('{$html}{if $required} <span class="formRequired">*</span>{/if}'); $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR); $form->setRequiredNote(_REQUIREDNOTE); $form->accept($renderer); $smarty->assign('T_WORKBOOK_MOVE_ITEM_FORM', $renderer->toArray()); } if (isset($_GET['delete_item']) && eF_checkParameter($_GET['delete_item'], 'id') && in_array($_GET['delete_item'], array_keys($workbookItems))) { $item_id = $_GET['delete_item']; $itemPosition = $workbookItems[$item_id]['position']; foreach ($workbookItems as $key => $value) { if ($value['position'] > $itemPosition) { eF_updateTableData("module_workbook_items", array('position' => $value['position'] - 1), "id=" . $key); } } eF_deleteTableData("module_workbook_items", "id=" . $item_id); } if (isset($_GET['switch_lesson']) && eF_checkParameter($_GET['switch_lesson'], 'id') && in_array($_GET['switch_lesson'], array_keys($workbookLessons))) { $lessonID = $_GET['switch_lesson']; eF_redirect("location:" . $this->moduleBaseUrl . "&lessons_ID=" . $lessonID . $popup_); } if (isset($_GET['add_item']) && $_GET['add_item'] == '1' || isset($_GET['edit_item']) && eF_checkParameter($_GET['edit_item'], 'id') && in_array($_GET['edit_item'], array_keys($workbookItems))) { if ($_SESSION['s_type'] != "professor") { eF_redirect($this->moduleBaseUrl . "&message=" . urlencode(_WORKBOOK_NOACCESS) . $popup_); } global $load_editor; $load_editor = true; $questionsText = array(); $questionsText[-1] = "-----------------------"; foreach ($lessonQuestions as $key => $value) { $questionsText[$key] = $this->truncateText(strip_tags($value['text']), 70); } if (isset($_GET['edit_item'])) { $editItemID = $_GET['edit_item']; $editItemQuestion = $workbookItems[$editItemID]['item_question']; if ($editItemQuestion != '-1' && !in_array($editItemQuestion, array_keys($questionsText))) { // reused item $reusedQuestion = $this->getReusedQuestionDetails($editItemQuestion); $questionsText[$editItemQuestion] = $this->truncateText(strip_tags($reusedQuestion['text']), 70); } } isset($_GET['add_item']) ? $postTarget = "&add_item=1" : ($postTarget = "&edit_item=" . $_GET['edit_item']); $form = new HTML_QuickForm("add_edit_item_form", "post", $this->moduleBaseUrl . $postTarget, "", null, true); $form->addElement('text', 'item_title', _WORKBOOK_ITEM_TITLE, 'class="inputText" style="width:500px;"'); $form->addElement('textarea', 'item_text', _WORKBOOK_ITEM_TEXT, 'class="mceEditor" style="width:99%;height:300px;" id="editor_content_data"'); $form->addElement('select', 'item_question', _WORKBOOK_ITEM_QUESTION, $questionsText, 'onchange="questionPreview(this)"'); $form->addElement('advcheckbox', 'check_answer', _WORKBOOK_ITEM_GRADE_ANSWER, null, 'class="inputCheckBox"', array(0, 1)); if (isset($_GET['add_item'])) { $form->addElement('submit', 'submit', _WORKBOOK_ADD_ITEM, 'class="flatButton"'); } else { $form->addElement('submit', 'submit', _WORKBOOK_UPDATE_ITEM, 'class="flatButton"'); } if (isset($_GET['edit_item'])) { $editItem = $workbookItems[$_GET['edit_item']]; $form->setDefaults($editItem); if ($isWorkbookPublished == '1') { $editItem['question_title'] = $questionsText[$editItem['item_question']]; if ($editItem['check_answer'] == '1') { $editItem['check_answer_text'] = _YES; } else { $editItem['check_answer_text'] = _NO; } } $smarty->assign('T_WORKBOOK_EDIT_ITEM_DETAILS', $editItem); } if ($form->isSubmitted() && $form->validate()) { $values = $form->exportValues(); isset($_GET['add_item']) ? $lessonID = $currentLessonID : ($lessonID = $editItem['lessons_ID']); isset($_GET['add_item']) ? $uniqueID = $this->generateItemID() : ($uniqueID = $editItem['unique_ID']); isset($_GET['add_item']) ? $position = $this->itemPosition($currentLessonID) : ($position = $editItem['position']); if ($values['item_question'] != '-1') { $id = $values['item_question']; if (!in_array($id, array_keys($lessonQuestions))) { // edit reused item $reusedQuestion = $this->getReusedQuestionDetails($id); $type = $reusedQuestion['type']; } else { $type = $lessonQuestions[$id]['type']; } $questionText = $this->questionToHtml($id, $type); } else { $questionText = ''; } $fields = array("item_title" => $values['item_title'], "item_text" => $values['item_text'], "item_question" => $values['item_question'], "question_text" => $questionText, "check_answer" => $values['check_answer'], "lessons_ID" => $lessonID, "unique_ID" => $uniqueID, "position" => $position); if ($values['item_title'] == '' && $values['item_text'] == '' && $values['item_question'] == '-1') { $message = _WORKBOOK_ITEM_EMPTY_FIELDS; if (isset($_GET['add_item'])) { eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure&add_item=1" . $popup_); } else { $itemID = $_GET['edit_item']; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure&edit_item=" . $itemID . $popup_); } } if (isset($_GET['add_item'])) { if (eF_insertTableData("module_workbook_items", $fields)) { $message = _WORKBOOK_ITEM_SUCCESSFULLY_ADDED; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=success" . $popup_); } else { $message = _WORKBOOK_ITEM_ADD_PROBLEM; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure" . $popup_); } } else { if (eF_updateTableData("module_workbook_items", $fields, "id=" . $_GET['edit_item'])) { $message = _WORKBOOK_ITEM_SUCCESSFULLY_EDITED; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=success" . $popup_); } else { $message = _WORKBOOK_ITEM_EDIT_PROBLEM; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure" . $popup_); } } } $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR); $form->setRequiredNote(_REQUIREDNOTE); $form->accept($renderer); $smarty->assign('T_WORKBOOK_ADD_EDIT_ITEM_FORM', $renderer->toArray()); $basedir = $currentLesson->getDirectory(); $options = array('lessons_ID' => $currentLessonID, 'metadata' => 0); $url = $_SERVER['REQUEST_URI']; $extraFileTools = array(array('image' => 'images/16x16/arrow_right.png', 'title' => _INSERTEDITOR, 'action' => 'insert_editor')); include "file_manager.php"; } if (isset($_GET['publish_workbook']) && $_GET['publish_workbook'] == '1') { $result = eF_getTableData("module_workbook_publish", "publish", "lessons_ID=" . $currentLessonID); if (count($result) == 0) { if (eF_insertTableData("module_workbook_publish", array('lessons_ID' => $currentLessonID, 'publish' => 1))) { $message = _WORKBOOK_SUCCESSFULLY_PUBLISHED; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=success" . $popup_); } else { $message = _WORKBOOK_PUBLISH_PROBLEM; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure" . $popup_); } } else { if (eF_updateTableData("module_workbook_publish", array('publish' => 1), "lessons_ID=" . $currentLessonID)) { $message = _WORKBOOK_SUCCESSFULLY_PUBLISHED; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=success" . $popup_); } else { $message = _WORKBOOK_PUBLISH_PROBLEM; eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=failure" . $popup_); } } } if (isset($_GET['reset_workbook_professor']) && $_GET['reset_workbook_professor'] == '1') { eF_updateTableData("module_workbook_publish", array('publish' => 0), "lessons_ID=" . $currentLessonID); foreach ($workbookItems as $key => $value) { eF_deleteTableData("module_workbook_answers", "item_id=" . $key); eF_deleteTableData("module_workbook_autosave", "item_id=" . $key); eF_deleteTableData("module_workbook_progress", "lessons_ID=" . $currentLessonID); } } if (isset($_GET['reset_workbook_student']) && eF_checkParameter($_GET['reset_workbook_student'], 'id')) { $id = $_GET['reset_workbook_student']; $result = eF_getTableData("module_workbook_progress", "users_LOGIN", "id=" . $id); if ($result[0]['users_LOGIN'] != $currentUser->user['login']) { eF_redirect($this->moduleBaseUrl . "&message=" . urlencode(_WORKBOOK_NOACCESS) . $popup_); } eF_deleteTableData("module_workbook_progress", "id=" . $id); foreach ($workbookItems as $key => $value) { eF_deleteTableData("module_workbook_answers", "item_id=" . $key . " AND users_LOGIN='******'login'] . "'"); } $unitToComplete = $workbookSettings['unit_to_complete']; if ($unitToComplete != -1) { $currentUser->setSeenUnit($unitToComplete, $currentLessonID, false); } } if (isset($_GET['download_as']) && $_GET['download_as'] == 'doc') { include dirname(__FILE__) . "/classes/html_to_doc.inc.php"; $workbookAnswers = $this->getWorkbookAnswers($currentUser->user['login'], array_keys($workbookItems)); $workbookHTML = ''; foreach ($workbookItems as $key => $value) { $workbookHTML .= '<div style="width:98%;float:left;border:1px dotted #808080;padding: 5px 10px;">'; $workbookHTML .= '<div style="background-color: #EAEAEA;border: 1px solid #AAAAAA;padding: 2px;font-weight: bold;">'; $workbookHTML .= _WORKBOOK_ITEMS_COUNT . $value['position']; if ($value['item_title'] != '') { $workbookHTML .= ' - ' . $value['item_title']; } $workbookHTML .= '</div><br/>'; if ($value['item_text'] != '') { $workbookHTML .= '<div>' . $value['item_text'] . '</div><br/>'; } if ($value['item_question'] != '-1') { $questionType = $lessonQuestions[$value['item_question']]['type']; if ($workbookAnswers[$value['id']] == '') { if ($questionType == 'drag_drop') { $dragDrop = eF_getTableData("questions", "options, answer, text", "id=" . $value['item_question']); $options = unserialize($dragDrop[0]['options']); $answer = unserialize($dragDrop[0]['answer']); shuffle($options); shuffle($answer); $workbookHTML .= $dragDrop[0]['text']; for ($i = 0; $i < count($options); $i++) { $workbookHTML .= '<div>' . $options[$i] . ' '; $workbookHTML .= $answer[$i] . '</div>'; } } else { $workbookHTML .= '<div>' . $value['question_text'] . '</div>'; } } else { $workbookHTML .= '<div>' . $workbookAnswers[$value['id']] . '</div>'; } } $workbookHTML .= '</div><br/>'; } $workbookHTML = preg_replace('/<script\\b[^>]*>(.*?)<\\/script>/is', "", $workbookHTML); $fileName = _WORKBOOK_NAME . '_' . $this->getWorkbookLessonName($currentLessonID); $fileName = preg_replace('/[\\s]+/', '_', $fileName); $htmltodoc = new HTML_TO_DOC(); $htmltodoc->createDoc($workbookHTML, $fileName, true); exit(0); } if (isset($_GET['download_as']) && $_GET['download_as'] == 'pdf') { $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true); $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor(PDF_AUTHOR); $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); $pdf->setFontSubsetting(false); $pdf->AddPage(); $completion_date = ''; $resutlt = eF_getTableData('module_workbook_progress', 'completion_date', "users_LOGIN='******'login'] . "' and lessons_ID='" . $currentLessonID . "'"); if ($resutlt) { $completion_date = $resutlt[0]['completion_date']; } $workbookHTML = ''; $workbookHTML .= '<table>'; $workbookHTML .= '<tr>'; $workbookHTML .= '<td colspan="2">'; $workbookHTML .= formatLogin($currentUser->user['login']); $workbookHTML .= '</td>'; $workbookHTML .= '</tr>'; $workbookHTML .= '<tr>'; $workbookHTML .= '<td>'; $workbookHTML .= $workbookLessonName; $workbookHTML .= '</td>'; $workbookHTML .= '<td>'; $workbookHTML .= formatTimestamp($completion_date); $workbookHTML .= '</td>'; $workbookHTML .= '</tr>'; $workbookHTML .= '</table>'; $pdf->writeHTML($workbookHTML, true, false, true, false, ''); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); $pdf->setHeaderFont(array('Freeserif', 'I', 11)); $pdf->setFooterFont(array('Freeserif', '', 8)); $pdf->setHeaderData('', '', '', $workbookLessonName); $pdf->AliasNbPages(); $pdf->SetFont('Freeserif', '', 10); $pdf->SetTextColor(0, 0, 0); $pdf->SetFont('Freeserif', '', 10); $pdf->SetTextColor(0, 0, 0); $workbookAnswers = $this->getWorkbookAnswers($currentUser->user['login'], array_keys($workbookItems)); $pdf->AddPage(); $workbookHTML .= ''; $itemLogo = new EfrontFile(G_DEFAULTIMAGESPATH . "32x32/unit.png"); $itemLogoUrl = $itemLogo['path']; foreach ($workbookItems as $key => $value) { $workbookHTML .= '<div id="pdf-block" style="width:98%;float:left;border:1px dotted #808080;page-break-after:always;">'; $workbookHTML .= '<div style="background-color: #EAEAEA;font-weight: bold;">'; $workbookHTML .= '<img src="' . $itemLogoUrl . '"/> ' . _WORKBOOK_ITEMS_COUNT . $value['position']; if ($value['item_title'] != '') { $workbookHTML .= ' - ' . $value['item_title']; } $workbookHTML .= '</div>'; if ($value['item_text'] != '') { $workbookHTML .= '<div>' . $value['item_text'] . '</div>'; } if ($value['item_question'] != '-1') { $questionType = $lessonQuestions[$value['item_question']]['type']; if ($workbookAnswers[$value['id']] == '') { if ($questionType == 'drag_drop') { $dragDrop = eF_getTableData("questions", "options, answer, text", "id=" . $value['item_question']); $options = unserialize($dragDrop[0]['options']); $answer = unserialize($dragDrop[0]['answer']); shuffle($options); shuffle($answer); $workbookHTML .= $dragDrop[0]['text']; for ($i = 0; $i < count($options); $i++) { $workbookHTML .= '<div>' . $options[$i] . ' '; $workbookHTML .= $answer[$i] . '</div>'; } } else { $workbookHTML .= '<div>' . $value['question_text'] . '</div>'; } } else { $workbookHTML .= '<div>' . $workbookAnswers[$value['id']] . '</div>'; } } $workbookHTML .= '</div><br/>'; } $workbookHTML = preg_replace('/<script\\b[^>]*>(.*?)<\\/script>/is', "", $workbookHTML); $pdf->writeHTML($workbookHTML, true, false, true, false, ''); $fileName = _WORKBOOK_NAME . '_' . str_replace(' ', '_', $this->getWorkbookLessonName($currentLessonID)) . '.pdf'; header("Content-type: application/pdf"); header("Content-disposition: attachment; filename=" . $fileName); echo $pdf->Output('', 'S'); exit(0); } if (isset($_GET['check_workbook_progress']) && $_GET['check_workbook_progress'] == '1') { $lessonStudents = $currentLesson->getUsers('student'); $workbookStudents = array(); foreach ($lessonStudents as $userLogin => $value) { if ($nonOptionalQuestionsNr != 0) { $studentProgress = $this->getStudentProgress($userLogin, $currentLessonID); $studentProgress .= '%'; } else { $studentProgress = '-'; } $workbookStudents[$userLogin] = array('login' => $userLogin, 'progress' => $studentProgress); } $smarty->assign("T_WORKBOOK_STUDENTS", $workbookStudents); } if (isset($_GET['preview_workbook']) && $_GET['preview_workbook'] == '1' && isset($_GET['student']) && eF_checkParameter($_GET['student'], 'login')) { $userLogin = $_GET['student']; $studentProgress = $this->getStudentProgress($userLogin, $currentLessonID); $smarty->assign("T_WORKBOOK_PREVIEW_STUDENT_PROGRESS", $studentProgress); $workbookAnswers = $this->getWorkbookAnswers($userLogin, array_keys($workbookItems)); $smarty->assign("T_WORKBOOK_PREVIEW_ANSWERS", $workbookAnswers); } if (isset($_GET['get_reset_message']) && $_GET['get_reset_message'] == '1') { echo $this->getResetMessage(array_keys($workbookItems)); exit; } if (isset($_POST['item_submitted'])) { $itemID = $_POST['item_submitted']; $questionID = $workbookItems[$itemID]['item_question']; $checkAnswer = $workbookItems[$itemID]['check_answer']; if (!in_array($questionID, array_keys($lessonQuestions))) { // reused item $reusedQuestion = $this->getReusedQuestionDetails($questionID); $questionType = $reusedQuestion['type']; } else { $questionType = $lessonQuestions[$questionID]['type']; } $question = QuestionFactory::factory($questionID); $question->setDone($_POST['question'][$questionID]); $results = $question->correct(); if ($questionType != 'raw_text' && !ef_compare_float($results['score'], 1)) { print '-1'; } else { $form = new HTML_QuickForm("questionForm", "post", "", "", null, true); $fields = array('item_id' => $itemID, 'html_solved' => $question->toHTMLSolved($form), 'users_LOGIN' => $currentUser->user['login']); eF_insertTableData("module_workbook_answers", $fields); if ($checkAnswer == '1') { $this->updateStudentProgress($currentUser->user['login'], $currentLessonID, $questionPercentage, $nonOptionalQuestionsNr); } echo $question->toHTMLSolved($form); } eF_deleteTableData("module_workbook_autosave", "item_id=" . $itemID . " AND users_LOGIN='******'login'] . "'"); exit(0); } if (isset($_POST['item_submitted_autosave'])) { $itemID = $_POST['item_submitted_autosave']; $questionID = $workbookItems[$itemID]['item_question']; $question = QuestionFactory::factory($questionID); $form = new HTML_QuickForm("questionForm", "post", "", "", null, true); $form->setDefaults($_POST); $fields = array('item_id' => $itemID, 'autosave_text' => $question->toHTML($form), 'users_LOGIN' => $currentUser->user['login']); eF_deleteTableData("module_workbook_autosave", "item_id=" . $itemID . " AND users_LOGIN='******'login'] . "'"); eF_insertTableData("module_workbook_autosave", $fields); exit(0); } if (isset($_POST['item_to_update'])) { $itemID = $_POST['item_to_update']; $questionID = $workbookItems[$itemID]['item_question']; $question = QuestionFactory::factory($questionID); $question->userAnswer = urldecode($_POST['ans']); $form = new HTML_QuickForm("questionForm", "post", "", "", null, true); $form->setDefaults($_POST); print $question->toHTML($form); exit(0); } if (isset($_POST['item_updated'])) { $itemID = $_POST['item_updated']; $questionID = $workbookItems[$itemID]['item_question']; $question = QuestionFactory::factory($questionID); $question->setDone($_POST['question'][$questionID]); $form = new HTML_QuickForm("questionForm", "post", "", "", null, true); $answerToUpdate = eF_getTableData("module_workbook_answers", "id", "item_id=" . $itemID . " AND users_LOGIN='******'login'] . "'"); eF_updateTableData("module_workbook_answers", array('html_solved' => $question->toHTMLSolved($form)), "id=" . $answerToUpdate[0]['id']); echo $question->toHTMLSolved($form); eF_deleteTableData("module_workbook_autosave", "item_id=" . $itemID . " AND users_LOGIN='******'login'] . "'"); exit(0); } else { if ($currentUser->getRole($this->getCurrentLesson()) == 'professor' || $currentUser->getRole($this->getCurrentLesson()) == 'student') { $workbookItems = $this->getWorkbookItems($currentLessonID); $smarty->assign("T_WORKBOOK_ITEMS", $workbookItems); $smarty->assign("T_WORKBOOK_LESSONS", $workbookLessons); $isWorkbookPublished = $this->isWorkbookPublished($currentLessonID); $smarty->assign("T_WORKBOOK_IS_PUBLISHED", $isWorkbookPublished); $smarty->assign("T_WORKBOOK_NON_OPTIONAL_QUESTIONS_NR", $nonOptionalQuestionsNr); } if ($currentUser->getRole($this->getCurrentLesson()) == 'professor') { $workbookOptions[] = array('text' => _SETTINGS, 'image' => $this->moduleBaseLink . 'images/settings.png', 'href' => $this->moduleBaseUrl . '&edit_settings=1&popup=1', 'onClick' => "eF_js_showDivPopup(event, '" . _SETTINGS . "', 0)", 'target' => 'POPUP_FRAME', 'id' => 'edit_settings'); $workbookOptions[] = array('text' => _WORKBOOK_POPUP_INFO, 'image' => $this->moduleBaseLink . 'images/info.png', 'href' => $this->moduleBaseUrl . '&popup_info=1&popup=1', 'onClick' => "eF_js_showDivPopup(event, '" . _WORKBOOK_POPUP_INFO . "', 2)", 'target' => 'POPUP_FRAME', 'id' => 'popup_info'); $smarty->assign("T_WORKBOOK_OPTIONS", $workbookOptions); } else { if ($currentUser->getRole($this->getCurrentLesson()) == 'student') { $workbookAnswers = $this->getWorkbookAnswers($currentUser->user['login'], array_keys($workbookItems)); $smarty->assign("T_WORKBOOK_ANSWERS", $workbookAnswers); $autoSaveAnswers = $this->getAutoSaveAnswers($currentUser->user['login'], array_keys($workbookItems)); $smarty->assign("T_WORKBOOK_AUTOSAVE_ANSWERS", $autoSaveAnswers); $studentProgress = $this->getStudentProgress($currentUser->user['login'], $currentLessonID); $smarty->assign("T_WORKBOOK_STUDENT_PROGRESS", $studentProgress); $isWorkbookCompleted = $this->isWorkbookCompleted($currentUser->user['login'], $currentLessonID, array_keys($workbookItems), $nonOptionalQuestionsNr); $smarty->assign("T_WORKBOOK_IS_COMPLETED", $isWorkbookCompleted); } } } if ($currentUser->getRole($this->getCurrentLesson()) == 'professor') { return $this->moduleBaseDir . "module_workbook_professor.tpl"; } else { if ($currentUser->getRole($this->getCurrentLesson()) == 'student') { return $this->moduleBaseDir . "module_workbook_student.tpl"; } } }
public function getModule() { $smarty = $this->getSmartyVar(); // Always show the preview of the data if ($_POST['preview'] || $_POST['submit']) { if ($_POST['questions_format'] == "gift") { $questions = $this->scanGIFT($_POST['imported_data']); } else { $questions = $this->scanAIKEN(str_replace('\\"', '"', str_replace("\\'", "'", $_POST['imported_data']))); } if (sizeof($questions)) { $smarty->assign("T_PREVIEW_DIV", $this->createPreviewHTML($questions)); } } // Submit the data the data if ($_POST['submit']) { if ($_POST['select_unit'] == -1 || $_POST['select_unit'] == -2) { $content_ID = 0; } else { $content_ID = $_POST['select_unit']; } $currentLesson = $this->getCurrentLesson(); $lessons_ID = $currentLesson->lesson['id']; $count = 0; foreach ($questions as $key => $question) { if ($question['type'] != "same" && $question['type'] != "error" && $question['type'] != "no_answer_error") { $question['content_ID'] = $content_ID; $question['lessons_ID'] = $lessons_ID; $question['difficulty'] = "medium"; if (sizeof($question['options'])) { $question['options'] = serialize($question['options']); //$question['options'] = str_replace("'", "'", $question['options']); //$question['options'] = str_replace("\r", "", $question['options']); } if (sizeof($question['answer'])) { // Different accounting for answers of multiple many type if ($question['type'] == "multiple_many") { $answers = array(); foreach ($question['answer'] as $answer) { $answers[$answer] = "1"; } $question['answer'] = $answers; } $question['answer'] = serialize($question['answer']); //$question['answer'] = str_replace("'", "'", $question['answer']); //$question['answer'] = str_replace("\r", "", $question['answer']); } //$question['text'] = str_replace("'", "'", $question['text']); if (isset($question['explanation'])) { //$question['explanation'] = str_replace("'", "'", $question['explanation']); //$question['explanation'] = str_replace("\r", "", $question['explanation']); } if (Question::createQuestion($question)) { $count++; } } } if ($count) { $this->setMessageVar($count . " " . _GIFTAIKEN_QUESTIONSIMPORTEDSUCCESSFULLY, "success"); } else { $this->setMessageVar(_GIFTAIKEN_NOQUESTIONCOULDBEIMPORTED, "failure"); } } $pos = strpos($_SERVER['REQUEST_URI'], "&message"); if ($pos) { $postUrl = substr($_SERVER['REQUEST_URI'], 0, $pos); } else { $postUrl = $_SERVER['REQUEST_URI']; } $importForm = new HTML_QuickForm("import_users_form", "post", $postUrl, "", null, true); $importForm->registerRule('checkParameter', 'callback', 'eF_checkParameter'); //Register this rule for checking user input with our function, eF_checkParameter $importForm->addElement('radio', 'questions_format', _GIFTAIKEN_GIFT, null, 'gift', 'id="gift_selection"'); $importForm->addElement('radio', 'questions_format', _GIFTAIKEN_AIKEN, null, 'aiken', 'id="aiken_selection"'); $currentLesson = $this->getCurrentLesson(); $currentContent = new EfrontContentTree($currentLesson->lesson['id']); $smarty->assign("T_UNITS", $currentContent->toHTMLSelectOptions()); $importForm->addElement('textarea', 'imported_data', _GIFTAIKEN_QUESTIONDATATOIMPORT, 'class = "inputProjectTextarea" id="imported_data"'); $importForm->addElement('submit', 'preview', _PREVIEW, 'class=flatButton onclick="$(\'import_users_form\').action += \'&preview=1\'"'); $importForm->addElement('submit', 'submit', _SUBMIT, 'class=flatButton'); $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty); $importForm->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR); $importForm->setRequiredNote(_REQUIREDNOTE); $importForm->accept($renderer); $smarty->assign('T_GIFTAIKENQUESTIONS_FORM', $renderer->toArray()); return true; }
exit; } elseif (isset($_GET['add_rule']) || isset($_GET['edit_rule']) && eF_checkParameter($_GET['edit_rule'], 'id')) { if (isset($currentUser->coreAccess['content']) && $currentUser->coreAccess['content'] != 'change') { eF_redirect("" . basename($_SERVER['PHP_SELF']) . "?ctg=control_panel&message=" . urlencode(_UNAUTHORIZEDACCESS) . "&message_type=failure"); } isset($_GET['add_rule']) ? $post_target = 'add_rule=1' : ($post_target = 'edit_rule=' . $_GET['edit_rule']); $form = new HTML_QuickForm("add_rule_form", "post", basename($_SERVER['PHP_SELF']) . "?ctg=rules&" . $post_target, "", null, true); $form->registerRule('checkParameter', 'callback', 'eF_checkParameter'); $form->registerRule('in_array', 'callback', 'in_array'); $users = $currentLesson->getUsers('student'); sizeof($users) > 0 ? $users = array('*' => _ALLOFTHEM) + array_combine(array_keys($users), array_keys($users)) : ($users = array('*' => _ALLOFTHEM)); $form->addElement('select', 'scope', null, $users, 'class = "inputSelect"'); $form->addRule('scope', _THEFIELD . ' ' . _ISMANDATORY, 'required', null, 'client'); $form->addRule('scope', _INVALIDLOGIN, 'checkParameter', 'text'); $testsIterator = new EfrontTestsFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST), array('active' => 1))); $testUnits = $currentContent->toHTMLSelectOptions($testsIterator); $contentIterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST), array('active' => 1)); //Get active units that are anything but tests (false negates both rules) $noTestUnits = $currentContent->toHTMLSelectOptions($contentIterator); $form->addElement('select', 'exclusion_unit', null, $currentContent->toHTMLSelectOptions(), 'class = "inputSelect"'); $form->addRule('exclusion_unit', _INVALIDID, null, 'numeric'); $rule_type = array('always' => _ALWAYS, 'hasnot_seen' => _HASNOTSEENTHEUNIT); $form->addElement('select', 'rule_type', null, $rule_type, 'class = "inputSelect" onchange = "selectRule(this)"'); $form->addRule('rule_type', _INVALIDRULE, 'in_array', array_keys($rule_type)); $form->addElement('select', 'rule_unit', null, $noTestUnits, 'class = "inputSelect"'); $form->addRule('rule_unit', _INVALIDID, 'numeric', null, 'client'); $form->addElement('select', 'test_unit', null, $testUnits, 'class = "inputSelect"'); $form->addRule('test_unit', _INVALIDID, 'numeric', null, 'client'); $form->addElement('text', 'score', null, 'style = "width:5em"'); $form->addRule('score', _THEFIELD . ' ' . _ISMANDATORY, 'required', null, 'client'); $form->addRule('score', _INVALIDSCORE, 'numeric');
//Retrieve all questions that belong to this lesson } } if ($_GET['showall'] && EfrontUser::isOptionVisible('questions_pool')) { $directionsTree = new EfrontDirectionsTree(); $directionsPaths = $directionsTree->toPathString(); $lessons = EFrontLesson::getLessons(false, true); foreach ($lessons as $key => $value) { $lessons[$key]['lesson_path'] = $directionsPaths[$value['directions_ID']] . " --> " . $value['name']; } $smarty->assign("T_LESSONS", $lessons); } //Assign the content units so that we can build the units select box for the "from_unit" option $iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST)); //Default iterator excludes non-active units $contentUnits = $currentContent->toHTMLSelectOptions($iterator); $smarty->assign("T_UNITS", $contentUnits); //Fix questions if their corresponding content is missing $contentUnits = array_keys($contentUnits); if (!$_GET['showall']) { foreach ($questions as $key => $value) { $names = array(); if (!in_array($value['content_ID'], $contentUnits)) { $question = QuestionFactory::factory($value); $question->question['content_ID'] = 0; $question->persist(); } } } $selectedUnit ? $units = $currentContent->getNodeChildren($selectedUnit) : ($units = $currentContent->tree); if (sizeof($units) > 0) {