Diff for /loncom/interface/lonparmset.pm between versions 1.379 and 1.381

version 1.379, 2007/09/03 15:34:12 version 1.381, 2007/09/11 01:59:30
Line 2582  sub extractuser { Line 2582  sub extractuser {
     return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./);      return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./);
 }  }
   
   sub parse_listdata_key {
       my ($key,$listdata) = @_;
       # split into student/section affected, and
       # the realm (folder/resource part and parameter
       my ($student,$realm) = 
    ($key=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)$/);
       # if course wide student would be undefined
       if (!defined($student)) {
    ($realm)=($key=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
       }
       # strip off the .type if it's not the Question type parameter
       if ($realm=~/\.type$/ && !exists($listdata->{$key.'.type'})) {
    $realm=~s/\.type//;
       }
       # split into resource+part and parameter name
       my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/);
       my ($res, $part) = ($res  =~/^(.*)\.(.*)$/);
       return ($student,$res,$part,$parm);
   }
   
 sub listdata {  sub listdata {
     my ($r,$resourcedata,$listdata,$sortorder)=@_;      my ($r,$resourcedata,$listdata,$sortorder)=@_;
 # Start list output  # Start list output
Line 2593  sub listdata { Line 2613  sub listdata {
     $tableopen=0;      $tableopen=0;
     my $foundkeys=0;      my $foundkeys=0;
     my %keyorder=&standardkeyorder();      my %keyorder=&standardkeyorder();
   
     foreach my $thiskey (sort {      foreach my $thiskey (sort {
    my ($astudent,$ares,$apart,$aparm) = &parse_listdata_key($a,$listdata);
    my ($bstudent,$bres,$bpart,$bparm) = &parse_listdata_key($b,$listdata);
   
    # get the numerical order for the param
    $aparm=$keyorder{'parameter_0_'.$aparm};
    $bparm=$keyorder{'parameter_0_'.$bparm};
   
    my $result=0;
   
  if ($sortorder eq 'realmstudent') {   if ($sortorder eq 'realmstudent') {
     my ($astudent,$arealm)=($a=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/);              if ($ares     ne $bres    ) {
     my ($bstudent,$brealm)=($b=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/);   $result = ($ares     cmp $bres);
     if (!defined($astudent)) {              } elsif ($astudent ne $bstudent) { 
  ($arealm)=($a=~/^\Q$env{'request.course.id'}\E\.(.+)$/);   $result = ($astudent cmp $bstudent);
     }      } elsif ($apart    ne $bpart   ) {
     if (!defined($bstudent)) {   $result = ($apart    cmp $bpart);
  ($brealm)=($b=~/^\Q$env{'request.course.id'}\E\.(.+)$/);  
     }  
     $arealm=~s/\.type//;  
     my ($ares, $aparm) = ($arealm=~/^(.*)\.(.*)$/);  
     $aparm=$keyorder{'parameter_0_'.$aparm};  
     $brealm=~s/\.type//;  
     my ($bres, $bparm) = ($brealm=~/^(.*)\.(.*)$/);  
     $bparm=$keyorder{'parameter_0_'.$bparm};     
     if ($ares eq $bres) {  
  if (defined($aparm) && defined($bparm)) {  
     ($aparm <=> $bparm);  
  } elsif (defined($aparm)) {  
     -1;  
  } elsif (defined($bparm)) {  
     1;  
  } else {  
     ($arealm cmp $brealm) || ($astudent cmp $bstudent);  
  }  
     } else {  
  ($arealm cmp $brealm) || ($astudent cmp $bstudent);  
     }      }
  } else {   } else {
     $a cmp $b;      if      ($astudent ne $bstudent) { 
    $result = ($astudent cmp $bstudent);
       } elsif ($ares     ne $bres    ) {
    $result = ($ares     cmp $bres);
       } elsif ($apart    ne $bpart   ) {
    $result = ($apart    cmp $bpart);
       }
    }
       
    if (!$result) {
               if (defined($aparm) && defined($bparm)) {
    $result = ($aparm <=> $bparm);
               } elsif (defined($aparm)) {
    $result = -1;
               } elsif (defined($bparm)) {
    $result = 1;
       }
  }   }
   
    $result;
     } keys %{$listdata}) {      } keys %{$listdata}) {
     
  if ($$listdata{$thiskey.'.type'}) {   if ($$listdata{$thiskey.'.type'}) {
             my $thistype=$$listdata{$thiskey.'.type'};              my $thistype=$$listdata{$thiskey.'.type'};
             if ($$resourcedata{$thiskey.'.type'}) {              if ($$resourcedata{$thiskey.'.type'}) {
Line 3082  where $action is add or drop, and $clone Line 3110  where $action is add or drop, and $clone
 user for whom cloning ability is to be changed in course.   user for whom cloning ability is to be changed in course. 
   
 =cut  =cut
                                                                                               
 ##################################################  ##################################################
 ##################################################  ##################################################
   
 sub extract_cloners {  sub extract_cloners {
     my ($clonelist,$allowclone) = @_;      my ($clonelist,$allowclone) = @_;
     if ($clonelist =~ /,/) {      if ($clonelist =~ /,/) {
         @{$allowclone} = split/,/,$clonelist;          @{$allowclone} = split(/,/,$clonelist);
     } else {      } else {
         $$allowclone[0] = $clonelist;          $$allowclone[0] = $clonelist;
     }      }
Line 3101  sub check_cloners { Line 3129  sub check_cloners {
     my @allowclone = ();      my @allowclone = ();
     &extract_cloners($$clonelist,\@allowclone);      &extract_cloners($$clonelist,\@allowclone);
     foreach my $currclone (@allowclone) {      foreach my $currclone (@allowclone) {
         if (!grep/^\Q$currclone\E$/,@$oldcloner) {          if (!grep(/^\Q$currclone\E$/,@$oldcloner)) {
             if ($currclone eq '*') {              if ($currclone eq '*') {
                 $clean_clonelist .= $currclone.',';                  $clean_clonelist .= $currclone.',';
             } else {              } else {
                 my ($uname,$udom) = split(/:/,$currclone);                  my ($uname,$udom) = split(/:/,$currclone);
                 if ($uname eq '*') {                  if ($uname eq '*') {
                     if ($udom =~ /^$match_domain$/) {                      if ($udom =~ /^$match_domain$/) {
                         my @alldoms = &Apache::lonnet::all_domains();                          if (!&Apache::lonnet::domain($udom)) {
                         if (!grep(/^\Q$udom\E$/,@alldoms)) {  
                             $disallowed{'domain'} .= $currclone.',';                              $disallowed{'domain'} .= $currclone.',';
                         } else {                          } else {
                             $clean_clonelist .= $currclone.',';                              $clean_clonelist .= $currclone.',';
Line 3152  sub change_clone { Line 3179  sub change_clone {
         my @allowclone;          my @allowclone;
         &extract_cloners($clonelist,\@allowclone);          &extract_cloners($clonelist,\@allowclone);
         foreach my $currclone (@allowclone) {          foreach my $currclone (@allowclone) {
             if (!grep/^$currclone$/,@$oldcloner) {              if (!grep(/^$currclone$/,@$oldcloner)) {
                 if ($currclone ne '*') {                  if ($currclone ne '*') {
                     ($uname,$udom) = split/:/,$currclone;                      ($uname,$udom) = split(/:/,$currclone);
                     if ($uname && $udom && $uname ne '*') {                      if ($uname && $udom && $uname ne '*') {
                         if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {                          if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {
                             my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');                              my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
Line 3172  sub change_clone { Line 3199  sub change_clone {
             }              }
         }          }
         foreach my $oldclone (@$oldcloner) {          foreach my $oldclone (@$oldcloner) {
             if (!grep/^$oldclone$/,@allowclone) {              if (!grep(/^\Q$oldclone\E$/,@allowclone)) {
                 if ($oldclone ne '*') {                  if ($oldclone ne '*') {
                     ($uname,$udom) = split/:/,$oldclone;                      ($uname,$udom) = split(/:/,$oldclone);
                     if ($uname && $udom && $uname ne '*' ) {                      if ($uname && $udom && $uname ne '*' ) {
                         if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {                          if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {
                             my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');                              my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');

Removed from v.1.379  
changed lines
  Added in v.1.381


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