diff --git a/main/newscorm/learnpath.class.php b/main/newscorm/learnpath.class.php index fb7cfce7e8..4d22117010 100755 --- a/main/newscorm/learnpath.class.php +++ b/main/newscorm/learnpath.class.php @@ -408,19 +408,12 @@ class learnpath { $display_order = 0; } else { $previous = (int) $previous; - $sql = " - SELECT - id, - previous_item_id, - next_item_id, - display_order - FROM " . $tbl_lp_item . " - WHERE - lp_id = " . $this->get_id() . " AND - id = " . $previous; + $sql = "SELECT id, previous_item_id, next_item_id, display_order + FROM " . $tbl_lp_item . " + WHERE lp_id = " . $this->get_id() . " AND id = " . $previous; $result = Database::query($sql); - $row = Database :: fetch_array($result); + $row = Database :: fetch_array($result); $tmp_previous = $row['id']; $next = $row['next_item_id']; @@ -438,10 +431,10 @@ class learnpath { if ($type == 'quiz') { $sql = 'SELECT SUM(ponderation) - FROM ' . Database :: get_course_table(TABLE_QUIZ_QUESTION) . ' as quiz_question - INNER JOIN ' . Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION) . ' as quiz_rel_question - ON quiz_question.id = quiz_rel_question.question_id - AND quiz_rel_question.exercice_id = ' . $id; + FROM ' . Database :: get_course_table(TABLE_QUIZ_QUESTION) . ' as quiz_question + INNER JOIN ' . Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION) . ' as quiz_rel_question + ON quiz_question.id = quiz_rel_question.question_id + AND quiz_rel_question.exercice_id = ' . $id; $rsQuiz = Database::query($sql); $max_score = Database :: result($rsQuiz, 0, 0); } else { @@ -449,8 +442,7 @@ class learnpath { } if ($prerequisites != 0) { - $sql_ins = " - INSERT INTO " . $tbl_lp_item . " ( ". + $sql_ins = "INSERT INTO " . $tbl_lp_item . " ( ". "lp_id, ". "item_type, ". "ref, ". @@ -549,11 +541,9 @@ class learnpath { $res_update_previous = Database::query($sql_update_order); // Update the item that should come after the new item. - $sql_update_ref = " - UPDATE " . $tbl_lp_item . " - SET ref = " . $new_item_id . " - WHERE id = " . $new_item_id; - + $sql_update_ref = "UPDATE " . $tbl_lp_item . " + SET ref = " . $new_item_id . " + WHERE id = " . $new_item_id; Database::query($sql_update_ref); } @@ -4708,7 +4698,7 @@ class learnpath { } else { $parent_id = $item['parent_item_id']; if (empty($parent_arrays)) { - $parent_arrays[] = $item['id']; + $parent_arrays[] = intval($item['id']); } $parent_arrays[] = $parent_id; break; @@ -4731,13 +4721,10 @@ class learnpath { $x++; } $val .= ""; - $generated_array = null; - //".$row." - $code_str = $val."[".$arrLP[$i]['id']."][\"load_data\"] = '".$arrLP[$i]['id']."' ; "; - //var_dump($code_str); + $generated_array = null; + $code_str = $val."[".$arrLP[$i]['id']."][\"load_data\"] = '".$arrLP[$i]['id']."' ; "; eval($code_str); } else { - //var_dump($parent_arrays); $elements[$parent_id]['children'][$arrLP[$i]['id']]['data'] = $row; $elements[$parent_id]['children'][$arrLP[$i]['id']]['type'] = $arrLP[$i]['item_type']; } @@ -4902,6 +4889,38 @@ class learnpath { return $return; } + public function generate_lp_folder($course, $dir) { + $filepath = ''; + //Creating learning_path folder + $dir = '/learning_path'; + $filepath = api_get_path(SYS_COURSE_PATH) . $course['path'] . '/document'; + $folder = null; + if (!is_dir($filepath.'/'.$dir)) { + $folder = create_unexisting_directory($course, api_get_user_id(), api_get_session_id(), 0, 0, $filepath, $dir , get_lang('LearningPaths')); + } else { + $folder = true; + } + + $dir = '/learning_path/'; + //Creating LP folder + if ($folder) { + //Limits title size + $title = api_substr(replace_dangerous_char($this->name), 0 , 80); + $dir = $dir.$title; + $filepath = api_get_path(SYS_COURSE_PATH) . $course['path'] . '/document'; + if (!is_dir($filepath.'/'.$dir)) { + $folder = create_unexisting_directory($course, api_get_user_id(), api_get_session_id(), 0, 0, $filepath, $dir , $this->name); + } else { + $folder = true; + } + $dir = $dir.'/'; + if ($folder) { + $filepath = api_get_path(SYS_COURSE_PATH) . $course['path'] . '/document'.$dir; + } + } + $array = array('dir' => $dir, 'filepath' => $filepath); + return $array; + } /** * Create a new document //still needs some finetuning * @param array $_course @@ -4922,43 +4941,19 @@ class learnpath { $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document' . $dir; if (empty($_POST['dir']) && empty($_GET['dir'])) { - - //Creating learning_path folder - $dir = '/learning_path'; - $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'; - $folder = null; - if (!is_dir($filepath.'/'.$dir)) { - $folder = create_unexisting_directory($_course, api_get_user_id(), api_get_session_id(), 0, 0, $filepath, $dir , get_lang('LearningPaths')); - } else { - $folder = true; - } - - $dir = '/learning_path/'; - //Creating LP folder - if ($folder) { - $title = replace_dangerous_char($this->name); - $dir = $dir.$title; - $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'; - if (!is_dir($filepath.'/'.$dir)) { - $folder = create_unexisting_directory($_course, api_get_user_id(), api_get_session_id(), 0, 0, $filepath, $dir , $this->name); - } else { - $folder = true; - } - $dir = $dir.'/'; - if ($folder) { - $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'.$dir; - } - } + var_dump($dir); + $result = $this->generate_lp_folder($_course, $dir); + $dir = $result['dir']; + $filepath = $result['filepath']; } if (!is_dir($filepath)) { $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document/'; $dir = '/'; - } - + } // stripslashes() before calling replace_dangerous_char() because $_POST['title'] - // is already escaped twice when it gets here. + // is already escaped twice when it gets here. $title = replace_dangerous_char(stripslashes($_POST['title'])); $title = disable_dangerous_file($title); @@ -4972,10 +4967,14 @@ class learnpath { $tmp_filename = $filename . '_' . ++ $i; $filename = $tmp_filename . '.html'; - $content = stripslashes(text_filter($content)); - $content = str_replace(api_get_path(WEB_COURSE_PATH), api_get_path(REL_PATH) . 'courses/', $content); + $content = stripslashes($content); + + $content = str_replace(api_get_path(WEB_COURSE_PATH), api_get_path(REL_PATH).'courses/', $content); + // Change the path of mp3 to absolute. + // The first regexp deals with ../../../ urls. + $content = preg_replace("|(flashvars=\"file=)(\.+/)+|", "$1" . api_get_path(REL_COURSE_PATH) . $_course['path'] . '/document/', $content); // The second regexp deals with audio/ urls. $content = preg_replace("|(flashvars=\"file=)([^/]+)/|", "$1" . api_get_path(REL_COURSE_PATH) . $_course['path'] . '/document/$2/', $content); @@ -4988,7 +4987,7 @@ class learnpath { fclose($fp); $file_size = filesize($filepath . $filename); - $save_file_path = $dir . $filename; + $save_file_path = $dir.$filename; $document_id = add_document($_course, $save_file_path, 'file', $file_size, $tmp_filename); @@ -5001,10 +5000,8 @@ class learnpath { if ($new_comment || $new_title) { $tbl_doc = Database :: get_course_table(TABLE_DOCUMENT); $ct = ''; - if ($new_comment) $ct .= ", comment='" . Database::escape_string($new_comment). "'"; - if ($new_title) $ct .= ", title='" . Database :: escape_string(htmlspecialchars($new_title, ENT_QUOTES, $charset))."' "; @@ -6336,7 +6333,7 @@ class learnpath { public function display_document_form($action = 'add', $id = 0, $extra_info = 'new') { global $charset; $tbl_lp_item = Database :: get_course_table(TABLE_LP_ITEM); - $tbl_doc = Database :: get_course_table(TABLE_DOCUMENT); + $tbl_doc = Database :: get_course_table(TABLE_DOCUMENT); $path_parts = pathinfo($extra_info['dir']); $no_display_edit_textarea = false; @@ -6379,7 +6376,7 @@ class learnpath { WHERE id = " . Database :: escape_string($extra_info); $result = Database::query($sql_doc); - $row = Database :: fetch_array($result); + $row = Database::fetch_array($result); $explode = explode('.', $row['title']); @@ -6395,14 +6392,12 @@ class learnpath { $path_parts = pathinfo($row['path']); $item_title = stripslashes($path_parts['filename']); } - } else { $item_title = ''; $item_description = ''; } - - $return = '
-
'; + $return = '
+
'; if ($id != 0 && is_array($extra_info)) $parent = $extra_info['parent_item_id']; @@ -6547,21 +6542,6 @@ class learnpath { } } } - // Commented the prerequisites, only visible in edit (new document). - //$select_prerequisites=$form->addElement('select', 'prerequisites', get_lang('Prerequisites'),null,'id="prerequisites" class="learnpath_item_form" style="width:263px;"'); - //$select_prerequisites->addOption(get_lang('NoPrerequisites'), 0); - - // Form element for uploading an mp3 file. - //$form->addElement('file','mp3',get_lang('UploadMp3audio'),'id="mp3" size="33"'); - //$form->addRule('file', 'The extension of the Song file should be *.mp3', 'filename', '/^.*\.mp3$/'); - - /* Code deprecated - moved to lp level (not lp-item). - if (api_get_setting('search_enabled') === 'true') { - //add terms field - $terms = $form->addElement('text', 'terms', get_lang('SearchFeatureTerms').' :', 'id="idTerms" class="learnpath_item_form"'); - $terms->setValue($item_terms); - } - */ $arrHide = array (); @@ -6575,20 +6555,9 @@ class learnpath { } } - - /* foreach ($arrHide as $key => $value) { - $select_prerequisites->addOption($value['value'], $key, 'style="padding-left:'.$value['padding'].'px;"'); - if ($key == $s_selected_position && $action == 'add') { - $select_prerequisites -> setSelected(0); - } - elseif ($key == $id_prerequisite && $action == 'edit') { - $select_prerequisites -> setSelected($id_prerequisite); - } - } - */ + if (!$no_display_add) { if (($extra_info == 'new' || $extra_info['item_type'] == TOOL_DOCUMENT || $_GET['edit'] == 'true')) { - if (isset ($_POST['content'])) $content = stripslashes($_POST['content']); elseif (is_array($extra_info)) { @@ -6596,40 +6565,49 @@ class learnpath { if (!$no_display_edit_textarea) { $content = $this->display_document($extra_info['path'], false, false); } - } - elseif (is_numeric($extra_info)) $content = $this->display_document($extra_info, false, false); + } elseif (is_numeric($extra_info)) + $content = $this->display_document($extra_info, false, false); else $content = ''; - + if (!$no_display_edit_textarea) { - // We need to claculate here some specific settings for the online editor. + // We need to calculate here some specific settings for the online editor. // The calculated settings work for documents in the Documents tool // (on the root or in subfolders). // For documents in native scorm packages it is unclear whether the // online editor should be activated or not. - $relative_path = $extra_info['dir']; - if ($relative_path == 'n/') { - // A new document, it is in the root of the repository. - $relative_path = ''; - $relative_prefix = ''; - } else { + + // A new document, it is in the root of the repository. + $relative_path = ''; + $relative_prefix = ''; + + if (is_array($extra_info) && $extra_info != 'new') { // The document already exists. Whe have to determine its relative path towards the repository root. - $relative_path = explode('/', $relative_path); + $relative_path = explode('/', $extra_info['dir']); $cnt = count($relative_path) - 2; if ($cnt < 0) { $cnt = 0; } $relative_prefix = str_repeat('../', $cnt); - $relative_path = array_slice($relative_path, 1, $cnt); - $relative_path = implode('/', $relative_path); + $relative_path = array_slice($relative_path, 1, $cnt); + $relative_path = implode('/', $relative_path); if (strlen($relative_path) > 0) { $relative_path = $relative_path . '/'; } - } - $editor_config = array('ToolbarSet' => 'LearningPathDocuments', 'Width' => '100%', 'Height' => '700', 'FullPage' => true, - 'CreateDocumentDir' => $relative_prefix, - 'CreateDocumentWebDir' => api_get_path(WEB_COURSE_PATH) . api_get_course_path() . '/document/', - 'BaseHref' => api_get_path(WEB_COURSE_PATH) . api_get_course_path() . '/document/' . $relative_path + } else { + global $_course; + $result = $this->generate_lp_folder($_course, ''); + $relative_path = api_substr($result['dir'], 1, strlen($result['dir'])); + $relative_prefix = '../../'; + } + + $editor_config = array( 'ToolbarSet' => 'LearningPathDocuments', + 'Width' => '100%', + 'Height' => '500', + 'FullPage' => true, + 'CreateDocumentDir' => $relative_prefix, + 'CreateDocumentWebDir' => api_get_path(WEB_COURSE_PATH) . api_get_course_path().'/document/', + 'BaseHref' => api_get_path(WEB_COURSE_PATH) . api_get_course_path().'/document/'.$relative_path ); if ($_GET['action'] == 'add_item') { @@ -6650,18 +6628,14 @@ class learnpath { $form->addElement('html', '
'); $defaults['content_lp'] = $content; } - } - - elseif (is_numeric($extra_info)) { - + } elseif (is_numeric($extra_info)) { $form->addElement('style_submit_button', 'submit_button', get_lang('SaveDocument'), 'class="save"'); - $return = $this->display_document($extra_info, true, true, true); $form->addElement('html', $return); } } - } + if ($action == 'move') { $form->addElement('hidden', 'title', $item_title); $form->addElement('hidden', 'description', $item_description); diff --git a/main/newscorm/lp_add_item.php b/main/newscorm/lp_add_item.php index 621b5b050d..1beab66521 100755 --- a/main/newscorm/lp_add_item.php +++ b/main/newscorm/lp_add_item.php @@ -25,15 +25,9 @@ api_protect_course_script(); // libraries are included by default. include 'learnpath_functions.inc.php'; -//include '../resourcelinker/resourcelinker.inc.php'; include 'resourcelinker.inc.php'; -// Rewrite the language file, sadly overwritten by resourcelinker.inc.php. -// Name of the language file that needs to be included. -$language_file = 'learnpath'; - -/* Header and action code */ - +$language_file = 'learnpath'; $htmlHeadXtra[] = ' '; if (api_get_setting('show_glossary_in_documents') == 'ismanual' || api_get_setting('show_glossary_in_documents') == 'isautomatic' ) { @@ -64,9 +54,9 @@ if (api_get_setting('show_glossary_in_documents') == 'ismanual' || api_get_setti } $htmlHeadXtra[] = ''; @@ -107,13 +97,10 @@ if (!api_is_allowed_to_edit(null, true) && intval($visibility) == 0 ) { api_not_allowed(); } -//$lp_item_id = learnpath::escape_string($_GET['item_id']); -//$_SESSION['oLP']->set_current_item($lp_item_id); // Already done by lp_controller.php. - // Prepare variables for the test tool (just in case) - honestly, this should disappear later on. $_SESSION['scorm_view_id'] = $_SESSION['oLP']->get_view_id(); $_SESSION['scorm_item_id'] = $lp_item_id; -$_SESSION['lp_mode'] = $_SESSION['oLP']->mode; +$_SESSION['lp_mode'] = $_SESSION['oLP']->mode; // Reinit exercises variables to avoid spacename clashes (see exercise tool) if (isset($exerciseResult) || isset($_SESSION['exerciseResult'])) { @@ -125,15 +112,17 @@ unset($_SESSION['questionList']); /** * Get a link to the corresponding document. */ + if (!isset($src)) { - $src = ''; + $src = ''; switch($lp_type) { case 1: $_SESSION['oLP']->stop_previous_item(); $htmlHeadXtra[] = ''; $prereq_check = $_SESSION['oLP']->prerequisites_match($lp_item_id); - if ($prereq_check === true) { + if ($prereq_check === true) { $src = $_SESSION['oLP']->get_link('http', $lp_item_id); + //Prevents FF 3.6 + Adobe Reader 9 bug see BT#794 when calling a pdf file in a LP. $file_info = pathinfo($src); if (api_strtolower(substr($file_info['extension'], 0, 3) == 'pdf')) { @@ -175,12 +164,6 @@ if (!isset($src)) { $list = $_SESSION['oLP']->get_toc(); $type_quiz = false; -/* -$current_item = $_SESSION['oLP']->items[$_SESSION['oLP']->get_current_item_id()]; -$attempt_id = $current_item->get_attempt_id(); -error_log('get attempts'.$current_item->get_attempt_id()); -*/ - foreach($list as $toc) { if ($toc['id'] == $lp_item_id && ($toc['type']=='quiz')) { @@ -214,10 +197,6 @@ if ($type_quiz && !empty($_REQUEST['exeId']) && isset($lp_id) && isset($_GET['lp $score = (float)$row_dates['exe_result']; $max_score = (float)$row_dates['exe_weighting']; - /*$sql_upd_status = "UPDATE $TBL_LP_ITEM_VIEW SET status = 'completed' WHERE lp_item_id = '".(int)$safe_item_id."' - AND lp_view_id = (SELECT lp_view.id FROM $TBL_LP_VIEW lp_view WHERE user_id = '".(int)$_SESSION['oLP']->user_id."' AND lp_id='".(int)$safe_id."')"; - Database::query($sql_upd_status);*/ - $sql_upd_max_score = "UPDATE $TBL_LP_ITEM SET max_score = '$max_score' WHERE id = '".(int)$safe_item_id."'"; Database::query($sql_upd_max_score); @@ -279,16 +258,15 @@ if ($_SESSION['oLP']->mode == 'embedframe') {
-