Diff for /rat/lonratedt.pm between versions 1.17 and 1.27

version 1.17, 2002/05/15 19:50:37 version 1.27, 2002/05/22 20:39:59
Line 37  use Apache::Constants qw(:common); Line 37  use Apache::Constants qw(:common);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonratsrv;  use Apache::lonratsrv;
   
 my @order=();  my @order;
 my @resources=();  my @resources;
   
   
 # Mapread read maps into global arrays @links and @resources, determines status  # Mapread read maps into global arrays @links and @resources, determines status
Line 52  sub mapread { Line 52  sub mapread {
     undef @links;      undef @links;
     undef @resources;      undef @resources;
     undef @order;      undef @order;
       @resources=('');
       @order=();
   
     my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');      my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');
     if ($errtext) { return ($errtext,2); }      if ($errtext) { return ($errtext,2); }
Line 88  sub mapread { Line 90  sub mapread {
  }   }
   
     }      }
     for (my $i=0; $i<=$#resources; $i++) {      for (my $i=1; $i<=$#resources; $i++) {
         if (defined($resources[$i])) {          if (defined($resources[$i])) {
     unless (($starters[$i]) || ($endings[$i])) {      unless (($starters[$i]) || ($endings[$i])) {
                 return                  return
Line 261  ENDDOCUMENT Line 263  ENDDOCUMENT
 # ---------------------------------------------------------------- Make buttons  # ---------------------------------------------------------------- Make buttons
   
 sub buttons {  sub buttons {
       if ($ENV{'form.forceselect'}) { return ''; }
     my $adv=shift;      my $adv=shift;
     my $output='<form method=post>';           my $output='<form method=post>';     
     if ($adv==1) {      if ($adv==1) {
Line 274  sub buttons { Line 277  sub buttons {
     return $output.'</form><hr>';      return $output.'</form><hr>';
 }  }
   
   # ----------------------------------------------------------- Paste into target
   # modifies @order, @resources
   
   sub pastetarget {
       my ($after,@which)=@_;
       my @insertorder=();
       foreach (@which) {
           if (defined($_)) {
       my ($name,$url)=split(/\=/,$_);
               $name=&Apache::lonnet::unescape($name);
               $url=&Apache::lonnet::unescape($url);
               if ($url) {
          my $idx=$#resources+1;
                  $insertorder[$#insertorder+1]=$idx;
                  my $ext='false';
                  if ($url=~/^http\:\/\//) { $ext='true'; }
                  $url=~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 {
       foreach (@order) {
    my ($name,$url,$ext)=split(/\:/,$resources[$_]);
           if ($url=~/http\&colon\:\/\//) { $ext='true'; }
           $resources[$_]=$name.':'.$url.':'.$ext.':normal:res';
       }
      my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]);
      $resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res';
      my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);
      $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res';
   }
   
   # ------------------------------------------------------------------- Store map
   
   sub storemap {
       my $fn=shift;
       &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($order[$i+1])) {
       if (defined($resources[$order[$i+1]])) {
                  $output.='<&>objlinks<:>'.$k.'<:>'.
      $order[$i].':'.$order[$i+1].':0';
          $k++;
               }
           }
       }
       $output=~s/http\&colon\;\/\///g;
       $ENV{'form.output'}=$output;
       return 
        &Apache::lonratsrv::loadmap($fn,&Apache::lonratsrv::savemap($fn,''));
   }
   
   # ------------------------------------------------------- Simple edit processor
   
 sub smpedt {  sub smpedt {
    my ($r,$errtext)=@_;     my ($r,$url,$errtext)=@_;
    my $buttons=&buttons(2);     my $buttons=&buttons(2);
   
 # ---------------------------------------------------------- Process form input  # ---------------------------------------------------------- Process form input
Line 284  sub smpedt { Line 354  sub smpedt {
    my @targetselect=();     my @targetselect=();
    undef @importselect;     undef @importselect;
    undef @targetselect;     undef @targetselect;
    if (defined($ENV{'form.import'})) {     if (defined($ENV{'form.importsel'})) {
        if (ref($ENV{'form.import'})) {         if (ref($ENV{'form.importsel'})) {
    @importselect=sort($ENV->{'form.import'});     @importselect=sort(@{$ENV{'form.importsel'}});
        } else {         } else {
            @importselect=($ENV{'form.import'});             @importselect=($ENV{'form.importsel'});
        }         }
    }     }
    if (defined($ENV{'form.target'})) {     if (defined($ENV{'form.target'})) {
        if (ref($ENV{'form.target'})) {         if (ref($ENV{'form.target'})) {
    @targetselect=sort($ENV->{'form.target'});     @targetselect=sort(@{$ENV{'form.target'}});
        } else {         } else {
            @targetselect=($ENV{'form.target'});             @targetselect=($ENV{'form.target'});
        }         }
Line 320  sub smpedt { Line 390  sub smpedt {
        for (my $i=0;$i<=$lastsel;$i++) {         for (my $i=0;$i<=$lastsel;$i++) {
            my ($name,$url)=split(/\=/,$curimport[$i]);             my ($name,$url)=split(/\=/,$curimport[$i]);
            if ($url) {             if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.$name.'='.$url;
          &Apache::lonnet::escape($url);  
    }     }
        }         }
   
Line 330  sub smpedt { Line 399  sub smpedt {
        for (my $i=$lastsel+1;$i<=$#curimport;$i++) {         for (my $i=$lastsel+1;$i<=$#curimport;$i++) {
            my ($name,$url)=split(/\=/,$curimport[$i]);             my ($name,$url)=split(/\=/,$curimport[$i]);
            if ($url) {             if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.$name.'='.$url;
          &Apache::lonnet::escape($url);  
   }    }
        }         }
        $importdetail=~s/\&+/\&/g;         $importdetail=~s/\&+/\&/g;
Line 350  sub smpedt { Line 418  sub smpedt {
        for (my $i=0;$i<=$#curimport;$i++) {         for (my $i=0;$i<=$#curimport;$i++) {
            my ($name,$url)=split(/\=/,$curimport[$i]);             my ($name,$url)=split(/\=/,$curimport[$i]);
            if ($url) {             if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.$name.'='.$url;
          &Apache::lonnet::escape($url);  
    }     }
        }         }
 # --------------------------------------------------------- Loading another map  # --------------------------------------------------------- Loading another map
Line 370  sub smpedt { Line 437  sub smpedt {
        for (my $i=0;$i<=$lastsel;$i++) {         for (my $i=0;$i<=$lastsel;$i++) {
            my ($name,$url)=split(/\=/,$curimport[$i]);             my ($name,$url)=split(/\=/,$curimport[$i]);
            if ($url) {             if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.$name.'='.$url;
          &Apache::lonnet::escape($url);  
    }     }
        }         }
   
Line 387  sub smpedt { Line 453  sub smpedt {
        for (my $i=$lastsel+1;$i<=$#curimport;$i++) {         for (my $i=$lastsel+1;$i<=$#curimport;$i++) {
            my ($name,$url)=split(/\=/,$curimport[$i]);             my ($name,$url)=split(/\=/,$curimport[$i]);
            if ($url) {             if ($url) {
                 $importdetail.='&'.$name.'='.$url;
     }
          }
          $importdetail=~s/\&+/\&/g;
          $importdetail=~s/^\&//;
   
   # ------------------------------------------------ Groupimport/search to target
      } elsif ($ENV{'form.importdetail'}) {
          my $lastsel;
          if (defined($targetselect[-1])) {
      $lastsel=$targetselect[-1];
          } else {
              $lastsel=$#order+1;
          }
          &pastetarget($lastsel,split(/\&/,$ENV{'form.importdetail'}));
          &storemap(&Apache::lonnet::filelocation('',$url));
   # ------------------------------------------------------------------------- Cut
      } elsif (($ENV{'form.cut'}) || ($ENV{'form.copy'})) {
          $importdetail='';
          my @curimport=split(/\&/,$ENV{'form.curimpdetail'});
   
          my $lastsel;
   
          if (defined($importselect[-1])) {
      $lastsel=$importselect[-1];
          } else {
              $lastsel=$#curimport;
          }
   
          for (my $i=0;$i<=$lastsel;$i++) {
              my ($name,$url)=split(/\=/,$curimport[$i]);
              if ($url) {
                 $importdetail.='&'.$name.'='.$url;
      }
          }
   
          foreach (@targetselect) {
      my ($name,$url)=split(/\:/,$resources[$order[$_-1]]);
              if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.&Apache::lonnet::escape($name).'='.
          &Apache::lonnet::escape($url);           &Apache::lonnet::escape($url);
   }    }
        }         }
   
          for (my $i=$lastsel+1;$i<=$#curimport;$i++) {
              my ($name,$url)=split(/\=/,$curimport[$i]);
              if ($url) {
                 $importdetail.='&'.$name.'='.$url;
     }
          }
        $importdetail=~s/\&+/\&/g;         $importdetail=~s/\&+/\&/g;
        $importdetail=~s/^\&//;         $importdetail=~s/^\&//;
   
 # ------------------------------------         if ($ENV{'form.cut'}) {
    }             my @neworder=();
              for (my $i=0;$i<=$#order;$i++) {
                  my $include=1;
                  foreach (@targetselect) {
      if ($_-1==$i) { $include=0; }
                  }
                  if ($include) { $neworder[$#neworder+1]=$order[$i]; }
              }
              @order=@neworder;
              &storemap(&Apache::lonnet::filelocation('',$url));      
          }
   
   # ----------------------------------------------------------------------- Paste
      } elsif ($ENV{'form.paste'}) {
          my $lastsel;
          if (defined($targetselect[-1])) {
      $lastsel=$targetselect[-1];
          } else {
              $lastsel=$#order+1;
          }
          my @newsequence;
          my @curimport=split(/\&/,$ENV{'form.curimpdetail'});
          foreach (@importselect) {
             $newsequence[$#newsequence+1]=$curimport[$_];
          }
          &pastetarget($lastsel,@newsequence);
          &storemap(&Apache::lonnet::filelocation('',$url));
   # ------------------------------------------------ 
      }
 # ------------------------------------------------------------ Assemble windows  # ------------------------------------------------------------ Assemble windows
      
    my $idx=-1;     my $idx=-1;
    my $importwindow=join("\n",map {     my $importwindow=join("\n",map {
        $idx++;         $idx++;
Line 419  sub smpedt { Line 558  sub smpedt {
        $targetdetail.='&'.&Apache::lonnet::escape($name).'='.         $targetdetail.='&'.&Apache::lonnet::escape($name).'='.
                   &Apache::lonnet::escape($url);                    &Apache::lonnet::escape($url);
        $idx++;         $idx++;
        '<option value="'.$idx.'_'.$_.'">'.$name.'</option>';         '<option value="'.$idx.'">'.$name.'</option>';
    } @order);     } @order);
   
 # ----------------------------------------------------- Start simple RAT screen  # ----------------------------------------------------- Start simple RAT screen
Line 529  function idxcheck(mode) { Line 668  function idxcheck(mode) {
         editbrowser = open(url,title,options,'1');          editbrowser = open(url,title,options,'1');
         editbrowser.focus();          editbrowser.focus();
     }      }
   
      function openview(entry) {
          var url=unescape((entry.split('='))[1]);
          var parts=new Array;
          parts=url.split('&colon;');
          url=parts.join(':');
          if (url) { open(url,'cat'); }
      }
   
      function viewtarget() {
          openview((document.forms.simpleedit.targetdetail.value.split('&'))
                   [document.forms.simpleedit.target.selectedIndex+1]);
      }
   
      function viewimport() {
          openview((document.forms.simpleedit.curimpdetail.value.split('&'))
                   [document.forms.simpleedit.importsel.selectedIndex+1]);
      }
   
 </script>  </script>
 </head>                   </head>                 
 <body bgcolor='#FFFFFF'>  <body bgcolor='#FFFFFF'>
Line 563  after selected Line 721  after selected
 <hr><input type=button onClick="javascript:viewtarget()" value="View">  <hr><input type=button onClick="javascript:viewtarget()" value="View">
 </td></tr>  </td></tr>
   
 <tr><td bgcolor="#FFFFCC"><select name="import" multiple>  <tr><td bgcolor="#FFFFCC"><select name="importsel" size=10 multiple>
 $importwindow  $importwindow
 </select>  </select>
 </td>  </td>
Line 571  $importwindow Line 729  $importwindow
 Cut selected<br>  Cut selected<br>
 <input type=submit name=cut value='<<<'><p>  <input type=submit name=cut value='<<<'><p>
 <hr>  <hr>
   Copy selected<br>
   <input type=submit name=copy value='<--'><p>
   <hr>
 Paste after selected<br>  Paste after selected<br>
 <input type=submit name=paste value='>>>'>  <input type=submit name=paste value='-->'>
 </td>  </td>
 <td bgcolor="#FFFFCC"><select name="target" multiple>  <td bgcolor="#FFFFCC"><select name="target" size=10 multiple>
 $targetwindow  $targetwindow
 </select>  </select>
 </table>  </table>
Line 604  ENDNODIR Line 765  ENDNODIR
   
 sub viewmap {  sub viewmap {
     my ($r,$url,$adv,$errtext)=@_;      my ($r,$url,$adv,$errtext)=@_;
     $r->print('<html><body bgcolor="#FFFFFF">'.&buttons($adv));      $r->print('<html>');
       if ($ENV{'form.forceselect'}) { $r->print(<<ENDSCRIPT);
   <script>
   
   function select_group() {
       window.location="/adm/groupsort?catalogmode=groupimport&mode=rat&acts="+document.forms.fileattr.acts.value;
   }
   
   function queue(val) {
       if (eval("document.forms."+val+".filelink.checked")) {
    var l=val.length;
    var v=val.substring(4,l);
    document.forms.fileattr.acts.value+='1a'+v+'b';
       }
       else {
    var l=val.length;
    var v=val.substring(4,l);
    document.forms.fileattr.acts.value+='0a'+v+'b';
       }
   }
   
   
   
   </script>
   ENDSCRIPT
       }
       $r->print('<body bgcolor="#FFFFFF">'.&buttons($adv));
       if ($ENV{'form.forceselect'}) { $r->print(<<ENDSELECT);
   <form name=fileattr><input type=hidden name=acts value=''>
   <input type="button" name="close" value='CLOSE' onClick="self.close()">
   <input type="button" name="groupimport" value='GROUP IMPORT'
   onClick="javascript:select_group()">
   </form>   
   ENDSELECT
       }
     if ($errtext) {      if ($errtext) {
  $r->print($errtext.'<hr>');   $r->print($errtext.'<hr>');
     }      }
       my $idx=0;
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
  if (defined($_)) {   if (defined($_)) {
               $idx++;
               if ($ENV{'form.forceselect'}) { 
    $r->print('<form name="form'.$idx.'">');
               }
     my ($title,$url)=split(/\:/,$_);      my ($title,$url)=split(/\:/,$_);
             $title=~s/\&colon\;/\:/g;              $title=~s/\&colon\;/\:/g;
             $url=~s/\&colon\;/\:/g;              $url=~s/\&colon\;/\:/g;
             unless ($title) { $title=(split(/\//,$url))[-1] };              unless ($title) { $title=(split(/\//,$url))[-1] };
             unless ($title) { $title='<i>Empty</i>'; }              unless ($title) { $title='<i>Empty</i>'; }
             if ($url) {              if ($url) {
    if ($ENV{'form.forceselect'}) {
       $r->print(<<ENDCHECKBOX);
   <input type='checkbox' name='filelink' 
   value='$url' onClick='javascript:queue("form$idx")' >
   <input type='hidden' name='title' value='$title'>
   ENDCHECKBOX
                   }
  $r->print('<a href="'.&Apache::lonratsrv::qtescape($url).'">');   $r->print('<a href="'.&Apache::lonratsrv::qtescape($url).'">');
             }              }
             $r->print(&Apache::lonratsrv::qtescape($title));              $r->print(&Apache::lonratsrv::qtescape($title));
             if ($url) { $r->print('</a>'); }              if ($url) { $r->print('</a>'); }
             $r->print('<br>');              if ($ENV{'form.forceselect'}) {
    $r->print('</form>');
               } else {
    $r->print('<br>');
               }
         }          }
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');
Line 634  sub handler { Line 845  sub handler {
   $r->send_http_header;    $r->send_http_header;
   
   return OK if $r->header_only;    return OK if $r->header_only;
    
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['forceselect']);
   
   my $url=$r->uri;    my $url=$r->uri;
   my $fn=&Apache::lonnet::filelocation('',$url);    my $fn=&Apache::lonnet::filelocation('',$url);
Line 669  sub handler { Line 883  sub handler {
   if ($ENV{'form.forceadv'}) {    if ($ENV{'form.forceadv'}) {
       &ratedt($r,$url);        &ratedt($r,$url);
   } elsif ($ENV{'form.forcesmp'}) {    } elsif ($ENV{'form.forcesmp'}) {
       &smpedt($r,$errtext);        &smpedt($r,$url,$errtext);
   } else {    } else {
       &viewmap($r,$url,$adv,$errtext);        &viewmap($r,$url,$adv,$errtext);
   }    }

Removed from v.1.17  
changed lines
  Added in v.1.27


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