Diff for /rat/lonratedt.pm between versions 1.21 and 1.33

version 1.21, 2002/05/18 18:24:34 version 1.33, 2002/08/26 12:38:40
Line 36  use strict; Line 36  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonratsrv;  use Apache::lonratsrv;
   use Apache::lonsequence;
   
 my @order=();  use vars qw(@order @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 65  sub mapread { Line 67  sub mapread {
         if ($command eq 'objlinks') {          if ($command eq 'objlinks') {
             $links[$number]=$content;              $links[$number]=$content;
         }          }
           if ($command eq 'objparms') {
       return('Map has resource parameters. Use advanced editor.',1);
           }
     }      }
 # ------------------------------------------------------- Is this a linear map?  # ------------------------------------------------------- Is this a linear map?
     my @starters=();      my @starters=();
Line 88  sub mapread { Line 93  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 127  sub mapread { Line 132  sub mapread {
 }  }
   
 # ---------------------------------------------- Read a map as well as possible  # ---------------------------------------------- Read a map as well as possible
   # Also used by the sequence handler
   # Call lonsequence::attemptread to read from resource space
   #
 sub attemptread {  sub attemptread {
     my $fn=shift;      my $fn=shift;
   
Line 295  sub pastetarget { Line 302  sub pastetarget {
    }     }
         }          }
     }      }
     my @oldorder=splice(@order,$after,$#insertorder+1,@insertorder);      my @oldorder=splice(@order,$after);
     @order=(@order,@oldorder);      @order=(@order,@insertorder,@oldorder);
 }  }
   
 # ------------------------------------------------ Get start and finish correct  # ------------------------------------------------ Get start and finish correct
Line 305  sub pastetarget { Line 312  sub pastetarget {
 sub startfinish {  sub startfinish {
     foreach (@order) {      foreach (@order) {
  my ($name,$url,$ext)=split(/\:/,$resources[$_]);   my ($name,$url,$ext)=split(/\:/,$resources[$_]);
           if ($url=~/http\&colon\:\/\//) { $ext='true'; }
         $resources[$_]=$name.':'.$url.':'.$ext.':normal:res';          $resources[$_]=$name.':'.$url.':'.$ext.':normal:res';
     }      }
    my ($name,$url,$ext)=split(/\:/,$resources[0]);     my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]);
    $resources[0]=$name.':'.$url.':'.$ext.':start:res';     $resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res';
      if ($#order==0) {
          $resources[$#resources+1]='::false';
          $order[1]=$#resources;
      }
    my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);     my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);
    $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res';     $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,''));
   }
   
   sub editscript {
       my $mode=shift;
       return(<<ENDSCRIPT);
   var srch;
   var srchflag=-1; // 1 means currently open
                    // 0 means closed (but has been open)
                    // -1 means never yet opened/defined
   var srchmode='';
   
   var idx;
   var idxflag=-1; // 1 means currently open
                    // 0 means closed (but has been open)
                    // -1 means never yet opened/defined
   var idxmode='';
   
   // ------------------------------------------------------ Clears indexer window
   function idxclear() {
     idx.document.clear();
   }
   
   // ------------------------------------------------------- Clears search window
   function srchclear() {
     srch.document.clear();
   }
   
   // ------------------------------------------------------ Closes indexer window
   function idxclose() {
     if (idx && !idx.closed) {
       idxflag=0;
       idx.close();
     }
   }
   
   // ------------------------------------------------------- Closes search window
   function srchclose() {
     if (srch && !srch.closed) {
       srchflag=0;
       srch.close();
     }
   }
   
   // -------------------------------------------------------- Open indexer window
   function idxopen(mode) {
      var options="scrollbars=1,resizable=1,menubar=0";
      idxmode=mode;
      idxflag=1;
      idx=open("/res/?launch=1&mode=$mode&catalogmode="+mode,"idxout",options);
      idx.focus();
   }
   
   // --------------------------------------------------------- Open search window
   function srchopen(mode) {
      var options="scrollbars=1,resizable=1,menubar=0";
      srchmode=mode;
      srchflag=1;
      srch=open("/adm/searchcat?launch=1&mode=$mode&catalogmode="+mode,"srchout",options);
      srch.focus();
   }
   // ----------------------------------------------------- launch indexer browser
   function groupsearch() {
      srchcheck('groupsearch');
   }
   
   function groupimport() {
      idxcheck('groupimport');
   }
   // ------------------------------------------------------- Do srch status check
   function srchcheck(mode) {
      if (!srch || srch.closed || srchmode!=mode) {
         srchopen(mode);
      }
      srch.focus();
   }
   
   // -------------------------------------------------------- Do idx status check
   function idxcheck(mode) {
      if (!idx || idx.closed || idxmode!=mode) {
         idxopen(mode);
      }
      idx.focus();
   }
   
   
       var editbrowser;
       function openbrowser(formname,elementname,only,omit) {
           var url = '/res/?';
           if (editbrowser == null) {
               url += 'launch=1&';
           }
           url += 'catalogmode=interactive&';
           url += 'mode=edit&';
           url += 'form=' + formname + '&';
           if (only != null) {
               url += 'only=' + only + '&';
           } 
           if (omit != null) {
               url += 'omit=' + omit + '&';
           }
           url += 'element=' + elementname + '';
           var title = 'Browser';
           var options = 'scrollbars=1,resizable=1,menubar=0';
           options += ',width=700,height=600';
           editbrowser = open(url,title,options,'1');
           editbrowser.focus();
       }
   ENDSCRIPT
   }
 # ------------------------------------------------------- Simple edit processor  # ------------------------------------------------------- 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 325  sub smpedt { Line 469  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 413  sub smpedt { Line 557  sub smpedt {
        }         }
   
        foreach (         foreach (
     &attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {      &Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$ENV{'form.importmap'}))) {
    my ($name,$url)=split(/\:/,$_);     my ($name,$url)=split(/\:/,$_);
            if ($url) {             if ($url) {
               $importdetail.='&'.&Apache::lonnet::escape($name).'='.                $importdetail.='&'.&Apache::lonnet::escape($name).'='.
Line 433  sub smpedt { Line 577  sub smpedt {
 # ------------------------------------------------ Groupimport/search to target  # ------------------------------------------------ Groupimport/search to target
    } elsif ($ENV{'form.importdetail'}) {     } elsif ($ENV{'form.importdetail'}) {
        my $lastsel;         my $lastsel;
   
        if (defined($targetselect[-1])) {         if (defined($targetselect[-1])) {
    $lastsel=$targetselect[-1];     $lastsel=$targetselect[-1];
        } else {         } else {
            $lastsel=$#order;             $lastsel=$#order+1;
        }         }
        &pastetarget($lastsel,split(/\&/,$ENV{'form.importdetail'}));         &pastetarget($lastsel,split(/\&/,$ENV{'form.importdetail'}));
        &startfinish();         &storemap(&Apache::lonnet::filelocation('',$url));
 # ------------------------------------------------------------------------- Cut  # ------------------------------------------------------------------------- Cut
    } elsif ($ENV{'form.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).'='.
            &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/^\&//;
   
          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  # ----------------------------------------------------------------------- Paste
    } elsif ($ENV{'form.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=
          '<option value="-1"> ---- Import and Paste Area ---- </option>'.
        join("\n",map {
        $idx++;         $idx++;
        if ($_) {          if ($_) { 
           my ($name,$url)=split(/\=/,$_);            my ($name,$url)=split(/\=/,$_);
Line 462  sub smpedt { Line 668  sub smpedt {
    } split(/\&/,$importdetail));     } split(/\&/,$importdetail));
   
    $idx=0;     $idx=0;
    my $targetwindow=join("\n",map {      my $targetwindow=       
          '<option value="0"> ------- Target Edit Map ------- </option>'.
        join("\n",map { 
        my ($name,$url)=split(/\:/,$resources[$_]);         my ($name,$url)=split(/\:/,$resources[$_]);
        unless ($name) {  $name=(split(/\//,$url))[-1]; }         unless ($name) {  $name=(split(/\//,$url))[-1]; }
        unless ($name) { $name='EMPTY'; }         unless ($name) { $name='EMPTY'; }
Line 473  sub smpedt { Line 681  sub smpedt {
    } @order);     } @order);
   
 # ----------------------------------------------------- Start simple RAT screen  # ----------------------------------------------------- Start simple RAT screen
      my $editscript=&editscript('simple');
    $r->print(<<ENDSMPHEAD);     $r->print(<<ENDSMPHEAD);
 <html>  <html>
 <head>  <head>
 <script>  <script>
 var srch;  
 var srchflag=-1; // 1 means currently open  
                  // 0 means closed (but has been open)  
                  // -1 means never yet opened/defined  
 var srchmode='';  
   
 var idx;  
 var idxflag=-1; // 1 means currently open  
                  // 0 means closed (but has been open)  
                  // -1 means never yet opened/defined  
 var idxmode='';  
   
 // ------------------------------------------------------ Clears indexer window  
 function idxclear() {  
   idx.document.clear();  
 }  
   
 // ------------------------------------------------------- Clears search window  
 function srchclear() {  
   srch.document.clear();  
 }  
   
 // ------------------------------------------------------ Closes indexer window  
 function idxclose() {  
   if (idx && !idx.closed) {  
     idxflag=0;  
     idx.close();  
   }  
 }  
   
 // ------------------------------------------------------- Closes search window     $editscript
 function srchclose() {  
   if (srch && !srch.closed) {  
     srchflag=0;  
     srch.close();  
   }  
 }  
   
 // -------------------------------------------------------- Open indexer window  
 function idxopen(mode) {  
    var options="scrollbars=1,resizable=1,menubar=0";  
    idxmode=mode;  
    idxflag=1;  
    idx=open("/res/?launch=1&mode=simple&catalogmode="+mode,"idxout",options);  
    idx.focus();  
 }  
   
 // --------------------------------------------------------- Open search window  
 function srchopen(mode) {  
    var options="scrollbars=1,resizable=1,menubar=0";  
    srchmode=mode;  
    srchflag=1;  
    srch=open("/adm/searchcat?launch=1&mode=simple&catalogmode="+mode,"srchout",options);  
    srch.focus();  
 }  
 // ----------------------------------------------------- launch indexer browser  
 function groupsearch() {  
    srchcheck('groupsearch');  
 }  
   
 function groupimport() {  
    idxcheck('groupimport');  
 }  
 // ------------------------------------------------------- Do srch status check  
 function srchcheck(mode) {  
    if (!srch || srch.closed || srchmode!=mode) {  
       srchopen(mode);  
    }  
    srch.focus();  
 }  
   
 // -------------------------------------------------------- Do idx status check  
 function idxcheck(mode) {  
    if (!idx || idx.closed || idxmode!=mode) {  
       idxopen(mode);  
    }  
    idx.focus();  
 }  
   
   
     var editbrowser;  
     function openbrowser(formname,elementname,only,omit) {  
         var url = '/res/?';  
         if (editbrowser == null) {  
             url += 'launch=1&';  
         }  
         url += 'catalogmode=interactive&';  
         url += 'mode=edit&';  
         url += 'form=' + formname + '&';  
         if (only != null) {  
             url += 'only=' + only + '&';  
         }   
         if (omit != null) {  
             url += 'omit=' + omit + '&';  
         }  
         url += 'element=' + elementname + '';  
         var title = 'Browser';  
         var options = 'scrollbars=1,resizable=1,menubar=0';  
         options += ',width=700,height=600';  
         editbrowser = open(url,title,options,'1');  
         editbrowser.focus();  
     }  
   
    function openview(entry) {     function openview(entry) {
        var url=unescape((entry.split('='))[1]);         var url=unescape((entry.split('='))[1]);
Line 595  function idxcheck(mode) { Line 704  function idxcheck(mode) {
   
    function viewimport() {     function viewimport() {
        openview((document.forms.simpleedit.curimpdetail.value.split('&'))         openview((document.forms.simpleedit.curimpdetail.value.split('&'))
                 [document.forms.simpleedit.import.selectedIndex+1]);                  [document.forms.simpleedit.importsel.selectedIndex+1]);
    }     }
   
 </script>  </script>
Line 603  function idxcheck(mode) { Line 712  function idxcheck(mode) {
 <body bgcolor='#FFFFFF'>  <body bgcolor='#FFFFFF'>
 $buttons  $buttons
 <font color=red>$errtext</font>  <font color=red>$errtext</font>
   <h1>$url</h1>
 <form name=simpleedit method=post>  <form name=simpleedit method=post>
 <input type=hidden name=forcesmp value=1>  <input type=hidden name=forcesmp value=1>
 <table>  <table>
Line 632  after selected Line 742  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 640  $importwindow Line 750  $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 677  sub viewmap { Line 790  sub viewmap {
     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++;
     my ($title,$url)=split(/\:/,$_);      my ($title,$url)=split(/\:/,$_);
             $title=~s/\&colon\;/\:/g;              $title=~s/\&colon\;/\:/g;
             $url=~s/\&colon\;/\:/g;              $url=~s/\&colon\;/\:/g;
Line 689  sub viewmap { Line 804  sub viewmap {
             }              }
             $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>');      $r->print('<br>');
         }          }
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');
Line 738  sub handler { Line 853  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.21  
changed lines
  Added in v.1.33


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