Diff for /loncom/interface/londocs.pm between versions 1.81 and 1.104

version 1.81, 2003/09/17 23:40:25 version 1.104, 2004/02/11 00:10:01
Line 68  sub mapread { Line 68  sub mapread {
   
 sub storemap {  sub storemap {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     $hadchanges=1;      my ($outtext,$errtext)=
     return  
       &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
                                 $map,1);                                  $map,1);
       if ($errtext) { return ($errtext,2); }
       
       $hadchanges=1;
       return ($errtext,0);
 }  }
   
 # ----------------------------------------- Return hash with valid author names  # ----------------------------------------- Return hash with valid author names
Line 138  sub dumpcourse { Line 141  sub dumpcourse {
 # Do the dumping  # Do the dumping
  unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; }   unless ($outhash{'home_'.$ENV{'form.authorspace'}}) { return ''; }
  my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'});   my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'});
  $r->print('<h3>Copying Files</h3>');   $r->print('<h3>'.&mt('Copying Files').'</h3>');
  my $title=$ENV{'form.authorfolder'};   my $title=$ENV{'form.authorfolder'};
  $title=~s/[^\w\/]+/\_/g;   $title=~s/[^\w\/]+/\_/g;
  my %replacehash=();   my %replacehash=();
Line 250  sub group_import { Line 253  sub group_import {
  join ':', ($name, $url, $ext, 'normal', 'res');   join ':', ($name, $url, $ext, 'normal', 'res');
  }   }
     }      }
     &storemap($coursenum, $coursedom, $folder.'.sequence');      return &storemap($coursenum, $coursedom, $folder.'.sequence');
 }  }
   
 sub editor {  sub editor {
Line 295  sub editor { Line 298  sub editor {
                   $comment.':'.$url.':'.$ext.':normal:res';                    $comment.':'.$url.':'.$ext.':normal:res';
               $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=                $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=
                                                               $newidx;                                                                       $newidx;       
        &storemap($coursenum,$coursedom,$folder.'.sequence');  
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence');
         if ($fatal) {
     $r->print('<p><font color="red">'.$errtext.'</font></p>');
     return;
         }
      }       }
             }              }
     if ($ENV{'form.cmd'}) {      if ($ENV{'form.cmd'}) {
Line 335  sub editor { Line 343  sub editor {
                                           
                 }                  }
 # Store the changed version  # Store the changed version
  &storemap($coursenum,$coursedom,$folder.'.sequence');   ($errtext,$fatal)=&storemap($coursenum,$coursedom,
       $folder.'.sequence');
    if ($fatal) {
       $r->print('<p><font color="red">'.$errtext.'</font></p>');
       return;
    }
             }              }
 # Group import/search  # Group import/search
     if ($ENV{'form.importdetail'}) {      if ($ENV{'form.importdetail'}) {
Line 349  sub editor { Line 362  sub editor {
     }      }
  }   }
 # Store the changed version  # Store the changed version
  group_import($coursenum, $coursedom, $folder, @imports);   ($errtext,$fatal)=group_import($coursenum, $coursedom, $folder,
          @imports);
    if ($fatal) {
       $r->print('<p><font color="red">'.$errtext.'</font></p>');
       return;
    }
             }              }
 # Loading a complete map  # Loading a complete map
    if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) {     if (($ENV{'form.importmap'}) && ($ENV{'form.loadmap'})) {
               foreach         foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {
 (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {  
                    my $idx=$#Apache::lonratedt::resources;                     my $idx=$#Apache::lonratedt::resources;
                    $idx++;                     $idx++;
                    $Apache::lonratedt::resources[$idx]=$_;                     $Apache::lonratedt::resources[$idx]=$_;
                    $Apache::lonratedt::order                     $Apache::lonratedt::order
                             [$#Apache::lonratedt::order+1]=$idx;         [$#Apache::lonratedt::order+1]=$idx;
                 }         }
   
 # Store the changed version  # Store the changed version
  &storemap($coursenum,$coursedom,$folder.'.sequence');         ($errtext,$fatal)=&storemap($coursenum,$coursedom,
      $folder.'.sequence');
          if ($fatal) {
      $r->print('<p><font color="red">'.$errtext.'</font></p>');
      return;
          }
            }             }
        }         }
 # ---------------------------------------------------------------- End commands  # ---------------------------------------------------------------- End commands
Line 395  sub entryline { Line 417  sub entryline {
  ) {    ) { 
             $foldertitle=&Apache::lontexconvert::msgtexconverted($4);              $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
             $renametitle=$4;              $renametitle=$4;
             $title='<i>'.localtime($1).'</i> '.              $title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '.
                 &Apache::loncommon::plainname($2,$3).': <br>'.                  &Apache::loncommon::plainname($2,$3).': <br />'.
  $foldertitle;   $foldertitle;
  }   }
     $renametitle=~s/\&quot\;/\\\"/g;      $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',
    'dw' => 'Move Down',
    'rm' => 'Remove',
    'rn' => 'Rename');
         $line.=(<<END);
 <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?folder=$folder&cmd=up_$index'>  <a href='/adm/coursedocs?folder=$folder&cmd=up_$index'>
 <img src="${iconpath}move_up.gif" alt='UP' border='0' /></a></td></tr>  <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?folder=$folder&cmd=down_$index'>  <a href='/adm/coursedocs?folder=$folder&cmd=down_$index'>
 <img src="${iconpath}move_down.gif" alt='DOWN' border='0' /></a></td></tr>  <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>
 </table></td><td bgcolor="#DDDDDD">  </table></td><td bgcolor="#DDDDDD">
 <a href='javascript:removeres("$folder","$index","$renametitle");'>  <a href='javascript:removeres("$folder","$index","$renametitle");'>
 <font size="-2" color="#990000">Remove</font></a>  <font size="-2" color="#990000">$lt{'rm'}</font></a>
 <a href='javascript:changename("$folder","$index","$renametitle");'>  <a href='javascript:changename("$folder","$index","$renametitle");'>
 <font size="-2" color="#009900">Rename</font></a></td>  <font size="-2" color="#009900">$lt{'rn'}</font></a></td>
 END  END
     }      }
 # Figure out what kind of a resource this is  # Figure out what kind of a resource this is
     my ($extension)=($url=~/\.(\w+)$/);      my ($extension)=($url=~/\.(\w+)$/);
     my $uploaded=($url=~/^\/*uploaded\//);      my $uploaded=($url=~/^\/*uploaded\//);
     my $icon='unknown';      my $icon=&Apache::loncommon::icon($url);
     if (-e "/home/httpd/html/adm/lonIcons/$extension.gif") {  
  $icon=$extension;  
     }  
     my $isfolder=0;      my $isfolder=0;
     if ($uploaded) {      if ($uploaded) {
        if ($extension eq 'sequence') {         if ($extension eq 'sequence') {
   $icon='folder_closed';    $icon=$iconpath.'/folder_closed.gif';
           $url=~/\/(\w+)\.sequence/;            $url=~/\/(\w+)\.sequence/;
           $url='/adm/coursedocs?folder='.$1;            $url='/adm/coursedocs?folder='.$1;
           $isfolder=1;            $isfolder=1;
Line 450  END Line 473  END
     if ($isfolder) { $url.='&foldername='.      if ($isfolder) { $url.='&foldername='.
        &Apache::lonnet::escape($foldertitle); }         &Apache::lonnet::escape($foldertitle); }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'" target="cat_'.$folder.      $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'" target="cat_'.$folder.
 '"><img src="/adm/lonIcons/'.   '"><img src="'.$icon.'" border="0"></a></td>'.
         $icon.'.gif" border="0"></a></td>'.  
         "<td bgcolor='#FFFFBB'><a href='$url' target='cat_$folder'>$title</a></td></tr>";          "<td bgcolor='#FFFFBB'><a href='$url' target='cat_$folder'>$title</a></td></tr>";
     return $line;      return $line;
 }  }
Line 490  sub checkonthis { Line 512  sub checkonthis {
   my $result=&Apache::lonnet::repcopy(    my $result=&Apache::lonnet::repcopy(
                               &Apache::lonnet::filelocation('',$url));                                &Apache::lonnet::filelocation('',$url));
           if ($result==OK) {            if ($result==OK) {
              $r->print('<font color="green">ok</font>');               $r->print('<font color="green">'.&mt('ok').'</font>');
              $r->rflush();               $r->rflush();
              &Apache::lonnet::countacc($url);               &Apache::lonnet::countacc($url);
              $url=~/\.(\w+)$/;               $url=~/\.(\w+)$/;
Line 500  sub checkonthis { Line 522  sub checkonthis {
                  for (my $i=0;$i<=$level*5;$i++) {                   for (my $i=0;$i<=$level*5;$i++) {
                      $r->print('&nbsp;');                       $r->print('&nbsp;');
                  }                   }
                  $r->print('- Rendering: ');                   $r->print('- '.&mt('Rendering').': ');
                  my $oldpath=$ENV{'request.filename'};                   my $oldpath=$ENV{'request.filename'};
                  $ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url);                   $ENV{'request.filename'}=&Apache::lonnet::filelocation('',$url);
                  &Apache::lonxml::xmlparse($r,'web',                   &Apache::lonxml::xmlparse($r,'web',
                    &Apache::lonnet::getfile(                     &Apache::lonnet::getfile(
                     &Apache::lonnet::filelocation('',$url)));                      &Apache::lonnet::filelocation('',$url)));
    undef($Apache::lonhomework::parsing_a_problem);
  $ENV{'request.filename'}=$oldpath;   $ENV{'request.filename'}=$oldpath;
                  if (($Apache::lonxml::errorcount) ||                   if (($Apache::lonxml::errorcount) ||
                      ($Apache::lonxml::warningcount)) {                       ($Apache::lonxml::warningcount)) {
      if ($Apache::lonxml::errorcount) {       if ($Apache::lonxml::errorcount) {
                         $r->print('<font color="red"><b>'.                          $r->print('<img src="/adm/lonMisc/bomb.gif" /><font color="red"><b>'.
   $Apache::lonxml::errorcount.' error(s)</b></font> ');    $Apache::lonxml::errorcount.' '.
     &mt('error(s)').'</b></font> ');
                      }                       }
      if ($Apache::lonxml::warningcount) {       if ($Apache::lonxml::warningcount) {
                         $r->print('<font color="blue">'.                          $r->print('<font color="blue">'.
   $Apache::lonxml::warningcount.' warning(s)</font>');    $Apache::lonxml::warningcount.' '.
     &mt('warning(s)').'</font>');
                      }                       }
                  } else {                   } else {
                      $r->print('<font color="green">ok</font>');                       $r->print('<font color="green">'.&mt('ok').'</font>');
                  }                   }
                  $r->rflush();                   $r->rflush();
              }               }
Line 530  sub checkonthis { Line 555  sub checkonthis {
                  }                   }
              }               }
           } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {            } elsif ($result==HTTP_SERVICE_UNAVAILABLE) {
              $r->print('<font color="red"><b>connection down</b></font>');               $r->print('<font color="red"><b>'.&mt('connection down').'</b></font>');
           } elsif ($result==HTTP_NOT_FOUND) {            } elsif ($result==HTTP_NOT_FOUND) {
              $r->print('<font color="red"><b>not found</b></font>');        unless ($url=~/\$/) {
     $r->print('<font color="red"><b>'.&mt('not found').'</b></font>');
         } else {
     $r->print('<font color="yellow"><b>'.&mt('unable to verify variable URL').'</b></font>');
         }
           } else {            } else {
              $r->print('<font color="red"><b>access denied</b></font>');               $r->print('<font color="red"><b>'.&mt('access denied').'</b></font>');
           }            }
       }        }
    }     }
Line 568  sub verifycontent { Line 597  sub verifycontent {
   
 sub checkversions {  sub checkversions {
     my $r=shift;      my $r=shift;
    $r->print('<html><head><title>Check Versions</title></head>'.      $r->print('<html><head><title>Check Versions</title></head>'.
               &Apache::loncommon::bodytag('Check Course Document Versions'));                &Apache::loncommon::bodytag('Check Course Document Versions'));
    $hashtied=0;      my $header='';
    &tiehash();      my $startsel='';
    my %changes=&Apache::lonnet::dump      my $monthsel='';
     ('versionupdate',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},      my $weeksel='';
                      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});      my $daysel='';
    my $firstkey=(keys %changes)[0];      my $allsel='';
    unless ($firstkey=~/^error\:/) {      my %changes=();
        unless ($ENV{'form.timerange'}) {      my $starttime=0;
    $ENV{'form.timerange'}=604800;      my $haschanged=0;
        }      my %setversions=&Apache::lonnet::dump('resourceversions',
        my $seltext='during the last '.$ENV{'form.timerange'}.' seconds';    $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
        my $startsel='';    $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
        my $monthsel='';  
        my $weeksel='';  
        my $daysel='';  
        if ($ENV{'form.timerange'}==-1) {  
    $seltext='since start of course';  
            $startsel='selected';  
            $ENV{'form.timerange'}=time;  
        }  
        my $starttime=time-$ENV{'form.timerange'};  
        if ($ENV{'form.timerange'}==2592000) {  
            $seltext='during the last month ('.localtime($starttime).')';  
            $monthsel='selected';  
        } elsif ($ENV{'form.timerange'}==604800) {  
            $seltext='during the last week ('.localtime($starttime).')';  
            $weeksel='selected';  
        } elsif ($ENV{'form.timerange'}==86400) {  
            $seltext='since yesterday ('.localtime($starttime).')';  
            $daysel='selected';  
        }  
   
        $r->print(<<ENDHEADERS);      $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">  <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">  <select name="timerange">
 <option value="-1" $startsel>Since Start of Course</option>  <option value='all' $allsel>$lt{'al'}</option>
 <option value="2592000" $monthsel>Last Month</option>  <option value="-1" $startsel>$lt{'st'}</option>
 <option value="604800" $weeksel>Last Week</option>  <option value="2592000" $monthsel>$lt{'lm'}</option>
 <option value="86400" $daysel>Since Yesterday</option>  <option value="604800" $weeksel>$lt{'lw'}</option>
   <option value="86400" $daysel>$lt{'sy'}</option>
 </select>  </select>
 <input type="submit" name="versions" value="Display" />  <input type="submit" name="display" value="$lt{'sd'}" />
 </form>  <h3>$header</h3>
 <h3>Content changed $seltext</h3>  <input type="submit" name="setversions" value="$lt{'sv'}" />
 <table border="2">  <table border="0">
 <tr>  
 <th>File</th><th>Modification Date</th>  
 <th>Version</th><th>Differences</th></tr>  
 ENDHEADERS  ENDHEADERS
        foreach (keys %changes) {      foreach (sort keys %changes) {
   if ($changes{$_}>$starttime) {   if ($changes{$_}>$starttime) {
      my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);      my ($root,$extension)=($_=~/^(.*)\.(\w+)$/);
              my $currentversion=&Apache::lonnet::getversion($_);      my $currentversion=&Apache::lonnet::getversion($_);
              my $linkurl=&Apache::lonnet::clutter($_);      if ($currentversion<0) {
              $r->print(   $currentversion=&mt('Could not be determined.');
                  '<tr><td><a href="'.$linkurl.'" target="cat">'.$linkurl.      }
                  '</a></td><td>'.      my $linkurl=&Apache::lonnet::clutter($_);
                  localtime($changes{$_}).'</td><td>'.$currentversion.'</td>'.      $r->print(
        '<td>');        '<tr><td colspan="5"><br /><br /><font size="+1"><b>'.
              my $lastold=1;        &Apache::lonnet::gettitle($linkurl).
              for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {                        '</b></font></td></tr>'.
                  my $url=$root.'.'.$prevvers.'.'.$extension;                        '<tr><td>&nbsp;&nbsp;&nbsp;</td>'.
                  if (&Apache::lonnet::metadata($url,'lastrevisiondate')<                        '<td colspan="4">'.
                                                              $starttime) {                        '<a href="'.$linkurl.'" target="cat">'.$linkurl.
                      $lastold=$prevvers;        '</a></td></tr>'.
                  }                        '<tr><td></td>'.
              }                        '<td title="'.$lt{'md'}.'">'.
         &Apache::lonlocal::locallocaltime(
                              &Apache::lonnet::metadata($root.'.'.$extension,
                                                        'lastrevisiondate')
                                                           ).
                         '</td>'.
                         '<td title="'.$lt{'mr'}.'"><nobr>Most Recent: '.
                         '<font size="+1">'.$currentversion.'</font>'.
                         '</nobr></td>'.
                         '<td title="'.$lt{'ve'}.'"><nobr>In Course: '.
                         '<font size="+1">');
   # Used in course
       my $usedversion=$hash{'version_'.$linkurl};
       if (($usedversion) && ($usedversion ne 'mostrecent')) {
    $r->print($usedversion);
       } else {
    $r->print($currentversion);
       }
       $r->print('</font></nobr></td><td title="'.$lt{'vu'}.'">'.
                         '<nobr>Use: ');
   # Set version
       $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
         'set_version_'.$linkurl,
         ('' => '',
          'mostrecent' => 'most recent',
          map {$_,$_} (1..$currentversion))));
       $r->print('</nobr></td></tr><tr><td></td>');
       my $lastold=1;
       for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
    my $url=$root.'.'.$prevvers.'.'.$extension;
    if (&Apache::lonnet::metadata($url,'lastrevisiondate')<
       $starttime) {
       $lastold=$prevvers;
    }
       }
               # 
               # Code to figure out how many version entries should go in
               # each of the four columns
               my $entries_per_col = 0;
               my $num_entries = ($currentversion-$lastold);
               if ($num_entries % 4 == 0) {
                   $entries_per_col = $num_entries/4;
               } else {
                   $entries_per_col = $num_entries/4 + 1;
               }
               my $entries_count = 0;
               $r->print('<td valign="top"><font size="-2">'); 
               my $cols_output = 1;
             for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {              for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) {
                  my $url=$root.'.'.$prevvers.'.'.$extension;   my $url=$root.'.'.$prevvers.'.'.$extension;
                  $r->print('<a href="'.&Apache::lonnet::clutter($url).   $r->print('<nobr><a href="'.&Apache::lonnet::clutter($url).
                    '">Version '.$prevvers.' ('.    '">'.&mt('Version').' '.$prevvers.'</a> ('.
                  localtime(&Apache::lonnet::metadata($url,'lastrevisiondate')).    &Apache::lonlocal::locallocaltime(
                  ')</a>');                                  &Apache::lonnet::metadata($url,
                  if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {                                                            'lastrevisiondate')
                                                               ).
     ')');
    if (&Apache::loncommon::fileembstyle($extension) eq 'ssi') {
                     $r->print(' <a href="/adm/diff?filename='.                      $r->print(' <a href="/adm/diff?filename='.
                             &Apache::lonnet::clutter($root.'.'.$extension).        &Apache::lonnet::clutter($root.'.'.$extension).
                             '&versionone='.$prevvers.        '&versionone='.$prevvers.
      '">Diffs</a>');        '">'.&mt('Diffs').'</a>');
                  }   }
                  $r->print('<br />');   $r->print('</nobr><br />');
              }                  if (++$entries_count % $entries_per_col == 0) {
              $r->print('</td></tr>');                      $r->print('</font></td>');
           }                      if ($cols_output != 4) {
        }                          $r->print('<td valign="top"><font size="-2">');
        $r->print('</table>');                          $cols_output++;
        $r->print('<h1>'.&mt('Done').'.</h1>');                      }
    } else {                  }
        $r->print('<p>'.&mt('No content modifications yet.').'</p>');      }
    }              while($cols_output++ < 4) {
    &untiehash();                  $r->print('</font></td><td><font>')
               }
       $r->print('</font></td></tr>'."\n");
    }
       }
       $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  # --------------------------------------------- Initialize help topics for this
   foreach ('Adding_Course_Doc','Main_Course_Documents',    foreach ('Adding_Course_Doc','Main_Course_Documents',
            'Adding_External_Resource','Navigate_Content',             'Adding_External_Resource','Navigate_Content',
Line 682  sub handler { Line 867  sub handler {
     'Docs_About_Syllabus,Docs_Editing_Templated_Pages');      'Docs_About_Syllabus,Docs_Editing_Templated_Pages');
     $help{'Simple Page'} = &Apache::loncommon::help_open_topic(      $help{'Simple Page'} = &Apache::loncommon::help_open_topic(
     'Docs_About_Simple_Page,Docs_Editing_Templated_Pages');      '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(      $help{'Bulletin Board'} = &Apache::loncommon::help_open_topic(
     'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');      'Docs_About_Bulletin_Board,Docs_Editing_Templated_Pages');
     $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(      $help{'My Personal Info'} = &Apache::loncommon::help_open_topic(
Line 804  function makebulboard() { Line 991  function makebulboard() {
    }     }
 }  }
   
   function makeabout() {
      var user=prompt("Enter user\@domain for User's 'About Me' Page");
      if (user) {
          var comp=new Array();
          comp=user.split('\@');
          if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {
      if ((comp[0]) && (comp[1])) {
          this.document.forms.newaboutsomeone.importdetail.value=
      'About '+user+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';
          this.document.forms.newaboutsomeone.submit();
      }
          }
      }
   }
   
 function finishpick() {  function finishpick() {
     var title=this.document.forms.extimport.title.value;      var title=this.document.forms.extimport.title.value;
     var url=this.document.forms.extimport.url.value;      var url=this.document.forms.extimport.url.value;
Line 837  ENDNEWSCRIPT Line 1039  ENDNEWSCRIPT
 # -------------------------------------------------------------------- Body tag  # -------------------------------------------------------------------- Body tag
   $r->print('</head>'.    $r->print('</head>'.
             &Apache::loncommon::bodytag('Course Documents','',$events,              &Apache::loncommon::bodytag('Course Documents','',$events,
  '','',$showdoc));   '','',$showdoc).
       &Apache::loncommon::help_open_faq(273).
       &Apache::loncommon::help_open_bug('RAT'));
   unless ($showdoc) {    unless ($showdoc) {
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
Line 858  ENDNEWSCRIPT Line 1062  ENDNEWSCRIPT
                 'sipr' => 'Simple Problem',                  'sipr' => 'Simple Problem',
                 'scuf' => 'Score Upload Form',                  'scuf' => 'Score Upload Form',
                 'bull' => 'Bulletin Board',                  'bull' => 'Bulletin Board',
                 'mypi' => 'My Personal Info'                  'mypi' => 'My Personal Info',
    'abou' => 'About User',
                   'file' =>  'File',
                   'title' => 'Title',
                   'comment' => 'Comment' 
   );    );
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
     if ($allowed) {      if ($allowed) {
        my $dumpbut=&dumpbutton();         my $dumpbut=&dumpbutton();
          my %lt=&Apache::lonlocal::texthash(
    'vc' => 'Verify Content',
    'cv' => 'Check/Set Resource Versions',
     );
        $r->print(<<ENDCOURSEVERIFY);         $r->print(<<ENDCOURSEVERIFY);
 <form name="renameform" method="post" action="/adm/coursedocs">  <form name="renameform" method="post" action="/adm/coursedocs">
 <input type="hidden" name="title" />  <input type="hidden" name="title" />
Line 876  ENDNEWSCRIPT Line 1088  ENDNEWSCRIPT
 <form action="/adm/coursedocs" method="post" name="courseverify">  <form action="/adm/coursedocs" method="post" name="courseverify">
 <table bgcolor="#AAAAAA" width="100%" cellspacing="4" cellpadding="4">  <table bgcolor="#AAAAAA" width="100%" cellspacing="4" cellpadding="4">
 <tr><td bgcolor="#DDDDCC">  <tr><td bgcolor="#DDDDCC">
 <input type="submit" name="verify" value="Verify Content" />  <input type="submit" name="verify" value="$lt{'vc'}" />
 </td><td bgcolor="#DDDDCC">  </td><td bgcolor="#DDDDCC">
 <input type="submit" name="versions" value="Check Resource Versions" />  <input type="submit" name="versions" value="$lt{'cv'}" />
 $dumpbut  $dumpbut
 </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',
      'Editing the Table of Contents for your Course'));       &mt('Editing the Table of Contents for your Course')));
     }      }
 # --------------------------------------------------------- Standard documents  # --------------------------------------------------------- Standard documents
     $r->print('<table border=2 cellspacing=4 cellpadding=4>');      $r->print('<table border=2 cellspacing=4 cellpadding=4>');
Line 902  ENDCOURSEVERIFY Line 1114  ENDCOURSEVERIFY
        $hadchanges=0;         $hadchanges=0;
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         &editor($r,$coursenum,$coursedom,$folder,$allowed);
        if ($hadchanges) {         if ($hadchanges) {
    $r->print(     &changewarning($r,$postexec);
 '<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>');  
        }         }
        my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.         my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time.
                      '.sequence';                       '.sequence';
Line 921  $help{'Caching'}.'</font></h3></form>'); Line 1125  $help{'Caching'}.'</font></h3></form>');
 <th bgcolor="#DDDDDD">$lt{'spec'}</th>  <th bgcolor="#DDDDDD">$lt{'spec'}</th>
 </tr>  </tr>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 File:<br />  $lt{'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="40">  <input type="file" name="uploaddoc" size="40">
 <br />  <br />
 Title:<br />  $lt{'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="foldername" value="$ENV{'form.foldername'}">
Line 1044  value="$plainname=/adm/$udom/$uname/abou Line 1248  value="$plainname=/adm/$udom/$uname/abou
 $help{'My Personal Info'}  $help{'My Personal Info'}
 </nobr>  </nobr>
 </form>  </form>
   <form action="/adm/coursedocs" method="post" name="newaboutsomeone">
   <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="newaboutsomeone" type="button" value="$lt{'abou'}" 
   onClick="javascript:makeabout();" />
   </nobr>
   </form>
 </td></tr>  </td></tr>
 </table>  </table>
 ENDFORM  ENDFORM
Line 1071  ENDFORM Line 1284  ENDFORM
 <tr><td bgcolor="#DDDDDD">  <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="40">  <input type="file" name="uploaddoc" size="40">
 <br />Comment:<br />  <br />$lt{'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">
Line 1097  ENDFORM Line 1310  ENDFORM
 <input type="text" size="20" name="importmap">  <input type="text" size="20" name="importmap">
 <input type=button   <input type=button 
 onClick="javascript:openbrowser('simpleeditsupplement','importmap','sequence,page','')"  onClick="javascript:openbrowser('simpleeditsupplement','importmap','sequence,page','')"
 value="Select Map"><input type="submit" name="loadmap" value="Load Map">  value="$lt{'selm'}"><input type="submit" name="loadmap" value="$lt{'load'}">$help{'Load_Map'}
 </p>  </p>
 </form>  </form>
 </td><td bgcolor="#DDDDDD">  </td><td bgcolor="#DDDDDD">
Line 1157  ENDSUPFORM Line 1370  ENDSUPFORM
          &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');           &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');
   }    }
  }   }
  $r->print(&Apache::lonlocal::endreroutetrans().'</body></html>');   $r->print('</body></html>');
  return OK;   return OK;
 }   } 
   

Removed from v.1.81  
changed lines
  Added in v.1.104


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