[LON-CAPA-cvs] cvs: loncom /interface groupsort.pm

albertel lon-capa-cvs-allow@mail.lon-capa.org
Thu, 12 Jul 2007 00:27:15 -0000


This is a MIME encoded message

--albertel1184200035
Content-Type: text/plain

albertel		Wed Jul 11 20:27:15 2007 EDT

  Modified files:              
    /loncom/interface	groupsort.pm 
  Log:
  - if you have several resource deleted with the same url, it now will show
    all of them
  
  
--albertel1184200035
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20070711202715.txt"

Index: loncom/interface/groupsort.pm
diff -u loncom/interface/groupsort.pm:1.56 loncom/interface/groupsort.pm:1.57
--- loncom/interface/groupsort.pm:1.56	Wed Jul 11 19:53:59 2007
+++ loncom/interface/groupsort.pm	Wed Jul 11 20:27:13 2007
@@ -2,7 +2,7 @@
 # The LON-CAPA group sort handler
 # Allows for sorting prior to import into RAT.
 #
-# $Id: groupsort.pm,v 1.56 2007/07/11 23:53:59 albertel Exp $
+# $Id: groupsort.pm,v 1.57 2007/07/12 00:27:13 albertel Exp $
 # 
 # Copyright Michigan State University Board of Trustees
 #
@@ -82,7 +82,7 @@
 }
 
 sub readfromdb {
-    my ($r,$shash,$thash)=@_;
+    my ($r,$resources)=@_;
 
     my $diropendb = 
        "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db";
@@ -91,66 +91,40 @@
     if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
 	&update_actions_hash(\%hash);
 
-	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);
-		}
-	    }
+	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 $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;
-		    }
-		}
+	    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;
-    return ($shash,$thash);
+    untie(%hash);
 }
 
 
@@ -168,7 +142,7 @@
 # -------------------------------------------------------------- Read from file
 
 sub readfromfile {
-    my ($r,$shash,$thash,$nhash)=@_;
+    my ($r,$resources)=@_;
     my $cont=&Apache::lonnet::getfile
 	(&Apache::lonnet::filelocation('',$env{'form.readfile'}));
     if ($cont==-1) {
@@ -177,7 +151,6 @@
     } else {
         my $parser = HTML::TokeParser->new(\$cont);
         my $token;
-	my $n=1;
         while ($token = $parser->get_token) {
 	    if ($token->[0] eq 'S') {
                 if ($token->[1] eq 'resource') {
@@ -190,40 +163,39 @@
 		    my $url=$token->[2]->{'src'};
                     my $name=$token->[2]->{'title'};
 		    $name=~s/ \[\((\d+)\,($LONCAPA::username_re)\,($LONCAPA::domain_re)\)\]$//;
+		    my $note;
 		    if ($1) {
-			$$nhash{$url}='<br />'.&mt('Removed by ').
+			$note = '<br />'.&mt('Removed by ').
 			    &Apache::loncommon::plainname($2,$3).', '.
 			    &Apache::lonlocal::locallocaltime($1);
 		    }
 		    $name=~s/\&colon\;/\:/g;
-		    $$thash{$url}=$name;
-                    $$shash{$url}=$n;
-                    $n++;
+		    push(@{$resources}, {'url'   => $url,
+					 'title' => $name,
+					 'note'  => $note, });
 		}
 	    }
 	}
     }
-    return ($shash,$thash);
 }
 
 # --------------------------------------------------------- Read from bookmarks
 
 sub readfrombookmarks {
-    my ($r,$shash,$thash)=@_;
+    my ($r,$resources)=@_;
     my %bookmarks=&Apache::lonnet::dump('bookmarks');
 # the bookmark "hash" is just one entry
 # it's a javascript program code with arguments like ('title','url');
     my @bookmarks=($bookmarks{'bookmarks'}=~/\((?:\'([^\']+)\'\,\'([^\']+)\'|\"([^\"]+)\"\,\"([^\"]+)\")\)\;/g);
-    my $order=1;
     for (my $index=0;$index<($#bookmarks+1)/2;$index++) {
         if ($bookmarks[$index*2+1]) {
-	    $$thash{$bookmarks[$index*2+1]}=$bookmarks[$index*2];
-	    $$thash{$bookmarks[$index*2+1]}=~s/^LON\-CAPA\s+//;
-	    $$shash{$bookmarks[$index*2+1]}=$order;
-	    $order++;
+	    my $url  = $bookmarks[$index*2+1];
+	    my $name = $bookmarks[$index*2];
+	    $name =~ s/^LON\-CAPA\s+//;
+
+	    push(@{$resources},{'url' => $url, 'title' => $name});
 	}
     }
-    return ($shash,$thash);
 }
 
 # ---------------------------------------------------------------- Main Handler
@@ -322,20 +294,18 @@
     my $domain  = $r->dir_config('lonDefDomain');
     $iconpath = $r->dir_config('lonIconsURL') . "/";
 
-    my %shash; # sort order (key is resource location, value is sort order)
-    my %thash; # title (key is resource location, value is title)
-    my %nhash; # notes (key is resource location);
+    my @resources;
 
     if ($env{'form.readfile'}) {
-	&readfromfile($r,\%shash,\%thash,\%nhash);
+	&readfromfile($r,\@resources);
     } elsif ($env{'form.bookmarks'}) {
-	&readfrombookmarks($r,\%shash,\%thash);
+	&readfrombookmarks($r,\@resources);
     } else {
-	&readfromdb($r,\%shash,\%thash);
+	&readfromdb($r,\@resources);
     }
 
     my $ctr = 0;
-    my $clen = scalar(keys %shash);
+    my $clen = scalar(@resources);
     if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	my %lt=&Apache::lonlocal::texthash(
 		'fin'=> 'Finalize order of resources',
@@ -412,10 +382,9 @@
         $r->print(&Apache::loncommon::inhibit_menu_check('input'));
 
     }
-    foreach (sort {$shash{$a}<=>$shash{$b}} (keys %shash)) {
-	my $key=$_;
+    foreach my $resource (@resources) {
 	$ctr++;
-	my $iconname=&Apache::loncommon::icon($key);
+	my $iconname=&Apache::loncommon::icon($resource->{'url'});
 	if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	    $r->print("<tr><td bgcolor='$fileclr'>");
             if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
@@ -424,7 +393,7 @@
 		$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)  || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	    $r->print("</td>");
             unless (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
@@ -435,8 +404,8 @@
 	    $r->print("<td bgcolor='$fileclr'>");
 	    $r->print("<img src='$iconname' />");
 	    $r->print("</td><td bgcolor='$fileclr'>");
-	    $r->print("$thash{$key}$nhash{$key}</td><td bgcolor='$fileclr'>\n");
-	    $r->print("$key</td></tr>\n");
+	    $r->print($resource->{'title'}.$resource->{'notes'}."</td><td bgcolor='$fileclr'>\n");
+	    $r->print($resource->{'url'}."</td></tr>\n");
 	} 
     }
     if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {

--albertel1184200035--