From abc306f45f2ace038967bf7c51abd6ea53f56170 Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Mon, 25 Jul 2011 16:23:24 +0300 Subject: [PATCH] mediamanager sort button --- inc/lang/en/lang.php | 2 ++ inc/media.php | 23 +++++++++++++++++------ inc/search.php | 10 ++++++++-- lib/scripts/media.js | 19 ++++++++++++++++++- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index b9d4bf2a37..2435f9771f 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -336,6 +336,8 @@ $lang['media_thumbsview'] = 'Thumbnails'; $lang['media_listview'] = 'List'; $lang['media_sort'] = 'Sort'; +$lang['media_sort_name'] = 'by name'; +$lang['media_sort_date'] = 'by date'; $lang['media_upload'] = 'Upload to the %s namespace.'; $lang['media_search'] = 'Search in the %s namespace.'; $lang['media_edit'] = 'Edit'; diff --git a/inc/media.php b/inc/media.php index 43a3a07cae..a249e9b547 100644 --- a/inc/media.php +++ b/inc/media.php @@ -521,7 +521,7 @@ function media_notify($id,$file,$mime,$old_rev=false){ /** * List all files in a given Media namespace */ -function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false){ +function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false,$sort=false){ global $conf; global $lang; $ns = cleanID($ns); @@ -540,7 +540,7 @@ function media_filelist($ns,$auth=null,$jump='',$fullscreenview=false){ $dir = utf8_encodeFN(str_replace(':','/',$ns)); $data = array(); search($data,$conf['mediadir'],'search_media', - array('showmsg'=>true,'depth'=>1),$dir); + array('showmsg'=>true,'depth'=>1),$dir,1,$sort); if(!count($data)){ echo '
'.$lang['nothingfound'].'
'.NL; @@ -614,7 +614,7 @@ function media_tabs_details($image, $selected=false){ * * @author Kate Arzamastseva */ -function media_tab_files_options($ns){ +function media_tab_files_options($ns, $sort){ global $lang; echo '
'; @@ -633,7 +633,16 @@ function media_tab_files_options($ns){ echo '
'; echo '
'; - echo $lang['media_sort']; + $form = new Doku_Form(array('action'=>media_managerURL(array(), '&'), 'id' => 'mediamanager__form_sort')); + $form->addElement(form_makeListboxField( + 'sort', + array( + 'name' => $lang['media_sort_name'], + 'date' => $lang['media_sort_date']), + $sort, + $lang['media_sort'])); + $form->addElement(form_makeButton('submit', '', $lang['btn_apply'])); + $form->printForm(); echo '
'; echo '
'; @@ -649,10 +658,12 @@ function media_tab_files($ns,$auth=null,$jump='') { global $lang; if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*"); - media_tab_files_options($ns); + $sort = $_REQUEST['sort']; + media_tab_files_options($ns, $sort); echo '
'; $view = $_REQUEST['view']; + if($auth < AUTH_READ){ echo '
'.$lang['media_perm_read'].'
'.NL; }else{ @@ -661,7 +672,7 @@ function media_tab_files($ns,$auth=null,$jump='') { } else { echo '
    '; } - media_filelist($ns,$auth,$jump,true); + media_filelist($ns,$auth,$jump,true,$sort); echo '
'; } echo '
'; diff --git a/inc/search.php b/inc/search.php index 7b53edabe7..c11111efcb 100644 --- a/inc/search.php +++ b/inc/search.php @@ -21,9 +21,10 @@ * @param int $lvl Recursion Level * @author Andreas Gohr */ -function search(&$data,$base,$func,$opts,$dir='',$lvl=1){ +function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort=false){ $dirs = array(); $files = array(); + $filepaths = array(); //read in directories and files $dh = @opendir($base.'/'.$dir); @@ -35,9 +36,14 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1){ continue; } $files[] = $dir.'/'.$file; + $filepaths[] = $base.'/'.$dir.'/'.$file; } closedir($dh); - sort($files); + if ($sort == 'date') { + @array_multisort(array_map('filemtime', $filepaths), SORT_NUMERIC, SORT_ASC, $files); + } else { + sort($files); + } sort($dirs); //give directories to userfunction then recurse diff --git a/lib/scripts/media.js b/lib/scripts/media.js index a6f6c25d4a..44928417f1 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -60,18 +60,33 @@ var dw_mediamanager = { }}); $tree.delegate('a', 'click', dw_mediamanager.list); + jQuery('#mediamanager__form_sort').find('input[type=submit]').hide(); + + // changing opened tab in the file list panel jQuery('#mediamanager__layout_list').delegate('#mediamanager__tabs_files a', 'click', dw_mediamanager.list) + // changing type of the file list view .delegate('#mediamanager__tabs_list a', 'click', dw_mediamanager.list_view) + // loading file details .delegate('#mediamanager__file_list a', 'click', dw_mediamanager.details) + // search form .delegate('#dw__mediasearch', 'submit', dw_mediamanager.list) - .delegate('#upload__file', 'change', dw_mediamanager.suggest); + // "upload as" field autofill + .delegate('#upload__file', 'change', dw_mediamanager.suggest) + // sort type selection + .delegate('#mediamanager__form_sort select', 'change', dw_mediamanager.list); + // changing opened tab in the file details panel jQuery('#mediamanager__layout_detail').delegate('#mediamanager__tabs_details a', 'click', dw_mediamanager.details) + // "update new version" button .delegate('#mediamanager__btn_update', 'submit', dw_mediamanager.list) + // revisions form .delegate('#page__revisions', 'submit', dw_mediamanager.details) .delegate('#page__revisions a', 'click', dw_mediamanager.details) + // meta edit form .delegate('#mediamanager__save_meta', 'submit', dw_mediamanager.details) + // delete button .delegate('#mediamanager__btn_delete', 'submit', dw_mediamanager.details) + // "restore this version" button .delegate('#mediamanager__btn_restore', 'submit', dw_mediamanager.details); }, @@ -270,6 +285,8 @@ var dw_mediamanager = { params = $link[0].search.substr(1)+'&call=medialist'; } else if ($link[0].action) { params = dw_mediamanager.form_params($link)+'&call=medialist'; + } else if ($link.parents('form')) { + params = dw_mediamanager.form_params($link.parents('form'))+'&call=medialist'; } // fetch the subtree