Diff for /loncom/interface/londocs.pm between versions 1.325.2.6 and 1.401

version 1.325.2.6, 2010/01/22 03:41:58 version 1.401, 2009/10/22 22:25:36
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 $crstype = &Apache::loncommon::course_type();      my $type = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     if ($home) {      if ($home) {
  return '<div>'.   my $link = "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \"".&mt('Dump '.$type.' DOCS to Construction Space')."\")'>".&mt('Dump '.$type.' DOCS to Construction Space')."</a>";
     '<input type="submit" name="dumpcourse" value="'.   return $link.' '.
     &mt('Dump '.$crstype.' DOCS to Construction Space').'" />'.      &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').'<br />';
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').  
     '</div>';  
     } else {      } else {
  return '<div>'.   return '<div>'.
      &mt('Dump '.$crstype.       &mt('Dump '.$type.
  ' DOCS to Construction Space: available on other servers').   ' DOCS to Construction Space: available on other servers').
  '</div>';   '</div>';
     }      }
Line 136  sub dumpbutton { Line 134  sub dumpbutton {
 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 $crstype = &Apache::loncommon::course_type();      my $type = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' DOCS to Construction Space').      $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
       '<form name="dumpdoc" action="" method="post">');        '<form name="dumpdoc" action="" method="post">');
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' DOCS to Construction Space'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$type.' DOCS 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 176  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 255  sub dumpcourse {
  $r->print(&Apache::loncommon::end_data_table());   $r->print(&Apache::loncommon::end_data_table());
  &untiehash();   &untiehash();
  $r->print(   $r->print(
   '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype DOCS").'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $type DOCS").'" /></p></form>');
     }      }
 }  }
   
   
   
 sub exportbutton {  sub exportbutton {
     my $crstype = &Apache::loncommon::course_type();      my $type = &Apache::loncommon::course_type();
     return '<input type="submit" name="exportcourse"'      return "<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".
           .' value="'.&mt('IMS Export').'"'  
           .' title="'.&mt('Export '.$crstype.' to IMS Package').'" />'.  
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';
 }  }
   
Line 275  sub exportbutton { Line 271  sub exportbutton {
   
 sub exportcourse {  sub exportcourse {
     my $r=shift;      my $r=shift;
     my $crstype = &Apache::loncommon::course_type();      my $type = &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 '.$crstype.' to IMS Package').          $r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package').
                   '<h2>'.&mt('IMS Export Failed').'</h2>'.                    '<h2>'.&mt('IMS Export Failed').'</h2>'.
                   '<div class="LC_error">');                    '<div class="LC_error">'.
         if ($crstype eq 'Community') {                    &mt('Unable to retrieve information about course contents').
             $r->print(&mt('Unable to retrieve information about community contents'));                    '</div><a href="/adm/coursedocs">'.&mt('Return to Course Editor').'</a>');
         } else {          &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
             $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 345  sub exportcourse { Line 331  sub exportcourse {
                 open(OUTPUT, "zip -r $imszip *  2> /dev/null |");                  open(OUTPUT, "zip -r $imszip *  2> /dev/null |");
                 close(OUTPUT);                  close(OUTPUT);
                 chdir $cwd;                  chdir $cwd;
                 $outcome .= '<p>'  
                            .&mt('[_1]Your IMS package[_2] is ready for download.'  
                                ,'<a href="'.$imszipfile.'">','</a>')  
                            .'</p>';  
                 if ($copyresult) {                  if ($copyresult) {
                     $outcome .= '<p class="LC_error">'                      $outcome .= '<p class="LC_error">'
                                .&mt('The following errors occurred during export - [_1]'                                 .&mt('The following errors occurred during export - [_1]'
                                    ,$copyresult)                                     ,$copyresult)
                                .'</p>';                                 .'</p>';
                 }                  }
                   $outcome .= '<p>'
                              .&mt('[_1]Your IMS package[_2] is ready for download.'
                                  ,'<a href="'.$imszipfile.'">','</a>')
                              .'</p>';
             } else {              } else {
                 $outcome = '<p class="LC_error">'                  $outcome = '<p class="LC_error">'
                           .&mt('Unfortunately you will not be able to retrieve'                            .&mt('Unfortunately you will not be able to retrieve'
Line 367  sub exportcourse { Line 353  sub exportcourse {
                           .'</a></p>';                            .'</a></p>';
             }              }
         }          }
         $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package'));          $r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package'));
         $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));   $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='<form name="exportdoc" action="" method="post">'."\n".          my $display;
                     '<p>'.          $display = '<form name="exportdoc" action="" method="post">'."\n";
                     &mt('Choose which items you wish to export from your '.$crstype.'.').          $display .= '<p>'
                     '</p>'.                     .&mt('Choose which items you wish to export from your '.$type.'.')
                     '<div class="LC_columnSection"><fieldset>'.                     .'</p>';
           $display .= '<div class="LC_columnSection"><fieldset>'.
                     '<legend>'.&mt('Content items').'</legend>'.                      '<legend>'.&mt('Content items').'</legend>'.
                     '<input type="button" value="'.&mt('check all').'" '.                      '<input type="button" value="'.&mt('check all').'" '.
                     'onclick="javascript:checkAll(document.exportdoc.archive)" />'.                      'onclick="javascript:checkAll(document.exportdoc.archive)" />'.
                     '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.                      '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                     ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>';                      ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>'.
         if ($numdisc > 0) {                      '<fieldset>'.
             $display .= '<fieldset>'.                      '<legend>'.&mt('Discussion posts').'</legend>'.
                         '<legend>'.&mt('Discussion posts').'</legend>'.                      '<input type="button" value="'.&mt('check all').'"'.
                         '<input type="button" value="'.&mt('check all').'"'.                      ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
                         ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.                      '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
                         '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.                      ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.
                         ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.                      '</fieldset></div>';
                         '</fieldset>';  
         }  
         $display .= '</div>';  
         my $curRes;          my $curRes;
         my $depth = 0;          my $depth = 0;
         my $count = 0;          my $count = 0;
Line 402  sub exportcourse { Line 386  sub exportcourse {
         my $lastcontainer = $startcount;          my $lastcontainer = $startcount;
         $display .= &Apache::loncommon::start_data_table()          $display .= &Apache::loncommon::start_data_table()
                    .&Apache::loncommon::start_data_table_header_row()                     .&Apache::loncommon::start_data_table_header_row()
                    .'<th>'.&mt('Export content item?').'</th>';                     .'<th>'.&mt('Export content item?').'</th>'
                      .'<th>';
         if ($numdisc > 0) {          if ($numdisc > 0) {
             $display .= '<th>'.&mt('Export discussion posts?').'</th>';              $display .= &mt('Export discussion posts?');
           } else {
                $display .= '&nbsp;';
         }          }
         $display .= &Apache::loncommon::end_data_table_header_row();          $display .= '</th>'
                      .&Apache::loncommon::end_data_table_header_row();
         while ($curRes = $it->next()) {          while ($curRes = $it->next()) {
             if (ref($curRes)) {              if (ref($curRes)) {
                 $count ++;                  $count ++;
Line 427  sub exportcourse { Line 415  sub exportcourse {
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                          $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                     }                      }
                 }                  }
                 my $currelem = $count+$boards+$startcount;  
                 $display .= &Apache::loncommon::start_data_table_row()                  $display .= &Apache::loncommon::start_data_table_row()
                            .'<td>'."\n"                             .'<td>'."\n"
                            .'<input type="checkbox" name="archive" value="'.$count.'" ';                             .'<input type="checkbox" name="archive" value="'.$count.'" ';
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {                  if (($curRes->is_sequence()) || ($curRes->is_page())) {
                     $lastcontainer = $currelem;                      my $checkitem = $count + $boards + $startcount;
                     $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';                      $display .= 'onclick="javascript:propagateCheck('."'$checkitem'".')"';
                 }                  }
                 $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" />' x2)."\n";                      $display .= '<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'
                                  .'<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'."\n";
                 }                  }
                 if ($curRes->is_sequence()) {                  if ($curRes->is_sequence()) {
                     $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";                      $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";
                       $lastcontainer = $count + $startcount + $boards;
                 } elsif ($curRes->is_page()) {                  } elsif ($curRes->is_page()) {
                     $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";                      $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";
                       $lastcontainer = $count + $startcount + $boards;
                 }                  }
                   my $currelem = $count+$boards+$startcount;
                 $children{$parent{$depth}} .= $currelem.':';                  $children{$parent{$depth}} .= $currelem.':';
                 $display .= '&nbsp;'.$curRes->title().'</td>'."\n";                  $display .= '&nbsp;'.$curRes->title().'</td>'."\n";
   
                 # Existing discussion posts?                  # Existing discussion posts?
   
                 if ($discussiontime{$ressymb} > 0) {                  if ($discussiontime{$ressymb} > 0) {
                     $boards ++;                      $boards ++;
                       $currelem = $count+$boards+$startcount;
                     $display .= '<td align="right">'                      $display .= '<td align="right">'
                                .'<input type="checkbox" name="discussion" value="'.$count.'" />'                                 .'<input type="checkbox" name="discussion" value="'.$count.'" />'
                                .'</td>'."\n";                                 .'</td>'."\n";
Line 464  sub exportcourse { Line 455  sub exportcourse {
         my $scripttag = qq|          my $scripttag = qq|
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![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 474  function checkAll(field) { Line 464  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 489  function propagateCheck(item) { Line 479  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 512  function containerCheck(item) { Line 502  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 '.$crstype.' to IMS Package',   $r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package',
   $scripttag));   $scripttag));
  $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($crstype).' to IMS content package'));   $r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
  $r->print($display.   $r->print($display.
                   '<p><input type="hidden" name="finishexport" value="1" />'.                    '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.                    '<input type="submit" name="exportcourse" value="'.
Line 551  sub create_ims_store { Line 540  sub create_ims_store {
     my $manifestfilename = $$tempexport.$manifest;      my $manifestfilename = $$tempexport.$manifest;
     if ($ims_manifest = Apache::File->new('>'.$manifestfilename)) {      if ($ims_manifest = Apache::File->new('>'.$manifestfilename)) {
         $$manifestok=1;          $$manifestok=1;
         print $ims_manifest           print $ims_manifest
 '<?xml version="1.0" encoding="UTF-8"?>'."\n".  '<?xml version="1.0" encoding="UTF-8"?>'."\n".
 '<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"'.  '<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"'.
 ' xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"'.  ' xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"'.
Line 807  sub replicate_content { Line 796  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 847  sub replicate_content { Line 836  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 900  sub extract_media { Line 889  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 969  sub group_import { Line 958  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 992  sub group_import { Line 981  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 1001  sub group_import { Line 990  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 1009  sub group_import { Line 998  sub group_import {
 }  }
   
 sub breadcrumbs {  sub breadcrumbs {
     my ($allowed,$crstype)=@_;      my ($allowed,$type)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     my (@folders);      my (@folders);
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
Line 1024  sub breadcrumbs { Line 1013  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 1032  sub breadcrumbs { Line 1030  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 1043  sub breadcrumbs { Line 1041  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 '.$type.' Documents');
                     $name = &mt('Supplemental '.$crstype.' Documents');  
                 } else {  
                     $name = &mt($crstype.' 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 1173  sub docs_change_log { Line 1166  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 1224  sub docs_change_log { Line 1217  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 1262  sub update_paste_buffer { Line 1255  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 1284  sub print_paste_buffer { Line 1277  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 1301  ENDPASTE Line 1295  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 1316  ENDPASTE Line 1310  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 1386  sub do_paste_from_buffer { Line 1380  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 1400  sub do_paste_from_buffer { Line 1394  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 1424  sub uniqueness_check { Line 1418  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 1450  sub update_parameter { Line 1444  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 1478  sub handle_edit_cmd { Line 1472  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 1503  sub handle_edit_cmd { Line 1497  sub handle_edit_cmd {
 }  }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$type)=@_;
   
     my $container= ($env{'form.pagepath'}) ? 'page'      my $container= ($env{'form.pagepath'}) ? 'page'
                            : 'sequence';                             : 'sequence';
   
Line 1518  sub editor { Line 1511  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($allowed,$crstype);      if ($allowed) {
     $r->print($breadcrumbtrail);          ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
           &breadcrumbs($allowed,$type);
           $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 1543  sub editor { Line 1541  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 1589  sub editor { Line 1587  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 1599  sub editor { Line 1597  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,$crstype));                                $coursenum);
  $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 1708  sub process_file_upload { Line 1742  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 1763  sub parse_supplemental_title { Line 1797  sub parse_supplemental_title {
     }      }
     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,$crstype)=@_;      my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
   
     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 1784  sub entryline { Line 1817  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 1811  sub entryline { Line 1844  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 1853  sub entryline { Line 1886  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 1892  END Line 1925  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 1930  END Line 1961  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 1945  END Line 1976  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 1969  END Line 2000  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 1980  END Line 2011  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 1990  END Line 2021  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 2002  END Line 2033  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 2010  END Line 2041  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 2030  END Line 2061  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">'.$reinit.'</span>').$external."      '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.&mt('(re-initialize course to access)').'</span>').$external."
   </td>";    </td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
Line 2072  END Line 2097  END
   <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 2099  sub tiehash { Line 2124  sub tiehash {
                 $hashtied=1;                  $hashtied=1;
     }      }
  }   }
     }          }
 }  }
   
 sub untiehash {  sub untiehash {
Line 2195  List Symbs Line 2220  List Symbs
 sub list_symbs {  sub list_symbs {
     my ($r) = @_;      my ($r) = @_;
   
     my $crstype = &Apache::loncommon::course_type();      my $type = &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 2204  sub list_symbs { Line 2229  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($crstype).':'.$env{'request.course.id'});          &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
     } else {      } else {
         $r->print("<pre>\n");          $r->print("<pre>\n");
         foreach my $res ($navmap->retrieveResources()) {          foreach my $res ($navmap->retrieveResources()) {
Line 2218  sub list_symbs { Line 2243  sub list_symbs {
   
 sub verifycontent {  sub verifycontent {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $type = &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 '.$crstype.' Documents'));     $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
Line 2231  sub verifycontent { Line 2256  sub verifycontent {
        if ($hash{$key}=~/\.(page|sequence)$/) {         if ($hash{$key}=~/\.(page|sequence)$/) {
    if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {     if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {
        $r->print('<hr /><span class="LC_error">'.         $r->print('<hr /><span class="LC_error">'.
                          &mt('The following sequence or page is included more than once in your '.$crstype.': ').   &mt('The following sequence or page is included more than once in your '.$type.': ').
  &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 />'));
    }     }
Line 2254  sub devalidateversioncache { Line 2279  sub devalidateversioncache {
   
 sub checkversions {  sub checkversions {
     my ($r) = @_;      my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $type = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));      $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));      $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions"));
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 2307  sub checkversions { Line 2332  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 2317  sub checkversions { Line 2342  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 '.$crstype);   $header=&mt('All Documents in '.$type);
  $allsel=1;   $allsel=1;
  foreach my $key (keys(%hash)) {   foreach my $key (keys(%hash)) {
     if ($key=~/^ids\_(\/res\/.+)$/) {      if ($key=~/^ids\_(\/res\/.+)$/) {
Line 2362  sub checkversions { Line 2387  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 '.$crstype,        ('st' => 'Version changes since start of '.$type,
        '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 2371  sub checkversions { Line 2396  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 '.$crstype,         've' => 'Version used in '.$type,
                'vu' => 'Set Version to be used in '.$crstype,                 'vu' => 'Set Version to be used in '.$type,
 'sv' => 'Set Versions to be used in '.$crstype.' according to Selections below',  'sv' => 'Set Versions to be used in '.$type.' 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 2420  ENDHEADERS Line 2445  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 '.$crstype.': '.                        '<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$type.': '.
                       '<font size="+1">');                        '<font size="+1">');
 # Used in course  # Used in course
     my $usedversion=$hash{'version_'.$linkurl};      my $usedversion=$hash{'version_'.$linkurl};
Line 2437  ENDHEADERS Line 2462  ENDHEADERS
       ('select_form_order' =>        ('select_form_order' =>
        ['',1..$currentversion,'mostrecent'],         ['',1..$currentversion,'mostrecent'],
        '' => '',         '' => '',
        'mostrecent' => &mt('most recent'),         'mostrecent' => '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 2448  ENDHEADERS Line 2473  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 2459  ENDHEADERS Line 2484  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 2550  sub changewarning { Line 2575  sub changewarning {
     $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'}.'</p></form>'."\n\n");  $help{'Caching'}.'</p></form>'."\n\n");
   
 }  }
   
   
Line 2558  sub init_breadcrumbs { Line 2582  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=>&Apache::loncommon::course_type().' Editor',      text=>"Edit ".&Apache::loncommon::course_type(),
     faq=>273,      faq=>273,
     bug=>'Instructor Interface',      bug=>'Instructor Interface',
                                             help => 'Docs_Adding_Course_Doc'});                                              help => 'Docs_Adding_Course_Doc'});
Line 2576  sub handler { Line 2600  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 $crstype = &Apache::loncommon::course_type();      my $type = &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 2596  sub handler { Line 2621  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 2631  sub handler { Line 2656  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 2648  sub handler { Line 2675  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 '.$crstype.' Documents')).'&'.                                    &escape(&mt('Supplemental '.$type.' Documents')).'&'.
                                   $env{'form.folderpath'};                                    $env{'form.folderpath'};
     }      }
     &Apache::loncommon::store_course_settings('docs_folderpath',      &Apache::loncommon::store_course_settings('docs_folderpath',
Line 2672  sub handler { Line 2699  sub handler {
        $showdoc='/'.$1;         $showdoc='/'.$1;
     }      }
     unless ($showdoc) { # got called from remote      unless ($showdoc) { # got called from remote
        if (($env{'form.folder'}=~/^(?:group|default)_/) ||          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      } else { # got called in sequence from course
        $allowed=0;         $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 2708  sub handler { Line 2755  sub handler {
               .$script."\n"                .$script."\n"
               .'// ]]>'."\n"                .'// ]]>'."\n"
               .'</script>'."\n";                .'</script>'."\n";
     my $brcrum = [{href=>"/adm/createuser",text=>"$crstype Documents"}];  
     $r->print(&Apache::loncommon::start_page("$crstype Documents", $script,      # Breadcrumbs
     {'force_register' => $showdoc,      &Apache::lonhtmlcommon::clear_breadcrumbs();
                                      'bread_crumbs' => $brcrum}).      if ($allowed) {
       &Apache::loncommon::help_open_menu('','',273,'RAT'));          &Apache::lonhtmlcommon::add_breadcrumb({
                 href=>"/adm/coursedocs",text=>"$type Editor"});
   
           $r->print(&Apache::loncommon::start_page("$type Editor", $script,
                                                    {'force_register' => $showdoc,})
                    .&Apache::loncommon::help_open_menu('','',273,'RAT')
                    .&Apache::lonhtmlcommon::breadcrumbs(
                        'Editing the Table of Contents for your '.$type,
                        'Docs_Adding_Course_Doc')
           );
       } else {
           my $folder=$env{'form.folder'};
           if ($folder eq '' || $folder eq 'supplemental') {
               $env{'form.folderpath'} = 'supplemental&'.
                                         &escape(&mt('Supplemental '.$type.' Documents'));
           }
           my ($breadcrumbtrail) = &breadcrumbs($allowed,$type);
           $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 2745  sub handler { Line 2811  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 2782  sub handler { Line 2848  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 2795  sub handler { Line 2861  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 2804  sub handler { Line 2870  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($crstype).' document',                  'uplm' => 'Upload a new main '.lc($type).' document',
                 'upls' => 'Upload a new supplemental '.lc($crstype).' document',                  'upls' => 'Upload a new supplemental '.lc($type).' 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' => 'Upload Document',                  'upld' => 'Upload Document',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
Line 2828  sub handler { Line 2892  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' => 'IMS Import',                  'imsf' => 'IMS Import',
                 'imsl' => 'Import IMS package',                  '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 %tabtitles = (   my $fileupload=(<<FIUP);
                        main => {   $lt{'file'}:<br />
                                  Course => &mt('Main Course Documents'),   <input type="file" name="uploaddoc" size="40" />
                                  Community => &mt('Main Community Documents'),  FIUP
                                },  
                        supplemental => {   my $checkbox=(<<CHBO);
                                  Course => &mt('Supplemental Course Documents'),           <!-- <label>$lt{'parse'}?
                                  Community => &mt('Supplemental Community Documents'),   <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" align="left" src="/res/adm/pages/src.png" alt="pic03" />' => "$uploadtag<a onclick='javascript:groupsearch()'>$lt{'srch'}</a>" },
    { '<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/res.png" alt="pic04" />' => "<a onclick='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },
    { '<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/vbkm.png" alt="pic05" />' => "<a onclick='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 onclick="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 2864  sub handler { Line 2987  sub handler {
        if (!$folderpath) {         if (!$folderpath) {
    if ($env{'form.folder'} eq '' ||     if ($env{'form.folder'} eq '' ||
        $env{'form.folder'} eq 'supplemental') {         $env{'form.folder'} eq 'supplemental') {
        $folderpath='default&'.&escape($tabtitles{'main'}{$crstype});         $folderpath='default&'.
      &escape(&mt('Main '.$type.' 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);
    <form name="renameform" method="post" action="/adm/coursedocs">
      <input type="hidden" name="title" />
      <input type="hidden" name="cmd" />
      <input type="hidden" name="markcopy" />
      <input type="hidden" name="copyfolder" />
      $containertag
    </form>
    <form name="simpleedit" method="post" action="/adm/coursedocs">
      <input type="hidden" name="importdetail" value="" />
      $uploadtag
    </form>
   HIDDENFORM
       }
   # --------------------------------------------------------- Main tab structure
    
       my $activeClass = 1;
       my $active = '';
   
        $r->print(<<ENDCOURSEVERIFY);      if ($allowed) {
 <form name="renameform" method="post" action="/adm/coursedocs">          $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
   <input type="hidden" name="title" />          if (($standard) && ($allowed) && (!$forcesupplement) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'}eq"" || ($env{'form.pagepath'}))) {
   <input type="hidden" name="cmd" />              if($activeClass == 1){
   <input type="hidden" name="markcopy" />                  $active = 'class="active"';
   <input type="hidden" name="copyfolder" />          $activeClass = 0;
   $containertag      }
 </form>          }
 <form name="simpleedit" method="post" action="/adm/coursedocs">          $r->print('<li '.$active.' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.&mt('Main Course Documents').'</b></a></li>');
   <input type="hidden" name="importdetail" value="" />          $active = '';
   $uploadtag          if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {
 </form>              if($activeClass == 1){
 <form action="/adm/coursedocs" method="post" name="courseverify">                  $active = 'class="active"';
   <div class="LC_docs_course_commands">              }
           }
       <div>          $r->print('<li '.$active.' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');"><a href="#"><b>'.&mt('Supplemental Course Documents').'</b></a></li>');
         <input type="submit" name="verify" value="$lt{'vc'}" />$help{'Verify_Content'}          $r->print('</ul>');
       </div>      } else {
       <div>          $r->print('<br />');
         <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}  
       </div>  
         $dumpbut  
         $exportbut  
       <div>  
         <input type="submit" name="listsymbs" value="$lt{'ls'}" />  
       </div>  
       <div>  
         <input type="hidden" name="folder" value="$env{'form.folder'}" />  
         <input type="submit" name="docslog" value="$lt{'sl'}" />  
       </div>  
   </div>  
 </form>  
 <div style="clear: both; height: 0px;">&nbsp;</div>  
 ENDCOURSEVERIFY  
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',  
      &mt('Editing the Table of Contents for your '.$crstype)));  
     }      }
       $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 '.$crstype.' Documents'));     $savefolderpath = $env{'form.folderpath'};
      $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
            $uploadtag = '<input type="hidden" name="folderpath" value="'.             $uploadtag = '<input type="hidden" name="folderpath" value="'.
        &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';         &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }         }
Line 2934  ENDCOURSEVERIFY Line 3063  ENDCOURSEVERIFY
        } else {         } else {
            #$postexec='self.close();';             #$postexec='self.close();';
        }         }
        $hadchanges=0;  
        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,  
    $upload_output,$crstype);  
        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 2953  ENDCOURSEVERIFY Line 3072  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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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'}" title="$lt{imsl}" onclick="javascript:makeims();" />   <a onclick="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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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 onclick="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" align="left" src="/res/adm/pages/page.png" alt="pic06" />'=>$newpageform},
 <br /><form action="/adm/coursedocs" method="post" name="newsmpproblem">   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/syllabus.png" alt="pic07" />'=>$newsylform},
 $uploadtag   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/groupportfolio.png" alt="pic08" />'=>$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" align="left" src="/res/adm/pages/navigation.png" alt="pic09" />'=>$newnavform},
 </span>   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/simple.png" alt="pic10" />'=>$newsmppageform},
 </form>   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/simpprob.png" alt="pic11" />'=>$newsmpproblemform},
 <br /><form action="/adm/coursedocs" method="post" name="newdropbox">   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/dropbox.png" alt="pic12" />'=>$newdropboxform},
 $uploadtag         {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/scoreupfrm.png" alt="pic13" />'=>$newexuploadform},
 <input type="hidden" name="importdetail" value="" />   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/bchat.png" alt="pic14" />'=>$newbulform},
 <span class="LC_nobreak">             {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/myaboutme.png" alt="pic15" />'=>$newaboutmeform},
 <input name="newdropbox" type="button" value="$lt{'drbx'}"   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/aboutme.png" alt="pic16" />'=>$newaboutsomeoneform},
 onclick="javascript:makedropbox();" />   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/chrt.png" alt="pic17" />'=>$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" align="left" src="/res/adm/pages/simpprob.png" alt="pic32" />'=>$newsmpproblemform},
 onclick="javascript:makeexamupload();" />   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/scoreupfrm.png" alt="pic33" />'=>$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="pic18" />'=>$extresourcesform},
 <span class="LC_nobreak">   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="pic19" />'=>$imspform},
 <input name="newbulletin" type="button" value="$lt{'bull'}"   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/recover.png" alt="pic20" />'=>$recoverform},
 onclick="javascript:makebulboard();" />   );
 $help{'Bulletin Board'}  
 </span>  my %orderhash = (
 </form>   '00' => ['Newfolder',$newfolderform],
 <br /><form action="/adm/coursedocs" method="post" name="newaboutme">                  'aa' => ['Upload Document',$fileuploadform],
 $uploadtag                  'bb' => ['Published Resources',$simpleeditdefaultform],
 <input type="hidden" name="importdetail"                   'cc' => ['Special Documents',$specialdocumentsform],
 value="$plainname=/adm/$udom/$uname/aboutme" />   'dd' => ['Tools', create_form_ul(create_list_elements(@tools)).&generate_admin_options($containertag,$uploadtag,\%help,\%env)],
 <span class="LC_nobreak">                  );
 <input name="newaboutme" type="submit" value="$lt{'mypi'}" />  my $tid='1';
 $help{'My Personal Info'}  my $varcd = 'Main Course Documents';
 </span>   $hadchanges=0;
 </form>          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);
 <br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone">         if ($error) {
 $uploadtag             $r->print('<p><span class="LC_error">'.$error.'</span></p>');
 <input type="hidden" name="importdetail" value="" />         }
 <span class="LC_nobreak">         if ($hadchanges) {
 <input name="newaboutsomeone" type="button" value="$lt{'abou'}"              &mark_hash_old();
 onclick="javascript:makeabout();" />  
 </span>  
 </form>  
 <br /><form action="/adm/coursedocs" method="post" name="newgroupfiles">  
 $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,$varcd,\%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 3184  ENDBLOCK Line 3302  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($tabtitles{'supplemental'}{$crstype});                                      &escape(&mt('Supplemental '.$type.' Documents'));
        }         } elsif ($allowed) {
        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);    $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 onclick="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 onclick="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 onclick="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 onclick="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" align="left" src="/res/adm/pages/extres.png" alt="pic29" />'=>$supnewextform},
 </td></tr>   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/syllabus.png" alt="pic30" />'=>$supnewsylform},
 </table></td></tr>   {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/myaboutme.png" alt="pic31" />'=>$supnewaboutmeform},
 ENDSUPFORM   );
        }  my %suporderhash = (
    '00' => ['Supnewfolder', $supnewfolderform],
                   'ee' => ['Upload Document',$supupdocform],
                   'ff' => ['Special Documents',create_form_ul(create_list_elements(@specialdocs))]
                   );
   
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);
           if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }
           my $tid='2';
           my $varscd = 'Supplemental Course Documents';
           $r->print(&generate_edit_table($tid,$varscd,\%suporderhash));
       } else {
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);
           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 3288  ENDSUPFORM Line 3427  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'
                                             );
     my %help = %{$help_ref};
     my %env = %{$env_ref};
     my $dumpbut=&dumpbutton();
     my $exportbut=&exportbutton();
     my @list = (
    {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/verify.png" alt="pic21" />'=>"<a onclick='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},
    {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/resversion.png" alt="pic22" />'=>"<a onclick='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" align="left" src="/res/adm/pages/dump.png" alt="pic23" />'=>$dumpbut};
     }
     push @list, ({'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/imsexport.png" alt="pic24" />'=>$exportbut},
    {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/symbs.png" alt="pic25" />'=>"<a onclick='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" align="left" src="/res/adm/pages/log.png" alt="pic26" />'=>"<a onclick='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,$varcd,$orderhash_ref) = @_;
       my %orderhash = %{$orderhash_ref};
       my $form;
       my $activetab;
       my $active;
       if($env{'form.active'} ne ''){
           $activetab = $env{'form.active'};
       }
       $form = '<div class="LC_Box">';
       $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.'\');">'.&mt(${$orderhash{$name}}[0]).'</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 3300  sub editing_js { Line 3509  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 3353  function edittext(targetname,residx,titl Line 3562  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 3362  function makeexamupload() { Line 3571  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 3371  function makesmppage() { Line 3580  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 3380  function makesmpproblem() { Line 3589  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 3405  function makeabout() { Line 3614  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('"');
    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 3517  Available help topics Line 3787  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.6  
changed lines
  Added in v.1.401


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