}
        $_SESSION['s_lessons_ID'] = $currentLesson->lesson['id'];
    }
    $currentContent = new EfrontContentTree($currentLesson);
    if ($_student_) {
        $currentContent->markSeenNodes($currentUser);
    }
}
//Legal values are the array of entities that the current user may actually edit or change.
foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($currentContent->tree), RecursiveIteratorIterator::SELF_FIRST)) as $key => $value) {
    $legalValues[] = $key;
}
if (isset($_GET['add']) || isset($_GET['edit']) && in_array($_GET['edit'], $legalValues) && eF_checkParameter($_GET['edit'], 'id') && $_change_) {
    try {
        if ($_GET['edit']) {
            $currentUnit = $currentContent->seekNode($_GET['edit']);
            //The content tree does not hold data, so assign this unit its data
            $unitData = new EfrontUnit($_GET['edit']);
            $currentUnit['data'] = $unitData['data'];
            $currentUnitName = $unitData['name'];
        } else {
            unset($currentUnit);
            //Needed because we might have the &view_unit specified in the parameters
        }
        //This page has a file manager, so bring it on with the correct options
        $basedir = $currentLesson->getDirectory();
        //Default options for the file manager
        if (!isset($currentUser->coreAccess['files']) || $currentUser->coreAccess['files'] == 'change') {
            $options = array('lessons_ID' => $currentLesson->lesson['id'], 'metadata' => 0);
            if (!$currentLesson->options['digital_library']) {
                $options['share'] = false;
Example #2
0
                 $errorMessages[] = $e->getMessage() . ' ' . $e->getCode();
             }
         }
     }
 }
 if (isset($_POST['deactivate_nodes']) && $_POST['deactivate_nodes']) {
     foreach ($_POST['deactivate_nodes'] as $value) {
         if (in_array($value, $legalValues) && eF_checkParameter($value, 'id')) {
             try {
                 // Deactivate also linked units
                 $linked_units = eF_getTableData('content', 'id', 'linked_to=' . $value);
                 foreach ($linked_units as $unit) {
                     $lessons_IDs = eF_getTableData('content', 'lessons_ID', 'id=' . $unit['id']);
                     foreach ($lessons_IDs as $lessons_ID) {
                         $lessonsContent = new EfrontContentTree($lessons_ID['lessons_ID']);
                         $lessonsContent->seekNode($unit['id'])->deactivate();
                     }
                 }
                 $currentContent->seekNode($value)->deactivate();
             } catch (Exception $e) {
                 $errorMessages[] = $e->getMessage() . ' ' . $e->getCode();
             }
         }
     }
 }
 if (isset($_POST['node_orders']) && $_POST['node_orders']) {
     //$nodeOrders        = explode(",", $_POST['node_orders']);
     $previousContentId = 0;
     $legalValues[] = 0;
     //Add 0 to possible content units, since both parent and previous units may be 0
     foreach ($_POST['node_orders'] as $value) {
Example #3
0
     if ($result[0]['access_counter'] >= $currentLesson->lesson['access_limit']) {
         eF_redirect(basename($_SERVER['PHP_SELF']) . "?ctg=lessons&message=" . urlencode(_ACCESSDEPLETED) . "&message_type=failure");
     } else {
         if (!$_SESSION['visited_lesson'][$currentLesson->lesson['id']]) {
             eF_updateTableData("users_to_lessons", array('access_counter' => $result[0]['access_counter'] + 1), "users_LOGIN='******'login'] . "' and lessons_ID='" . $currentLesson->lesson['id'] . "'");
             $_SESSION['visited_lesson'][$currentLesson->lesson['id']] = 1;
         }
     }
 }
 if ($currentUser->coreAccess['content'] == 'hidden') {
     eF_redirect("" . basename($_SERVER['PHP_SELF']) . "?ctg=control_panel&message=" . urlencode(_UNAUTHORIZEDACCESS) . "&message_type=failure");
 }
 if (!$currentLesson || !$currentContent) {
     eF_redirect("" . basename($_SERVER['PHP_SELF']));
 }
 $currentUnit = $currentContent->seekNode($_GET['view_unit']);
 //Initialize current unit
 //The content tree does not hold data, so assign this unit its data
 $unitData = new EfrontUnit($_GET['view_unit']);
 //$_SESSION['s_time_target'] = array($_GET['view_unit'] => 'unit');
 $currentUnit['data'] = $unitData['data'];
 if (G_VERSIONTYPE != 'community') {
     #cpp#ifndef COMMUNITY
     if (G_VERSIONTYPE != 'standard') {
         #cpp#ifndef STANDARD
         //If the current unit is scorm 2004, then assign its if to the 'package_ID' variable, so that the SCO initiates automatically
         if ($currentUnit['ctg_type'] == 'scorm' && in_array($currentUnit['scorm_version'], EfrontContentTreeSCORM::$scorm2004Versions)) {
             $_GET['package_ID'] = $_GET['view_unit'];
         }
     }
     #cpp#endif
Example #4
0
             if (in_array($value, $legalValues) && eF_checkParameter($value, 'id')) {
                 $currentContent->removeNode($value);
                 if (($pos = array_search($value, $legalValues)) !== false) {
                     unset($legalValues[$pos]);
                 }
             }
         } catch (Exception $e) {
             $errorMessages[] = $e->getMessage() . ' ' . $e->getCode();
         }
     }
 }
 if (isset($_POST['activate_nodes']) && $_POST['activate_nodes']) {
     foreach ($_POST['activate_nodes'] as $value) {
         if (in_array($value, $legalValues) && eF_checkParameter($value, 'id')) {
             try {
                 $currentContent->seekNode($value)->activate();
             } catch (Exception $e) {
                 $errorMessages[] = $e->getMessage() . ' ' . $e->getCode();
             }
         }
     }
 }
 if (isset($_POST['deactivate_nodes']) && $_POST['deactivate_nodes']) {
     foreach ($_POST['deactivate_nodes'] as $value) {
         if (in_array($value, $legalValues) && eF_checkParameter($value, 'id')) {
             try {
                 $currentContent->seekNode($value)->deactivate();
             } catch (Exception $e) {
                 $errorMessages[] = $e->getMessage() . ' ' . $e->getCode();
             }
         }
Example #5
0
 /**
  * Analyse completed test
  *
  * This function is used to analyse completed test. Scores are calculated for
  * each unit and subunit, based on the corresponding questions performance.
  * <br/>Example:
  * <code>
  * list($parentScores, $analysisCode) = $completedTest -> analyseTest();
  * </code>
  * The function returns an array with 2 separate elements: The first element is the array
  * of scores per unit, which is needed in order to display the chart. The second element
  * is the content tree, where the scores per unit are depicted.
  *
  * @return array A results array.
  * @since 3.5.2
  * @access public
  */
 public function analyseTest()
 {
     $parentScores = array();
     foreach ($this->questions as $question) {
         $questionIds[$question->question['content_ID']]['score'] += $question->score;
         $questionIds[$question->question['content_ID']]['total']++;
         $question->score > 0 ? $questionIds[$question->question['content_ID']]['correct'] += $question->score / 100 : null;
     }
     $questionsStats = EfrontStats::getQuestionsUnitStatistics($this->questions);
     //Get unit names and ids
     $content = new EfrontContentTree(key($this->getLesson()));
     if (isset($_GET['entity']) && $_GET['entity']) {
         $temp = $content->seekNode($_GET['entity']);
         $tree[0] = new EfrontUnit(array('id' => 0, 'name' => _NOUNIT, 'active' => 1, $temp['id'] => $temp));
         //Add a bogus unit to hold questions which do not belong to a unit
         $iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($tree), RecursiveIteratorIterator::SELF_FIRST));
     } else {
         $tree = $content->tree;
         $tree[0] = new EfrontUnit(array('id' => 0, 'name' => _NOUNIT, 'active' => 1));
         //Add a bogus unit to hold questions which do not belong to a unit
         $iterator = new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($content->tree), RecursiveIteratorIterator::SELF_FIRST));
     }
     foreach ($iterator as $key => $value) {
         if ($key != 0) {
             foreach ($content->getNodeAncestors($key) as $id => $foo) {
                 $parentScores[$foo['id']]['score'] += $questionIds[$key]['score'];
                 $parentScores[$foo['id']]['total'] += $questionIds[$key]['total'];
                 $parentScores[$foo['id']]['correct'] += $questionIds[$key]['correct'];
             }
             $parentScores[$key]['this_score'] += $questionIds[$key]['score'];
             $parentScores[$key]['this_total'] += $questionIds[$key]['total'];
             $parentScores[$key]['this_correct'] += $questionIds[$key]['correct'];
             $parentScores[$key]['name'] = $value['name'];
             // Check if this chapter is a parent one.
             if (isset($content->tree[$key])) {
                 $parentScores[$key]['top_level'] = 1;
             } else {
                 $parentScores[$key]['top_level'] = 0;
             }
         }
     }
     foreach ($parentScores as $id => $value) {
         if ($value['total']) {
             $parentScores[$id]['percentage'] = round($value['score'] / $value['total'], 2);
         }
         if ($value['this_total']) {
             $parentScores[$id]['this_percentage'] = round($value['this_score'] / $value['this_total'], 2);
         }
         if ($value['total']) {
             $options['custom'][$id] = '
                             <span style = "margin-left:20px;color:gray">' . $parentScores[$id]['percentage'] . '% [' . $value['correct'] . '/' . $value['total'] . ']</span>
                             <img src = "images/16x16/information.png" style = "vertical-align:middle" alt = "" title = "' . _THISLEVEL . ': ' . $parentScores[$id]['this_percentage'] . '% [' . $value['this_correct'] . '/' . $value['this_total'] . ']';
             if ($value['total'] - $value['this_total'] > 0) {
                 $options['custom'][$id] .= '/ ' . _BELOWLEVELS . ': ' . round(($value['score'] - $value['this_score']) / ($value['total'] - $value['this_total']), 2) . '% [' . ($value['correct'] - $value['this_correct']) . '/' . ($value['total'] - $value['this_total']) . '] ';
             }
             $options['custom'][$id] .= '">';
         } else {
             unset($parentScores[$id]);
         }
     }
     $iterator = new analyseTestFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($content->tree), RecursiveIteratorIterator::SELF_FIRST)), array_keys($parentScores));
     $options['show_hide'] = false;
     $options['noclick'] = true;
     //$options['tree_root'] = array('name' => _BACKTOTOP, 'class' => 'examples', 'onclick' => "$('analysis_frame').src = $('analysis_frame').src.replace(/selected_unit=(\d*)/, 'selected_unit='+Element.extend(this).up().id.replace(/node/, ''));");
     //$options['onclick']   = "re = new RegExp(this.up().id.replace(/node/, ''), 'g');if(treeObj.getNodeOrders().match(re).length > 1) $('analysis_frame').src = $('analysis_frame').src.replace(/selected_unit=(\d*)/, 'selected_unit='+Element.extend(this).up().id.replace(/node/, ''));";
     $options['onclick'] = "showGraph(\$('proto_chart'), 'graph_test_analysis', Element.extend(this).up().id.replace(/node/, ''));";
     return array($parentScores, $content->toHTML($iterator, false, $options));
 }
 public function getModule()
 {
     $smarty = $this->getSmartyVar();
     $currentLesson = $this->getCurrentLesson();
     $currentUser = $this->getCurrentUser();
     try {
         $currentContent = new EfrontContentTree($_SESSION['s_lessons_ID']);
         //Initialize content
     } catch (Exception $e) {
         $smarty->assign("T_EXCEPTION_TRACE", $e->getTraceAsString());
         $message = _ERRORLOADINGCONTENT . ": " . $_SESSION['s_lessons_ID'] . ": " . $e->getMessage() . ' (' . $e->getCode() . ') &nbsp;<a href = "javascript:void(0)" onclick = "eF_js_showDivPopup(event, \'' . _ERRORDETAILS . '\', 2, \'error_details\')">' . _MOREINFO . '</a>';
     }
     //pr($currentUser);exit;
     $roles = EfrontUser::getRoles();
     //pr($roles);
     if ($roles[$currentUser->lessons[$_SESSION['s_lessons_ID']]] == "professor") {
         if (isset($_GET['view_list']) && eF_checkParameter($_GET['view_list'], 'id')) {
             $list = $currentContent->seekNode($_GET['view_list']);
             $questions = $list->getQuestions(true);
             $crosslists = array();
             $possibleCrosslistsIds = array();
             foreach ($questions as $key => $value) {
                 if ($value->question['type'] == 'empty_spaces') {
                     $crosslists[] = $value;
                     $possibleCrosslistsIds[] = $value->question['id'];
                 }
             }
             $questions = $crosslists;
             //pr($questions);
             foreach ($questions as $qid => $question) {
                 $questions[$qid]->question['text'] = str_replace('#', '_', strip_tags($question->question['text']));
                 //If we ommit this line, then the questions list is html formatted, images are displayed etc, which is *not* the intended behaviour
                 //$questions[$qid]->question['answer']           = unserialize($question->question['answer']);
             }
             $res = eF_getTableData("module_crossword_words", "crosslists,options", "content_ID=" . $_GET['view_list']);
             $resCrosslists = unserialize($res[0]['crosslists']);
             $smarty->assign("T_CROSSWORD_LIST_WORDS", $resCrosslists);
             $post_target = $this->moduleBaseUrl . '&view_list=' . $_GET['view_list'] . "&tab=options";
             //Create form elements
             $form = new HTML_QuickForm("list_options", "post", $post_target, "", null, true);
             $form->registerRule('checkParameter', 'callback', 'eF_checkParameter');
             $form->addElement('advcheckbox', 'active', _CROSSWORD_ACTIVE, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement("text", "max_word", _LOW, 'size = "5"');
             $form->addRule('max_word', _INVALIDFIELDDATA . ":" . _LOW, 'checkParameter', 'id');
             $form->addElement('advcheckbox', 'reveal_answer', _CROSSWORD_SHOWANSWERFIRST, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'save_pdf', _CROSSWORD_SAVEPDF, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('submit', 'submit_options', _SAVECHANGES, 'onclick ="return optionSubmit();" class = "flatButton"');
             //The submit content button
             $options = unserialize($res[0]['options']);
             $form->setDefaults(array('active' => $options['active'], 'reveal_answer' => $options['reveal_answer'], 'save_pdf' => $options['save_pdf'], 'max_word' => $options['max_word']));
             if ($form->isSubmitted() && $form->validate()) {
                 //If the form is submitted and validated
                 $values = $form->exportValues();
                 unset($values['submit_options']);
                 $options = serialize($values);
                 if (sizeof($res) != 0) {
                     $ok = eF_updateTableData("module_crossword_words", array('options' => $options), "content_ID=" . $_GET['view_list']);
                 } else {
                     $fields = array('content_ID' => $_GET['view_list'], 'options' => $options);
                     $ok = eF_insertTableData("module_crossword_words", $fields);
                 }
                 if ($ok !== false) {
                     $message = _CROSSWORD_SUCCESSFULLY;
                     $message_type = 'success';
                 } else {
                     $message = _CROSSWORD_PROBLEMOCCURED;
                     $message_type = 'failure';
                 }
                 eF_redirect("" . $this->moduleBaseUrl . "&view_list=" . $_GET['view_list'] . "&tab=options&message=" . urlencode($message) . "&message_type=" . $message_type);
             }
             $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
             //Create a smarty renderer
             $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR);
             //Set javascript error messages
             $form->setRequiredNote(_REQUIREDNOTE);
             $form->accept($renderer);
             //Assign this form to the renderer, so that corresponding template code is created
             $smarty->assign('T_CROSSWORD_OPTIONS', $renderer->toArray());
             //Assign the form to the template
             if (isset($_GET['postAjaxRequest'])) {
                 try {
                     $result = eF_getTableData("module_crossword_words", "crosslists", "content_ID=" . $_GET['view_list']);
                     //pr($result);exit;
                     $crosslistsArray = unserialize($result[0]['crosslists']);
                     if (isset($_GET['id']) && eF_checkParameter($_GET['id'], 'id')) {
                         if (!in_array($_GET['id'], array_values($crosslistsArray))) {
                             $crosslistsArray[] = $_GET['id'];
                             $crosslists = serialize($crosslistsArray);
                             if (sizeof($result) != 0) {
                                 $fields = array('crosslists' => $crosslists);
                                 eF_updateTableData("module_crossword_words", $fields, "content_ID=" . $_GET['view_list']);
                             } else {
                                 $fields = array('content_ID' => $_GET['view_list'], 'crosslists' => $crosslists);
                                 eF_insertTableData("module_crossword_words", $fields);
                             }
                         } elseif (in_array($_GET['id'], array_values($crosslistsArray))) {
                             unset($crosslistsArray[array_search($_GET['id'], $crosslistsArray)]);
                             if (!empty($crosslistsArray)) {
                                 $crosslists = serialize($crosslistsArray);
                                 $fields = array('crosslists' => $crosslists);
                                 eF_updateTableData("module_crossword_words", $fields, "content_ID=" . $_GET['view_list']);
                             } else {
                                 eF_deleteTableData("module_crossword_words", "content_ID=" . $_GET['view_list']);
                             }
                         }
                     } else {
                         if (isset($_GET['addAll'])) {
                             $crosslists = serialize($possibleCrosslistsIds);
                             if (sizeof($result) != 0) {
                                 $fields = array('crosslists' => $crosslists);
                                 eF_updateTableData("module_crossword_words", $fields, "content_ID=" . $_GET['view_list']);
                             } else {
                                 $fields = array('content_ID' => $_GET['view_list'], 'crosslists' => $crosslists);
                                 eF_insertTableData("module_crossword_words", $fields);
                             }
                         } else {
                             if (isset($_GET['removeAll'])) {
                                 $fields = array('crosslists' => "");
                                 eF_updateTableData("module_crossword_words", $fields, "content_ID=" . $_GET['view_list']);
                             }
                         }
                     }
                 } catch (Exception $e) {
                     header("HTTP/1.0 500 ");
                     echo $e->getMessage() . ' (' . $e->getCode() . ')';
                 }
                 exit;
             }
             $smarty->assign("T_CROSSWORD_CROSSLISTS", $crosslists);
             $smarty->assign("T_CROSSWORD_CROSSLISTS_SIZE", sizeof($crosslists));
         } else {
             $listsArray = array();
             $iterator = new EfrontContentFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator($currentContent->tree, RecursiveIteratorIterator::SELF_FIRST)));
             foreach ($iterator as $key => $value) {
                 $questions = $value->getQuestions(true);
                 $crosslists = array();
                 foreach ($questions as $key2 => $value2) {
                     if ($value2->question['type'] == 'empty_spaces') {
                         $crosslists[] = $value2;
                     }
                 }
                 if (sizeof($crosslists) > 0) {
                     $listsArray[$value['id']] = array('id' => $value['id'], 'name' => $value['name'], 'questions' => sizeof($crosslists));
                 }
             }
             if (!empty($listsArray)) {
                 $str = implode(",", array_keys($listsArray));
                 $lists = eF_getTableDataFlat("module_crossword_words", "*", "content_ID IN (" . $str . ")");
                 $listsTemp = array_combine(array_values($lists['content_ID']), array_values($lists['options']));
                 $listsTemp2 = array_combine(array_values($lists['content_ID']), array_values($lists['crosslists']));
                 foreach ($listsArray as $key => $value) {
                     $listsArray[$value['id']]['options'] = unserialize($listsTemp[$key]);
                     $crosslistsTemp = unserialize($listsTemp2[$key]);
                     $listsArray[$value['id']]['num_crosslists'] = empty($crosslistsTemp) ? 0 : sizeof($crosslistsTemp);
                 }
             }
             $smarty->assign("T_CROSSWORD_WORDS", $listsArray);
         }
     } elseif ($roles[$currentUser->lessons[$_SESSION['s_lessons_ID']]] == "student") {
         if (isset($_GET['restart_list']) && eF_checkParameter($_GET['restart_list'], 'id')) {
             eF_deleteTableData("module_crossword_users", "users_LOGIN='******'s_login'] . "' AND content_ID=" . $_GET['restart_list']);
         }
         if (isset($_GET['restart_lists'])) {
             eF_deleteTableData("module_crossword_users", "users_LOGIN='******'s_login'] . "'");
         }
         if ($_GET['answer'] == "true") {
             $resUserCard = eF_getTableData("module_crossword_users", "*", "crosslists_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             if (sizeof($resUserCard) == 0) {
                 $fields = array('users_LOGIN' => $_SESSION['s_login'], 'content_ID' => $_GET['view_list'], 'crosslists_ID' => $_GET['view_card'], 'success' => '1');
                 eF_insertTableData("module_crossword_users", $fields);
             } else {
                 $success = $resUserCard[0]['success'] + 1;
                 eF_updateTableData("module_crossword_users", array('success' => $success), "crosslists_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             }
         } elseif ($_GET['answer'] == "false") {
             $resUserCard = eF_getTableData("module_crossword_users", "*", "crosslists_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             $currentListTemp = eF_getTableData("module_crossword_words", "options", "content_ID=" . $_GET['view_list']);
             $listTemp = unserialize($currentListTemp[0]['options']);
             if ($listTemp['wrong'] == 1 && sizeof($resUserCard) != 0 && $resUserCard[0]['success'] != 0) {
                 $success = $resUserCard[0]['success'] - 1;
                 eF_updateTableData("module_crossword_users", array('success' => $success), "crosslists_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             }
         }
         $listsArray = array();
         $iterator = new EfrontContentFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator($currentContent->tree, RecursiveIteratorIterator::SELF_FIRST)));
         foreach ($iterator as $key => $value) {
             $listsArray[$value['id']] = array('id' => $value['id'], 'name' => $value['name']);
         }
         if (empty($listsArray)) {
             $smarty->assign("T_CROSSWORD_WORDSNAMES", $listsArray);
             return true;
         }
         $str = implode(",", array_keys($listsArray));
         $lists = eF_getTableData("module_crossword_words", "*", "content_ID IN (" . $str . ")");
         $mastery = eF_getTableDataFlat("module_crossword_users", "*", "content_ID IN (" . $str . ")");
         $masteryArray = array_combine(array_values($mastery['crosslists_ID']), array_values($mastery['success']));
         $questionsDiff = eF_getTableDataFlat("questions", "*", "content_ID IN (" . $str . ")");
         $questionsDiffArray = array_combine(array_values($questionsDiff['id']), array_values($questionsDiff['difficulty']));
         $validLists = array();
         foreach ($lists as $key => $value) {
             $opt = unserialize($value['options']);
             $crosslists = unserialize($value['crosslists']);
             if ($opt['active'] == 1 && !empty($crosslists)) {
                 $value['number_crosslists'] = empty($crosslists) ? 0 : sizeof($crosslists);
                 $validLists[$value['content_ID']] = $value;
                 $validLists[$value['content_ID']]['options'] = $opt;
                 $finishedCrosslists = 0;
                 foreach ($crosslists as $index => $item) {
                     if ($masteryArray[$item] == $opt[$questionsDiffArray[$item]]) {
                         $finishedCrosslists++;
                     }
                 }
                 $conid = $validLists[$value['content_ID']]['content_ID'];
                 $validLists[$value['content_ID']]['non_finished'] = $value['number_crosslists'] - $finishedCrosslists;
                 $validLists[$value['content_ID']]['mastery'] = (double) $finishedCrosslists / sizeof($crosslists) * 100;
                 $respoints = eF_getTableDataFlat("module_crossword_users", "*", "content_ID = '{$conid}' and users_LOGIN='******'s_login'] . "'");
                 $validLists[$value['content_ID']]['points'] = round($respoints['points'][0] / $respoints['totallength'][0] * 100);
                 $validLists[$value['content_ID']]['crosstime'] = $respoints['wordtime'][0];
             }
         }
         //print_r($validLists);
         $smarty->assign("T_CROSSWORD_WORDS", $validLists);
         $smarty->assign("T_CROSSWORD_WORDSNAMES", $listsArray);
         if (isset($_GET['view_list']) && !isset($_GET['pdf'])) {
             $resunit = eF_getTableData("content", "name", "id=" . $_GET['view_list']);
             $smarty->assign("T_CROSSWORD_UNITNAME", $resunit[0]['name']);
             $_SESSION['contentid'] = $_GET['view_list'];
             if (isset($_POST) && !empty($_POST['crosstime'])) {
                 $userlist = eF_getTableData("module_crossword_users", "*", "users_LOGIN='******'s_login'] . "' and content_ID=" . $_GET['view_list'] . "");
                 if (count($userlist) == 0) {
                     $fields = array('users_LOGIN' => $_SESSION['s_login'], 'content_ID' => $_GET['view_list'], 'points' => $_POST['points'], 'totallength' => $_SESSION['WORDLEN'], 'wordtime' => $_POST['crosstime']);
                     eF_insertTableData("module_crossword_users", $fields);
                 } else {
                     $fields = array('points' => $_POST['points'], 'totallength' => $_SESSION['WORDLEN'], 'wordtime' => $_POST['crosstime']);
                     eF_updateTableData("module_crossword_users", $fields, "content_ID=" . $_GET['view_list'] . " and users_LOGIN='******'s_login'] . "'");
                 }
                 $message_type = 'success';
                 $message = _CROSSWORD_GAME_SUCCESSFULLY;
                 eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=" . $message_type);
             }
             $contentid = $_GET['view_list'];
             $res = eF_getTableData("module_crossword_words", "crosslists,options", "content_ID=" . $_GET['view_list']);
             $reswords = unserialize($res[0]['crosslists']);
             $maxwords = unserialize($res[0]['options']);
             $maxwords1 = $maxwords['max_word'];
             $smarty->assign("T_CROSSWORD_REVEALANSWER", $maxwords['reveal_answer']);
             $smarty->assign("T_CROSSWORD_MAXWORD", $maxwords1 + 1);
             $_SESSION['CROSSWORD_MAXWORD'] = $maxwords1;
             require_once 'init.php';
             $rowquesans = "";
             foreach ($reswords as $rowques) {
                 $rowquesans .= $rowques . ",";
             }
             $quesids = mb_substr($rowquesans, 0, -1);
             $quesans = eF_getTableData("questions", "text,answer", "id IN({$quesids}) order by rand() limit {$maxwords1}");
             $value = array();
             foreach ($quesans as $row) {
                 $answer = unserialize($row['answer']);
                 $answer1 = explode("|", $answer['0']);
                 $value[] = array('ANSWER' => $answer1['0'], 'QUESTION' => $row['text']);
             }
             if (!empty($value)) {
                 //pr($value);exit;
                 $success = $pc->generateFromWords($value);
                 if (!$success) {
                     $message_type = 'failure';
                     $message = _CROSSWORD_UNABLEGENERATECROSSWORD;
                     eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=" . $message_type);
                 } else {
                     $words = $pc->getWords();
                     $wordlen = "";
                     foreach ($words as $rowwords) {
                         $wordlen = $wordlen + $rowwords['wordlength'];
                     }
                     $_SESSION['WORDLEN'] = $wordlen;
                     $smarty->assign("T_CROSSWORD_LENGTH", $_SESSION['WORDLEN']);
                     //vd($words);
                     //because of #1599
                     foreach ($words as $key => $word) {
                         $words[$key]['question'] = str_replace(array("\r\n", "\n"), '<br/>', $word['question']);
                     }
                     //vd($words);
                     $smarty->assign("T_CROSSWORD_ANSWERS", $words);
                 }
             }
             $post_target = $this->moduleBaseUrl . "&view_list=" . $_GET['view_list'] . "";
             $form = new HTML_QuickForm("crossword_game", "post", $post_target, "", null, true);
             $form->addElement('submit', 'submit_crossword', 'SUBMIT', 'class = "flatButton"');
             //The submit content button
             $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
             //Create a smarty renderer
             $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR);
             //Set javascript error messages
             $form->setRequiredNote(_REQUIREDNOTE);
             $form->accept($renderer);
             //Assign this form to the renderer, so that corresponding template code is created
             $smarty->assign('T_CROSSWORD_SUBMIT', $renderer->toArray());
             //Assign the form to the template
             $message = "";
             //$message_type = 'success';
             // eF_redirect("".$this -> moduleBaseUrl."&popup=1&finish=1&message=".$message."&message_type=".$message_type);
         } else {
             if (isset($_GET['view_list']) && isset($_GET['pdf']) && $_GET['pdf'] == 'cross') {
                 $resunit = eF_getTableData("content", "name,lessons_ID", "id=" . $_GET['view_list']);
                 $reslesson = eF_getTableData("lessons", "name", "id=" . $resunit[0]['lessons_ID']);
                 $res = eF_getTableData("module_crossword_words", "crosslists,options", "content_ID=" . $_GET['view_list']);
                 $reswords = unserialize($res[0]['crosslists']);
                 $maxwords = unserialize($res[0]['options']);
                 $maxwords1 = $maxwords['max_word'];
                 $_SESSION['CROSSWORD_MAXWORD'] = $maxwords1;
                 require_once 'init.php';
                 $rowquesans = "";
                 foreach ($reswords as $rowques) {
                     $rowquesans .= $rowques . ",";
                 }
                 $quesids = mb_substr($rowquesans, 0, -1);
                 $quesans = eF_getTableData("questions", "text,answer", "id IN({$quesids}) order by rand() limit {$maxwords1}");
                 $value = array();
                 foreach ($quesans as $row) {
                     $answer = unserialize($row['answer']);
                     $answer1 = explode("|", $answer['0']);
                     $value[] = array('ANSWER' => $answer1['0'], 'QUESTION' => $row['text']);
                 }
                 $success = $pc->generateFromWords($value);
                 if (!$success) {
                     $message_type = 'failure';
                     $message = _CROSSWORD_UNABLEGENERATECROSSWORD;
                     eF_redirect($this->moduleBaseUrl . "&message=" . urlencode($message) . "&message_type=" . $message_type);
                 } else {
                     $currentlesson = $reslesson[0]['name'];
                     $words = $pc->getWords();
                     $answor = array();
                     $html1 = array();
                     $html2 = array();
                     $html1[] = $currentlesson;
                     $html1[] .= $resunit[0]['name'];
                     $html1[] .= _CROSSWORD_ACROSS;
                     $html2[] = _CROSSWORD_DOWN;
                     $k = 1;
                     //pr($words);
                     foreach ($words as $row) {
                         if ($row['axis'] == 1) {
                             $html1[] .= $k . '. ' . $row['question'];
                         } else {
                             $html2[] .= $k . '. ' . $row['question'];
                         }
                         $k++;
                     }
                     //pr($html1);
                     //pr($html2);
                     //exit;
                     $answor[] = array_merge($html1, $html2);
                     //pr($answor); exit;
                     $dd = $pc->getHTML($answor);
                     exit;
                 }
             }
         }
     }
     return true;
 }
 public function getModule()
 {
     $smarty = $this->getSmartyVar();
     $currentLesson = $this->getCurrentLesson();
     $currentUser = $this->getCurrentUser();
     try {
         $currentContent = new EfrontContentTree($_SESSION['s_lessons_ID']);
         //Initialize content
     } catch (Exception $e) {
         $smarty->assign("T_EXCEPTION_TRACE", $e->getTraceAsString());
         $message = _ERRORLOADINGCONTENT . ": " . $_SESSION['s_lessons_ID'] . ": " . $e->getMessage() . ' (' . $e->getCode() . ') &nbsp;<a href = "javascript:void(0)" onclick = "eF_js_showDivPopup(event, \'' . _ERRORDETAILS . '\', 2, \'error_details\')">' . _MOREINFO . '</a>';
     }
     //pr($currentUser);exit;
     $roles = EfrontUser::getRoles();
     //pr($roles);
     if ($roles[$currentUser->lessons[$_SESSION['s_lessons_ID']]] == "professor") {
         if (isset($_GET['view_deck']) && eF_checkParameter($_GET['view_deck'], 'id')) {
             $deck = $currentContent->seekNode($_GET['view_deck']);
             $questions = $deck->getQuestions(true);
             $cards = array();
             $possibleCardsIds = array();
             foreach ($questions as $key => $value) {
                 if ($value->question['type'] == 'empty_spaces') {
                     $cards[] = $value;
                     $possibleCardsIds[] = $value->question['id'];
                 }
             }
             $questions = $cards;
             //pr($questions);
             foreach ($questions as $qid => $question) {
                 $questions[$qid]->question['text'] = strip_tags($question->question['text']);
                 //If we ommit this line, then the questions list is html formatted, images are displayed etc, which is *not* the intended behaviour
                 //$questions[$qid]->question['answer']           = unserialize($question->question['answer']);
             }
             $res = eF_getTableData("module_flashcards_decks", "cards,options", "content_ID=" . $_GET['view_deck']);
             $resCards = unserialize($res[0]['cards']);
             $smarty->assign("T_FLASHCARDS_DECK_CARDS", $resCards);
             $post_target = $this->moduleBaseUrl . '&view_deck=' . $_GET['view_deck'] . "&tab=options";
             //Create form elements
             $form = new HTML_QuickForm("deck_options", "post", $post_target, "", null, true);
             $form->registerRule('checkParameter', 'callback', 'eF_checkParameter');
             $form->addElement('advcheckbox', 'active', _FLASHCARDS_ACTIVE, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement("text", "low", _LOW, 'size = "5"');
             $form->addElement("text", "medium", _MEDIUM, 'size = "5"');
             $form->addElement("text", "hard", _HIGH, 'size = "5"');
             $form->addElement("text", "very_hard", _VERYHIGH, 'size = "5"');
             $form->addRule('low', _INVALIDFIELDDATA . ":" . _LOW, 'checkParameter', 'id');
             $form->addRule('medium', _INVALIDFIELDDATA . ":" . _MEDIUM, 'checkParameter', 'id');
             $form->addRule('hard', _INVALIDFIELDDATA . ":" . _HIGH, 'checkParameter', 'id');
             $form->addRule('very_hard', _INVALIDFIELDDATA . ":" . _VERYHIGH, 'checkParameter', 'id');
             $form->addElement('advcheckbox', 'answer_first', _FLASHCARDS_SHOWANSWERFIRST, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'shuffle', _FLASHCARDS_SHUFFLECARDS, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'display_mastery', _FLASHCARDS_DISPLAYMASTERY, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'wrong', _FLASHCARDS_WRONGREDUCES, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'show_count', _FLASHCARDS_SHOWSUCCESSCOUNT, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('advcheckbox', 'show_explanation', _FLASHCARDS_SHOWEXPLANATION, null, 'class = "inputCheckbox"', array(0, 1));
             $form->addElement('submit', 'submit_options', _SAVECHANGES, 'class = "flatButton"');
             //The submit content button
             $options = unserialize($res[0]['options']);
             $form->setDefaults(array('active' => $options['active'], 'answer_first' => $options['answer_first'], 'shuffle' => $options['shuffle'], 'display_mastery' => $options['display_mastery'], 'wrong' => $options['wrong'], 'show_count' => $options['show_count'], 'show_explanation' => $options['show_explanation'], 'low' => $options['low'] == "" ? 1 : $options['low'], 'medium' => $options['medium'] == "" ? 2 : $options['medium'], 'hard' => $options['hard'] == "" ? 4 : $options['hard'], 'very_hard' => $options['very_hard'] == "" ? 6 : $options['very_hard']));
             if ($form->isSubmitted() && $form->validate()) {
                 //If the form is submitted and validated
                 $values = $form->exportValues();
                 unset($values['submit_options']);
                 $options = serialize($values);
                 if (sizeof($res) != 0) {
                     $ok = eF_updateTableData("module_flashcards_decks", array('options' => $options), "content_ID=" . $_GET['view_deck']);
                 } else {
                     $fields = array('content_ID' => $_GET['view_deck'], 'options' => $options);
                     $ok = eF_insertTableData("module_flashcards_decks", $fields);
                 }
                 if ($ok !== false) {
                     $message = _FLASHCARDS_SUCCESSFULLY;
                     $message_type = 'success';
                 } else {
                     $message = _FLASHCARDS_PROBLEMOCCURED;
                     $message_type = 'failure';
                 }
                 eF_redirect("" . $this->moduleBaseUrl . "&view_deck=" . $_GET['view_deck'] . "&tab=options&message=" . $message . "&message_type=" . $message_type);
             }
             $renderer = new HTML_QuickForm_Renderer_ArraySmarty($smarty);
             //Create a smarty renderer
             $form->setJsWarnings(_BEFOREJAVASCRIPTERROR, _AFTERJAVASCRIPTERROR);
             //Set javascript error messages
             $form->setRequiredNote(_REQUIREDNOTE);
             $form->accept($renderer);
             //Assign this form to the renderer, so that corresponding template code is created
             $smarty->assign('T_FLASHCARDS_OPTIONS', $renderer->toArray());
             //Assign the form to the template
             if (isset($_GET['postAjaxRequest'])) {
                 try {
                     $result = eF_getTableData("module_flashcards_decks", "cards", "content_ID=" . $_GET['view_deck']);
                     //pr($result);exit;
                     $cardsArray = unserialize($result[0]['cards']);
                     if (isset($_GET['id']) && eF_checkParameter($_GET['id'], 'id')) {
                         if (!in_array($_GET['id'], array_values($cardsArray))) {
                             $cardsArray[] = $_GET['id'];
                             $cards = serialize($cardsArray);
                             if (sizeof($result) != 0) {
                                 $fields = array('cards' => $cards);
                                 eF_updateTableData("module_flashcards_decks", $fields, "content_ID=" . $_GET['view_deck']);
                             } else {
                                 $fields = array('content_ID' => $_GET['view_deck'], 'cards' => $cards);
                                 eF_insertTableData("module_flashcards_decks", $fields);
                             }
                         } elseif (in_array($_GET['id'], array_values($cardsArray))) {
                             unset($cardsArray[array_search($_GET['id'], $cardsArray)]);
                             if (!empty($cardsArray)) {
                                 $cards = serialize($cardsArray);
                                 $fields = array('cards' => $cards);
                                 eF_updateTableData("module_flashcards_decks", $fields, "content_ID=" . $_GET['view_deck']);
                             } else {
                                 eF_deleteTableData("module_flashcards_decks", "content_ID=" . $_GET['view_deck']);
                             }
                         }
                     } else {
                         if (isset($_GET['addAll'])) {
                             $cards = serialize($possibleCardsIds);
                             if (sizeof($result) != 0) {
                                 $fields = array('cards' => $cards);
                                 eF_updateTableData("module_flashcards_decks", $fields, "content_ID=" . $_GET['view_deck']);
                             } else {
                                 $fields = array('content_ID' => $_GET['view_deck'], 'cards' => $cards);
                                 eF_insertTableData("module_flashcards_decks", $fields);
                             }
                         } else {
                             if (isset($_GET['removeAll'])) {
                                 $fields = array('cards' => "");
                                 eF_updateTableData("module_flashcards_decks", $fields, "content_ID=" . $_GET['view_deck']);
                             }
                         }
                     }
                 } catch (Exception $e) {
                     header("HTTP/1.0 500 ");
                     echo $e->getMessage() . ' (' . $e->getCode() . ')';
                 }
                 exit;
             }
             $smarty->assign("T_FLASHCARDS_CARDS", $cards);
             $smarty->assign("T_FLASHCARDS_CARDS_SIZE", sizeof($cards));
         } else {
             $decksArray = array();
             $iterator = new EfrontContentFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator($currentContent->tree, RecursiveIteratorIterator::SELF_FIRST)));
             foreach ($iterator as $key => $value) {
                 $questions = $value->getQuestions(true);
                 $cards = array();
                 foreach ($questions as $key2 => $value2) {
                     if ($value2->question['type'] == 'empty_spaces') {
                         $cards[] = $value2;
                     }
                 }
                 if (sizeof($cards) > 0) {
                     $decksArray[$value['id']] = array('id' => $value['id'], 'name' => $value['name'], 'questions' => sizeof($cards));
                 }
             }
             if (!empty($decksArray)) {
                 $str = implode(",", array_keys($decksArray));
                 $decks = eF_getTableDataFlat("module_flashcards_decks", "*", "content_ID IN (" . $str . ")");
                 $decksTemp = array_combine(array_values($decks['content_ID']), array_values($decks['options']));
                 $decksTemp2 = array_combine(array_values($decks['content_ID']), array_values($decks['cards']));
                 foreach ($decksArray as $key => $value) {
                     $decksArray[$value['id']]['options'] = unserialize($decksTemp[$key]);
                     $cardsTemp = unserialize($decksTemp2[$key]);
                     $decksArray[$value['id']]['num_cards'] = empty($cardsTemp) ? 0 : sizeof($cardsTemp);
                 }
             }
             //pr($decksArray);
             $smarty->assign("T_FLASHCARDS_DECKS", $decksArray);
         }
     } elseif ($roles[$currentUser->lessons[$_SESSION['s_lessons_ID']]] == "student") {
         if (isset($_GET['restart_deck']) && eF_checkParameter($_GET['restart_deck'], 'id')) {
             eF_deleteTableData("module_flashcards_users_to_cards", "users_LOGIN='******'s_login'] . "' AND content_ID=" . $_GET['restart_deck']);
         }
         if (isset($_GET['restart_decks'])) {
             eF_deleteTableData("module_flashcards_users_to_cards", "users_LOGIN='******'s_login'] . "'");
         }
         if ($_GET['answer'] == "true") {
             $resUserCard = eF_getTableData("module_flashcards_users_to_cards", "*", "cards_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             if (sizeof($resUserCard) == 0) {
                 $fields = array('users_LOGIN' => $_SESSION['s_login'], 'content_ID' => $_GET['view_deck'], 'cards_ID' => $_GET['view_card'], 'success' => '1');
                 eF_insertTableData("module_flashcards_users_to_cards", $fields);
             } else {
                 $success = $resUserCard[0]['success'] + 1;
                 eF_updateTableData("module_flashcards_users_to_cards", array('success' => $success), "cards_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             }
         } elseif ($_GET['answer'] == "false") {
             $resUserCard = eF_getTableData("module_flashcards_users_to_cards", "*", "cards_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             $currentDeckTemp = eF_getTableData("module_flashcards_decks", "options", "content_ID=" . $_GET['view_deck']);
             $deckTemp = unserialize($currentDeckTemp[0]['options']);
             if ($deckTemp['wrong'] == 1 && sizeof($resUserCard) != 0 && $resUserCard[0]['success'] != 0) {
                 $success = $resUserCard[0]['success'] - 1;
                 eF_updateTableData("module_flashcards_users_to_cards", array('success' => $success), "cards_ID=" . $_GET['view_card'] . " and users_LOGIN='******'s_login'] . "'");
             }
         }
         $decksArray = array();
         $iterator = new EfrontContentFilterIterator(new EfrontNodeFilterIterator(new RecursiveIteratorIterator($currentContent->tree, RecursiveIteratorIterator::SELF_FIRST)));
         foreach ($iterator as $key => $value) {
             $decksArray[$value['id']] = array('id' => $value['id'], 'name' => $value['name']);
         }
         if (empty($decksArray)) {
             $smarty->assign("T_FLASHCARDS_DECKSNAMES", $decksArray);
             return true;
         }
         $str = implode(",", array_keys($decksArray));
         $decks = eF_getTableData("module_flashcards_decks", "*", "content_ID IN (" . $str . ")");
         $mastery = eF_getTableDataFlat("module_flashcards_users_to_cards", "*", "content_ID IN (" . $str . ") and users_LOGIN='******'s_login'] . "'");
         $masteryArray = array_combine(array_values($mastery['cards_ID']), array_values($mastery['success']));
         $questionsDiff = eF_getTableDataFlat("questions", "*", "content_ID IN (" . $str . ")");
         $questionsDiffArray = array_combine(array_values($questionsDiff['id']), array_values($questionsDiff['difficulty']));
         $validDecks = array();
         foreach ($decks as $key => $value) {
             $opt = unserialize($value['options']);
             $cards = unserialize($value['cards']);
             if ($opt['active'] == 1 && !empty($cards)) {
                 $value['number_cards'] = empty($cards) ? 0 : sizeof($cards);
                 $validDecks[$value['content_ID']] = $value;
                 $validDecks[$value['content_ID']]['cards'] = $cards;
                 $validDecks[$value['content_ID']]['options'] = $opt;
                 $finishedCards = 0;
                 foreach ($cards as $index => $item) {
                     if ($masteryArray[$item] == $opt[$questionsDiffArray[$item]]) {
                         $finishedCards++;
                     }
                 }
                 $validDecks[$value['content_ID']]['non_finished'] = $value['number_cards'] - $finishedCards;
                 $validDecks[$value['content_ID']]['mastery'] = (double) $finishedCards / sizeof($cards) * 100;
             }
         }
         //pr($masteryArray);
         //pr($validDecks);
         //pr($decksArray);
         $smarty->assign("T_FLASHCARDS_DECKS", $validDecks);
         $smarty->assign("T_FLASHCARDS_DECKSNAMES", $decksArray);
         if (isset($_GET['view_deck'])) {
             $currentDeck = $validDecks[$_GET['view_deck']];
             $resUserSuccess = eF_getTableDataFlat("module_flashcards_users_to_cards", "*", "content_ID=" . $_GET['view_deck'] . " and users_LOGIN='******'s_login'] . "'");
             $successArray = array_combine(array_values($resUserSuccess['cards_ID']), array_values($resUserSuccess['success']));
             //pr($successArray);
             foreach ($currentDeck['cards'] as $key => $value) {
                 $questionTemp = new EmptySpacesQuestion($value);
                 $limit = $currentDeck['options'][$questionTemp->question['difficulty']];
                 if ($successArray[$value] == $limit && $value != $_GET['view_card']) {
                     unset($currentDeck['cards'][$key]);
                 }
             }
             $currentDeck['cards'] = array_values($currentDeck['cards']);
             if ($currentDeck['options']['shuffle'] == 1) {
                 shuffle($currentDeck['cards']);
             }
             if (!empty($currentDeck['cards'])) {
                 if (isset($_GET['view_card'])) {
                     while (current($currentDeck['cards']) != $_GET['view_card'] & next($currentDeck['cards']) !== false) {
                     }
                     if (current($currentDeck['cards']) === false) {
                         reset($currentDeck['cards']);
                     }
                     $_GET['view_card'] = current($currentDeck['cards']);
                 } else {
                     $_GET['view_card'] = $currentDeck['cards'][0];
                 }
                 //echo $_GET['view_card'];
                 $question = new EmptySpacesQuestion($_GET['view_card']);
                 $limit = $currentDeck['options'][$question->question['difficulty']];
                 if ($successArray[$_GET['view_card']] == $limit) {
                     $message = _FLASHCARDS_SUCCESSFULLYCOMPLETEDDECK;
                     $message_type = 'success';
                     eF_redirect($this->moduleBaseUrl . "&reset_popup=1&message=" . urlencode($message) . "&message_type=" . $message_type, true, 'parent');
                 } else {
                     //$form = new HTML_QuickForm("questionForm", "post", "", "", null, true);
                     $form = new HTML_QuickForm();
                     $question->toHTMLQuickForm($form);
                     foreach ($question->answer as $key => $value) {
                         $form->setDefaults(array("question[" . $question->question['id'] . "][{$key}]" => "________"));
                     }
                     $form->freeze();
                     $smarty->assign("T_FLASHCARDS_CURRENTCARD_PREVIEW", $question->toHTML($form));
                     //$smarty -> assign("T_FLASHCARDS_CURRENTCARD_PREVIEW_ANSWERED", $question -> toHTMLSolved(new HTML_QuickForm(), true, false, false));
                     $smarty->assign("T_FLASHCARDS_CURRENTCARD_PREVIEW_ANSWERED", implode("<br/>", $question->answer));
                 }
             } else {
                 $message = _FLASHCARDS_SUCCESSFULLYCOMPLETEDDECK;
                 //$message_type = 'success';
                 eF_redirect("" . $this->moduleBaseUrl . "&popup=1&finish=1&message=" . $message . "&message_type=" . $message_type);
             }
             //pr($question);
             //pr($currentDeck);
             $smarty->assign("T_FLASHCARDS_CURRENTDECK", $currentDeck);
             $smarty->assign("T_FLASHCARDS_CURRENTCARD", $question);
             //pr($currentDeck);
             $smarty->assign("T_FLASHCARDS_SUCCESSARRAY", $successArray);
             $smarty->assign("T_FLASHCARDS_LESSONNAME", $currentLesson->lesson['name']);
         }
     }
     return true;
 }