Diff for /rat/lonratedt.pm between versions 1.83 and 1.84

version 1.83, 2006/09/12 22:13:12 version 1.84, 2006/11/02 21:03:28
Line 171  use Apache::lonratsrv; Line 171  use Apache::lonratsrv;
 use Apache::lonsequence;  use Apache::lonsequence;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
   use LONCAPA::map();
 use File::Copy;  use File::Copy;
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
     
   
 use vars qw(@order @resources @resparms @zombies);  
   
   
 # Mapread read maps into global arrays @links and @resources, determines status  
 # sets @order - pointer to resources in right order  
 # sets @resources - array with the resources with correct idx  
 #  
 sub mapread {  
     my $fn=shift;  
   
     my @links;  
     undef @links;  
     undef @resources;  
     undef @order;  
     undef @resparms;  
     undef @zombies;  
   
     @resources=('');  
     @order=();  
     @resparms=();  
     @zombies=();  
   
     my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');  
     if ($errtext) { return ($errtext,2); }  
   
 # -------------------------------------------------------------------- Read map  
     foreach (split(/\<\&\>/,$outtext)) {  
  my ($command,$number,$content)=split(/\<\:\>/,$_);  
         if ($command eq 'objcont') {  
     my ($title,$src,$ext,$type)=split(/\:/,$content);  
     if ($ext eq 'cond') { next; }  
     if ($type ne 'zombie') {  
  $resources[$number]=$content;  
     } else {  
  $zombies[$number]=$content;  
     }  
         }  
         if ($command eq 'objlinks') {  
             $links[$number]=$content;  
         }  
         if ($command eq 'objparms') {  
     if ($resparms[$number]) {  
  $resparms[$number].='&&&'.$content;  
     } else {  
  $resparms[$number]=$content;  
     }  
         }  
     }  
 # ------------------------------------------------------- Is this a linear map?  
     my @starters=();  
     my @endings=();  
     undef @starters;  
     undef @endings;  
   
     foreach (@links) {  
         if (defined($_)) {  
     my ($start,$end,$cond)=split(/\:/,$_);  
             if ((defined($starters[$start])) || (defined($endings[$end]))) {   
  return  
                  (&mt('Map has branchings. Use advanced editor.'),1);  
             }  
     $starters[$start]=1;  
     $endings[$end]=1;  
     if ($cond) {  
  return  
                  (&mt('Map has conditions. Use advanced editor.'),1);  
             }  
  }  
   
     }  
     for (my $i=1; $i<=$#resources; $i++) {  
         if (defined($resources[$i])) {  
     unless (($starters[$i]) || ($endings[$i])) {  
                 return  
  (&mt('Map has unconnected resources. Use advanced editor.'),1);  
             }  
         }  
     }  
 # ---------------------------------------------- Did we just read an empty map?  
     if ($#resources<1) {  
         undef $resources[0];  
  $resources[1]=':::start';  
         $resources[2]=':::finish';  
     }  
 # -------------------------------------------------- This is a linear map, sort  
   
     my $startidx=0;  
     my $endidx=0;  
     for (my $i=0; $i<=$#resources; $i++) {  
         if (defined($resources[$i])) {  
             my ($title,$url,$ext,$type)=split(/\:/,$resources[$i]);  
     if ($type eq 'start') { $startidx=$i; }  
             if ($type eq 'finish') { $endidx=$i; }  
         }  
     }  
     my $k=0;  
     my $currentidx=$startidx;  
     $order[$k]=$currentidx;  
     for (my $i=0; $i<=$#resources; $i++) {  
         foreach (@links) {  
     my ($start,$end)=split(/\:/,$_);  
             if ($start==$currentidx) {  
  $currentidx=$end;  
                 $k++;  
                 $order[$k]=$currentidx;  
                 last;  
             }  
         }  
         if ($currentidx==$endidx) { last; }  
     }  
     return $errtext;  
 }  
   
 # ---------------------------------------------- Read a map as well as possible  
 # Also used by the sequence handler  
 # Call lonsequence::attemptread to read from resource space  
 #  
 sub attemptread {  
     my $fn=shift;  
   
     my @links;  
     undef @links;  
     my @theseres;  
     undef @theseres;  
   
     my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');  
     if ($errtext) { return @theseres }  
   
 # -------------------------------------------------------------------- Read map  
     foreach (split(/\<\&\>/,$outtext)) {  
  my ($command,$number,$content)=split(/\<\:\>/,$_);  
         if ($command eq 'objcont') {  
     my ($title,$src,$ext,$type)=split(/\:/,$content);  
     unless ($type eq 'zombie') {  
  $theseres[$number]=$content;  
     }  
         }  
         if ($command eq 'objlinks') {  
             $links[$number]=$content;  
         }  
     }  
   
 # --------------------------------------------------------------- Sort, sort of  
   
     my @objsort=();  
     undef @objsort;  
   
     my @data1=();  
     my @data2=();  
     undef @data1;  
     undef @data2;  
   
     my $k;  
     my $kj;  
     my $j;  
     my $ij;  
   
    for ($k=1;$k<=$#theseres;$k++) {  
       if (defined($theseres[$k])) {  
          $objsort[$#objsort+1]=$k;  
       }  
    }  
   
    for ($k=1;$k<=$#links;$k++) {  
      if (defined($links[$k])) {  
       @data1=split(/\:/,$links[$k]);  
       $kj=-1;  
       for (my $j=0;$j<=$#objsort;$j++) {  
          if ((split(/\:/,$objsort[$j]))[0]==$data1[0]) {  
             $kj=$j;  
          }  
       }  
       if ($kj!=-1) { $objsort[$kj].=':'.$data1[1]; }  
      }  
    }  
     for ($k=0;$k<=$#objsort;$k++) {  
       for ($j=0;$j<=$#objsort;$j++) {  
         if ($k!=$j) {  
           @data1=split(/\:/,$objsort[$k]);  
           @data2=split(/\:/,$objsort[$j]);  
           my $dol=$#data1+1;  
           my $dtl=$#data2+1;  
           if ($dol+$dtl<1000) {  
            for ($kj=1;$kj<$dol;$kj++) {  
              if ($data1[$kj]==$data2[0]) {  
                 for ($ij=1;$ij<$dtl;$ij++) {  
                    $data1[$#data1+1]=$data2[$ij];  
                 }  
              }  
            }  
            for ($kj=1;$kj<$dtl;$kj++) {  
              if ($data2[$kj]==$data1[0]) {  
                  for ($ij=1;$ij<$dol;$ij++) {  
                     $data2[$#data2+1]=$data1[$ij];  
                  }  
              }  
            }  
            $objsort[$k]=join(':',@data1);  
            $objsort[$j]=join(':',@data2);  
           }  
          }  
       }   
   }  
 # ---------------------------------------------------------------- Now sort out  
   
     @objsort=sort {  
       my @data1=split(/\:/,$a);  
       my @data2=split(/\:/,$b);  
       my $rvalue=0;  
       my $k;  
       for ($k=1;$k<=$#data1;$k++) {  
          if ($data1[$k]==$data2[0]) { $rvalue--; }  
       }  
       for ($k=1;$k<=$#data2;$k++) {  
          if ($data2[$k]==$data1[0]) { $rvalue++; }  
       }  
       if ($rvalue==0) { $rvalue=$#data2-$#data1; }  
       $rvalue;  
     } @objsort;  
   
     my @outres=();  
     undef @outres;  
   
     for ($k=0;$k<=$#objsort;$k++) {  
  $outres[$k]=$theseres[(split(/\:/,$objsort[$k]))[0]];  
     }  
     return @outres;  
 }  
   
 # --------------------------------------------------------- Build up RAT screen  # --------------------------------------------------------- Build up RAT screen
 sub ratedt {  sub ratedt {
Line 455  sub buttons { Line 228  sub buttons {
     return $output.'</form><hr>';      return $output.'</form><hr>';
 }  }
   
 # ------------------------------------- Revive zombie idx or get unused number  
   
 sub getresidx {  
     my $url=shift;  
     my $max=1+($#resources>$#zombies?$#resources:$#zombies);  
     unless ($url) { return $max; }  
     for (my $i=0; $i<=$#zombies; $i++) {  
  my ($title,$src,$ext,$type)=split(/\:/,$zombies[$i]);  
  if ($src eq $url) {  
     undef $zombies[$i];  
     return $i;  
  }  
     }  
     return $max;  
 }  
   
 # --------------------------------------------------------------- Make a zombie  
   
 sub makezombie {  
     my $idx=shift;  
     my ($name,$url,$ext)=split(/\:/,$resources[$idx]);  
     my $now=time;  
     $zombies[$idx]=$name.  
  ' [('.$now.','.$env{'user.name'}.','.$env{'user.domain'}.')]:'.  
  $url.':'.$ext.':zombie';  
 }  
   
 # ----------------------------------------------------------- Paste into target  
 # modifies @order, @resources  
   
 sub pastetarget {  
     my ($after,@which)=@_;  
     my @insertorder=();  
     foreach (@which) {  
         if (defined($_)) {  
     my ($name,$url)=split(/\=/,$_);  
             $name=&unescape($name);  
             $url=&unescape($url);  
             if ($url) {  
        my $idx=&getresidx($url);  
                $insertorder[$#insertorder+1]=$idx;  
                my $ext='false';  
                if ($url=~/^http\:\/\//) { $ext='true'; }  
                $url=~s/\:/\&colon;/g;  
                $name=~s/\:/\&colon;/g;  
                $resources[$idx]=$name.':'.$url.':'.$ext.':normal:res';  
    }  
         }  
     }  
     my @oldorder=splice(@order,$after);  
     @order=(@order,@insertorder,@oldorder);  
 }  
   
 # ------------------------------------------------ Get start and finish correct  
 # modifies @resources  
   
 sub startfinish {  
 # Remove all start and finish  
     foreach (@order) {  
  my ($name,$url,$ext)=split(/\:/,$resources[$_]);  
         if ($url=~/http\&colon\:\/\//) { $ext='true'; }  
         $resources[$_]=$name.':'.$url.':'.$ext.':normal:res';  
     }  
 # Garbage collection  
     my $stillchange=1;  
      while (($#order>1) && ($stillchange)) {  
        $stillchange=0;  
        for (my $i=0;$i<=$#order;$i++) {  
    my ($name,$url,$ext)=split(/\:/,$resources[$order[$i]]);  
           unless ($url) {  
 # Take out empty resource  
               for (my $j=$i+1;$j<=$#order;$j++) {  
                   $order[$j-1]=$order[$j];  
       }  
               $#order--;  
       $stillchange=1;  
               last;  
           }  
        }  
     }  
 # Put in a start resource  
    my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]);  
    $resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res';  
 # Make sure this has at least start and finish  
    if ($#order==0) {  
        $resources[&getresidx()]='::false';  
        $order[1]=$#resources;  
    }  
 # Make the last one a finish resource  
    ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);  
    $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res';  
 }  
   
 # ------------------------------------------------------------------- Store map  
   
 sub storemap {  
     my $realfn=shift;  
     my $fn=$realfn;  
 # unless this is forced to work from the original file, use a temporary file  
 # instead  
     unless (shift) {  
        $fn=$realfn.'.tmp';  
        unless (-e $fn) {  
   copy($realfn,$fn);  
        }  
     }  
 # store data either into tmp or real file  
     &startfinish();  
     my $output='graphdef<:>no';  
     my $k=1;  
     for (my $i=0; $i<=$#order; $i++) {  
         if (defined($resources[$order[$i]])) {  
     $output.='<&>objcont<:>'.$order[$i].'<:>'.$resources[$order[$i]];  
         }  
  if (defined($resparms[$order[$i]])) {  
     foreach (split('&&&',$resparms[$order[$i]])) {  
  if ($_) {  
     $output.='<&>objparms<:>'.$order[$i].'<:>'.$_;  
  }  
     }  
  }  
         if (defined($order[$i+1])) {  
     if (defined($resources[$order[$i+1]])) {  
                $output.='<&>objlinks<:>'.$k.'<:>'.  
    $order[$i].':'.$order[$i+1].':0';  
        $k++;  
             }  
         }  
     }  
     for (my $i=0; $i<=$#zombies; $i++) {  
         if (defined($zombies[$i])) {  
     $output.='<&>objcont<:>'.$i.'<:>'.$zombies[$i];  
         }  
     }  
     $output=~s/http\&colon\;\/\///g;  
     $env{'form.output'}=$output;  
     return   
      &Apache::lonratsrv::loadmap($fn,&Apache::lonratsrv::savemap($fn,''));  
 }  
   
 # ------------------------------------------ Store and get parameters in global  
   
 sub storeparameter {  
     my ($to,$name,$value,$ptype)=@_;  
     my $newentry='';  
     my $nametype='';  
     foreach (split('&&&',$resparms[$to])) {  
  my ($thistype,$thisname,$thisvalue)=split('___',$_);  
  if ($thisname) {  
     unless ($thisname eq $name) {  
  $newentry.=$_.'&&&';  
     } else {  
  $nametype=$thistype;  
     }  
  }  
     }  
     unless ($ptype) { $ptype=$nametype; }  
     unless ($ptype) { $ptype='string'; }  
     $newentry.=$ptype.'___'.$name.'___'.$value;  
     $resparms[$to]=$newentry;  
 }  
   
 sub delparameter {  
     my ($to,$name)=@_;  
     my $newentry='';  
     my $nametype='';  
     foreach (split('&&&',$resparms[$to])) {  
  my ($thistype,$thisname,$thisvalue)=split('___',$_);  
  if ($thisname) {  
     unless ($thisname eq $name) {  
  $newentry.=$_.'&&&';  
     }  
  }  
     }  
     $resparms[$to]=$newentry;  
 }  
   
 sub getparameter {  
     my ($to,$name)=@_;  
     my $value=undef;  
     my $ptype=undef;  
     foreach (split('&&&',$resparms[$to])) {  
  my ($thistype,$thisname,$thisvalue)=split('___',$_);  
  if ($thisname eq $name) {  
     $value=$thisvalue;  
     $ptype=$thistype;  
  }  
     }  
     return ($value,$ptype);  
 }  
   
 # ----------------------------------------------------------------- Edit script  # ----------------------------------------------------------------- Edit script
 sub editscript {  sub editscript {
     my $mode=shift;      my $mode=shift;
Line 776  sub smpedt { Line 358  sub smpedt {
        copy($tmpfn,&Apache::lonnet::filelocation('',$url));         copy($tmpfn,&Apache::lonnet::filelocation('',$url));
        unlink($tmpfn);         unlink($tmpfn);
        my ($errtext,$fatal)=         my ($errtext,$fatal)=
                            &mapread(&Apache::lonnet::filelocation('',$url),'');     &LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$url),'');
        unless ($fatal) {         unless ($fatal) {
    $targetmsg='<b>'.&mt('Saved.').'</b><br />';     $targetmsg='<b>'.&mt('Saved.').'</b><br />';
        } else {         } else {
Line 787  sub smpedt { Line 369  sub smpedt {
        $targetmsg='<b>'.&mt('Reverted.').'</b><br />';         $targetmsg='<b>'.&mt('Reverted.').'</b><br />';
        unlink($tmpfn);         unlink($tmpfn);
        my ($errtext,$fatal)=         my ($errtext,$fatal)=
                            &mapread(&Apache::lonnet::filelocation('',$url),'');     &LONCAPA::map::mapread(&Apache::lonnet::filelocation('',$url),'');
    }     }
    if (-e $tmpfn) {     if (-e $tmpfn) {
       $targetmsg=        $targetmsg=
         '<b><font color="red">'.&mt('You are working with an unsaved version of your map.').'</font></b><br>';          '<b><font color="red">'.&mt('You are working with an unsaved version of your map.').'</font></b><br>';
       my ($errtext,$fatal)=&mapread($tmpfn,'');        my ($errtext,$fatal)=&LONCAPA::map::mapread($tmpfn,'');
    }     }
 # ---------------------------------------------------------- Process form input  # ---------------------------------------------------------- Process form input
   
Line 895  sub smpedt { Line 477  sub smpedt {
        if (defined($targetselect[-1])) {         if (defined($targetselect[-1])) {
    $lastsel=$targetselect[-1];     $lastsel=$targetselect[-1];
        } else {         } else {
            $lastsel=$#order+1;             $lastsel=$#LONCAPA::map::order+1;
        }         }
        &pastetarget($lastsel,split(/\&/,$env{'form.importdetail'}));         &LONCAPA::map::pastetarget($lastsel,split(/\&/,$env{'form.importdetail'}));
        &storemap(&Apache::lonnet::filelocation('',$url));         &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));
 # ------------------------------------------------------------------------- Cut  # ------------------------------------------------------------------------- Cut
    } elsif (($env{'form.cut'}) || ($env{'form.copy'})) {     } elsif (($env{'form.cut'}) || ($env{'form.copy'})) {
        $importdetail='';         $importdetail='';
Line 920  sub smpedt { Line 502  sub smpedt {
        }         }
   
        foreach (@targetselect) {         foreach (@targetselect) {
    my ($name,$url)=split(/\:/,$resources[$order[$_-1]]);     my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$LONCAPA::map::order[$_-1]]);
            if ($url) {             if ($url) {
               $importdetail.='&'.&escape($name).'='.                $importdetail.='&'.&escape($name).'='.
          &escape($url);           &escape($url);
Line 938  sub smpedt { Line 520  sub smpedt {
   
        if ($env{'form.cut'}) {         if ($env{'form.cut'}) {
            my @neworder=();             my @neworder=();
            for (my $i=0;$i<=$#order;$i++) {             for (my $i=0;$i<=$#LONCAPA::map::order;$i++) {
                my $include=1;                 my $include=1;
                foreach (@targetselect) {                 foreach (@targetselect) {
    if ($_-1==$i) { $include=0; }     if ($_-1==$i) { $include=0; }
                }                 }
                if ($include) {                  if ($include) { 
    $neworder[$#neworder+1]=$order[$i];      $neworder[$#neworder+1]=$LONCAPA::map::order[$i]; 
        } else {         } else {
    &makezombie($order[$i]);     &LONCAPA::map::makezombie($LONCAPA::map::order[$i]);
        }         }
            }             }
            @order=@neworder;             @LONCAPA::map::order=@neworder;
            &storemap(&Apache::lonnet::filelocation('',$url));                   &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));      
        }         }
   
 # ----------------------------------------------------------------------- Paste  # ----------------------------------------------------------------------- Paste
Line 959  sub smpedt { Line 541  sub smpedt {
        if (defined($targetselect[-1])) {         if (defined($targetselect[-1])) {
    $lastsel=$targetselect[-1];     $lastsel=$targetselect[-1];
        } else {         } else {
            $lastsel=$#order+1;             $lastsel=$#LONCAPA::map::order+1;
        }         }
        my @newsequence;         my @newsequence;
        my @curimport=split(/\&/,$env{'form.curimpdetail'});         my @curimport=split(/\&/,$env{'form.curimpdetail'});
        foreach (@importselect) {         foreach (@importselect) {
           $newsequence[$#newsequence+1]=$curimport[$_];            $newsequence[$#newsequence+1]=$curimport[$_];
        }         }
        &pastetarget($lastsel,@newsequence);         &LONCAPA::map::pastetarget($lastsel,@newsequence);
        &storemap(&Apache::lonnet::filelocation('',$url));         &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));
 # -------------------------------------------------------------------- Move up   # -------------------------------------------------------------------- Move up 
    } elsif ($env{'form.moveup'}) {     } elsif ($env{'form.moveup'}) {
        foreach (sort @targetselect) {         foreach (sort @targetselect) {
            if ($_-1>0) {             if ($_-1>0) {
               my $movethis=$order[$_-1];                my $movethis=$LONCAPA::map::order[$_-1];
               $order[$_-1]=$order[$_-2];                $LONCAPA::map::order[$_-1]=$LONCAPA::map::order[$_-2];
               $order[$_-2]=$movethis;                $LONCAPA::map::order[$_-2]=$movethis;
   }    }
        }         }
        &storemap(&Apache::lonnet::filelocation('',$url));         &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));
 # ------------------------------------------------------------------ Move down  # ------------------------------------------------------------------ Move down
    } elsif ($env{'form.movedown'}) {     } elsif ($env{'form.movedown'}) {
        foreach (reverse sort @targetselect) {         foreach (reverse sort @targetselect) {
            if ($_-1<$#order) {             if ($_-1<$#LONCAPA::map::order) {
               my $movethis=$order[$_-1];                my $movethis=$LONCAPA::map::order[$_-1];
               $order[$_-1]=$order[$_];                $LONCAPA::map::order[$_-1]=$LONCAPA::map::order[$_];
               $order[$_]=$movethis;                $LONCAPA::map::order[$_]=$movethis;
    }     }
        }         }
        &storemap(&Apache::lonnet::filelocation('',$url));         &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));
 # --------------------------------------------------------------------- Rename  # --------------------------------------------------------------------- Rename
    } elsif ($env{'form.renameres'}) {     } elsif ($env{'form.renameres'}) {
        my $residx=$Apache::lonratedt::order[$env{'form.renameidx'}-1];         my $residx=$LONCAPA::map::order[$env{'form.renameidx'}-1];
        my ($name,@resrest)=split(/\:/,$Apache::lonratedt::resources[$residx]);         my ($name,@resrest)=split(/\:/,$LONCAPA::map::resources[$residx]);
        $name=$env{'form.renametitle'};         $name=$env{'form.renametitle'};
        $name=~s/\:/\&colon\;/g;         $name=~s/\:/\&colon\;/g;
        $Apache::lonratedt::resources[$residx]=$name.':'.join(':',@resrest);         $LONCAPA::map::resources[$residx]=$name.':'.join(':',@resrest);
        &storemap(&Apache::lonnet::filelocation('',$url));         &LONCAPA::map::storemap(&Apache::lonnet::filelocation('',$url));
    }     }
 # ------------------------------------------------------------ Assemble windows  # ------------------------------------------------------------ Assemble windows
         
Line 1020  sub smpedt { Line 602  sub smpedt {
    my $targetwindow=            my $targetwindow=       
        '<option value="0"> ------- '.&mt('Target Edit Map').' ------- </option>'.         '<option value="0"> ------- '.&mt('Target Edit Map').' ------- </option>'.
      join("\n",map {        join("\n",map { 
        my ($name,$url)=split(/\:/,$resources[$_]);         my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);
        unless ($name) {  $name=(split(/\//,$url))[-1]; }         unless ($name) {  $name=(split(/\//,$url))[-1]; }
        unless ($name) { $name='EMPTY'; }         unless ($name) { $name='EMPTY'; }
        $targetdetail.='&'.&escape($name).'='.         $targetdetail.='&'.&escape($name).'='.
Line 1028  sub smpedt { Line 610  sub smpedt {
        $idx++;         $idx++;
        $name=~s/\&colon;/\:/g;         $name=~s/\&colon;/\:/g;
        '<option value="'.$idx.'">'.$name.'</option>';         '<option value="'.$idx.'">'.$name.'</option>';
    } @order);     } @LONCAPA::map::order);
   
 # ----------------------------------------------------- Start simple RAT screen  # ----------------------------------------------------- Start simple RAT screen
    my $editscript=&editscript('simple');     my $editscript=&editscript('simple');
Line 1216  sub viewmap { Line 798  sub viewmap {
                '<th>'.&mt('Link to resource in Construction Space').'</th>'.                 '<th>'.&mt('Link to resource in Construction Space').'</th>'.
                '</tr>');                 '</tr>');
     my @backgroundColors = ("#FFFFFF", "#F6F6F6");      my @backgroundColors = ("#FFFFFF", "#F6F6F6");
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&LONCAPA::map::attemptread(&Apache::lonnet::filelocation('',$url))) {
  if (defined($_)) {   if (defined($_)) {
             $idx++;              $idx++;
     my ($title,$url,$cond)=split(/\:/,$_);      my ($title,$url,$cond)=split(/\:/,$_);
Line 1293  sub handler { Line 875  sub handler {
   my $fatal=0;    my $fatal=0;
   
 # -------------------------------------------------------------------- Load map  # -------------------------------------------------------------------- Load map
   ($errtext,$fatal)=&mapread($fn,$errtext);    ($errtext,$fatal)=&LONCAPA::map::mapread($fn,$errtext);
   
   if ($fatal==1) { $adv=1; }    if ($fatal==1) { $adv=1; }
   

Removed from v.1.83  
changed lines
  Added in v.1.84


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