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

version 1.379, 2007/09/03 15:34:12 version 1.383, 2007/10/17 00:27:44
Line 2124  sub crsenv { Line 2124  sub crsenv {
                 if ($name eq 'cloners') {                  if ($name eq 'cloners') {
                     &change_clone($value,\@oldcloner);                      &change_clone($value,\@oldcloner);
                 }                  }
                 # Flush the course logs so course description is immediately updated                  # Update environment and nohist_courseids.db
                 if ($name eq 'description' && defined($value)) {                  if ($name eq 'description' && defined($value)) {
                     &Apache::lonnet::flushcourselogs();                      my %crsinfo = 
                           &Apache::lonnet::courseiddump($dom,'.',1,'.','.',
                                                    $crs,undef,undef,'Course');
                       &Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.description' => $value);
                       if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') {
                           $crsinfo{$env{'request.course.id'}}{'description'} = $value; 
                           my $chome = &Apache::lonnet::homeserver($crs,$dom);
                           my $putresult =
                               &Apache::lonnet::courseidput($dom,\%crsinfo,
                                                            $chome,'notime');
                       }
                 }                  }
             } else {              } else {
                 $setoutput.=&mt('Unable to set').' <b>'.$name.'</b> '.&mt('to').                  $setoutput.=&mt('Unable to set').' <b>'.$name.'</b> '.&mt('to').
Line 2582  sub extractuser { Line 2592  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 2623  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   ) {
    $result = ($apart    cmp $bpart);
     }      }
     if (!defined($bstudent)) {   } else {
  ($brealm)=($b=~/^\Q$env{'request.course.id'}\E\.(.+)$/);      if      ($astudent ne $bstudent) { 
    $result = ($astudent cmp $bstudent);
       } elsif ($ares     ne $bres    ) {
    $result = ($ares     cmp $bres);
       } elsif ($apart    ne $bpart   ) {
    $result = ($apart    cmp $bpart);
     }      }
     $arealm=~s/\.type//;   }
     my ($ares, $aparm) = ($arealm=~/^(.*)\.(.*)$/);      
     $aparm=$keyorder{'parameter_0_'.$aparm};   if (!$result) {
     $brealm=~s/\.type//;              if (defined($aparm) && defined($bparm)) {
     my ($bres, $bparm) = ($brealm=~/^(.*)\.(.*)$/);   $result = ($aparm <=> $bparm);
     $bparm=$keyorder{'parameter_0_'.$bparm};                 } elsif (defined($aparm)) {
     if ($ares eq $bres) {   $result = -1;
  if (defined($aparm) && defined($bparm)) {              } elsif (defined($bparm)) {
     ($aparm <=> $bparm);   $result = 1;
  } elsif (defined($aparm)) {  
     -1;  
  } elsif (defined($bparm)) {  
     1;  
  } else {  
     ($arealm cmp $brealm) || ($astudent cmp $bstudent);  
  }  
     } else {  
  ($arealm cmp $brealm) || ($astudent cmp $bstudent);  
     }      }
  } else {  
     $a cmp $b;  
  }   }
   
    $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 2701  sub listdata { Line 2739  sub listdata {
 '<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'.  '<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'.
 &date_sanity_info($$resourcedata{$thiskey})  &date_sanity_info($$resourcedata{$thiskey})
   );    );
     } elsif ($thistype eq 'string_yesno') {      } elsif ($thistype =~ m/^string/) {
  my $showval;   $r->print(&string_selector($thistype,$thiskey,
  if (defined($$resourcedata{$thiskey})) {     $$resourcedata{$thiskey}));
     $showval=$$resourcedata{$thiskey};  
  }  
  $r->print('<label><input type="radio" name="set_'.$thiskey.  
   '" value="yes"');  
  if ($showval eq 'yes') {  
     $r->print(' checked="checked"');  
  }  
                 $r->print(' />'.&mt('Yes').'</label> ');  
  $r->print('<label><input type="radio" name="set_'.$thiskey.  
   '" value="no"');  
  if ($showval eq 'no') {  
     $r->print(' checked="checked"');  
  }  
                 $r->print(' />'.&mt('No').'</label>');  
     } else {      } else {
  my $showval;   $r->print(&default_selector($thiskey,$$resourcedata{$thiskey}));
  if (defined($$resourcedata{$thiskey})) {  
     $showval=$$resourcedata{$thiskey};  
  }  
  $r->print('<input type="text" name="set_'.$thiskey.'" value="'.  
   $showval.'">');  
     }      }
     $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.      $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.
       $thistype.'">');        $thistype.'">');
Line 2734  sub listdata { Line 2753  sub listdata {
     return $foundkeys;      return $foundkeys;
 }  }
   
   sub default_selector {
       my ($thiskey, $showval) = @_;
       return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'">' ;
   }
   
   my %strings = 
       (
        'string_yesno'
                => [[ 'yes', 'Yes' ],
    [ 'no', 'No' ]],
        'string_problemstatus'
                => [[ 'yes', 'Yes' ],
    [ 'no', 'No, don\'t show correct/incorrect feedback.' ],
    [ 'no_feedback_ever', 'No, show no feedback at all.' ]],
        );
   
   
   sub string_selector {
       my ($thistype, $thiskey, $showval) = @_;
       
       if (!exists($strings{$thistype})) {
    return &default_selector($thiskey,$showval);
       }
   
       my $result;
       foreach my $possibilities (@{ $strings{$thistype} }) {
    my ($name, $description) = @{ $possibilities };
    $result .= '<label><input type="radio" name="set_'.$thiskey.
     '" value="'.$name.'"';
    if ($showval eq $name) {
       $result .= ' checked="checked"';
    }
    $result .= ' />'.&mt($description).'</label> ';
       }
       return $result;
   }
   
 sub newoverview {  sub newoverview {
     my ($r) = @_;      my ($r) = @_;
   
Line 2964  ENDOVER Line 3020  ENDOVER
  next if (!exists($resourcedata->{$thiskey.'.type'})   next if (!exists($resourcedata->{$thiskey.'.type'})
  && $thiskey=~/\.type$/);   && $thiskey=~/\.type$/);
  my %data = &parse_key($thiskey);   my %data = &parse_key($thiskey);
  if (exists($data{'realm_exists'})   if (1) { #exists($data{'realm_exists'})
     && !$data{'realm_exists'}) {      #&& !$data{'realm_exists'}) {
     $r->print(&Apache::loncommon::start_data_table_row().      $r->print(&Apache::loncommon::start_data_table_row().
       '<tr>'.        '<tr>'.
       '<td><input type="checkbox" name="del_'.$thiskey.'" /></td>'      );        '<td><input type="checkbox" name="del_'.$thiskey.'" /></td>'      );
Line 3082  where $action is add or drop, and $clone Line 3138  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 3157  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 3207  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 3227  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.383


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