diff --git a/main/document/document.inc.php b/main/document/document.inc.php index 3dac8f5126..fe0e7213b4 100755 --- a/main/document/document.inc.php +++ b/main/document/document.inc.php @@ -101,7 +101,7 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang * @param int $show_as_icon - if it is true, only a clickable icon will be shown * @return string url */ -function create_document_link($document_data, $show_as_icon = false, $counter = null) { +function create_document_link($document_data, $show_as_icon = false, $counter = null, $visibility) { global $dbl_click_id; if (isset($_SESSION['_gid'])) { $req_gid = '&gidReq='.$_SESSION['_gid']; @@ -120,13 +120,13 @@ function create_document_link($document_data, $show_as_icon = false, $counter = } $filetype = $document_data['filetype']; - $size = $filetype == 'folder' ? get_total_folder_size($document_data['path'], api_is_allowed_to_edit(null, true)) : $document_data['size']; - $visibility = $document_data['visibility']; + $size = $filetype == 'folder' ? get_total_folder_size($document_data['path'], api_is_allowed_to_edit(null, true)) : $document_data['size']; $path = $document_data['path']; $url_path = urlencode($document_data['path']); + // Add class="invisible" on invisible files - $visibility_class = ($visibility == 0) ? ' class="invisible"' : ''; + $visibility_class = ($visibility == false) ? ' class="invisible"' : ''; if (!$show_as_icon) { // Build download link (icon) @@ -259,7 +259,11 @@ function create_document_link($document_data, $show_as_icon = false, $counter = ) { //yox view $url = 'showinframesmin.php?'.api_get_cidreq().'&id='.$document_data['id'].$req_gid; - return ''.$title.''.$force_download_html.$copy_to_myfiles.$open_in_new_window_link.$pdf_icon; + $class = 'yoxview'; + if ($visibility == false) { + $class = "yoxview invisible"; + } + return ''.$title.''.$force_download_html.$copy_to_myfiles.$open_in_new_window_link.$pdf_icon; } else { $url = 'showinframes.php?'.api_get_cidreq().'&id='.$document_data['id'].$req_gid; //No yoxview @@ -434,8 +438,7 @@ function build_document_icon_tag($type, $path) { * @param int $id dbase id of the document * @return string html img tags with hyperlinks */ -//function build_edit_icons($document_data, $curdirpath, $type, $path, $visibility, $id, $is_template, $is_read_only = 0, $session_id = 0) { -function build_edit_icons($document_data, $id, $is_template, $is_read_only = 0, $session_id = 0) { +function build_edit_icons($document_data, $id, $is_template, $is_read_only = 0, $visibility) { if (isset($_SESSION['_gid'])) { $req_gid = '&gidReq='.$_SESSION['_gid']; } else { @@ -444,7 +447,7 @@ function build_edit_icons($document_data, $id, $is_template, $is_read_only = 0, $document_id = $document_data['id']; $type = $document_data['filetype']; - $visibility = $document_data['visibility']; + $is_read_only = $document_data['readonly']; $path = $document_data['path']; $parent_id = DocumentManager::get_document_id(api_get_course_info(), dirname($path)); diff --git a/main/document/document.php b/main/document/document.php index 11b7e5d7b9..3cf9ea71f5 100755 --- a/main/document/document.php +++ b/main/document/document.php @@ -893,8 +893,13 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) { $row['type'] = $document_data['filetype']; // If the item is invisible, wrap it in a span with class invisible - $invisibility_span_open = ($document_data['visibility'] == 0) ? '' : ''; + + $is_visible = DocumentManager::is_visible_by_id($document_data['id'], $course_info, api_get_session_id(), api_get_user_id(), false); + + $invisibility_span_open = ($is_visible == 0) ? '' : ''; + + // Size (or total size of a directory) $size = $document_data['filetype'] == 'folder' ? get_total_folder_size($document_data['path'], $is_allowed_to_edit) : $document_data['size']; @@ -942,7 +947,8 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) { } // Icons (clickable) - $row[] = create_document_link($document_data, true, $count); + $row[] = create_document_link($document_data, true, $count, $is_visible); + $path_info = pathinfo($document_data['path']); if (isset($path_info['extension']) && in_array($path_info['extension'], array('ogg', 'mp3','wav'))) { @@ -952,8 +958,8 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) { // Validacion when belongs to a session $session_img = api_get_session_image($document_data['session_id'], $_user['status']); - // Document title with hyperlink - $row[] = create_document_link($document_data).$session_img.'
'.$invisibility_span_open.''.nl2br(htmlspecialchars($document_data['comment'],ENT_QUOTES,$charset)).''.$invisibility_span_close.$user_link; + // Document title with link + $row[] = create_document_link($document_data, false, null, $is_visible).$session_img.'
'.$invisibility_span_open.''.nl2br(htmlspecialchars($document_data['comment'],ENT_QUOTES,$charset)).''.$invisibility_span_close.$user_link; // Comments => display comment under the document name $display_size = format_file_size($size); @@ -971,9 +977,9 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) { $is_template = isset($document_data['is_template']) ? $document_data['is_template'] : false; // If readonly, check if it the owner of the file or if the user is an admin if ($document_data['insert_user_id'] == api_get_user_id() || api_is_platform_admin()) { - $edit_icons = build_edit_icons($document_data, $key, $is_template, 0); + $edit_icons = build_edit_icons($document_data, $key, $is_template, 0, $is_visible); } else { - $edit_icons = build_edit_icons($document_data, $key, $is_template, $document_data['readonly']); + $edit_icons = build_edit_icons($document_data, $key, $is_template, $document_data['readonly'], $is_visible); } $row[] = $edit_icons; } diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index cb7632ef3d..4430abd4fa 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2583,7 +2583,7 @@ class CourseManager { echo '
'; if ($load_dirs) { - echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; + echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; echo ''.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).''; echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container')); } else { @@ -2597,7 +2597,7 @@ class CourseManager { } else { echo '
'; if ($load_dirs) { - echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; + echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container')); } echo '
'; @@ -2741,7 +2741,7 @@ class CourseManager { echo '
'; if ($load_dirs) { - echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; + echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; echo ''.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).''; echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container')); } else { @@ -2755,7 +2755,7 @@ class CourseManager { } else { echo '
'; if ($load_dirs) { - echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; + echo ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container')); } echo '
'; @@ -3002,7 +3002,7 @@ class CourseManager { if ($load_dirs) { $result .= '
'; - $result .= ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; + $result .= ''.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).''; $result .= Display::div('', array('id' => 'document_result_'.$info['real_id'].'_'.$my_course['id_session'], 'class'=>'document_preview_container')); $result .= '
'; } diff --git a/main/inc/lib/document.lib.php b/main/inc/lib/document.lib.php index 2a43780a05..4449ae02b1 100755 --- a/main/inc/lib/document.lib.php +++ b/main/inc/lib/document.lib.php @@ -1130,11 +1130,11 @@ return 'application/octet-stream'; * @param array $course the _course array info of the document's course * @return bool */ - public static function is_visible_by_id($doc_id, $course_info, $session_id, $user_id) { + public static function is_visible_by_id($doc_id, $course_info, $session_id, $user_id, $admins_can_see_everything = true) { $is_visible = false; $user_in_course = false; - //Checking the course array + //1. Checking the course array if (empty($course_info)) { $course_info = api_get_course_info(); if (empty($course_info)) { @@ -1146,9 +1146,10 @@ return 'application/octet-stream'; $session_id = intval($session_id); - // Course and session visibility is handle in local.inc.php + //2. Course and Session visibility are handle in local.inc.php/global.inc.php + + //3. Checking if user exist in course/session - //Checking if user exist in course/session if ($session_id == 0 ) { if (CourseManager::is_user_subscribed_in_course($user_id, $course_info['code'])) { $user_in_course = true; @@ -1156,21 +1157,52 @@ return 'application/octet-stream'; } else { $user_status = SessionManager::get_user_status_in_session($user_id, $course_info['code'], $session_id); if (in_array($user_status, array('0', '6'))) { - //student or coach + //is true if is an student or a coach $user_in_course = true; } - } + } - if ($user_in_course) { - $item_info = api_get_item_property_info($course['real_id'], 'document', $doc_id, $session_id); - if (isset($item_info['visibility'])) { - if (api_is_platform_admin()) { - return true; - } - if ($item_info['visibility'] == 1) { - return true; - } - } + + //4. Checking document visibility (i'm repeating the code in order to be more clear when reading ) - jm + + if ($user_in_course) { + + //4.1 Checking document visibility for a Course + + if ($session_id == 0) { + $item_info = api_get_item_property_info($course_info['real_id'], 'document', $doc_id, 0); + + if (isset($item_info['visibility'])) { + // True for admins if document exists + if ($admins_can_see_everything && api_is_platform_admin()) { + return true; + } + if ($item_info['visibility'] == 1) { + return true; + } + } + } else { + //4.2 Checking document visibility for a Course in a Session + $item_info = api_get_item_property_info($course_info['real_id'], 'document', $doc_id, 0); + $item_info_in_session = api_get_item_property_info($course_info['real_id'], 'document', $doc_id, $session_id); + + // True for admins if document exists + if (isset($item_info['visibility'])) { + if ($admins_can_see_everything && api_is_platform_admin()) + return true; + } + + if (isset($item_info_in_session['visibility'])) { + //if ($doc_id == 85) { var_dump($item_info_in_session);} + if ($item_info_in_session['visibility'] == 1) { + return true; + } + } else { + if ($item_info['visibility'] == 1) { + return true; + } + } + } } return false; @@ -2579,7 +2611,7 @@ return 'application/octet-stream'; "ORDER BY docs.path ASC"; $res_doc = Database::query($sql_doc); $resources = Database::store_result($res_doc); - $return = ''; + $return = ''; $resources_sorted = array(); @@ -2589,18 +2621,19 @@ return 'application/octet-stream'; $return .= Display::url(get_lang('NewDocument'), api_get_self().'?'.api_get_cidreq().'&action=add_item&type='.TOOL_DOCUMENT.'&lp_id='.$_SESSION['oLP']->lp_id); $return .= '
'; } else { - $return .= Display::div(Display::url(Display::return_icon('delete.png', get_lang('Close'), array(), 22), '#', array('id'=>'close_div_'.$course_info['real_id'].'_'.$session_id,'class' =>'close_div')), array('style' => 'position:absolute;right:10px')); + $return .= Display::div(Display::url(Display::return_icon('delete.png', get_lang('Close'), array(), 22), 'javascript:void();', array('id'=>'close_div_'.$course_info['real_id'].'_'.$session_id,'class' =>'close_div')), array('style' => 'position:absolute;right:10px')); } // If you want to debug it, I advise you to do "echo" on the eval statements. if (!empty($resources) && $user_in_course) { foreach ($resources as $resource) { - $item_info = api_get_item_property_info($course_info['real_id'], 'document', $resource['id'], $session_id); - - if (empty($item_info)) { - continue; - } - + + $is_visible = self::is_visible_by_id($resource['id'], $course_info, $session_id, api_get_user_id()); + + if (!$is_visible) { + continue; + } + $resource_paths = explode('/', $resource['path']); array_shift($resource_paths); $path_to_eval = $last_path = ''; @@ -2642,14 +2675,8 @@ return 'application/octet-stream'; $('.doc_folder').mouseover(function() { var my_id = this.id.split('_')[2]; - $('#'+my_id).show(); - //$('#img_'+my_id).attr('src', '".$img_path."nolines_minus.gif' ); - }); - - /*$('.doc_folder').click(function() { - var my_id = this.id.split('_')[2]; - $('#'+my_id).toggle(); - });*/ + $('#'+my_id).show(); + }); $('.close_div').click(function() { var course_id = this.id.split('_')[2]; @@ -2658,7 +2685,8 @@ return 'application/octet-stream'; $('.lp_resource').remove(); }); "; - } else { + } else { + //For LPs $return .= "