Documents: Fixing directory select

skala
Julio Montoya 15 years ago
parent 9809f37568
commit 0da8f89918
  1. 39
      main/document/document.inc.php
  2. 7
      main/document/document.php
  3. 7
      main/document/upload.php
  4. 28
      main/inc/lib/document.lib.php

@ -12,10 +12,12 @@
* @param string The current folder (path inside of the "document" directory, including the prefix "/")
* @param string Group directory, if empty, prevents documents to be uploaded (because group documents cannot be uploaded in root)
* @param boolean Whether to change the renderer (this will add a template <span> to the QuickForm object displaying the form)
* @todo this funcionality is really bad : jmontoya
* @return string html form
*/
function build_directory_selector($folders, $curdirpath, $group_dir = '', $change_renderer = false) {
function build_directory_selector($folders, $document_id, $group_dir = '', $change_renderer = false) {
$course_id = api_get_course_int_id();
$folder_titles = array();
if (api_get_setting('use_document_title') == 'true') {
if (is_array($folders)) {
@ -25,7 +27,7 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang
}
$folder_sql = implode("','", $escaped_folders);
$doc_table = Database::get_course_table(TABLE_DOCUMENT);
$sql = "SELECT * FROM $doc_table WHERE filetype='folder' AND path IN ('".$folder_sql."')";
$sql = "SELECT * FROM $doc_table WHERE filetype = 'folder' AND c_id = $course_id AND path IN ('".$folder_sql."')";
$res = Database::query($sql);
$folder_titles = array();
while ($obj = Database::fetch_object($res)) {
@ -39,11 +41,10 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang
}
}
}
require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php';
$form = new FormValidator('selector', 'POST', api_get_self());
$parent_select = $form->addElement('select', 'curdirpath', get_lang('CurrentDirectory'), '', 'onchange="javascript: document.selector.submit();"');
$form = new FormValidator('selector', 'GET', api_get_self().'?'.api_get_cidreq());
$form->addElement('hidden', 'cidReq', api_get_course_id());
$parent_select = $form->addElement('select', 'id', get_lang('CurrentDirectory'), '', 'onchange="javascript: document.selector.submit();"');
if ($change_renderer) {
$renderer = $form->defaultRenderer();
@ -53,21 +54,23 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang
// Group documents cannot be uploaded in the root
if (empty($group_dir)) {
$parent_select -> addOption(get_lang('Documents'), '/');
if (is_array($folders)) {
foreach ($folders as & $folder) {
$selected = ($curdirpath == $folder) ? ' selected="selected"' : '';
foreach ($folders as $folder_id => & $folder) {
$selected = ($document_id == $folder_id) ? ' selected="selected"' : '';
$path_parts = explode('/', $folder);
$folder_titles[$folder] = cut($folder_titles[$folder], 80);
$label = str_repeat('&nbsp;&nbsp;&nbsp;', count($path_parts) - 2).' &mdash; '.$folder_titles[$folder];
$parent_select -> addOption($label, $folder);
$parent_select -> addOption($label, $folder_id);
if ($selected != '') {
$parent_select->setSelected($folder);
$parent_select->setSelected($folder_id);
}
}
}
} else {
foreach ($folders as & $folder) {
$selected = ($curdirpath==$folder) ? ' selected="selected"' : '';
} else {
foreach ($folders as $folder_id => & $folder) {
$selected = ($document_id == $folder) ? ' selected="selected"' : '';
$label = $folder_titles[$folder];
if ($folder == $group_dir) {
$label = get_lang('Documents');
@ -76,15 +79,13 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang
$label = cut($label, 80);
$label = str_repeat('&nbsp;&nbsp;&nbsp;', count($path_parts) - 2).' &mdash; '.$label;
}
$parent_select -> addOption($label, $folder);
$parent_select -> addOption($label, $folder_id);
if ($selected != '') {
$parent_select->setSelected($folder);
$parent_select->setSelected($folder_id);
}
}
}
$form = $form->toHtml();
return $form;
}
@ -611,7 +612,7 @@ function build_edit_icons($document_data, $id, $is_template, $is_read_only = 0,
function build_move_to_selector($folders, $curdirpath, $move_file, $group_dir = '') {
$form = '<form name="move_to" action="'.api_get_self().'" method="post">';
$form = '<form name="move_to" action="'.api_get_self().'" method="POST">';
$form .= '<input type="hidden" name="move_file" value="'.$move_file.'" />';
$form .= '<div class="row">';

@ -63,6 +63,8 @@ $base_work_dir = $sys_course_path.$course_dir;
$http_www = api_get_path(WEB_COURSE_PATH).$_course['path'].'/document';
$dbl_click_id = 0; // Used for avoiding double-click
$selectcat = isset($_GET['selectcat']) ? Security::remove_XSS($_GET['selectcat']) : null;
/* Constants and variables */
$session_id = api_get_session_id();
$course_code = api_get_course_id();
@ -869,6 +871,7 @@ if (isset($_GET['keyword']) && !empty($_GET['keyword'])) {
}
$folders = DocumentManager::get_all_document_folders($_course, $to_group_id, $is_allowed_to_edit || $group_member_with_upload_rights);
if ($folders === false) {
$folders = array();
}
@ -1075,7 +1078,7 @@ if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_fold
// Create new certificate
if ($is_certificate_mode) {
?>
<a href="create_document.php?<?php echo api_get_cidreq(); ?>&id=<?php echo $document_id.$req_gid; ?>&certificate=true&<?php echo 'selectcat='.Security::remove_XSS($_GET['selectcat']); ?>">
<a href="create_document.php?<?php echo api_get_cidreq(); ?>&id=<?php echo $document_id.$req_gid; ?>&certificate=true&selectcat=<?php echo $selectcat; ?>">
<?php Display::display_icon('new_certificate.png', get_lang('CreateCertificate'),'','32'); ?></a>
<?php
}
@ -1117,7 +1120,7 @@ if ($image_present && !isset($_GET['keyword']) ) {
echo '</div>';
if (!$is_certificate_mode) {
echo build_directory_selector($folders, $curdirpath, (isset($group_properties['directory']) ? $group_properties['directory'] : array()), true);
echo build_directory_selector($folders, $document_id, (isset($group_properties['directory']) ? $group_properties['directory'] : array()), true);
}
if (($is_allowed_to_edit || $group_member_with_upload_rights) && count($docs_and_folders) > 1) {

@ -109,6 +109,9 @@ $courseDir = $_course['path'].'/document';
$sys_course_path = api_get_path(SYS_COURSE_PATH);
$base_work_dir = $sys_course_path.$courseDir;
$selectcat = isset($_GET['selectcat']) ? Security::remove_XSS($_GET['selectcat']) : null;
$document_data = DocumentManager::get_document_data_by_id($_REQUEST['id'], api_get_course_id(), true);
if (empty($document_data)) {
$document_id = $parent_id = 0;
@ -203,7 +206,7 @@ if (!empty($_FILES)) {
echo '<div class="actions">';
// Link back to the documents overview
if ($is_certificate_mode) {
echo '<a href="document.php?id='.$document_id.'&selectcat=' . Security::remove_XSS($_GET['selectcat']).'">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('CertificateOverview'),'','32').'</a>';
echo '<a href="document.php?id='.$document_id.'&selectcat=' . $selectcat.'">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('CertificateOverview'),'','32').'</a>';
} else {
echo '<a href="document.php?id='.$document_id.'">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('DocumentsOverview'),'','32').'</a>';
}
@ -218,7 +221,7 @@ echo '</div>';
// Form to select directory
$folders = DocumentManager::get_all_document_folders($_course, $to_group_id, $is_allowed_to_edit);
if (!$is_certificate_mode) {
echo build_directory_selector($folders, $path, $group_properties['directory']);
echo build_directory_selector($folders, $document_id, (isset($group_properties['directory']) ? $group_properties['directory'] : array()));
}
$form = new FormValidator('upload', 'POST', api_get_self(), '', 'enctype="multipart/form-data"');

@ -665,19 +665,20 @@ return 'application/octet-stream';
//condition for the session
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
$sql = "SELECT DISTINCT path FROM ".$TABLE_ITEMPROPERTY." AS last, ".$TABLE_DOCUMENT." AS docs
$sql = "SELECT DISTINCT docs.id, path FROM ".$TABLE_ITEMPROPERTY." AS last, ".$TABLE_DOCUMENT." AS docs
WHERE docs.id = last.ref AND
docs.filetype = 'folder' AND
last.tool = '".TOOL_DOCUMENT."' AND
last.to_group_id = ".$to_group_id." AND
last.visibility <> 2 $condition_session AND
last.c_id = {$_course['real_id']} AND
docs.c_id = {$_course['real_id']} ";
$result = Database::query($sql);
if ($result && Database::num_rows($result) != 0) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$document_folders[] = $row['path'];
$document_folders[$row['id']] = $row['path'];
}
//sort($document_folders);
natsort($document_folders);
@ -694,47 +695,54 @@ return 'application/octet-stream';
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
//get visible folders
$visible_sql = "SELECT DISTINCT path
$visible_sql = "SELECT DISTINCT docs.id, path
FROM ".$TABLE_ITEMPROPERTY." AS last, ".$TABLE_DOCUMENT." AS docs
WHERE docs.id = last.ref
AND docs.filetype = 'folder'
AND last.tool = '".TOOL_DOCUMENT."'
AND last.to_group_id = ".$to_group_id."
AND last.visibility = 1 $condition_session AND docs.c_id = {$_course['real_id']} ";
AND last.visibility = 1 $condition_session AND
last.c_id = {$_course['real_id']} AND
docs.c_id = {$_course['real_id']} ";
$visibleresult = Database::query($visible_sql);
while ($all_visible_folders = Database::fetch_array($visibleresult, 'ASSOC')) {
$visiblefolders[] = $all_visible_folders['path'];
$visiblefolders[$all_visible_folders['id']] = $all_visible_folders['path'];
}
//condition for the session
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
//get invisible folders
$invisible_sql = "SELECT DISTINCT path
$invisible_sql = "SELECT DISTINCT docs.id, path
FROM ".$TABLE_ITEMPROPERTY." AS last, ".$TABLE_DOCUMENT." AS docs
WHERE docs.id = last.ref
AND docs.filetype = 'folder'
AND last.tool = '".TOOL_DOCUMENT."'
AND last.to_group_id = ".$to_group_id."
AND last.visibility = 0 $condition_session AND docs.c_id = {$_course['real_id']} ";
AND last.visibility = 0 $condition_session AND
last.c_id = {$_course['real_id']} AND
docs.c_id = {$_course['real_id']} ";
$invisibleresult = Database::query($invisible_sql);
while ($invisible_folders = Database::fetch_array($invisibleresult, 'ASSOC')) {
//condition for the session
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
//get visible folders in the invisible ones -> they are invisible too
$folder_in_invisible_sql = "SELECT DISTINCT path
$folder_in_invisible_sql = "SELECT DISTINCT docs.id, path
FROM ".$TABLE_ITEMPROPERTY." AS last, ".$TABLE_DOCUMENT." AS docs
WHERE docs.id = last.ref
AND docs.path LIKE '".Database::escape_string($invisible_folders['path'])."/%'
AND docs.filetype = 'folder'
AND last.tool = '".TOOL_DOCUMENT."'
AND last.to_group_id = ".$to_group_id."
AND last.visibility = 1 $condition_session AND docs.c_id = {$_course['real_id']} ";
AND last.visibility = 1 $condition_session AND
last.c_id = {$_course['real_id']} AND
docs.c_id = {$_course['real_id']} ";
$folder_in_invisible_result = Database::query($folder_in_invisible_sql);
while ($folders_in_invisible_folder = Database::fetch_array($folder_in_invisible_result, 'ASSOC')) {
$invisiblefolders[] = $folders_in_invisible_folder['path'];
$invisiblefolders[$folders_in_invisible_folder['id']] = $folders_in_invisible_folder['path'];
}
}
//if both results are arrays -> //calculate the difference between the 2 arrays -> only visible folders are left :)
if (is_array($visiblefolders) && is_array($invisiblefolders)) {
$document_folders = array_diff($visiblefolders, $invisiblefolders);

Loading…
Cancel
Save