Diff for /loncom/interface/londocs.pm between versions 1.15 and 1.94

version 1.15, 2002/09/02 15:27:08 version 1.94, 2003/11/04 19:18:16
Line 29 Line 29
 package Apache::londocs;  package Apache::londocs;
   
 use strict;  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonratedt;  use Apache::lonratedt;
 use Apache::lonratsrv;  use Apache::lonratsrv;
 use Apache::lonxml;  use Apache::lonxml;
   use Apache::loncreatecourse;
   use HTML::Entities;
   use GDBM_File;
   use Apache::lonlocal;
   
 my $iconpath;  my $iconpath;
   
   my %hash;
   
   my $hashtied;
   my %alreadyseen=();
   
   my $hadchanges;
   
   # Available help topics
   
   my %help=();
   
 # Mapread read maps into lonratedt::global arrays   # Mapread read maps into lonratedt::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
Line 53  sub mapread { Line 68  sub mapread {
   
 sub storemap {  sub storemap {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
       $hadchanges=1;
     return      return
       &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
                                 $map,1);                                  $map,1);
 }  }
   
   # ----------------------------------------- Return hash with valid author names
   
   sub authorhosts {
       my %outhash=();
       my $home=0;
       my $other=0;
       foreach (keys %ENV) {
    if ($_=~/^user\.role\.(au|ca)\.(.+)$/) {
       my $role=$1;
       my $realm=$2;
       my ($start,$end)=split(/\./,$ENV{$_});
       if (($start) && ($start>time)) { next; }
       if (($end) && (time>$end)) { next; }
       my $ca; my $cd;
       if ($1 eq 'au') {
    $ca=$ENV{'user.name'};
    $cd=$ENV{'user.domain'};
       } else {
    ($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/);
       }
       if (&Apache::lonnet::homeserver($ca,$cd) eq 
    $Apache::lonnet::perlvar{'lonHostID'}) {
    $home++;
    $outhash{'home_'.$ca.'@'.$cd}=1;
       } else {
    $outhash{'otherhome_'.$ca.'@'.$cd}=
       &Apache::lonnet::homeserver($ca,$cd);
    $other++;
       }
    }
       }
       return ($home,$other,%outhash);
   }
   # ------------------------------------------------------ Generate "dump" button
   
   sub dumpbutton {
       my ($home,$other,%outhash)=&authorhosts();
       if ($home+$other==0) { return ''; }
       my $output='</td><td bgcolor="#DDDDCC">';
       if ($home) {
    return '</td><td bgcolor="#DDDDCC">'.
       '<input type="submit" name="dumpcourse" value="'.
       &mt('Dump Course DOCS to Construction Space').'" />';
       } else {
    return'</td><td bgcolor="#DDDDCC">'.
        &mt('Dump Course DOCS to Construction Space: available on other servers');
       }
   }
   
   # -------------------------------------------------------- Actually dump course
   
   sub dumpcourse {
       my $r=shift;
       $r->print('<html><head><title>Dump DOCS</title></head>'.
           &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space').
         '<form name="dumpdoc" method="post">');
       my ($home,$other,%outhash)=&authorhosts();
       unless ($home) { return ''; }
       my $origcrsid=$ENV{'request.course.id'};
       my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid);
       if (($ENV{'form.authorspace'}) && ($ENV{'form.authorfolder'}=~/\w/)) {
   # Do the dumping
    unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; }
    my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'});
    $r->print('<h3>'.&mt('Copying Files').'</h3>');
    my $title=$ENV{'form.authorfolder'};
    $title=~s/[^\w\/]+/\_/g;
    my %replacehash=();
    foreach (keys %ENV) {
       if ($_=~/^form\.namefor\_(.+)/) {
    $replacehash{$1}=$ENV{$_};
       }
    }
    my $crs='/uploaded/'.$ENV{'request.course.id'}.'/';
    $crs=~s/\_/\//g;
    foreach (keys %replacehash) {
       my $newfilename=$title.'/'.$replacehash{$_};
       $newfilename=~s/[^\w\/\.]+/\_/g;
       my @dirs=split(/\//,$newfilename);
       my $path='/home/'.$ca.'/public_html';
       my $makepath=$path;
       my $fail=0;
       for (my $i=0;$i<$#dirs;$i++) {
    $makepath.='/'.$dirs[$i];
    unless (-e $makepath) { 
       unless(mkdir($makepath,0777)) { $fail=1; } 
    }
       }
       $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');
       if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
    if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
       print $fh &Apache::loncreatecourse::rewritefile(
            &Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_),
        (%replacehash,$crs => '')
       );
    } else {
       print $fh
            &Apache::loncreatecourse::readfile($ENV{'request.course.id'},$_);
          }
    $fh->close();
       } else {
    $fail=1;
       }
       if ($fail) {
    $r->print('<font color="red">fail</font>');
       } else {
    $r->print('<font color="green">ok</font>');
       }
    }
       } else {
   # Input form
    unless ($home==1) {
       $r->print(
         '<h3>'.&mt('Select the Construction Space').'</h3><select name="authorspace">');
    }
    foreach (sort keys %outhash) {
       if ($_=~/^home_(.+)$/) {
    if ($home==1) {
       $r->print(
     '<input type="hidden" name="authorspace" value="'.$1.'" />');
    } else {
       $r->print('<option value="'.$1.'">'.$_.'</option>');
    }
       }
    }
    unless ($home==1) {
       $r->print('</select>');
    }
    my $title=$origcrsdata{'description'};
    $title=~s/\s+/\_/gs;
    $title=~s/\W//gs;
    $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');
    &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>');
    foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) {
       $r->print('<tr><td>'.$_.'</td>');
       my ($ext)=($_=~/\.(\w+)$/);
       my $title=$hash{'title_'.$hash{
    'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};
       $r->print('<td>'.($title?$title:'&nbsp;').'</td>');
       unless ($title) {
    $title=$_;
       }
       $title=~s/\.(\w+)$//;
       $title=~s/\W+/\_/gs;
       $title.='.'.$ext;
       $r->print("\n<td><input type='text' size='60' name='namefor_".$_."' value='".$title."' /></td></tr>\n");
    }
    $r->print("</table>\n");
    &untiehash();
    $r->print(
     '<p><input type="submit" name="dumpcourse" value="'.&mt('Dump Course DOCS').'" /></p></form>');
       }
   }
   
   
   # Imports the given (name, url) resources into the course
   # coursenum, coursedom, and folder must precede the list
   sub group_import {
       my $coursenum = shift;
       my $coursedom = shift;
       my $folder = shift;
       while (@_) {
    my $name = shift;
    my $url = shift;
    if ($url) {
       my $idx = $#Apache::lonratedt::resources + 1;
       $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;
       my $ext = 'false';
       if ($url=~/^http:\/\//) { $ext = 'true'; }
       $url =~ s/:/\&colon;/g;
       $name =~ s/:/\&colon;/g;
       $Apache::lonratedt::resources[$idx] = 
    join ':', ($name, $url, $ext, 'normal', 'res');
    }
       }
       &storemap($coursenum, $coursedom, $folder.'.sequence');
   }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed)=@_;
       if ($ENV{'form.foldername'}) {
    $r->print('<h3>Folder: '.$ENV{'form.foldername'}.'</h3>');
       }
     my $errtext='';      my $errtext='';
     my $fatal=0;      my $fatal=0;
     ($errtext,$fatal)=      ($errtext,$fatal)=
           &mapread($coursenum,$coursedom,$folder.'.sequence');            &mapread($coursenum,$coursedom,$folder.'.sequence');
       if ($#Apache::lonratedt::order<1) {
           $Apache::lonratedt::order[0]=1;
           $Apache::lonratedt::resources[1]='';
       }
     if ($fatal) {      if ($fatal) {
    $r->print('<p><font color="red">'.$errtext.'</font></p>');     $r->print('<p><font color="red">'.$errtext.'</font></p>');
     } else {      } else {
 # ------------------------------------------------------------ Process commands  # ------------------------------------------------------------ Process commands
  if ($allowed) {  # ---------------- if they are for this folder and user allowed to make changes
    if (($allowed) && ($ENV{'form.folder'} eq $folder)) {
 # upload a file, if present  # upload a file, if present
            if (($ENV{'form.uploaddoc.filename'}) &&             if (($ENV{'form.uploaddoc.filename'}) &&
                ($ENV{'form.cmd'}=~/^upload_(\w+)/)) {                 ($ENV{'form.cmd'}=~/^upload_(\w+)/)) {
Line 83  sub editor { Line 286  sub editor {
               $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 ($folder=~/^supplemental/) {
     $comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'.
         $ENV{'user.domain'}.'___&&&___'.$comment;
                 }
               my $newidx=$#Apache::lonratedt::resources+1;                my $newidx=$#Apache::lonratedt::resources+1;
               $Apache::lonratedt::resources[$newidx]=                $Apache::lonratedt::resources[$newidx]=
                   $comment.':'.$url.':'.$ext.':normal:res';                    $comment.':'.$url.':'.$ext.':normal:res';
Line 100  sub editor { Line 307  sub editor {
                     }                      }
                     $#Apache::lonratedt::order--;                      $#Apache::lonratedt::order--;
                 } elsif ($cmd eq 'up') {                  } elsif ($cmd eq 'up') {
     if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) {
                     my $i=$Apache::lonratedt::order[$idx-1];                      my $i=$Apache::lonratedt::order[$idx-1];
                     $Apache::lonratedt::order[$idx-1]=                      $Apache::lonratedt::order[$idx-1]=
  $Apache::lonratedt::order[$idx];   $Apache::lonratedt::order[$idx];
                     $Apache::lonratedt::order[$idx]=$i;                      $Apache::lonratedt::order[$idx]=$i;
      }
                 } elsif ($cmd eq 'down') {                  } elsif ($cmd eq 'down') {
      if (defined($Apache::lonratedt::order[$idx+1])) {
                     my $i=$Apache::lonratedt::order[$idx+1];                      my $i=$Apache::lonratedt::order[$idx+1];
                     $Apache::lonratedt::order[$idx+1]=                      $Apache::lonratedt::order[$idx+1]=
  $Apache::lonratedt::order[$idx];   $Apache::lonratedt::order[$idx];
                     $Apache::lonratedt::order[$idx]=$i;                      $Apache::lonratedt::order[$idx]=$i;
      }
                   } elsif ($cmd eq 'rename') {
                       my ($rtitle,@rrest)=split(/\:/,
                          $Apache::lonratedt::resources[
          $Apache::lonratedt::order[$idx]]);
                       my $comment=
                        &HTML::Entities::decode($ENV{'form.title'});
                       $comment=~s/\</\&lt\;/g;
                       $comment=~s/\>/\&gt\;/g;
                       $comment=~s/\:/\&colon;/g;
                       $Apache::lonratedt::resources[
          $Apache::lonratedt::order[$idx]]=
                                $comment.':'.join(':',@rrest);
                       
                 }                  }
 # Store the changed version  # Store the changed version
  &storemap($coursenum,$coursedom,$folder.'.sequence');   &storemap($coursenum,$coursedom,$folder.'.sequence');
             }              }
 # Group import/search  # Group import/search
     if ($ENV{'form.importdetail'}) {      if ($ENV{'form.importdetail'}) {
                foreach (split(/\&/,$ENV{'form.importdetail'})) {   my @imports;
                   if (defined($_)) {   foreach (split(/\&/,$ENV{'form.importdetail'})) {
              my ($name,$url)=split(/\=/,$_);      if (defined($_)) {
                      $name=&Apache::lonnet::unescape($name);   my ($name,$url)=split(/\=/,$_);
                      $url=&Apache::lonnet::unescape($url);   $name=&Apache::lonnet::unescape($name);
                      if ($url) {   $url=&Apache::lonnet::unescape($url);
                 my $idx=$#Apache::lonratedt::resources+1;   push @imports, $name, $url;
                         $Apache::lonratedt::order      }
                            [$#Apache::lonratedt::order+1]=$idx;   }
                         my $ext='false';  
                         if ($url=~/^http\:\/\//) { $ext='true'; }  
                         $url=~s/\:/\&colon;/g;  
                         $Apache::lonratedt::resources[$idx]=  
                            $name.':'.$url.':'.$ext.':normal:res';  
              }  
                  }  
       }  
 # Store the changed version  # Store the changed version
  &storemap($coursenum,$coursedom,$folder.'.sequence');   group_import($coursenum, $coursedom, $folder, @imports);
             }              }
  }  # Loading a complete map
      if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) {
                 foreach
   (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {
                      my $idx=$#Apache::lonratedt::resources;
                      $idx++;
                      $Apache::lonratedt::resources[$idx]=$_;
                      $Apache::lonratedt::order
                               [$#Apache::lonratedt::order+1]=$idx;
                   }
   
   # Store the changed version
    &storemap($coursenum,$coursedom,$folder.'.sequence');
              }
          }
   # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen  # ---------------------------------------------------------------- Print screen
         my $idx=0;          my $idx=0;
         $r->print('<table>');          $r->print('<table>');
         foreach (@Apache::lonratedt::order) {          foreach (@Apache::lonratedt::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);             my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);
            unless ($name) {  $name=(split(/\//,$url))[-1]; }             unless ($name) {  $name=(split(/\//,$url))[-1]; }
            unless ($name) { $name='EMPTY'; }             unless ($name) { $name='NO RESOURCE'; $url='/adm/notfound.html'; }
            $r->print(&entryline($idx,$name,$url,$folder,$allowed));             $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_));
            $idx++;             $idx++;
         }          }
         $r->print('</table>');          $r->print('</table>');
Line 153  sub editor { Line 384  sub editor {
 # --------------------------------------------------------------- An entry line  # --------------------------------------------------------------- An entry line
   
 sub entryline {  sub entryline {
     my ($index,$title,$url,$folder,$allowed)=@_;      my ($index,$title,$url,$folder,$allowed,$residx)=@_;
       $title=~s/\&colon\;/\:/g;
       $title=&HTML::Entities::encode(&HTML::Entities::decode(
        &Apache::lonnet::unescape($title)),'\"\<\>\&\'');
       my $renametitle=$title;
       my $foldertitle=$title;
       if ($title=~
    /^(\d+)\_\_\_\&amp\;\&amp\;\&amp\;\_\_\_(\w+)\_\_\_\&amp\;\&amp\;\&amp\;\_\_\_(\w+)\_\_\_\&amp\;\&amp\;\&amp\;\_\_\_(.*)$/
    ) { 
               $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
               $renametitle=$4;
               $title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '.
                   &Apache::loncommon::plainname($2,$3).': <br />'.
    $foldertitle;
    }
       $renametitle=~s/\&quot\;/\\\"/g;
     my $line='<tr>';      my $line='<tr>';
 # Edit commands  # Edit commands
     if ($allowed) {       if ($allowed) {
        $line.=(<<END);   my %lt=('up' => 'Move Up',
 <td><table border='0' cellspacing='0' cellpadding='0'>   'dw' => 'Move Down',
 <tr><td><a href='/adm/coursedocs?folder=$folder&cmd=up_$index'>   'rm' => 'Remove',
 <img src="${iconpath}move_up.gif" alt='UP' border='0' /></a></td></tr>   'rn' => 'Rename');
 <tr><td><a href='/adm/coursedocs?folder=$folder&cmd=down_$index'>        $line.=(<<END);
 <img src="${iconpath}move_down.gif" alt='DOWN' border='0' /></a></td></tr>  <td><table border='0' cellspacing='2' cellpadding='0'>
 </table></td><td>  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?folder=$folder&cmd=del_$index'>Remove</td>  <a href='/adm/coursedocs?folder=$folder&cmd=up_$index'>
   <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>
   <tr><td bgcolor="#DDDDDD">
   <a href='/adm/coursedocs?folder=$folder&cmd=down_$index'>
   <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>
   </table></td><td bgcolor="#DDDDDD">
   <a href='javascript:removeres("$folder","$index","$renametitle");'>
   <font size="-2" color="#990000">$lt{'rm'}</font></a>
   <a href='javascript:changename("$folder","$index","$renametitle");'>
   <font size="-2" color="#009900">$lt{'rn'}</font></a></td>
 END  END
     }      }
 # URL  # Figure out what kind of a resource this is
     if ($url=~/^\/*uploaded\//) {      my ($extension)=($url=~/\.(\w+)$/);
  $url=&Apache::lonnet::tokenwrapper($url);      my $uploaded=($url=~/^\/*uploaded\//);
     }      my $icon='unknown';
     $line.='<td><a href="'.$url.'">View</a></td>';      if (-e "/home/httpd/html/adm/lonIcons/$extension.gif") {
 # Title   $icon=$extension;
     $title=&Apache::lonnet::unescape($title);      }
     if ($title=~      my $isfolder=0;
  /^(\d+)\_\_\_\&\&\&\_\_\_(\w+)\_\_\_\&\&\&\_\_\_(\w+)\_\_\_\&\&\&\_\_\_(.*)$/      if ($uploaded) {
  ) { $title='<i>'.localtime($1).'</i> '.$2.' at '.$3.': <br>'.         if ($extension eq 'sequence') {
  &Apache::lontexconvert::msgtexconverted($4);    $icon='folder_closed';
  }            $url=~/\/(\w+)\.sequence/;
     $line.="<td>$title</td>";            $url='/adm/coursedocs?folder='.$1;
     $line.='</tr>';            $isfolder=1;
          } else {
     $url=&Apache::lonnet::tokenwrapper($url);
          } 
       }
       $url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//;
       if (($residx) && ($folder!~/supplemental/)) {
          $url.=(($url=~/\?/)?'&':'?').'symb='.
          &Apache::lonnet::escape(&Apache::lonnet::symbclean(
             &Apache::lonnet::declutter('uploaded/'.
              $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'.
              $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.'/'.$folder.
              '.sequence').
              '___'.$residx.'___'.
      &Apache::lonnet::declutter($url)));
       }
       if ($isfolder) { $url.='&foldername='.
          &Apache::lonnet::escape($foldertitle); }
       $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'" target="cat_'.$folder.
   '"><img src="/adm/lonIcons/'.
           $icon.'.gif" border="0"></a></td>'.
           "<td bgcolor='#FFFFBB'><a href='$url' target='cat_$folder'>$title</a></td></tr>";
     return $line;      return $line;
 }  }
   
   # ---------------------------------------------------------------- tie the hash
   
   sub tiehash {
       $hashtied=0;
       if ($ENV{'request.course.fn'}) {
           if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
               &GDBM_READER(),0640)) {
                   $hashtied=1;
           }
       }    
   }
   
   sub untiehash {
       if ($hashtied) { untie %hash; }
       $hashtied=0;
   }
   
   # --------------------------------------------------------------- check on this
   
   sub checkonthis {
       my ($r,$url,$level,$title)=@_;
       $alreadyseen{$url}=1;
       $r->rflush();
       if (($url) && ($url!~/^\/uploaded\//) && ($url!~/\*$/)) {
          $r->print('<br />');
          for (my $i=0;$i<=$level*5;$i++) {
              $r->print('&nbsp;');
          }
          $r->print('<a href="'.$url.'" target="cat">'.
    ($title?$title:$url).'</a> ');
          if ($url=~/^\/res\//) {
     my $result=&Apache::lonnet::repcopy(
                                 &Apache::lonnet::filelocation('',$url));
             if ($result==OK) {
                $r->print('<font color="green">'.&mt('ok').'</font>');
                $r->rflush();
                &Apache::lonnet::countacc($url);
                $url=~/\.(\w+)$/;
                if (&Apache::loncommon::fileembstyle($1) eq 'ssi') {
    $r->print('<br />');
                    $r->rflush();
                    for (my $i=0;$i<=$level*5;$i++) {
                        $r->print('&nbsp;');
                    }
                    $r->print('- '.&mt('Rendering').': ');
                    my $oldpath=$ENV{'request.filename'};
                    $ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url);
                    &Apache::lonxml::xmlparse($r,'web',
                      &Apache::lonnet::getfile(
                       &Apache::lonnet::filelocation('',$url)));
    undef($Apache::lonhomework::parsing_a_problem);
    $ENV{'request.filename'}=$oldpath;
                    if (($Apache::lonxml::errorcount) ||
                        ($Apache::lonxml::warningcount)) {
        if ($Apache::lonxml::errorcount) {
                           $r->print('<font color="red"><b>'.
     $Apache::lonxml::errorcount.' '.
     &mt('error(s)').'</b></font> ');
                        }
        if ($Apache::lonxml::warningcount) {
                           $r->print('<font color="blue">'.
     $Apache::lonxml::warningcount.' '.
     &mt('warning(s)').'</font>');
                        }
                    } else {
                        $r->print('<font color="green">'.&mt('ok').'</font>');
                    }
                    $r->rflush();
                }
        my $dependencies=
                   &Apache::lonnet::metadata($url,'dependencies');
                foreach (split(/\,/,$dependencies)) {
    if (($_=~/^\/res\//) && (!$alreadyseen{$_})) {
                       &checkonthis($r,$_,$level+1);
                    }
                }
             } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {
                $r->print('<font color="red"><b>'.&mt('connection down').'</b></font>');
             } elsif ($result==HTTP_NOT_FOUND) {
                $r->print('<font color="red"><b>'.&mt('not found').'</b></font>');
             } else {
                $r->print('<font color="red"><b>'.&mt('access denied').'</b></font>');
             }
         }
      }
   }
   
   
   #
   # -------------------------------------------------------------- Verify Content
   # 
   sub verifycontent {
      my $r=shift; 
      my $loaderror=&Apache::lonnet::overloaderror($r);
      if ($loaderror) { return $loaderror; }
   
      $r->print('<html><head><title>Verify Content</title></head>'.
                 &Apache::loncommon::bodytag('Verify Course Documents'));
      $hashtied=0;
      undef %alreadyseen;
      %alreadyseen=();
      &tiehash();
      foreach (keys %hash) {
          if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) {
              &checkonthis($r,$hash{$_},0,$hash{'title_'.$1});
          }
      }
      &untiehash();
      $r->print('<h1>'.&mt('Done').'.</h1>');
   }
   
   # -------------------------------------------------------------- Check Versions
   
   sub checkversions {
       my $r=shift;
       $r->print('<html><head><title>Check Versions</title></head>'.
                 &Apache::loncommon::bodytag('Check Course Document Versions'));
       my $header='';
       my $startsel='';
       my $monthsel='';
       my $weeksel='';
       my $daysel='';
       my $allsel='';
       my %changes=();
       my $starttime=0;
       my $haschanged=0;
       my %setversions=&Apache::lonnet::dump('resourceversions',
     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
   
       $hashtied=0;
       &tiehash();
       my %newsetversions=();
       if ($ENV{'form.setmostrecent'}) {
    $haschanged=1;
    foreach (keys %hash) {
       if ($_=~/^ids\_(\/res\/.+)$/) {
    $newsetversions{$1}='mostrecent';
       }
    }
       } elsif ($ENV{'form.setcurrent'}) {
    $haschanged=1;
    foreach (keys %hash) {
       if ($_=~/^ids\_(\/res\/.+)$/) {
    my $getvers=&Apache::lonnet::getversion($1);
    if ($getvers>0) {
       $newsetversions{$1}=$getvers;
    }
       }
    }
       } elsif ($ENV{'form.setversions'}) {
    $haschanged=1;
    foreach (keys %ENV) {
       if ($_=~/^form\.set_version_(.+)$/) {
    my $src=$1;
    &Apache::lonnet::logthis('Found: '.$1.' '.$ENV{$_});
    if (($ENV{$_}) && ($ENV{$_} ne $setversions{$src})) {
       $newsetversions{$src}=$ENV{$_};
    }
       }
    }
       }
       if ($haschanged) {
           if (&Apache::lonnet::put('resourceversions',\%newsetversions,
     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.num'}) eq 'ok') {
       $r->print('<h1>'.&mt('Your Version Settings have been Stored').'</h1>');
    } else {
       $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>');
    }
    &changewarning($r,'');
       }
       if ($ENV{'form.timerange'} eq 'all') {
   # show all documents
    $header=&mt('All Documents in Course');
    $allsel=1;
    foreach (keys %hash) {
       if ($_=~/^ids\_(\/res\/.+)$/) {
    my $src=$1;
    $changes{$src}=1;
       }
    }
       } else {
   # show documents which changed
    %changes=&Apache::lonnet::dump
    ('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
                        $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
    my $firstkey=(keys %changes)[0];
    unless ($firstkey=~/^error\:/) {
       unless ($ENV{'form.timerange'}) {
    $ENV{'form.timerange'}=604800;
       }
       my $seltext=&mt('during the last').' '.$ENV{'form.timerange'}.' '
    .&mt('seconds');
       if ($ENV{'form.timerange'}==-1) {
    $seltext='since start of course';
    $startsel='selected';
    $ENV{'form.timerange'}=time;
       }
       $starttime=time-$ENV{'form.timerange'};
       if ($ENV{'form.timerange'}==2592000) {
    $seltext=&mt('during the last month').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
    $monthsel='selected';
       } elsif ($ENV{'form.timerange'}==604800) {
    $seltext=&mt('during the last week').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
    $weeksel='selected';
       } elsif ($ENV{'form.timerange'}==86400) {
    $seltext=&mt('since yesterday').' ('.&Apache::lonlocal::locallocaltime($starttime).')';
    $daysel='selected';
       }
       $header=&mt('Content changed').' '.$seltext;
    } else {
       $header=&mt('No content modifications yet.');
    }
       }
       %setversions=&Apache::lonnet::dump('resourceversions',
     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
       my %lt=&Apache::lonlocal::texthash
         ('st' => 'Version changes since start of Course',
          'lm' => 'Version changes since last Month',
          'lw' => 'Version changes since last Week',
          'sy' => 'Version changes since Yesterday',
                  'al' => 'All Resources (possibly large output)',
          'sd' => 'Display',
          'fi' => 'File',
          'md' => 'Modification Date',
                  'mr' => 'Most recently published Version',
          've' => 'Version used in Course',
                  'vu' => 'Set Version to be used in Course',
   'sv' => 'Set Versions to be used in Course according to Selections below',
   'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
   'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
          'di' => 'Differences');
       $r->print(<<ENDHEADERS);
   <form action="/adm/coursedocs" method="post">
   <input type="hidden" name="versions" value="1" />
   <input type="submit" name="setmostrecent" value="$lt{'sm'}" />
   <input type="submit" name="setcurrent" value="$lt{'sc'}" /><hr />
   <select name="timerange">
   <option value='all' $allsel>$lt{'al'}</option>
   <option value="-1" $startsel>$lt{'st'}</option>
   <option value="2592000" $monthsel>$lt{'lm'}</option>
   <option value="604800" $weeksel>$lt{'lw'}</option>
   <option value="86400" $daysel>$lt{'sy'}</option>
   </select>
   <input type="submit" name="display" value="$lt{'sd'}" />
   <h3>$header</h3>
   <input type="submit" name="setversions" value="$lt{'sv'}" />
   <table border="2">
   <tr>
   <th>$lt{'fi'}</th><th>$lt{'md'}</th><th>$lt{'mr'}</th>
   <th>$lt{'ve'}</th><th>$lt{'vu'}</th><th>$lt{'di'}</th></tr>
   ENDHEADERS
       foreach (sort keys %changes) {
    if ($changes{$_}>$starttime) {
       my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
       my $currentversion=&Apache::lonnet::getversion($_);
       if ($currentversion<0) {
    $currentversion=&mt('Could not be determined.');
       }
       my $linkurl=&Apache::lonnet::clutter($_);
       $r->print(
         '<tr><td><b>'.
         &Apache::lonnet::gettitle($linkurl).
      '</b><br /><a href="'.$linkurl.'" target="cat">'.$linkurl.
         '</a></td><td>'.
         &Apache::lonlocal::locallocaltime($changes{$_}).
                         '</td><td><font size="+2">'.
         $currentversion.'</font></td><td><font size="+2">');
   # Used in course
       my $usedversion=$hash{'version_'.$linkurl};
       if (($usedversion) && ($usedversion ne 'mostrecent')) {
    $r->print($usedversion);
       } else {
    $r->print($currentversion);
       }
       $r->print('</font></td><td>');
   # Set version
       $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
         'set_version_'.$linkurl,
         ('' => '',
          'mostrecent' => 'most recent',
          map {$_,$_} (1..$currentversion))));
       $r->print('</td><td><font size="1"><ul>');
       my $lastold=1;
       for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
    my $url=$root.'.'.$prevvers.'.'.$extension;
    if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
       $starttime) {
       $lastold=$prevvers;
    }
       }
               for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
    my $url=$root.'.'.$prevvers.'.'.$extension;
    $r->print('<li><a href="'.&Apache::lonnet::clutter($url).
     '">'.&mt('Version').' '.$prevvers.'</a> ('.
     &Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($url,'lastrevisiondate')).
     ')');
    if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
                       $r->print(' <a href="/adm/diff?filename='.
         &Apache::lonnet::clutter($root.'.'.$extension).
         '&versionone='.$prevvers.
         '">'.&mt('Diffs').'</a>');
    }
    $r->print('</li>');
       }
       $r->print('</ul></font></td></tr>');
    }
       }
       $r->print('</table></form>');
       $r->print('<h1>'.&mt('Done').'.</h1>');
   
       &untiehash();
   }
   
   sub changewarning {
       my ($r,$postexec)=@_;
       $r->print(
   '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'. 
   '<form method="post" action="/adm/roles" target="loncapaclient">'.
   '<input type="hidden" name="orgurl" value="/adm/coursedocs" /><input type="hidden" name="selectrole" value="1" /><h3><font color="red">'.
   &mt('Changes will become active for your current session after').
   ' <input type="hidden" name="'.
   $ENV{'request.role'}.'" value="1" /><input type="button" value="'.
   &mt('re-initializing course').'" onClick="reinit(this.form)"/>'.&mt(', or the next time you log in.').
   $help{'Caching'}.'</font></h3></form>');
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     $r->content_type('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;
   
       &Apache::lonlocal::clearreroutetrans();
   # --------------------------------------------- Initialize help topics for this
     foreach ('Adding_Course_Doc','Main_Course_Documents',
              'Adding_External_Resource','Navigate_Content',
              'Adding_Folders','Docs_Overview', 'Load_Map',
              'Supplemental', 'Score_Upload_Form',
              'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') {
         $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_);
     }
       # Composite help files
       $help{'Syllabus'} = &Apache::loncommon::help_open_topic(
       'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
       $help{'Simple Page'} = &Apache::loncommon::help_open_topic(
       'Docs_About_Simple_Page,Docs_Editing_Templated_Pages');
       $help{'Simple Problem'} = &Apache::loncommon::help_open_topic(
       'Option_Response_Simple');
       $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
       'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
       $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(
     'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages');
       $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching');
    
     if ($ENV{'form.verify'}) {
         &verifycontent($r);
     } elsif ($ENV{'form.versions'}) {
         &checkversions($r);
     } elsif ($ENV{'form.dumpcourse'}) {
         &dumpcourse($r);
     } else {
 # is this a standard course?  # is this a standard course?
   
     my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);      my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//);
Line 199  sub handler { Line 833  sub handler {
     my $script='';      my $script='';
     my $allowed;      my $allowed;
     my $events='';      my $events='';
       my $showdoc=0;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
        ['folder','showdoc']);         ['folder','foldername']);
     unless ($ENV{'form.showdoc'}) { # got called from remote      if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
          $showdoc=$1;
       }
       unless ($showdoc) { # got called from remote
        $forcestandard=($ENV{'form.folder'}=~/^default_/);         $forcestandard=($ENV{'form.folder'}=~/^default_/);
        $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);         $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/);
   
 # does this user have privileges to post, etc?  # does this user have privileges to post, etc?
        $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});         $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'});
        if ($allowed) {          if ($allowed) { 
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);           &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');            $script=&Apache::lonratedt::editscript('simple'); 
        }         }
     } else { # got called in sequence from course      } else { # got called in sequence from course
        $allowed=0;         $allowed=0;
        $forcestandard=1;         $script='</script>'.&Apache::lonmenu::registerurl(1,undef).'<script>';
        $forcesupplement=0;         $events='onLoad="'.&Apache::lonmenu::loadevents.
        $script=&Apache::&Apache::lonxml::registerurl(1,undef);             '" onUnload="'.&Apache::lonmenu::unloadevents.'"';
        $events='onLoad="'.&Apache::lonxml::loadevents.  
            '" onUnload="'.&Apache::lonxml::unloadevents.'"';  
     }      }
   
 # get course data  # get course data
Line 235  sub handler { Line 871  sub handler {
   
     $iconpath = $r->dir_config('lonIconsURL') . "/";      $iconpath = $r->dir_config('lonIconsURL') . "/";
   
       my $now=time;
   
 # print screen  # print screen
     $r->print(<<ENDDOCUMENT);      $r->print(<<ENDDOCUMENT);
 <html>  <html>
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>The LearningOnline Network with CAPA</title>
 <script>$script</script>  <script>
 </head>  $script
   </script>
 ENDDOCUMENT  ENDDOCUMENT
 $r->print(&Apache::loncommon::bodytag('Course Documents','',$events));     if ($allowed) {
 # --------------------------------------------------0------ Standard documents      $r->print(<<ENDNEWSCRIPT);
   <script>
   function makenewfolder(targetform,folderseq) {
       var foldername=prompt('Name of New Folder','New Folder');
       if (foldername) {
    targetform.importdetail.value=foldername+"="+folderseq;
           targetform.submit();
       }
   }
   
   function makenewext(targetname) {
       this.document.forms.extimport.useform.value=targetname;
       window.open('/adm/rat/extpickframe.html');
   }
   
   function makeexamupload() {
      var title=prompt('Listed Title for the Uploaded Score');
      if (title) { 
       this.document.forms.newexamupload.importdetail.value=
    title+'=/res/lib/templates/examupload.problem';
       this.document.forms.newexamupload.submit();
      }
   }
   
   function makesmppage() {
      var title=prompt('Listed Title for the Page');
      if (title) { 
       this.document.forms.newsmppg.importdetail.value=
    title+'=/adm/$udom/$uname/$now/smppg';
       this.document.forms.newsmppg.submit();
      }
   }
   
   function makesmpproblem() {
      var title=prompt('Listed Title for the Problem');
      if (title) { 
       this.document.forms.newsmpproblem.importdetail.value=
    title+'=/res/lib/templates/simpleproblem.problem';
       this.document.forms.newsmpproblem.submit();
      }
   }
   
   function makebulboard() {
      var title=prompt('Listed Title for the Bulletin Board');
      if (title) {
       this.document.forms.newbul.importdetail.value=
    title+'=/adm/$udom/$uname/$now/bulletinboard';
       this.document.forms.newbul.submit();
      }
   }
   
   function finishpick() {
       var title=this.document.forms.extimport.title.value;
       var url=this.document.forms.extimport.url.value;
       var form=this.document.forms.extimport.useform.value;
       eval
        ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+
       '";this.document.forms.'+form+'.submit();');
   }
   
   function changename(folder,index,oldtitle) {
       var title=prompt('New Title',oldtitle);
       if (title) {
    this.document.forms.renameform.title.value=title;
    this.document.forms.renameform.cmd.value='rename_'+index;
    this.document.forms.renameform.folder.value=folder;
           this.document.forms.renameform.submit();
       }
   }
   
   function removeres(folder,index,oldtitle) {
       if ((oldtitle=='NO RESOURCE') || (confirm('Remove "'+oldtitle+'"?'))) {
    this.document.forms.renameform.cmd.value='del_'+index;
    this.document.forms.renameform.folder.value=folder;
           this.document.forms.renameform.submit();
       }
   }
   </script>
   
   ENDNEWSCRIPT
     }
   # -------------------------------------------------------------------- Body tag
     $r->print('</head>'.
               &Apache::loncommon::bodytag('Course Documents','',$events,
    '','',$showdoc));
     unless ($showdoc) {
   # -----------------------------------------------------------------------------
          my %lt=&Apache::lonlocal::texthash(
                   'uplm' => 'Upload a new main course document',
                   'upls' => 'Upload a new supplemental course document',
                   'impp' => 'Import a published document',
                   'spec' => 'Special documents',
                   'upld' => 'Upload Document',
                   'srch' => 'Search',
                   'impo' => 'Import',
                   'selm' => 'Select Map',
                   'load' => 'Load Map',
                   'newf' => 'New Folder',
                   'extr' => 'External Resource',
                   'syll' => 'Syllabus',
                   'navc' => 'Navigate Contents',
                   'sipa' => 'Simple Page',
                   'sipr' => 'Simple Problem',
                   'scuf' => 'Score Upload Form',
                   'bull' => 'Bulletin Board',
                   'mypi' => 'My Personal Info'
     );
   # -----------------------------------------------------------------------------
       if ($allowed) {
          my $dumpbut=&dumpbutton();
          my %lt=&Apache::lonlocal::texthash(
    'vc' => 'Verify Content',
    'cv' => 'Check/Set Resource Versions',
     );
          $r->print(<<ENDCOURSEVERIFY);
   <form name="renameform" method="post" action="/adm/coursedocs">
   <input type="hidden" name="title" />
   <input type="hidden" name="cmd" />
   <input type="hidden" name="folder" />
   </form>
   <form name="simpleedit" method="post" action="/adm/coursedocs">
   <input type=hidden name="importdetail" value="">
   <input type="hidden" name="folder" />
   </form>
   <form action="/adm/coursedocs" method="post" name="courseverify">
   <table bgcolor="#AAAAAA" width="100%" cellspacing="4" cellpadding="4">
   <tr><td bgcolor="#DDDDCC">
   <input type="submit" name="verify" value="$lt{'vc'}" />
   </td><td bgcolor="#DDDDCC">
   <input type="submit" name="versions" value="$lt{'cv'}" />
   $dumpbut
   </td></tr></table>
   </form>
   ENDCOURSEVERIFY
          $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
        'Editing the Table of Contents for your Course'));
       }
   # --------------------------------------------------------- Standard documents
       $r->print('<table border=2 cellspacing=4 cellpadding=4>');
     if (($standard) && ($allowed) && (!$forcesupplement)) {      if (($standard) && ($allowed) && (!$forcesupplement)) {
        $r->print('<h2>Main Course Documents</h2>');         $r->print('<tr><td bgcolor="#BBBBBB"><h2>'.&mt('Main Course Documents').
     ($allowed?' '.$help{'Main_Course_Documents'}:'').'</h2>');
        my $folder=$ENV{'form.folder'};         my $folder=$ENV{'form.folder'};
        unless ($folder=~/^default/) { $folder='default'; }         unless ($folder=~/^default/) { $folder='default'; }
          my $postexec='';
          if ($folder eq 'default') {
      $r->print('<script>this.window.name="loncapaclient";</script>');
          } else {
              $postexec='self.close();';
          }
          $hadchanges=0;
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
          if ($hadchanges) {
      &changewarning($r,$postexec);
          }
          my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                        '.sequence';
        $r->print(<<ENDFORM);         $r->print(<<ENDFORM);
 <table><tr>  <table cellspacing=4 cellpadding=4><tr>
 <th>Upload a new main course document</th>  <th bgcolor="#DDDDDD">$lt{'uplm'}</th>
 <th>Import a published document</th>  <th bgcolor="#DDDDDD">$lt{'impp'}</th>
 <th>Special documents</th>  <th bgcolor="#DDDDDD">$lt{'spec'}</th>
 </tr>  </tr>
 <tr><td>  <tr><td bgcolor="#DDDDDD">
 File:<br />  File:<br />
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">  <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="50">  <input type="file" name="uploaddoc" size="40">
 <br />  <br />
 Title:<br />   Title:<br />
 <input type="text" size="50" name="comment">  <input type="text" size="50" name="comment">
 <input type="hidden" name="folder" value="$folder">  <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type="hidden" name="cmd" value="upload_default">  <input type="hidden" name="cmd" value="upload_default">
 <input type="submit" value="Upload Document">  <input type="submit" value="$lt{'upld'}">
   <nobr>
    $help{'Uploading_From_Harddrive'}
   </nobr>
 </form>  </form>
 </td>  </td>
 <td>  <td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" name="simpleedit">  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
 <input type=hidden name="importdetail" value="">  <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=button onClick=  <input type=button onClick=
 "javascript:groupsearch()" value="Group Search">  "javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="$lt{'srch'}">
   <nobr>
 <input type=button onClick=  <input type=button onClick=
 "javascript:groupimport();" value="Group Import">  "javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="$lt{'impo'}">
   $help{'Importing_LON-CAPA_Resource'}
   </nobr>
   <p>
   <hr />
   <input type="text" size="20" name="importmap"><br />
   <nobr><input type=button 
   onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
   value="$lt{'selm'}"> <input type="submit" name="loadmap" value="$lt{'load'}">
   $help{'Load_Map'}</nobr>
   </p>
 </form>  </form>
 </td><td>  </td><td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" name="newfolder">  <form action="/adm/coursedocs" method="post" name="newfolder">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">  <input type=hidden name="importdetail" value="">
 <input name="newfolder" type="button" onClick="javascript:newfolder();"  <nobr>
 value="New Folder" />  <input name="newfolder" type="button"
   onClick="javascript:makenewfolder(this.form,'$folderseq');"
   value="$lt{'newf'}" />$help{'Adding_Folders'}
   </nobr>
 </form>  </form>
 <form action="/adm/coursedocs" method="post" name="newext">  <form action="/adm/coursedocs" method="post" name="newext">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail" value="">  <input type=hidden name="importdetail" value="">
 <input name="newext" type="button" onClick="javascript:newext();"  <nobr>
 value="External Resource" />  <input name="newext" type="button" onClick="javascript:makenewext('newext');"
   value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
   </nobr>
 </form>  </form>
 <form action="/adm/coursedocs" method="post" name="newsyl">  <form action="/adm/coursedocs" method="post" name="newsyl">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail"   <input type=hidden name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus">  value="Syllabus=/public/$coursedom/$coursenum/syllabus">
 <input name="newsyl" type="submit" value="Syllabus" />  <nobr>
   <input name="newsyl" type="submit" value="$lt{'syll'}" /> 
    $help{'Syllabus'}
   </nobr>
 </form>  </form>
 <form action="/adm/coursedocs" method="post" name="newsyl">  <form action="/adm/coursedocs" method="post" name="newnav">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail"   <input type=hidden name="importdetail" 
 value="Navigate Content=/adm/navmaps">  value="Navigate Content=/adm/navmaps">
 <input name="newsyl" type="submit" value="Navigate Content" />  <nobr>
   <input name="newnav" type="submit" value="$lt{'navc'}" />
   $help{'Navigate_Content'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="newsmppg">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newsmppg" type="button" value="$lt{'sipa'}"
   onClick="javascript:makesmppage();" /> $help{'Simple Page'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="newsmpproblem">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newsmpproblem" type="button" value="$lt{'sipr'}"
   onClick="javascript:makesmpproblem();" />$help{'Simple Problem'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="newexamupload">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newexamupload" type="button" value="$lt{'scuf'}"
   onClick="javascript:makeexamupload();" />
   $help{'Score_Upload_Form'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="newbul">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newbulletin" type="button" value="$lt{'bull'}"
   onClick="javascript:makebulboard();" />
   $help{'Bulletin Board'}
   </nobr>
 </form>  </form>
 <form action="/adm/coursedocs" method="post" name="newaboutme">  <form action="/adm/coursedocs" method="post" name="newaboutme">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type=hidden name="importdetail"   <input type=hidden name="importdetail" 
 value="$plainname=/adm/$udom/$uname/aboutme">  value="$plainname=/adm/$udom/$uname/aboutme">
 <input name="newaboutme" type="submit" onClick="javascript:newaboutme();"  <nobr>
 value="My Personal Info" />  <input name="newaboutme" type="submit" value="$lt{'mypi'}" />
   $help{'My Personal Info'}
   </nobr>
 </form>  </form>
 </td></tr>  </td></tr>
 </table>  </table>
 ENDFORM  ENDFORM
        $r->print('<hr />');         $r->print('</td></tr>');
     }      }
 # ----------------------------------------------------- Supplemental documents  # ----------------------------------------------------- Supplemental documents
     if (!$forcestandard) {      if (!$forcestandard) {
        $r->print('<h2>Supplemental Course Documents</h2>');         $r->print(
     '<tr><td bgcolor="#BBBBBB"><h2>'.&mt('Supplemental Course Documents').
     ($allowed?' '.$help{'Supplemental'}:'').'</h2>');
        my $folder=$ENV{'form.folder'};         my $folder=$ENV{'form.folder'};
        unless ($folder=~/supplemental/) { $folder='supplemental'; }         unless ($folder=~/supplemental/) { $folder='supplemental'; }
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($allowed) {         if ($allowed) {
          my $folderseq=
                     '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.
                        '.sequence';
   
           $r->print(<<ENDSUPFORM);            $r->print(<<ENDSUPFORM);
 <h3>Post a new supplemental course document</h3>  <table cellspacing=4 cellpadding=4><tr>
   <th bgcolor="#DDDDDD">$lt{'upls'}</th>
   <th bgcolor="#DDDDDD">$lt{'impp'}</th>
   <th bgcolor="#DDDDDD">$lt{'spec'}</th>
   </tr>
   <tr><td bgcolor="#DDDDDD">
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">  <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="50">  <input type="file" name="uploaddoc" size="40">
 <br />Comment:<br />  <br />Comment:<br />
 <textarea cols=50 rows=4 name='comment'>  <textarea cols=50 rows=4 name='comment'>
 </textarea>  </textarea>
 <input type="hidden" name="folder" value="$folder">  <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
 <input type="hidden" name="cmd" value="upload_supplemental">  <input type="hidden" name="cmd" value="upload_supplemental">
 <input type="submit" value="Upload Document">  <nobr>
   <input type="submit" value="$lt{'upld'}">
    $help{'Uploading_From_Harddrive'}
   </nobr>
 </form>  </form>
   </td>
   <td bgcolor="#DDDDDD">
   <form action="/adm/coursedocs" method="post" name="simpleeditsupplement">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <input type=button onClick=
   "javascript:document.forms.simpleedit.folder.value='$folder';groupsearch()" value="$lt{'srch'}">
   <input type=button onClick=
   "javascript:document.forms.simpleedit.folder.value='$folder';groupimport();" value="$lt{'impo'}">$help{'Importing_LON-CAPA_Resource'}
   <p>
   <hr />
   <input type="text" size="20" name="importmap">
   <input type=button 
   onClick="javascript:openbrowser('simpleeditsupplement','importmap','sequence,page','')"
   value="$lt{'selm'}"><input type="submit" name="loadmap" value="$lt{'load'}">$help{'Load_Map'}
   </p>
   </form>
   </td><td bgcolor="#DDDDDD">
   <form action="/adm/coursedocs" method="post" name="supnewfolder">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newfolder" type="button"
   onClick="javascript:makenewfolder(this.form,'$folderseq');"
   value="$lt{'newf'}" /> $help{'Adding_Folders'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="supnewext">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" value="">
   <nobr>
   <input name="newext" type="button" 
   onClick="javascript:makenewext('supnewext');"
   value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="supnewsyl">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" 
   value="Syllabus=/public/$coursedom/$coursenum/syllabus">
   <nobr>
   <input name="newsyl" type="submit" value="$lt{'syll'}" />
   $help{'Syllabus'}
   </nobr>
   </form>
   <form action="/adm/coursedocs" method="post" name="subnewaboutme">
   <input type="hidden" name="folder" value="$folder">
   <input type="hidden" name="foldername" value="$ENV{'form.foldername'}">
   <input type=hidden name="importdetail" 
   value="$plainname=/adm/$udom/$uname/aboutme">
   <nobr>
   <input name="newaboutme" type="submit" value="$lt{'mypi'}" />
   $help{'My Personal Info'}
   </nobr>
   </form>
   </td></tr>
   </table></td></tr>
 ENDSUPFORM  ENDSUPFORM
        }         }
     }      }
       if ($allowed) {
     $r->print('</body></html>');   $r->print('<form name="extimport"><input type="hidden" name="title"><input type="hidden" name="url"><input type="hidden" name="useform"></form>');
     return OK;      }
       $r->print('</table>');
     } else {
   # -------------------------------------------------------- This is showdoc mode
         $r->print("<h1>".&mt('Uploaded Document').'</h1><p>'.
   &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>".
            &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');
     }
    }
    $r->print(&Apache::lonlocal::endreroutetrans().'</body></html>');
    return OK;
 }   } 
   
 1;  1;

Removed from v.1.15  
changed lines
  Added in v.1.94


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.