[LON-CAPA-cvs] cvs: rat / lonsequence.pm

www lon-capa-cvs@mail.lon-capa.org
Fri, 24 May 2002 14:44:32 -0000


www		Fri May 24 10:44:32 2002 EDT

  Modified files:              
    /rat	lonsequence.pm 
  Log:
  Stores away in db-file. Still bug: exports one file less than checked.
  
  
Index: rat/lonsequence.pm
diff -u rat/lonsequence.pm:1.11 rat/lonsequence.pm:1.12
--- rat/lonsequence.pm:1.11	Thu May 23 11:07:55 2002
+++ rat/lonsequence.pm	Fri May 24 10:44:32 2002
@@ -2,7 +2,7 @@
 #
 # Sequence Handler
 #
-# $Id: lonsequence.pm,v 1.11 2002/05/23 15:07:55 www Exp $
+# $Id: lonsequence.pm,v 1.12 2002/05/24 14:44:32 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -46,18 +46,8 @@
 use Apache::lonratsrv;
 use Apache::lonpageflip;
 
-# ----------------------------------------------------------- Could not resolve
-
-sub getlost {
-    my ($r,$errmsg)=@_;
-    $r->content_type('text/html');
-    $r->send_http_header;
-    $r->print(
- '<head><title>Unknown Error</title></head><body bgcolor="#FFFFFF"><h1>'.
- 'LON-CAPA</h1>Could not handle sequence resource reference.<p>'.$errmsg.
- '</body></html>');
-}
-
+my %selhash;
+my $successtied;
 
 # ----------------------------------------- Attempt to read from resource space
 
@@ -80,7 +70,7 @@
 <script>
 
 function select_group() {
-    window.location="/adm/groupsort?catalogmode=groupimport&mode=rat&acts="+document.forms.fileattr.acts.value;
+    window.location="/adm/groupsort?catalogmode=groupsec&mode=rat&acts="+document.forms.fileattr.acts.value;
 }
 
 function queue(val) {
@@ -100,6 +90,7 @@
 ENDSCRIPT
     }
     $r->print('<body bgcolor="#FFFFFF">');
+# ------------------ This is trying to select. Provide buttons and tie %selhash
     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()">
@@ -107,12 +98,64 @@
 onClick="javascript:select_group()">
 </form>   
 ENDSELECT
+    my $diropendb = 
+    "/home/httpd/perl/tmp/$ENV{'user.domain'}\_$ENV{'user.name'}_groupsec.db";
+        if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
+	    if ($ENV{'form.launch'} eq '1') {
+	       &start_fresh_session();
+	    }
+            $successtied=1;
+
+# - Evaluate actions from previous page (both cumulatively and chronologically)
+        if ($ENV{'form.catalogmode'} eq 'groupimport') {
+	    my $acts=$ENV{'form.acts'};
+	    my @Acts=split(/b/,$acts);
+	    my %ahash;
+	    my %achash;
+	    my $ac=0;
+	    # some initial hashes for working with data
+	    foreach (@Acts) {
+		my ($state,$ref)=split(/a/);
+		$ahash{$ref}=$state;
+		$achash{$ref}=$ac;
+		$ac++;
+	    }
+	    # sorting through the actions and changing the tied database hash
+	    foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
+		my $key=$_;
+		if ($ahash{$key} eq '1') {
+		    $selhash{'store_'.$selhash{'pre_'.$key.'_link'}}=
+			$selhash{'pre_'.$key.'_title'};
+		    $selhash{'storectr_'.$selhash{'pre_'.$key.'_link'}}=
+			$selhash{'storectr'}+0;
+		    $selhash{'storectr'}++;
+		}
+		if ($ahash{$key} eq '0') {
+		    if ($selhash{'store_'.$selhash{'pre_'.$key.'_link'}}) {
+		       delete $selhash{'store_'.$selhash{'pre_'.$key.'_link'}};
+		    }
+		}
+	    }
+	    # deleting the previously cached listing
+	    foreach (keys %selhash) {
+		if ($_ =~ /^pre_/ && $_ =~/link$/) {
+		    my $key = $_;
+		    $key =~ s/^pre_//;
+		    $key =~ s/_[^_]*$//;
+		    delete $selhash{'pre_'.$key.'_title'};
+		    delete $selhash{'pre_'.$key.'_link'};
+		}
+	    }
+	}
+# -
+        }
     }
+# ----------------------------- successtied is now '1' if in working selectmode
     my $idx=0;
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
 	if (defined($_)) {
             $idx++;
-            if ($ENV{'form.forceselect'}) { 
+            if ($successtied) { 
 		$r->print('<form name="form'.$idx.'">');
             }
 	    my ($title,$url)=split(/\:/,$_);
@@ -121,10 +164,17 @@
             unless ($title) { $title=(split(/\//,$url))[-1] };
             unless ($title) { $title='<i>Empty</i>'; }
             if ($url) {
-		if ($ENV{'form.forceselect'}) {
+		if ($successtied) {
+		    my $checked='';
+	           if ($selhash{'store_'.$url}) {
+	       	      $checked=" checked";
+	           }
+	           $selhash{"pre_${idx}_link"}=$url;
+	           $selhash{"pre_${idx}_title"}=$title;
+
 		    $r->print(<<ENDCHECKBOX);
 <input type='checkbox' name='filelink' 
-value='$url' onClick='javascript:queue("form$idx")' >
+value='$url' onClick='javascript:queue("form$idx")'$checked>
 <input type='hidden' name='title' value='$title'>
 ENDCHECKBOX
                 }
@@ -132,7 +182,7 @@
             }
             $r->print(&Apache::lonratsrv::qtescape($title));
             if ($url) { $r->print('</a>'); }
-            if ($ENV{'form.forceselect'}) {
+            if ($successtied) {
 		$r->print('</form>');
             } else {
 		$r->print('<br>');
@@ -140,8 +190,24 @@
         }
     }
     $r->print('</body></html>');
+    if ($successtied) {
+	untie %selhash;
+    }
 }
 
+# ----------------------------------------------------------- Clean out selhash
+sub start_fresh_session {
+    foreach (keys %selhash) {
+	if ($_ =~ /^pre_/) {
+	    delete $selhash{$_};
+	}
+	if ($_ =~ /^store/) {
+	    delete $selhash{$_};
+	}
+    }
+}
+
+
 # ================================================================ Main Handler
 
 sub handler {
@@ -154,12 +220,13 @@
    }
  
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-                                          ['forceselect']);
+                                          ['forceselect','launch']);
 
    my %hash;
    my %bighash;
    my $requrl=$r->uri;
 
+   $successtied=0;
 # ------------------------------------------------------------ Tie symb db file
   my $disurl='';
   my $dismapid='';