diff --git a/main/document/create_document.php b/main/document/create_document.php index 33317f6245..39e69201f3 100755 --- a/main/document/create_document.php +++ b/main/document/create_document.php @@ -168,7 +168,7 @@ $nameTools = get_lang('CreateDocument'); /* Constants and variables */ -$document_data = DocumentManager::get_document_data_by_id($_REQUEST['id'], api_get_course_id()); +$document_data = DocumentManager::get_document_data_by_id($_REQUEST['id'], api_get_course_id(), true); if (empty($document_data)) { if (api_is_in_group()) { $group_properties = GroupManager::get_group_properties(api_get_group_id()); @@ -616,19 +616,16 @@ if ($form->validate()) { } */ - $dir_acum = ''; - for ($i = 0; $i < $array_len; $i++) { - $url_dir = 'document.php?&curdirpath='.$dir_acum.$dir_array[$i]; - //Max char 80 - $url_to_who = cut($dir_array[$i],80); - if ($is_certificate_mode) { - $interbreadcrumb[] = array('url' => $url_dir.'&selectcat='.Security::remove_XSS($_GET['selectcat']), 'name' => $url_to_who); - } else { - $interbreadcrumb[] = array('url' => $url_dir, 'name' => $url_to_who); + // Interbreadcrumb for the current directory root path + if (empty($document_data['parents'])) { + $interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']); + } else { + foreach($document_data['parents'] as $document_sub_data) { + $interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']); } - $dir_acum .= $dir_array[$i].'/'; } - + + Display :: display_header($nameTools, "Doc"); //api_display_tool_title($nameTools); // actions diff --git a/main/document/create_draw.php b/main/document/create_draw.php index 360769d56a..7e17f7eae3 100644 --- a/main/document/create_draw.php +++ b/main/document/create_draw.php @@ -31,7 +31,7 @@ $nameTools = get_lang('Draw'); api_protect_course_script(); api_block_anonymous_users(); -$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id()); +$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id(), true); if (empty($document_data)) { if (api_is_in_group()) { $group_properties = GroupManager::get_group_properties(api_get_group_id()); @@ -129,18 +129,13 @@ if (isset ($group)) { } } */ - - $dir_acum = ''; - for ($i = 0; $i < $array_len; $i++) { - $url_dir = 'document.php?&curdirpath='.$dir_acum.$dir_array[$i]; - //Max char 80 - $url_to_who = cut($dir_array[$i],80); - if ($is_certificate_mode) { - $interbreadcrumb[] = array('url' => $url_dir.'&selectcat='.Security::remove_XSS($_GET['selectcat']), 'name' => $url_to_who); - } else { - $interbreadcrumb[] = array('url' => $url_dir, 'name' => $url_to_who); + // Interbreadcrumb for the current directory root path + if (empty($document_data['parents'])) { + $interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']); + } else { + foreach($document_data['parents'] as $document_sub_data) { + $interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']); } - $dir_acum .= $dir_array[$i].'/'; } Display :: display_header($nameTools, 'Doc'); diff --git a/main/document/create_paint.php b/main/document/create_paint.php index b7191b029e..3ec8fb5ab7 100644 --- a/main/document/create_paint.php +++ b/main/document/create_paint.php @@ -31,7 +31,7 @@ if (api_get_setting('enabled_support_paint') == 'false') { api_not_allowed(true); } -$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id()); +$document_data = DocumentManager::get_document_data_by_id($_GET['id'], api_get_course_id(), true); if (empty($document_data)) { if (api_is_in_group()) { $group_properties = GroupManager::get_group_properties(api_get_group_id()); @@ -113,22 +113,13 @@ if (isset ($group)) { } // Interbreadcrumb for the current directory root path - // Copied from document.php - $dir_array = explode('/', $dir); - $array_len = count($dir_array); - $dir_acum = ''; - for ($i = 0; $i < $array_len; $i++) { - $url_dir = 'document.php?&curdirpath='.$dir_acum.$dir_array[$i]; - //Max char 80 - $url_to_who = cut($dir_array[$i],80); - if ($is_certificate_mode) { - $interbreadcrumb[] = array('url' => $url_dir.'&selectcat='.Security::remove_XSS($_GET['selectcat']), 'name' => $url_to_who); - } else { - $interbreadcrumb[] = array('url' => $url_dir, 'name' => $url_to_who); - } - $dir_acum .= $dir_array[$i].'/'; +if (empty($document_data['parents'])) { + $interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']); +} else { + foreach($document_data['parents'] as $document_sub_data) { + $interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']); } -// +} Display :: display_header($nameTools, 'Doc'); echo '
'; diff --git a/main/document/document.php b/main/document/document.php index 296636f8ae..a94e317d5e 100755 --- a/main/document/document.php +++ b/main/document/document.php @@ -31,7 +31,6 @@ /** * Code */ -/* INIT SECTION */ // Language files that need to be included $language_file = array('document', 'slideshow', 'gradebook', 'create_course'); @@ -180,10 +179,13 @@ $is_certificate_mode = DocumentManager::is_certificate_mode($_GET['curdirpath']) //If no actions we proceed to show the document (Hack in order to use document.php?id=X) if (isset($document_id)) { - $document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id()); + $document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id(), true); + //If the document is not a folder we show the document if ($document_data) { + $parent_id = $document_data['parent_id']; + if (!empty($document_data['filetype']) && $document_data['filetype'] == 'file') { $visibility = DocumentManager::is_visible_by_id($document_id, $course_info, api_get_session_id(), api_get_user_id()); if ($visibility && api_is_allowed_to_session_edit()) { @@ -194,30 +196,44 @@ if (isset($document_id)) { } $_GET['curdirpath'] = $document_data['path']; } -} - -// What's the current path? -// We will verify this a bit further down -if (isset($_GET['curdirpath']) && $_GET['curdirpath'] != '') { - $curdirpath = Security::remove_XSS($_GET['curdirpath']); -} elseif (isset($_POST['curdirpath']) && $_POST['curdirpath'] != '') { - $curdirpath = Security::remove_XSS($_POST['curdirpath']); + + // What's the current path? + // We will verify this a bit further down + if (isset($_GET['curdirpath']) && $_GET['curdirpath'] != '') { + $curdirpath = Security::remove_XSS($_GET['curdirpath']); + } elseif (isset($_POST['curdirpath']) && $_POST['curdirpath'] != '') { + $curdirpath = Security::remove_XSS($_POST['curdirpath']); + } else { + $curdirpath = '/'; + } + + $curdirpathurl = urlencode($curdirpath); + } else { - $curdirpath = '/'; -} - -$curdirpathurl = urlencode($curdirpath); - -// Check the path -// If the path is not found (no document id), set the path to / -$document_id = DocumentManager::get_document_id($course_info, $curdirpath); - -if (!$document_id) { - $document_id = DocumentManager::get_document_id($course_info, $curdirpath); + // What's the current path? + // We will verify this a bit further down + if (isset($_GET['curdirpath']) && $_GET['curdirpath'] != '') { + $curdirpath = Security::remove_XSS($_GET['curdirpath']); + } elseif (isset($_POST['curdirpath']) && $_POST['curdirpath'] != '') { + $curdirpath = Security::remove_XSS($_POST['curdirpath']); + } else { + $curdirpath = '/'; + } + + $curdirpathurl = urlencode($curdirpath); + + // Check the path + // If the path is not found (no document id), set the path to / + $document_id = DocumentManager::get_document_id($course_info, $curdirpath); + + if (!$document_id) { + $document_id = DocumentManager::get_document_id($course_info, $curdirpath); + } + + $document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id(), true); + $parent_id = $document_data['parent_id']; } -$document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id()); -$parent_id = DocumentManager::get_document_id($course_info, dirname($document_data['path'])); if (!$parent_id) { $parent_id = 0; @@ -225,7 +241,6 @@ if (!$parent_id) { $current_folder_id = $document_id; - // Show preview if (isset($_GET['curdirpath']) && $_GET['curdirpath'] == '/certificates' && isset($_GET['set_preview']) && $_GET['set_preview'] == strval(intval($_GET['set_preview']))) { if (isset($_GET['set_preview'])) { @@ -355,32 +370,15 @@ if ($is_certificate_mode) { } // Interbreadcrumb for the current directory root path - -$dir_array = explode('/', $curdirpath); -$array_len = count($dir_array); - -$dir_acum = ''; - -for ($i = 0; $i < $array_len; $i++) { - $url_dir = 'document.php?&curdirpath='.$dir_acum.$dir_array[$i]; - //Max char 80 - $url_to_who = cut($dir_array[$i],80); - if ($is_certificate_mode) { - $interbreadcrumb[] = array('url' => $url_dir.'&selectcat='.Security::remove_XSS($_GET['selectcat']), 'name' => $url_to_who); - } else { - if( $i == $array_len - 1 && !isset($_GET['createdir']) ) { - $url_dir = '#'; - } - if ($url_to_who == 'learning_path') { - $url_to_who = get_lang('LearningPaths'); - } - $interbreadcrumb[] = array('url' => $url_dir, 'name' => $url_to_who); - } - //does not repeat the name group in the url - if (!empty($_SESSION['_gid'])) { - unset($dir_array[1]); - } - $dir_acum .= $dir_array[$i].'/'; +if (empty($document_data['parents'])) { + $interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']); +} else { + foreach($document_data['parents'] as $document_sub_data) { + if (!isset($_GET['createdir']) && $document_sub_data['id'] == $document_data['id']) { + $document_sub_data['document_url'] = '#'; + } + $interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']); + } } if (isset($_GET['createdir'])) { @@ -688,7 +686,7 @@ if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_fold if (isset($_POST['create_dir']) && $_POST['dirname'] != '') { // Needed for directory creation require_once api_get_path(LIBRARY_PATH).'fileUpload.lib.php'; - $post_dir_name = Security::remove_XSS($_POST['dirname']); + $post_dir_name = $_POST['dirname']; if ($post_dir_name == '../' || $post_dir_name == '.' || $post_dir_name == '..') { Display::display_error_message(get_lang('CannotCreateDir')); @@ -701,6 +699,8 @@ if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_fold $dir_name = $curdirpath.$added_slash.replace_dangerous_char($post_dir_name); $dir_name = disable_dangerous_file($dir_name); $dir_name = str_replace('.', '_', $dir_name); + + //@todo why the folder name can't have a dot. It's just the folder name $post_dir_name = str_replace('.', '_', $post_dir_name); $dir_check = $base_work_dir.$dir_name; diff --git a/main/document/upload.php b/main/document/upload.php index 31f244f39c..3225de6f15 100755 --- a/main/document/upload.php +++ b/main/document/upload.php @@ -109,7 +109,7 @@ $courseDir = $_course['path'].'/document'; $sys_course_path = api_get_path(SYS_COURSE_PATH); $base_work_dir = $sys_course_path.$courseDir; -$document_data = DocumentManager::get_document_data_by_id($_REQUEST['id'], api_get_course_id()); +$document_data = DocumentManager::get_document_data_by_id($_REQUEST['id'], api_get_course_id(), true); if (empty($document_data)) { $document_id = $parent_id = 0; $path = '/'; @@ -176,6 +176,16 @@ if ($is_certificate_mode) { $interbreadcrumb[] = array('url' => './document.php?id='.$document_id.$req_gid, 'name'=> get_lang('Documents')); } +// Interbreadcrumb for the current directory root path +if (empty($document_data['parents'])) { + $interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']); +} else { + foreach($document_data['parents'] as $document_sub_data) { + $interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']); + } +} + + $this_section = SECTION_COURSES; diff --git a/main/inc/lib/document.lib.php b/main/inc/lib/document.lib.php index c450bacc73..038ca30900 100755 --- a/main/inc/lib/document.lib.php +++ b/main/inc/lib/document.lib.php @@ -1001,7 +1001,7 @@ return 'application/octet-stream'; * @todo load parent_id * @return int id of document / false if no doc found */ - public static function get_document_data_by_id($id, $course_code) { + public static function get_document_data_by_id($id, $course_code, $load_parents = false) { $course_info = api_get_course_info($course_code); if (empty($course_info)) { return false; @@ -1015,11 +1015,29 @@ return 'application/octet-stream'; if ($result && Database::num_rows($result) == 1) { $row = Database::fetch_array($result,'ASSOC'); //Public document URL - $row['url'] = api_get_path(WEB_CODE_PATH).'document/showinframes.php?cidReq='.$course_code.'&id='.$id; + $row['url'] = api_get_path(WEB_CODE_PATH).'document/showinframes.php?cidReq='.$course_code.'&id='.$id; + $row['document_url'] = api_get_path(WEB_CODE_PATH).'document/document.php?cidReq='.$course_code.'&id='.$id; $url_path = urlencode($row['path']); $path = str_replace('%2F', '/',$url_path); - $row['direct_url'] = $www.$path; + $row['direct_url'] = $www.$path; $row['parent_id'] = self::get_document_id($course_info, dirname($row['path'])); + $parents = array(); + //Use to generate the breadcrumb + if ($load_parents) { + $dir_array = explode('/', $row['path']); + $dir_array = array_filter($dir_array); + $array_len = count($dir_array) +1 ; + $real_dir = ''; + + for ($i = 1; $i < $array_len; $i++) { + $real_dir .= '/'.$dir_array[$i]; + $parent_id = self::get_document_id($course_info, $real_dir); + if (!empty($parent_id)) { + $parents[] = self::get_document_data_by_id($parent_id, $course_code, false); + } + } + } + $row['parents'] = $parents; return $row; } return false;