Diff for /loncom/interface/londocs.pm between versions 1.325.2.1 and 1.423

version 1.325.2.1, 2009/05/21 02:47:48 version 1.423, 2010/03/18 16:33:44
Line 35  use Apache::Constants qw(:common :http); Line 35  use Apache::Constants qw(:common :http);
 use Apache::imsexport;  use Apache::imsexport;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonhtmlcommon;
 use LONCAPA::map();  use LONCAPA::map();
 use Apache::lonratedt();  use Apache::lonratedt();
 use Apache::lonxml;  use Apache::lonxml;
Line 59  my $hadchanges; Line 60  my $hadchanges;
 my %help=();  my %help=();
   
   
   
 sub mapread {  sub mapread {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     return      return
Line 73  sub storemap { Line 73  sub storemap {
       &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
       $map,1);        $map,1);
     if ($errtext) { return ($errtext,2); }      if ($errtext) { return ($errtext,2); }
       
     $hadchanges=1;      $hadchanges=1;
     return ($errtext,0);      return ($errtext,0);
 }  }
Line 117  sub authorhosts { Line 117  sub authorhosts {
   
 sub dumpbutton {  sub dumpbutton {
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     if ($home) {      if ($home) {
  return '<div>'.          my $link =
     '<input type="submit" name="dumpcourse" value="'.              "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \""
     &mt('Dump '.$type.' DOCS to Construction Space').'" />'.             .&mt('Dump '.$crstype.' Documents to Construction Space')
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').             ."\")'>"
     '</div>';             .&mt('Dump '.$crstype.' Documents to Construction Space')
     } else {             .'</a>';
  return '<div>'.          return
      &mt('Dump '.$type.              $link.' '
  ' DOCS to Construction Space: available on other servers').             .&Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs')
  '</div>';             .'<br />';
       } else {
           return
               &mt('Dump '.$crstype.' Documents to Construction Space: available on other servers');
     }      }
 }  }
   
 sub clean {  sub clean {
     my ($title)=@_;      my ($title)=@_;
     $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs;      $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs;
     return $title;      return $title;
 }  }
   
   
   
 sub dumpcourse {  sub dumpcourse {
     my ($r) = @_;      my ($r) = @_;
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').      $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Documents to Construction Space').
       '<form name="dumpdoc" method="post">');        '<form name="dumpdoc" action="" method="post">');
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$type.' 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 178  sub dumpcourse { Line 181  sub dumpcourse {
     my $fail=0;      my $fail=0;
     for (my $i=0;$i<$#dirs;$i++) {      for (my $i=0;$i<$#dirs;$i++) {
  $makepath.='/'.$dirs[$i];   $makepath.='/'.$dirs[$i];
  unless (-e $makepath) {    unless (-e $makepath) {
     unless(mkdir($makepath,0777)) { $fail=1; }       unless(mkdir($makepath,0777)) { $fail=1; }
  }   }
     }      }
     $r->print('<br /><tt>'.$item.'</tt> => <tt>'.$newfilename.'</tt>: ');      $r->print('<br /><tt>'.$item.'</tt> => <tt>'.$newfilename.'</tt>: ');
Line 257  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 $type DOCS").'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype Documents").'" /></p></form>');
     }      }
 }  }
   
   
   
 sub exportbutton {  sub exportbutton {
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     return '<div>'.      return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".
             '<input type="submit" name="exportcourse" value="'.      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';
             &mt('Export '.$type.' to IMS').'" />'.  
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'</div>';  
 }  }
   
   
   
 sub exportcourse {  sub exportcourse {
     my $r=shift;      my $r=shift;
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     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 $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package').          $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').
                   '<h2>IMS Export Failed</h2>'.                    '<h2>'.&mt('IMS Export Failed').'</h2>'.
                   '<div class="LC_error">'.                    '<div class="LC_error">');
                   &mt('Unable to retrieve information about course contents').          if ($crstype eq 'Community') {
                   '</div><a href="/adm/coursedocs">'.&mt('Return to Course Editor').'</a>');              $r->print(&mt('Unable to retrieve information about community contents'));
         &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});          } else {
               $r->print(&mt('Unable to retrieve information about course contents'));
           }
           $r->print('</div><a href="/adm/coursedocs">');
           if ($crstype eq 'Community') {
               $r->print(&mt('Return to Community Editor'));
           } else {
               $r->print(&mt('Return to Course Editor'));
           }
           $r->print('</a>');
           &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
         return;          return;
     }      }
     my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);      my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
Line 302  sub exportcourse { Line 313  sub exportcourse {
         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) {
             $outcome = '<br />As you did not select any content items or discussions for export, an IMS package has not been created.  Please <a href="javascript:history.go(-1)">go back</a> to select either content items or discussions for export';              $outcome = 
                   '<p class="LC_warning">'
                  .&mt('As you did not select any content items or discussions'
                      .' for export, an IMS package has not been created.')
                  .'</p>'
                  .'<p>'
                  .&mt('Please [_1]go back[_2] to select either content items'
                      .' or discussions for export.'
                          ,'<a href="javascript:history.go(-1)">'
                          ,'</a>')
                  .'</p>';
         } else {          } else {
             my $now = time;              my $now = time;
             my %symbs;              my %symbs;
Line 325  sub exportcourse { Line 346  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 .= &mt('Download the zip file from <a href="[_1]">IMS '.lc($type).' archive</a><br />',$imszipfile,);                  $outcome .= '<p>'
                              .&mt('[_1]Your IMS package[_2] is ready for download.'
                                  ,'<a href="'.$imszipfile.'">','</a>')
                              .'</p>';
                 if ($copyresult) {                  if ($copyresult) {
                     $outcome .= &mt('The following errors occurred during export - [_1]',$copyresult);                      $outcome .= '<p class="LC_error">'
                                  .&mt('The following errors occurred during export - [_1]'
                                      ,$copyresult)
                                  .'</p>';
                 }                  }
             } else {              } else {
                 $outcome = '<br />'.&mt('Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.').'<br />';                  $outcome = '<p class="LC_error">'
                             .&mt('Unfortunately you will not be able to retrieve'
                                 .' an IMS archive of your course at this time,'
                                 .' because there was a problem creating a'
                                 .' manifest file.')
                             .'</p>'
                             .'<p><a href="javascript:history.go(-1)">'
                             .&mt('Go Back')
                             .'</a></p>';
             }              }
         }          }
         $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package'));          $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package'));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
         $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" method="post">'."\n";                      '<p>'.
         $display .= &mt('Choose which items you wish to export from your '.$type.'.<br /><br />');                      &mt('Choose which items you wish to export from your '.$crstype.'.').
         $display .= '<table border="0" cellspacing="0" cellpadding="3">'.                      '</p>'.
                     '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.                      '<div class="LC_columnSection"><fieldset>'.
                     '<input type="button" value="check all" '.                      '<legend>'.&mt('Content items').'</legend>'.
                       '<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="uncheck all"'.                      '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                     ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset></td>'.                      ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>';
                     '<td>&nbsp;</td><td>&nbsp;</td>'.          if ($numdisc > 0) {
                     '<td align="right"><fieldset><legend>&nbsp;<b>Discussion posts'.              $display .= '<fieldset>'.
                     '</b></legend><input type="button" value="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="uncheck all"'.                          ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
                     ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" /></fieldset></td>'.                          '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                     '</tr></table>';                          ' 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 362  sub exportcourse { Line 401  sub exportcourse {
         my %parent = ();          my %parent = ();
         my %children = ();          my %children = ();
         my $lastcontainer = $startcount;          my $lastcontainer = $startcount;
         my @bgcolors = ('#F6F6F6','#FFFFFF');          $display .= &Apache::loncommon::start_data_table()
         $display .= '<table cellspacing="0"><tr>'.                     .&Apache::loncommon::start_data_table_header_row()
             '<td><b>Export content item?<br /></b></td><td>&nbsp;</td><td align="right">'."\n";                     .'<th>'.&mt('Export content item?').'</th>';
         if ($numdisc > 0) {          if ($numdisc > 0) {
             $display.='<b>Export&nbsp;discussion posts?</b>'."\n";              $display .= '<th>'.&mt('Export discussion posts?').'</th>';
         }          }
         $display.='&nbsp;</td></tr>';          $display .= &Apache::loncommon::end_data_table_header_row();
         while ($curRes = $it->next()) {          while ($curRes = $it->next()) {
             if (ref($curRes)) {              if (ref($curRes)) {
                 $count ++;                  $count ++;
Line 389  sub exportcourse { Line 428  sub exportcourse {
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                          $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                     }                      }
                 }                  }
                 my $color = $count%2;                  my $currelem = $count+$boards+$startcount;
                 $display .='<tr bgcolor='.$bgcolors[$color].'><td>'."\n".                  $display .= &Apache::loncommon::start_data_table_row()
                     '<input type="checkbox" name="archive" value="'.$count.'" ';                             .'<td>'."\n"
                              .'<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'".')"';
                 }                  }
                 $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" /><img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" />'."\n";                      $display .= ('<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />' x2)."\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>';                  $display .= '&nbsp;'.$curRes->title().'</td>'."\n";
   
                   # Existing discussion posts?
                 if ($discussiontime{$ressymb} > 0) {                  if ($discussiontime{$ressymb} > 0) {
                     $boards ++;                      $boards ++;
                     $currelem = $count+$boards+$startcount;                      $display .= '<td align="right">'
                     $display .= '<td>&nbsp;</td><td align="right"><input type="checkbox" name="discussion" value="'.$count.'" />&nbsp;</td>'."\n";                                 .'<input type="checkbox" name="discussion" value="'.$count.'" />'
                 } else {                                 .'</td>'."\n";
                     $display .= '<td colspan="2">&nbsp;</td>'."\n";                  } elsif ($numdisc > 0) {
                       $display .= '<td>&nbsp;</td>'."\n";
                 }                  }
                   $display .= &Apache::loncommon::end_data_table_row();
             }              }
         }          }
           $display .= &Apache::loncommon::end_data_table();
         my $scripttag = qq|          my $scripttag = qq|
 <script>  <script type="text/javascript">
   // <![CDATA[
 function checkAll(field) {  function checkAll(field) {
     if (field.length > 0) {      if (field.length > 0) {
         for (i = 0; i < field.length; i++) {          for (i = 0; i < field.length; i++) {
Line 431  function checkAll(field) { Line 473  function checkAll(field) {
         field.checked = true          field.checked = true
     }      }
 }  }
                                                                                   
 function uncheckAll(field) {  function uncheckAll(field) {
     if (field.length > 0) {      if (field.length > 0) {
         for (i = 0; i < field.length; i++) {          for (i = 0; i < field.length; i++) {
Line 446  function propagateCheck(item) { Line 488  function propagateCheck(item) {
     if (document.exportdoc.elements[item].checked == true) {      if (document.exportdoc.elements[item].checked == true) {
         containerCheck(item)          containerCheck(item)
     }      }
 }   }
   
 function containerCheck(item) {  function containerCheck(item) {
     document.exportdoc.elements[item].checked = true      document.exportdoc.elements[item].checked = true
Line 469  function containerCheck(item) { Line 511  function containerCheck(item) {
         for (var j=0; j<parents[item].length; j++) {          for (var j=0; j<parents[item].length; j++) {
             containerCheck(parents[item][j])              containerCheck(parents[item][j])
         }          }
      }          }
 }  }
   // ]]>
 </script>  </script>
         |;          |;
  $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package',   $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',
  $scripttag));   $scripttag));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
  $r->print($display.'</table>'.   $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="'.
                   &mt('Export '.$type.' DOCS').'" /></p></form>');                    &mt('Export').'" /></p></form>');
     }      }
 }  }
   
Line 763  sub replicate_content { Line 805  sub replicate_content {
     if ($caller eq 'templateupload') {      if ($caller eq 'templateupload') {
         $url = $symb;          $url = $symb;
         $url =~ s#//#/#g;          $url =~ s#//#/#g;
     } else {       } else {
         ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);          ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
     }      }
     my $content;      my $content;
Line 803  sub replicate_content { Line 845  sub replicate_content {
                     $$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') {
 # 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.
                 $repstatus = 'ok';                  $repstatus = 'ok';
                 $content = 'Not the owner of this resource';                   $content = 'Not the owner of this resource';
             }              }
             if ($repstatus eq 'ok') {              if ($repstatus eq 'ok') {
                 print $copiedfile $content;                  print $copiedfile $content;
Line 856  sub extract_media { Line 898  sub extract_media {
             }              }
         }          }
         if ($caller eq 'resource') {          if ($caller eq 'resource') {
             my $respath =  $Apache::lonnet::perlvar{'lonDocRoot'}.'/res';                my $respath =  $Apache::lonnet::perlvar{'lonDocRoot'}.'/res';
             my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url);               my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url);
             $embed_content = &Apache::lonnet::getfile($embed_path);              $embed_content = &Apache::lonnet::getfile($embed_path);
             unless ($embed_content eq -1) {              unless ($embed_content eq -1) {
                 $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 925  sub group_import { Line 967  sub group_import {
   
     while (@files) {      while (@files) {
  my ($name, $url, $residx) = @{ shift(@files) };   my ($name, $url, $residx) = @{ shift(@files) };
         if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$})           if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$})
      && ($caller eq 'londocs')       && ($caller eq 'londocs')
      && (!&Apache::lonnet::stat_file($url))) {       && (!&Apache::lonnet::stat_file($url))) {
       
             my $errtext = '';              my $errtext = '';
             my $fatal = 0;              my $fatal = 0;
             my $newmapstr = '<map>'."\n".              my $newmapstr = '<map>'."\n".
Line 948  sub group_import { Line 990  sub group_import {
             }              }
         }          }
  if ($url) {   if ($url) {
     if (!$residx       if (!$residx
  || defined($LONCAPA::map::zombies[$residx])) {   || defined($LONCAPA::map::zombies[$residx])) {
  $residx = &LONCAPA::map::getresidx($url,$residx);   $residx = &LONCAPA::map::getresidx($url,$residx);
  push(@LONCAPA::map::order, $residx);   push(@LONCAPA::map::order, $residx);
Line 957  sub group_import { Line 999  sub group_import {
     if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }      if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }
     $url  = &LONCAPA::map::qtunescape($url);      $url  = &LONCAPA::map::qtunescape($url);
     $name = &LONCAPA::map::qtunescape($name);      $name = &LONCAPA::map::qtunescape($name);
     $LONCAPA::map::resources[$residx] =       $LONCAPA::map::resources[$residx] =
  join(':', ($name, $url, $ext, 'normal', 'res'));   join(':', ($name, $url, $ext, 'normal', 'res'));
  }   }
     }      }
Line 965  sub group_import { Line 1007  sub group_import {
 }  }
   
 sub breadcrumbs {  sub breadcrumbs {
     my ($where,$allowed,$type)=@_;      my ($allowed,$crstype)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     my (@folders);      my (@folders);
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
Line 980  sub breadcrumbs { Line 1022  sub breadcrumbs {
     my $isencrypted=0;      my $isencrypted=0;
     my $ishidden=0;      my $ishidden=0;
     my $is_random_order=0;      my $is_random_order=0;
       if (!$allowed) {
           my $description = $env{'course.'.$env{'request.course.id'}.'.description'};
           &Apache::lonhtmlcommon::add_breadcrumb(
                                                  {'href' => '/adm/menu',
                                                   'title'=> 'Go to main menu',
                                                   'text' => $description,
                                                  });
           $plain .= $description.' &gt;';
       }
     while (@folders) {      while (@folders) {
  my $folder=shift(@folders);   my $folder=shift(@folders);
     my $foldername=shift(@folders);      my $foldername=shift(@folders);
Line 988  sub breadcrumbs { Line 1039  sub breadcrumbs {
  my $url='/adm/coursedocs?folderpath='.   my $url='/adm/coursedocs?folderpath='.
     &escape($folderpath);      &escape($folderpath);
     my $name=&unescape($foldername);      my $name=&unescape($foldername);
 # randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername  # randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername
      $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;       $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;
     if ($1 ne '') {       if ($1 ne '') {
                $randompick=$1;                 $randompick=$1;
             } else {              } else {
                $randompick=-1;                 $randompick=-1;
Line 999  sub breadcrumbs { Line 1050  sub breadcrumbs {
             if ($3) { $isencrypted=1; }              if ($3) { $isencrypted=1; }
     if ($4 ne '') { $is_random_order = 1; }      if ($4 ne '') { $is_random_order = 1; }
             if ($folder eq 'supplemental') {              if ($folder eq 'supplemental') {
                 if ($allowed) {                  $name = &mt('Supplemental '.$crstype.' Documents');
                     $name = &mt('Supplemental '.$type.' Documents');  
                 } else {  
                     $name = &mt($type.' Documents');  
                 }  
             }              }
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>$name,         'title'=>$name,
        'text'=>'<font size="+1">'.         'text'=>$name,
    $name.'</font>',  
        'no_mt'=>1,         'no_mt'=>1,
        });         });
  $plain.=$name.' &gt; ';   $plain.=$name.' &gt; ';
     }      }
     $plain=~s/\&gt\;\s*$//;      $plain=~s/\&gt\;\s*$//;
     return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',      return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
        'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain,$is_random_order);         undef, undef, 1 ),$randompick,$ishidden,$isencrypted,$plain,$is_random_order);
 }  }
   
 sub log_docs {  sub log_docs {
Line 1129  sub docs_change_log { Line 1175  sub docs_change_log {
     foreach my $key (@changes) {      foreach my $key (@changes) {
  $wholeentry.=':'.$docslog{$id}{'logentry'}{$key};   $wholeentry.=':'.$docslog{$id}{'logentry'}{$key};
     }      }
     if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }               if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }
  }   }
         my $count = 0;          my $count = 0;
         my $time =          my $time =
Line 1180  sub docs_change_log { Line 1226  sub docs_change_log {
     if ($oldname ne '' && $oldname ne $newname) {      if ($oldname ne '' && $oldname ne $newname) {
  $r->print(&LONCAPA::map::qtescape($newname));   $r->print(&LONCAPA::map::qtescape($newname));
     }      }
  }           }
  $r->print('<ul>');   $r->print('<ul>');
  for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {   for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
             if ($docslog{$id}{'logentry'}{'after_order_res_'.$idx}) {              if ($docslog{$id}{'logentry'}{'after_order_res_'.$idx}) {
Line 1218  sub update_paste_buffer { Line 1264  sub update_paste_buffer {
   
     my ($errtext,$fatal) = &mapread($coursenum,$coursedom,      my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
     $env{'form.copyfolder'});      $env{'form.copyfolder'});
       
     return if ($fatal);      return if ($fatal);
   
 # Mark for copying  # Mark for copying
Line 1240  sub print_paste_buffer { Line 1286  sub print_paste_buffer {
     my ($r,$container) = @_;      my ($r,$container) = @_;
     return if (!defined($env{'docs.markedcopy_url'}));      return if (!defined($env{'docs.markedcopy_url'}));
   
     $r->print(<<ENDPASTE);      $r->print('<fieldset>'
 <form name="pasteform" action="/adm/coursedocs" method="post"><p>               .'<legend>'.&mt('Clipboard').'</legend>'
 ENDPASTE               .'<form name="pasteform" action="/adm/coursedocs" method="post">'
     $r->print('<input type="submit" name="pastemarked" value="'.&mt('Paste').'" /> ');               .'<input type="submit" name="pastemarked" value="'.&mt('Paste').'" /> '
       );
   
     my $type;      my $type;
     if ($env{'docs.markedcopy_url'} =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?:&colon;|:))//} ) {      if ($env{'docs.markedcopy_url'} =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?:&colon;|:))//} ) {
Line 1257  ENDPASTE Line 1304  ENDPASTE
  if ($extension eq 'sequence' &&   if ($extension eq 'sequence' &&
     $env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) {      $env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) {
     $icon = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));      $icon = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
     $icon .= '/folder_closed.gif';      $icon .= '/navmap.folder.closed.gif';
  }   }
  $icon = '<img src="'.$icon.'" alt="" class="LC_icon" />';   $icon = '<img src="'.$icon.'" alt="" class="LC_icon" />';
  $r->print($icon.$type.': '.  &parse_supplemental_title(&LONCAPA::map::qtescape($env{'docs.markedcopy_title'})));   $r->print($icon.$type.': '.  &parse_supplemental_title(&LONCAPA::map::qtescape($env{'docs.markedcopy_title'})));
Line 1272  ENDPASTE Line 1319  ENDPASTE
         <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />          <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />
 ');  ');
     }      }
     $r->print('</p></form>');      $r->print('</form></fieldset>');
 }  }
   
 sub do_paste_from_buffer {  sub do_paste_from_buffer {
Line 1342  sub do_paste_from_buffer { Line 1389  sub do_paste_from_buffer {
     $db_name =~ s{_\d*$ }{_$now}x;      $db_name =~ s{_\d*$ }{_$now}x;
     my $result=&Apache::lonnet::put($db_name,\%contents,      my $result=&Apache::lonnet::put($db_name,\%contents,
     $coursedom,$coursenum);      $coursedom,$coursenum);
     $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x;       $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x;
     $title=&mt('Copy of').' '.$title;      $title=&mt('Copy of').' '.$title;
  }   }
     }      }
Line 1356  sub do_paste_from_buffer { Line 1403  sub do_paste_from_buffer {
         if ($folder =~ /^supplemental/) {          if ($folder =~ /^supplemental/) {
             $title = $env{'docs.markedcopy_supplemental'};              $title = $env{'docs.markedcopy_supplemental'};
         } else {          } else {
             (undef,undef,$title) =               (undef,undef,$title) =
                 &parse_supplemental_title($env{'docs.markedcopy_supplemental'});                  &parse_supplemental_title($env{'docs.markedcopy_supplemental'});
         }          }
     } else {      } else {
Line 1380  sub uniqueness_check { Line 1427  sub uniqueness_check {
         $url=&LONCAPA::map::qtescape($url);          $url=&LONCAPA::map::qtescape($url);
         if ($newurl eq $url) {          if ($newurl eq $url) {
             $unique = 0;              $unique = 0;
             last;                  last;
         }          }
     }      }
     return $unique;      return $unique;
Line 1406  sub update_parameter { Line 1453  sub update_parameter {
  &remember_parms($idx,$which,'set',$value);   &remember_parms($idx,$which,'set',$value);
     } else {      } else {
  &LONCAPA::map::delparameter($idx,'parameter_'.$which);   &LONCAPA::map::delparameter($idx,'parameter_'.$which);
   
  &remember_parms($idx,$which,'del');   &remember_parms($idx,$which,'del');
     }      }
     return 1;      return 1;
Line 1434  sub handle_edit_cmd { Line 1481  sub handle_edit_cmd {
  &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);   &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
  splice(@LONCAPA::map::order, $idx, 1);   splice(@LONCAPA::map::order, $idx, 1);
   
     } elsif ($cmd eq 'up'       } elsif ($cmd eq 'up'
      && ($idx) && (defined($LONCAPA::map::order[$idx-1]))) {       && ($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
  @LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1];   @LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1];
   
Line 1459  sub handle_edit_cmd { Line 1506  sub handle_edit_cmd {
 }  }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$type)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype)=@_;
   
     my $container= ($env{'form.pagepath'}) ? 'page'      my $container= ($env{'form.pagepath'}) ? 'page'
                            : 'sequence';                             : 'sequence';
   
Line 1474  sub editor { Line 1520  sub editor {
         $LONCAPA::map::order[0]=$idx;          $LONCAPA::map::order[0]=$idx;
         $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);
  &breadcrumbs($folder,$allowed,$type);      if ($allowed) {
     $r->print($breadcrumbtrail);          ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
           &breadcrumbs($allowed,$crstype);
           $r->print($breadcrumbtrail);
       } else {
           $randompick = -1;
       }
   
 # ------------------------------------------------------------ Process commands  # ------------------------------------------------------------ Process commands
   
 # ---------------- if they are for this folder and user allowed to make changes  # ---------------- if they are for this folder and user allowed to make changes
Line 1499  sub editor { Line 1550  sub editor {
     ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);      ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
     return $errtext if ($fatal);      return $errtext if ($fatal);
  }   }
       
  if ($env{'form.pastemarked'}) {   if ($env{'form.pastemarked'}) {
             my $paste_res =               my $paste_res =
                 &do_paste_from_buffer($coursenum,$coursedom,$folder);                  &do_paste_from_buffer($coursenum,$coursedom,$folder);
             if ($paste_res eq 'ok') {              if ($paste_res eq 'ok') {
                 ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container);                  ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container);
Line 1545  sub editor { Line 1596  sub editor {
  return $errtext if ($fatal);   return $errtext if ($fatal);
     } else {      } else {
  $r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');   $r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');
   
     }      }
  }   }
  &log_differences($plain);   &log_differences($plain);
Line 1555  sub editor { Line 1606  sub editor {
     my $idx=0;      my $idx=0;
     my $shown=0;      my $shown=0;
     if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {      if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {
  $r->print('<p>'.&mt('Parameters').':<ul>'.   $r->print('<div class="LC_Box">'.
   ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').            '<p>'.&mt('Parameters:').
             '<ul>'.
     ($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>':'').
   '</ul></p>');    '</ul></p>');
     }                                                                                                               if ($randompick>=0) {
     if ($randompick>=0) {              $r->print('<p class="LC_warning">'
  $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');                   .&mt('Caution: this folder is set to randomly pick a subset'
     }                       .' of resources. Adding or removing resources from this'
     if ($is_random_order) {                       .' folder will change the set of resources that the'
  $r->print('<p>'.&mt('Caution: this folder is set to randomly order its contents. Adding or removing resources from this folder will change the order of resources shown.').'</p>');                       .' students see, resulting in spurious or missing credit'
                        .' for completed problems, not limited to ones you'
                        .' modify. Do not modify the contents of this folder if'
                        .' it is in active student use.')
                    .'</p>'
               );
           }
           if ($is_random_order) {
               $r->print('<p class="LC_warning">'
                    .&mt('Caution: this folder is set to randomly order its'
                        .' contents. Adding or removing resources from this folder'
                        .' will change the order of resources shown.')
                    .'</p>'
               );
           }
           $r->print('</div>');
     }      }
     $r->print('<table class="LC_docs_editor">');  
       my $output;
     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);
  $url=&LONCAPA::map::qtescape($url);          $url=&LONCAPA::map::qtescape($url);
  unless ($name) {  $name=(split(/\//,$url))[-1]; }          unless ($name) {  $name=(split(/\//,$url))[-1]; }
  unless ($name) { $idx++; next; }          unless ($name) { $idx++; next; }
  $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,          $output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
      $coursenum));                                $coursenum,$crstype);
  $idx++;          $idx++;
  $shown++;          $shown++;
     }      }
     unless ($shown) {      if ($shown) {
  $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');          $r->print(&Apache::loncommon::start_data_table());
           if ($allowed) {
               $r->print(&Apache::loncommon::start_data_table_header_row()
                        .'<th colspan="2">'.&mt('Move').'</th>'
                        .'<th>'.&mt('Actions').'</th>'
                        .'<th colspan="2">'.&mt('Document').'</th>');
               if ($folder !~ /^supplemental/) {
                   $->print('<th colspan="4">'.&mt('Settings').'</th>');
               }
               $r->print(&Apache::loncommon::end_data_table_header_row());
           }
           $r->print($output
                    .&Apache::loncommon::end_data_table()
           );
       } else {
           $r->print('<p class="LC_info">'
                    .&mt('Currently no documents.')
                    .'</p>'
           );
     }      }
     $r->print("\n</table>\n");  
     if ($allowed) {      if ($allowed) {
         &print_paste_buffer($r,$container);          &print_paste_buffer($r,$container);
     }      }
Line 1653  sub process_file_upload { Line 1740  sub process_file_upload {
             return 'failed';              return 'failed';
         } else {          } else {
             if ($parseaction eq 'parse') {              if ($parseaction eq 'parse') {
                 my $total_embedded = keys(%{$allfiles});                  my $total_embedded = scalar(keys(%{$allfiles}));
                 if ($total_embedded > 0) {                  if ($total_embedded > 0) {
                     my $num = 0;                      my $num = 0;
     my $state = '      my $state = '
Line 1664  sub process_file_upload { Line 1751  sub process_file_upload {
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';     <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
     $phase_status = 'phasetwo';      $phase_status = 'phasetwo';
   
                     $$upload_output .=                       $$upload_output .=
  'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.   'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.
  &Apache::loncommon::ask_for_embedded_content(   &Apache::loncommon::ask_for_embedded_content(
                             '/adm/coursedocs',$state,$allfiles,$codebase);                              '/adm/coursedocs',$state,$allfiles,$codebase);
Line 1714  sub parse_supplemental_title { Line 1801  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;
     }      }
     if (wantarray) {      if (wantarray) {
  return ($title,$foldertitle,$renametitle);   return ($title,$foldertitle,$renametitle);
     }       }
     return $title;      return $title;
 }  }
   
 # --------------------------------------------------------------- An entry line  # --------------------------------------------------------------- An entry line
   
 sub entryline {  sub entryline {
     my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;      my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$crstype)=@_;
   
     my ($foldertitle,$pagetitle,$renametitle);      my ($foldertitle,$pagetitle,$renametitle);
     if (&is_supplemental_title($title)) {      if (&is_supplemental_title($title)) {
  ($title,$foldertitle,$renametitle) = &parse_supplemental_title($title);   ($title,$foldertitle,$renametitle) = &parse_supplemental_title($title);
Line 1740  sub entryline { Line 1827  sub entryline {
     }      }
   
     my $orderidx=$LONCAPA::map::order[$index];      my $orderidx=$LONCAPA::map::order[$index];
       
   
     $renametitle=~s/\\/\\\\/g;      $renametitle=~s/\\/\\\\/g;
     $renametitle=~s/\&quot\;/\\\"/g;      $renametitle=~s/\&quot\;/\\\"/g;
     $renametitle=~s/ /%20/g;      $renametitle=~s/ /%20/g;
     my $line='<tr>';      my $line=&Apache::loncommon::start_data_table_row();
     my ($form_start,$form_end);      my ($form_start,$form_end);
 # Edit commands  # Edit commands
     my ($container, $type, $esc_path, $path, $symb);      my ($container, $type, $esc_path, $path, $symb);
Line 1767  sub entryline { Line 1854  sub entryline {
  my $incindex=$index+1;   my $incindex=$index+1;
  my $selectbox='';   my $selectbox='';
  if (($folder!~/^supplemental/) &&   if (($folder!~/^supplemental/) &&
     ($#LONCAPA::map::order>0) &&       ($#LONCAPA::map::order>0) &&
     ((split(/\:/,      ((split(/\:/,
      $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1]        $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1]
      ne '') &&        ne '') &&
     ((split(/\:/,      ((split(/\:/,
      $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1]        $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1]
      ne '')) {       ne '')) {
     $selectbox=      $selectbox=
  '<input type="hidden" name="currentpos" value="'.$incindex.'" />'.   '<input type="hidden" name="currentpos" value="'.$incindex.'" />'.
  '<select name="newpos" onChange="this.form.submit()">';   '<select name="newpos" onchange="this.form.submit()">';
     for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {      for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
  if ($i==$incindex) {   if ($i==$incindex) {
     $selectbox.='<option value="" selected="selected">('.$i.')</option>';      $selectbox.='<option value="" selected="selected">('.$i.')</option>';
Line 1809  sub entryline { Line 1896  sub entryline {
  }   }
     }      }
  }   }
         if ($url=~/^\/res\/lib\/templates\//) {           if ($url=~/^\/res\/lib\/templates\//) {
            $nocopy=1;              $nocopy=1;
            $nocut=1;             $nocut=1;
         }          }
         my $copylink='&nbsp;';          my $copylink='&nbsp;';
         my $cutlink='&nbsp;';          my $cutlink='&nbsp;';
   
  my $skip_confirm = 0;   my $skip_confirm = 0;
  if ( $folder =~ /^supplemental/   if ( $folder =~ /^supplemental/
      || ($url =~ m{( /smppg$       || ($url =~ m{( /smppg$
Line 1848  END Line 1935  END
         $form_end = '</form>';          $form_end = '</form>';
  $line.=(<<END);   $line.=(<<END);
 <td>  <td>
    <table class="LC_docs_entry_move">  <div class="LC_docs_entry_move">
       <tr>    <a href='/adm/coursedocs?cmd=up_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb$cpinfo'>
          <td>      <img src="${iconpath}move_up.gif" alt='$lt{'up'}' class="LC_icon" />
             <a href='/adm/coursedocs?cmd=up_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb$cpinfo'><img src="${iconpath}move_up.gif" alt='$lt{'up'}' class="LC_icon" /></a>    </a>
          </td>  </div>
       </tr>  <div class="LC_docs_entry_move">
       <tr>    <a href='/adm/coursedocs?cmd=down_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb$cpinfo'>
         <td>      <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' class="LC_icon" />
            <a href='/adm/coursedocs?cmd=down_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb$cpinfo'><img src="${iconpath}move_down.gif" alt='$lt{'dw'}' class="LC_icon" /></a>    </a>
         </td>  </div>
       </tr>  
     </table>  
 </td>  </td>
 <td>  <td>
    $form_start     $form_start
Line 1886  END Line 1971  END
     my $pagefile;      my $pagefile;
     if ($uploaded) {      if ($uploaded) {
  if ($extension eq 'sequence') {   if ($extension eq 'sequence') {
     $icon=$iconpath.'/folder_closed.gif';      $icon=$iconpath.'/navmap.folder.closed.gif';
     $url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/;      $url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/;
     $url='/adm/coursedocs?';      $url='/adm/coursedocs?';
     $folderarg=$1;      $folderarg=$1;
Line 1901  END Line 1986  END
     &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);      &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);
  }   }
     }      }
       
     my $orig_url = $url;      my $orig_url = $url;
     $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};      $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
     my $external = ($url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/});      my $external = ($url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/});
Line 1925  END Line 2010  END
     } elsif ($url!~/\.(sequence|page)$/) {      } elsif ($url!~/\.(sequence|page)$/) {
  $url='/adm/coursedocs/showdoc'.$url;   $url='/adm/coursedocs/showdoc'.$url;
     }      }
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) {
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
     $external = 1;      $external = 1;
  }   }
Line 1936  END Line 2021  END
         }          }
  if ($container eq 'page') {   if ($container eq 'page') {
     my $symb=$env{'form.pagesymb'};      my $symb=$env{'form.pagesymb'};
           
     $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);      $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
     $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
  }   }
Line 1946  END Line 2031  END
  my $foldername=&escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
  if ($folderpath) { $folderpath.='&' };   if ($folderpath) { $folderpath.='&' };
 # Append randompick number, hidden, and encrypted with ":" to foldername,   # Append randompick number, hidden, and encrypted with ":" to foldername,
 # so it gets transferred between levels  # so it gets transferred between levels
  $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,   $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0]                                                'parameter_randompick'))[0]
Line 1958  END Line 2043  END
                                               'parameter_randomorder'))[0]=~/^yes$/i);                                                'parameter_randomorder'))[0]=~/^yes$/i);
  $url.='folderpath='.&escape($folderpath).$cpinfo;   $url.='folderpath='.&escape($folderpath).$cpinfo;
  $parameterset='<label>'.&mt('Randomly Pick: ').   $parameterset='<label>'.&mt('Randomly Pick: ').
     '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randompick_'.$orderidx.'" value="'.      '<input type="text" size="4" onchange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randompick_'.$orderidx.'" value="'.
     (&LONCAPA::map::getparameter($orderidx,      (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].                                                'parameter_randompick'))[0].
                                               '" />'.                                                '" />'.
Line 1966  END Line 2051  END
     my $ro_set=      my $ro_set=
     ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':'');      ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':'');
  $rand_order_text ='   $rand_order_text ='
 <span class="LC_nobreak"><label><input type="checkbox" name="randomorder_'.$orderidx.'" onClick="this.form.changeparms.value=\'randomorder\';this.form.submit()" '.$ro_set.' /> '.&mt('Random Order').' </label></span>';     <span class="LC_nobreak"><label><input type="checkbox" name="randomorder_'.$orderidx.'" onclick="this.form.changeparms.value=\'randomorder\';this.form.submit()" '.$ro_set.' /> '.&mt('Random Order').' </label></span>';
     }      }
     if ($ispage) {      if ($ispage) {
         my $pagename=&escape($pagetitle);          my $pagename=&escape($pagetitle);
Line 1986  END Line 2071  END
  $url.='pagepath='.&escape($pagepath).   $url.='pagepath='.&escape($pagepath).
     '&amp;pagesymb='.&escape($symb).$cpinfo;      '&amp;pagesymb='.&escape($symb).$cpinfo;
     }      }
     if ($external) {      if (($external) && ($allowed)) {
  my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';   my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';
  $external = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:edittext(\''.$form.'\',\''.$residx.'\',\''.&escape($title).'\',\''.&escape($orig_url).'\');" >'.&mt('Edit').'</a>';   $external = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:edittext(\''.$form.'\',\''.$residx.'\',\''.&escape($title).'\',\''.&escape($orig_url).'\');" >'.&mt('Edit').'</a>';
     } else {      } else {
  undef($external);   undef($external);
     }      }
       my $reinit;
       if ($crstype eq 'Community') {
           $reinit = &mt('(re-initialize community to access)');
       } else {
           $reinit = &mt('(re-initialize course to access)');
       }  
     $line.='      $line.='
   <td class="LC_docs_entry_icon">    <td>
     '.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').'      '.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').'
   </td>    </td>
   <td class="LC_docs_entry_title">    <td>
     '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.&mt('(re-initialize course to access)').'</span>').$external."      '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.$reinit.'</span>').$external."
   </td>";    </td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
Line 2010  END Line 2101  END
  $line.=(<<ENDPARMS);   $line.=(<<ENDPARMS);
   <td class="LC_docs_entry_parameter">    <td class="LC_docs_entry_parameter">
     $form_start      $form_start
     <label><input type="checkbox" name="hiddenresource_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>      <label><input type="checkbox" name="hiddenresource_$orderidx" onclick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>
     $form_end      $form_end
   </td>    </td>
   <td class="LC_docs_entry_parameter">    <td class="LC_docs_entry_parameter">
     $form_start      $form_start
     <label><input type="checkbox" name="encrypturl_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>      <label><input type="checkbox" name="encrypturl_$orderidx" onclick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>
     $form_end      $form_end
   </td>    </td>
   <td class="LC_docs_entry_parameter">$form_start $rand_order_text $form_end</td>    <td class="LC_docs_entry_parameter">$form_start $rand_order_text $form_end</td>
   <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td>    <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td>
 ENDPARMS  ENDPARMS
     }      }
     $line.="</tr>";      $line.=&Apache::loncommon::end_data_table_row();
     return $line;      return $line;
 }  }
   
Line 2049  sub tiehash { Line 2140  sub tiehash {
                 $hashtied=1;                  $hashtied=1;
     }      }
  }   }
     }          }
 }  }
   
 sub untiehash {  sub untiehash {
Line 2098  sub checkonthis { Line 2189  sub checkonthis {
                  if (($errorcount) ||                   if (($errorcount) ||
                      ($warningcount)) {                       ($warningcount)) {
      if ($errorcount) {       if ($errorcount) {
                         $r->print('<img src="/adm/lonMisc/bomb.gif" alt="" /><span class="LC_error">'.                          $r->print('<img src="/adm/lonMisc/bomb.gif" alt="'.&mt('bomb').'" /><span class="LC_error">'.
                           &mt('[quant,_1,error]',$errorcount).'</span>');                            &mt('[quant,_1,error]',$errorcount).'</span>');
                      }                       }
      if ($warningcount) {       if ($warningcount) {
Line 2145  List Symbs Line 2236  List Symbs
 sub list_symbs {  sub list_symbs {
     my ($r) = @_;      my ($r) = @_;
   
     my $type = &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'));
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
Line 2154  sub list_symbs { Line 2245  sub list_symbs {
                   '<div class="LC_error">'.                    '<div class="LC_error">'.
                   &mt('Unable to retrieve information about course contents').                    &mt('Unable to retrieve information about course contents').
                   '</div>');                    '</div>');
         &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});          &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
     } 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>');      $r->print('<hr /><a href="/adm/coursedocs">'.&mt('Back to Course Editor').'</a>');
 }  }
   
   
 sub verifycontent {  sub verifycontent {
     my ($r) = @_;      my ($r) = @_;
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
    my $loaderror=&Apache::lonnet::overloaderror($r);     my $loaderror=&Apache::lonnet::overloaderror($r);
    if ($loaderror) { return $loaderror; }     if ($loaderror) { return $loaderror; }
    $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));     $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
Line 2181  sub verifycontent { Line 2272  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 '.$type.': ').   &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 2191  sub verifycontent { Line 2282  sub verifycontent {
        }         }
    }     }
    &untiehash();     &untiehash();
    $r->print('<h1>'.&mt('Done').'.</h1>'.'<a href="/adm/coursedocs">'.     $r->print(
      &mt('Return to DOCS').'</a>');         '<p class="LC_success">'.&mt('Done').'</p>'
         .'<hr />'
         .'<p><a href="/adm/coursedocs">'
     .&mt('Back to Course Editor')
         .'</a></p>'
      );
 }  }
   
   
Line 2204  sub devalidateversioncache { Line 2300  sub devalidateversioncache {
   
 sub checkversions {  sub checkversions {
     my ($r) = @_;      my ($r) = @_;
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));      $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions"));      $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 2257  sub checkversions { Line 2353  sub checkversions {
     if ($haschanged) {      if ($haschanged) {
         if (&Apache::lonnet::put('resourceversions',\%newsetversions,          if (&Apache::lonnet::put('resourceversions',\%newsetversions,
   $env{'course.'.$env{'request.course.id'}.'.domain'},    $env{'course.'.$env{'request.course.id'}.'.domain'},
   $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {    $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {
     $r->print('<h1>'.&mt('Your Version Settings have been Saved').'</h1>');      $r->print('<h1>'.&mt('Your Version Settings have been Saved').'</h1>');
  } else {   } else {
     $r->print('<h1><span class="LC_error">'.&mt('An Error Occured while Attempting to Save your Version Settings').'</span></h1>');      $r->print('<h1><span class="LC_error">'.&mt('An Error Occured while Attempting to Save your Version Settings').'</span></h1>');
Line 2267  sub checkversions { Line 2363  sub checkversions {
     &changewarning($r,'');      &changewarning($r,'');
     if ($env{'form.timerange'} eq 'all') {      if ($env{'form.timerange'} eq 'all') {
 # show all documents  # show all documents
  $header=&mt('All Documents in '.$type);   $header=&mt('All Documents in '.$crstype);
  $allsel=1;   $allsel=1;
  foreach my $key (keys(%hash)) {   foreach my $key (keys(%hash)) {
     if ($key=~/^ids\_(\/res\/.+)$/) {      if ($key=~/^ids\_(\/res\/.+)$/) {
Line 2312  sub checkversions { Line 2408  sub checkversions {
   $env{'course.'.$env{'request.course.id'}.'.domain'},    $env{'course.'.$env{'request.course.id'}.'.domain'},
   $env{'course.'.$env{'request.course.id'}.'.num'});    $env{'course.'.$env{'request.course.id'}.'.num'});
     my %lt=&Apache::lonlocal::texthash      my %lt=&Apache::lonlocal::texthash
       ('st' => 'Version changes since start of '.$type,        ('st' => 'Version changes since start of '.$crstype,
        'lm' => 'Version changes since last Month',         'lm' => 'Version changes since last Month',
        'lw' => 'Version changes since last Week',         'lw' => 'Version changes since last Week',
        'sy' => 'Version changes since Yesterday',         'sy' => 'Version changes since Yesterday',
Line 2321  sub checkversions { Line 2417  sub checkversions {
        'fi' => 'File',         'fi' => 'File',
        'md' => 'Modification Date',         'md' => 'Modification Date',
                'mr' => 'Most recently published Version',                 'mr' => 'Most recently published Version',
        've' => 'Version used in '.$type,         've' => 'Version used in '.$crstype,
                'vu' => 'Set Version to be used in '.$type,                 'vu' => 'Set Version to be used in '.$crstype,
 'sv' => 'Set Versions to be used in '.$type.' according to Selections below',  'sv' => 'Set Versions to be used in '.$crstype.' according to Selections below',
 'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',  'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
 'sc' => 'Set all Resource Versions to current Version (Fix Versions)',  'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
        'di' => 'Differences');         'di' => 'Differences');
Line 2370  ENDHEADERS Line 2466  ENDHEADERS
                       '<td title="'.$lt{'mr'}.'"><span class="LC_nobreak">Most Recent: '.                        '<td title="'.$lt{'mr'}.'"><span class="LC_nobreak">Most Recent: '.
                       '<font size="+1">'.$currentversion.'</font>'.                        '<font size="+1">'.$currentversion.'</font>'.
                       '</span></td>'.                        '</span></td>'.
                       '<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$type.': '.                        '<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$crstype.': '.
                       '<font size="+1">');                        '<font size="+1">');
 # Used in course  # Used in course
     my $usedversion=$hash{'version_'.$linkurl};      my $usedversion=$hash{'version_'.$linkurl};
Line 2387  ENDHEADERS Line 2483  ENDHEADERS
       ('select_form_order' =>        ('select_form_order' =>
        ['',1..$currentversion,'mostrecent'],         ['',1..$currentversion,'mostrecent'],
        '' => '',         '' => '',
        'mostrecent' => '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;
Line 2398  ENDHEADERS Line 2494  ENDHEADERS
     $lastold=$prevvers;      $lastold=$prevvers;
  }   }
     }      }
             #               #
             # Code to figure out how many version entries should go in              # Code to figure out how many version entries should go in
             # each of the four columns              # each of the four columns
             my $entries_per_col = 0;              my $entries_per_col = 0;
Line 2409  ENDHEADERS Line 2505  ENDHEADERS
                 $entries_per_col = $num_entries/4 + 1;                  $entries_per_col = $num_entries/4 + 1;
             }              }
             my $entries_count = 0;              my $entries_count = 0;
             $r->print('<td valign="top"><font size="-2">');               $r->print('<td valign="top"><font size="-2">');
             my $cols_output = 1;              my $cols_output = 1;
             for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {              for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
  my $url=$root.'.'.$prevvers.'.'.$extension;   my $url=$root.'.'.$prevvers.'.'.$extension;
Line 2442  ENDHEADERS Line 2538  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 2488  sub changewarning { Line 2584  sub changewarning {
  $message='Changes will become active for your current session after [_1], or the next time you log in.';   $message='Changes will become active for your current session after [_1], or the next time you log in.';
     }      }
     $r->print("\n\n".      $r->print("\n\n".
 '<script type="text/javascript">function reinit(tf) { tf.submit();'.$postexec.' }</script>'."\n".   '<script type="text/javascript">'."\n".
   '// <![CDATA['."\n".
   'function reinit(tf) { tf.submit();'.$postexec.' }'."\n".
   '// ]]>'."\n".
   '</script>'."\n".
 '<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'.  '<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'.
 '<input type="hidden" name="orgurl" value="'.$url.  '<input type="hidden" name="orgurl" value="'.$url.
 '" /><input type="hidden" name="selectrole" value="1" /><h3><span class="LC_warning">'.  '" /><input type="hidden" name="selectrole" value="1" /><p class="LC_warning">'.
 &mt($message,' <input type="hidden" name="'.  &mt($message,' <input type="hidden" name="'.
     $env{'request.role'}.'" value="1" /><input type="button" value="'.      $env{'request.role'}.'" value="1" /><input type="button" value="'.
     &mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />').      &mt('re-initializing '.$course_type).'" onclick="reinit(this.form)" />').
 $help{'Caching'}.'</span></h3></form>'."\n\n");  $help{'Caching'}.'</p></form>'."\n\n");
 }  }
   
   
Line 2503  sub init_breadcrumbs { Line 2603  sub init_breadcrumbs {
     my ($form,$text)=@_;      my ($form,$text)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",      &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",
     text=>"Edit ".&Apache::loncommon::course_type(),      text=>&Apache::loncommon::course_type().' Editor',
     faq=>273,      faq=>273,
     bug=>'Instructor Interface',      bug=>'Instructor Interface',
                                             help => 'Docs_Adding_Course_Doc'});                                              help => 'Docs_Adding_Course_Doc'});
Line 2521  sub handler { Line 2621  sub handler {
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
     my $type = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
   
   
 # --------------------------------------------- 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',
Line 2541  sub handler { Line 2642  sub handler {
     'Option_Response_Simple');      'Option_Response_Simple');
     $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(      $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
     'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');      'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
     $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(      $help{'My Personal Information Page'} = &Apache::loncommon::help_open_topic(
   'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');    'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
     $help{'Group Files'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');      $help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files');
     $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');      $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
   
 # does this user have privileges to modify docs  # does this user have privileges to modify docs
Line 2561  sub handler { Line 2662  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','Export '.&Apache::loncommon::course_type().' to IMS');        &init_breadcrumbs('exportcourse','IMS Export');
       &exportcourse($r);        &exportcourse($r);
   } else {    } else {
 # is this a standard course?  # is this a standard course?
Line 2576  sub handler { Line 2677  sub handler {
     my $showdoc=0;      my $showdoc=0;
     my $containertag;      my $containertag;
     my $uploadtag;      my $uploadtag;
   
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['folderpath','pagepath',      ['folderpath','pagepath',
      'pagesymb']);       'pagesymb']);
Line 2584  sub handler { Line 2687  sub handler {
         &Apache::loncommon::restore_course_settings('docs_folderpath',          &Apache::loncommon::restore_course_settings('docs_folderpath',
                                               {'folderpath' => 'scalar'});                                                {'folderpath' => 'scalar'});
     }      }
     if (!$env{'form.folderpath'}) {      if (!$allowed) {
           unless($env{'form.folderpath'} =~ /^supplemental/) {
               $env{'form.folderpath'} = '';
           }
       }
       if (!$env{'form.folderpath'} && $allowed) {
         &Apache::loncommon::restore_course_settings('docs_folderpath',          &Apache::loncommon::restore_course_settings('docs_folderpath',
                                               {'pagepath' => 'scalar'});                                                {'pagepath' => 'scalar'});
     }      }
Line 2593  sub handler { Line 2701  sub handler {
     }      }
     if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {      if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {
         $env{'form.folderpath'} = 'supplemental&'.          $env{'form.folderpath'} = 'supplemental&'.
                                   &escape(&mt('Supplemental '.$type.' Documents')).'&'.                                    &escape(&mt('Supplemental '.$crstype.' Documents')).'&'.
                                   $env{'form.folderpath'};                                    $env{'form.folderpath'};
     }      }
     &Apache::loncommon::store_course_settings('docs_folderpath',      &Apache::loncommon::store_course_settings('docs_folderpath',
Line 2616  sub handler { Line 2724  sub handler {
     if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {      if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
        $showdoc='/'.$1;         $showdoc='/'.$1;
     }      }
     unless ($showdoc) { # got called from remote      if ($showdoc) { # got called in sequence from course
        if (($env{'form.folder'}=~/^(?:group|default)_/) ||    $allowed=0; 
       } else {
          if (($env{'form.folder'}=~/^(?:group|default)_/) ||
           ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {            ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
            $forcestandard = 1;             $forcestandard = 1;
        }          }
        $forcesupplement=($env{'form.folder'}=~/^supplemental_/);         $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');
        }         }
     } else { # got called in sequence from course  
        $allowed=0;  
     }      }
   
   # 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'};
   
 # get personal data   # get personal data
     my $uname=$env{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};      my $udom=$env{'user.domain'};
     my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));      my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));
Line 2648  sub handler { Line 2776  sub handler {
  $script .= &editing_js($udom,$uname);   $script .= &editing_js($udom,$uname);
     }      }
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n".$script."\n".'</script>';      $script = '<script type="text/javascript">'."\n"
     my $brcrum = [{href=>"/adm/createuser",text=>"$type Documents"}];                .'// <![CDATA['."\n"
     $r->print(&Apache::loncommon::start_page("$type Documents", $script,                .$script."\n"
     {'force_register' => $showdoc,                .'// ]]>'."\n"
                                      'bread_crumbs' => $brcrum}).                .'</script>'."\n";
       &Apache::loncommon::help_open_menu('','',273,'RAT'));  
         # Breadcrumbs
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       if ($allowed) {
           &Apache::lonhtmlcommon::add_breadcrumb({
               href=>"/adm/coursedocs",text=>"$crstype Editor"});
   
           $r->print(&Apache::loncommon::start_page("$crstype Editor", $script,
                                                    {'force_register' => $showdoc,})
                    .&Apache::loncommon::help_open_menu('','',273,'RAT')
                    .&Apache::lonhtmlcommon::breadcrumbs(
                        'Editing the Table of Contents for your '.$crstype,
                        'Docs_Adding_Course_Doc')
           );
       } elsif ($showdoc) {
           $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
                                                   {'force_register' => $showdoc,}));
       } else {
           my $folder=$env{'form.folder'};
           if ($folder eq '' || $folder eq 'supplemental') {
               $env{'form.folderpath'} = 'supplemental&'.
                                         &escape(&mt('Supplemental '.$crstype.' Documents'));
           }
           my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
           $r->print(&Apache::loncommon::start_page("Supplemental documents").
                     $breadcrumbtrail);
       }
   
   my %allfiles = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output);    my ($upload_result,$upload_output);
   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.    # Process file upload - phase one - upload and parse primary file.
   undef($hadchanges);    undef($hadchanges);
           $upload_result = &process_file_upload(\$upload_output,$coursenum,            $upload_result = &process_file_upload(\$upload_output,$coursenum,
  $coursedom,\%allfiles,   $coursedom,\%allfiles,
Line 2686  sub handler { Line 2840  sub handler {
                   $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);                    $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);
                   $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});                    $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});
                   if (exists($env{'form.embedded_codebase_'.$i})) {                    if (exists($env{'form.embedded_codebase_'.$i})) {
                       $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});                          $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});
                       $origname{$i} =~ s#^\Q$javacodebase\E/##;                         $origname{$i} =~ s#^\Q$javacodebase\E/##;
                   }                    }
                   my @attributes = ();                    my @attributes = ();
                   if ($env{'form.embedded_attrib_'.$i} =~ /:/) {                    if ($env{'form.embedded_attrib_'.$i} =~ /:/) {
Line 2723  sub handler { Line 2877  sub handler {
                               $attrib_regexp = $attribs{$item}[0];                                $attrib_regexp = $attribs{$item}[0];
                           }                            }
                           if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) {                            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;                             $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;
                       }                        }
                       if (exists($codebase{$item})) {                        if (exists($codebase{$item})) {
                           $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs                            $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs
Line 2736  sub handler { Line 2890  sub handler {
                   my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};                    my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
                   my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);                    my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);
               } else {                } else {
                   &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);                     &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);
               }                }
           }            }
       }        }
Line 2745  sub handler { Line 2899  sub handler {
   unless ($showdoc ||  $upload_result eq 'phasetwo') {    unless ($showdoc ||  $upload_result eq 'phasetwo') {
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
                 'uplm' => 'Upload a new main '.lc($type).' document',                  'uplm' => 'Upload a new main '.lc($crstype).' document',
                 'upls' => 'Upload a new supplemental '.lc($type).' document',                  'upls' => 'Upload a new supplemental '.lc($crstype).' document',
                 'impp' => 'Import a document',                  'impp' => 'Import a document',
                 'pubd' => 'Published documents',  
  'copm' => 'All documents out of a published map into this folder',   'copm' => 'All documents out of a published map into this folder',
                 'spec' => 'Special documents',                  'upld' => 'Import Document',
                 'upld' => 'Upload Document',  
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
  'book' => 'Import Bookmarks',   'book' => 'Import Bookmarks',
                 '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',
Line 2769  sub handler { Line 2921  sub handler {
                 'scuf' => 'Score Upload Form',                  'scuf' => 'Score Upload Form',
                 'bull' => 'Discussion Board',                  'bull' => 'Discussion Board',
                 'mypi' => 'My Personal Information Page',                  'mypi' => 'My Personal Information Page',
                 'grpo' => 'Group Portfolios',                  'grpo' => 'Group Portfolio',
                 'rost' => 'Course Roster',                  'rost' => 'Course Roster',
  'abou' => 'About User',   'abou' => 'Personal Information Page for a User',
                 'imsf' => 'Import IMS package',                  'imsf' => 'IMS Import',
                   'imsl' => 'Import IMS package',
                 'file' =>  'File',                  'file' =>  'File',
                 'title' => 'Title',                  'title' => 'Title',
                 'comment' => 'Comment',                  'comment' => 'Comment',
                 'parse' => 'If HTML file, upload embedded images/multimedia files'                  'parse' => 'Upload embedded images/multimedia files if HTML file',
    'nd' => 'Upload Document',
    'pm' => 'Published Map',
    'sd' => 'Special Document',
    'mo' => 'More Options',
   );    );
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
    my $fileupload=(<<FIUP);
    $lt{'file'}:<br />
    <input type="file" name="uploaddoc" size="40" />
   FIUP
   
    my $checkbox=(<<CHBO);
    <!-- <label>$lt{'parse'}?
    <input type="checkbox" name="parserflag" />
    </label> -->
    <label>
    <input type="checkbox" name="parserflag" checked="checked" /> $lt{'parse'}
    </label>
   CHBO
   
       my $fileuploada = "<input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}";
    my $fileuploadform=(<<FUFORM);
    <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">
    <input type="hidden" name="active" value="aa" />
    $fileupload
    <br />
    $lt{'title'}:<br />
    <input type="text" size="50" name="comment" />
    $uploadtag
    <input type="hidden" name="cmd" value="upload_default" />
    <br />
    <span class="LC_nobreak">
    $checkbox
    </span>
   FUFORM
       #$list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
       #$fileuploadform .= create_form_ul(create_list_elements(@fileuploada));
       $fileuploadform .= create_form_ul(Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'}));
    $fileuploadform .= (<<FUFORM);
    </form>
   FUFORM
   
    my $simpleeditdefaultform=(<<SEDFFORM);
    <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
    <input type="hidden" name="active" value="bb" />
   SEDFFORM
    my @simpleeditdefaultforma = ( 
    { '<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" 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" src="/res/adm/pages/vbkm.png" alt="'.$lt{book}.'" onclick="javascript:groupopen(0,1,1);" />' => "<a class='LC_menubuttons_link' href='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },
    );
    $simpleeditdefaultform .= create_form_ul(create_list_elements(@simpleeditdefaultforma));
    $simpleeditdefaultform .=(<<SEDFFORM);
    <hr />
    <p>
    $lt{'copm'}<br />
    <input type="text" size="40" name="importmap" /><br />
    <span class="LC_nobreak"><input type="button"
    onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
    value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />
    $help{'Load_Map'}</span>
    </p>
    </form>
   SEDFFORM
   
    my $extresourcesform=(<<ERFORM);
    <form action="/adm/coursedocs" method="post" name="newext">
    $uploadtag
    <input type="hidden" name="importdetail" value="" />
    <a class="LC_menubuttons_link" href="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
    </form>
   ERFORM
   
     if ($allowed) {      if ($allowed) {
  &update_paste_buffer($coursenum,$coursedom);   &update_paste_buffer($coursenum,$coursedom);
        my $dumpbut=&dumpbutton();  
        my $exportbut=&exportbutton();  
        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',
Line 2795  sub handler { Line 3017  sub handler {
    if ($env{'form.folder'} eq '' ||     if ($env{'form.folder'} eq '' ||
        $env{'form.folder'} eq 'supplemental') {         $env{'form.folder'} eq 'supplemental') {
        $folderpath='default&'.         $folderpath='default&'.
    &escape(&mt('Main '.$type.' Documents'));     &escape(&mt('Main '.$crstype.' Documents'));
    }     }
        }         }
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
            $containertag = '<input type="hidden" name="folderpath" value="" />';             $containertag = '<input type="hidden" name="folderpath" value="" />';
            $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';             $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';
        }         }
    $r->print(<<HIDDENFORM);
        $r->print(<<ENDCOURSEVERIFY);   <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" />     <input type="hidden" name="cmd" />
   <input type="hidden" name="cmd" />     <input type="hidden" name="markcopy" />
   <input type="hidden" name="markcopy" />     <input type="hidden" name="copyfolder" />
   <input type="hidden" name="copyfolder" />     $containertag
   $containertag   </form>
 </form>   <form name="simpleedit" method="post" action="/adm/coursedocs">
 <form name="simpleedit" method="post" action="/adm/coursedocs">     <input type="hidden" name="importdetail" value="" />
   <input type="hidden" name="importdetail" value="" />     $uploadtag
   $uploadtag   </form>
 </form>  HIDDENFORM
 <form action="/adm/coursedocs" method="post" name="courseverify">      }
   <div class="LC_docs_course_commands">  # --------------------------------------------------------- Main tab structure
    
       <div>      my $activeClass = 1;
         <input type="submit" name="verify" value="$lt{'vc'}" />$help{'Verify_Content'}      my $active = '';
       </div>      my %tabtitles = (
       <div>                         main => {
         <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}                                   Course => &mt('Main Course Documents'),
       </div>                                   Community => &mt('Main Community Documents'),
         $dumpbut                                 },
         $exportbut                         supplemental => {
       <div>                                   Course => &mt('Supplemental Course Documents'),        
         <input type="submit" name="listsymbs" value="$lt{'ls'}" />                                   Community => &mt('Supplemental Community Documents'),
       </div>                                 },
       <div>                      );
         <input type="hidden" name="folder" value="$env{'form.folder'}" />      if ($allowed) {
         <input type="submit" name="docslog" value="$lt{'sl'}" />          $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
       </div>          if (($standard) && ($allowed) && (!$forcesupplement) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'}eq"" || ($env{'form.pagepath'}))) {
   </div>              if($activeClass == 1){
 </form>                  $active = 'class="active"';
 <div style="clear: both; height: 0px;">&nbsp;</div>          $activeClass = 0;
 ENDCOURSEVERIFY      }
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',          }
      &mt('Editing the Table of Contents for your '.$type)));          $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  # --------------------------------------------------------- Standard documents
     $r->print('<table class="LC_docs_documents">');         my $savefolderpath;
          $active = 'style="display: none;"';
     if (($standard) && ($allowed) && (!$forcesupplement)) {         if($activeClass == 0){
  $r->print('<tr><td class="LC_docs_document">');            $active = 'style="display: block;"';
 #  '<h2>'.&mt('Main Course Documents').         }
 #  ($allowed?' '.$help{'Main_Course_Documents'}:'').'</h2>');         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 eq 'supplemental') {         if ($folder eq '' || $folder=~/^supplemental/) {
            $folder='default';             $folder='default';
    $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));     $savefolderpath = $env{'form.folderpath'};
      $env{'form.folderpath'}='default&'.&escape($tabtitles{'main'}{$crstype});
            $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'},'<>&"').'" />';
        }         }
        my $postexec='';         my $postexec='';
        if ($folder eq 'default') {         if ($folder eq 'default') {
    $r->print('<script type="text/javascript">this.window.name="loncapaclient";</script>');             $r->print('<script type="text/javascript">'."\n"
                       .'// <![CDATA['."\n"
                       .'this.window.name="loncapaclient";'."\n"
                       .'// ]]>'."\n"
                       .'</script>'."\n"
          );
        } else {         } else {
            #$postexec='self.close();';             #$postexec='self.close();';
        }         }
        $hadchanges=0;  
        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,  
    $upload_output,$type);  
        if ($error) {  
    $r->print('<p><span class="LC_error">'.$error.'</span></p>');  
        }  
        if ($hadchanges) {  
    &mark_hash_old();  
        }  
        &changewarning($r,$postexec);  
        my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.         my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                      '.sequence';                       '.sequence';
        my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.         my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
Line 2879  ENDCOURSEVERIFY Line 3110  ENDCOURSEVERIFY
     $container='page';      $container='page';
  }   }
  my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container;   my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container;
        $r->print(<<ENDFORM);  
 <table class="LC_docs_adddocs">  
 <tr>  
 <th>$lt{'uplm'}</th>   my $recoverform=(<<RFORM);
 <th>$lt{'impp'}</th>   <form action="/adm/groupsort" method="post" name="recover">
 <th>$lt{'spec'}</th>   <a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1,0)">$lt{'reco'}</a>
 </tr>   </form>
 <tr>  RFORM
 <td>  
 $lt{'file'}:<br />   my $imspform=(<<IMSPFORM);
 <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">   <form action="/adm/imsimportdocs" method="post" name="ims">
 <input type="file" name="uploaddoc" size="40" />   <input type="hidden" name="folder" value="$folder" />
 <br />   <a class="LC_menubuttons_link" href="javascript:makeims();">$lt{'imsf'}</a>
 $lt{'title'}:<br />   </form>
 <input type="text" size="50" name="comment" />  IMSPFORM
 $uploadtag  
 <input type="hidden" name="cmd" value="upload_default" />   my $newnavform=(<<NNFORM);
 <br />   <form action="/adm/coursedocs" method="post" name="newnav">
 <span class="LC_nobreak">   <input type="hidden" name="active" value="cc" />
 <label>$lt{'parse'}?   $uploadtag
 <input type="checkbox" name="parserflag" checked="checked" />   <input type="hidden" name="importdetail" 
 </label>   value="$lt{'navc'}=/adm/navmaps" />
 </span>   <a class="LC_menubuttons_link" href="javascript:document.newnav.submit()">$lt{'navc'}</a>
 <br />   $help{'Navigate_Content'}
 <br />   </form>
 <span class="LC_nobreak">  NNFORM
 <input type="submit" value="$lt{'upld'}" />   my $newsmppageform=(<<NSPFORM);
  $help{'Uploading_From_Harddrive'}   <form action="/adm/coursedocs" method="post" name="newsmppg">
 </span>   <input type="hidden" name="active" value="cc" />
 </form>   $uploadtag
 </td>   <input type="hidden" name="importdetail" value="" />
 <td>   <a class="LC_menubuttons_link" href="javascript:makesmppage();"> $lt{'sipa'}</a>
 <form action="/adm/coursedocs" method="post" name="simpleeditdefault">   $help{'Simple Page'}
 $lt{'pubd'}<br />   </form>
 $uploadtag  NSPFORM
 <input type="button" onClick="javascript:groupsearch()" value="$lt{'srch'}" />  
 <br />   my $newsmpproblemform=(<<NSPROBFORM);
 <span class="LC_nobreak">   <form action="/adm/coursedocs" method="post" name="newsmpproblem">
 <input type="button" onClick="javascript:groupimport();" value="$lt{'impo'}" />   <input type="hidden" name="active" value="cc" />
 $help{'Importing_LON-CAPA_Resource'}   $uploadtag
 </span>   <input type="hidden" name="importdetail" value="" />
 <br />   <a class="LC_menubuttons_link" href="javascript:makesmpproblem();">$lt{'sipr'}</a>
 <input type="button" onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />   $help{'Simple Problem'}
 <hr />   </form>
 <p>  
 $lt{'copm'}<br />  NSPROBFORM
 <input type="text" size="40" name="importmap" /><br />  
 <span class="LC_nobreak"><input type="button"    my $newdropboxform=(<<NDBFORM);
 onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"   <form action="/adm/coursedocs" method="post" name="newdropbox">
 value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />   <input type="hidden" name="active" value="cc" />
 $help{'Load_Map'}</span>   $uploadtag
 </p>   <input type="hidden" name="importdetail" value="" />
 </form>   <a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>
 <hr />   </form>
 <form action="/adm/groupsort" method="post" name="recover">  NDBFORM
 <input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1,0)" value="$lt{'reco'}" />  
 </form>   my $newexuploadform=(<<NEXUFORM);
 ENDFORM   <form action="/adm/coursedocs" method="post" name="newexamupload">
        unless ($env{'form.pagepath'}) {   <input type="hidden" name="active" value="cc" />
    $r->print(<<ENDFORM);   $uploadtag
 <hr />   <input type="hidden" name="importdetail" value="" />
 <form action="/adm/coursedocs" method="post" name="newext">   <a class="LC_menubuttons_link" href="javascript:makeexamupload();">$lt{'scuf'}</a>
 $uploadtag   $help{'Score_Upload_Form'}
 <input type="hidden" name="importdetail" value="" />   </form>
 <span class="LC_nobreak">  NEXUFORM
 <input name="newext" type="button" onClick="javascript:makenewext('newext');"  
 value="$lt{'extr'}" /> $help{'Adding_External_Resource'}   my $newbulform=(<<NBFORM);
 </span>   <form action="/adm/coursedocs" method="post" name="newbul">
 </form>   <input type="hidden" name="active" value="cc" />
 <br /><form action="/adm/imsimportdocs" method="post" name="ims">   $uploadtag
 <input type="hidden" name="folder" value="$folder" />   <input type="hidden" name="importdetail" value="" />
 <input name="imsimport" type="button" value="$lt{'imsf'}" onClick="javascript:makeims();" />   <a class="LC_menubuttons_link" href="javascript:makebulboard();" >$lt{'bull'}</a>
 </form>   $help{'Bulletin Board'}
 ENDFORM   </form>
        }  NBFORM
        $r->print('</td><td>');  
    my $newaboutmeform=(<<NAMFORM);
    <form action="/adm/coursedocs" method="post" name="newaboutme">
    <input type="hidden" name="active" value="cc" />
    $uploadtag
    <input type="hidden" name="importdetail" 
    value="$plainname=/adm/$udom/$uname/aboutme" />
    <a class="LC_menubuttons_link" href="javascript:document.newaboutme.submit()">$lt{'mypi'}</a>
    $help{'My Personal Information Page'}
    </form>
   NAMFORM
   
    my $newaboutsomeoneform=(<<NASOFORM);
    <form action="/adm/coursedocs" method="post" name="newaboutsomeone">
    <input type="hidden" name="active" value="cc" />
    $uploadtag
    <input type="hidden" name="importdetail" value="" />
    <a class="LC_menubuttons_link" href="javascript:makeabout();">$lt{'abou'}</a>
    </form>
   NASOFORM
   
   
    my $newrosterform=(<<NROSTFORM);
    <form action="/adm/coursedocs" method="post" name="newroster">
    <input type="hidden" name="active" value="cc" />
    $uploadtag
    <input type="hidden" name="importdetail" 
    value="$lt{'rost'}=/adm/viewclasslist" />
    <a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>
    $help{'Course Roster'}
    </form>
   NROSTFORM
   
   my $specialdocumentsform;
   my @specialdocumentsforma;
   my $newfolderform;
   my $newfolderb;
   
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
    my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');     my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
            $r->print(<<ENDFORM);  
 <br /><form action="/adm/coursedocs" method="post" name="newfolder">   my $newpageform=(<<NPFORM);
 <input type="hidden" name="folderpath" value="$path" />   <form action="/adm/coursedocs" method="post" name="newpage">
 <input type="hidden" name="importdetail" value="" />   <input type="hidden" name="folderpath" value="$path" />
 <span class="LC_nobreak">   <input type="hidden" name="importdetail" value="" />
 <input name="newfolder" type="button"   <input type="hidden" name="active" value="cc" />
 onClick="javascript:makenewfolder(this.form,'$folderseq');"   <a class="LC_menubuttons_link" href="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>
 value="$lt{'newf'}" />$help{'Adding_Folders'}   $help{'Adding_Pages'}
 </span>   </form>
 </form>  NPFORM
 <br /><form action="/adm/coursedocs" method="post" name="newpage">  
 <input type="hidden" name="folderpath" value="$path" />  
 <input type="hidden" name="importdetail" value="" />   $newfolderform=(<<NFFORM);
 <span class="LC_nobreak">   <form action="/adm/coursedocs" method="post" name="newfolder">
 <input name="newpage" type="button"   <input type="hidden" name="folderpath" value="$path" />
 onClick="javascript:makenewpage(this.form,'$pageseq');"   <input type="hidden" name="importdetail" value="" />
 value="$lt{'newp'}" />$help{'Adding_Pages'}   <input type="hidden" name="active" value="aa" />
 </span>   <a href="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}
 </form>   </form>
 <br /><form action="/adm/coursedocs" method="post" name="newsyl">  NFFORM
 $uploadtag  
 <input type="hidden" name="importdetail"    my $newsylform=(<<NSYLFORM);
 value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />   <form action="/adm/coursedocs" method="post" name="newsyl">
 <span class="LC_nobreak">   <input type="hidden" name="active" value="cc" />
 <input name="newsyl" type="submit" value="$lt{'syll'}" />    $uploadtag
  $help{'Syllabus'}   <input type="hidden" name="importdetail" 
 </span>   value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />
 </form>   <a class="LC_menubuttons_link" href="javascript:document.newsyl.submit()">$lt{'syll'}</a>
 <br /><form action="/adm/coursedocs" method="post" name="newnav">   $help{'Syllabus'}
 $uploadtag  
 <input type="hidden" name="importdetail"    </form>
 value="$lt{'navc'}=/adm/navmaps" />  NSYLFORM
 <span class="LC_nobreak">  
 <input name="newnav" type="submit" value="$lt{'navc'}" />   my $newgroupfileform=(<<NGFFORM);
 $help{'Navigate_Content'}   <form action="/adm/coursedocs" method="post" name="newgroupfiles">
 </span>   <input type="hidden" name="active" value="cc" />
 </form>   $uploadtag
 <br /><form action="/adm/coursedocs" method="post" name="newsmppg">   <input type="hidden" name="importdetail"
 $uploadtag   value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />
 <input type="hidden" name="importdetail" value="" />   <a class="LC_menubuttons_link" href="javascript:document.newgroupfiles.submit()">$lt{'grpo'}</a>
 <span class="LC_nobreak">   $help{'Group Portfolio'}
 <input name="newsmppg" type="button" value="$lt{'sipa'}"   </form>
 onClick="javascript:makesmppage();" /> $help{'Simple Page'}  NGFFORM
 </span>   @specialdocumentsforma=(
 </form>   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'"  onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform},
 <br /><form action="/adm/coursedocs" method="post" name="newsmpproblem">   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform},
 $uploadtag   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
 <input type="hidden" name="importdetail" value="" />   ); 
 <span class="LC_nobreak">  
 <input name="newsmpproblem" type="button" value="$lt{'sipr'}"        }
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}   push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},
 </span>   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},
 </form>   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
 <br /><form action="/adm/coursedocs" method="post" name="newdropbox">   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
 $uploadtag         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
 <input type="hidden" name="importdetail" value="" />   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},
 <span class="LC_nobreak">             {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},
 <input name="newdropbox" type="button" value="$lt{'drbx'}"   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
 onClick="javascript:makedropbox();" />   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/chrt.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);
 </span>           
 </form>    $specialdocumentsform = create_form_ul(create_list_elements(@specialdocumentsforma));
 <br /><form action="/adm/coursedocs" method="post" name="newexamupload">  
 $uploadtag  if($env{'form.pagepath'}) {
 <input type="hidden" name="importdetail" value="" />  
 <span class="LC_nobreak">   @specialdocumentsforma=(
 <input name="newexamupload" type="button" value="$lt{'scuf'}"   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
 onClick="javascript:makeexamupload();" />   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}
 $help{'Score_Upload_Form'}   );
 </span>   $specialdocumentsform= create_form_ul(create_list_elements(@specialdocumentsforma));
 </form>  }
 <br /><form action="/adm/coursedocs" method="post" name="newbul">  
 $uploadtag  my @tools = (
 <input type="hidden" name="importdetail" value="" />  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},
 <span class="LC_nobreak">  # {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" />'=>$imspform},
 <input name="newbulletin" type="button" value="$lt{'bull'}"   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1,0)" />'=>$recoverform},
 onClick="javascript:makebulboard();" />   );
 $help{'Bulletin Board'}  
 </span>  my @importdoc = (
 </form>      {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform},
 <br /><form action="/adm/coursedocs" method="post" name="newaboutme">      {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform}, 
 $uploadtag  );
 <input type="hidden" name="importdetail"   $fileuploadform =  create_form_ul(create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;
 value="$plainname=/adm/$udom/$uname/aboutme" />  my %orderhash = (
 <span class="LC_nobreak">   '00' => ['Newfolder',$newfolderform],
 <input name="newaboutme" type="submit" value="$lt{'mypi'}" />                  'aa' => ['Import Documents',$fileuploadform],
 $help{'My Personal Info'}                  'bb' => ['Published Resources',$simpleeditdefaultform],
 </span>                  'cc' => ['Special Documents',$specialdocumentsform],
 </form>   'dd' => ['Tools', create_form_ul(create_list_elements(@tools)).&generate_admin_options($containertag,$uploadtag,\%help,\%env)],
 <br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone">                  );
 $uploadtag  my $tid='1';
 <input type="hidden" name="importdetail" value="" />   $hadchanges=0;
 <span class="LC_nobreak">          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
 <input name="newaboutsomeone" type="button" value="$lt{'abou'}"          if ($error) {
 onClick="javascript:makeabout();" />             $r->print('<p><span class="LC_error">'.$error.'</span></p>');
 </span>         }
 </form>         if ($hadchanges) {
 <br /><form action="/adm/coursedocs" method="post" name="newgroupfiles">             &mark_hash_old();
 $uploadtag  
 <input type="hidden" name="importdetail"  
 value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />  
 <span class="LC_nobreak">  
 <input name="newgroupfiles" type="submit" value="$lt{'grpo'}" />  
 $help{'Group Files'}  
 </span>  
 </form>  
 <br /><form action="/adm/coursedocs" method="post" name="newroster">  
 $uploadtag  
 <input type="hidden" name="importdetail"   
 value="$lt{'rost'}=/adm/viewclasslist" />  
 <span class="LC_nobreak">  
 <input name="newroster" type="submit" value="$lt{'rost'}" />  
 $help{'Course Roster'}  
 </span>  
 </form>  
 ENDFORM  
        }         }
   
          &changewarning($r,'');
   $r->print(&generate_edit_table($tid,\%orderhash));
   
   $r->print('</div>');
    }
        if ($env{'form.pagepath'}) {         if ($env{'form.pagepath'}) {
            $r->print(<<ENDBLOCK);  
 <form action="/adm/coursedocs" method="post" name="newsmpproblem">  
 $uploadtag  
 <input type="hidden" name="importdetail" value="" />  
 <span class="LC_nobreak">  
 <input name="newsmpproblem" type="button" value="$lt{'sipr'}"  
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}  
 </span>  
 </form>  
 <br /><form action="/adm/coursedocs" method="post" name="newexamupload">  
 $uploadtag  
 <input type="hidden" name="importdetail" value="" />  
 <span class="LC_nobreak">  
 <input name="newexamupload" type="button" value="$lt{'scuf'}"  
 onClick="javascript:makeexamupload();" />  
 $help{'Score_Upload_Form'}  
 </span>  
 </form>  
 ENDBLOCK  
        }         }
        $r->print('</td></tr>'."\n".  
 '</table>');  
        $r->print('</td></tr>');  
     }  
 # ----------------------------------------------------- Supplemental documents  # ----------------------------------------------------- Supplemental documents
     if (!$forcestandard) {         $active = 'style="display: none;"';
        $r->print('<tr><td class="LC_docs_document">');         if($activeClass == 1){
 # '<h2>'.&mt('Supplemental Course Documents').            $active = 'style="display: block;"';
 #  ($allowed?' '.$help{'Supplemental'}:'').'</h2>');         }
          $r->print('<div class="LC_ContentBox" id="supplCourseDocuments" '.$active.'>');
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        unless ($folder=~/^supplemental/) {         unless ($folder=~/^supplemental/) {
    $folder='supplemental';     $folder='supplemental';
Line 3110  ENDBLOCK Line 3344  ENDBLOCK
        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&'.
                                     &escape(&mt('Supplemental '.$type.' Documents'));                                      &escape(&mt('Supplemental '.$crstype.' Documents'));
        }         } elsif ($allowed) {
        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);    $env{'form.folderpath'} = $savefolderpath;
        if ($error) {  
    $r->print('<p><span class="LC_error">'.$error.'</span></p>');  
        }         }
          $env{'form.pagepath'} = '';
        if ($allowed) {         if ($allowed) {
    my $folderseq=     my $folderseq=
        '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.         '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.
        '.sequence';         '.sequence';
   
    my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');     my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
    $r->print(<<ENDSUPFORM);  
 <table class="LC_docs_adddocs"><tr>   my $supupdocformbtn = "<input type='submit' value='".$lt{'upld'}."' />$help{'Uploading_From_Harddrive'}";
 <th>$lt{'upls'}</th>   my $supupdocform=(<<SUPDOCFORM);
 <th>$lt{'spec'}</th>   <form action="/adm/coursedocs" method="post" name="supuploaddocument" enctype="multipart/form-data">
 </tr>   <input type="hidden" name="active" value="ee" />
 <tr><td>   $fileupload
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">   <br />
 <input type="file" name="uploaddoc" size="40" />   <br />
 <br />   <span class="LC_nobreak">
 <br />   $checkbox
 <span class="LC_nobreak">   </span>
 <label>$lt{'parse'}?   <br /><br />
 <input type="checkbox" name="parserflag" />   $lt{'comment'}:<br />
 </label>   <textarea cols="50" rows="4" name="comment"></textarea>
 </span>   <br />
 <br /><br />   <input type="hidden" name="folderpath" value="$path" />
 $lt{'comment'}:<br />   <input type="hidden" name="cmd" value="upload_supplemental" />
 <textarea cols="50" rows="4" name="comment">  SUPDOCFORM
 </textarea>   $supupdocform .=  create_form_ul(Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";
 <br />  
 <input type="hidden" name="folderpath" value="$path" />   my $supnewfolderform=(<<SNFFORM);
 <input type="hidden" name="cmd" value="upload_supplemental" />   <form action="/adm/coursedocs" method="post" name="supnewfolder">
 <span class="LC_nobreak">   <input type="hidden" name="active" value="ee" />
 <input type="submit" value="$lt{'upld'}" />   <input type="hidden" name="folderpath" value="$path" />
  $help{'Uploading_From_Harddrive'}   <input type="hidden" name="importdetail" value="" />
 </span>   <a class="LC_menubuttons_link" href="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a> 
 </form>   $help{'Adding_Folders'}
 </td>   </form>
 <td>  SNFFORM
 <form action="/adm/coursedocs" method="post" name="supnewfolder">  
 <input type="hidden" name="folderpath" value="$path" />  
 <input type="hidden" name="importdetail" value="" />   my $supnewextform=(<<SNEFORM);
 <span class="LC_nobreak">   <form action="/adm/coursedocs" method="post" name="supnewext">
 <input name="newfolder" type="button"   <input type="hidden" name="active" value="ff" />
 onClick="javascript:makenewfolder(this.form,'$folderseq');"   <input type="hidden" name="folderpath" value="$path" />
 value="$lt{'newf'}" /> $help{'Adding_Folders'}   <input type="hidden" name="importdetail" value="" />
 </span>   <a class="LC_menubuttons_link" href="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}
 </form>   </form>
 <br /><form action="/adm/coursedocs" method="post" name="supnewext">  SNEFORM
 <input type="hidden" name="folderpath" value="$path" />  
 <input type="hidden" name="importdetail" value="" />   my $supnewsylform=(<<SNSFORM);
 <span class="LC_nobreak">   <form action="/adm/coursedocs" method="post" name="supnewsyl">
 <input name="newext" type="button"    <input type="hidden" name="active" value="ff" />
 onClick="javascript:makenewext('supnewext');"   <input type="hidden" name="folderpath" value="$path" />
 value="$lt{'extr'}" /> $help{'Adding_External_Resource'}   <input type="hidden" name="importdetail" 
 </span>   value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
 </form>   <a class="LC_menubuttons_link" href="javascript:document.supnewsyl.submit()">$lt{'syll'}</a>
 <br /><form action="/adm/coursedocs" method="post" name="supnewsyl">   $help{'Syllabus'}
 <input type="hidden" name="folderpath" value="$path" />   </form>
 <input type="hidden" name="importdetail"   SNSFORM
 value="Syllabus=/public/$coursedom/$coursenum/syllabus" />  
 <span class="LC_nobreak">   my $supnewaboutmeform=(<<SNAMFORM);
 <input name="newsyl" type="submit" value="$lt{'syll'}" />   <form action="/adm/coursedocs" method="post" name="supnewaboutme">
 $help{'Syllabus'}   <input type="hidden" name="active" value="ff" />
 </span>   <input type="hidden" name="folderpath" value="$path" />
 </form>   <input type="hidden" name="importdetail" 
 <br /><form action="/adm/coursedocs" method="post" name="subnewaboutme">   value="$plainname=/adm/$udom/$uname/aboutme" />
 <input type="hidden" name="folderpath" value="$path" />   <a class="LC_menubuttons_link" href="javascript:document.supnewaboutme.submit()">$lt{'mypi'}</a>
 <input type="hidden" name="importdetail"    $help{'My Personal Information Page'}
 value="$plainname=/adm/$udom/$uname/aboutme" />   </form>
 <span class="LC_nobreak">  SNAMFORM
 <input name="newaboutme" type="submit" value="$lt{'mypi'}" />  
 $help{'My Personal Info'}  
 </span>  my @specialdocs = (
 </form>   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.supnewsyl.submit()" />'
 </td></tr>              =>$supnewsylform},
 </table></td></tr>   {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="document.supnewaboutme.submit()" />'
 ENDSUPFORM              =>$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 = (
    '00' => ['Supnewfolder', $supnewfolderform],
                   'ee' => ['Import Documents',$supupdocform],
                   'ff' => ['Special Documents',create_form_ul(create_list_elements(@specialdocs))]
                   );
   
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
           if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }
           my $tid='2';
           $r->print(&generate_edit_table($tid,\%suporderhash));
       } else {
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
           if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }
     }      }
     $r->print('</table>');  
   
   $r->print('</div>');
   $r->print('</div></div>');
   
   
     if ($allowed) {      if ($allowed) {
  $r->print('   $r->print('
 <form method="post" name="extimport" action="/adm/coursedocs">  <form method="post" name="extimport" action="/adm/coursedocs">
Line 3214  ENDSUPFORM Line 3474  ENDSUPFORM
  }   }
  $r->print(&Apache::loncommon::end_page());   $r->print(&Apache::loncommon::end_page());
  return OK;   return OK;
 }   }
   
   sub generate_admin_options {
     my ($containertag,$uploadtag,$help_ref,$env_ref) = @_;
    my %lt=&Apache::lonlocal::texthash(
                                            'vc' => 'Verify Content',
                                            'cv' => 'Check/Set Resource Versions',
                                            'ls' => 'List Symbs',
                                            'sl' => 'Show Log',
                                            'imse' => 'IMS Export',
                                            'dcd' => 'Dump Course Documents to Construction Space: available on other servers'
                                             );
     my %help = %{$help_ref};
     my %env = %{$env_ref};
     my $dumpbut=&dumpbutton();
     my $exportbut=&exportbutton();
     my @list = (
    {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/verify.png" alt="'.$lt{vc}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "verify", "'.$lt{'vc'}.'")\' />' 
           => "<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 ''){
     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" src="/res/adm/pages/imsexport.png" alt="'.$lt{imse}.'" class="LC_menubuttons_link" href=\'javascript:injectData(document.courseverify, "dummy", "exportcourse", "'.&mt('IMS Export').'")\' />'
             =>$exportbut},
    {'<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/log.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>';
   
   }
   
   
   sub generate_edit_table {
       my ($tid,$orderhash_ref) = @_;
       return unless(ref($orderhash_ref) eq 'HASH');
       my %orderhash = %{$orderhash_ref};
       my $form;
       my $activetab;
       my $active;
       if($env{'form.active'} ne ''){
           $activetab = $env{'form.active'};
       }
       $form = '<div class="LC_Box" style="margin-right:0">';
       $form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">';
       foreach my $name (sort(keys(%orderhash))){
           if($name ne '00'){
               if($activetab eq '' || $activetab ne $name){
                  $active = '';
               }elsif($activetab eq $name){
                  $active = 'class="active"';
               }
               $form .= '<li '.$active.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>';
           } else {
       $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';
   
    }
       }
       $form .= '</ul>';
       $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">';
       foreach my $field (keys(%orderhash)){
    if($field ne '00'){
               if($activetab eq '' || $activetab ne $field){
                   $active = 'style="display: none;"';
               }elsif($activetab eq $field){
                   $active = 'style="display:block;"';
               }
               $form .= '<div id="'.$field.$tid.'"'
                       .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
                       .'</div>';
           }
       }
       $form .= '</div></div>';
   
       return $form;
   }
   
 sub editing_js {  sub editing_js {
     my ($udom,$uname) = @_;      my ($udom,$uname) = @_;
Line 3226  sub editing_js { Line 3564  sub editing_js {
                                           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 Uploaded Score',
                                           p_msp => 'Name of the 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',
                                           p_mbb => 'Title for the Discussion Board',                                            p_mbb => 'Title for the Discussion Board',
                                           p_mab => "Enter user:domain for User's 'About Me' Page",                                            p_mab => "Enter user:domain for User's Personal Information Page",
                                           p_mab2 => "About [_99]",                                            p_mab2 => 'Personal Information Page of ',
                                           p_mab_alrt1 => 'Not a valid user:domain',                                            p_mab_alrt1 => 'Not a valid user:domain',
                                           p_mab_alrt2 => 'Please enter both user and domain in the format user:domain',                                            p_mab_alrt2 => 'Please enter both user and domain in the format user:domain',
                                           p_chn => 'New Title',                                            p_chn => 'New Title',
Line 3279  function edittext(targetname,residx,titl Line 3617  function edittext(targetname,residx,titl
   
 function makeexamupload() {  function makeexamupload() {
    var title=prompt('$lt{"p_mxu"}');     var title=prompt('$lt{"p_mxu"}');
    if (title) {      if (title) {
     this.document.forms.newexamupload.importdetail.value=      this.document.forms.newexamupload.importdetail.value=
  escape(title)+'=/res/lib/templates/examupload.problem';   escape(title)+'=/res/lib/templates/examupload.problem';
     this.document.forms.newexamupload.submit();      this.document.forms.newexamupload.submit();
Line 3288  function makeexamupload() { Line 3626  function makeexamupload() {
   
 function makesmppage() {  function makesmppage() {
    var title=prompt('$lt{"p_msp"}');     var title=prompt('$lt{"p_msp"}');
    if (title) {      if (title) {
     this.document.forms.newsmppg.importdetail.value=      this.document.forms.newsmppg.importdetail.value=
  escape(title)+'=/adm/$udom/$uname/$now/smppg';   escape(title)+'=/adm/$udom/$uname/$now/smppg';
     this.document.forms.newsmppg.submit();      this.document.forms.newsmppg.submit();
Line 3297  function makesmppage() { Line 3635  function makesmppage() {
   
 function makesmpproblem() {  function makesmpproblem() {
    var title=prompt('$lt{"p_msb"}');     var title=prompt('$lt{"p_msb"}');
    if (title) {      if (title) {
     this.document.forms.newsmpproblem.importdetail.value=      this.document.forms.newsmpproblem.importdetail.value=
  escape(title)+'=/res/lib/templates/simpleproblem.problem';   escape(title)+'=/res/lib/templates/simpleproblem.problem';
     this.document.forms.newsmpproblem.submit();      this.document.forms.newsmpproblem.submit();
Line 3306  function makesmpproblem() { Line 3644  function makesmpproblem() {
   
 function makedropbox() {  function makedropbox() {
    var title=prompt('$lt{"p_mdb"}');     var title=prompt('$lt{"p_mdb"}');
    if (title) {      if (title) {
     this.document.forms.newdropbox.importdetail.value=      this.document.forms.newdropbox.importdetail.value=
         escape(title)+'=/res/lib/templates/DropBox.problem';          escape(title)+'=/res/lib/templates/DropBox.problem';
     this.document.forms.newdropbox.submit();      this.document.forms.newdropbox.submit();
Line 3331  function makeabout() { Line 3669  function makeabout() {
    if ((comp[0]) && (comp[1])) {     if ((comp[0]) && (comp[1])) {
        this.document.forms.newaboutsomeone.importdetail.value=         this.document.forms.newaboutsomeone.importdetail.value=
    '$lt{"p_mab2"}'+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';     '$lt{"p_mab2"}'+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';
        this.document.forms.newaboutsomeone.submit();         this.document.forms.newaboutsomeone.submit();
    } else {     } else {
                alert("$lt{'p_mab_alrt1'}");         alert("$lt{'p_mab_alrt1'}");
            }  
        } else {  
            alert("$lt{'p_mab_alrt2'}");  
        }  
    }     }
   } else {
      alert("$lt{'p_mab_alrt2'}");
   }
   }
 }  }
   
 function makeims() {  function makeims() {
     var caller = document.forms.ims.folder.value;  var caller = document.forms.ims.folder.value;
     var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one";  var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one";
     newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes");  newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes");
     newWindow.location.href = newlocation;  newWindow.location.href = newlocation;
 }  }
   
   
 function finishpick() {  function finishpick() {
     var title=this.document.forms.extimport.title.value;  var title=this.document.forms.extimport.title.value;
     var url=this.document.forms.extimport.url.value;  var url=this.document.forms.extimport.url.value;
     var form=this.document.forms.extimport.useform.value;  var form=this.document.forms.extimport.useform.value;
     var residx=this.document.forms.extimport.residx.value;  var residx=this.document.forms.extimport.residx.value;
     eval('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+'='+residx+'";this.document.forms.'+form+'.submit();');  eval('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+'='+residx+'";this.document.forms.'+form+'.submit();');
 }  }
   
 function changename(folderpath,index,oldtitle,container,pagesymb) {  function changename(folderpath,index,oldtitle,container,pagesymb) {
     var title=prompt('$lt{"p_chn"}',oldtitle);  var title=prompt('$lt{"p_chn"}',oldtitle);
     if (title) {  if (title) {
  this.document.forms.renameform.markcopy.value=-1;  this.document.forms.renameform.markcopy.value=-1;
  this.document.forms.renameform.title.value=title;  this.document.forms.renameform.title.value=title;
  this.document.forms.renameform.cmd.value='rename_'+index;  this.document.forms.renameform.cmd.value='rename_'+index;
         if (container == 'sequence') {  if (container == 'sequence') {
     this.document.forms.renameform.folderpath.value=folderpath;      this.document.forms.renameform.folderpath.value=folderpath;
         }  }
         if (container == 'page') {  if (container == 'page') {
             this.document.forms.renameform.pagepath.value=folderpath;      this.document.forms.renameform.pagepath.value=folderpath;
             this.document.forms.renameform.pagesymb.value=pagesymb;      this.document.forms.renameform.pagesymb.value=pagesymb;
         }  }
         this.document.forms.renameform.submit();  this.document.forms.renameform.submit();
     }  }
 }  }
   
 function removeres(folderpath,index,oldtitle,container,pagesymb,skip_confirm) {  function removeres(folderpath,index,oldtitle,container,pagesymb,skip_confirm) {
     if (skip_confirm || confirm('$lt{"p_rmr1"}\\n\\n$lt{"p_rmr2a"} "'+oldtitle+'" $lt{"p_rmr2b"}')) {  if (skip_confirm || confirm('$lt{"p_rmr1"}\\n\\n$lt{"p_rmr2a"} "'+oldtitle+'" $lt{"p_rmr2b"}')) {
  this.document.forms.renameform.markcopy.value=-1;  this.document.forms.renameform.markcopy.value=-1;
  this.document.forms.renameform.cmd.value='del_'+index;  this.document.forms.renameform.cmd.value='del_'+index;
         if (container == 'sequence') {  if (container == 'sequence') {
             this.document.forms.renameform.folderpath.value=folderpath;      this.document.forms.renameform.folderpath.value=folderpath;
         }  }
         if (container == 'page') {  if (container == 'page') {
             this.document.forms.renameform.pagepath.value=folderpath;      this.document.forms.renameform.pagepath.value=folderpath;
             this.document.forms.renameform.pagesymb.value=pagesymb;      this.document.forms.renameform.pagesymb.value=pagesymb;
         }  }
         this.document.forms.renameform.submit();  this.document.forms.renameform.submit();
     }  }
 }  }
   
 function cutres(folderpath,index,oldtitle,container,pagesymb,folder,skip_confirm) {  function cutres(folderpath,index,oldtitle,container,pagesymb,folder,skip_confirm) {
     if (skip_confirm || confirm('$lt{"p_ctr1a"}\\n$lt{"p_ctr1b"}\\n\\n$lt{"p_ctr2a"} "'+oldtitle+'" $lt{"p_ctr2b"}')) {  if (skip_confirm || confirm('$lt{"p_ctr1a"}\\n$lt{"p_ctr1b"}\\n\\n$lt{"p_ctr2a"} "'+oldtitle+'" $lt{"p_ctr2b"}')) {
  this.document.forms.renameform.cmd.value='cut_'+index;  this.document.forms.renameform.cmd.value='cut_'+index;
  this.document.forms.renameform.markcopy.value=index;  this.document.forms.renameform.markcopy.value=index;
  this.document.forms.renameform.copyfolder.value=folder+'.'+container;  this.document.forms.renameform.copyfolder.value=folder+'.'+container;
         if (container == 'sequence') {  if (container == 'sequence') {
             this.document.forms.renameform.folderpath.value=folderpath;      this.document.forms.renameform.folderpath.value=folderpath;
         }  }
         if (container == 'page') {  if (container == 'page') {
             this.document.forms.renameform.pagepath.value=folderpath;      this.document.forms.renameform.pagepath.value=folderpath;
             this.document.forms.renameform.pagesymb.value=pagesymb;      this.document.forms.renameform.pagesymb.value=pagesymb;
         }  }
         this.document.forms.renameform.submit();  this.document.forms.renameform.submit();
     }  }
 }  }
   
 function markcopy(folderpath,index,oldtitle,container,pagesymb,folder) {  function markcopy(folderpath,index,oldtitle,container,pagesymb,folder) {
     this.document.forms.renameform.markcopy.value=index;  this.document.forms.renameform.markcopy.value=index;
     this.document.forms.renameform.copyfolder.value=folder+'.'+container;  this.document.forms.renameform.copyfolder.value=folder+'.'+container;
     if (container == 'sequence') {  if (container == 'sequence') {
  this.document.forms.renameform.folderpath.value=folderpath;  this.document.forms.renameform.folderpath.value=folderpath;
     }  }
     if (container == 'page') {  if (container == 'page') {
  this.document.forms.renameform.pagepath.value=folderpath;  this.document.forms.renameform.pagepath.value=folderpath;
  this.document.forms.renameform.pagesymb.value=pagesymb;  this.document.forms.renameform.pagesymb.value=pagesymb;
     }  }
     this.document.forms.renameform.submit();  this.document.forms.renameform.submit();
   }
   
   function unselectInactive(nav) {
   currentNav = document.getElementById(nav);
   currentLis = currentNav.getElementsByTagName('LI');
   for (i = 0; i < currentLis.length; i++) {
    if(currentLis[i].className == 'right active' || currentLis[i].className == 'right'){
    currentLis[i].className = 'right';
    }else{
    currentLis[i].className = 'i';
    }
   }
   }
   
   function hideAll(current, nav, data) {
   unselectInactive(nav);
   if(current.className == 'right'){
    current.className = 'right active'
    }else{
    current.className = 'active';
   }
   currentData = document.getElementById(data);
   currentDivs = currentData.getElementsByTagName('DIV');
   for (i = 0; i < currentDivs.length; i++) {
    if(currentDivs[i].className == 'LC_ContentBox'){
    currentDivs[i].style.display = 'none';
    }
   }
   }
   
   function openTabs(pageId) {
    tabnav = document.getElementById(pageId).getElementsByTagName('UL');
    if(tabnav.length > 2 ){
    currentNav = document.getElementById(tabnav[1].id);
    currentLis = currentNav.getElementsByTagName('LI');
    for(i = 0; i< currentLis.length; i++){
    if(currentLis[i].className == 'active') {
    funcString = currentLis[i].onclick.toString();
    tab = funcString.split('"');
                                   if(tab.length < 2) {
                                      tab = funcString.split("'");
                                   }
    currentData = document.getElementById(tab[1]);
           currentData.style.display = 'block';
    }
    }
    }
   }
   
   function showPage(current, pageId, nav, data) {
    hideAll(current, nav, data);
    openTabs(pageId);
    unselectInactive(nav);
    current.className = 'active';
    currentData = document.getElementById(pageId);
    currentData.style.display = 'block';
    return false;
   }
   
   function injectData(current, hiddenField, name, value) {
    currentElement = document.getElementById(hiddenField);
    currentElement.name = name;
    currentElement.value = value;
    current.submit();
 }  }
   
 ENDNEWSCRIPT  ENDNEWSCRIPT
Line 3443  Available help topics Line 3845  Available help topics
   
 =item mapread()  =item mapread()
   
 Mapread read maps into LONCAPA::map:: global arrays   Mapread read maps into LONCAPA::map:: global arrays
 @order and @resources, determines status  @order and @resources, determines status
 sets @order - pointer to resources in right order  sets @order - pointer to resources in right order
 sets @resources - array with the resources with correct idx  sets @resources - array with the resources with correct idx

Removed from v.1.325.2.1  
changed lines
  Added in v.1.423


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