Some fixes when viewing documents when using sessions + fixing "page jump to top when clicking in a javascript link" see BT#2733

skala
Julio Montoya 15 years ago
parent 9b34553c11
commit 023abe30b0
  1. 19
      main/document/document.inc.php
  2. 20
      main/document/document.php
  3. 10
      main/inc/lib/course.lib.php
  4. 94
      main/inc/lib/document.lib.php
  5. 3
      main/inc/lib/main_api.lib.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 '<a href="'.$url.'" class="yoxview" title="'.$tooltip_title_alt.'" target="yoxview" style="float:left" '.$visibility_class.'>'.$title.'</a>'.$force_download_html.$copy_to_myfiles.$open_in_new_window_link.$pdf_icon;
$class = 'yoxview';
if ($visibility == false) {
$class = "yoxview invisible";
}
return '<a href="'.$url.'" class="'.$class.'" title="'.$tooltip_title_alt.'" target="yoxview" style="float:left">'.$title.'</a>'.$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));

@ -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) ? '<span class="invisible">' : '';
$invisibility_span_close = ($document_data['visibility'] == 0) ? '</span>' : '';
$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) ? '<span class="invisible">' : '';
$invisibility_span_close = ($is_visible == 0) ? '</span>' : '';
// 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.'<br />'.$invisibility_span_open.'<i>'.nl2br(htmlspecialchars($document_data['comment'],ENT_QUOTES,$charset)).'</i>'.$invisibility_span_close.$user_link;
// Document title with link
$row[] = create_document_link($document_data, false, null, $is_visible).$session_img.'<br />'.$invisibility_span_open.'<i>'.nl2br(htmlspecialchars($document_data['comment'],ENT_QUOTES,$charset)).'</i>'.$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;
}

@ -2583,7 +2583,7 @@ class CourseManager {
echo '<div style="float:right;">';
if ($load_dirs) {
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="#">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="javascript:void();">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a href="'.api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course['code'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a>';
echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container'));
} else {
@ -2597,7 +2597,7 @@ class CourseManager {
} else {
echo '<div style="float:right;">';
if ($load_dirs) {
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="#">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="javascript:void();">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container'));
}
echo '</div>';
@ -2741,7 +2741,7 @@ class CourseManager {
echo '<div style="float:right;">';
if ($load_dirs) {
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="#">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="javascript:void();">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a href="'.api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course['code'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'),22).'</a>';
echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container'));
} else {
@ -2755,7 +2755,7 @@ class CourseManager {
} else {
echo '<div style="float:right;">';
if ($load_dirs) {
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="#">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo '<a id="document_preview_'.$course['id'].'_0" class="document_preview" href="javascript:void();">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
echo Display::div('', array('id' => 'document_result_'.$course['id'].'_0', 'class'=>'document_preview_container'));
}
echo '</div>';
@ -3002,7 +3002,7 @@ class CourseManager {
if ($load_dirs) {
$result .= '<div style="float:right;">';
$result .= '<a id="document_preview_'.$info['real_id'].'_'.$my_course['id_session'].'" class="document_preview" href="#">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
$result .= '<a id="document_preview_'.$info['real_id'].'_'.$my_course['id_session'].'" class="document_preview" href="javascript:void();">'.Display::return_icon('folder.png', get_lang('Documents'), array('align' => 'absmiddle'),22).'</a>';
$result .= Display::div('', array('id' => 'document_result_'.$info['real_id'].'_'.$my_course['id_session'], 'class'=>'document_preview_container'));
$result .= '</div>';
}

@ -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 .= '</div>';
} 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();
});
</script>";
} else {
} else {
//For LPs
$return .= "<script>
function testResources(id, img) {

@ -2712,12 +2712,13 @@ function api_get_item_property_info($course_id, $tool, $ref, $session_id = 0) {
$ref = intval($ref);
// Definition of tables.
$TABLE_ITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
$TABLE_ITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY, $course_info['dbName']);
$sql = "SELECT * FROM $TABLE_ITEMPROPERTY WHERE tool = '$tool' AND ref = $ref ";
if (!empty($session_id)) {
$session_id = intval($session_id);
$sql .= "AND id_session = $session_id ";
}
$rs = Database::query($sql);
$row = array();
if (Database::num_rows($rs) > 0) {

Loading…
Cancel
Save