diff --git a/main/newscorm/learnpath.class.php b/main/newscorm/learnpath.class.php index e8be55524a..934c30f558 100644 --- a/main/newscorm/learnpath.class.php +++ b/main/newscorm/learnpath.class.php @@ -7344,12 +7344,56 @@ function display_thread_form($action = 'add', $id = 0, $extra_info = '') $my_dep_file->setAttribute('href',$doc_info[0]); $my_dep->setAttribute('xml:base',''); - $current_dir = dirname($current_course_path.'/'.$item->get_file_path()).'/'; + //$current_dir = dirname($current_course_path.'/'.$item->get_file_path()).'/'; $file_path = realpath(api_get_path(SYS_PATH).$doc_info[0]); $file_path = str_replace('//','/',$file_path); + //prepare the current directory path (until just under 'document') with a trailing slash + $cur_path = substr($current_course_path,-1)=='/'?$current_course_path:$current_course_path.'/'; - if(strstr($file_path,$main_path) !== false) + //check if the current document is in that path + if(strstr($file_path,$cur_path) !== false) + { + //the document is in that path, now get the relative path + //to the containing document + $orig_file_path = dirname($cur_path.$my_file_path).'/'; + $relative_path =''; + if(strstr($file_path,$cur_path)!==false) + { + $relative_path = substr($file_path,strlen($orig_file_path)); + $file_path = substr($file_path,strlen($cur_path)); + } + else + { + //this case is still a problem as it's difficult to calculate a relative path easily + //might still generate wrong links + //$file_path = substr($file_path,strlen($cur_path)); + //calculate the directory path to the current file (without trailing slash) + $my_relative_path = dirname($file_path); + $my_relative_file = basename($file_path); + //calculate the directory path to the containing file (without trailing slash) + $my_orig_file_path = substr($orig_file_path,0,-1); + $dotdot = ''; + $subdir = ''; + while(strstr($my_relative_path,$my_orig_file_path)===false && (strlen($my_orig_file_path)>1) && (strlen($my_relative_path)>1)) + { + $my_relative_path2 = dirname($my_relative_path); + $my_orig_file_path = dirname($my_orig_file_path); + $subdir = substr($my_relative_path,strlen($my_relative_path2)+1)."/".$subdir; + $dotdot += '../'; + $my_relative_path = $my_relative_path2; + } + $relative_path = $dotdot.$subdir.$my_relative_file; + } + //put the current document in the zip (this array is the array + //that will manage documents already in the course folder - relative) + $zip_files[] = $file_path; + //update the links to the current document in the containing document (make them relative) + $link_updates[$my_file_path][] = array('orig'=>$doc_info[0],'dest'=>$relative_path); + $my_dep_file->setAttribute('href',$file_path); + $my_dep->setAttribute('xml:base',''); + } + elseif(strstr($file_path,$main_path) !== false) {//the calculated real path is really inside the dokeos root path //reduce file path to what's under the DocumentRoot $file_path = substr($file_path,strlen($root_path)); @@ -7857,4 +7901,4 @@ EOD; } } } -?> \ No newline at end of file +?>