Diff for /rat/lonratedt.pm between versions 1.46 and 1.62

version 1.46, 2003/07/25 04:14:32 version 1.62, 2004/11/17 19:59:29
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (TeX Content Handler  
 #  
 # 05/29/00,05/30 Gerd Kortemeyer)  
 # 7/1,6/30 Gerd Kortemeyer  
   
 package Apache::lonratedt;  package Apache::lonratedt;
   
Line 173  use Apache::lonnet; Line 170  use Apache::lonnet;
 use Apache::lonratsrv;  use Apache::lonratsrv;
 use Apache::lonsequence;  use Apache::lonsequence;
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonlocal;
 use File::Copy;  use File::Copy;
   
 use vars qw(@order @resources);  use vars qw(@order @resources @resparms);
   
   
 # Mapread read maps into global arrays @links and @resources, determines status  # Mapread read maps into global arrays @links and @resources, determines status
Line 189  sub mapread { Line 187  sub mapread {
     undef @links;      undef @links;
     undef @resources;      undef @resources;
     undef @order;      undef @order;
       undef @resparms;
     @resources=('');      @resources=('');
     @order=();      @order=();
       @resparms=();
   
     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 205  sub mapread { Line 205  sub mapread {
             $links[$number]=$content;              $links[$number]=$content;
         }          }
         if ($command eq 'objparms') {          if ($command eq 'objparms') {
     return('Map has resource parameters. Use advanced editor.',1);      if ($resparms[$number]) {
    $resparms[$number].='&&&'.$content;
       } else {
    $resparms[$number]=$content;
       }
         }          }
     }      }
 # ------------------------------------------------------- Is this a linear map?  # ------------------------------------------------------- Is this a linear map?
Line 219  sub mapread { Line 223  sub mapread {
     my ($start,$end,$cond)=split(/\:/,$_);      my ($start,$end,$cond)=split(/\:/,$_);
             if ((defined($starters[$start])) || (defined($endings[$end]))) {               if ((defined($starters[$start])) || (defined($endings[$end]))) { 
  return   return
                  ('Map has branchings. Use advanced editor.',1);                   (&mt('Map has branchings. Use advanced editor.'),1);
             }              }
     $starters[$start]=1;      $starters[$start]=1;
     $endings[$end]=1;      $endings[$end]=1;
     if ($cond) {      if ($cond) {
  return   return
                  ('Map has conditions. Use advanced editor.',1);                   (&mt('Map has conditions. Use advanced editor.'),1);
             }              }
  }   }
   
Line 234  sub mapread { Line 238  sub mapread {
         if (defined($resources[$i])) {          if (defined($resources[$i])) {
     unless (($starters[$i]) || ($endings[$i])) {      unless (($starters[$i]) || ($endings[$i])) {
                 return                  return
  ('Map has unconnected resources. Use advanced editor.',1);   (&mt('Map has unconnected resources. Use advanced editor.'),1);
             }              }
         }          }
     }      }
Line 413  sub buttons { Line 417  sub buttons {
     my $adv=shift;      my $adv=shift;
     my $output='<form method=post>';           my $output='<form method=post>';     
     if ($adv==1) {      if ($adv==1) {
  $output.='<input type=submit name=forceadv value="Edit">';   $output.='<input type=submit name=forceadv value="'.&mt('Edit').'">'.
       &Apache::loncommon::help_open_topic('Sequence_Advanced_Editor_Creation');;
     } else {      } else {
         unless ($adv==2) {          unless ($adv==2) {
            $output.='<input type=submit name=forcesmp value="Simple Edit">';             $output.='<input type=submit name=forcesmp value="'.&mt('Simple Edit').'">'.
       &Apache::loncommon::help_open_topic('Sequence_Simple_Editor_Creation');
         }          }
  $output.='<input type=submit name=forceadv value="Advanced Edit">';   $output.='<input type=submit name=forceadv value="'.&mt('Advanced Edit').'">'.
       &Apache::loncommon::help_open_topic('Sequence_Advanced_Editor_Creation');
     }      }
     return $output.'</form><hr>';      return $output.'</form><hr>';
 }  }
Line 510  sub storemap { Line 517  sub storemap {
         if (defined($resources[$order[$i]])) {          if (defined($resources[$order[$i]])) {
     $output.='<&>objcont<:>'.$order[$i].'<:>'.$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($order[$i+1])) {
     if (defined($resources[$order[$i+1]])) {      if (defined($resources[$order[$i+1]])) {
                $output.='<&>objlinks<:>'.$k.'<:>'.                 $output.='<&>objlinks<:>'.$k.'<:>'.
Line 524  sub storemap { Line 538  sub storemap {
      &Apache::lonratsrv::loadmap($fn,&Apache::lonratsrv::savemap($fn,''));       &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
 sub editscript {  sub editscript {
     my $mode=shift;      my $mode=shift;
       my $resurl=&Apache::loncommon::lastresurl();
     return(<<ENDSCRIPT);      return(<<ENDSCRIPT);
 var srch;  var srch;
 var srchflag=-1; // 1 means currently open  var srchflag=-1; // 1 means currently open
Line 570  function idxopen(mode) { Line 637  function idxopen(mode) {
    var options="scrollbars=1,resizable=1,menubar=0";     var options="scrollbars=1,resizable=1,menubar=0";
    idxmode=mode;     idxmode=mode;
    idxflag=1;     idxflag=1;
    idx=open("/res/?launch=1&mode=$mode&catalogmode="+mode,"idxout",options);     idx=open("$resurl/?launch=1&mode=$mode&catalogmode="+mode,"idxout",options);
    idx.focus();     idx.focus();
 }  }
   
Line 609  function idxcheck(mode) { Line 676  function idxcheck(mode) {
   
     var editbrowser;      var editbrowser;
     function openbrowser(formname,elementname,only,omit) {      function openbrowser(formname,elementname,only,omit) {
         var url = '/res/?';          var url = '$resurl/?';
         if (editbrowser == null) {          if (editbrowser == null) {
             url += 'launch=1&';              url += 'launch=1&';
         }          }
Line 639  sub smpedt { Line 706  sub smpedt {
    my $tmpfn=&Apache::lonnet::filelocation('',$url).'.tmp';     my $tmpfn=&Apache::lonnet::filelocation('',$url).'.tmp';
    my $targetmsg='';     my $targetmsg='';
    if ($ENV{'form.save'}) {     if ($ENV{'form.save'}) {
        $targetmsg='<b>Saving ...</b><br>';  
        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),'');                             &mapread(&Apache::lonnet::filelocation('',$url),'');
          unless ($fatal) {
      $targetmsg='<b>'.&mt('Saved.').'</b><br />';
          } else {
      $targetmsg='<b>'.&mt('An error occured while saving.').'</b><br />';
          }
    }     }
    if ($ENV{'form.revert'}) {     if ($ENV{'form.revert'}) {
        $targetmsg='<b>Reverting ...</b><br>';         $targetmsg='<b>'.&mt('Reverted.').'</b><br />';
        unlink($tmpfn);         unlink($tmpfn);
        my ($errtext,$fatal)=         my ($errtext,$fatal)=
                            &mapread(&Apache::lonnet::filelocation('',$url),'');                             &mapread(&Apache::lonnet::filelocation('',$url),'');
    }     }
    if (-e $tmpfn) {     if (-e $tmpfn) {
       $targetmsg=        $targetmsg=
         '<b><font color="red">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)=&mapread($tmpfn,'');
    }     }
 # ---------------------------------------------------------- Process form input  # ---------------------------------------------------------- Process form input
Line 877  sub smpedt { Line 948  sub smpedt {
    $importdetail='&'.$importdetail;     $importdetail='&'.$importdetail;
    $importdetail=~s/^\&+/\&/;     $importdetail=~s/^\&+/\&/;
    my $importwindow=     my $importwindow=
        '<option value="-1"> ---- Import and Paste Area ---- </option>'.         '<option value="-1"> ---- '.&mt('Import and Paste Area').' ---- </option>'.
      join("\n",map {       join("\n",map {
        $idx++;         $idx++;
        if ($_) {          if ($_) { 
Line 892  sub smpedt { Line 963  sub smpedt {
    $idx=0;     $idx=0;
    $targetdetail='';     $targetdetail='';
    my $targetwindow=            my $targetwindow=       
        '<option value="0"> ------- 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(/\:/,$resources[$_]);
        unless ($name) {  $name=(split(/\//,$url))[-1]; }         unless ($name) {  $name=(split(/\//,$url))[-1]; }
Line 906  sub smpedt { Line 977  sub smpedt {
   
 # ----------------------------------------------------- Start simple RAT screen  # ----------------------------------------------------- Start simple RAT screen
    my $editscript=&editscript('simple');     my $editscript=&editscript('simple');
    my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1);     my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,
    ($ENV{'environment.remote'} ne 'off')).
          &Apache::loncommon::help_open_menu('','Sequence_Simple_Editor_Creation','Sequence_Simple_Editor_Creation','',6,'RAT');
      my %lt=&Apache::lonlocal::texthash(
         'sa' => 'Save',
         'nt' => 'New Title',
         'se' => 'Search',
         'im' => 'Import',
         'vi' => 'View',
         'lm' => 'Load Map',
         'ds' => 'Discard Selected',
         'ca' => 'Clear All',
         'ta' => 'Temporary Assembly Workspace',
         'rv' => 'Revert to Last Saved',
                                         'sa' => 'Save',
                                         'mu' => 'Move Up',
                                         'md' => 'Move Down',
                                         're' => 'Rename',
                                         'as' => 'after selected',
                                         'cs' => 'Cut selected',
                                         'ps' => 'Copy selected',
                                         'pas' => 'Paste after selected',
         );
    $r->print(<<ENDSMPHEAD);     $r->print(<<ENDSMPHEAD);
 <html>  <html>
 <head>  <head>
Line 943  sub smpedt { Line 1036  sub smpedt {
        oldname=unescape(nameparts.join('"'));         oldname=unescape(nameparts.join('"'));
        nameparts=oldname.split('&#39;');         nameparts=oldname.split('&#39;');
        oldname=unescape(nameparts.join("'"));         oldname=unescape(nameparts.join("'"));
        newtitle=prompt('New Title',oldname);         newtitle=prompt('$lt{'nt'}',oldname);
        if (newtitle) {         if (newtitle) {
            document.forms.simpleedit.renameres.value=1;             document.forms.simpleedit.renameres.value=1;
            document.forms.simpleedit.renameidx.value=selidx;             document.forms.simpleedit.renameidx.value=selidx;
Line 963  $buttons Line 1056  $buttons
 <input type=hidden name=renametitle value=''>  <input type=hidden name=renametitle value=''>
 <input type=hidden name=renameidx value=0>  <input type=hidden name=renameidx value=0>
 <table>  <table>
     <tr><th width="40%">Temporary Assembly Workspace</th>      <tr><th width="40%">$lt{'ta'}</th>
 <th>&nbsp;</th>  <th>&nbsp;</th>
 <th width="40%">File: $url</th></tr>  <th width="40%">File: $url</th></tr>
 <tr><td bgcolor="#FFFFCC">  <tr><td bgcolor="#FFFFCC">
 <input type=button onClick="javascript:groupsearch()" value="Search">  <input type=button onClick="javascript:groupsearch()" value="$lt{'se'}">
 <input type=button onClick="javascript:groupimport();" value="Import">  <input type=button onClick="javascript:groupimport();" value="$lt{'im'}">
 after selected  $lt{'as'}
 <hr>  <hr>
 <input type=text size=20 name=importmap>  <input type=text size=20 name=importmap>
 <input type=button   <input type=button 
 onClick="javascript:openbrowser('simpleedit','importmap','sequence,page','')"  onClick="javascript:openbrowser('simpleedit','importmap','sequence,page','')"
 value="Select Map"><input type=submit name=loadmap value="Load Map"><hr>  value="Select Map"><input type=submit name=loadmap value="$lt{'lm'}"><hr>
 <input type=submit name="discard" value="Discard Selected">  <input type=submit name="discard" value="$lt{'ds'}">
 <input type=submit name="clear" value="Clear All">  <input type=submit name="clear" value="$lt{'ca'}">
 <input type=button onClick="javascript:viewimport()" value="View">  <input type=button onClick="javascript:viewimport()" value="$lt{'vi'}">
   
     </td><td>&nbsp;</td><td bgcolor="#FFFFCC">      </td><td>&nbsp;</td><td bgcolor="#FFFFCC">
   
 <input type=button onClick=  <input type=button onClick=
 "javascript:impfortarget.value=1;groupsearch()" value="Search">  "javascript:impfortarget.value=1;groupsearch()" value="$lt{'se'}">
 <input type=button onClick=  <input type=button onClick=
 "javascript:impfortarget.value=1;groupimport();" value="Import">  "javascript:impfortarget.value=1;groupimport();" value="$lt{'im'}">
 after selected  $lt{'as'}
 <hr>  <hr>
 <input type=submit name="moveup" value="Move Up">  <input type=submit name="moveup" value="$lt{'mu'}">
 <input type=submit name="movedown" value="Move Down">  <input type=submit name="movedown" value="$lt{'md'}">
 <input type=button onClick="javascript:renametarget()" value="Rename">  <input type=button onClick="javascript:renametarget()" value="$lt{'re'}">
 <hr>$targetmsg  <hr>$targetmsg
 <input type=submit name="revert" value="Revert to Last Saved">  <input type=submit name="revert" value="$lt{'rv'}">
 <input type=submit name="save" value="Save">  <input type=submit name="save" value="$lt{'sa'}">
 <input type=button onClick="javascript:viewtarget()" value="View">  <input type=button onClick="javascript:viewtarget()" value="$lt{'vi'}">
 </td></tr>  </td></tr>
   
 <tr><td bgcolor="#FFFFCC"><select name="importsel" size=10 multiple>  <tr><td bgcolor="#FFFFCC"><select name="importsel" size=10 multiple>
Line 1001  $importwindow Line 1094  $importwindow
 </select>  </select>
 </td>  </td>
 <td bgcolor="#FFFFAA" align="center">  <td bgcolor="#FFFFAA" align="center">
 Cut selected<br>  $lt{'cs'}<br>
 <input type=submit name=cut value='<<<'><p>  <input type=submit name=cut value='<<<'><p>
 <hr>  <hr>
 Copy selected<br>  $lt{'ps'}<br>
 <input type=submit name=copy value='<--'><p>  <input type=submit name=copy value='<--'><p>
 <hr>  <hr>
 Paste after selected<br>  $lt{'pas'}<br>
 <input type=submit name=paste value='-->'>  <input type=submit name=paste value='-->'>
 </td>  </td>
 <td bgcolor="#FFFFCC"><select name="target" size=10 multiple>  <td bgcolor="#FFFFCC"><select name="target" size=10 multiple>
Line 1042  sub viewmap { Line 1135  sub viewmap {
     my ($r,$url,$adv,$errtext)=@_;      my ($r,$url,$adv,$errtext)=@_;
     $r->print('<html>'.      $r->print('<html>'.
      &Apache::loncommon::bodytag('Edit Content of a Map').       &Apache::loncommon::bodytag('Edit Content of a Map').
      &buttons($adv));        &Apache::loncommon::help_open_menu('','','','',6,'RAT').
         &buttons($adv));
     if ($errtext) {      if ($errtext) {
  $r->print($errtext.'<hr>');   $r->print($errtext.'<hr />');
     }      }
     my $idx=0;      my $idx=0;
     $r->print('<h1>'.$url.'</h1>');      $r->print('<h1>'.$url.'</h1>');
     if ($adv) {      if ($adv) {
  $r->print('<p><b><font color="red">Map contents are not shown in order.</font></b></p><br />');   $r->print('<p><b><font color="red">'.&mt('Map contents are not shown in order.').'</font></b></p><br />');
     }      }
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
  if (defined($_)) {   if (defined($_)) {
             $idx++;              $idx++;
     my ($title,$url)=split(/\:/,$_);      my ($title,$url,$cond)=split(/\:/,$_);
       if ($cond eq 'cond') { next; }
             $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] };
Line 1064  sub viewmap { Line 1159  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 />\n");
         }          }
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');
Line 1074  sub viewmap { Line 1169  sub viewmap {
   
 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;
     my $target = $ENV{'form.grade_target'};
     if ($target eq 'meta') {
         &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;
         return OK;
     }
     
   my $url=$r->uri;    my $url=$r->uri;
   my $fn=&Apache::lonnet::filelocation('',$url);    my $fn=&Apache::lonnet::filelocation('',$url);
   

Removed from v.1.46  
changed lines
  Added in v.1.62


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