Diff for /loncom/interface/lonparmset.pm between versions 1.492 and 1.499

version 1.492, 2010/01/30 17:35:10 version 1.499, 2010/07/01 00:08:28
Line 248  Variables used (guessed by Jeremy): Line 248  Variables used (guessed by Jeremy):
   
 =item parse_key()  =item parse_key()
   
 =item check_cloners() :  
   
 Checks if new users included in list of allowed cloners  
 are valid users.  Replaces supplied list with   
 cleaned list containing only users with valid usernames  
 and domains.  
   
 Inputs: $clonelist, $oldcloner   
 where $clonelist is ref to array of requested cloners,  
 and $oldcloner is ref to array of currently allowed  
 cloners.  
   
 Returns: string - comma separated list of requested  
 cloners (username:domain) who do not exist in system.  
   
 =item change_clone() :  
   
 Modifies the list of courses a user can clone (stored  
 in the user's environment.db file), called when a  
 change is made to the list of users allowed to clone  
 a course.  
   
 Inputs: $action,$cloner  
 where $action is add or drop, and $cloner is identity of   
 user for whom cloning ability is to be changed in course.   
   
   
 =item check_cloners()  
   
 =item change_clone()  
   
 =item header()  =item header()
   
 Output html header for page  Output html header for page
Line 1716  sub displaymenu { Line 1685  sub displaymenu {
 }  }
   
 sub mapmenu {  sub mapmenu {
     my ($r,$allmaps,$pschp,$maptitles, $symbp)=@_;      my ($r,$allmaps,$pschp,$maptitles,$symbp)=@_;
     my %allmaps_inverted = reverse %$allmaps;      my %allmaps_inverted = reverse %$allmaps;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     my $tree=[];      my $tree=[];
     my $treeinfo={};      my $treeinfo={};
     if (defined($navmap)) {      if (defined($navmap)) {
         my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);          my $it=$navmap->getIterator(undef,undef,undef,1,1,undef);
         my $curRes;          my $curRes;
         my $depth = 0;          my $depth = 0;
         my %parent = ();          my %parent = ();
Line 1767  sub mapmenu { Line 1736  sub mapmenu {
     $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Enclosing Map or Folder'),'','',' id="mapmenu"'));      $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Enclosing Map or Folder'),'','',' id="mapmenu"'));
     if ((ref($tree) eq 'ARRAY') && (ref($treeinfo) eq 'HASH')) {      if ((ref($tree) eq 'ARRAY') && (ref($treeinfo) eq 'HASH')) {
         my $icon = '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />';          my $icon = '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />';
         $r->print(&Apache::loncommon::start_data_table()          my $whitespace =
                  .&Apache::loncommon::start_data_table_row()              '<img src="'
                  .'<td>'.$icon             .&Apache::loncommon::lonhttpdurl('/adm/lonIcons/whitespace_21.gif')
                  .'<label>&nbsp;'             .'" alt="" />';
                  .'<input type="radio" name="pschp" checked="checked" value="all" />'  
                  .&mt('All Maps or Folders')          # Info about selectable folders/maps
                  .'</label></td>'          $r->print(
                  .&Apache::loncommon::end_data_table_row()              '<div class="LC_info">'
              .&mt('You can only select those maps and folders which can be currently parameterized.')
            # .' '.&Apache::loncommon::help_open_topic('...') # Later: Add further help
              .'</div>'
           );
   
   
           $r->print(&Apache::loncommon::start_data_table());
   
           # Display row: "All Maps or Folders"
           $r->print(
               &Apache::loncommon::start_data_table_row()
              .'<td>'
              .'<label>'
              .'<input type="radio" name="pschp"'
           );
           $r->print(' checked="checked"') if ($pschp eq 'all' || !$pschp);
           $r->print(
               ' value="all" />&nbsp;'.$icon.'&nbsp;'
              .&mt('All Maps or Folders')
              .'</label>'
              .'<hr /></td>'
              .&Apache::loncommon::end_data_table_row()
         );          );
         my $whitespace = '<img src="'  
                         .&Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace_21.gif")          # Display row: "Main Course Documents"
                         .'" alt="" />';  
         if (exists($$allmaps{1})) {          if (exists($$allmaps{1})) {
             $r->print(&Apache::loncommon::start_data_table_row()              $r->print(
                 .'<td>'.$icon                  &Apache::loncommon::start_data_table_row()
                 .'<label>&nbsp;'                 .'<td>'
                 .'<input type="radio" name="pschp" value="1"'                 .'<label>'
                  .'<input type="radio" name="pschp" value="1"'
             );              );
             if ($pschp eq 1) {              $r->print(' checked="checked"') if ($pschp eq '1');
                 $r->print(' checked="checked"');              $r->print(
             }                  '/>&nbsp;'.$icon.'&nbsp;'
             $r->print('/>'                 .$$maptitles{1}
                 .$$maptitles{1}                 .($$allmaps{1} !~/^uploaded/?' ['.$$allmaps{1}.']':'')
                 .($$allmaps{1} !~/^uploaded/?' ['.$$allmaps{1}.']':'')                 .'</label>'
                 .'</label>'                 .'</td>'
                 .'</td>'                 .&Apache::loncommon::end_data_table_row()
                 .&Apache::loncommon::end_data_table_row()  
             );              );
         }          }
   
           # Display rows for all course maps and folders
         foreach my $id (@{$tree}) {          foreach my $id (@{$tree}) {
             my ($mapid,$resid)=split(/\./,$id);              my ($mapid,$resid)=split(/\./,$id);
             # Indentation              # Indentation
Line 1811  sub mapmenu { Line 1803  sub mapmenu {
             my $symb_name = $$symbp{$id};              my $symb_name = $$symbp{$id};
             my ($front, $tail) = split (/___${resid}___/, $symb_name);              my ($front, $tail) = split (/___${resid}___/, $symb_name);
             $symb_name = $tail;              $symb_name = $tail;
             $r->print(&Apache::loncommon::start_data_table_row()              $r->print(
                      .'<td>'.$indent.$icon                  &Apache::loncommon::start_data_table_row()
                      .'<label>&nbsp;'                 .'<td>'
                      .'<input type ="radio" name="pschp" value="'.$allmaps_inverted{$symb_name}.'"'                 .'<label>'
             );              );
             if ($pschp eq $allmaps_inverted{$symb_name}) {              # Only offer radio button for folders/maps which can be parameterized
                 $r->print(' checked="checked"');              if ($allmaps_inverted{$symb_name}) {
                   $r->print(
                       '<input type ="radio" name="pschp"'
                      .' value="'.$allmaps_inverted{$symb_name}.'"'
                   );
                   $r->print(' checked="checked"') if ($allmaps_inverted{$symb_name} eq $pschp);
                   $r->print('/>');
               } else {
                   $r->print($whitespace);
             }              }
             $r->print('/>'              $r->print(
                      .$treeinfo->{$id}->{name}                  $indent.$icon.'&nbsp;'
                      .($$allmaps{$mapid}!~/^uploaded/?' ['.$$allmaps{$mapid}.']':'')                 .$treeinfo->{$id}->{name}
                      .'</label>'                 .($$allmaps{$mapid}!~/^uploaded/?' ['.$$allmaps{$mapid}.']':'')
                      .'</td>'                 .'</label>'
                      .&Apache::loncommon::end_data_table_row()                 .'</td>'
                  .&Apache::loncommon::end_data_table_row()
             );              );
         }          }
   
         $r->print(&Apache::loncommon::end_data_table());          $r->print(&Apache::loncommon::end_data_table());
     }      }
 }  }
Line 3020  sub date_interval_selector { Line 3022  sub date_interval_selector {
     my %select = ((map {$_ => $_} (0..$max)),      my %select = ((map {$_ => $_} (0..$max)),
               'select_form_order' => [0..$max]);                'select_form_order' => [0..$max]);
     $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,      $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,
                            %select);                             \%select);
     $result .= ' '.&mt($name);      $result .= ' '.&mt($name);
     }      }
     $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';      $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';
Line 3503  sub parse_key { Line 3505  sub parse_key {
 }  }
   
   
   
 sub extract_cloners {  
     my ($clonelist,$allowclone) = @_;  
     if ($clonelist =~ /,/) {  
         @{$allowclone} = split(/,/,$clonelist);  
     } else {  
         $$allowclone[0] = $clonelist;  
     }  
 }  
   
 sub check_cloners {  
     my ($clonelist,$oldcloner) = @_;  
     my ($clean_clonelist,%disallowed);  
     my @allowclone = ();  
     &extract_cloners($$clonelist,\@allowclone);  
     foreach my $currclone (@allowclone) {  
         if (!grep(/^\Q$currclone\E$/,@$oldcloner)) {  
             if ($currclone eq '*') {  
                 $clean_clonelist .= $currclone.',';  
             } else {  
                 my ($uname,$udom) = split(/:/,$currclone);  
                 if ($uname eq '*') {  
                     if ($udom =~ /^$match_domain$/) {  
                         if (!&Apache::lonnet::domain($udom)) {  
                             $disallowed{'domain'} .= $currclone.',';  
                         } else {  
                             $clean_clonelist .= $currclone.',';  
                         }  
                     } else {  
                         $disallowed{'format'} .= $currclone.',';  
                     }  
                 } elsif ($currclone !~/^($match_username)\:($match_domain)$/) {  
                     $disallowed{'format'} .= $currclone.',';  
                 } else {  
                     if (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {  
                         $disallowed{'newuser'} .= $currclone.',';  
                     } else {  
                         $clean_clonelist .= $currclone.',';  
                     }  
                 }  
             }  
         } else {  
             $clean_clonelist .= $currclone.',';  
         }  
     }  
     foreach my $key (keys(%disallowed)) {  
         $disallowed{$key} =~ s/,$//;  
     }  
     if ($clean_clonelist) {  
         $clean_clonelist =~ s/,$//;  
     }  
     $$clonelist = $clean_clonelist;  
     return %disallowed;  
 }  
   
 sub change_clone {  
     my ($clonelist,$oldcloner) = @_;  
     my ($uname,$udom);  
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
     my $clone_crs = $cnum.':'.$cdom;  
   
     if ($cnum && $cdom) {  
         my @allowclone;  
         &extract_cloners($clonelist,\@allowclone);  
         foreach my $currclone (@allowclone) {  
             if (!grep(/^$currclone$/,@$oldcloner)) {  
                 if ($currclone ne '*') {  
                     ($uname,$udom) = split(/:/,$currclone);  
                     if ($uname && $udom && $uname ne '*') {  
                         if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {  
                             my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');  
                             if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) {  
                                 if ($currclonecrs{'cloneable'} eq '') {  
                                     $currclonecrs{'cloneable'} = $clone_crs;  
                                 } else {  
                                     $currclonecrs{'cloneable'} .= ','.$clone_crs;  
                                 }  
                                 &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname);  
                             }  
                         }  
                     }  
                 }  
             }  
         }  
         foreach my $oldclone (@$oldcloner) {  
             if (!grep(/^\Q$oldclone\E$/,@allowclone)) {  
                 if ($oldclone ne '*') {  
                     ($uname,$udom) = split(/:/,$oldclone);  
                     if ($uname && $udom && $uname ne '*' ) {  
                         if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {  
                             my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');  
                             my %newclonecrs = ();  
                             if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) {  
                                 if ($currclonecrs{'cloneable'} =~ /,/) {  
                                     my @currclonecrs = split/,/,$currclonecrs{'cloneable'};  
                                     foreach my $crs (@currclonecrs) {  
                                         if ($crs ne $clone_crs) {  
                                             $newclonecrs{'cloneable'} .= $crs.',';  
                                         }  
                                     }  
                                     $newclonecrs{'cloneable'} =~ s/,$//;  
                                 } else {  
                                     $newclonecrs{'cloneable'} = '';  
                                 }  
                                 &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname);  
                             }  
                         }  
                     }  
                 }  
             }  
         }  
     }  
 }  
   
   
   
 sub header {  sub header {
     return &Apache::loncommon::start_page('Parameter Manager');      return &Apache::loncommon::start_page('Parameter Manager');
 }  }
Line 3647  ENDMAINFORMHEAD Line 3532  ENDMAINFORMHEAD
     my @menu =      my @menu =
         ( { categorytitle=>"Settings for this $crstype",          ( { categorytitle=>"Settings for this $crstype",
         items => [          items => [
           { linktext => "$crstype Configuration",  
             url => '/adm/courseprefs?origin=params',  
             permission => $parm_permission,  
             linktitle => "Edit $lc_crstype configuration."  ,  
             icon => 'preferences-desktop-remote-desktop.png'  ,  
             #help => 'Course_Environment',  
             },  
           { linktext => 'Portfolio Metadata',            { linktext => 'Portfolio Metadata',
             url => '/adm/parmset?action=setrestrictmeta',              url => '/adm/parmset?action=setrestrictmeta',
             permission => $parm_permission,              permission => $parm_permission,
             linktitle => "Restrict metadata for this $lc_crstype." ,              linktitle => "Restrict metadata for this $lc_crstype." ,
             icon =>'contact-new.png'   ,              icon =>'contact-new.png'   ,
             },              },
           { linktext => "Manage $crstype Slots",  
             url => '/adm/slotrequest?command=showslots',  
             permission => $vgr,  
             linktitle => "Manage slots for this $lc_crstype."  ,  
             icon => 'rsrv.png'  ,  
             },  
           { linktext => 'Reset Student Access Times',            { linktext => 'Reset Student Access Times',
             url => '/adm/helper/resettimes.helper',              url => '/adm/helper/resettimes.helper',
             permission => $mgr,              permission => $mgr,

Removed from v.1.492  
changed lines
  Added in v.1.499


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