Diff for /loncom/interface/londocs.pm between versions 1.227 and 1.261

version 1.227, 2006/05/12 16:47:35 version 1.261, 2006/11/29 22:02:47
Line 33  use Apache::Constants qw(:common :http); Line 33  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::lonratedt;  use LONCAPA::map();
 use Apache::lonratsrv;  use Apache::lonratedt();
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::loncreatecourse;  use Apache::lonclonecourse;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use HTML::Entities;  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Cwd;  use Cwd;
   use LONCAPA;
   
 my $iconpath;  my $iconpath;
   
Line 56  my $hadchanges; Line 57  my $hadchanges;
   
 my %help=();  my %help=();
   
 # Mapread read maps into lonratedt::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
Line 65  my %help=(); Line 66  my %help=();
 sub mapread {  sub mapread {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     return      return
       &Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
                                 $map);       $map);
 }  }
   
 sub storemap {  sub storemap {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     my ($outtext,$errtext)=      my ($outtext,$errtext)=
       &Apache::lonratedt::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;
Line 119  sub authorhosts { Line 120  sub authorhosts {
   
 sub dumpbutton {  sub dumpbutton {
     my ($home,$other,%outhash)=&authorhosts();      my ($home,$other,%outhash)=&authorhosts();
       my $type = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }      if ($home+$other==0) { return ''; }
     my $output='</td><td bgcolor="#DDDDCC">';      my $output='</td><td bgcolor="#DDDDCC">';
     if ($home) {      if ($home) {
  return '</td><td bgcolor="#DDDDCC">'.   return '</td><td bgcolor="#DDDDCC">'.
     '<input type="submit" name="dumpcourse" value="'.      '<input type="submit" name="dumpcourse" value="'.
     &mt('Dump Course DOCS to Construction Space').'" />'.      &mt('Dump '.$type.' DOCS to Construction Space').'" />'.
     &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs');      &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs');
     } else {      } else {
  return'</td><td bgcolor="#DDDDCC">'.   return'</td><td bgcolor="#DDDDCC">'.
      &mt('Dump Course DOCS to Construction Space: available on other servers');       &mt('Dump '.$type.
    ' DOCS to Construction Space: available on other servers');
     }      }
 }  }
   
Line 141  sub clean { Line 144  sub clean {
   
 sub dumpcourse {  sub dumpcourse {
     my ($r) = @_;      my ($r) = @_;
       my $type = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Dump Course DOCS to Construction Space').      $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
       '<form name="dumpdoc" method="post">');        '<form name="dumpdoc" method="post">');
       $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 182  sub dumpcourse { Line 186  sub dumpcourse {
     $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');      $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');
     if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {      if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
  if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {   if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
     print $fh &Apache::loncreatecourse::rewritefile(      print $fh &Apache::lonclonecourse::rewritefile(
          &Apache::loncreatecourse::readfile($env{'request.course.id'},$_),           &Apache::lonclonecourse::readfile($env{'request.course.id'},$_),
      (%replacehash,$crs => '')       (%replacehash,$crs => '')
     );      );
  } else {   } else {
     print $fh      print $fh
          &Apache::loncreatecourse::readfile($env{'request.course.id'},$_);           &Apache::lonclonecourse::readfile($env{'request.course.id'},$_);
        }         }
  $fh->close();   $fh->close();
     } else {      } else {
Line 226  sub dumpcourse { Line 230  sub dumpcourse {
  $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');   $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');
  &tiehash();   &tiehash();
  $r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>');   $r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>');
  foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) {   foreach (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) {
     $r->print('<tr><td>'.$_.'</td>');      $r->print('<tr><td>'.$_.'</td>');
     my ($ext)=($_=~/\.(\w+)$/);      my ($ext)=($_=~/\.(\w+)$/);
     my $title=$hash{'title_'.$hash{      my $title=$hash{'title_'.$hash{
  'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};   'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};
     $title=~s/&colon;/:/g;      $title=~s/&colon;/:/g;
     $r->print('<td>'.($title?$title:'&nbsp;').'</td>');      $r->print('<td>'.($title?$title:'&nbsp;').'</td>');
     unless ($title) {      if (!$title) {
  $title=$_;   $title=$_;
       } else {
    $title=~s|/|_|g;
     }      }
     $title=~s/\.(\w+)$//;      $title=~s/\.(\w+)$//;
     $title=&clean($title);      $title=&clean($title);
Line 244  sub dumpcourse { Line 250  sub dumpcourse {
  $r->print("</table>\n");   $r->print("</table>\n");
  &untiehash();   &untiehash();
  $r->print(   $r->print(
   '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump Course DOCS').'" /></p></form>');    '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump [_1] DOCS',$type).'" /></p></form>');
     }      }
 }  }
   
 # ------------------------------------------------------ Generate "export" button  # ------------------------------------------------------ Generate "export" button
   
 sub exportbutton {  sub exportbutton {
       my $type = &Apache::loncommon::course_type();
     return '</td><td bgcolor="#DDDDCC">'.      return '</td><td bgcolor="#DDDDCC">'.
             '<input type="submit" name="exportcourse" value="'.              '<input type="submit" name="exportcourse" value="'.
             &mt('Export Course to IMS').'" />'.              &mt('Export '.$type.' to IMS').'" />'.
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');      &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs');
 }  }
   
 sub exportcourse {  sub exportcourse {
     my $r=shift;      my $r=shift;
       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;
Line 299  sub exportcourse { Line 307  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 .= 'Download the zip file from <a href="'.$imszipfile.'">IMS course archive</a><br />';                  $outcome .= &mt('Download the zip file from <a href="[_1]">IMS '.lc($type).' archive</a><br />',$imszipfile,);
                 if ($copyresult) {                  if ($copyresult) {
                     $outcome .= 'The following errors occurred during export - '.$copyresult;                      $outcome .= 'The following errors occurred during export - '.$copyresult;
                 }                  }
Line 307  sub exportcourse { Line 315  sub exportcourse {
                 $outcome = '<br />Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.<br />';                  $outcome = '<br />Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.<br />';
             }              }
         }          }
         $r->print(&Apache::loncommon::start_page('Export course to IMS content package'));          $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package'));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package'));
         $r->print($outcome);          $r->print($outcome);
         $r->print(&Apache::loncommon::end_page());          $r->print(&Apache::loncommon::end_page());
     } else {      } else {
         my $display;          my $display;
         $display = '<form name="exportdoc" method="post">'."\n";          $display = '<form name="exportdoc" method="post">'."\n";
         $display .= 'Choose which items you wish to export from your course.<br /><br />';          $display .= &mt('Choose which items you wish to export from your '.$type.'.<br /><br />');
         $display .= '<table border="0" cellspacing="0" cellpadding="3">'.          $display .= '<table border="0" cellspacing="0" cellpadding="3">'.
                     '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.                      '<tr><td><fieldset><legend>&nbsp;<b>Content items</b></legend>'.
                     '<input type="button" value="check all" '.                      '<input type="button" value="check all" '.
Line 447  function containerCheck(item) { Line 456  function containerCheck(item) {
   
 </script>  </script>
         |;          |;
  $r->print(&Apache::loncommon::start_page('Export course to IMS content package',   $r->print(&Apache::loncommon::start_page('Export '.lc($type).' to IMS content package',
  $scripttag));   $scripttag));
    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Export '.lc($type).' to IMS content package'));
  $r->print($display.'</table>'.   $r->print($display.'</table>'.
                   '<p><input type="hidden" name="finishexport" value="1">'.                    '<p><input type="hidden" name="finishexport" value="1">'.
                   '<input type="submit" name="exportcourse" value="'.                    '<input type="submit" name="exportcourse" value="'.
                   &mt('Export Course DOCS').'" /></p></form>'.                    &mt('Export '.$type.' DOCS').'" /></p></form>'.
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
     }      }
 }  }
Line 923  sub group_import { Line 933  sub group_import {
             }              }
         }          }
  if ($url) {   if ($url) {
     my $idx = &Apache::lonratedt::getresidx($url);      my $idx = &LONCAPA::map::getresidx($url);
     $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
     my $ext = 'false';      my $ext = 'false';
     if ($url=~/^http:\/\//) { $ext = 'true'; }      if ($url=~/^http:\/\//) { $ext = 'true'; }
     $url =~ s/:/\&colon;/g;      $url =~ s/:/\&colon;/g;
     $name =~ s/:/\&colon;/g;      $name =~ s/:/\&colon;/g;
     $Apache::lonratedt::resources[$idx] =       $LONCAPA::map::resources[$idx] = 
  join ':', ($name, $url, $ext, 'normal', 'res');   join ':', ($name, $url, $ext, 'normal', 'res');
  }   }
     }      }
Line 947  sub breadcrumbs { Line 957  sub breadcrumbs {
     }      }
     my $folderpath;      my $folderpath;
     my $cpinfo='';      my $cpinfo='';
       my $plain='';
     if ($env{'form.markedcopy_url'}) {      if ($env{'form.markedcopy_url'}) {
  &Apache::lonnet::logthis('Found '.$env{'form.markedcopy_url'});  
        $cpinfo='&markedcopy_url='.         $cpinfo='&markedcopy_url='.
                &Apache::lonnet::escape($env{'form.markedcopy_url'}).                 &escape($env{'form.markedcopy_url'}).
                '&markedcopy_title='.                 '&markedcopy_title='.
                &Apache::lonnet::escape($env{'form.markedcopy_title'});                 &escape($env{'form.markedcopy_title'});
     }      }
       my $randompick=-1;
       my $isencrypted=0;
       my $ishidden=0;
     while (@folders) {      while (@folders) {
  my $folder=shift(@folders);   my $folder=shift(@folders);
  my $foldername=shift(@folders);   my $foldername=shift(@folders);
  if ($folderpath) {$folderpath.='&';}   if ($folderpath) {$folderpath.='&';}
  $folderpath.=$folder.'&'.$foldername;   $folderpath.=$folder.'&'.$foldername;
  my $url='/adm/coursedocs?folderpath='.   my $url='/adm/coursedocs?folderpath='.
     &Apache::lonnet::escape($folderpath);      &escape($folderpath);
               my $name=&unescape($foldername);
   # randompick number, hidden, encrypted is appended with ":"s to the foldername
               $name=~s/\:(\d*)\:(\w*)\:(\w*)$//;
               if ($1 ne '') { 
                  $randompick=$1;
               } else {
                  $randompick=-1;
               }
               if ($2) { $ishidden=1; }
               if ($3) { $isencrypted=1; }
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>&Apache::lonnet::unescape($foldername),         'title'=>$name,
        'text'=>'<font size="+1">'.         'text'=>'<font size="+1">'.
    &Apache::lonnet::unescape($foldername).'</font>'     $name.'</font>'
        });         });
           $plain.=$name.' &gt; ';
         }
       $plain=~s/\&gt\;\s*$//;
       return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
          'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain);
   }
   
   sub log_docs {
       return &Apache::lonnet::instructor_log('docslog',@_);
   }
   
   {
       my @oldresources=();
       my @oldorder=();
       my $parmidx;
       my %parmaction=();
       my %parmvalue=();
       my $changedflag;
   
       sub snapshotbefore {
           @oldresources=@LONCAPA::map::resources;
           @oldorder=@LONCAPA::map::order;
           $parmidx=undef;
           %parmaction=();
           %parmvalue=();
           $changedflag=0;
       }
   
       sub remember_parms {
           my ($idx,$parameter,$action,$value)=@_;
           $parmidx=$idx;
           $parmaction{$parameter}=$action;
           $parmvalue{$parameter}=$value;
           $changedflag=1;
       }
   
       sub log_differences {
           my ($plain)=@_;
           my %storehash=('folder' => $plain,
                          'currentfolder' => $env{'form.folder'});
           if ($parmidx) {
              $storehash{'parameter_res'}=$oldresources[$parmidx];
              foreach my $parm (keys %parmaction) {
                 $storehash{'parameter_action_'.$parm}=$parmaction{$parm};
                 $storehash{'parameter_value_'.$parm}=$parmvalue{$parm};
              }
           }
           my $maxidx=$#oldresources;
           if ($#LONCAPA::map::resources>$#oldresources) {
              $maxidx=$#LONCAPA::map::resources;
           }
           for (my $idx=0; $idx<=$maxidx; $idx++) {
              if ($LONCAPA::map::resources[$idx] ne $oldresources[$idx]) {
                 $storehash{'before_resources_'.$idx}=$oldresources[$idx];
                 $storehash{'after_resources_'.$idx}=$LONCAPA::map::resources[$idx];
                 $changedflag=1;
              }
              if ($LONCAPA::map::order[$idx] ne $oldorder[$idx]) {
                 $storehash{'before_order_res_'.$idx}=$oldresources[$oldorder[$idx]];
                 $storehash{'after_order_res_'.$idx}=$LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
                 $changedflag=1;
              }
           }
    $storehash{'maxidx'}=$maxidx;
           if ($changedflag) { &log_docs(\%storehash); }
     }      }
     return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp');  }
   
   
   #
   # Docs Change Log
   #
   sub docs_change_log {
       my ($r)=@_;
       my $folder=$env{'form.folder'};
       $r->print(&Apache::loncommon::start_page('Course Document Change Log'));
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log'));
       my %docslog=&Apache::lonnet::dump('nohist_docslog',
                                         $env{'course.'.$env{'request.course.id'}.'.domain'},
                                         $env{'course.'.$env{'request.course.id'}.'.num'});
   
       if ((keys(%docslog))[0]=~/^error\:/) { undef(%docslog); }
   
       $r->print('<form action="/adm/coursedocs" method="post" name="docslog">'.
                 '<input type="hidden" name="docslog" value="1" />');
   
       my %saveable_parameters = ('show' => 'scalar',);
       &Apache::loncommon::store_course_settings('docs_log',
                                                 \%saveable_parameters);
       &Apache::loncommon::restore_course_settings('docs_log',
                                                   \%saveable_parameters);
       if (!$env{'form.show'}) { $env{'form.show'}=10; }
       my %lt=('hiddenresource' => 'Resources hidden',
       'encrypturl'     => 'URL hidden',
       'randompick'     => 'Randomly pick',
       'set'            => 'set to',
       'del'            => 'deleted');
       $r->print(&Apache::loncommon::display_filter().
                 '<input type="hidden" name="folder" value="'.$folder.'" />'.
                 '<input type="submit" value="'.&mt('Display').'" /></form>');
       $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
                 '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Folder').'</th><th>'.&mt('Before').'</th><th>'.
                 &mt('After').'</th>'.
                 &Apache::loncommon::end_data_table_header_row());
       my $shown=0;
       foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {
    if ($env{'form.displayfilter'} eq 'currentfolder') {
       if ($docslog{$id}{'logentry'}{'currentfolder'} ne $folder) { next; }
    }
           my @changes=keys(%{$docslog{$id}{'logentry'}});
           if ($env{'form.displayfilter'} eq 'containing') {
       my $wholeentry=$docslog{$id}{'exe_uname'}.':'.$docslog{$id}{'exe_udom'}.':'.
    &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},$docslog{$id}{'exe_udom'});
       foreach my $key (@changes) {
    $wholeentry.=':'.$docslog{$id}{'logentry'}{$key};
       }
       if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }         
    }
           my $count = 0;
           my $time =
               &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});
           my $plainname =
               &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},
                                             $docslog{$id}{'exe_udom'});
           my $about_me_link =
               &Apache::loncommon::aboutmewrapper($plainname,
                                                  $docslog{$id}{'exe_uname'},
                                                  $docslog{$id}{'exe_udom'});
           my $send_msg_link='';
           if ((($docslog{$id}{'exe_uname'} ne $env{'user.name'})
                || ($docslog{$id}{'exe_udom'} ne $env{'user.domain'}))) {
               $send_msg_link ='<br />'.
                   &Apache::loncommon::messagewrapper(&mt('Send message'),
                                                      $docslog{$id}{'exe_uname'},
                                                      $docslog{$id}{'exe_udom'});
           }
           $r->print(&Apache::loncommon::start_data_table_row());
           $r->print('<td>'.$time.'</td>
                          <td>'.$about_me_link.
                     '<br /><tt>'.$docslog{$id}{'exe_uname'}.
                                     ':'.$docslog{$id}{'exe_udom'}.'</tt>'.
                     $send_msg_link.'</td><td>'.
                     $docslog{$id}{'logentry'}{'folder'}.'</td><td>');
   # Before
    for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
       my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];
       my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];
       if ($oldname ne $newname) {
    $r->print(&LONCAPA::map::qtescape($oldname));
       }
    }
    $r->print('<ul>');
    for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
               if ($docslog{$id}{'logentry'}{'before_order_res_'.$idx}) {
    $r->print('<li>'.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'before_order_res_'.$idx}))[0]).'</li>');
       }
    }
    $r->print('</ul>');
   # After
           $r->print('</td><td>');
   
    for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
       my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];
       my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];
       if ($oldname ne $newname) {
    $r->print(&LONCAPA::map::qtescape($newname));
       }
    }        
    $r->print('<ul>');
    for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
               if ($docslog{$id}{'logentry'}{'after_order_res_'.$idx}) {
    $r->print('<li>'.&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'after_order_res_'.$idx}))[0]).'</li>');
       }
    }
    $r->print('</ul>');
    if ($docslog{$id}{'logentry'}{'parameter_res'}) {
       $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
       foreach my $parameter ('randompick','hiddenresource','encrypturl') {
    if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
       $r->print('<li>'.
         &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
     $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
         .'</li>');
    }
       }
       $r->print('</ul>');
    }
   # End
           $r->print('</td>'.&Apache::loncommon::end_data_table_row());
           $shown++;
           if (!($env{'form.show'} eq &mt('all')
                 || $shown<=$env{'form.show'})) { last; }
       }
       $r->print(&Apache::loncommon::end_data_table());
       $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub editor {  sub editor {
Line 983  sub editor { Line 1197  sub editor {
     }      }
     ($errtext,$fatal)=      ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);                &mapread($coursenum,$coursedom,$folder.'.'.$container);
     if ($#Apache::lonratedt::order<1) {      if ($#LONCAPA::map::order<1) {
  my $idx=&Apache::lonratedt::getresidx();   my $idx=&LONCAPA::map::getresidx();
  if ($idx<=0) { $idx=1; }   if ($idx<=0) { $idx=1; }
         $Apache::lonratedt::order[0]=$idx;          $LONCAPA::map::order[0]=$idx;
         $Apache::lonratedt::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
     if (defined($env{'form.markcopy'})) {      if (defined($env{'form.markcopy'})) {
 # Mark for copying  # Mark for copying
  my ($title,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$env{'form.markcopy'}]]);   my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);
  $env{'form.markedcopy_title'}=$title;   $env{'form.markedcopy_title'}=$title;
  $env{'form.markedcopy_url'}=$url;   $env{'form.markedcopy_url'}=$url;
     }      }
     $r->print(&breadcrumbs($folder));      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder);
       $r->print($breadcrumbtrail);
     if ($fatal) {      if ($fatal) {
    $r->print('<p><font color="red">'.$errtext.'</font></p>');     $r->print('<p><font color="red">'.$errtext.'</font></p>');
     } else {      } else {
Line 1004  sub editor { Line 1219  sub editor {
 # ---------------- if they are for this folder and user allowed to make changes  # ---------------- if they are for this folder and user allowed to make changes
  if (($allowed) && ($env{'form.folder'} eq $folder)) {   if (($allowed) && ($env{'form.folder'} eq $folder)) {
 # set parameters and change order  # set parameters and change order
     if (defined($env{'form.setparms'})) {              &snapshotbefore();
       if ($env{'form.changeparms'}) {
  my $idx=$env{'form.setparms'};   my $idx=$env{'form.setparms'};
 # set parameters  # set parameters
  if ($env{'form.randpick_'.$idx}) {   if ($env{'form.changeparms'} eq 'randompick') {
     &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');      if ($env{'form.randpick_'.$idx}) {
  } else {   &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
     &Apache::lonratedt::delparameter($idx,'parameter_randompick');   &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_randompick');
    &remember_parms($idx,'randompick','del');
       }
  }   }
  if ($env{'form.hidprs_'.$idx}) {   if ($env{'form.changeparms'} eq 'hiddenresource') {
     &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');      if ($env{'form.hidprs_'.$idx}) {
  } else {   &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
     &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource');   &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
    &remember_parms($idx,'hiddenresource','del');
       }
  }   }
  if ($env{'form.encprs_'.$idx}) {   if ($env{'form.changeparms'} eq 'encrypturl') {
     &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');      if ($env{'form.encprs_'.$idx}) {
  } else {   &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
     &Apache::lonratedt::delparameter($idx,'parameter_encrypturl');   &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
    &remember_parms($idx,'encrypturl','del');
       }
  }   }
   # store the changed version
    ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
    if ($fatal) {
       $r->print('<p><font color="red">'.$errtext.'</font></p>');
       return;
    }
       }
   
  if ($env{'form.newpos'}) {      if ($env{'form.newpos'}) {
 # change order  # change order
    my $newpos=$env{'form.newpos'}-1;
     my $newpos=$env{'form.newpos'}-1;   my $currentpos=$env{'form.currentpos'}-1;
     my $currentpos=$env{'form.currentpos'}-1;   my $i;
     my $i;   my @neworder=();
     my @neworder=();   if ($newpos>$currentpos) {
     if ($newpos>$currentpos) {  
 # moving stuff up  # moving stuff up
  for ($i=0;$i<$currentpos;$i++) {      for ($i=0;$i<$currentpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
  for ($i=$currentpos;$i<$newpos;$i++) {      for ($i=$currentpos;$i<$newpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i+1];   $neworder[$i]=$LONCAPA::map::order[$i+1];
  }      }
                         $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];      $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
  for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) {      for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
     } else {   } else {
 # moving stuff down  # moving stuff down
  for ($i=0;$i<$newpos;$i++) {      for ($i=0;$i<$newpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
  $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];      $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
  for ($i=$newpos+1;$i<$currentpos+1;$i++) {      for ($i=$newpos+1;$i<$currentpos+1;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i-1];   $neworder[$i]=$LONCAPA::map::order[$i-1];
  }      }
  for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) {      for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }  
     }      }
     @Apache::lonratedt::order=@neworder;  
  }   }
    @LONCAPA::map::order=@neworder;
 # store the changed version  # store the changed version
   
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);   ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
  if ($fatal) {   if ($fatal) {
     $r->print('<p><font color="red">'.$errtext.'</font></p>');      $r->print('<p><font color="red">'.$errtext.'</font></p>');
     return;      return;
  }   }
   
     }      }
   
     if ($env{'form.pastemarked'}) {      if ($env{'form.pastemarked'}) {
 # paste resource to end of list  # paste resource to end of list
                 my $url=$env{'form.markedcopy_url'};                  my $url=$env{'form.markedcopy_url'};
Line 1078  sub editor { Line 1310  sub editor {
     my $newurl=$1.$newid.'.'.$2;      my $newurl=$1.$newid.'.'.$2;
     my $storefn=$newurl;      my $storefn=$newurl;
                     $storefn=~s/^\/\w+\/\w+\/\w+\///;                      $storefn=~s/^\/\w+\/\w+\/\w+\///;
     &Apache::loncreatecourse::writefile      &Apache::lonclonecourse::writefile
  ($env{'request.course.id'},$storefn,   ($env{'request.course.id'},$storefn,
  &Apache::lonnet::getfile($url));   &Apache::lonnet::getfile($url));
     $url=$newurl;      $url=$newurl;
Line 1090  sub editor { Line 1322  sub editor {
  if ($url=~/^http\:\/\//) { $ext='true'; }   if ($url=~/^http\:\/\//) { $ext='true'; }
  $url=~s/\:/\&colon;/g;   $url=~s/\:/\&colon;/g;
 # Now insert the URL at the bottom  # Now insert the URL at the bottom
                 my $newidx=&Apache::lonratedt::getresidx($url);                  my $newidx=&LONCAPA::map::getresidx($url);
  $Apache::lonratedt::resources[$newidx]=   $LONCAPA::map::resources[$newidx]=
     $title.':'.$url.':'.$ext.':normal:res';      $title.':'.$url.':'.$ext.':normal:res';
  $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx;   $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
 # Store the result  # Store the result
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);   ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
  if ($fatal) {   if ($fatal) {
Line 1106  sub editor { Line 1338  sub editor {
     if ($env{'form.cmd'}) {      if ($env{'form.cmd'}) {
                 my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});                  my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});
                 if ($cmd eq 'del') {                  if ($cmd eq 'del') {
     my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);      my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
     if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&      if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
  ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {   ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
  &Apache::lonnet::removeuploadedurl($url);   &Apache::lonnet::removeuploadedurl($url);
     } else {      } else {
  &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);   &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
     }      }
     for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {      for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
                         $Apache::lonratedt::order[$i]=                          $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                           $Apache::lonratedt::order[$i+1];  
                     }                      }
                     $#Apache::lonratedt::order--;                      $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'cut') {                  } elsif ($cmd eq 'cut') {
     my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);      my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
     &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);      &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
     for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {      for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
                         $Apache::lonratedt::order[$i]=                          $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                           $Apache::lonratedt::order[$i+1];  
                     }                      }
                     $#Apache::lonratedt::order--;                      $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'up') {                  } elsif ($cmd eq 'up') {
   if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) {    if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
                     my $i=$Apache::lonratedt::order[$idx-1];                      my $i=$LONCAPA::map::order[$idx-1];
                     $Apache::lonratedt::order[$idx-1]=                      $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];
  $Apache::lonratedt::order[$idx];                      $LONCAPA::map::order[$idx] = $i;
                     $Apache::lonratedt::order[$idx]=$i;  
    }     }
                 } elsif ($cmd eq 'down') {                  } elsif ($cmd eq 'down') {
    if (defined($Apache::lonratedt::order[$idx+1])) {     if (defined($LONCAPA::map::order[$idx+1])) {
                     my $i=$Apache::lonratedt::order[$idx+1];                      my $i=$LONCAPA::map::order[$idx+1];
                     $Apache::lonratedt::order[$idx+1]=                      $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];
  $Apache::lonratedt::order[$idx];                      $LONCAPA::map::order[$idx] = $i;
                     $Apache::lonratedt::order[$idx]=$i;  
    }     }
                 } elsif ($cmd eq 'rename') {                  } elsif ($cmd eq 'rename') {
                     my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]];                      my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
                     my ($rtitle,@rrest)=split(/\:/,                      my ($rtitle,@rrest)=split(/\:/,
                        $Apache::lonratedt::resources[                         $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
        $Apache::lonratedt::order[$idx]]);  
                     my $comment=                      my $comment=
                      &HTML::Entities::decode($env{'form.title'});                       &HTML::Entities::decode($env{'form.title'});
                     $comment=~s/\</\&lt\;/g;                      $comment=~s/\</\&lt\;/g;
                     $comment=~s/\>/\&gt\;/g;                      $comment=~s/\>/\&gt\;/g;
                     $comment=~s/\:/\&colon;/g;                      $comment=~s/\:/\&colon;/g;
     if ($comment=~/\S/) {      if ($comment=~/\S/) {
  $Apache::lonratedt::resources[   $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
        $Apache::lonratedt::order[$idx]]=      $comment.':'.join(':',@rrest);
             $comment.':'.join(':',@rrest);  
     }      }
   # Devalidate title cache
                       my $renamed_url=$rrest[0];
   # Has the &colon;-escaping
                       $renamed_url=~s/\&colon\;/\:/g;
       &Apache::lonnet::devalidate_title_cache($renamed_url);
                 }                  }
 # Store the changed version  # Store the changed version
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,   ($errtext,$fatal)=&storemap($coursenum,$coursedom,
Line 1167  sub editor { Line 1398  sub editor {
 # Group import/search  # Group import/search
     if ($env{'form.importdetail'}) {      if ($env{'form.importdetail'}) {
  my @imports;   my @imports;
   # &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});
  foreach (split(/\&/,$env{'form.importdetail'})) {   foreach (split(/\&/,$env{'form.importdetail'})) {
     if (defined($_)) {      if (defined($_)) {
  my ($name,$url)=split(/\=/,$_);   my ($name,$url)=split(/\=/,$_);
  $name=&Apache::lonnet::unescape($name);   $name=&unescape($name);
  $url=&Apache::lonnet::unescape($url);   $url=&unescape($url);
  push @imports, $name, $url;   push @imports, $name, $url;
     }      }
  }   }
 # Store the changed version  # Store the changed version
  ($errtext,$fatal)=group_import($coursenum, $coursedom, $folder,   ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,
        $container,'londocs',@imports);         $container,'londocs',@imports);
  if ($fatal) {   if ($fatal) {
     $r->print('<p><font color="red">'.$errtext.'</font></p>');      $r->print('<p><font color="red">'.$errtext.'</font></p>');
Line 1188  sub editor { Line 1420  sub editor {
                if ($env{'form.importmap'}=~/\w/) {                 if ($env{'form.importmap'}=~/\w/) {
           foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {            foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
       my ($title,$url,$ext,$type)=split(/\:/,$_);        my ($title,$url,$ext,$type)=split(/\:/,$_);
                       my $idx=&Apache::lonratedt::getresidx($url);                        my $idx=&LONCAPA::map::getresidx($url);
                       $Apache::lonratedt::resources[$idx]=$_;                        $LONCAPA::map::resources[$idx]=$_;
                       $Apache::lonratedt::order                        $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
           [$#Apache::lonratedt::order+1]=$idx;  
           }            }
 # Store the changed version  # Store the changed version
            ($errtext,$fatal)=&storemap($coursenum,$coursedom,             ($errtext,$fatal)=&storemap($coursenum,$coursedom,
Line 1204  sub editor { Line 1435  sub editor {
                    $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');                     $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');
                }                 }
            }             }
              &log_differences($plain);
        }         }
 # ---------------------------------------------------------------- End commands  # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen  # ---------------------------------------------------------------- Print screen
         my $idx=0;          my $idx=0;
  my $shown=0;   my $shown=0;
           if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
              $r->print('<p>'.&mt('Parameters').':<ul>'.
                        ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
                        ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
                        ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
                        '</ul></p>');
           }                                                                                                     
           if ($randompick>=0) {
              $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>');
           }
         $r->print('<table>');          $r->print('<table>');
         foreach (@Apache::lonratedt::order) {          foreach (@LONCAPA::map::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);             my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);
    $name=&Apache::lonratsrv::qtescape($name);     $name=&LONCAPA::map::qtescape($name);
    $url=&Apache::lonratsrv::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,$_,$coursenum));             $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));
Line 1271  sub process_file_upload { Line 1513  sub process_file_upload {
         }          }
         ($errtext,$fatal)=          ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);                &mapread($coursenum,$coursedom,$folder.'.'.$container);
         if ($#Apache::lonratedt::order<1) {          if ($#LONCAPA::map::order<1) {
             $Apache::lonratedt::order[0]=1;              $LONCAPA::map::order[0]=1;
             $Apache::lonratedt::resources[1]='';              $LONCAPA::map::resources[1]='';
         }          }
         if ($fatal) {          if ($fatal) {
             return 'failed';              return 'failed';
Line 1289  sub process_file_upload { Line 1531  sub process_file_upload {
         }          }
 # this is for a course, not a user, so set coursedoc flag  # this is for a course, not a user, so set coursedoc flag
 # probably the only place in the system where this should be "1"  # probably the only place in the system where this should be "1"
         my $newidx=&Apache::lonratedt::getresidx();          my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;          $destination .= $newidx;
         my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,          my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
  $parseaction,$allfiles,   $parseaction,$allfiles,
Line 1306  sub process_file_upload { Line 1548  sub process_file_upload {
                   $env{'user.domain'}.'___&&&___'.$comment;                    $env{'user.domain'}.'___&&&___'.$comment;
         }          }
   
         $Apache::lonratedt::resources[$newidx]=          $LONCAPA::map::resources[$newidx]=
                   $comment.':'.$url.':'.$ext.':normal:res';      $comment.':'.$url.':'.$ext.':normal:res';
         $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx;          $LONCAPA::map::order[$#LONCAPA::map::order+1]= $newidx;
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
     $folder.'.'.$container);      $folder.'.'.$container);
         if ($fatal) {          if ($fatal) {
Line 1324  sub process_file_upload { Line 1566  sub process_file_upload {
                   method="post" enctype="multipart/form-data">                    method="post" enctype="multipart/form-data">
    <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />   <input type="hidden" name="cmd" value="upload_embedded" />     <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />   <input type="hidden" name="cmd" value="upload_embedded" />
    <input type="hidden" name="newidx" value="'.$newidx.'" />     <input type="hidden" name="newidx" value="'.$newidx.'" />
    <input type="hidden" name="primaryurl" value="'.&Apache::lonnet::escape($url).'" />     <input type="hidden" name="primaryurl" value="'.&escape($url).'" />
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';     <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
                     $$upload_output .= '<b>Upload embedded files</b>:<br />                      $$upload_output .= '<b>Upload embedded files</b>:<br />
    <table>';     <table>';
                     foreach my $embed_file (keys(%{$allfiles})) {                      foreach my $embed_file (keys(%{$allfiles})) {
                         $$upload_output .= '<tr><td>'.$embed_file.                          $$upload_output .= '<tr><td>'.$embed_file.
           '<input name="embedded_item_'.$num.'" type="file" />            '<input name="embedded_item_'.$num.'" type="file" />
            <input name="embedded_orig_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($embed_file).'" />';             <input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />';
                         my $attrib;                          my $attrib;
                         if (@{$$allfiles{$embed_file}} > 1) {                          if (@{$$allfiles{$embed_file}} > 1) {
                             $attrib = join(':',@{$$allfiles{$embed_file}});                              $attrib = join(':',@{$$allfiles{$embed_file}});
Line 1342  sub process_file_upload { Line 1584  sub process_file_upload {
            '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />';             '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />';
                         if (exists($$codebase{$embed_file})) {                          if (exists($$codebase{$embed_file})) {
                             $$upload_output .=                               $$upload_output .= 
           '<input name="codebase_'.$num.'" type="hidden" value="'.&Apache::lonnet::escape($$codebase{$embed_file}).'" />';            '<input name="codebase_'.$num.'" type="hidden" value="'.&escape($$codebase{$embed_file}).'" />';
                         }                          }
                         $$upload_output .= '</td></tr>';                          $$upload_output .= '</td></tr>';
                         $num ++;                          $num ++;
Line 1385  sub entryline { Line 1627  sub entryline {
     my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;      my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
     $title=~s/\&colon\;/\:/g;      $title=~s/\&colon\;/\:/g;
     $title=&HTML::Entities::encode(&HTML::Entities::decode(      $title=&HTML::Entities::encode(&HTML::Entities::decode(
      &Apache::lonnet::unescape($title)),'"<>&\'');       &unescape($title)),'"<>&\'');
     my $renametitle=$title;      my $renametitle=$title;
     my $foldertitle=$title;      my $foldertitle=$title;
     my $pagetitle=$title;      my $pagetitle=$title;
     my $orderidx=$Apache::lonratedt::order[$index];      my $orderidx=$LONCAPA::map::order[$index];
     if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/ ) {       if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/ ) { 
  $foldertitle=&Apache::lontexconvert::msgtexconverted($4);   $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
  $renametitle=$4;   $renametitle=$4;
Line 1405  sub entryline { Line 1647  sub entryline {
     my $folderpath;      my $folderpath;
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
         $container = 'sequence';          $container = 'sequence';
  $folderpath=&Apache::lonnet::escape($env{'form.folderpath'});   $folderpath=&escape($env{'form.folderpath'});
  # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');   # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');
     }      }
     my ($pagepath,$pagesymb);      my ($pagepath,$pagesymb);
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $container = 'page';          $container = 'page';
         $pagepath=&Apache::lonnet::escape($env{'form.pagepath'});          $pagepath=&escape($env{'form.pagepath'});
         $pagesymb=&Apache::lonnet::escape($env{'form.pagesymb'});          $pagesymb=&escape($env{'form.pagesymb'});
     }      }
     my $cpinfo='';      my $cpinfo='';
     if ($env{'form.markedcopy_url'}) {      if ($env{'form.markedcopy_url'}) {
        $cpinfo='&markedcopy_url='.         $cpinfo='&markedcopy_url='.
                &Apache::lonnet::escape($env{'form.markedcopy_url'}).                 &escape($env{'form.markedcopy_url'}).
                '&markedcopy_title='.                 '&markedcopy_title='.
                &Apache::lonnet::escape($env{'form.markedcopy_title'});                 &escape($env{'form.markedcopy_title'});
     }      }
     if ($allowed) {      if ($allowed) {
  my $incindex=$index+1;   my $incindex=$index+1;
  my $selectbox='';   my $selectbox='';
  if (($folder!~/^supplemental/) &&   if (($folder!~/^supplemental/) &&
     ($#Apache::lonratedt::order>0) &&       ($#LONCAPA::map::order>0) && 
     ((split(/\:/,      ((split(/\:/,
      $Apache::lonratedt::resources[$Apache::lonratedt::order[0]]))[1]        $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] 
      ne '') &&        ne '') && 
     ((split(/\:/,      ((split(/\:/,
      $Apache::lonratedt::resources[$Apache::lonratedt::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<=$#Apache::lonratedt::order+1;$i++) {      for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
  if ($i==$incindex) {   if ($i==$incindex) {
     $selectbox.='<option value="" selected="1">('.$i.')</option>';      $selectbox.='<option value="" selected="1">('.$i.')</option>';
  } else {   } else {
Line 1476  ENDCOPY Line 1718  ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />  <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />  <input type="hidden" name="setparms" value="$orderidx" />
   <input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>  <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>  <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>
Line 1507  ENDCOPY Line 1750  ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />  <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />  <input type="hidden" name="setparms" value="$orderidx" />
   <input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>  <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>  <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>
Line 1577  END Line 1821  END
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) { 
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
  }   }
  $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb);          if (&Apache::lonnet::symbverify($symb,$url)) {
       $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
           } else {
               $url='';
           }
  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='.&Apache::lonnet::escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
  }   }
     }      }
     my $parameterset='&nbsp;';      my $parameterset='&nbsp;';
     if ($isfolder || $extension eq 'sequence') {      if ($isfolder || $extension eq 'sequence') {
  my $foldername=&Apache::lonnet::escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
  if ($folderpath) { $folderpath.='&' };   if ($folderpath) { $folderpath.='&' };
  $folderpath.=$folderarg.'&'.$foldername;  # Append randompick number, hidden, and encrypted with ":" to foldername, 
  $url.='folderpath='.&Apache::lonnet::escape($folderpath).$cpinfo;  # so it gets transferred between levels
    $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_randompick'))[0]
                                                  .':'.((&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_hiddenresource'))[0]=~/^yes$/i)
                                                  .':'.((&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_encrypturl'))[0]=~/^yes$/i);
    $url.='folderpath='.&escape($folderpath).$cpinfo;
  $parameterset='<label>'.&mt('Randomly Pick: ').   $parameterset='<label>'.&mt('Randomly Pick: ').
     '<input type="text" size="4" onChange="this.form.submit()" name="randpick_'.$orderidx.'" value="'.      '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'.
     (&Apache::lonratedt::getparameter($orderidx,      (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].                                                'parameter_randompick'))[0].
                                               '" />'.                                                '" />'.
 '<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>';  '<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>';
                 
     }      }
     if ($ispage) {      if ($ispage) {
         my $pagename=&Apache::lonnet::escape($pagetitle);          my $pagename=&escape($pagetitle);
         my $pagepath;          my $pagepath;
         my $folderpath=$env{'form.folderpath'};          my $folderpath=$env{'form.folderpath'};
         if ($folderpath) { $pagepath = $folderpath.'&' };          if ($folderpath) { $pagepath = $folderpath.'&' };
Line 1615  END Line 1870  END
        $residx,         $residx,
        $path.$pagearg.'.page');         $path.$pagearg.'.page');
  }   }
  $url.='pagepath='.&Apache::lonnet::escape($pagepath).   $url.='pagepath='.&escape($pagepath).
     '&pagesymb='.&Apache::lonnet::escape($symb).$cpinfo;      '&pagesymb='.&escape($symb).$cpinfo;
     }      }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.      $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.
  '" border="0"></a></td>'.   '" border="0"></a></td>'.
         "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>";          "<td bgcolor='#FFFFBB'>".($url?"<a href=\"$url\">":'').$title.
           ($url?'</a>':' <font size="-2">'.&mt('(re-initialize course to access)').'</font>')."</td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
        'hd' => 'Hidden',         'hd' => 'Hidden',
        'ec' => 'URL hidden');         'ec' => 'URL hidden');
  my $enctext=   my $enctext=
     ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');      ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
  my $hidtext=   my $hidtext=
     ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');      ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
  $line.=(<<ENDPARMS);   $line.=(<<ENDPARMS);
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>  <nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>  <nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>  <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>
 ENDPARMS  ENDPARMS
     }      }
Line 1671  sub untiehash { Line 1927  sub untiehash {
   
 sub checkonthis {  sub checkonthis {
     my ($r,$url,$level,$title)=@_;      my ($r,$url,$level,$title)=@_;
     $url=&Apache::lonnet::unescape($url);      $url=&unescape($url);
     $alreadyseen{$url}=1;      $alreadyseen{$url}=1;
     $r->rflush();      $r->rflush();
     if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {      if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
Line 1747  sub list_symbs { Line 2003  sub list_symbs {
     my ($r) = @_;      my ($r) = @_;
   
     $r->print(&Apache::loncommon::start_page('Symb List'));      $r->print(&Apache::loncommon::start_page('Symb List'));
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     $r->print("<pre>\n");      $r->print("<pre>\n");
     foreach my $res ($navmap->retrieveResources()) {      foreach my $res ($navmap->retrieveResources()) {
Line 1762  sub list_symbs { Line 2019  sub list_symbs {
 #   # 
 sub verifycontent {  sub verifycontent {
     my ($r) = @_;      my ($r) = @_;
       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 Course Documents'));     $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));
    $hashtied=0;     $hashtied=0;
    undef %alreadyseen;     undef %alreadyseen;
    %alreadyseen=();     %alreadyseen=();
    &tiehash();     &tiehash();
    foreach (keys %hash) {     foreach (keys %hash) {
        if ($hash{$_}=~/\.(page|sequence)$/) {         if ($hash{$_}=~/\.(page|sequence)$/) {
    if (($_=~/^src_/) && ($alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {     if (($_=~/^src_/) && ($alreadyseen{&unescape($hash{$_})})) {
        $r->print('<hr /><font color="red">'.         $r->print('<hr /><font color="red">'.
  &mt('The following sequence or page is included more than once in your course: ').   &mt('The following sequence or page is included more than once in your '.$type.': ').
  &Apache::lonnet::unescape($hash{$_}).'</font><br />'.   &unescape($hash{$_}).'</font><br />'.
  &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));   &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));
    }     }
        }         }
        if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&Apache::lonnet::unescape($hash{$_})})) {         if (($_=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$_})})) {
            &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});             &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
        }         }
    }     }
Line 1798  sub devalidateversioncache { Line 2057  sub devalidateversioncache {
   
 sub checkversions {  sub checkversions {
     my ($r) = @_;      my ($r) = @_;
     $r->print(&Apache::loncommon::start_page('Check Course Document Versions'));      my $type = &Apache::loncommon::course_type();
       $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));
       $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions"));
     my $header='';      my $header='';
     my $startsel='';      my $startsel='';
     my $monthsel='';      my $monthsel='';
Line 1859  sub checkversions { Line 2120  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 Course');   $header=&mt('All Documents in '.$type);
  $allsel=1;   $allsel=1;
  foreach (keys %hash) {   foreach (keys %hash) {
     if ($_=~/^ids\_(\/res\/.+)$/) {      if ($_=~/^ids\_(\/res\/.+)$/) {
Line 1904  sub checkversions { Line 2165  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 Course',        ('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 1913  sub checkversions { Line 2174  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 Course',         've' => 'Version used in '.$type,
                'vu' => 'Set Version to be used in Course',                 'vu' => 'Set Version to be used in '.$type,
 'sv' => 'Set Versions to be used in Course 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 1962  ENDHEADERS Line 2223  ENDHEADERS
                       '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '.                        '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '.
                       '<font size="+1">'.$currentversion.'</font>'.                        '<font size="+1">'.$currentversion.'</font>'.
                       '</nobr></td>'.                        '</nobr></td>'.
                       '<td title="'.$lt{'ve'}.'"><nobr>In Course: '.                        '<td title="'.$lt{'ve'}.'"><nobr>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 2066  sub changewarning { Line 2327  sub changewarning {
     my ($r,$postexec,$message,$url)=@_;      my ($r,$postexec,$message,$url)=@_;
     if (!&is_hash_old()) { return; }      if (!&is_hash_old()) { return; }
     my $pathvar='folderpath';      my $pathvar='folderpath';
     my $path=&Apache::lonnet::escape($env{'form.folderpath'});      my $path=&escape($env{'form.folderpath'});
     if (!defined($url)) {      if (!defined($url)) {
  if (defined($env{'form.pagepath'})) {   if (defined($env{'form.pagepath'})) {
     $pathvar='pagepath';      $pathvar='pagepath';
     $path=&Apache::lonnet::escape($env{'form.pagepath'});      $path=&escape($env{'form.pagepath'});
     $path.='&amp;pagesymb='.&Apache::lonnet::escape($env{'form.pagesymb'});      $path.='&amp;pagesymb='.&escape($env{'form.pagesymb'});
  }   }
  $url='/adm/coursedocs?'.$pathvar.'='.$path;   $url='/adm/coursedocs?'.$pathvar.'='.$path;
     }      }
       my $course_type = &Apache::loncommon::course_type();
     if (!defined($message)) {      if (!defined($message)) {
  $message='Changes will become active for your current session after [_1], or the next time you log in.';   $message='Changes will become active for your current session after [_1], or the next time you log in.';
     }      }
Line 2085  sub changewarning { Line 2347  sub changewarning {
 '" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.  '" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.
 &mt($message,' <input type="hidden" name="'.  &mt($message,' <input type="hidden" name="'.
     $env{'request.role'}.'" value="1" /><input type="button" value="'.      $env{'request.role'}.'" value="1" /><input type="button" value="'.
     &mt('re-initializing course').'" onClick="reinit(this.form)" />').      &mt('re-initializing '.$course_type).'" onClick="reinit(this.form)" />').
 $help{'Caching'}.'</font></h3></form>'."\n\n");  $help{'Caching'}.'</font></h3></form>'."\n\n");
 }  }
   
   # =========================================== Breadcrumbs for special functions
   
   sub init_breadcrumbs {
       my ($form,$text)=@_;
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",
       text=>&Apache::loncommon::course_type()." Documents",
       faq=>273,
       bug=>'Instructor Interface',
                                               help => 'Docs_Adding_Course_Doc'});
       &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs?".$form.'=1',
       text=>$text,
       faq=>273,
       bug=>'Instructor Interface'});
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
       my $type = &Apache::loncommon::course_type();
   
 # --------------------------------------------- Initialize help topics for this  # --------------------------------------------- Initialize help topics for this
     foreach ('Adding_Course_Doc','Main_Course_Documents',      foreach ('Adding_Course_Doc','Main_Course_Documents',
Line 2116  sub handler { Line 2395  sub handler {
     '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 Info'} = &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{'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
     my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});      my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
   
   if ($allowed && $env{'form.verify'}) {    if ($allowed && $env{'form.verify'}) {
         &init_breadcrumbs('verify','Verify Content');
       &verifycontent($r);        &verifycontent($r);
   } elsif ($allowed && $env{'form.listsymbs'}) {    } elsif ($allowed && $env{'form.listsymbs'}) {
         &init_breadcrumbs('listsymbs','List Symbs');
       &list_symbs($r);        &list_symbs($r);
     } elsif ($allowed && $env{'form.docslog'}) {
         &init_breadcrumbs('docslog','Show Log');
         &docs_change_log($r);
   } elsif ($allowed && $env{'form.versions'}) {    } elsif ($allowed && $env{'form.versions'}) {
         &init_breadcrumbs('versions','Check/Set Resource Versions');
       &checkversions($r);        &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {    } elsif ($allowed && $env{'form.dumpcourse'}) {
         &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space');
       &dumpcourse($r);        &dumpcourse($r);
   } elsif ($allowed && $env{'form.exportcourse'}) {    } elsif ($allowed && $env{'form.exportcourse'}) {
         &init_breadcrumbs('exportcourse','Export '.&Apache::loncommon::course_type().' to IMS');
       &exportcourse($r);        &exportcourse($r);
   } else {    } else {
 # is this a standard course?  # is this a standard course?
Line 2147  sub handler { Line 2434  sub handler {
      'markedcopy_title']);       'markedcopy_title']);
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  my (@folderpath)=split('&',$env{'form.folderpath'});   my (@folderpath)=split('&',$env{'form.folderpath'});
  $env{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath));   $env{'form.foldername'}=&unescape(pop(@folderpath));
  $env{'form.folder'}=pop(@folderpath);   $env{'form.folder'}=pop(@folderpath);
     }      }
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         my (@pagepath)=split('&',$env{'form.pagepath'});          my (@pagepath)=split('&',$env{'form.pagepath'});
         $env{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath));          $env{'form.pagename'}=&unescape(pop(@pagepath));
         $env{'form.folder'}=pop(@pagepath);          $env{'form.folder'}=pop(@pagepath);
         $containertag = '<input type="hidden" name="pagepath" value="" />'.          $containertag = '<input type="hidden" name="pagepath" value="" />'.
     '<input type="hidden" name="pagesymb" value="" />';      '<input type="hidden" name="pagesymb" value="" />';
Line 2163  sub handler { Line 2450  sub handler {
        $showdoc='/'.$1;         $showdoc='/'.$1;
     }      }
     unless ($showdoc) { # got called from remote      unless ($showdoc) { # got called from remote
        if (($env{'form.folder'}=~/^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;
        }          } 
Line 2184  sub handler { Line 2471  sub handler {
 # 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=&Apache::lonnet::escape(      my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));
                      &Apache::loncommon::plainname($uname,$udom));  
   
 # graphics settings  # graphics settings
   
Line 2196  sub handler { Line 2482  sub handler {
     }      }
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n".$script."\n".'</script>';      $script = '<script type="text/javascript">'."\n".$script."\n".'</script>';
     $r->print(&Apache::loncommon::start_page('Course Documents', $script,      $r->print(&Apache::loncommon::start_page("$type Documents", $script,
      {'force_register' => $showdoc,}).       {'force_register' => $showdoc,}).
       &Apache::loncommon::help_open_menu('','','','',273,'RAT'));        &Apache::loncommon::help_open_menu('','',273,'RAT'));
       
   my %allfiles = ();    my %allfiles = ();
   my %codebase = ();    my %codebase = ();
Line 2218  sub handler { Line 2504  sub handler {
           my %attribs = ();            my %attribs = ();
           my $updateflag = 0;            my $updateflag = 0;
           my $residx = $env{'form.newidx'};            my $residx = $env{'form.newidx'};
           my $primary_url = &Apache::lonnet::unescape($env{'form.primaryurl'});            my $primary_url = &unescape($env{'form.primaryurl'});
 # Process file upload - phase two - gather secondary files.  # Process file upload - phase two - gather secondary files.
           for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {            for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {
               if ($env{'form.embedded_item_'.$i.'.filename'}) {                if ($env{'form.embedded_item_'.$i.'.filename'}) {
                   my $javacodebase;                    my $javacodebase;
                   $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} = &Apache::lonnet::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 =  &Apache::lonnet::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 = ();
Line 2236  sub handler { Line 2522  sub handler {
                       @attributes = ($env{'form.embedded_attrib_'.$i});                        @attributes = ($env{'form.embedded_attrib_'.$i});
                   }                    }
                   foreach (@attributes) {                    foreach (@attributes) {
                       push(@{$attribs{$i}},&Apache::lonnet::unescape($_));                        push(@{$attribs{$i}},&unescape($_));
                   }                    }
                   if ($javacodebase) {                    if ($javacodebase) {
                       $codebase{$i} = $javacodebase;                        $codebase{$i} = $javacodebase;
Line 2285  sub handler { Line 2571  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 course document',                  'uplm' => 'Upload a new main '.lc($type).' document',
                 'upls' => 'Upload a new supplemental course document',                  'upls' => 'Upload a new supplemental '.lc($type).' document',
                 'impp' => 'Import a document',                  'impp' => 'Import a document',
                 'pubd' => 'Published documents',                  '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',
Line 2294  sub handler { Line 2580  sub handler {
                 'upld' => 'Upload Document',                  'upld' => 'Upload Document',
                 'srch' => 'Search',                  'srch' => 'Search',
                 'impo' => 'Import',                  'impo' => 'Import',
    'book' => 'Import Bookmarks',
                 'selm' => 'Select Map',                  'selm' => 'Select Map',
                 'load' => 'Load Map',                  'load' => 'Load Map',
                 'reco' => 'Recover Deleted Resources',                  'reco' => 'Recover Deleted Resources',
Line 2308  sub handler { Line 2595  sub handler {
                 'scuf' => 'Score Upload Form',                  'scuf' => 'Score Upload Form',
                 'bull' => 'Bulletin Board',                  'bull' => 'Bulletin Board',
                 'mypi' => 'My Personal Info',                  'mypi' => 'My Personal Info',
                   'grpo' => 'Group Files',
  'abou' => 'About User',   'abou' => 'About User',
                 'imsf' => 'Import IMS package',                  'imsf' => 'Import IMS package',
                 'file' =>  'File',                  'file' =>  'File',
Line 2323  sub handler { Line 2611  sub handler {
  'vc' => 'Verify Content',   'vc' => 'Verify Content',
  'cv' => 'Check/Set Resource Versions',   'cv' => 'Check/Set Resource Versions',
  'ls' => 'List Symbs',   'ls' => 'List Symbs',
                                            'sl' => 'Show Log'
   );    );
   
        my $folderpath=$env{'form.folderpath'};         my $folderpath=$env{'form.folderpath'};
Line 2330  sub handler { Line 2619  sub handler {
    if ($env{'form.folder'} eq '' ||     if ($env{'form.folder'} eq '' ||
        $env{'form.folder'} eq 'supplemental') {         $env{'form.folder'} eq 'supplemental') {
        $folderpath='default&'.         $folderpath='default&'.
    &Apache::lonnet::escape(&mt('Main Course Documents'));     &escape(&mt('Main '.$type.' Documents'));
    }     }
        }         }
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
Line 2346  sub handler { Line 2635  sub handler {
 $containertag  $containertag
 </form>  </form>
 <form name="simpleedit" method="post" action="/adm/coursedocs">  <form name="simpleedit" method="post" action="/adm/coursedocs">
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 $uploadtag  $uploadtag
 </form>  </form>
 <form action="/adm/coursedocs" method="post" name="courseverify">  <form action="/adm/coursedocs" method="post" name="courseverify">
Line 2359  $dumpbut Line 2648  $dumpbut
 $exportbut  $exportbut
 </td><td bgcolor="#DDDDCC">  </td><td bgcolor="#DDDDCC">
     <input type="submit" name="listsymbs" value="$lt{'ls'}" />      <input type="submit" name="listsymbs" value="$lt{'ls'}" />
   </td><td bgcolor="#DDDDCC">
       <input type="hidden" name="folder" value="$env{'form.folder'}" />
       <input type="submit" name="docslog" value="$lt{'sl'}" />
 </td></tr></table>  </td></tr></table>
 </form>  </form>
 ENDCOURSEVERIFY  ENDCOURSEVERIFY
        $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',         $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
      &mt('Editing the Table of Contents for your Course')));       &mt('Editing the Table of Contents for your '.$type)));
     }      }
 # --------------------------------------------------------- Standard documents  # --------------------------------------------------------- Standard documents
     $r->print('<table border=2 cellspacing=4 cellpadding=4>');      $r->print('<table border=2 cellspacing=4 cellpadding=4>');
Line 2374  ENDCOURSEVERIFY Line 2666  ENDCOURSEVERIFY
        my $folder=$env{'form.folder'};         my $folder=$env{'form.folder'};
        if ($folder eq '' || $folder eq 'supplemental') {         if ($folder eq '' || $folder eq 'supplemental') {
            $folder='default';             $folder='default';
    $env{'form.folderpath'}='default&'.&Apache::lonnet::escape(&mt('Main Course Documents'));     $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
        }         }
        my $postexec='';         my $postexec='';
        if ($folder eq 'default') {         if ($folder eq 'default') {
Line 2430  $uploadtag Line 2722  $uploadtag
 <form action="/adm/coursedocs" method="post" name="simpleeditdefault">  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
 $lt{'pubd'}<br />  $lt{'pubd'}<br />
 $uploadtag  $uploadtag
 <input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}">  <input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}" />
   <br />
 <nobr>  <nobr>
 <input type=button onClick="javascript:groupimport();" value="$lt{'impo'}">  <input type=button onClick="javascript:groupimport();" value="$lt{'impo'}" />
 $help{'Importing_LON-CAPA_Resource'}  $help{'Importing_LON-CAPA_Resource'}
 </nobr>  </nobr>
   <br />
   <input type=button onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />
 <p>  <p>
 <hr />  <hr />
 $lt{'copm'}<br />  $lt{'copm'}<br />
Line 2447  $help{'Load_Map'}</nobr> Line 2742  $help{'Load_Map'}</nobr>
 </form>  </form>
 <hr />  <hr />
 <form action="/adm/groupsort" method="post" name="recover">  <form action="/adm/groupsort" method="post" name="recover">
 <input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1)" value="$lt{'reco'}" />  <input type="button" name="recovermap" onClick="javascript:groupopen('$readfile',1,0)" value="$lt{'reco'}" />
 </form>  </form>
 ENDFORM  ENDFORM
        unless ($env{'form.pagepath'}) {         unless ($env{'form.pagepath'}) {
Line 2455  ENDFORM Line 2750  ENDFORM
 <hr />  <hr />
 <form action="/adm/coursedocs" method="post" name="newext">  <form action="/adm/coursedocs" method="post" name="newext">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newext" type="button" onClick="javascript:makenewext('newext');"  <input name="newext" type="button" onClick="javascript:makenewext('newext');"
 value="$lt{'extr'}" /> $help{'Adding_External_Resource'}  value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
Line 2473  ENDFORM Line 2768  ENDFORM
            $r->print(<<ENDFORM);             $r->print(<<ENDFORM);
 <br /><form action="/adm/coursedocs" method="post" name="newfolder">  <br /><form action="/adm/coursedocs" method="post" name="newfolder">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newfolder" type="button"  <input name="newfolder" type="button"
 onClick="javascript:makenewfolder(this.form,'$folderseq');"  onClick="javascript:makenewfolder(this.form,'$folderseq');"
Line 2482  value="$lt{'newf'}" />$help{'Adding_Fold Line 2777  value="$lt{'newf'}" />$help{'Adding_Fold
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newpage">  <br /><form action="/adm/coursedocs" method="post" name="newpage">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newpage" type="button"  <input name="newpage" type="button"
 onClick="javascript:makenewpage(this.form,'$pageseq');"  onClick="javascript:makenewpage(this.form,'$pageseq');"
Line 2491  value="$lt{'newp'}" />$help{'Adding_Page Line 2786  value="$lt{'newp'}" />$help{'Adding_Page
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newsyl">  <br /><form action="/adm/coursedocs" method="post" name="newsyl">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail"   <input type="hidden" name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">  value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
 <nobr>  <nobr>
 <input name="newsyl" type="submit" value="$lt{'syll'}" />   <input name="newsyl" type="submit" value="$lt{'syll'}" /> 
  $help{'Syllabus'}   $help{'Syllabus'}
Line 2500  value="Syllabus=/public/$coursedom/$cour Line 2795  value="Syllabus=/public/$coursedom/$cour
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newnav">  <br /><form action="/adm/coursedocs" method="post" name="newnav">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail"   <input type="hidden" name="importdetail" 
 value="Navigate Content=/adm/navmaps">  value="Navigate Content=/adm/navmaps" />
 <nobr>  <nobr>
 <input name="newnav" type="submit" value="$lt{'navc'}" />  <input name="newnav" type="submit" value="$lt{'navc'}" />
 $help{'Navigate_Content'}  $help{'Navigate_Content'}
Line 2509  $help{'Navigate_Content'} Line 2804  $help{'Navigate_Content'}
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newsmppg">  <br /><form action="/adm/coursedocs" method="post" name="newsmppg">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newsmppg" type="button" value="$lt{'sipa'}"  <input name="newsmppg" type="button" value="$lt{'sipa'}"
 onClick="javascript:makesmppage();" /> $help{'Simple Page'}  onClick="javascript:makesmppage();" /> $help{'Simple Page'}
Line 2517  onClick="javascript:makesmppage();" /> $ Line 2812  onClick="javascript:makesmppage();" /> $
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newsmpproblem">  <br /><form action="/adm/coursedocs" method="post" name="newsmpproblem">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newsmpproblem" type="button" value="$lt{'sipr'}"  <input name="newsmpproblem" type="button" value="$lt{'sipr'}"
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}  onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
Line 2525  onClick="javascript:makesmpproblem();" / Line 2820  onClick="javascript:makesmpproblem();" /
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newdropbox">  <br /><form action="/adm/coursedocs" method="post" name="newdropbox">
 $uploadtag        $uploadtag      
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>            <nobr>          
 <input name="newdropbox" type="button" value="$lt{'drbx'}"  <input name="newdropbox" type="button" value="$lt{'drbx'}"
 onClick="javascript:makedropbox();" />  onClick="javascript:makedropbox();" />
Line 2533  onClick="javascript:makedropbox();" /> Line 2828  onClick="javascript:makedropbox();" />
 </form>   </form> 
 <br /><form action="/adm/coursedocs" method="post" name="newexamupload">  <br /><form action="/adm/coursedocs" method="post" name="newexamupload">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newexamupload" type="button" value="$lt{'scuf'}"  <input name="newexamupload" type="button" value="$lt{'scuf'}"
 onClick="javascript:makeexamupload();" />  onClick="javascript:makeexamupload();" />
Line 2542  $help{'Score_Upload_Form'} Line 2837  $help{'Score_Upload_Form'}
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newbul">  <br /><form action="/adm/coursedocs" method="post" name="newbul">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newbulletin" type="button" value="$lt{'bull'}"  <input name="newbulletin" type="button" value="$lt{'bull'}"
 onClick="javascript:makebulboard();" />  onClick="javascript:makebulboard();" />
Line 2551  $help{'Bulletin Board'} Line 2846  $help{'Bulletin Board'}
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newaboutme">  <br /><form action="/adm/coursedocs" method="post" name="newaboutme">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail"   <input type="hidden" name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">  value="$plainname=/adm/$udom/$uname/aboutme" />
 <nobr>  <nobr>
 <input name="newaboutme" type="submit" value="$lt{'mypi'}" />  <input name="newaboutme" type="submit" value="$lt{'mypi'}" />
 $help{'My Personal Info'}  $help{'My Personal Info'}
Line 2560  $help{'My Personal Info'} Line 2855  $help{'My Personal Info'}
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone">  <br /><form action="/adm/coursedocs" method="post" name="newaboutsomeone">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newaboutsomeone" type="button" value="$lt{'abou'}"   <input name="newaboutsomeone" type="button" value="$lt{'abou'}" 
 onClick="javascript:makeabout();" />  onClick="javascript:makeabout();" />
 </nobr>  </nobr>
 </form>  </form>
   <br /><form action="/adm/coursedocs" method="post" name="newgroupfiles">
   $uploadtag
   <input type="hidden" name="importdetail"
   value="Group Files=/adm/$coursedom/$coursenum/aboutme" />
   <nobr>
   <input name="newgroupfiles" type="submit" value="$lt{'grpo'}" />
   $help{'Group Files'}
   </nobr>
   </form>
 ENDFORM  ENDFORM
        }         }
        if ($env{'form.pagepath'}) {         if ($env{'form.pagepath'}) {
            $r->print(<<ENDBLOCK);             $r->print(<<ENDBLOCK);
 <form action="/adm/coursedocs" method="post" name="newsmpproblem">  <form action="/adm/coursedocs" method="post" name="newsmpproblem">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newsmpproblem" type="button" value="$lt{'sipr'}"  <input name="newsmpproblem" type="button" value="$lt{'sipr'}"
 onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}  onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
Line 2580  onClick="javascript:makesmpproblem();" / Line 2884  onClick="javascript:makesmpproblem();" /
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="newexamupload">  <br /><form action="/adm/coursedocs" method="post" name="newexamupload">
 $uploadtag  $uploadtag
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newexamupload" type="button" value="$lt{'scuf'}"  <input name="newexamupload" type="button" value="$lt{'scuf'}"
 onClick="javascript:makeexamupload();" />  onClick="javascript:makeexamupload();" />
Line 2605  ENDBLOCK Line 2909  ENDBLOCK
        if ($folder =~ /^supplemental$/ &&         if ($folder =~ /^supplemental$/ &&
    $env{'form.folderpath'} =~ /^default\&/) {     $env{'form.folderpath'} =~ /^default\&/) {
    $env{'form.folderpath'}='supplemental&'.     $env{'form.folderpath'}='supplemental&'.
        &Apache::lonnet::escape(&mt('Supplemental Course Documents'));         &escape(&mt('Supplemental '.$type.' Documents'));
        }         }
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($allowed) {         if ($allowed) {
Line 2644  $lt{'comment'}:<br /> Line 2948  $lt{'comment'}:<br />
 <td bgcolor="#DDDDDD">  <td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" name="supnewfolder">  <form action="/adm/coursedocs" method="post" name="supnewfolder">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newfolder" type="button"  <input name="newfolder" type="button"
 onClick="javascript:makenewfolder(this.form,'$folderseq');"  onClick="javascript:makenewfolder(this.form,'$folderseq');"
Line 2653  value="$lt{'newf'}" /> $help{'Adding_Fol Line 2957  value="$lt{'newf'}" /> $help{'Adding_Fol
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="supnewext">  <br /><form action="/adm/coursedocs" method="post" name="supnewext">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="importdetail" value="" />
 <nobr>  <nobr>
 <input name="newext" type="button"   <input name="newext" type="button" 
 onClick="javascript:makenewext('supnewext');"  onClick="javascript:makenewext('supnewext');"
Line 2662  value="$lt{'extr'}" /> $help{'Adding_Ext Line 2966  value="$lt{'extr'}" /> $help{'Adding_Ext
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="supnewsyl">  <br /><form action="/adm/coursedocs" method="post" name="supnewsyl">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail"   <input type="hidden" name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">  value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
 <nobr>  <nobr>
 <input name="newsyl" type="submit" value="$lt{'syll'}" />  <input name="newsyl" type="submit" value="$lt{'syll'}" />
 $help{'Syllabus'}  $help{'Syllabus'}
Line 2671  $help{'Syllabus'} Line 2975  $help{'Syllabus'}
 </form>  </form>
 <br /><form action="/adm/coursedocs" method="post" name="subnewaboutme">  <br /><form action="/adm/coursedocs" method="post" name="subnewaboutme">
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
 <input type=hidden name="importdetail"   <input type="hidden" name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">  value="$plainname=/adm/$udom/$uname/aboutme" />
 <nobr>  <nobr>
 <input name="newaboutme" type="submit" value="$lt{'mypi'}" />  <input name="newaboutme" type="submit" value="$lt{'mypi'}" />
 $help{'My Personal Info'}  $help{'My Personal Info'}
Line 2710  sub editing_js { Line 3014  sub editing_js {
 function makenewfolder(targetform,folderseq) {  function makenewfolder(targetform,folderseq) {
     var foldername=prompt('Name of New Folder','New Folder');      var foldername=prompt('Name of New Folder','New Folder');
     if (foldername) {      if (foldername) {
        targetform.importdetail.value=foldername+"="+folderseq;         targetform.importdetail.value=escape(foldername)+"="+folderseq;
         targetform.submit();          targetform.submit();
     }      }
 }  }
Line 2718  function makenewfolder(targetform,folder Line 3022  function makenewfolder(targetform,folder
 function makenewpage(targetform,folderseq) {  function makenewpage(targetform,folderseq) {
     var pagename=prompt('Name of New Page','New Page');      var pagename=prompt('Name of New Page','New Page');
     if (pagename) {      if (pagename) {
         targetform.importdetail.value=pagename+"="+folderseq;          targetform.importdetail.value=escape(pagename)+"="+folderseq;
         targetform.submit();          targetform.submit();
     }      }
 }  }
Line 2732  function makeexamupload() { Line 3036  function makeexamupload() {
    var title=prompt('Listed Title for the Uploaded Score');     var title=prompt('Listed Title for the Uploaded Score');
    if (title) {      if (title) { 
     this.document.forms.newexamupload.importdetail.value=      this.document.forms.newexamupload.importdetail.value=
  title+'=/res/lib/templates/examupload.problem';   escape(title)+'=/res/lib/templates/examupload.problem';
     this.document.forms.newexamupload.submit();      this.document.forms.newexamupload.submit();
    }     }
 }  }
Line 2741  function makesmppage() { Line 3045  function makesmppage() {
    var title=prompt('Listed Title for the Page');     var title=prompt('Listed Title for the Page');
    if (title) {      if (title) { 
     this.document.forms.newsmppg.importdetail.value=      this.document.forms.newsmppg.importdetail.value=
  title+'=/adm/$udom/$uname/$now/smppg';   escape(title)+'=/adm/$udom/$uname/$now/smppg';
     this.document.forms.newsmppg.submit();      this.document.forms.newsmppg.submit();
    }     }
 }  }
Line 2750  function makesmpproblem() { Line 3054  function makesmpproblem() {
    var title=prompt('Listed Title for the Problem');     var title=prompt('Listed Title for the Problem');
    if (title) {      if (title) { 
     this.document.forms.newsmpproblem.importdetail.value=      this.document.forms.newsmpproblem.importdetail.value=
  title+'=/res/lib/templates/simpleproblem.problem';   escape(title)+'=/res/lib/templates/simpleproblem.problem';
     this.document.forms.newsmpproblem.submit();      this.document.forms.newsmpproblem.submit();
    }     }
 }  }
Line 2759  function makedropbox() { Line 3063  function makedropbox() {
    var title=prompt('Listed Title for the Drop Box');     var title=prompt('Listed Title for the Drop Box');
    if (title) {      if (title) { 
     this.document.forms.newdropbox.importdetail.value=      this.document.forms.newdropbox.importdetail.value=
         title+'=/res/lib/templates/DropBox.problem';          escape(title)+'=/res/lib/templates/DropBox.problem';
     this.document.forms.newdropbox.submit();      this.document.forms.newdropbox.submit();
    }     }
 }  }
Line 2768  function makebulboard() { Line 3072  function makebulboard() {
    var title=prompt('Listed Title for the Bulletin Board');     var title=prompt('Listed Title for the Bulletin Board');
    if (title) {     if (title) {
     this.document.forms.newbul.importdetail.value=      this.document.forms.newbul.importdetail.value=
  title+'=/adm/$udom/$uname/$now/bulletinboard';   escape(title)+'=/adm/$udom/$uname/$now/bulletinboard';
     this.document.forms.newbul.submit();      this.document.forms.newbul.submit();
    }     }
 }  }
   
 function makeabout() {  function makeabout() {
    var user=prompt("Enter user\@domain for User's 'About Me' Page");     var user=prompt("Enter user:domain for User's 'About Me' Page");
    if (user) {     if (user) {
        var comp=new Array();         var comp=new Array();
        comp=user.split('\@');         comp=user.split(':');
        if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {         if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {
    if ((comp[0]) && (comp[1])) {     if ((comp[0]) && (comp[1])) {
        this.document.forms.newaboutsomeone.importdetail.value=         this.document.forms.newaboutsomeone.importdetail.value=
    'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';     'About '+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';
        this.document.forms.newaboutsomeone.submit();         this.document.forms.newaboutsomeone.submit();
    } else {     } else {
                alert("Not a valid user\@domain");                 alert("Not a valid user:domain");
            }             }
        } else {         } else {
            alert("Please enter both user and domain in the format user\@domain");              alert("Please enter both user and domain in the format user:domain"); 
        }         }
    }     }
 }  }

Removed from v.1.227  
changed lines
  Added in v.1.261


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