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;