Diff for /loncom/interface/groupsort.pm between versions 1.30 and 1.68.6.5

version 1.30, 2005/02/17 08:29:42 version 1.68.6.5, 2013/01/09 16:41:03
Line 26 Line 26
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # YEAR=2001  
 # YEAR=2002  
 #  
 ###  ###
   
 package Apache::groupsort;  package Apache::groupsort;
Line 40  use GDBM_File; Line 37  use GDBM_File;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   use LONCAPA qw(:DEFAULT :match);
   
 my %hash; # variable to tie to user specific database  
 my $iconpath; # variable to be accessible to multiple subroutines  my $iconpath; # variable to be accessible to multiple subroutines
   my %hash; # variable to tie to user specific database
   
   
   sub update_actions_hash {
       my ($hash) = @_;
       # be careful in here, there is also a global %hash
       my $acts=$env{'form.acts'};
       my @Acts=split(/b/,$acts);
       my %ahash;
       my %achash;
       # some initial hashes for working with data
       my $ac=0;
       foreach (@Acts) {
     my ($state,$ref)=split(/a/);
    $ahash{$ref}=$state;
    $achash{$ref}=$ac;
    $ac++;
       }
       # sorting through the actions and changing the global database hash
       foreach my $key (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
    if ($ahash{$key} eq '1') {
       $hash->{'store_'.$hash->{'pre_'.$key.'_link'}}=
    $hash->{'pre_'.$key.'_title'};
       $hash->{'storectr_'.$hash->{'pre_'.$key.'_link'}}=
    $hash->{'storectr'}+0;
       $hash->{'storectr'}++;
    }
    if ($ahash{$key} eq '0') {
       if ($hash->{'store_'.$hash->{'pre_'.$key.'_link'}}) {
    delete($hash->{'store_'.$hash->{'pre_'.$key.'_link'}});
    delete($hash->{'storectr_'.$hash->{'pre_'.$key.'_link'}});
       }
    }
       }
       # deleting the previously cached listing
       foreach my $key (keys(%{ $hash })) {
    next if ($key !~ /^pre_(\d+)_link/);
    my $which = $1;
    delete($hash->{'pre_'.$which.'_title'});
    delete($hash->{'pre_'.$which.'_link'});
       }
   }
   
   sub readfromdb {
       my ($r,$resources)=@_;
   
       my $diropendb = LONCAPA::tempdir() .
          "$env{'user.domain'}_$env{'user.name'}_sel_res.db";
   
   # ----------------------------- diropendb is now the filename of the db to open
       if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
    &update_actions_hash(\%hash);
   
    my %temp_resources;
    foreach my $key (keys(%hash)) {
       next if ($key !~ /^store_/);
       my ($url) = ($key =~ /^store_(.*)/);
       $temp_resources{$hash{'storectr_'.$url}}{'url'}=$url;
       $temp_resources{$hash{'storectr_'.$url}}{'title'}=
    &Apache::lonnet::gettitle($url);
    }
   
    # use the temp, since there might be gaps in the counting
    foreach my $item (sort {$a <=> $b} (keys(%temp_resources))) {
       push(@{ $resources },$temp_resources{$item});
    }
   
    if ($env{'form.oldval'}) {
       my $res = splice(@{$resources},$env{'form.oldval'}-1,1);
       if ($env{'form.newval'} == 0) {
    # picked 'discard'
    my $url =  $res->{'url'};
    delete($hash{'storectr_'.$url});
    delete($hash{'store_'.$url});
       } else {
    splice(@{$resources},$env{'form.newval'}-1,0,$res);
       }
    }
    # store out new order
    foreach my $which (0..$#$resources) {
       my $url =  $resources->[$which]{'url'};
       $hash{'storectr_'.$url} = $which;
    }
       } else {
    $r->print('Unable to tie hash to db file');
       }
       untie(%hash);
   }
   
   
   
 sub cleanup {  sub cleanup {
     if (tied(%hash)){      if (tied(%hash)){
Line 51  sub cleanup { Line 138  sub cleanup {
     &Apache::lonnet::logthis('Failed cleanup groupsort: hash');      &Apache::lonnet::logthis('Failed cleanup groupsort: hash');
         }          }
     }      }
       return OK;
   }
   
   # -------------------------------------------------------------- Read from file
   
   sub readfromfile {
       my ($r,$resources)=@_;
       my $cont=&Apache::lonnet::getfile
    (&Apache::lonnet::filelocation('',$env{'form.readfile'}));
       if ($cont==-1) {
    $r->print('Unable to read file: '.
     &Apache::lonnet::filelocation('',$env{'form.readfile'}));
       } else {
           my $parser = HTML::TokeParser->new(\$cont);
           my ($token,$donechk,$allmaps);
           $allmaps = {};
           while ($token = $parser->get_token) {
       if ($token->[0] eq 'S') {
                   if ($token->[1] eq 'resource') {
       if ($env{'form.recover'}) {
    if ($token->[2]->{'type'} ne 'zombie') { next; }
                           if ($token->[2]->{'src'} =~ /\.(page|sequence)$/) {
                               if (($env{'request.course.id'}) &&
                                   ($env{'form.readfile'} =~ m{/default(|_\d+)\.(page|sequence)$})) {
                                   unless ($donechk) {
                                       $allmaps = &Apache::loncommon::allmaps_incourse();
                                       $donechk = 1;
                                   }
                               }
                               if ($allmaps->{$token->[2]->{'src'}}) { next; }
                           }
       } else {
    if ($token->[2]->{'type'} eq 'zombie') { next; }
       }
   
                       my $name=$token->[2]->{'title'};
       $name=~s/ \[\((\d+)\,($LONCAPA::username_re)\,($LONCAPA::domain_re)\)\]$//;
       my $note;
       if ($1) {
    $note = '<br />'.&mt('Removed by ').
       &Apache::loncommon::plainname($2,$3).', '.
       &Apache::lonlocal::locallocaltime($1);
       }
       $name=~s/\&colon\;/\:/g;
       push(@{$resources}, {'url'   => $token->[2]->{'src'},
    'title' => $name,
    'note'  => $note,
            'id'    => $token->[2]->{'id'},});
    }
       }
    }
       }
 }  }
   
 # ---------------------------------------------------------------- Main Handler  # ---------------------------------------------------------------- Main Handler
Line 58  sub handler { Line 197  sub handler {
     my $r = shift;      my $r = shift;
     
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                            ['acts','catalogmode','mode']);       ['acts','mode','readfile','recover']);
     # color scheme  
     my $fileclr = '#ffffe6';  
     my $titleclr = '#ddffff';  
   
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
Line 69  sub handler { Line 205  sub handler {
   
 # finish_import looks different for graphical or "simple" RAT  # finish_import looks different for graphical or "simple" RAT
     my $finishimport='';      my $finishimport='';
     if ($ENV{'form.mode'} eq 'simple' || $ENV{'form.mode'} eq '') {      my $begincondition='';
       my $endcondition='';
       if (($env{'form.readfile'}))  {
           $begincondition='if (eval("document.forms.groupsort.include"+num+".checked")) {';
    $endcondition='}';
       }
       if ($env{'form.mode'} eq 'simple' || $env{'form.mode'} eq '') {
         $finishimport=(<<ENDSMP);          $finishimport=(<<ENDSMP);
 function finish_import() {  function finish_import() {
     opener.document.forms.simpleedit.importdetail.value='';      opener.document.forms.simpleedit.importdetail.value='';
     for (var num=0; num<document.forms.groupsort.fnum.value; num++) {      for (var num=0; num<document.forms.groupsort.fnum.value; num++) {
    $begincondition
  opener.document.forms.simpleedit.importdetail.value+='&'+   opener.document.forms.simpleedit.importdetail.value+='&'+
               escape(eval("document.forms.groupsort.title"+num+".value"))+'='+                eval("document.forms.groupsort.title"+num+".value")+'='+
       escape(eval("document.forms.groupsort.filelink"+num+".value"));        eval("document.forms.groupsort.filelink"+num+".value")+'='+
         eval("document.forms.groupsort.id"+num+".value");
    $endcondition
     }      }
     opener.document.forms.simpleedit.submit();      opener.document.forms.simpleedit.submit();
     self.close();      self.close();
Line 87  ENDSMP Line 232  ENDSMP
 function finish_import() {  function finish_import() {
     var linkflag=false;      var linkflag=false;
     for (var num=0; num<document.forms.groupsort.fnum.value; num++) {      for (var num=0; num<document.forms.groupsort.fnum.value; num++) {
    $begincondition
  insertRowInLastRow();   insertRowInLastRow();
  placeResourceInLastRow(   placeResourceInLastRow(
        eval("document.forms.groupsort.title"+num+".value"),         eval("document.forms.groupsort.title"+num+".value"),
         eval("document.forms.groupsort.filelink"+num+".value"),          eval("document.forms.groupsort.filelink"+num+".value"),
           eval("document.forms.groupsort.id"+num+".value"),
        linkflag         linkflag
  );   );
         linkflag=true;          linkflag=true;
    $endcondition
     }      }
     opener.editmode=0;      opener.editmode=0;
     opener.notclear=0;      opener.notclear=0;
Line 105  ENDADV Line 253  ENDADV
     }      }
   
 # output start of web page  # output start of web page
     my $html=&Apache::lonxml::xmlbegin();      my $js = <<END;
     $r->print(<<END);  <script type="text/javascript">
 $html  
 <head>  
 <title>The LearningOnline Network With CAPA Group Sorter</title>  
 <script language='javascript'>  
 function insertRowInLastRow() {  function insertRowInLastRow() {
     opener.insertrow(opener.maxrow);      opener.insertrow(opener.maxrow);
     opener.addobj(opener.maxrow,'e&2');      opener.addobj(opener.maxrow,'e&2');
 }  }
 function placeResourceInLastRow (title,url,linkflag) {  function placeResourceInLastRow (title,url,id,linkflag) {
     opener.newresource(opener.maxrow,2,opener.escape(title),      opener.mostrecent=opener.newresource(opener.maxrow,2,opener.escape(title),
        opener.escape(url),'false','normal');         opener.escape(url),'false','normal',id);
     opener.save();      opener.save();
     opener.mostrecent=opener.obj.length-1;  
     if (linkflag) {      if (linkflag) {
  opener.joinres(opener.linkmode,opener.mostrecent,0);   opener.joinres(opener.linkmode,opener.mostrecent,0);
     }      }
Line 139  function orderchange(val,newval) { Line 282  function orderchange(val,newval) {
     document.forms.groupsort.submit();      document.forms.groupsort.submit();
 }  }
 </script>  </script>
 </head>  
 END  END
     # read pertinent machine configuration      # read pertinent machine configuration
     my $domain  = $r->dir_config('lonDefDomain');      my $domain  = $r->dir_config('lonDefDomain');
     $iconpath = $r->dir_config('lonIconsURL') . "/";      $iconpath = $r->dir_config('lonIconsURL') . "/";
   
     my %shash; # sort order (key is resource location, value is sort order)      my @resources;
     my %thash; # title (key is resource location, value is title)  
   
     my $diropendb;      if ($env{'form.readfile'}) {
 # ------------------------------ which file do we open? Easy if explictly given   &readfromfile($r,\@resources);
     if ($ENV{'form.catalogmode'} eq 'groupsearch') {  
  $diropendb =   
     "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db";  
     }  
     elsif ($ENV{'form.catalogmode'} eq 'groupimport') {  
  $diropendb =   
     "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_indexer.db";  
     }  
     elsif ($ENV{'form.catalogmode'} eq 'groupsec') {  
  $diropendb =   
     "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_groupsec.db";  
     }  
 # --------------------- not explicitly given, choose the one most recently used  
     else { # choose last accessed  
         my @dbfn;  
         my @dbst;  
   
  $dbfn[0] =  
     "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db";  
         $dbst[0]=-1;  
  if (-e $dbfn[0]) {  
     $dbst[0]=(stat($dbfn[0]))[9];  
  }  
  $dbfn[1] =  
             "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_indexer.db";  
         $dbst[1]=-1;  
  if (-e $dbfn[1]) {  
             $dbst[1]=(stat($dbfn[1]))[9];  
         }  
  $dbfn[2] =  
             "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_groupsec.db";  
         $dbst[2]=-1;  
  if (-e $dbfn[2]) {  
             $dbst[2]=(stat($dbfn[2]))[9];  
         }  
 # Expand here for more modes  
 # ....  
   
 # Okay, find most recent existing  
   
         my $newest=0;  
         $diropendb='';  
         for (my $i=0; $i<=$#dbfn; $i++) {  
     if ($dbst[$i]>$newest) {  
  $newest=$dbst[$i];  
                 $diropendb=$dbfn[$i];  
             }  
         }  
   
     }  
 # ----------------------------- diropendb is now the filename of the db to open  
     if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {  
  my $acts = $ENV{'form.acts'};  
  my @Acts = split(/b/,$acts);  
  my %ahash;  
  my %achash;  
  my $ac = 0;  
  foreach (@Acts) {  
     my ($state,$ref) = split(/a/);  
     $ahash{$ref} = $state;  
     $achash{$ref} = $ac;  
     $ac++;  
  }  
  foreach (sort {$achash{$a} <=> $achash{$b}} (keys %ahash)) {  
     my $key = $_;  
     if ($ahash{$key} eq '1') {  
 # my $keyz=join("<br />",keys %hash);  
 # print "<br />$key<br />$keyz".$hash{'pre_'.$key.'_link'}."<br />\n";  
  $hash{'store_'.$hash{'pre_'.$key.'_link'}} =  
     $hash{'pre_'.$key.'_title'};  
  $hash{'storectr_'.$hash{'pre_'.$key.'_link'}} =  
     $hash{'storectr'}+0;  
  $hash{'storectr'}++;  
     }  
     if ($ahash{$key} eq '0') {  
  if ($hash{'store_'.$hash{'pre_'.$key.'_link'}}) {  
     delete $hash{'store_'.$hash{'pre_'.$key.'_link'}};  
  }  
     }  
  }  
  foreach (keys %hash) {  
     if ($_ =~ /^store_/) {  
  my $key = $_;  
  $key =~ s/^store_//;  
  $shash{$key} = $hash{'storectr_'.$key};  
  if (&Apache::lonnet::gettitle($key) eq '') {  
     $thash{$key} = $hash{'store_'.$key};  
  } else {  
     $thash{$key} = &Apache::lonnet::gettitle($key);  
  }  
     }  
  }  
  if ($ENV{'form.oldval'}) {  
     my $newctr = 0;  
     my %chash;  
     foreach (sort {$shash{$a} <=> $shash{$b}} (keys %shash)) {  
  my $key = $_;  
  $newctr++;  
  $shash{$key} = $newctr;  
  $hash{'storectr_'.$key} = $newctr;  
  $chash{$newctr} = $key;  
     }  
     my $oldval = $ENV{'form.oldval'};  
     my $newval = $ENV{'form.newval'};  
     if ($oldval != $newval) {  
  # when newval==0, then push down and delete  
  if ($newval!=0) {  
     $shash{$chash{$oldval}} = $newval;  
     $hash{'storectr_'.$chash{$oldval}} = $newval;  
  }  
  else {  
     $shash{$chash{$oldval}} = $newctr;  
     $hash{'storectr_'.$chash{$oldval}} = $newctr;  
  }  
  if ($newval==0) { # push down  
     my $newval2=$newctr;  
     for my $idx ($oldval..($newval2-1)) {  
  $shash{$chash{$idx+1}} = $idx;  
  $hash{'storectr_'.$chash{$idx+1}} = $idx;  
     }  
     delete $shash{$chash{$oldval}};  
     delete $hash{'storectr_'.$chash{$oldval}};  
     delete $hash{'store_'.$chash{$oldval}};  
  }  
  elsif ($oldval < $newval) { # push down  
     for my $idx ($oldval..($newval-1)) {  
  $shash{$chash{$idx+1}} = $idx;  
  $hash{'storectr_'.$chash{$idx+1}} = $idx;  
     }  
  }  
  elsif ($oldval > $newval) { # push up  
     for my $idx (reverse($newval..($oldval-1))) {  
  $shash{$chash{$idx}} = $idx+1;  
  $hash{'storectr_'.$chash{$idx}} = $idx+1;  
     }  
  }  
     }  
  }  
     } else {      } else {
  $r->print('Unable to tie hash to db file</body></html>');   &readfromdb($r,\@resources);
  return OK;  
     }      }
     untie %hash;  
     my $ctr = 0;      my $ctr = 0;
     my $clen = scalar(keys %shash);      my $clen = scalar(@resources);
     if ($clen > 1) {      my $title = '';
       if ($env{'form.recover'}) {
           $title = 'Recover Removed Resources';
       } else {
           $title = 'Sort Imported Resources';
       }
       if (($clen > 1) || ($env{'form.readfile'})) {
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
  'fin'=> 'Finalize order of resources',   'fin'=> 'Finalize order of resources',
  'gb' => 'Go Back',   'ci' => 'Continue Import',
  'ns' => 'New Search',   'cs' => 'Continue Search',
  'fi' => 'Finish Import',   'fi' => 'Finish Import',
    're' => 'Recover Checked',
    'ip' => 'Import Checked',
  'ca' => 'Cancel',   'ca' => 'Cancel',
  'co' => 'Change Order',   'co' => 'Change Order',
  'ti' => 'Title',   'ti' => 'Title',
  'pa' => 'Path'   'pa' => 'Path',
                   'in' => 'Include'
  );   );
  $r->print(&Apache::loncommon::bodytag('Sort Imported Resources'));  
    $r->print(&Apache::loncommon::start_page($title, $js));
    $r->print('<h1>'.&mt($title).'</h1>');
   
  $r->print(<<END);   $r->print(<<END);
 <b><font color="#888888">$lt{'fin'}</font></b>  
 <form method='post' action='/adm/groupsort' name='groupsort'  <form method='post' action='/adm/groupsort' name='groupsort'
       enctype='application/x-www-form-urlencoded'>        enctype='application/x-www-form-urlencoded'>
 <input type="hidden" name="fnum" value="$clen" />  <input type="hidden" name="fnum" value="$clen" />
 <input type="hidden" name="oldval" value="" />  <input type="hidden" name="oldval" value="" />
 <input type="hidden" name="newval" value="" />  <input type="hidden" name="newval" value="" />
 <input type="hidden" name="mode" value="$ENV{'form.mode'}" />  <input type="hidden" name="mode" value="$env{'form.mode'}" />
   <input type="hidden" name="readfile" value="$env{'form.readfile'}" />
   <input type="hidden" name="recover" value="$env{'form.recover'}" />
 END  END
   
         # --- Expand here if "GO BACK" button desired          $r->print(&Apache::loncommon::inhibit_menu_check('input'));
         if ($ENV{'form.catalogmode'} eq 'groupimport') {          # ---
             my $resurl = &Apache::loncommon::lastresurl();  
           my $buttontext = $lt{'re'};
           if ($env{'form.recover'}) {
     $r->print(<<END);      $r->print(<<END);
 <input type="button" name="alter" value="$lt{'gb'}"  <input type="button" name="alter" value="$buttontext"
  onClick="window.location='$resurl?catalogmode=groupimport'" />&nbsp;   onClick="finish_import()" />&nbsp;
   <input type="button" name="alter" value="$lt{'ca'}" onClick="self.close()" />
 END  END
         }   } else {
  if ($ENV{'form.catalogmode'} eq 'groupsearch') {          # --- Continue Buttons
       my $resurl = 
    &Apache::loncommon::escape_single(&Apache::loncommon::lastresurl());
     $r->print(<<END);      $r->print(<<END);
 <input type="button" name="alter" value="$lt{'ns'}"  <h2>$lt{'fin'}</h2>
  onClick="window.location='/adm/searchcat?catalogmode=groupsearch&cleargroupsort=1'" />&nbsp;  <div>
 END  <input type="button" name="alter" value="$lt{'ci'}"
         }   onClick="window.location='$resurl?inhibitmenu=yes&amp;catalogmode=import'" />&nbsp;
         # ---  <input type="button" name="altersearch" value="$lt{'cs'}"
    onClick="window.location='/adm/searchcat?inhibitmenu=yes&amp;catalogmode=import'" />&nbsp;
  $r->print(<<END);  
 <input type="button" name="alter" value="$lt{'fi'}"  <input type="button" name="alter" value="$lt{'fi'}"
  onClick="finish_import()" />&nbsp;   onClick="finish_import()" />&nbsp;
 <input type="button" name="alter" value="$lt{'ca'}" onClick="self.close()" />  <input type="button" name="alter" value="$lt{'ca'}" onClick="self.close()" />
   </div>
   <br />
 END  END
         $r->print("<table border='0'><tr><td bgcolor='#eeeeee'>");          }
  $r->print("<table border=0><tr>\n");  
  $r->print("<td colspan='2' bgcolor='$titleclr'><b>$lt{'co'}</b></td>\n");          # Only display header if content exists
  $r->print("<td colspan='2' bgcolor='$titleclr'><b>$lt{'ti'}</b></td>\n");          if ($clen > 0) {
  $r->print("<td bgcolor='$titleclr'><b>$lt{'pa'}</b></td></tr>\n");              $r->print(&Apache::loncommon::start_data_table()
                        .&Apache::loncommon::start_data_table_header_row());
               if (($env{'form.readfile'})) { 
                   $r->print("<th>$lt{'in'}</th>\n");
               } else { 
                   $r->print('<th colspan="2">'.$lt{'co'}.'</th>'."\n"); 
               }
               $r->print('<th colspan="2">'.$lt{'ti'}.'</th>'."\n");
               $r->print("<th>$lt{'pa'}</th>");
               $r->print(&Apache::loncommon::end_data_table_header_row()."\n");
           } else {
               my $errtxt = '';
               if ($env{'form.recover'}) {
                   $errtxt = 'There are no resources to recover.';
               } else {
                   $errtxt = 'There are no resources to import.';
               }
               $r->print('<p class="LC_info">'.&mt($errtxt).'</p>');
           }
     } else {      } else {
    $r->print(&Apache::loncommon::start_page(undef,$js,
    {'only_body' => 1}));
   #       $r->print('<h1>'.&mt($title).'</h1>');
  $r->print(<<END);   $r->print(<<END);
 <body>  
 <form method='post' action='/adm/groupsort' name='groupsort'  <form method='post' action='/adm/groupsort' name='groupsort'
       enctype='application/x-www-form-urlencoded'>        enctype='application/x-www-form-urlencoded'>
 <input type="hidden" name="fnum" value="$clen" />  <input type="hidden" name="fnum" value="$clen" />
 <input type="hidden" name="oldval" value="" />  <input type="hidden" name="oldval" value="" />
 <input type="hidden" name="newval" value="" />  <input type="hidden" name="newval" value="" />
 <input type="hidden" name="mode" value="$ENV{'form.mode'}" />  <input type="hidden" name="mode" value="$env{'form.mode'}" />
 END  END
           $r->print(&Apache::loncommon::inhibit_menu_check('input'));
   
     }      }
     foreach (sort {$shash{$a}<=>$shash{$b}} (keys %shash)) {      foreach my $resource (@resources) {
  my $key=$_;  
  $ctr++;   $ctr++;
  my $iconname=&Apache::loncommon::icon($key);   my $iconname=&Apache::loncommon::icon($resource->{'url'});
  if ($clen > 1) {   if (($clen > 1) || ($env{'form.readfile'})) {
     $r->print("<tr><td bgcolor='$fileclr'>");      $r->print(&Apache::loncommon::start_data_table_row()
     $r->print(&movers($clen,$ctr));                       ."<td>");
               if (($env{'form.readfile'})) {
    $r->print(&checkbox($ctr-1));
       } else {
    $r->print(&movers($clen,$ctr));
       }
  }   }
  $r->print(&hidden($ctr-1,$thash{$key},$key));   $r->print(&hidden($ctr-1,$resource->{'title'},$resource->{'url'},
  if ($clen > 1) {    $resource->{'id'}));
     $r->print("</td><td bgcolor='$fileclr'>");   if (($clen > 1)  || ($env{'form.readfile'})) {
     $r->print(&select_box($clen,$ctr));      $r->print("</td>");
     $r->print("</td><td bgcolor='$fileclr'>");              unless (($env{'form.readfile'})) {
    $r->print("<td>".
     &select_box($clen,$ctr).
     "</td>");
       }
       $r->print("<td>");
     $r->print("<img src='$iconname' />");      $r->print("<img src='$iconname' />");
     $r->print("</td><td bgcolor='$fileclr'>");      $r->print("</td><td>");
     $r->print("$thash{$key}</td><td bgcolor='$fileclr'>\n");              if (($env{'form.recover'}) &&
     $r->print("$key</td></tr>\n");                  ($resource->{'url'} =~ m{/uploaded/$match_domain/$match_courseid/supplemental/})) {
                   my $title = &Apache::loncommon::parse_supplemental_title($resource->{'title'});
                   $r->print($title);
               } else {
                   $r->print($resource->{'title'});
               }
               $r->print($resource->{'notes'}."</td><td>\n");
       $r->print($resource->{'url'}."</td>"
                        .&Apache::loncommon::end_data_table_row()
                        ."\n");
  }    } 
     }      }
     if ($clen > 1) {      if (($clen > 1) || ($env{'form.readfile'})) {
  $r->print("</table></td></tr></table></form>");          if ($clen > 0) {
               $r->print(&Apache::loncommon::end_data_table());
           }
           $r->print('</form>');
     } else {      } else {
  $r->print(<<END);   $r->print(<<END);
 <script type="text/javascript">  <script type="text/javascript">
Line 382  END Line 446  END
 </script>  </script>
 END  END
     }      }
     $r->print(<<END);  
 </body>      $r->print(&Apache::loncommon::end_page());
 </html>  
 END  
   
     return OK;      return OK;
 }  }
   
 # --------------------------------------- Hidden values (returns scalar string)  # --------------------------------------- Hidden values (returns scalar string)
 sub hidden {  sub hidden {
     my ($sel,$title,$filelink) = @_;      my ($sel,$title,$filelink,$id) = @_;
     my $string = '<input type="hidden" name="title'.$sel.'" value="'.$title.      my $string = '<input type="hidden" name="title'.$sel.'" value="'.
  '" />';   &escape($title).'" />';
       $filelink=~s|^/ext/|http://|;
     $string .= '<input type="hidden" name="filelink'.$sel.'" value="'.      $string .= '<input type="hidden" name="filelink'.$sel.'" value="'.
  $filelink.'" />';   &escape($filelink).'" />';
       $string .= '<input type="hidden" name="id'.$sel.'" value="'.&escape($id).'" />';
     return $string;      return $string;
 }  }
   
Line 425  sub select_box { Line 489  sub select_box {
     my $string;      my $string;
     $string = '<select name="alt'.$sel.'"';      $string = '<select name="alt'.$sel.'"';
     $string .= " onChange='selectchange($sel)'>";      $string .= " onChange='selectchange($sel)'>";
     $string .= "<option name='o0' value='0'>remove</option>";      $string .= "<option name='o0' value='0'>".&mt('discard')."</option>";
     for my $cur (1..$total) {      for my $cur (1..$total) {
  $string .= "<option name='o$cur' value='$cur'";   $string .= "<option name='o$cur' value='$cur'";
  if ($cur == $sel) {   if ($cur == $sel) {
Line 437  sub select_box { Line 501  sub select_box {
     return $string;      return $string;
 }  }
   
   # ------------------------------------------------------------------- Checkbox
   
   sub checkbox {
       my $sel=shift;
       return "<label><input type='checkbox' name='include$sel'".
          ($env{"form.include$sel"}?' checked="checked"':'').
          ' />'.&mt('Include').'</label>';
   }
   
 1;  1;
   
 __END__  __END__
   
   =pod
   
   =head1 NAME
   
   Apache::groupsort.pm
   
   =head1 SYNOPSIS
   
   Implements a second phase of importing
   multiple resources into the RAT. Allows for
   reordering the sequence of resources
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   
   =head1 NOTABLE SUBROUTINES
   
   =over
   
   =item 
   
   =back
   
   =cut
   

Removed from v.1.30  
changed lines
  Added in v.1.68.6.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.