--- loncom/publisher/lonpubdir.pm	2014/07/31 19:25:39	1.159
+++ loncom/publisher/lonpubdir.pm	2017/04/02 21:58:53	1.160.2.3
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Authoring Space Directory Lister
 #
-# $Id: lonpubdir.pm,v 1.159 2014/07/31 19:25:39 musolffc Exp $
+# $Id: lonpubdir.pm,v 1.160.2.3 2017/04/02 21:58:53 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -115,6 +115,16 @@ sub handler {
     my $numdir = 0;
     my $numres = 0;
   
+    if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) {
+        if ($thisdisfn =~ m{^/$match_domain/$match_username$}) {
+            $r->print('<p class="LC_info">'.&mt('This Authoring Space is currently empty.').'</p>');
+        } else {
+            $r->print('<p class="LC_info">'.&mt('This subdirectory is currently empty.').'</p>');
+        }
+        $r->print(&Apache::loncommon::end_page());
+        return OK;
+    }
+
     # Retrieving value for "sortby" and "sortorder" from QUERY_STRING
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
         ['sortby','sortorder']);
@@ -122,48 +132,68 @@ sub handler {
     # Sort by name as default, not reversed
     if (! exists($env{'form.sortby'})) { $env{'form.sortby'} = 'filename' }
     if (! exists($env{'form.sortorder'})) { $env{'form.sortorder'} = '' }
-
     my $sortby = $env{'form.sortby'};
     my $sortorder = $env{'form.sortorder'};
 
-    if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) {
-        if ($thisdisfn =~ m{^/$match_domain/$match_username$}) {
-            $r->print('<p class="LC_info">'.&mt('This Authoring Space is currently empty.').'</p>');
-        } else {
-            $r->print('<p class="LC_info">'.&mt('This subdirectory is currently empty.').'</p>');
-        }
-        $r->print(&Apache::loncommon::end_page());
-        return OK;
+    # Order in which columns are displayed from left to right
+    my @order = ('filetype','actions','filename','title',
+                    'pubstatus','cmtime','size');
+
+    # Up and down arrows to indicate sort order
+    my @arrows = ('&nbsp;&#9650;','&nbsp;&#9660;','');
+
+    # Default sort order and column title
+    my %columns = (
+        filetype =>     {
+                            order => 'ascending',
+                            text  => &mt('Type'),
+                        },
+        actions =>      {
+                            # Not sortable
+                            text  => &mt('Actions'),
+                        },
+        filename =>     {
+                            order => 'ascending',
+                            text  => &mt('Name'),
+                        },
+        title =>        {
+                            order => 'ascending',
+                            text  => &mt('Title'),
+                        },
+        pubstatus =>    {
+                            order => 'ascending',
+                            text  => &mt('Status'),
+                            colspan => '2',
+                        },
+        cmtime =>       {
+                            order => 'descending',
+                            text  => &mt('Last Modified'),
+                        },
+        size =>         {
+                            order => 'ascending',
+                            text  => &mt('Size').' (kB)',
+                        },
+    ); 
+
+    # Print column headers
+    my $output = '';
+    foreach my $key (@order) {
+        my $idx;
+        # Append an up or down arrow to sorted column
+        if ($sortby eq $key) {
+            $idx = ($columns{$key}{order} eq 'ascending') ? 0:1;
+            if ($sortorder eq 'rev') { $idx ++; }
+            $idx = $idx%2;
+        } else { $idx = 2; } # No arrow if column is not sorted
+        $output .= (($columns{$key}{order}) ?
+            '<th'.($columns{$key}{colspan} ? ' colspan="'.$columns{$key}{colspan}.'"' : '')
+            .'><a href="'.$linkdir.'/?sortby='.$key.'&sortorder='
+            .((($sortby eq $key) && ($sortorder ne 'rev')) ? 'rev' : '').'">'
+            .$columns{$key}{text}.$arrows[$idx].'</a></th>' :
+            '<th>'.$columns{$key}{text}.'</th>');
     }
-
-    # Start off the directory table.
     $r->print(&Apache::loncommon::start_data_table()
-        .&Apache::loncommon::start_data_table_header_row()
-        .'<th><a href="'.$linkdir.'/?sortby=filetype&sortorder='
-            .((($sortby eq "filetype") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Type')
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
-        .'<th>'.&mt('Actions').'</th>'
-        .'<th><a href="'.$linkdir.'/?sortby=filename&sortorder='
-            .((($sortby eq "filename") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Name')
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
-        .'<th><a href="'.$linkdir.'/?sortby=title&sortorder='
-            .((($sortby eq "title") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Title')
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
-        .'<th colspan="2"><a href="'.$linkdir.'/?sortby=pubstatus&sortorder='
-            .((($sortby eq "pubstatus") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Status')
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
-        .'<th><a href="'.$linkdir.'/?sortby=cmtime&sortorder='
-            .((($sortby eq "cmtime") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Last Modified')
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
-        .'<th><a href="'.$linkdir.'/?sortby=size&sortorder='
-            .((($sortby eq "size") && ($sortorder ne 'rev')) ? 'rev' : '') 
-            .'">'.&mt('Size').' (kB)'
-            .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
+        .&Apache::loncommon::start_data_table_header_row() . $output
         .&Apache::loncommon::end_data_table_header_row()
     );
 
@@ -314,7 +344,8 @@ sub startpage {
 
     $r->print(&Apache::loncommon::head_subbox(
                      '<div style="float:right;padding-top:0;margin-top;0">'
-                    .&Apache::lonhtmlcommon::display_usage($current_disk_usage,$disk_quota)
+                    .&Apache::lonhtmlcommon::display_usage($current_disk_usage,
+                                                           $disk_quota,'authoring')
                     .'</div>'
                     .&Apache::loncommon::CSTR_pageheader()));
 
@@ -493,7 +524,7 @@ sub dircontrols {
     </form>
   </div>
 
-  <div>
+  <div style="padding-bottom: 2px">
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">
       <fieldset>
         <legend>$lt{'updc'}</legend>
@@ -532,7 +563,44 @@ sub dircontrols {
                     <option value="newtaskfile">$lt{'nbt'}:</option>
                     <option value="newlibraryfile">$lt{'nlib'}:</option>
 	            <option value="newdir">$lt{'nsub'}:</option>
-		  </select>&nbsp;<input type="text" name="newfilename" value="$lt{'type'}" onfocus="if (this.value == '$mytype') this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />
+		  </select>&nbsp;<input type="text" name="newfilename" placeholder="$lt{'type'}" value="" onfocus="if (this.value == is.empty()) this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />
+                <br />
+                <span>Quickactions:
+                 <input type="hidden" name="mode"/>
+                 <a href="javascript:void(0)" onclick="javascript:validate_action('blank')">
+                    <img src="/adm/lonIcons/unknown.gif" title="Create blank problem file"></a>
+                 <a href="javascript:void(0)" onclick="javascript:validate_action('problemtempl')">
+                    <img src="/adm/lonIcons/problem.gif" title="Create new problem from template"></a>
+                 <a href="javascript:void(0)" onclick="javascript:validate_action('blankhtml')">
+                    <img src="/adm/lonIcons/html.gif" title="Create new blank HTML file"></a>
+                 <a href="javascript:void(0)" onclick="javascript:validate_action('folder')">
+                    <img src="/adm/lonIcons/navmap.folder.closed.gif" title="Create new subdirectory"></a>
+                </span>
+                 <script type="text/javascript">
+                     function validate_action(action){
+
+                         if (document.getElementsByName(\'newfilename\')[0].value != \'\'){
+                             if (action == "blank") {
+                                                                 document.fileaction.action.value=\'newproblemfile\';
+                                                                 document.fileaction.mode.value=\'blank\';
+                                                         } else if (action == "problemtempl") {
+                                                                 document.fileaction.action.value=\'newproblemfile\';
+                                 validate_go();
+                             } else if (action == "blankhtml") {
+                                 document.fileaction.action.value=\'newhtmlfile\';
+                                 validate_go();
+                             } else if (action == "folder") {
+                                 document.fileaction.action.value=\'newdir\';
+                                 document.fileaction.mode.value=\'folder\';
+                             }
+                             fileaction.submit();
+                         } else {
+                             alert(\'Please specify file name.\');
+                             // TODO: ask for filename? if so, do some refactoring
+
+                         }
+                     }
+                 </script>
 		 </span>
       </fieldset>
     </form>