summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inc/lang/en/lang.php2
-rw-r--r--inc/media.php23
-rw-r--r--inc/search.php10
-rw-r--r--lib/scripts/media.js19
4 files changed, 45 insertions, 9 deletions
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index b9d4bf2a3..2435f9771 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -336,6 +336,8 @@ $lang['media_historytab'] = 'History';
$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 <strong>%s</strong> namespace.';
$lang['media_search'] = 'Search in the <strong>%s</strong> namespace.';
$lang['media_edit'] = 'Edit';
diff --git a/inc/media.php b/inc/media.php
index 43a3a07ca..a249e9b54 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 '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
@@ -614,7 +614,7 @@ function media_tabs_details($image, $selected=false){
*
* @author Kate Arzamastseva <pshns@ukr.net>
*/
-function media_tab_files_options($ns){
+function media_tab_files_options($ns, $sort){
global $lang;
echo '<div class="background-container">';
@@ -633,7 +633,16 @@ function media_tab_files_options($ns){
echo '</div>';
echo '<div id="mediamanager__sort">';
- 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 '</div>';
echo '<div class="clearer"></div>';
@@ -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 '<div class="scroll-container" >';
$view = $_REQUEST['view'];
+
if($auth < AUTH_READ){
echo '<div class="nothing">'.$lang['media_perm_read'].'</div>'.NL;
}else{
@@ -661,7 +672,7 @@ function media_tab_files($ns,$auth=null,$jump='') {
} else {
echo '<ul class="mediamanager-thumbs" id="mediamanager__file_list">';
}
- media_filelist($ns,$auth,$jump,true);
+ media_filelist($ns,$auth,$jump,true,$sort);
echo '</ul>';
}
echo '</div>';
diff --git a/inc/search.php b/inc/search.php
index 7b53edabe..c11111efc 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -21,9 +21,10 @@ if(!defined('DOKU_INC')) die('meh.');
* @param int $lvl Recursion Level
* @author Andreas Gohr <andi@splitbrain.org>
*/
-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 a6f6c25d4..44928417f 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