Diff for /loncom/interface/londocs.pm between versions 1.411.2.5 and 1.457

version 1.411.2.5, 2010/09/19 14:49:17 version 1.457, 2011/08/15 16:31:55
Line 41  use Apache::lonratedt(); Line 41  use Apache::lonratedt();
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::lonclonecourse;  use Apache::lonclonecourse;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use Apache::londocsgci;  
 use HTML::Entities;  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
Line 121  sub dumpbutton { Line 120  sub dumpbutton {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     if ($home) {      if ($home) {
  my $link = "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \"".&mt('Dump '.$crstype.' DOCS to Construction Space')."\")'>".&mt('Dump '.$crstype.' DOCS to Construction Space')."</a>";          my $link =
  return $link.' '.              "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \""
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').'<br />';             .&mt('Dump '.$crstype.' Documents to Construction Space')
     } else {             ."\")'>"
  return '<div>'.             .&mt('Dump '.$crstype.' Documents to Construction Space')
      &mt('Dump '.$crstype.             .'</a>';
  ' DOCS to Construction Space: available on other servers').          return
  '</div>';              $link.' '
              .&Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs')
              .'<br />';
       } else {
           return
               &mt('Dump '.$crstype.' Documents to Construction Space: available on other servers');
     }      }
 }  }
   
Line 143  sub clean { Line 147  sub clean {
 sub dumpcourse {  sub dumpcourse {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' DOCS to Construction Space').      $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Documents to Construction Space').
       '<form name="dumpdoc" action="" method="post">');        '<form name="dumpdoc" action="" method="post">');
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' DOCS to Construction Space'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' Documents to Construction Space'));
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
     unless ($home) { return ''; }      unless ($home) { return ''; }
     my $origcrsid=$env{'request.course.id'};      my $origcrsid=$env{'request.course.id'};
Line 256  sub dumpcourse { Line 260  sub dumpcourse {
  $r->print(&Apache::loncommon::end_data_table());   $r->print(&Apache::loncommon::end_data_table());
  &untiehash();   &untiehash();
  $r->print(   $r->print(
   '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype DOCS").'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype Documents").'" /></p></form>');
     }      }
 }  }
   
Line 264  sub dumpcourse { Line 268  sub dumpcourse {
   
 sub exportbutton {  sub exportbutton {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     return "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".      return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';
 }  }
   
Line 276  sub exportcourse { Line 280  sub exportcourse {
     my %discussiontime = &Apache::lonnet::dump('discussiontimes',      my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                                $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});                                                 $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
     my $numdisc = keys(%discussiontime);      my $numdisc = keys(%discussiontime);
       my $numprobs = 0;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').          $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').
Line 306  sub exportcourse { Line 311  sub exportcourse {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['archive','discussion']);                                              ['archive','discussion']);
   
           my $format = $env{'form.format'};
         my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');          my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');
         my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');          my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');
         if (@exportitems == 0 && @discussions == 0) {          if (@exportitems == 0 && @discussions == 0) {
Line 327  sub exportcourse { Line 333  sub exportcourse {
             my $imsresources;              my $imsresources;
             my $tempexport;              my $tempexport;
             my $copyresult;              my $copyresult;
             my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);              my $testbank;
               my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport,$format,\$testbank);
             if ($manifestok) {              if ($manifestok) {
                 &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest);                  &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest,$format,$testbank);
                 close($ims_manifest);                  close($ims_manifest);
   
 #Create zip file in prtspool  #Create zip file in prtspool
Line 342  sub exportcourse { Line 349  sub exportcourse {
                 open(OUTPUT, "zip -r $imszip *  2> /dev/null |");                  open(OUTPUT, "zip -r $imszip *  2> /dev/null |");
                 close(OUTPUT);                  close(OUTPUT);
                 chdir $cwd;                  chdir $cwd;
                   $outcome .= '<p>'
                              .&mt('[_1]Your IMS package[_2] is ready for download.'
                                  ,'<a href="'.$imszipfile.'">','</a>')
                              .'</p>';
                 if ($copyresult) {                  if ($copyresult) {
                     $outcome .= '<p class="LC_error">'                      $outcome .= '<p class="LC_error">'
                                .&mt('The following errors occurred during export - [_1]'                                 .&mt('The following errors occurred during export - [_1]'
                                    ,$copyresult)                                     ,$copyresult)
                                .'</p>';                                 .'</p>';
                 }                  }
                 $outcome .= '<p>'  
                            .&mt('[_1]Your IMS package[_2] is ready for download.'  
                                ,'<a href="'.$imszipfile.'">','</a>')  
                            .'</p>';  
             } else {              } else {
                 $outcome = '<p class="LC_error">'                  $outcome = '<p class="LC_error">'
                           .&mt('Unfortunately you will not be able to retrieve'                            .&mt('Unfortunately you will not be able to retrieve'
                               .' an IMS archive of this posts at this time,'                                .' an IMS archive of your course at this time,'
                               .' because there was a problem creating a'                                .' because there was a problem creating a'
                               .' manifest file.')                                .' manifest file.')
                           .'</p>'                            .'</p>'
Line 369  sub exportcourse { Line 376  sub exportcourse {
         $r->print($outcome);          $r->print($outcome);
         $r->print(&Apache::loncommon::end_page());          $r->print(&Apache::loncommon::end_page());
     } else {      } else {
         my $display;          my $display='<form name="exportdoc" action="" method="post">'."\n".
         $display = '<form name="exportdoc" action="" method="post">'."\n";                      '<p>'.
         $display .= '<p>'                      &mt('Choose which items you wish to export from your '.$crstype.'.').
                    .&mt('Choose which items you wish to export from your '.$crstype.'.')                      '</p>'.
                    .'</p>';                      '<div class="LC_columnSection"><fieldset>'.
         $display .= '<div class="LC_columnSection"><fieldset>'.  
                     '<legend>'.&mt('Content items').'</legend>'.                      '<legend>'.&mt('Content items').'</legend>'.
                     '<input type="button" value="'.&mt('check all').'" '.                      '<input type="button" value="'.&mt('check all').'" '.
                     'onclick="javascript:checkAll(document.exportdoc.archive)" />'.                      'onclick="javascript:checkAll(document.exportdoc.archive)" />'.
                     '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.                      '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                     ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>'.                      ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>';
                     '<fieldset>'.          if ($numdisc > 0) {
                     '<legend>'.&mt('Discussion posts').'</legend>'.              $display .= '<fieldset>'.
                     '<input type="button" value="'.&mt('check all').'"'.                          '<legend>'.&mt('Discussion posts').'</legend>'.
                     ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.                          '<input type="button" value="'.&mt('check all').'"'.
                     '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.                          ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
                     ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.                          '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                     '</fieldset></div>';                          ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.
                           '</fieldset>';
           }
           $display .= '</div>';
         my $curRes;          my $curRes;
         my $depth = 0;          my $depth = 0;
         my $count = 0;          my $count = 0;
Line 397  sub exportcourse { Line 406  sub exportcourse {
         my $lastcontainer = $startcount;          my $lastcontainer = $startcount;
         $display .= &Apache::loncommon::start_data_table()          $display .= &Apache::loncommon::start_data_table()
                    .&Apache::loncommon::start_data_table_header_row()                     .&Apache::loncommon::start_data_table_header_row()
                    .'<th>'.&mt('Export content item?').'</th>'                     .'<th>'.&mt('Export content item?').'</th>';
                    .'<th>';  
         if ($numdisc > 0) {          if ($numdisc > 0) {
             $display .= &mt('Export discussion posts?');              $display .= '<th>'.&mt('Export discussion posts?').'</th>';
         } else {  
              $display .= '&nbsp;';  
         }          }
         $display .= '</th>'          $display .= &Apache::loncommon::end_data_table_header_row();
                    .&Apache::loncommon::end_data_table_header_row();  
         while ($curRes = $it->next()) {          while ($curRes = $it->next()) {
             if (ref($curRes)) {              if (ref($curRes)) {
                 $count ++;                  $count ++;
Line 426  sub exportcourse { Line 431  sub exportcourse {
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                          $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                     }                      }
                 }                  }
                   my $currelem = $count+$boards+$startcount;
                 $display .= &Apache::loncommon::start_data_table_row()                  $display .= &Apache::loncommon::start_data_table_row()
                            .'<td>'."\n"                             .'<td>'."\n"
                            .'<input type="checkbox" name="archive" value="'.$count.'" ';                             .'<input type="checkbox" name="archive" value="'.$count.'" ';
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {                  if (($curRes->is_sequence()) || ($curRes->is_page())) {
                     my $checkitem = $count + $boards + $startcount;                      $lastcontainer = $currelem;
                     $display .= 'onclick="javascript:propagateCheck('."'$checkitem'".')"';                      $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';
                   } elsif ($curRes->is_problem()) {
                       $numprobs ++; 
                 }                  }
                 $display .= ' />'."\n";                  $display .= ' />'."\n";
                 for (my $i=0; $i<$depth; $i++) {                  for (my $i=0; $i<$depth; $i++) {
                     $display .= '<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'                      $display .= ('<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />' x2)."\n";
                                .'<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'."\n";  
                 }                  }
                 if ($curRes->is_sequence()) {                  if ($curRes->is_sequence()) {
                     $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";                      $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";
                     $lastcontainer = $count + $startcount + $boards;  
                 } elsif ($curRes->is_page()) {                  } elsif ($curRes->is_page()) {
                     $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";                      $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";
                     $lastcontainer = $count + $startcount + $boards;  
                 }                  }
                 my $currelem = $count+$boards+$startcount;  
                 $children{$parent{$depth}} .= $currelem.':';                  $children{$parent{$depth}} .= $currelem.':';
                 $display .= '&nbsp;'.$curRes->title().'</td>'."\n";                  $display .= '&nbsp;'.$curRes->title().'</td>'."\n";
   
                 # Existing discussion posts?                  # Existing discussion posts?
                 if ($discussiontime{$ressymb} > 0) {                  if ($discussiontime{$ressymb} > 0) {
                     $boards ++;                      $boards ++;
                     $currelem = $count+$boards+$startcount;  
                     $display .= '<td align="right">'                      $display .= '<td align="right">'
                                .'<input type="checkbox" name="discussion" value="'.$count.'" />'                                 .'<input type="checkbox" name="discussion" value="'.$count.'" />'
                                .'</td>'."\n";                                 .'</td>'."\n";
                 } else {                  } elsif ($numdisc > 0) {
                     $display .= '<td>&nbsp;</td>'."\n";                      $display .= '<td>&nbsp;</td>'."\n";
                 }                  }
                 $display .= &Apache::loncommon::end_data_table_row();                  $display .= &Apache::loncommon::end_data_table_row();
Line 521  function containerCheck(item) { Line 524  function containerCheck(item) {
  $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',   $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',
  $scripttag));   $scripttag));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
           if ($numprobs > 0) {
               $display .= '<p><span class="LC_nobreak">'.
                           &mt('Export format for LON-CAPA problems:').
                           '<label><input type="radio" name="format" value="xml" checked="checked" />'.
                           '&nbsp;'.&mt('XML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="html" />'.
                           '&nbsp;'.&mt('HTML').'</label>'.('&nbsp;' x3).
                           '<label><input type="radio" name="format" value="plaintext" />'.
                           '&nbsp;'.&mt('Text').'</label></span></p>';
           }
  $r->print($display.   $r->print($display.
                   '<p><input type="hidden" name="finishexport" value="1" />'.                    '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.                    '<input type="submit" name="exportcourse" value="'.
Line 529  function containerCheck(item) { Line 542  function containerCheck(item) {
 }  }
   
 sub create_ims_store {  sub create_ims_store {
     my ($now,$manifestok,$outcome,$tempexport) = @_;      my ($now,$manifestok,$outcome,$tempexport,$format,$testbank) = @_;
     $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';      $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';
     my $ims_manifest;      my $ims_manifest;
     if (!-e $$tempexport) {      if (!-e $$tempexport) {
Line 573  sub create_ims_store { Line 586  sub create_ims_store {
 '  <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n".  '  <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n".
 '    <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'.  '    <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'.
 ' structure="hierarchical">'."\n".  ' structure="hierarchical">'."\n".
 '      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>'  '      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>';
           if ($format eq 'plaintext') {
               my $testbankfilename = $$tempexport.'/testbank.txt';
               $$testbank = Apache::File->new('>'.$testbankfilename);
           }
     } else {      } else {
         $$outcome .= 'An error occurred opening the IMS manifest file.<br />'          $$outcome .= 'An error occurred opening the IMS manifest file.<br />'
 ;  ;
Line 582  sub create_ims_store { Line 599  sub create_ims_store {
 }  }
   
 sub build_package {  sub build_package {
     my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,$ims_manifest) = @_;      my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,
           $ims_manifest,$format,$testbank) = @_;
 # first iterator to look for dependencies  # first iterator to look for dependencies
     my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);      my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
     my $curRes;      my $curRes;
Line 621  sub build_package { Line 639  sub build_package {
     $count = 0;      $count = 0;
     my $imsresources;      my $imsresources;
     my $pkgdepth;      my $pkgdepth;
       my $currdirpath = 'Top';
     while ($curRes = $it->next()) {      while ($curRes = $it->next()) {
         if ($curRes == $it->BEGIN_MAP()) {          if ($curRes == $it->BEGIN_MAP()) {
             $prevdepth = $depth;              $prevdepth = $depth;
Line 658  sub build_package { Line 677  sub build_package {
               '<title>'.$curRes->title().'</title>';                '<title>'.$curRes->title().'</title>';
                 print $ims_manifest "\n".$itementry;                  print $ims_manifest "\n".$itementry;
   
                 unless ($curRes->is_sequence()) {                  if ($curRes->is_sequence()) {
                       $currdirpath = 'Top';
                       my $pcslist = $curRes->map_hierarchy();
                       if ($pcslist ne '') {
                           foreach my $pc (split(/,/,$pcslist),$curRes->map_pc()) {
                               next if ($pc <= 1);
                               my $res = $navmap->getByMapPc($pc);
                               if (ref($res)) {
                                   my $encloser = $res->title();
                                   if ($encloser) {
                                       if ($currdirpath) {
                                           $currdirpath .= ' -> ';
                                       }
                                       $currdirpath .= $encloser;
                                   }
                               }
                           }
                       }
                   } else {
                     my $content_file;                      my $content_file;
                     my @hrefs = ();                      my @hrefs = ();
                     &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport);                      &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport,$format,$currdirpath,$testbank);
                     if ($content_file) {                      if ($content_file) {
                         $imsresources .= "\n".                          $imsresources .= "\n".
                      '   <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count.                       '   <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count.
Line 722  sub get_dependencies { Line 759  sub get_dependencies {
 }  }
   
 sub process_content {  sub process_content {
     my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_;      my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport,$format,$currdirpath,$testbank) = @_;
     my $content_type;      my $content_type;
     my $message;      my $message;
     my @uploads = ();      my @uploads = ();
Line 779  sub process_content { Line 816  sub process_content {
             $canedit= 1;              $canedit= 1;
         }          }
 # only include problem code where current user is author  # only include problem code where current user is author
         if ($canedit) {          if (($format eq 'html') || ($format eq 'plaintext')) {
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');              my $title = $curRes->title;
         } else {              $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,$format,$currdirpath,$title,$testbank);
             $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');          } elsif ($format eq 'xml') {
               if ($canedit) {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
               } else {
                   $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
               }
         }          }
     } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {      } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
         $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');          $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
Line 802  sub process_content { Line 844  sub process_content {
 }  }
   
 sub replicate_content {  sub replicate_content {
     my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;      my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller,$currdirpath,
           $title,$testbank) = @_;
     my ($map,$ind,$url);      my ($map,$ind,$url);
     if ($caller eq 'templateupload') {      if ($caller eq 'templateupload') {
         $url = $symb;          $url = $symb;
Line 846  sub replicate_content { Line 889  sub replicate_content {
                 } else {                  } else {
                     $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";                      $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";
                 }                  }
             } elsif ($caller eq 'noedit') {              } elsif (($caller eq 'noedit') || ($caller eq 'html') || 
                        ($caller eq 'plaintext')) {
 # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.  # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
                   my %form = (
                                grade_symb     => $symb,
                                grade_courseid => $cdom.'_'.$cnum,
                                grade_domain   => $env{'user.domain'},
                                grade_username => $env{'user.name'},
                                grade_imsexport => 1,
                                instructor_comments => 'hide',
                              );
                   my $feedurl=&Apache::lonnet::clutter($url);
                   my ($userview,$response)=&Apache::lonnet::ssi_body($feedurl,%form);
                   if (ref($response)) {
                       if ($response->is_success) {
                           $content = $userview;
                           $content =~ s/\Qonchange="javascript:setSubmittedPart('\E[^\']+\Q');"\E//g;
                           $content =~ s/^\s*[\n\r]+$//;
                           if ($caller eq 'plaintext') {
                               my @lines = split(/[\n\r]+/,$content);
                               my @tosave;
                               my $foilcounter = 0;
                               my @alphabet = ('a'..'z');
                               my $mc_answer;
                               foreach my $line (@lines) {
                                   next if ($line =~ /^\s*$/);
                                   if ($line =~ m{(|\Q<\label>\E)\Q<br />Incorrect:<label>\E}) {
                                       $foilcounter ++;
                                   } elsif ($line =~ m{(|\Q</label>\E)\Q<br />Correct:<b><label>\E}) {
                                       $foilcounter ++;
                                       $mc_answer = $alphabet[$foilcounter-1];
                                   } elsif ($line !~ m{\Q</label>\E(|\Q</b>\E)\Q<br />\E}) {
                                       $line =~ s/^(\s+|\s+)$//g;
                                       $line =~ s{^\Q<b>\E([^<]+)\Q</b>\E$}{1};
                                       $tosave[$foilcounter] .= $line.' ';
                                   }
                                   $content = join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer."\n";
                                   }
                               }
                               if (@tosave) {
                                   my $qtype;
                                   if ($mc_answer) {
                                       $qtype = 'MC';
                                   }
                                   $content = $currdirpath."\t".$title."\t$qtype\t".join("\t",@tosave);
                                   if ($mc_answer) {
                                       $content .= "\t".$mc_answer;
                                   } 
                                   $content .= "\n";
                               }
                           } else {
                               $content = '<html><body>'.$content.'</body></html>';
                           }
                           if (($caller eq 'plaintext') && ($testbank)) {
                               print $testbank $content;
                           }
                       } else {
                           $content = 'Not the owner of this resource';
                       }
                   } else {
                       $content = 'Not the owner of this resource';
                   }
                 $repstatus = 'ok';                  $repstatus = 'ok';
                 $content = 'Not the owner of this resource';  
             }              }
             if ($repstatus eq 'ok') {              if ($repstatus eq 'ok') {
                 print $copiedfile $content;                  print $copiedfile $content;
Line 907  sub extract_media { Line 1011  sub extract_media {
                 $repstatus = 'ok';                  $repstatus = 'ok';
             }              }
         } elsif ($caller eq 'uploaded') {          } elsif ($caller eq 'uploaded') {
   
             $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);              $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);
         }          }
         if ($repstatus eq 'ok') {          if ($repstatus eq 'ok') {
Line 1152  sub docs_change_log { Line 1255  sub docs_change_log {
     &Apache::loncommon::restore_course_settings('docs_log',      &Apache::loncommon::restore_course_settings('docs_log',
                                                 \%saveable_parameters);                                                  \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }      if (!$env{'form.show'}) { $env{'form.show'}=10; }
   # FIXME: internationalization seems wrong here
     my %lt=('hiddenresource' => 'Resources hidden',      my %lt=('hiddenresource' => 'Resources hidden',
     'encrypturl'     => 'URL hidden',      'encrypturl'     => 'URL hidden',
     'randompick'     => 'Randomly pick',      'randompick'     => 'Randomly pick',
Line 1240  sub docs_change_log { Line 1344  sub docs_change_log {
     $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');      $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
     foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {      foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
  if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {   if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
   # FIXME: internationalization seems wrong here
     $r->print('<li>'.      $r->print('<li>'.
       &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',        &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
   $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})    $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
Line 1523  sub editor { Line 1628  sub editor {
         $LONCAPA::map::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
   
     my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order);      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
     if ($allowed) {  
         ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =  
     &breadcrumbs($allowed,$crstype);      &breadcrumbs($allowed,$crstype);
         $r->print($breadcrumbtrail);          $r->print($breadcrumbtrail);
     } else {  
       unless ($allowed) {
         $randompick = -1;          $randompick = -1;
     }      }
   
Line 1609  sub editor { Line 1713  sub editor {
     my $shown=0;      my $shown=0;
     if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {      if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {
  $r->print('<div class="LC_Box">'.   $r->print('<div class="LC_Box">'.
           '<p>'.&mt('Parameters:').            '<ol class="LC_docs_parameters"><li class="LC_docs_parameters_title">'.&mt('Parameters:').'</li>'.
           '<ul>'.  
   ($randompick>=0?'<li>'.&mt('randomly pick [quant,_1,resource]',$randompick).'</li>':'').    ($randompick>=0?'<li>'.&mt('randomly pick [quant,_1,resource]',$randompick).'</li>':'').
   ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').    ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
   ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').    ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
   ($is_random_order?'<li>'.&mt('random order').'</li>':'').    ($is_random_order?'<li>'.&mt('random order').'</li>':'').
   '</ul></p>');    '</ol>');
         if ($randompick>=0) {          if ($randompick>=0) {
             $r->print('<p class="LC_warning">'              $r->print('<p class="LC_warning">'
                  .&mt('Caution: this folder is set to randomly pick a subset'                   .&mt('Caution: this folder is set to randomly pick a subset'
Line 1639  sub editor { Line 1742  sub editor {
         $r->print('</div>');          $r->print('</div>');
     }      }
   
     my $output;      my $output;  
   
       &Apache::loncommon::start_data_table_count(); #setup a row counter 
     foreach my $res (@LONCAPA::map::order) {      foreach my $res (@LONCAPA::map::order) {
         my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);          my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
         $name=&LONCAPA::map::qtescape($name);          $name=&LONCAPA::map::qtescape($name);
Line 1651  sub editor { Line 1756  sub editor {
         $idx++;          $idx++;
         $shown++;          $shown++;
     }      }
       &Apache::loncommon::end_data_table_count();
       
     if ($shown) {      if ($shown) {
         $r->print(&Apache::loncommon::start_data_table());          $r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll')
                    .&Apache::loncommon::start_data_table(undef,'contentlist'));
         if ($allowed) {          if ($allowed) {
             $r->print(&Apache::loncommon::start_data_table_header_row()              $r->print(&Apache::loncommon::start_data_table_header_row()
                      .'<th colspan="2">'.&mt('Move').'</th>'                       .'<th colspan="2">'.&mt('Move').'</th>'
                      .'<th>'.&mt('Actions').'</th>'                       .'<th>'.&mt('Actions').'</th>'
                      .'<th colspan="2">'.&mt('Document').'</th>');                       .'<th colspan="2">'.&mt('Document').'</th>');
             if ($folder !~ /^supplemental/) {              if ($folder !~ /^supplemental/) {
                 $->print('<th colspan="4">'.&mt('Settings').'</th>');                  $r->print('<th colspan="4">'.&mt('Settings').'</th>');
             }              }
             $r->print(&Apache::loncommon::end_data_table_header_row());              $r->print(&Apache::loncommon::end_data_table_header_row());
         }          }
         $r->print($output          $r->print($output
                  .&Apache::loncommon::end_data_table()                   .&Apache::loncommon::end_data_table()
                    .&Apache::loncommon::end_scrollbox()
         );          );
     } else {      } else {
         $r->print('<p class="LC_info">'          $r->print('<p class="LC_info">'
Line 1681  sub editor { Line 1790  sub editor {
 sub process_file_upload {  sub process_file_upload {
     my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;      my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;
 # upload a file, if present  # upload a file, if present
     my $parseaction;      my ($parseaction,$showupload,$nextphase,$mimetype);
    if ($env{'form.parserflag'}) {      if ($env{'form.parserflag'}) {
         $parseaction = 'parse';          $parseaction = 'parse';
     }      }
     my $phase_status;  
     my $folder=$env{'form.folder'};      my $folder=$env{'form.folder'};
     if ($folder eq '') {      if ($folder eq '') {
         $folder='default';          $folder='default';
Line 1704  sub process_file_upload { Line 1812  sub process_file_upload {
             $LONCAPA::map::resources[1]='';              $LONCAPA::map::resources[1]='';
         }          }
         if ($fatal) {          if ($fatal) {
             return 'failed';              $$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</div>';
               return;
         }          }
         my $destination = 'docs/';          my $destination = 'docs/';
         if ($folder =~ /^supplemental/) {          if ($folder =~ /^supplemental/) {
Line 1715  sub process_file_upload { Line 1824  sub process_file_upload {
         } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {          } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
             $destination .=  $2.'/';              $destination .=  $2.'/';
         }          }
 # this is for a course, not a user, so set coursedoc flag  # this is for a course, not a user, so set context to coursedoc.
 # probably the only place in the system where this should be "1"  
         my $newidx=&LONCAPA::map::getresidx();          my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;          $destination .= $newidx;
         my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,          my $url=&Apache::lonnet::userfileupload('uploaddoc','coursedoc',$destination,
  $parseaction,$allfiles,   $parseaction,$allfiles,
  $codebase);   $codebase,undef,undef,undef,undef,
                                                   undef,undef,\$mimetype);
           if ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E.*/([^/]+)$}) {
               my $stored = $1;
               $showupload = '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
                             $stored.'</span>').'</p>';
           } else {
               my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$});
               
               $$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</div>';
               return;
           }
         my $ext='false';          my $ext='false';
         if ($url=~m{^http://}) { $ext='true'; }          if ($url=~m{^http://}) { $ext='true'; }
  $url     = &LONCAPA::map::qtunescape($url);   $url     = &LONCAPA::map::qtunescape($url);
Line 1738  sub process_file_upload { Line 1857  sub process_file_upload {
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
     $folder.'.'.$container);      $folder.'.'.$container);
         if ($fatal) {          if ($fatal) {
             $$upload_output .= '<p><span class="LC_error">'.$errtext.'</span></p>';              $$upload_output = '<div class="LC_error" id="uploadfileresult">'.$errtext.'</div>';
             return 'failed';              return;
         } else {          } else {
             if ($parseaction eq 'parse') {              if ($parseaction eq 'parse' && $mimetype eq 'text/html') {
                   $$upload_output = $showupload;
                 my $total_embedded = scalar(keys(%{$allfiles}));                  my $total_embedded = scalar(keys(%{$allfiles}));
                 if ($total_embedded > 0) {                  if ($total_embedded > 0) {
                     my $num = 0;                      my $uploadphase = 'upload_embedded';
     my $state = '                      my $primaryurl = &HTML::Entities::encode($url,'<>&"');
    <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />      my $state = &embedded_form_elems($uploadphase,$primaryurl,$newidx); 
    <input type="hidden" name="cmd" value="upload_embedded" />                      my ($embedded,$num) = 
    <input type="hidden" name="newidx" value="'.$newidx.'" />                          &Apache::loncommon::ask_for_embedded_content(
    <input type="hidden" name="primaryurl" value="'.&escape($url).'" />                              '/adm/coursedocs',$state,$allfiles,$codebase,{'docs_url' => $url});
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';                      if ($embedded) {
     $phase_status = 'phasetwo';                          if ($num) {
                               $$upload_output .=
                     $$upload_output .=           '<p>'.&mt('This file contains embedded multimedia objects, which need to be uploaded.').'</p>'.$embedded;
  'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.                              $nextphase = $uploadphase;
  &Apache::loncommon::ask_for_embedded_content(                          } else {
                             '/adm/coursedocs',$state,$allfiles,$codebase);                              $$upload_output .= $embedded;
                           }
                       } else {
                           $$upload_output .= &mt('Embedded item(s) already present, so no additional upload(s) required').'<br />';
                       }
                 } else {                  } else {
                     $$upload_output .= 'No embedded items identified<br />';                      $$upload_output .= &mt('No embedded items identified').'<br />';
                 }                  }
                   $$upload_output = '<div id="uploadfileresult">'.$$upload_output.'</div>';
             }              }
         }          }
     }      }
     return $phase_status;      return $nextphase;
 }  
   
 sub process_secondary_uploads {  
     my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;  
     my $folder=$env{'form.folder'};  
     my $destination = 'docs/';  
     if ($folder =~ /^supplemental/) {  
         $destination = 'supplemental/';  
     }  
     if (($folder eq 'default') || ($folder eq 'supplemental')) {  
         $destination .= 'default/';  
     } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {  
         $destination .=  $2.'/';  
     }  
     $destination .= $newidx;  
     my ($url,$filename);  
     $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);  
     ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});  
     return $filename;  
 }  }
   
 sub is_supplemental_title {  sub is_supplemental_title {
Line 1803  sub parse_supplemental_title { Line 1909  sub parse_supplemental_title {
  $foldertitle=&Apache::lontexconvert::msgtexconverted($4);   $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
  my $name =  &Apache::loncommon::plainname($uname,$udom);   my $name =  &Apache::loncommon::plainname($uname,$udom);
  $name = &HTML::Entities::encode($name,'"<>&\'');   $name = &HTML::Entities::encode($name,'"<>&\'');
           $renametitle = &HTML::Entities::encode($renametitle,'"<>&\'');
  $title='<i>'.&Apache::lonlocal::locallocaltime($time).'</i> '.   $title='<i>'.&Apache::lonlocal::locallocaltime($time).'</i> '.
     $name.': <br />'.$foldertitle;      $name.': <br />'.$foldertitle;
     }      }
Line 1846  sub entryline { Line 1953  sub entryline {
     }      }
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $type = $container = 'page';          $type = $container = 'page';
         $esc_path=&escape($path = $env{'form.pagepath'});          $esc_path=&escape($env{'form.pagepath'});
  $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');   $path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');
         $symb=&escape($env{'form.pagesymb'});          $symb=&escape($env{'form.pagesymb'});
     }      }
Line 2240  sub list_symbs { Line 2347  sub list_symbs {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Symb List'));      $r->print(&Apache::loncommon::start_page('Symb List'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));
       &startContentScreen($r,'tools');
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.          $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.
Line 2250  sub list_symbs { Line 2358  sub list_symbs {
     } else {      } else {
         $r->print("<pre>\n");          $r->print("<pre>\n");
         foreach my $res ($navmap->retrieveResources()) {          foreach my $res ($navmap->retrieveResources()) {
     $r->print($res->compTitle()."\t".$res->symb()."\n");              $r->print($res->compTitle()."\t".$res->symb()."\n");
         }          }
         $r->print("\n</pre>\n");          $r->print("\n</pre>\n");
     }      }
     $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');  
 }  }
   
   
 sub verifycontent {  sub verifycontent {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
    my $loaderror=&Apache::lonnet::overloaderror($r);  
    if ($loaderror) { return $loaderror; }  
    $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));     $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));
      &startContentScreen($r,'tools');
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
Line 2273  sub verifycontent { Line 2379  sub verifycontent {
        if ($hash{$key}=~/\.(page|sequence)$/) {         if ($hash{$key}=~/\.(page|sequence)$/) {
    if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {     if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {
        $r->print('<hr /><span class="LC_error">'.         $r->print('<hr /><span class="LC_error">'.
  &mt('The following sequence or page is included more than once in your '.$crstype.': ').   &mt('The following sequence or page is included more than once in your '.$crstype.':').' '.
  &unescape($hash{$key}).'</span><br />'.   &unescape($hash{$key}).'</span><br />'.
  &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));   &mt('Note that grading records for problems included in this sequence or folder will overlap.').'<hr />');
    }     }
        }         }
        if (($key=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$key})})) {         if (($key=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$key})})) {
Line 2283  sub verifycontent { Line 2389  sub verifycontent {
        }         }
    }     }
    &untiehash();     &untiehash();
    $r->print('<h1>'.&mt('Done').'.</h1>'.'<a href="/adm/coursedocs">'.     $r->print('<p class="LC_success">'.&mt('Done').'</p>');
      &mt('Return to DOCS').'</a>');  
 }  }
   
   
Line 2299  sub checkversions { Line 2404  sub checkversions {
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));      $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));      $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));
       &startContentScreen($r,'tools');
   
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 2476  ENDHEADERS Line 2583  ENDHEADERS
 # Set version  # Set version
     $r->print(&Apache::loncommon::select_form($setversions{$linkurl},      $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
       'set_version_'.$linkurl,        'set_version_'.$linkurl,
       ('select_form_order' =>        {'select_form_order' =>
        ['',1..$currentversion,'mostrecent'],         ['',1..$currentversion,'mostrecent'],
        '' => '',         '' => '',
        'mostrecent' => &mt('most recent'),         'mostrecent' => &mt('most recent'),
        map {$_,$_} (1..$currentversion))));         map {$_,$_} (1..$currentversion)}));
     $r->print('</span></td></tr><tr><td></td>');      $r->print('</span></td></tr><tr><td></td>');
     my $lastold=1;      my $lastold=1;
     for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {      for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
Line 2534  ENDHEADERS Line 2641  ENDHEADERS
  }   }
     }      }
     $r->print('</table></form>');      $r->print('</table></form>');
     $r->print('<h1>'.&mt('Done').'.</h1>');      $r->print('<p class="LC_success">'.&mt('Done').'</p>');
   
     &untiehash();      &untiehash();
 }  }
Line 2609  sub init_breadcrumbs { Line 2716  sub init_breadcrumbs {
     bug=>'Instructor Interface'});      bug=>'Instructor Interface'});
 }  }
   
   # subroutine to list form elements
   sub create_list_elements {
      my @formarr = @_;
      my $list = '';
      for my $button (@formarr){
           for my $picture(keys %$button) {
               $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
           }
      }
      return $list;
   }
   
   # subroutine to create ul from list elements
   sub create_form_ul {
      my $list = shift;
      my $ul = &Apache::lonhtmlcommon::htmltag('ul',$list, {class => 'LC_ListStyleNormal'});
      return $ul;
   }
   
   #
   # Start tabs
   #
   
   sub startContentScreen {
       my ($r,$mode)=@_;
       $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
       $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?
       my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
   
       my $onclick;
       my $href;
   
       if ($allowed) {
           $r->print('<li '.(($mode eq 'docs')?' class="active"':'').
                  ' id="tabbededitor"><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;" id="contenteditor">'
                .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
       $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');
   }
   
   #
   # End tabs
   #
   
   sub endContentScreen {
      my ($r)=@_;
      $r->print('</div></div></div>');
   }
   
   sub supplemental_base {
       return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Documents'));
   }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 2619  sub handler { Line 2785  sub handler {
     return OK if $r->header_only;      return OK if $r->header_only;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
   
     my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};  #
     if ($coursedom eq 'gcitest') {  
         my $coursenum = $env{'course.'.$env{'request.course.id'}.'.num'};  
         my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});  
         if ($allowed) {  
             &concept_test_builder($r,$coursedom,$coursenum);  
             return OK;  
         }  
     }  
   
 # --------------------------------------------- Initialize help topics for this  # --------------------------------------------- Initialize help topics for this
     foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',      foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',
                'Adding_External_Resource','Navigate_Content',                 'Adding_External_Resource','Navigate_Content',
Line 2667  sub handler { Line 2824  sub handler {
       &init_breadcrumbs('versions','Check/Set Resource Versions');        &init_breadcrumbs('versions','Check/Set Resource Versions');
       &checkversions($r);        &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {    } elsif ($allowed && $env{'form.dumpcourse'}) {
       &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space');        &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' Documents to Construction Space');
       &dumpcourse($r);        &dumpcourse($r);
   } elsif ($allowed && $env{'form.exportcourse'}) {    } elsif ($allowed && $env{'form.exportcourse'}) {
       &init_breadcrumbs('exportcourse','IMS Export');        &init_breadcrumbs('exportcourse','IMS Export');
       &exportcourse($r);        &exportcourse($r);
   } else {    } 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 $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 $script='';
     my $showdoc=0;      my $showdoc=0;
       my $addentries = {};
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
   
   # Where do we store these for when we come back?
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      my $stored_folderpath='docs_folderpath';
     ['folderpath','pagepath',      if ($supplementalflag) {
      'pagesymb']);         $stored_folderpath='docs_sup_folderpath';
       }
          
 # No folderpath, no pagepath, see if we have something stored  # No folderpath, no pagepath, see if we have something stored
     if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {      if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {
         &Apache::loncommon::restore_course_settings('docs_folderpath',          &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'folderpath' => 'scalar'});                                                {'folderpath' => 'scalar'});
     }      }
      
   # If we are not allowed to make changes, all we can see are supplemental docs
     if (!$allowed) {      if (!$allowed) {
         unless($env{'form.folderpath'} =~ /^supplemental/) {          $env{'form.pagepath'}='';
             $env{'form.folderpath'} = '';          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) {      if (!$env{'form.folderpath'} && $allowed) {
         &Apache::loncommon::restore_course_settings('docs_folderpath',          &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'pagepath' => 'scalar'});                                                {'pagepath' => 'scalar'});
     }      }
     if ($env{'form.pagepath'}) {  # Make the zeroth entry in supplemental docs page paths, so we can get to top level
        $env{'form.folderpath'}='';  
     }  
     if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {      if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {
         $env{'form.folderpath'} = 'supplemental&'.          $env{'form.folderpath'} = &supplemental_base()
                                   &escape(&mt('Supplemental '.$crstype.' Documents')).'&'.                                    .'&'.
                                   $env{'form.folderpath'};                                    $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',                                                  {'pagepath' => 'scalar',
                                                  'folderpath' => 'scalar'});                                                   'folderpath' => 'scalar'});
   
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  my (@folderpath)=split('&',$env{'form.folderpath'});   my (@folderpath)=split('&',$env{'form.folderpath'});
  $env{'form.foldername'}=&unescape(pop(@folderpath));   $env{'form.foldername'}=&unescape(pop(@folderpath));
Line 2722  sub handler { Line 2918  sub handler {
         $env{'form.pagename'}=&unescape(pop(@pagepath));          $env{'form.pagename'}=&unescape(pop(@pagepath));
         $env{'form.folder'}=pop(@pagepath);          $env{'form.folder'}=pop(@pagepath);
         $containertag = '<input type="hidden" name="pagepath" value="" />'.          $containertag = '<input type="hidden" name="pagepath" value="" />'.
     '<input type="hidden" name="pagesymb" value="" />';                  '<input type="hidden" name="pagesymb" value="" />';
         $uploadtag = '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.          $uploadtag = 
     '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />';              '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.
       '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />'.
               '<input type="hidden" name="folderpath" value="" />';
       } else {
           my $folderpath=$env{'form.folderpath'};
           if (!$folderpath) {
               if ($env{'form.folder'} eq '' ||
                   $env{'form.folder'} eq 'supplemental') {
                   $folderpath='default&'.
                       &escape(&mt('Main '.$crstype.' Documents'));
               }
           }
           $containertag = '<input type="hidden" name="folderpath" value="" />';
           $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';
     }      }
     if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {      if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
        $showdoc='/'.$1;         $showdoc='/'.$1;
Line 2732  sub handler { Line 2941  sub handler {
     if ($showdoc) { # got called in sequence from course      if ($showdoc) { # got called in sequence from course
  $allowed=0;    $allowed=0; 
     } else {      } else {
        if (($env{'form.folder'}=~/^(?:group|default)_/) ||  
           ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {  
            $forcestandard = 1;  
        }  
        $forcesupplement=($env{'form.folder'}=~/^supplemental_/);  
   
        if ($allowed) {         if ($allowed) {
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);           &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');           $script=&Apache::lonratedt::editscript('simple');
        }         }
     }      }
   
 # subroutine to list form elements  
 sub create_list_elements {  
    my @formarr = @_;   
    my $list = '';  
    for my $button (@formarr){  
  for my $picture(keys %$button) {  
  #my $link = Apache::lonhtmlcommon::htmltag('a' ,$button->{$picture}, {href => "test"});   
  $list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});  
  }  
    }  
    return $list;  
 }  
   
 # subroutine to create ul from list elements  
 sub create_form_ul {  
    my $list = shift;  
    my $ul = Apache::lonhtmlcommon::htmltag('ul',$list, {class => 'LC_ListStyleNormal'});  
    return $ul;  
 }  
   
 # get course data  # get course data
     my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};      my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};      my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
Line 2778  sub create_form_ul { Line 2961  sub create_form_ul {
     $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");      $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
   
     if ($allowed) {      if ($allowed) {
  $script .= &editing_js($udom,$uname);   $script .= &editing_js($udom,$uname).
                      &resize_contentdiv_js();
           $addentries = {
                           onload   => "javascript:resize_contentdiv('contentscroll');",
                           onresize => "javascript:resize_contentdiv('contentscroll');",
                         };
     }      }
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n"      $script = '<script type="text/javascript">'."\n"
Line 2789  sub create_form_ul { Line 2977  sub create_form_ul {
   
     # Breadcrumbs      # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     if ($allowed) {      unless ($showdoc) {
         &Apache::lonhtmlcommon::add_breadcrumb({          &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,})                                                   {'force_register' => $showdoc,
                                                     'add_entries'    => $addentries,
                                                    })
                  .&Apache::loncommon::help_open_menu('','',273,'RAT')                   .&Apache::loncommon::help_open_menu('','',273,'RAT')
                  .&Apache::lonhtmlcommon::breadcrumbs(                   .&Apache::lonhtmlcommon::breadcrumbs(
                      'Editing the Table of Contents for your '.$crstype,                       'Editing the Table of Contents for your '.$crstype,
                      'Docs_Adding_Course_Doc')                       'Docs_Adding_Course_Doc')
         );          );
     } elsif ($showdoc) {      } else {
         $r->print(&Apache::loncommon::start_page("$crstype documents",undef,          $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
                                                 {'force_register' => $showdoc,}));                                                  {'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 = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output);    my ($upload_result,$upload_output,$uploadphase);
   if ($allowed) {    if ($allowed) {
       if (($env{'form.uploaddoc.filename'}) &&        if (($env{'form.uploaddoc.filename'}) &&
   ($env{'form.cmd'}=~/^upload_(\w+)/)) {    ($env{'form.cmd'}=~/^upload_(\w+)/)) {
 # Process file upload - phase one - upload and parse primary file.            my $context = $1; 
             # Process file upload - phase one - upload and parse primary file.
   undef($hadchanges);    undef($hadchanges);
           $upload_result = &process_file_upload(\$upload_output,$coursenum,            $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,
  $coursedom,\%allfiles,                                                \%allfiles,\%codebase,$context);
  \%codebase,$1);  
   if ($hadchanges) {    if ($hadchanges) {
       &mark_hash_old();        &mark_hash_old();
   }    }
           if ($upload_result eq 'phasetwo') {            $r->print($upload_output);
               $r->print($upload_output);        } elsif ($env{'form.phase'} eq 'upload_embedded') {
           }            # Process file upload - phase two - upload embedded objects 
       } elsif ($env{'form.phasetwo'}) {            $uploadphase = 'check_embedded';
           my %newname = ();            my $primaryurl = &HTML::Entities::encode($env{'form.primaryurl'},'<>&"');   
           my %origname = ();            my $state = &embedded_form_elems($uploadphase,$primaryurl,
           my %attribs = ();                                             $env{'form.newidx'});
           my $updateflag = 0;            my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
           my $residx = $env{'form.newidx'};            my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
           my $primary_url = &unescape($env{'form.primaryurl'});            my ($destination,$dir_root) = &embedded_destination();
 # Process file upload - phase two - gather secondary files.            my $url_root = '/uploaded/'.$docudom.'/'.$docuname;
           for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {            my $actionurl = '/adm/coursedocs';
               if ($env{'form.embedded_item_'.$i.'.filename'}) {            my ($result,$flag) = 
                   my $javacodebase;                &Apache::loncommon::upload_embedded('coursedoc',$destination,
                   $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);                    $docuname,$docudom,$dir_root,$url_root,undef,undef,undef,$state,
                   $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});                    $actionurl);
                   if (exists($env{'form.embedded_codebase_'.$i})) {            $r->print($result.&return_to_editor());
                       $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});        } elsif ($env{'form.phase'} eq 'check_embedded') {
                       $origname{$i} =~ s#^\Q$javacodebase\E/##;            # Process file upload - phase three - modify references in HTML file
                   }            $uploadphase = 'modified_orightml';
                   my @attributes = ();            my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
                   if ($env{'form.embedded_attrib_'.$i} =~ /:/) {            my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
                       @attributes = split(/:/,$env{'form.embedded_attrib_'.$i});            my ($destination,$dir_root) = &embedded_destination();
                   } else {            $r->print(&Apache::loncommon::modify_html_refs('coursedoc',$destination,
                       @attributes = ($env{'form.embedded_attrib_'.$i});                                                           $docuname,$docudom,undef,
                   }                                                           $dir_root).
                   foreach my $attr (@attributes) {                     &return_to_editor());
                       push(@{$attribs{$i}},&unescape($attr));  
                   }  
                   if ($javacodebase) {  
                       $codebase{$i} = $javacodebase;  
                       $codebase{$i} =~ s#/$##;  
                       $updateflag = 1;  
                   }  
               }  
               unless ($newname{$i} eq $origname{$i}) {  
                   $updateflag = 1;  
               }  
           }  
 # Process file upload - phase three - modify primary file  
           if ($updateflag) {  
               my ($content,$rtncode);  
               my $updateflag = 0;  
               my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode);  
               if ($getstatus eq 'ok') {  
                   foreach my $item (keys(%newname)) {  
                       if ($newname{$item} ne $origname{$item}) {  
                           my $attrib_regexp = '';  
                           if (@{$attribs{$item}} > 1) {  
                               $attrib_regexp = join('|',@{$attribs{$item}});  
                           } else {  
                               $attrib_regexp = $attribs{$item}[0];  
                           }  
                           if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) {  
                           }  
                           $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;  
                       }  
                       if (exists($codebase{$item})) {  
                           $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs  
                       }  
                   }  
 # Save edited file.  
                   my $saveresult;  
                   my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};  
                   my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};  
                   my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);  
               } else {  
                   &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);  
               }  
           }  
       }        }
   }    }
   
   unless ($showdoc ||  $upload_result eq 'phasetwo') {    unless ($showdoc || $uploadphase) {  
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
                 'uplm' => 'Upload a new main '.lc($crstype).' document',                  'uplm' => 'Upload a new main '.lc($crstype).' document',
                 'upls' => 'Upload a new supplemental '.lc($crstype).' document',                  'upls' => 'Upload a new supplemental '.lc($crstype).' document',
                 'impp' => 'Import a document',                  'impp' => 'Import a document',
  'copm' => 'All documents out of a published map into this folder',   'copm' => 'All documents out of a published map into this folder',
                 'upld' => 'Upload Document',                  'upld' => 'Import Document',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
  'book' => 'Import Bookmarks',   'wish' => 'Import from Wishlist',
                 'selm' => 'Select Map',                  'selm' => 'Select Map',
                 'load' => 'Load Map',                  'load' => 'Load Map',
                 'reco' => 'Recover Deleted Resources',                  'reco' => 'Recover Deleted Documents',
                 'newf' => 'New Folder',                  'newf' => 'New Folder',
                 'newp' => 'New Composite Page',                  'newp' => 'New Composite Page',
                 'extr' => 'External Resource',                  'extr' => 'External Resource',
                 'syll' => 'Syllabus',                  'syll' => 'Syllabus',
                 'navc' => 'Navigate Contents',                  'navc' => 'Table of Contents',
                 'sipa' => 'Simple Course Page',                  'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',                  'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',                  'drbx' => 'Drop Box',
                 'scuf' => 'Score Upload Form',                  'scuf' => 'External Scores (handgrade, upload, clicker)',
                 'bull' => 'Discussion Board',                  'bull' => 'Discussion Board',
                 'mypi' => 'My Personal Information Page',                  'mypi' => 'My Personal Information Page',
                 'grpo' => 'Group Portfolio',                  'grpo' => 'Group Portfolio',
Line 2962  CHBO Line 3100  CHBO
  $fileupload   $fileupload
  <br />   <br />
  $lt{'title'}:<br />   $lt{'title'}:<br />
  <input type="text" size="50" name="comment" />   <input type="text" size="80" name="comment" />
  $uploadtag   $uploadtag
  <input type="hidden" name="cmd" value="upload_default" />   <input type="hidden" name="cmd" value="upload_default" />
  <br />   <br />
Line 2970  CHBO Line 3108  CHBO
  $checkbox   $checkbox
  </span>   </span>
 FUFORM  FUFORM
     #$list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});      $fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>';
     #$fileuploadform .= create_form_ul(create_list_elements(@fileuploada));  
     $fileuploadform .= create_form_ul(Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'}));  
  $fileuploadform .= (<<FUFORM);  
  </form>  
 FUFORM  
   
  my $simpleeditdefaultform=(<<SEDFFORM);   my $simpleeditdefaultform=(<<SEDFFORM);
  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">   <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
  <input type="hidden" name="active" value="bb" />   <input type="hidden" name="active" value="bb" />
 SEDFFORM  SEDFFORM
  my @simpleeditdefaultforma = (    my @simpleeditdefaultforma = ( 
  { '<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/src.png" alt="'.&mt('Search').'" />' => "$uploadtag<a onclick='javascript:groupsearch()'>$lt{'srch'}</a>" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'"  onclick="javascript:groupsearch()" />' => "$uploadtag<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" },
  { '<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/res.png" alt="'.&mt('Import').'" />' => "<a onclick='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'"  onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },
  { '<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/vbkm.png" alt="'.&mt('Import Bookmarks').'" />' => "<a onclick='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },   { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{wish}.'" onclick="javascript:open_Wishlist_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_Wishlist_Import();'>$lt{'wish'}</a>" },
  );   );
  $simpleeditdefaultform .= create_form_ul(create_list_elements(@simpleeditdefaultforma));   $simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));
  $simpleeditdefaultform .=(<<SEDFFORM);   $simpleeditdefaultform .=(<<SEDFFORM);
  <hr />   <hr />
  <p>  
  $lt{'copm'}<br />   $lt{'copm'}<br />
  <input type="text" size="40" name="importmap" /><br />   <input type="text" size="40" name="importmap" /><br />
  <span class="LC_nobreak"><input type="button"   <span class="LC_nobreak"><input type="button"
  onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"   onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
  value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />   value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />
  $help{'Load_Map'}</span>   $help{'Load_Map'}</span>
  </p>  
  </form>   </form>
 SEDFFORM  SEDFFORM
   
  my $extresourcesform=(<<ERFORM);        my $extresourcesform=(<<ERFORM);
  <form action="/adm/coursedocs" method="post" name="newext">        <form action="/adm/coursedocs" method="post" name="newext">
  $uploadtag        $uploadtag
  <input type="hidden" name="importdetail" value="" />        <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}        <a class="LC_menubuttons_link" href="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
  </form>        </form>
 ERFORM  ERFORM
   
   
     if ($allowed) {      if ($allowed) {
  &update_paste_buffer($coursenum,$coursedom);   &update_paste_buffer($coursenum,$coursedom);
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
Line 3017  ERFORM Line 3149  ERFORM
                                          'sl' => 'Show Log'                                           'sl' => 'Show Log'
   );    );
   
        my $folderpath=$env{'form.folderpath'};  
        if (!$folderpath) {  
    if ($env{'form.folder'} eq '' ||  
        $env{'form.folder'} eq 'supplemental') {  
        $folderpath='default&'.  
    &escape(&mt('Main '.$crstype.' Documents'));  
    }  
        }  
        unless ($env{'form.pagepath'}) {  
            $containertag = '<input type="hidden" name="folderpath" value="" />';  
            $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';  
        }  
  $r->print(<<HIDDENFORM);   $r->print(<<HIDDENFORM);
  <form name="renameform" method="post" action="/adm/coursedocs">   <form name="renameform" method="post" action="/adm/coursedocs">
    <input type="hidden" name="title" />     <input type="hidden" name="title" />
Line 3043  ERFORM Line 3163  ERFORM
  </form>   </form>
 HIDDENFORM  HIDDENFORM
     }      }
 # --------------------------------------------------------- Main tab structure  
    # Generate the tabs
     my $activeClass = 1;      &startContentScreen($r,($supplementalflag?'supdocs':'docs'));
     my $active = '';  
     my %tabtitles = (  
                        main => {  #
                                  Course => &mt('Main Course Documents'),  
                                  Community => &mt('Main Community Documents'),      my $savefolderpath;
                                },  
                        supplemental => {  
                                  Course => &mt('Supplemental Course Documents'),          
                                  Community => &mt('Supplemental Community Documents'),  
                                },  
                     );  
     if ($allowed) {      if ($allowed) {
         $r->print('<ul class="LC_TabContentBigger" id="mainnav">');  
         if (($standard) && ($allowed) && (!$forcesupplement) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'}eq"" || ($env{'form.pagepath'}))) {  
             if($activeClass == 1){  
                 $active = 'class="active"';  
         $activeClass = 0;  
     }  
         }  
         $r->print('<li '.$active.' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'main'}{$crstype}.'</b></a></li>');  
         $active = '';  
         if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {  
             if($activeClass == 1){  
                 $active = 'class="active"';  
             }  
         }  
         $r->print('<li '.$active.' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.$tabtitles{'supplemental'}{$crstype}.'</b></a></li>');  
         $r->print('</ul>');  
     } else {  
         $r->print('<br />');  
     }  
     $r->print('<div class="LC_Box" style="clear:both;margin:0;">'  
              .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');  
 # --------------------------------------------------------- Standard documents  
        my $savefolderpath;  
        $active = 'style="display: none;"';  
        if($activeClass == 0){  
           $active = 'style="display: block;"';  
        }  
        if ($allowed) {  
        $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" '.$active.'>');  
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        if ($folder eq '' || $folder=~/^supplemental/) {         if ($folder eq '' || $supplementalflag) {
            $folder='default';             $folder='default';
    $savefolderpath = $env{'form.folderpath'};     $savefolderpath = $env{'form.folderpath'};
    $env{'form.folderpath'}='default&'.&escape($tabtitles{'main'}{$crstype});     $env{'form.folderpath'}='default&'.&escape(&mt('Content'));
            $uploadtag = '<input type="hidden" name="folderpath" value="'.             $uploadtag = '<input type="hidden" name="folderpath" value="'.
        &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';         &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }         }
Line 3120  HIDDENFORM Line 3206  HIDDENFORM
   
  my $recoverform=(<<RFORM);   my $recoverform=(<<RFORM);
  <form action="/adm/groupsort" method="post" name="recover">   <form action="/adm/groupsort" method="post" name="recover">
  <a onclick="javascript:groupopen('$readfile',1,0)">$lt{'reco'}</a>   <a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1)">$lt{'reco'}</a>
  </form>   </form>
 RFORM  RFORM
   
  my $imspform=(<<IMSPFORM);   my $imspform=(<<IMSPFORM);
  <form action="/adm/imsimportdocs" method="post" name="ims">   <form action="/adm/imsimportdocs" method="post" name="ims">
  <input type="hidden" name="folder" value="$folder" />   <input type="hidden" name="folder" value="$folder" />
  <a onclick="javascript:makeims();">$lt{'imsf'}</a>   <a class="LC_menubuttons_link" href="javascript:makeims();">$lt{'imsf'}</a>
  </form>   </form>
 IMSPFORM  IMSPFORM
   
Line 3137  IMSPFORM Line 3223  IMSPFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'navc'}=/adm/navmaps" />   value="$lt{'navc'}=/adm/navmaps" />
  <a onclick="document.newnav.submit()">$lt{'navc'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newnav.submit()">$lt{'navc'}</a>
  $help{'Navigate_Content'}   $help{'Navigate_Content'}
  </form>   </form>
 NNFORM  NNFORM
Line 3146  NNFORM Line 3232  NNFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makesmppage();"> $lt{'sipa'}</a>   <a class="LC_menubuttons_link" href="javascript:makesmppage();"> $lt{'sipa'}</a>
  $help{'Simple Page'}   $help{'Simple Page'}
  </form>   </form>
 NSPFORM  NSPFORM
Line 3156  NSPFORM Line 3242  NSPFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makesmpproblem();">$lt{'sipr'}</a>   <a class="LC_menubuttons_link" href="javascript:makesmpproblem();">$lt{'sipr'}</a>
  $help{'Simple Problem'}   $help{'Simple Problem'}
  </form>   </form>
   
Line 3167  NSPROBFORM Line 3253  NSPROBFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makedropbox();">$lt{'drbx'}</a>   <a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>
  </form>   </form>
 NDBFORM  NDBFORM
   
Line 3176  NDBFORM Line 3262  NDBFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makeexamupload();">$lt{'scuf'}</a>   <a class="LC_menubuttons_link" href="javascript:makeexamupload();">$lt{'scuf'}</a>
  $help{'Score_Upload_Form'}   $help{'Score_Upload_Form'}
  </form>   </form>
 NEXUFORM  NEXUFORM
Line 3186  NEXUFORM Line 3272  NEXUFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makebulboard();" >$lt{'bull'}</a>   <a class="LC_menubuttons_link" href="javascript:makebulboard();" >$lt{'bull'}</a>
  $help{'Bulletin Board'}   $help{'Bulletin Board'}
  </form>   </form>
 NBFORM  NBFORM
Line 3197  NBFORM Line 3283  NBFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$plainname=/adm/$udom/$uname/aboutme" />   value="$plainname=/adm/$udom/$uname/aboutme" />
  <a onclick="document.newaboutme.submit()">$lt{'mypi'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newaboutme.submit()">$lt{'mypi'}</a>
  $help{'My Personal Information Page'}   $help{'My Personal Information Page'}
  </form>   </form>
 NAMFORM  NAMFORM
Line 3207  NAMFORM Line 3293  NAMFORM
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makeabout();">$lt{'abou'}</a>   <a class="LC_menubuttons_link" href="javascript:makeabout();">$lt{'abou'}</a>
  </form>   </form>
 NASOFORM  NASOFORM
   
Line 3218  NASOFORM Line 3304  NASOFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'rost'}=/adm/viewclasslist" />   value="$lt{'rost'}=/adm/viewclasslist" />
  <a onclick="document.newroster.submit()">$lt{'rost'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>
  $help{'Course Roster'}   $help{'Course Roster'}
  </form>   </form>
 NROSTFORM  NROSTFORM
   
 my $specialdocumentsform;  my $specialdocumentsform;
 my @specialdocumentsforma;  my @specialdocumentsforma;
   my $gradingform;
   my @gradingforma;
   my $communityform;
   my @communityforma;
 my $newfolderform;  my $newfolderform;
 my $newfolderb;  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);   my $newpageform=(<<NPFORM);
  <form action="/adm/coursedocs" method="post" name="newpage">   <form action="/adm/coursedocs" method="post" name="newpage">
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <input type="hidden" name="active" value="cc" />   <input type="hidden" name="active" value="cc" />
  <a onclick="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>   <a class="LC_menubuttons_link" href="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>
  $help{'Adding_Pages'}   $help{'Adding_Pages'}
  </form>   </form>
 NPFORM  NPFORM
Line 3247  NPFORM Line 3336  NPFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <input type="hidden" name="active" value="aa" />   <input type="hidden" name="active" value="aa" />
  <a onclick="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}   <a href="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}
  </form>   </form>
 NFFORM  NFFORM
   
Line 3257  NFFORM Line 3346  NFFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />   value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />
  <a onclick="document.newsyl.submit()">$lt{'syll'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newsyl.submit()">$lt{'syll'}</a>
  $help{'Syllabus'}   $help{'Syllabus'}
   
  </form>   </form>
Line 3269  NSYLFORM Line 3358  NSYLFORM
  $uploadtag   $uploadtag
  <input type="hidden" name="importdetail"   <input type="hidden" name="importdetail"
  value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />   value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />
  <a onclick="document.newgroupfiles.submit()">$lt{'grpo'}</a>   <a class="LC_menubuttons_link" href="javascript:document.newgroupfiles.submit()">$lt{'grpo'}</a>
  $help{'Group Portfolio'}   $help{'Group Portfolio'}
  </form>   </form>
 NGFFORM  NGFFORM
  @specialdocumentsforma=(   @specialdocumentsforma=(
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/page.png" alt="'.&mt('New Composite Page').'" />'=>$newpageform},   {'<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" align="left" src="/res/adm/pages/syllabus.png" alt="'.&mt('Syllabus').'" />'=>$newsylform},   {'<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" align="left" src="/res/adm/pages/groupportfolio.png" alt="'.&mt('Group Portfolio').'" />'=>$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));
  push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/navigation.png" alt="'.&mt('Navigate Contents').'" />'=>$newnavform},  
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/simple.png" alt="'.&mt('Simple Course Page').'" />'=>$newsmppageform},  
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" />'=>$newsmpproblemform},          my @importdoc = (
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/dropbox.png" alt="'.&mt('Drop Box').'" />'=>$newdropboxform},          {'<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" align="left" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" />'=>$newexuploadform},          {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/bchat.png" alt="'.&mt('Discussion Board').'" />'=>$newbulform},          $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/myaboutme.png" alt="'.&mt('My Personal Information Page').'" />'=>$newaboutmeform},  
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/aboutme.png" alt="'.&mt('Personal Information Page for a User').'" />'=>$newaboutsomeoneform},          @gradingforma=(
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/chrt.png" alt="'.&mt('Course Roster').'" />'=>$newrosterform},);          {'<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" align="left" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" />'=>$newsmpproblemform},  
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" />'=>$newexuploadform}  
  );  
  $specialdocumentsform= create_form_ul(create_list_elements(@specialdocumentsforma));  
 }  
   
 my @tools = (  my @tools = (
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.&mt('External Resource').'" />'=>$extresourcesform},  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.&mt('IMS Import').'" />'=>$imspform},  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" />'=>$imspform},
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/recover.png" alt="'.&mt('Recover Deleted Resources').'" />'=>$recoverform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1)" />'=>$recoverform},
  );   );
   
 my %orderhash = (  my %orderhash = (
  '00' => ['Newfolder',$newfolderform],                  'aa' => ['Import Documents',$fileuploadform],
                 'aa' => ['Upload Document',$fileuploadform],  
                 'bb' => ['Published Resources',$simpleeditdefaultform],                  'bb' => ['Published Resources',$simpleeditdefaultform],
                 'cc' => ['Special Documents',$specialdocumentsform],                  'cc' => ['Grading Resources',$gradingform],
  'dd' => ['Tools', create_form_ul(create_list_elements(@tools)).&generate_admin_options($containertag,$uploadtag,\%help,\%env)],   'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );                  );
 my $tid='1';  unless ($env{'form.pagepath'}) {
       $orderhash{'00'} = ['Newfolder',$newfolderform];
       $orderhash{'dd'} = ['Community Resources',$communityform];
       $orderhash{'ee'} = ['Special Documents',$specialdocumentsform];
   }
   
  $hadchanges=0;   $hadchanges=0;
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);         unless ($supplementalflag) {
        if ($error) {            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
            $r->print('<p><span class="LC_error">'.$error.'</span></p>');            if ($error) {
        }               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
        if ($hadchanges) {            }
            &mark_hash_old();            if ($hadchanges) {
        }               &mark_hash_old();
             }
   
        &changewarning($r,'');            &changewarning($r,'');
 $r->print(&generate_edit_table($tid,\%orderhash));            $r->print(&generate_edit_table('1',\%orderhash));
           }
   
 $r->print('</div>');  
  }   }
        if ($env{'form.pagepath'}) {  
        }  # Supplemental documents start here
 # ----------------------------------------------------- Supplemental documents  
        $active = 'style="display: none;"';  
        if($activeClass == 1){  
           $active = 'style="display: block;"';  
        }  
        $r->print('<div class="LC_ContentBox" id="supplCourseDocuments" '.$active.'>');  
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        unless ($folder=~/^supplemental/) {         unless ($supplementalflag) {
    $folder='supplemental';     $folder='supplemental';
        }         }
        if ($folder =~ /^supplemental$/ &&         if ($folder =~ /^supplemental$/ &&
    (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {     (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {
           $env{'form.folderpath'} = 'supplemental&'.            $env{'form.folderpath'} = &supplemental_base();
                                     &escape(&mt('Supplemental '.$crstype.' Documents'));  
        } elsif ($allowed) {         } elsif ($allowed) {
   $env{'form.folderpath'} = $savefolderpath;    $env{'form.folderpath'} = $savefolderpath;
        }         }
Line 3373  $r->print('</div>'); Line 3466  $r->print('</div>');
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="cmd" value="upload_supplemental" />   <input type="hidden" name="cmd" value="upload_supplemental" />
 SUPDOCFORM  SUPDOCFORM
  $supupdocform .=  create_form_ul(Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";   $supupdocform .=  &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";
   
  my $supnewfolderform=(<<SNFFORM);   my $supnewfolderform=(<<SNFFORM);
  <form action="/adm/coursedocs" method="post" name="supnewfolder">   <form action="/adm/coursedocs" method="post" name="supnewfolder">
  <input type="hidden" name="active" value="ee" />   <input type="hidden" name="active" value="ee" />
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a>    <a class="LC_menubuttons_link" href="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a> 
  $help{'Adding_Folders'}   $help{'Adding_Folders'}
  </form>   </form>
 SNFFORM  SNFFORM
Line 3391  SNFFORM Line 3484  SNFFORM
  <input type="hidden" name="active" value="ff" />   <input type="hidden" name="active" value="ff" />
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="importdetail" value="" />
  <a onclick="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}   <a class="LC_menubuttons_link" href="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}
  </form>   </form>
 SNEFORM  SNEFORM
   
Line 3401  SNEFORM Line 3494  SNEFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="Syllabus=/public/$coursedom/$coursenum/syllabus" />   value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
  <a onclick="document.supnewsyl.submit()">$lt{'syll'}</a>   <a class="LC_menubuttons_link" href="javascript:document.supnewsyl.submit()">$lt{'syll'}</a>
  $help{'Syllabus'}   $help{'Syllabus'}
  </form>   </form>
 SNSFORM  SNSFORM
Line 3412  SNSFORM Line 3505  SNSFORM
  <input type="hidden" name="folderpath" value="$path" />   <input type="hidden" name="folderpath" value="$path" />
  <input type="hidden" name="importdetail"    <input type="hidden" name="importdetail" 
  value="$plainname=/adm/$udom/$uname/aboutme" />   value="$plainname=/adm/$udom/$uname/aboutme" />
  <a onclick="document.supnewaboutme.submit()">$lt{'mypi'}</a>   <a class="LC_menubuttons_link" href="javascript:document.supnewaboutme.submit()">$lt{'mypi'}</a>
  $help{'My Personal Information Page'}   $help{'My Personal Information Page'}
  </form>   </form>
 SNAMFORM  SNAMFORM
   
   
 my @specialdocs = (  my @specialdocs = (
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.&mt('External Resource').'" />'=>$supnewextform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.supnewsyl.submit()" />'
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/syllabus.png" alt="'.&mt('Syllabus').'" />'=>$supnewsylform},              =>$supnewsylform},
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/myaboutme.png" alt="'.&mt('My Personal Information Page').'" />'=>$supnewaboutmeform},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="document.supnewaboutme.submit()" />'
               =>$supnewaboutmeform},
  );   );
   my @supimportdoc = (
    {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />'
               =>$supnewextform},
           );
   $supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr/>' . $supupdocform;
 my %suporderhash = (  my %suporderhash = (
  '00' => ['Supnewfolder', $supnewfolderform],   '00' => ['Supnewfolder', $supnewfolderform],
                 'ee' => ['Upload Document',$supupdocform],                  'ee' => ['Import Documents',$supupdocform],
                 'ff' => ['Special Documents',create_form_ul(create_list_elements(@specialdocs))]                  'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))]
                 );                  );
           if ($supplementalflag) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);             my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
         if ($error) {             if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');                $r->print('<p><span class="LC_error">'.$error.'</span></p>');
              }
              $r->print(&generate_edit_table('2',\%suporderhash));
         }          }
         my $tid='2';      } elsif ($supplementalflag) {
         $r->print(&generate_edit_table($tid,\%suporderhash));  
     } else {  
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
         if ($error) {          if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');              $r->print('<p><span class="LC_error">'.$error.'</span></p>');
         }          }
     }      }
   
       &endContentScreen($r);
 $r->print('</div>');  
 $r->print('</div></div>');  
   
   
     if ($allowed) {      if ($allowed) {
  $r->print('   $r->print('
Line 3457  $r->print('</div></div>'); Line 3553  $r->print('</div></div>');
 </form>');  </form>');
     }      }
   } else {    } else {
       unless ($upload_result eq 'phasetwo') {        unless ($uploadphase) {
 # -------------------------------------------------------- This is showdoc mode  # -------------------------------------------------------- This is showdoc mode
           $r->print("<h1>".&mt('Uploaded Document').' - '.            $r->print("<h1>".&mt('Uploaded Document').' - '.
  &Apache::lonnet::gettitle($r->uri).'</h1><p>'.   &Apache::lonnet::gettitle($r->uri).'</h1><p>'.
Line 3470  $r->print('</div></div>'); Line 3566  $r->print('</div></div>');
  return OK;   return OK;
 }  }
   
   sub embedded_form_elems {
       my ($phase,$primaryurl,$newidx) = @_;
       my $folderpath = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
       return <<STATE;
       <input type="hidden" name="folderpath" value="$folderpath" />
       <input type="hidden" name="cmd" value="upload_embedded" />
       <input type="hidden" name="newidx" value="$newidx" />
       <input type="hidden" name="phase" value="$phase" />
       <input type="hidden" name="primaryurl" value="$primaryurl" />
   STATE
   }
   
   sub embedded_destination {
       my $folder=$env{'form.folder'};
       my $destination = 'docs/';
       if ($folder =~ /^supplemental/) {
           $destination = 'supplemental/';
       }
       if (($folder eq 'default') || ($folder eq 'supplemental')) {
           $destination .= 'default/';
       } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
           $destination .=  $2.'/';
       }
       $destination .= $env{'form.newidx'};
       my $dir_root = '/userfiles';
       return ($destination,$dir_root);
   }
   
   sub return_to_editor {
       my $actionurl = '/adm/coursedocs';
       return '<p><form name="backtoeditor" method="post" action="'.$actionurl.'" />'."\n". 
              '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" /></form>'."\n".
              '<a href="javascript:document.backtoeditor.submit();">'.&mt('Return to Editor').
              '</a></p>';
   }
   
 sub generate_admin_options {  sub generate_admin_options {
   my ($containertag,$uploadtag,$help_ref,$env_ref) = @_;    my ($help_ref,$env_ref) = @_;
  my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
                                          'vc' => 'Verify Content',                                           'vc' => 'Verify Content',
                                          'cv' => 'Check/Set Resource Versions',                                           'cv' => 'Check/Set Resource Versions',
                                          'ls' => 'List Symbs',                                           'ls' => 'List Symbs',
                                          'sl' => 'Show Log'                                           'sl' => 'Show Log',
                                            'imse' => 'IMS Export',
                                            'dcd' => 'Dump Course Documents to Construction Space: available on other servers'
                                           );                                            );
   my %help = %{$help_ref};    my %help = %{$help_ref};
   my %env = %{$env_ref};    my %env = %{$env_ref};
   my $dumpbut=&dumpbutton();    my $dumpbut=&dumpbutton();
   my $exportbut=&exportbutton();    my $exportbut=&exportbutton();
   my @list = (    my @list = (
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/verify.png" alt="'.&mt('Verify Content').'" />'=>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/verify.png" alt="'.$lt{vc}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "verify", "'.$lt{'vc'}.'")\' />' 
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/resversion.png" alt="'.&mt('Check/Set Resource Versions').'" />'=>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"versions\", \"$lt{'cv'}\")'>$lt{'cv'}</a>$help{'Check_Resource_Versions'}"},          => "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},
    {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/resversion.png" alt="'.$lt{cv}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "versions", "'.$lt{'cv'}.'")\' />'
           =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"versions\", \"$lt{'cv'}\")'>$lt{'cv'}</a>$help{'Check_Resource_Versions'}"},
  );   );
   if($dumpbut ne ''){    if($dumpbut ne ''){
   push @list, {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/dump.png" alt="'.&mt('Dump Course DOCS to Construction Space: available on other servers').'" />'=>$dumpbut};    push @list, {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dump.png" alt="'.$lt{dcd}.'" />'=>$dumpbut};
   }    }
   push @list, ({'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/imsexport.png" alt="'.&mt('IMS Export').'" />'=>$exportbut},    push @list, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/imsexport.png" alt="'.$lt{imse}.'" onclick="javascript:injectData(document.courseverify, \'dummy\', \'exportcourse\', \''.&mt('IMS Export').'\');" />'
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/symbs.png" alt="'.&mt('List Symbs').'" />'=>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"listsymbs\", \"$lt{'ls'}\")'>$lt{'ls'}</a><input type='hidden' name='folder' value='$env{'form.folder'}' />"},            =>$exportbut},
  {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/log.png" alt="'.&mt('Show Log').'" />'=>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"docslog\", \"$lt{'sl'}\")'>$lt{'sl'}</a>"},   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/symbs.png" alt="'.$lt{ls}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "listsymbs", "'.$lt{'ls'}.'")\'  />'
           =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"listsymbs\", \"$lt{'ls'}\")'>$lt{'ls'}</a><input type='hidden' name='folder' value='$env{'form.folder'}' />"},
    {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/document-properties.png" alt="'.$lt{sl}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "docslog", "'.$lt{'sl'}.'")\'  />'
           =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"docslog\", \"$lt{'sl'}\")'>$lt{'sl'}</a>"},
  );   );
   return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.create_form_ul(create_list_elements(@list)).'</form>';    return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.&create_form_ul(&create_list_elements(@list)).'</form>';
   
 }  }
   
Line 3508  sub generate_edit_table { Line 3647  sub generate_edit_table {
     if($env{'form.active'} ne ''){      if($env{'form.active'} ne ''){
         $activetab = $env{'form.active'};          $activetab = $env{'form.active'};
     }      }
     $form = '<div class="LC_Box">';      $form = '<div class="LC_Box" style="margin-right:0">';
     $form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">';      $form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">';
     foreach my $name (sort(keys(%orderhash))){      foreach my $name (sort(keys(%orderhash))){
         if($name ne '00'){          if($name ne '00'){
Line 3517  sub generate_edit_table { Line 3656  sub generate_edit_table {
             }elsif($activetab eq $name){              }elsif($activetab eq $name){
                $active = 'class="active"';                 $active = 'class="active"';
             }              }
             $form .= '<li '.$active.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');">'.&mt(${$orderhash{$name}}[0]).'</li>';              $form .= '<li '.$active
                   .' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"'
                   .' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>';
         } else {          } else {
     $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';      $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';
   
Line 3527  sub generate_edit_table { Line 3668  sub generate_edit_table {
     $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">';      $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">';
     foreach my $field (keys(%orderhash)){      foreach my $field (keys(%orderhash)){
  if($field ne '00'){   if($field ne '00'){
         if($activetab eq '' || $activetab ne $field){              if($activetab eq '' || $activetab ne $field){
                 $active = 'style="display: none;"';                  $active = 'style="display: none;"';
         }elsif($activetab eq $field){              }elsif($activetab eq $field){
                 $active = 'style="display:block;"';                  $active = 'style="display:block;"';
         }              }
            $form .= '<div id="'.$field.$tid.'"'              $form .= '<div id="'.$field.$tid.'"'
                    .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]                      .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
                    .'</div>';                      .'</div>';
         }          }
     }      }
     $form .= '</div></div>';      $form .= '</div></div>';
Line 3542  sub generate_edit_table { Line 3683  sub generate_edit_table {
     return $form;      return $form;
 }  }
   
 sub concept_test_builder {  
     my ($r,$cdom,$cnum) = @_;  
     &Apache::londocsgci::setdefaults();  
     my $js = '  
 <script type="text/javascript">  
 // <![CDATA[  
 '.  
 &Apache::londocsgci::builder_javascript().  
 '  
 // ]]>  
 </script>  
 ';  
     $r->print(&Apache::loncommon::start_page('Assemble Test',$js));  
     &Apache::lonhtmlcommon::clear_breadcrumbs();  
     &Apache::lonhtmlcommon::add_breadcrumb  
             ({href=>'/adm/coursedocs',  
               text=>"Assemble Test"});  
     if ($env{'form.phase'} eq 'storemap') {  
         &Apache::lonhtmlcommon::add_breadcrumb  
             ({href=>'/adm/coursedocs?phase=storemap',  
               text=>"Validate Test"});  
         &Apache::londocsgci::evaluate();  
         $r->print(&Apache::lonhtmlcommon::breadcrumbs  
                   ('Build Concept Test','Concept_Test_Assembly'));  
         $r->print(&Apache::londocsgci::store('edit',$cdom,$cnum));  
     } elsif ($env{'form.phase'} eq 'storeparms') {  
         &Apache::lonhtmlcommon::add_breadcrumb  
             ({href=>'/adm/coursedocs?phase=storeparms',  
               text=>"Set Availability"});  
         $r->print(&Apache::lonhtmlcommon::breadcrumbs  
                   ('Build Concept Test','Concept_Test_Assembly'));  
         $r->print(&Apache::londocsgci::store_dates_parms($cdom,$cnum));  
         $r->print(&Apache::loncommon::end_page());  
         return;  
     } else {  
         $r->print(&Apache::lonhtmlcommon::breadcrumbs  
                   ('Build Concept Test','Concept_Test_Assembly'));  
     }  
     &Apache::londocsgci::load();  
     &Apache::londocsgci::listresources($r,'edit',$cdom,$cnum);  
     $r->print(&Apache::loncommon::end_page());  
     return;  
 }  
   
 sub editing_js {  sub editing_js {
     my ($udom,$uname) = @_;      my ($udom,$uname) = @_;
     my $now = time();      my $now = time();
Line 3594  sub editing_js { Line 3691  sub editing_js {
                                           t_mnf => 'New Folder',                                            t_mnf => 'New Folder',
                                           p_mnp => 'Name of New Page',                                            p_mnp => 'Name of New Page',
                                           t_mnp => '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_msp => 'Name of Simple Course Page',
                                           p_msb => 'Title for the Problem',                                            p_msb => 'Title for the Problem',
                                           p_mdb => 'Title for the Drop Box',                                            p_mdb => 'Title for the Drop Box',
Line 3613  sub editing_js { Line 3710  sub editing_js {
                                           p_ctr2b => '?[_98]'                                            p_ctr2b => '?[_98]'
                                         );                                          );
   
       my $crstype = &Apache::loncommon::course_type();
       my $docs_folderpath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'},'<>&"');
       my $docs_pagepath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.pagepath'},'<>&"');
       my $main_container_page;
       if ($docs_folderpath eq '') {
           if ($docs_pagepath ne '') {
               $main_container_page = 1;
           }
       }
       my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents';
       my $toplevelsupp = &supplemental_base();
   
     return <<ENDNEWSCRIPT;      return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {  function makenewfolder(targetform,folderseq) {
     var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');      var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');
Line 3824  function openTabs(pageId) { Line 3933  function openTabs(pageId) {
  if(currentLis[i].className == 'active') {   if(currentLis[i].className == 'active') {
  funcString = currentLis[i].onclick.toString();   funcString = currentLis[i].onclick.toString();
  tab = funcString.split('"');   tab = funcString.split('"');
                                   if(tab.length < 2) {
                                      tab = funcString.split("'");
                                   }
  currentData = document.getElementById(tab[1]);   currentData = document.getElementById(tab[1]);
         currentData.style.display = 'block';          currentData.style.display = 'block';
  }   }
Line 3838  function showPage(current, pageId, nav, Line 3950  function showPage(current, pageId, nav,
  current.className = 'active';   current.className = 'active';
  currentData = document.getElementById(pageId);   currentData = document.getElementById(pageId);
  currentData.style.display = 'block';   currentData.style.display = 'block';
           resize_contentdiv('contentscroll');
           if (nav == 'mainnav') {
               var storedpath = "$docs_folderpath";
               if (storedpath == '') {
                   storedpath = "$docs_pagepath";
               }
               var storedpage = "$main_container_page";
               var reg = new RegExp("^supplemental");
               if (pageId == 'mainCourseDocuments') {
                   if (storedpage == 1) {
                       document.simpleedit.folderpath.value = '';
                       document.uploaddocument.folderpath.value = '';
                   } else {
                       if (reg.test(storedpath)) {
                           document.simpleedit.folderpath.value = '$toplevelmain';
                           document.uploaddocument.folderpath.value = '$toplevelmain';
                           document.newext.folderpath.value = '$toplevelmain';
                       } else {
                           document.simpleedit.folderpath.value = storedpath;
                           document.uploaddocument.folderpath.value = storedpath;
                           document.newext.folderpath.value = storedpath;
                       }
                   }
               } else {
                   if (reg.test(storedpath)) {
                       document.simpleedit.folderpath.value = storedpath;
                       document.supuploaddocument.folderpath.value = storedpath;
                       document.supnewext.folderpath.value = storedpath;
                   } else {
                       document.simpleedit.folderpath.value = '$toplevelsupp';
                       document.supuploaddocument.folderpath.value = '$toplevelsupp';
                       document.supnewext.folderpath.value = '$toplevelsupp';
                   }
               }
           }
  return false;   return false;
 }  }
   
Line 3850  function injectData(current, hiddenField Line 3997  function injectData(current, hiddenField
   
 ENDNEWSCRIPT  ENDNEWSCRIPT
 }  }
   
   sub resize_contentdiv_js {
       my $viewport_js = &Apache::loncommon::viewport_geometry_js();
       return <<ENDRESIZESCRIPT;
   
   $viewport_js
   
   function resize_contentdiv(scrollboxid) {
       if (document.getElementById("contenteditor") == null) {
           return;
       }
       init_geometry();
       var vph = Geometry.getViewportHeight();
   
       var primaryheight = document.getElementById("LC_nav_bar").offsetHeight;
       var secondaryheight = document.getElementById("LC_secondary_menu").offsetHeight;
       var crumbsheight = document.getElementById("LC_breadcrumbs").offsetHeight;
       var dccidheight = document.getElementById("dccid").offsetHeight;
   
       var uploadresultheight = 0;
       if (document.getElementById("uploadfileresult") != null) {
           uploadresultheight = document.getElementById("uploadfileresult").offsetHeight;
       }
       var tabbedheight = document.getElementById("tabbededitor").offsetHeight;
       var contenteditorheight = document.getElementById("contenteditor").offsetHeight;
       if (document.getElementById(scrollboxid) != null) {
           var scrollbox =  document.getElementById(scrollboxid);
           var scrollboxheight = scrollbox.offsetHeight;
           var scrollboxscrollheight = scrollbox.scrollHeight;
   
           var freespace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight);
   
           var minscrollbox = 60;
           var offset = 20;
           var newscrollboxheight;
           if (freespace < 0) {
               newscrollboxheight = scrollboxheight+freespace-offset;
               if (newscrollboxheight < minscrollbox) {
                   newscrollboxheight = minscrollbox;
               }
               scrollbox.style.height = newscrollboxheight + "px";
           } else {
               if (scrollboxscrollheight > scrollboxheight) {
                   if (freespace > offset) {
                       newscrollboxheight = scrollboxheight+freespace-offset;
                       if (newscrollboxheight < minscrollbox) {
                           newscrollboxheight = minscrollbox;
                       }
                       scrollbox.style.height = newscrollboxheight+"px";
                   }
               }
           }
           scrollboxheight = scrollbox.offsetHeight;
   
           if (scrollboxscrollheight <= scrollboxheight) {
               var contentlistheight = document.getElementById("contentlist").offsetHeight;
               if ((contentlistheight+offset)<scrollboxheight) {
                   newscrollheight = contentlistheight;
                   scrollbox.style.height = newscrollheight+"px";
               }
           }
       }
   }
   
   ENDRESIZESCRIPT
       return;
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.411.2.5  
changed lines
  Added in v.1.457


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>