Document: Fix sorting in dropdown directories list - refs #3620

pull/3893/head
Yannick Warnier 4 years ago
parent b7282bed8f
commit 080c2b07cd
  1. 51
      main/inc/lib/document.lib.php

@ -5068,6 +5068,7 @@ class DocumentManager
while ($obj = Database::fetch_object($res)) { while ($obj = Database::fetch_object($res)) {
$folder_titles[$obj->path] = $obj->title; $folder_titles[$obj->path] = $obj->title;
} }
natcasesort($folder_titles);
} }
if (empty($form)) { if (empty($form)) {
@ -5090,6 +5091,7 @@ class DocumentManager
$parent_select->addOption(get_lang('Documents'), '/'); $parent_select->addOption(get_lang('Documents'), '/');
if (is_array($folders)) { if (is_array($folders)) {
$foldersSortedByTitles = [];
foreach ($folders as $folder_id => &$folder) { foreach ($folders as $folder_id => &$folder) {
$selected = ($document_id == $folder_id) ? ' selected="selected"' : ''; $selected = ($document_id == $folder_id) ? ' selected="selected"' : '';
$path_parts = explode('/', $folder); $path_parts = explode('/', $folder);
@ -5101,14 +5103,25 @@ class DocumentManager
$label = ' — '.$folder_titles[$folder]; $label = ' — '.$folder_titles[$folder];
} }
$label = Security::remove_XSS($label); $label = Security::remove_XSS($label);
$parent_select->addOption($label, $folder_id); $foldersSortedByTitles[$folder_titles[$folder]] = [
if ($selected != '') { 'id' => $folder_id,
$parent_select->setSelected($folder_id); 'selected' => $selected,
'label' => $label
];
}
foreach ($folder_titles as $title) {
$parent_select->addOption(
$foldersSortedByTitles[$title]['label'],
$foldersSortedByTitles[$title]['id']
);
if ($foldersSortedByTitles[$title]['selected'] != '') {
$parent_select->setSelected($foldersSortedByTitles[$title]['id']);
} }
} }
} }
} else { } else {
if (!empty($folders)) { if (!empty($folders)) {
$foldersSortedByTitles = [];
foreach ($folders as $folder_id => &$folder) { foreach ($folders as $folder_id => &$folder) {
$selected = ($document_id == $folder_id) ? ' selected="selected"' : ''; $selected = ($document_id == $folder_id) ? ' selected="selected"' : '';
$label = $folder_titles[$folder]; $label = $folder_titles[$folder];
@ -5119,9 +5132,19 @@ class DocumentManager
$label = cut($label, 80); $label = cut($label, 80);
$label = str_repeat('   ', count($path_parts) - 2).' — '.$label; $label = str_repeat('   ', count($path_parts) - 2).' — '.$label;
} }
$parent_select->addOption($label, $folder_id); $foldersSortedByTitles[$folder_titles[$folder]] = [
if ($selected != '') { 'id' => $folder_id,
$parent_select->setSelected($folder_id); 'selected' => $selected,
'label' => $label
];
}
foreach ($folder_titles as $title) {
$parent_select->addOption(
$foldersSortedByTitles[$title]['label'],
$foldersSortedByTitles[$title]['id']
);
if ($foldersSortedByTitles[$title]['selected'] != '') {
$parent_select->setSelected($foldersSortedByTitles[$title]['id']);
} }
} }
} }
@ -7100,20 +7123,20 @@ class DocumentManager
$return = '<ul class="lp_resource">'; $return = '<ul class="lp_resource">';
} }
$return .= '<li $return .= '<li
class="doc_folder'.$folder_class_hidden.'" class="doc_folder'.$folder_class_hidden.'"
id="doc_id_'.$resource['id'].'" id="doc_id_'.$resource['id'].'"
style="margin-left:'.($num * 18).'px;" style="margin-left:'.($num * 18).'px;"
>'; >';
$image = Display::returnIconPath('nolines_plus.gif'); $image = Display::returnIconPath('nolines_plus.gif');
if (empty($path)) { if (empty($path)) {
$image = Display::returnIconPath('nolines_minus.gif'); $image = Display::returnIconPath('nolines_minus.gif');
} }
$return .= '<img $return .= '<img
style="cursor: pointer;" style="cursor: pointer;"
src="'.$image.'" src="'.$image.'"
align="absmiddle" align="absmiddle"
id="img_'.$resource['id'].'" '.$onclick.' id="img_'.$resource['id'].'" '.$onclick.'
>'; >';

Loading…
Cancel
Save