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

raeburn raeburn@source.lon-capa.org
Sun, 08 Feb 2009 21:04:01 -0000


This is a MIME encoded message

--raeburn1234127041
Content-Type: text/plain

raeburn		Sun Feb  8 21:04:01 2009 EDT

  Modified files:              
    /loncom/interface	domainprefs.pm 
  Log:
  Work on ability of individual users to request creation of (a) official courses,
   and (b) unofficial courses.
  
  &print_quotas() accepts additional argument - $action 
    - 'quotas' to display options for setting portfoilo/blog/aboutme availability or portfolio quota 
    - 'requestcourses' to display options for setting rights to request official/unofficial courses
  
  &modify_quotas() - argument changed. New arg ($action) added between two existing args.
    - 'quotas' to store changes for domain defaults for user tools availability.
    - 'requestcourses' to store changes for domain defaults for rights to request course creation.
  
  
--raeburn1234127041
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20090208210401.txt"

Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.85 loncom/interface/domainprefs.pm:1.86
--- loncom/interface/domainprefs.pm:1.85	Tue Jan 27 15:59:30 2009
+++ loncom/interface/domainprefs.pm	Sun Feb  8 21:04:01 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.85 2009/01/27 15:59:30 schafran Exp $
+# $Id: domainprefs.pm,v 1.86 2009/02/08 21:04:01 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -74,11 +74,12 @@
       &Apache::lonnet::get_dom('configuration',['login','rolecolors',
                 'quotas','autoenroll','autoupdate','directorysrch',
                 'usercreation','usermodification','contacts','defaults',
-                'scantron','coursecategories','serverstatuses'],$dom);
+                'scantron','coursecategories','serverstatuses',
+                'requestcourses'],$dom);
     my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
                        'autoupdate','directorysrch','contacts',
                        'usercreation','usermodification','scantron',
-                       'coursecategories','serverstatuses');
+                       'requestcourses','coursecategories','serverstatuses');
     my %prefs = (
         'rolecolors' =>
                    { text => 'Default color schemes',
@@ -165,6 +166,12 @@
                                  col2 => '',
                               }],
                   },
+        'requestcourses' => 
+                 {text => 'Request creation of courses',
+                  help => 'Domain_Configuration_Request_Courses',
+                  header => [{col1 => 'User affiliation',
+                              col2 => 'Requestable course types',}],
+                 },
         'coursecategories' =>
                   { text => 'Cataloging of courses',
                     help => 'Domain_Configuration_Cataloging_Courses',
@@ -363,7 +370,7 @@
         $output = &modify_rolecolors($r,$dom,$confname,$roles,
                                      %domconfig);
     } elsif ($action eq 'quotas') {
-        $output = &modify_quotas($dom,%domconfig);
+        $output = &modify_quotas($dom,$action,%domconfig);
     } elsif ($action eq 'autoenroll') {
         $output = &modify_autoenroll($dom,%domconfig);
     } elsif ($action eq 'autoupdate') {
@@ -384,6 +391,8 @@
         $output = &modify_coursecategories($dom,%domconfig);
     } elsif ($action eq 'serverstatuses') {
         $output = &modify_serverstatuses($dom,%domconfig);
+    } elsif ($action eq 'requestcourses') {
+        $output = &modify_quotas($dom,$action,%domconfig);
     }
     return $output;
 }
@@ -544,7 +553,7 @@
         if ($action eq 'login') {
             $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
         } elsif ($action eq 'quotas') {
-            $output .= &print_quotas($dom,$settings,\$rowtotal);
+            $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         } elsif ($action eq 'autoenroll') {
             $output .= &print_autoenroll($dom,$settings,\$rowtotal);
         } elsif ($action eq 'directorysrch') {
@@ -557,6 +566,8 @@
             $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
         } elsif ($action eq 'serverstatuses') {
             $output .= &print_serverstatuses($dom,$settings,\$rowtotal);
+        } elsif ($action eq 'requestcourses') {
+            $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         }
     }
     $output .= '
@@ -1236,21 +1247,33 @@
 }
 
 sub print_quotas {
-    my ($dom,$settings,$rowtotal) = @_;
-    my $datatable;
+    my ($dom,$settings,$rowtotal,$action) = @_;
+    my $context;
+    if ($action eq 'quotas') {
+        $context = 'tools';
+    } else {
+        $context = $action;
+    }
+    my ($datatable,$defaultquota,@usertools);
     my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my $typecount = 0;
     my $css_class;
-    my @usertools = ('aboutme','blog','portfolio');
+    if ($context eq 'requestcourses') {
+        @usertools = ('official','unofficial');
+    } else {
+        @usertools = ('aboutme','blog','portfolio');
+    }
     my %titles = &tool_titles();
     if (ref($types) eq 'ARRAY') {
         foreach my $type (@{$types}) {
             my $currdefquota;
-            if (ref($settings) eq 'HASH') {
-                if (ref($settings->{defaultquota}) eq 'HASH') {
-                    $currdefquota = $settings->{defaultquota}->{$type}; 
-                } else {
-                    $currdefquota = $settings->{$type};
+            unless ($context eq 'requestcourses') {
+                if (ref($settings) eq 'HASH') {
+                    if (ref($settings->{defaultquota}) eq 'HASH') {
+                        $currdefquota = $settings->{defaultquota}->{$type}; 
+                    } else {
+                        $currdefquota = $settings->{$type};
+                    }
                 }
             }
             if (defined($usertypes->{$type})) {
@@ -1260,32 +1283,44 @@
                               '<td>'.$usertypes->{$type}.'</td>'.
                               '<td class="LC_left_item">';
                 foreach my $item (@usertools) {
-                    my $checked = 'checked="checked" ';
+                    my $checked;
+                    unless ($context eq 'requestcourses') {
+                        $checked = 'checked="checked" ';
+                    }
                     if (ref($settings) eq 'HASH') {
                         if (ref($settings->{$item}) eq 'HASH') {
                             if ($settings->{$item}->{$type} == 0) {
                                 $checked = '';
+                            } elsif ($settings->{$item}->{$type} == 1) {
+                                $checked =  'checked="checked" ';
                             }
                         }
                     }
                     $datatable .= '<span class="LC_nobreak"><label>'.
-                                  '<input type="checkbox" name="tools_'.$item.
+                                  '<input type="checkbox" name="'.$context.'_'.$item.
                                   '" value="'.$type.'" '.$checked.'/>'.$titles{$item}.
                                   '</label></span>&nbsp; ';
                 }
-                $datatable .= '</td><td class="LC_right_item"><span class="LC_nobreak">'.
+                $datatable .= '</td>';
+                unless ($context eq 'requestcourses') {
+                    $datatable .= 
+                              '<td class="LC_right_item"><span class="LC_nobreak">'.
                               '<input type="text" name="quota_'.$type.
                               '" value="'.$currdefquota.
-                              '" size="5" /> Mb</span></td></tr>';
+                              '" size="5" /> Mb</span></td>';
+                }
+                $datatable .= '</tr>';
             }
         }
     }
-    my $defaultquota = '20';
-    if (ref($settings) eq 'HASH') {
-        if (ref($settings->{'defaultquota'}) eq 'HASH') {
-            $defaultquota = $settings->{'defaultquota'}->{'default'};
-        } elsif (defined($settings->{'default'})) {
-            $defaultquota = $settings->{'default'};
+    unless ($context eq 'requestcourses') {
+        $defaultquota = '20';
+        if (ref($settings) eq 'HASH') {
+            if (ref($settings->{'defaultquota'}) eq 'HASH') {
+                $defaultquota = $settings->{'defaultquota'}->{'default'};
+            } elsif (defined($settings->{'default'})) {
+                $defaultquota = $settings->{'default'};
+            }
         }
     }
     $typecount ++;
@@ -1294,38 +1329,52 @@
                   '<td>'.$othertitle.'</td>'.
                   '<td class="LC_left_item">';
     foreach my $item (@usertools) {
-        my $checked = 'checked="checked" ';
+        my $checked;
+        unless ($context eq 'requestcourses') {
+            $checked = 'checked="checked" ';
+        }
         if (ref($settings) eq 'HASH') {
             if (ref($settings->{$item}) eq 'HASH') {
                 if ($settings->{$item}->{'default'} == 0) {
                     $checked = '';
+                } elsif ($settings->{$item}->{'default'} == 1) {
+                    $checked = 'checked="checked" ';
                 }
             }
         }
         $datatable .= '<span class="LC_nobreak"><label>'.
-                      '<input type="checkbox" name="tools_'.$item.
+                      '<input type="checkbox" name="'.$context.'_'.$item.
                       '" value="default" '.$checked.'/>'.$titles{$item}.
                       '</label></span>&nbsp; ';
     }
-    $datatable .= '</td><td class="LC_right_item"><span class="LC_nobreak">'.
-                  '<input type="text" name="defaultquota" value="'.
-                  $defaultquota.'" size="5" /> Mb</span></td></tr>';
+    $datatable .= '</td>';
+    unless ($context eq 'requestcourses') {
+        $datatable .= '<td class="LC_right_item"><span class="LC_nobreak">'.
+                      '<input type="text" name="defaultquota" value="'.
+                      $defaultquota.'" size="5" /> Mb</span></td>';
+    }
+    $datatable .= '</tr>';
     $typecount ++;
     $css_class = $typecount%2?' class="LC_odd_row"':'';
     $datatable .= '<tr'.$css_class.'>'.
                   '<td><br/>'.&mt('LON-CAPA Advanced Users').'</td>'.
                   '<td class="LC_left_item" colspan="2"><br />';
     foreach my $item (@usertools) {
-        my $checked = 'checked="checked" ';
+        my $checked;
+        unless ($context eq 'requestcourses') {
+            $checked = 'checked="checked" ';
+        }
         if (ref($settings) eq 'HASH') {
             if (ref($settings->{$item}) eq 'HASH') {
                 if ($settings->{$item}->{'_LC_adv'} == 0) {
                     $checked = '';
+                } elsif ($settings->{$item}->{'_LC_adv'} == 1) {
+                    $checked = 'checked="checked" ';
                 }
             }
         }
         $datatable .= '<span class="LC_nobreak"><label>'.
-                      '<input type="checkbox" name="tools_'.$item.
+                      '<input type="checkbox" name="'.$context.'_'.$item.
                       '" value="_LC_adv" '.$checked.'/>'.$titles{$item}.
                       '</label></span>&nbsp; ';
     }
@@ -1653,10 +1702,11 @@
 
 sub tool_titles {
     my %titles = &Apache::lonlocal::texthash (
-                                              aboutme   => 'Personal Home Page',
-                                              blog      => 'Blog',
-                                              portfolio => 'Portfolio',
-                                             );
+                     aboutme    => 'Personal Home Page',
+                     blog       => 'Blog',
+                     portfolio  => 'Portfolio',
+                     official   => 'Official courses (with institutional codes)',                      unofficial => 'Unofficial courses',
+                 );
     return %titles;
 }
 
@@ -3504,21 +3554,36 @@
 }
 
 sub modify_quotas {
-    my ($dom,%domconfig) = @_;
+    my ($dom,$action,%domconfig) = @_;
+    my ($context,@usertools);
+    if ($action eq 'quotas') {
+        $context = 'tools'; 
+    } else { 
+        $context = $action;
+    }
+    if ($context eq 'requestcourses') {
+        @usertools = ('official','unofficial');
+    } else {
+        @usertools = ('aboutme','blog','portfolio');
+    }
     my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
     my ($resulttext,%changes);
     my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
-    my @usertools = ('aboutme','blog','portfolio');
     my %titles = &tool_titles();
     my (%confhash,%toolshash);
     foreach my $key (keys(%env)) {
-        if ($key =~ /^form\.quota_(.+)$/) {
-            $confhash{'defaultquota'}{$1} = $env{$key};
-        } elsif ($key =~ /^form\.tools_(.+)$/) {
+        unless ($context eq 'requestcourses') {
+            if ($key =~ /^form\.quota_(.+)$/) {
+                $confhash{'defaultquota'}{$1} = $env{$key};
+            }
+        }
+        if ($key =~ /^form\.\Q$context\E_(.+)$/) {
             @{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key);
         }
     }
-    $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'};
+    unless ($context eq 'requestcourses') {
+        $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'};
+    }
     foreach my $item (@usertools) {
         foreach my $type (@{$types},'default','_LC_adv') {
             if (grep(/^\Q$type\E$/,@{$toolshash{$item}})) {
@@ -3526,60 +3591,74 @@
             } else {
                 $confhash{$item}{$type} = 0;
             }
-            if (ref($domconfig{'quotas'}) eq 'HASH') {
-                if (ref($domconfig{'quotas'}{$item}) eq 'HASH') {
-                    if ($domconfig{'quotas'}{$item}{$type} ne $confhash{$item}{$type}) {
+            if (ref($domconfig{$action}) eq 'HASH') {
+                if (ref($domconfig{$action}{$item}) eq 'HASH') {
+                    if ($domconfig{$action}{$item}{$type} ne $confhash{$item}{$type}) {
                         $changes{$item}{$type} = 1;
                     }
                 } else {
-                    if (!$confhash{$item}{$type}) {
-                        $changes{$item}{$type} = 1;
+                    if ($context eq 'requestcourses') {
+                        if ($confhash{$item}{$type}) {
+                            $changes{$item}{$type} = 1;
+                        }
+                    } else {
+                        if (!$confhash{$item}{$type}) {
+                            $changes{$item}{$type} = 1;
+                        }
                     }
                 }
             } else {
-                if (!$confhash{$item}{$type}) {
-                    $changes{$item}{$type} = 1;
+                if ($context eq 'requestcourses') {
+                    if ($confhash{$item}{$type}) {
+                        $changes{$item}{$type} = 1;
+                    }
+                } else {
+                    if (!$confhash{$item}{$type}) {
+                        $changes{$item}{$type} = 1;
+                    }
                 }
             }
         }
     }
-    if (ref($domconfig{'quotas'}) eq 'HASH') {
-        if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
-            foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) {
-                if (exists($confhash{'defaultquota'}{$key})) {
-                    if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{'defaultquota'}{$key}) {
-                        $changes{'defaultquota'}{$key} = 1;
+    unless ($context eq 'requestcourses') {
+        if (ref($domconfig{'quotas'}) eq 'HASH') {
+            if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
+                foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) {
+                    if (exists($confhash{'defaultquota'}{$key})) {
+                        if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{'defaultquota'}{$key}) {
+                            $changes{'defaultquota'}{$key} = 1;
+                        }
+                    } else {
+                        $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{'defaultquota'}{$key};
                     }
-                } else {
-                    $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{'defaultquota'}{$key};
                 }
-            }
-        } else {
-            foreach my $key (keys(%{$domconfig{'quotas'}})) {
-                if (exists($confhash{'defaultquota'}{$key})) {
-                    if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{$key}) {
-                        $changes{'defaultquota'}{$key} = 1;
+            } else {
+                foreach my $key (keys(%{$domconfig{'quotas'}})) {
+                    if (exists($confhash{'defaultquota'}{$key})) {
+                        if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{$key}) {
+                            $changes{'defaultquota'}{$key} = 1;
+                        }
+                    } else {
+                        $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{$key};
                     }
-                } else {
-                    $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{$key};
                 }
             }
         }
-    }
-    if (ref($confhash{'defaultquota'}) eq 'HASH') {
-        foreach my $key (keys(%{$confhash{'defaultquota'}})) {
-            if (ref($domconfig{'quotas'}) eq 'HASH') {
-                if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
-                    if (!exists($domconfig{'quotas'}{'defaultquota'}{$key})) {
-                        $changes{'defaultquota'}{$key} = 1;
+        if (ref($confhash{'defaultquota'}) eq 'HASH') {
+            foreach my $key (keys(%{$confhash{'defaultquota'}})) {
+                if (ref($domconfig{'quotas'}) eq 'HASH') {
+                    if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
+                        if (!exists($domconfig{'quotas'}{'defaultquota'}{$key})) {
+                            $changes{'defaultquota'}{$key} = 1;
+                        }
+                    } else {
+                        if (!exists($domconfig{'quotas'}{$key})) {
+                            $changes{'defaultquota'}{$key} = 1;
+                        }
                     }
                 } else {
-                    if (!exists($domconfig{'quotas'}{$key})) {
-                        $changes{'defaultquota'}{$key} = 1;
-                    }
+                    $changes{'defaultquota'}{$key} = 1;
                 }
-            } else {
-                $changes{'defaultquota'}{$key} = 1;
             }
         }
     }
@@ -3589,7 +3668,7 @@
     }
    
     my %quotahash = (
-                      quotas => { %confhash }
+                      $action => { %confhash }
                     );
     my $putresult = &Apache::lonnet::put_dom('configuration',\%quotahash,
                                              $dom);
@@ -3599,18 +3678,20 @@
             &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
 
             $resulttext = &mt('Changes made:').'<ul>';
-            if (ref($changes{'defaultquota'}) eq 'HASH') {
-                $resulttext .= '<li>'.&mt('Portfolio default quotas').'<ul>';
-                foreach my $type (@{$types},'default') {
-                    if (defined($changes{'defaultquota'}{$type})) {
-                        my $typetitle = $usertypes->{$type};
-                        if ($type eq 'default') {
-                            $typetitle = $othertitle;
+            unless ($context eq 'requestcourses') {
+                if (ref($changes{'defaultquota'}) eq 'HASH') {
+                    $resulttext .= '<li>'.&mt('Portfolio default quotas').'<ul>';
+                    foreach my $type (@{$types},'default') {
+                        if (defined($changes{'defaultquota'}{$type})) {
+                            my $typetitle = $usertypes->{$type};
+                            if ($type eq 'default') {
+                                $typetitle = $othertitle;
+                            }
+                            $resulttext .= '<li>'.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).'</li>';
                         }
-                        $resulttext .= '<li>'.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).'</li>';
                     }
+                    $resulttext .= '</ul></li>';
                 }
-                $resulttext .= '</ul></li>';
             }
             my %newenv;
             foreach my $item (@usertools) {
@@ -3618,9 +3699,15 @@
                     my $newacc = 
                         &Apache::lonnet::usertools_access($env{'user.name'},
                                                           $env{'user.domain'},
-                                                          $item,'reload');
-                    if ($env{'environment.availabletools.'.$item} ne $newacc) { 
-                        $newenv{'environment.availabletools.'.$item} = $newacc;
+                                                          $item,'reload',$context);
+                    if ($context eq 'requestcourses') {
+                        if ($env{'environment.canrequest.'.$item} ne $newacc) {
+                            $newenv{'environment.canrequest.'.$item} = $newacc;
+                        }
+                    } else {
+                        if ($env{'environment.availabletools.'.$item} ne $newacc) { 
+                            $newenv{'environment.availabletools.'.$item} = $newacc;
+                        }
                     }
                     $resulttext .= '<li>'.$titles{$item}.'<ul>';
                     foreach my $type (@{$types},'default','_LC_adv') {
@@ -3646,7 +3733,11 @@
                 &Apache::lonnet::appenv(\%newenv);
             }
         } else {
-            $resulttext = &mt('No changes made to availability of home pages, blogs, portfolios or default quotas');
+            if ($context eq 'requestcourses') {
+                $resulttext = &mt('No changes made to rights to request creation of courses.');
+            } else {
+                $resulttext = &mt('No changes made to availability of home pages, blogs, portfolios or default quotas');
+            }
         }
     } else {
         $resulttext = '<span class="LC_error">'.

--raeburn1234127041--