--- loncom/interface/londocs.pm	2010/12/07 17:33:36	1.443
+++ loncom/interface/londocs.pm	2011/01/30 01:21:29	1.452
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.443 2010/12/07 17:33:36 www Exp $
+# $Id: londocs.pm,v 1.452 2011/01/30 01:21:29 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1150,6 +1150,7 @@ sub docs_change_log {
     &Apache::loncommon::restore_course_settings('docs_log',
                                                 \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }
+# FIXME: internationalization seems wrong here
     my %lt=('hiddenresource' => 'Resources hidden',
 	    'encrypturl'     => 'URL hidden',
 	    'randompick'     => 'Randomly pick',
@@ -1238,6 +1239,7 @@ sub docs_change_log {
 	    $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
 	    foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
 		if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
+# FIXME: internationalization seems wrong here
 		    $r->print('<li>'.
 			      &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
 				  $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
@@ -1521,12 +1523,11 @@ sub editor {
         $LONCAPA::map::resources[$idx]='';
     }
 
-    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order);
-    if ($allowed) {
-        ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
+    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
 	    &breadcrumbs($allowed,$crstype);
         $r->print($breadcrumbtrail);
-    } else {
+
+    unless ($allowed) {
         $randompick = -1;
     }
 
@@ -1653,7 +1654,8 @@ sub editor {
     &Apache::loncommon::end_data_table_count();
     
     if ($shown) {
-        $r->print(&Apache::loncommon::start_data_table());
+        $r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px')
+                 .&Apache::loncommon::start_data_table());
         if ($allowed) {
             $r->print(&Apache::loncommon::start_data_table_header_row()
                      .'<th colspan="2">'.&mt('Move').'</th>'
@@ -1666,6 +1668,7 @@ sub editor {
         }
         $r->print($output
                  .&Apache::loncommon::end_data_table()
+                 .&Apache::loncommon::end_scrollbox()
         );
     } else {
         $r->print('<p class="LC_info">'
@@ -2636,33 +2639,20 @@ sub startContentScreen {
     $r->print('<li'.(($mode eq 'navmaps')?' class="active"':'').'><a href="/adm/navmaps"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Overview').'&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
 
     my $active = '';
-# does this user have privileges to modify docs
+# does this user have privileges to modify docs?
     my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
 
     my $onclick;
     my $href;
 
     if ($allowed) {
-#        if (($mode eq 'navmaps') || ($mode eq 'tools')) {
-           $href="/adm/coursedocs?forcestandard=1";
-           $onclick=''; 
-#        } else {
-#           $href='#';
-#           $onclick=' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"';
-#        }
-        $r->print('<li '.(($mode eq 'docs')?' class="active"':'').$onclick.
-               '><a href="'.$href.'"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Editor').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
-    }
-#    if (($mode eq 'navmaps') || ($mode eq 'tools')) {
-       $href="/adm/coursedocs?forcesupplement=1";
-       $onclick='';
-#    } else {
-#       $href='#';
-#       $onclick=' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"';
-#   }
-
-    $r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').$onclick.
-           '><a href="'.$href.'"><b>'.&mt('Supplemental Documents').'</b></a></li>');
+        $r->print('<li '.(($mode eq 'docs')?' class="active"':'').
+               '><a href="/adm/coursedocs?forcestandard=1"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Editor').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    }
+    $r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Search').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    $r->print('<li'.(($mode eq 'courseindex')?' class="active"':'').'><a href="/adm/indexcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Index').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    $r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').
+           '><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');
     $r->print('</ul>');
     $r->print('<div class="LC_Box" style="clear:both;margin:0;">'
              .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
@@ -2678,6 +2668,10 @@ sub endContentScreen {
    $r->print('</div></div></div>');
 }
 
+sub supplemental_base {
+    return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Documents'));
+}
+
 sub handler {
     my $r = shift;
     &Apache::loncommon::content_type($r,'text/html');
@@ -2730,45 +2724,83 @@ sub handler {
       &init_breadcrumbs('exportcourse','IMS Export');
       &exportcourse($r);
   } else {
-# is this a standard course?
+#
+# Done catching special calls
+# The whole rest is for course and supplemental documents
+# Get the parameters that may be needed
+#
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['folderpath','pagepath',
+                                             'pagesymb','forcesupplement','forcestandard']);
+
+# standard=1: this is a "new-style" course with an uploaded map as top level
+# standard=2: this is a "old-style" course, and there is nothing we can do
 
     my $standard=($env{'request.course.uri'}=~/^\/uploaded\//);
-    my $forcestandard = 0;
-    my $forcesupplement;
+
+# Decide whether this should display supplemental or main content
+# supplementalflag=1: show supplemental documents
+# supplementalflag=0: show standard documents
+
+
+    my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
+    if (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'} eq "" || ($env{'form.pagepath'})) {
+       $supplementalflag=0;
+    }
+    if ($env{'form.forcesupplement'}) { $supplementalflag=1; }
+    if ($env{'form.forcestandard'})   { $supplementalflag=0; }
+    unless ($allowed) { $supplementalflag=1; }
+    unless ($standard) { $supplementalflag=1; }
+
     my $script='';
     my $showdoc=0;
     my $containertag;
     my $uploadtag;
 
-
-    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-					    ['folderpath','pagepath',
-					     'pagesymb','forcesupplement','forcestandard']);
+# Where do we store these for when we come back?
+    my $stored_folderpath='docs_folderpath';
+    if ($supplementalflag) {
+       $stored_folderpath='docs_sup_folderpath';
+    }
+       
 # No folderpath, no pagepath, see if we have something stored
     if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {
-        &Apache::loncommon::restore_course_settings('docs_folderpath',
+        &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'folderpath' => 'scalar'});
     }
+   
+# If we are not allowed to make changes, all we can see are supplemental docs
     if (!$allowed) {
-        unless($env{'form.folderpath'} =~ /^supplemental/) {
-            $env{'form.folderpath'} = '';
+        $env{'form.pagepath'}='';
+        unless ($env{'form.folderpath'} =~ /^supplemental/) {
+            $env{'form.folderpath'} = &supplemental_base();
         }
     }
+# If we still not have a folderpath, see if we can resurrect at pagepath
     if (!$env{'form.folderpath'} && $allowed) {
-        &Apache::loncommon::restore_course_settings('docs_folderpath',
+        &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'pagepath' => 'scalar'});
     }
-    if ($env{'form.pagepath'}) {
-       $env{'form.folderpath'}='';
-    }
+# Make the zeroth entry in supplemental docs page paths, so we can get to top level
     if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {
-        $env{'form.folderpath'} = 'supplemental&'.
-                                  &escape(&mt('Supplemental '.$crstype.' Documents')).'&'.
+        $env{'form.folderpath'} = &supplemental_base()
+                                  .'&'.
                                   $env{'form.folderpath'};
     }
-    &Apache::loncommon::store_course_settings('docs_folderpath',
+# If after all of this, we still don't have any paths, make them
+    unless (($env{'form.pagepath'}) || ($env{'form.folderpath'})) {
+       if ($supplementalflag) {
+          $env{'form.folderpath'}=&supplemental_base();
+       } else {
+          $env{'form.folderpath'}='default';
+       }
+    } 
+
+# Store this
+    &Apache::loncommon::store_course_settings($stored_folderpath,
                                                 {'pagepath' => 'scalar',
                                                  'folderpath' => 'scalar'});
+
     if ($env{'form.folderpath'}) {
 	my (@folderpath)=split('&',$env{'form.folderpath'});
 	$env{'form.foldername'}=&unescape(pop(@folderpath));
@@ -2802,12 +2834,6 @@ sub handler {
     if ($showdoc) { # got called in sequence from course
 	$allowed=0; 
     } else {
-       if (($env{'form.folder'}=~/^(?:group|default)_/) ||
-          ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
-           $forcestandard = 1;
-       }
-       $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
-
        if ($allowed) {
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');
@@ -2839,29 +2865,20 @@ sub handler {
 
     # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();
-    if ($allowed) {
+    unless ($showdoc) {
         &Apache::lonhtmlcommon::add_breadcrumb({
-            href=>"/adm/coursedocs",text=>"$crstype Editor"});
+            href=>"/adm/coursedocs",text=>"$crstype Contents"});
 
-        $r->print(&Apache::loncommon::start_page("$crstype Editor", $script,
+        $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
                                                  {'force_register' => $showdoc,})
                  .&Apache::loncommon::help_open_menu('','',273,'RAT')
                  .&Apache::lonhtmlcommon::breadcrumbs(
                      'Editing the Table of Contents for your '.$crstype,
                      'Docs_Adding_Course_Doc')
         );
-    } elsif ($showdoc) {
+    } else {
         $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
                                                 {'force_register' => $showdoc,}));
-    } else {
-        my $folder=$env{'form.folder'};
-        if ($folder eq '' || $folder eq 'supplemental') {
-            $env{'form.folderpath'} = 'supplemental&'.
-                                      &escape(&mt('Supplemental '.$crstype.' Documents'));
-        }
-        my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
-        $r->print(&Apache::loncommon::start_page("Supplemental documents").
-                  $breadcrumbtrail);
     }
 
   my %allfiles = ();
@@ -2930,7 +2947,7 @@ sub handler {
                 'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',
-                'scuf' => 'Score Upload Form',
+                'scuf' => 'External Scores (handgrade, upload, clicker)',
                 'bull' => 'Discussion Board',
                 'mypi' => 'My Personal Information Page',
                 'grpo' => 'Group Portfolio',
@@ -2977,8 +2994,6 @@ CHBO
 	$checkbox
 	</span>
 FUFORM
-    #$list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});	
-    #$fileuploadform .= create_form_ul(create_list_elements(@fileuploada));
     $fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>';
 
 	my $simpleeditdefaultform=(<<SEDFFORM);
@@ -3037,18 +3052,6 @@ ERFORM
 HIDDENFORM
     }
 
-#
-# Decide whether this should display supplemental or main content
-# supplementalflag=1: show supplemental documents
-# supplementalflag=0: show standard documents
-
-    my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
-    if (($standard) && ($allowed) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'} eq "" || ($env{'form.pagepath'}))) {
-       $supplementalflag=0;
-    }
-    if ($env{'form.forcesupplement'}) { $supplementalflag=1; }
-    if ($env{'form.forcestandard'})   { $supplementalflag=0; }
-
 # Generate the tabs
     &startContentScreen($r,($supplementalflag?'supdocs':'docs'));
 
@@ -3196,11 +3199,14 @@ NROSTFORM
 
 my $specialdocumentsform;
 my @specialdocumentsforma;
+my $gradingform;
+my @gradingforma;
+my $communityform;
+my @communityforma;
 my $newfolderform;
 my $newfolderb;
 
-       unless ($env{'form.pagepath'}) {
-	   my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
+	my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
 	
 	my $newpageform=(<<NPFORM);
 	<form action="/adm/coursedocs" method="post" name="newpage">
@@ -3247,35 +3253,35 @@ NGFFORM
 	@specialdocumentsforma=(
 	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'"  onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform},
 	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
-	);
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},
+        );
+        $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
+
 
         my @importdoc = (
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform},
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);
         $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;
 
-	push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);
+        @gradingforma=(
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
+
+        );
+        $gradingform = &create_form_ul(&create_list_elements(@gradingforma));
+
+        @communityforma=(
+       {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
+        );
+        $communityform = &create_form_ul(&create_list_elements(@communityforma));
 
-	$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
-      }
 
-if($env{'form.pagepath'}) {
-	
-	@specialdocumentsforma=(
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}
-	);
-	$specialdocumentsform= &create_form_ul(&create_list_elements(@specialdocumentsforma));
-}
 
 my @tools = (
 #	{'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},
@@ -3286,11 +3292,13 @@ my @tools = (
 my %orderhash = (
                 'aa' => ['Import Documents',$fileuploadform],
                 'bb' => ['Published Resources',$simpleeditdefaultform],
-                'cc' => ['Special Documents',$specialdocumentsform],
-		'dd' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
+                'cc' => ['Grading Resources',$gradingform],
+		'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );
-unless($env{'form.pagepath'}) {
+unless ($env{'form.pagepath'}) {
     $orderhash{'00'} = ['Newfolder',$newfolderform];
+    $orderhash{'dd'} = ['Community Resources',$communityform];
+    $orderhash{'ee'} = ['Special Documents',$specialdocumentsform];
 }
 
  $hadchanges=0;
@@ -3317,8 +3325,7 @@ unless($env{'form.pagepath'}) {
        }
        if ($folder =~ /^supplemental$/ &&
 	   (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {
-          $env{'form.folderpath'} = 'supplemental&'.
-                                    &escape(&mt('Supplemental '.$crstype.' Documents'));
+          $env{'form.folderpath'} = &supplemental_base();
        } elsif ($allowed) {
 	  $env{'form.folderpath'} = $savefolderpath;
        }
@@ -3572,7 +3579,7 @@ sub editing_js {
                                           t_mnf => 'New Folder',
                                           p_mnp => 'Name of New Page',
                                           t_mnp => 'New Page',
-                                          p_mxu => 'Title for the Uploaded Score',
+                                          p_mxu => 'Title for the External Score',
                                           p_msp => 'Name of Simple Course Page',
                                           p_msb => 'Title for the Problem',
                                           p_mdb => 'Title for the Drop Box',
@@ -3601,7 +3608,7 @@ sub editing_js {
         }
     }
     my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents';
-    my $toplevelsupp = 'supplemental&Supplemental%20'.$crstype.'%20Documents';
+    my $toplevelsupp = &supplemental_base();
 
     return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {