--- loncom/interface/domainprefs.pm 2016/08/07 00:28:39 1.160.6.68 +++ loncom/interface/domainprefs.pm 2013/08/07 14:41:39 1.201 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.68 2016/08/07 00:28:39 raeburn Exp $ +# $Id: domainprefs.pm,v 1.201 2013/08/07 14:41:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -86,7 +86,7 @@ $dom,$settings,$rowtotal,$action. $dom is the domain, $settings is a reference to a hash of current settings for the current context, $rowtotal is a reference to the scalar used to record the -number of rows displayed on the page, and $action is the context (quotas, +number of rows displayed on the page, and $action is the context (quotas, requestcourses or requestauthor). The print_quotas routine was orginally created to display/store information @@ -95,7 +95,7 @@ institutional affiliation in the domain but is now also used to manage availability of user tools: i.e., blogs, aboutme page, and portfolios, and the course request tool, used by course owners to request creation of a course, and to display/store -default quota sizes for Authoring Spaces. +default quota sizes for authoring spaces. Outputs: 1 @@ -103,8 +103,8 @@ $datatable - HTML containing form eleme In the case of course requests, radio buttons are displayed for each institutional affiliate type (and also default, and _LC_adv) for each of the course types -(official, unofficial, community, and textbook). In each case the radio buttons -allow the selection of one of four values: +(official, unofficial and community). In each case the radio buttons allow the +selection of one of four values: 0, approval, validate, autolimit=N (where N is blank, or a positive integer). which have the following effects: @@ -164,8 +164,6 @@ use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonmsg(); use Apache::lonconfigsettings; -use Apache::lonuserutils(); -use Apache::loncoursequeueadmin(); use LONCAPA qw(:DEFAULT :match); use LONCAPA::Enrollment; use LONCAPA::lonauthcgi(); @@ -213,15 +211,15 @@ sub handler { 'quotas','autoenroll','autoupdate','autocreate', 'directorysrch','usercreation','usermodification', 'contacts','defaults','scantron','coursecategories', - 'serverstatuses','requestcourses','coursedefaults', - 'usersessions','loadbalancing','requestauthor', - 'selfenrollment','inststatus'],$dom); + 'serverstatuses','requestcourses','helpsettings', + 'coursedefaults','usersessions','loadbalancing', + 'requestauthor'],$dom); my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', 'autoupdate','autocreate','directorysrch','contacts', - 'usercreation','selfcreation','usermodification','scantron', + 'usercreation','usermodification','scantron', 'requestcourses','requestauthor','coursecategories', - 'serverstatuses','coursedefaults','selfenrollment', - 'usersessions'); + 'serverstatuses','helpsettings', + 'coursedefaults','usersessions'); my %existing; if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; @@ -241,8 +239,6 @@ sub handler { col2 => '',}, {col1 => 'Administrator Settings', col2 => '',}], - print => \&print_rolecolors, - modify => \&modify_rolecolors, }, 'login' => { text => 'Log-in page options', @@ -250,38 +246,26 @@ sub handler { header => [{col1 => 'Log-in Page Items', col2 => '',}, {col1 => 'Log-in Help', - col2 => 'Value'}, - {col1 => 'Custom HTML in document head', col2 => 'Value'}], - print => \&print_login, - modify => \&modify_login, }, 'defaults' => - { text => 'Default authentication/language/timezone/portal/types', + { text => 'Default authentication/language/timezone/portal', help => 'Domain_Configuration_LangTZAuth', header => [{col1 => 'Setting', - col2 => 'Value'}, - {col1 => 'Institutional user types', - col2 => 'Assignable to e-mail usernames'}], - print => \&print_defaults, - modify => \&modify_defaults, + col2 => 'Value'}], }, 'quotas' => { text => 'Blogs, personal web pages, webDAV/quotas, portfolios', help => 'Domain_Configuration_Quotas', header => [{col1 => 'User affiliation', col2 => 'Available tools', - col3 => 'Quotas, MB; (Authoring requires role)',}], - print => \&print_quotas, - modify => \&modify_quotas, + col3 => 'Quotas, Mb; (Authoring requires role)',}], }, 'autoenroll' => { text => 'Auto-enrollment settings', help => 'Domain_Configuration_Auto_Enrollment', header => [{col1 => 'Configuration setting', col2 => 'Value(s)'}], - print => \&print_autoenroll, - modify => \&modify_autoenroll, }, 'autoupdate' => { text => 'Auto-update settings', @@ -291,34 +275,27 @@ sub handler { {col1 => 'Setting', col2 => 'Affiliation'}, {col1 => 'User population', - col2 => 'Updatable user data'}], - print => \&print_autoupdate, - modify => \&modify_autoupdate, + col2 => 'Updateable user data'}], }, 'autocreate' => { text => 'Auto-course creation settings', help => 'Domain_Configuration_Auto_Creation', header => [{col1 => 'Configuration Setting', col2 => 'Value',}], - print => \&print_autocreate, - modify => \&modify_autocreate, }, 'directorysrch' => { text => 'Institutional directory searches', help => 'Domain_Configuration_InstDirectory_Search', header => [{col1 => 'Setting', col2 => 'Value',}], - print => \&print_directorysrch, - modify => \&modify_directorysrch, }, 'contacts' => { text => 'Contact Information', help => 'Domain_Configuration_Contact_Info', header => [{col1 => 'Setting', col2 => 'Value',}], - print => \&print_contacts, - modify => \&modify_contacts, }, + 'usercreation' => { text => 'User creation', help => 'Domain_Configuration_User_Creation', @@ -328,30 +305,16 @@ sub handler { col2 => 'Usernames which may be created',}, {col1 => 'Context', col2 => 'Assignable authentication types'}], - print => \&print_usercreation, - modify => \&modify_usercreation, - }, - 'selfcreation' => - { text => 'Users self-creating accounts', - help => 'Domain_Configuration_Self_Creation', - header => [{col1 => 'Self-creation with institutional username', - col2 => 'Enabled?'}, - {col1 => 'Institutional user type (login/SSO self-creation)', - col2 => 'Information user can enter'}, - {col1 => 'Self-creation with e-mail as username', - col2 => 'Settings'}], - print => \&print_selfcreation, - modify => \&modify_selfcreation, }, 'usermodification' => { text => 'User modification', help => 'Domain_Configuration_User_Modification', header => [{col1 => 'Target user has role', - col2 => 'User information updatable in author context'}, + col2 => 'User information updateable in author context'}, {col1 => 'Target user has role', - col2 => 'User information updatable in course context'}], - print => \&print_usermodification, - modify => \&modify_usermodification, + col2 => 'User information updateable in course context'}, + {col1 => "Status of user", + col2 => 'Information settable when self-creating account (if directory data blank)'}], }, 'scantron' => { text => 'Bubblesheet format file', @@ -359,8 +322,6 @@ sub handler { header => [ {col1 => 'Item', col2 => '', }], - print => \&print_scantron, - modify => \&modify_scantron, }, 'requestcourses' => {text => 'Request creation of courses', @@ -368,38 +329,24 @@ sub handler { header => [{col1 => 'User affiliation', col2 => 'Availability/Processing of requests',}, {col1 => 'Setting', - col2 => 'Value'}, - {col1 => 'Available textbooks', - col2 => ''}, - {col1 => 'Available templates', - col2 => ''}, - {col1 => 'Validation (not official courses)', - col2 => 'Value'},], - print => \&print_quotas, - modify => \&modify_quotas, + col2 => 'Value'}], }, 'requestauthor' => - {text => 'Request Authoring Space', + {text => 'Request authoring space', help => 'Domain_Configuration_Request_Author', header => [{col1 => 'User affiliation', col2 => 'Availability/Processing of requests',}, {col1 => 'Setting', col2 => 'Value'}], - print => \&print_quotas, - modify => \&modify_quotas, }, 'coursecategories' => { text => 'Cataloging of courses/communities', help => 'Domain_Configuration_Cataloging_Courses', - header => [{col1 => 'Catalog type/availability', - col2 => '',}, - {col1 => 'Category settings for standard catalog', + header => [{col1 => 'Category settings', col2 => '',}, {col1 => 'Categories', col2 => '', }], - print => \&print_coursecategories, - modify => \&modify_coursecategories, }, 'serverstatuses' => {text => 'Access to server status pages', @@ -408,8 +355,12 @@ sub handler { col2 => 'Other named users', col3 => 'Specific IPs', }], - print => \&print_serverstatuses, - modify => \&modify_serverstatuses, + }, + 'helpsettings' => + {text => 'Help page settings', + help => 'Domain_Configuration_Help_Settings', + header => [{col1 => 'Help Settings (logged-in users)', + col2 => 'Value'}], }, 'coursedefaults' => {text => 'Course/Community defaults', @@ -418,20 +369,12 @@ sub handler { col2 => 'Value',}, {col1 => 'Defaults which can be overridden for each course by a DC', col2 => 'Value',},], - print => \&print_coursedefaults, - modify => \&modify_coursedefaults, }, - 'selfenrollment' => - {text => 'Self-enrollment in Course/Community', - help => 'Domain_Configuration_Selfenrollment', - header => [{col1 => 'Configuration Rights', - col2 => 'Configured by Course Personnel or Domain Coordinator?'}, - {col1 => 'Defaults', - col2 => 'Value'}, - {col1 => 'Self-enrollment validation (optional)', - col2 => 'Value'},], - print => \&print_selfenrollment, - modify => \&modify_selfenrollment, + 'privacy' => + {text => 'User Privacy', + help => 'Domain_Configuration_User_Privacy', + header => [{col1 => 'Setting', + col2 => 'Value',}], }, 'usersessions' => {text => 'User session hosting/offloading', @@ -442,8 +385,6 @@ sub handler { col2 => 'Rules'}, {col1 => "Hosting domain's own users elsewhere", col2 => 'Rules'}], - print => \&print_usersessions, - modify => \&modify_usersessions, }, 'loadbalancing' => {text => 'Dedicated Load Balancer(s)', @@ -453,8 +394,6 @@ sub handler { col3 => 'User affiliation', col4 => 'Overrides'}, ], - print => \&print_loadbalancing, - modify => \&modify_loadbalancing, }, ); if (keys(%servers) > 1) { @@ -465,11 +404,7 @@ sub handler { {col1 => 'Log-in Page Items', col2 => ''}, {col1 => 'Log-in Help', - col2 => 'Value'}, - {col1 => 'Custom HTML in document head', col2 => 'Value'}], - print => \&print_login, - modify => \&modify_login, }; } @@ -481,15 +416,10 @@ sub handler { my $confname = $dom.'-domainconfig'; if ($phase eq 'process') { - my $result = &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order, - \%prefs,\%domconfig,$confname,\@roles); - if ((ref($result) eq 'HASH') && (keys(%{$result}))) { - $r->rflush(); - &devalidate_remote_domconfs($dom,$result); - } + &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); } elsif ($phase eq 'display') { my $js = &recaptcha_js(). - &toggle_display_js(); + &credits_js(); if ((keys(%servers) > 1) || (keys(%existing) > 0)) { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -499,16 +429,6 @@ sub handler { &common_domprefs_js(). &Apache::loncommon::javascript_array_indexof(); } - if (grep(/^requestcourses$/,@actions)) { - my $javascript_validations; - my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'}); - $js .= < -$javascript_validations - -$coursebrowserjs -END - } &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js); } else { # check if domconfig user exists for the domain. @@ -518,7 +438,7 @@ END unless ($configuserok eq 'ok') { &Apache::lonconfigsettings::print_header($r,$phase,$context); $r->print(&mt('The domain configuration user "[_1]" has yet to be created.', - $confname). + $confname). '
' ); if ($switchserver) { @@ -578,21 +498,21 @@ END } sub process_changes { - my ($r,$dom,$confname,$action,$roles,$values,$lastactref) = @_; + my ($r,$dom,$confname,$action,$roles,$values) = @_; my %domconfig; if (ref($values) eq 'HASH') { %domconfig = %{$values}; } my $output; if ($action eq 'login') { - $output = &modify_login($r,$dom,$confname,$lastactref,%domconfig); + $output = &modify_login($r,$dom,$confname,%domconfig); } elsif ($action eq 'rolecolors') { $output = &modify_rolecolors($r,$dom,$confname,$roles, - $lastactref,%domconfig); + %domconfig); } elsif ($action eq 'quotas') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'autoenroll') { - $output = &modify_autoenroll($dom,$lastactref,%domconfig); + $output = &modify_autoenroll($dom,%domconfig); } elsif ($action eq 'autoupdate') { $output = &modify_autoupdate($dom,%domconfig); } elsif ($action eq 'autocreate') { @@ -601,30 +521,28 @@ sub process_changes { $output = &modify_directorysrch($dom,%domconfig); } elsif ($action eq 'usercreation') { $output = &modify_usercreation($dom,%domconfig); - } elsif ($action eq 'selfcreation') { - $output = &modify_selfcreation($dom,%domconfig); } elsif ($action eq 'usermodification') { $output = &modify_usermodification($dom,%domconfig); } elsif ($action eq 'contacts') { - $output = &modify_contacts($dom,$lastactref,%domconfig); + $output = &modify_contacts($dom,%domconfig); } elsif ($action eq 'defaults') { - $output = &modify_defaults($dom,$lastactref,%domconfig); + $output = &modify_defaults($dom,$r); } elsif ($action eq 'scantron') { - $output = &modify_scantron($r,$dom,$confname,$lastactref,%domconfig); + $output = &modify_scantron($r,$dom,$confname,%domconfig); } elsif ($action eq 'coursecategories') { - $output = &modify_coursecategories($dom,$lastactref,%domconfig); + $output = &modify_coursecategories($dom,%domconfig); } elsif ($action eq 'serverstatuses') { $output = &modify_serverstatuses($dom,%domconfig); } elsif ($action eq 'requestcourses') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'requestauthor') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); + } elsif ($action eq 'helpsettings') { + $output = &modify_helpsettings($r,$dom,$confname,%domconfig); } elsif ($action eq 'coursedefaults') { - $output = &modify_coursedefaults($dom,$lastactref,%domconfig); - } elsif ($action eq 'selfenrollment') { - $output = &modify_selfenrollment($dom,$lastactref,%domconfig) + $output = &modify_coursedefaults($dom,%domconfig); } elsif ($action eq 'usersessions') { - $output = &modify_usersessions($dom,$lastactref,%domconfig); + $output = &modify_usersessions($dom,%domconfig); } elsif ($action eq 'loadbalancing') { $output = &modify_loadbalancing($dom,%domconfig); } @@ -637,10 +555,8 @@ sub print_config_box { my $output; if ($action eq 'coursecategories') { $output = &coursecategories_javascript($settings); - } elsif ($action eq 'defaults') { - $output = &defaults_javascript($settings); } - $output .= + $output .= ''; $rowtotal ++; - if (($action eq 'autoupdate') || ($action eq 'usercreation') || ($action eq 'selfcreation') || - ($action eq 'usermodification') || ($action eq 'defaults') || ($action eq 'coursedefaults') || - ($action eq 'selfenrollment') || ($action eq 'usersessions')) { - $output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); + if ($action eq 'autoupdate') { + $output .= &print_autoupdate('top',$dom,$settings,\$rowtotal); + } elsif ($action eq 'usercreation') { + $output .= &print_usercreation('top',$dom,$settings,\$rowtotal); + } elsif ($action eq 'usermodification') { + $output .= &print_usermodification('top',$dom,$settings,\$rowtotal); } elsif ($action eq 'coursecategories') { - $output .= $item->{'print'}->('top',$dom,$item,$settings,\$rowtotal); + $output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal); } elsif ($action eq 'login') { - if ($numheaders == 4) { + if ($numheaders == 3) { $colspan = ' colspan="2"'; $output .= &print_login('service',$dom,$confname,$phase,$settings,\$rowtotal); } else { $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal); } - } elsif (($action eq 'requestcourses') || ($action eq 'requestauthor')) { + } elsif ($action eq 'requestcourses') { + $output .= &print_quotas($dom,$settings,\$rowtotal,$action); + } elsif ($action eq 'requestauthor') { $output .= &print_quotas($dom,$settings,\$rowtotal,$action); + } elsif ($action eq 'usersessions') { + $output .= &print_usersessions('top',$dom,$settings,\$rowtotal); } elsif ($action eq 'rolecolors') { $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); + } elsif ($action eq 'coursedefaults') { + $output .= &print_coursedefaults('top',$dom,$settings,\$rowtotal); } $output .= '
'. @@ -655,8 +571,8 @@ sub print_config_box { if ($numheaders > 1) { my $colspan = ''; my $rightcolspan = ''; - if (($action eq 'rolecolors') || ($action eq 'defaults') || - (($action eq 'login') && ($numheaders < 4))) { + if (($action eq 'rolecolors') || ($action eq 'coursecategories') || + (($action eq 'login') && ($numheaders < 3))) { $colspan = ' colspan="2"'; } if ($action eq 'usersessions') { @@ -671,23 +587,31 @@ sub print_config_box { '.&mt($item->{'header'}->[0]->{'col2'}).'
@@ -697,20 +621,13 @@ sub print_config_box { - + '; + $output .= ' '; $rowtotal ++; - if (($action eq 'autoupdate') || ($action eq 'usercreation') || - ($action eq 'selfcreation') || ($action eq 'selfenrollment') || - ($action eq 'usersessions') || ($action eq 'coursecategories')) { - if ($action eq 'coursecategories') { - $output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal); - $colspan = ' colspan="2"'; - } else { - $output .= $item->{'print'}->('middle',$dom,$settings,\$rowtotal); - } - $output .= ' + if ($action eq 'autoupdate') { + $output .= &print_autoupdate('middle',$dom,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[1]->{'col1'}).''.&mt($item->{'header'}->[1]->{'col1'}).''.&mt($item->{'header'}->[1]->{'col2'}).'
@@ -719,20 +636,11 @@ sub print_config_box { - - '."\n"; - if ($action eq 'coursecategories') { - $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); - } else { - $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); - } + '. + &print_autoupdate('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; - } elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') || - ($action eq 'defaults')) { - $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); - } elsif ($action eq 'login') { - if ($numheaders == 4) { - $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal).' + } elsif ($action eq 'usercreation') { + $output .= &print_usercreation('middle',$dom,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -741,37 +649,27 @@ sub print_config_box { - '. - &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); - $rowtotal ++; - } else { - $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); - } - $output .= ' + '. + &print_usercreation('bottom',$dom,$settings,\$rowtotal); + $rowtotal ++; + } elsif ($action eq 'usermodification') { + $output .= &print_usermodification('middle',$dom,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
- '; - if ($numheaders == 4) { - $output .= ' - - - '; - } else { - $output .= ' + - - '; - } - $rowtotal ++; - $output .= &print_login('headtag',$dom,$confname,$phase,$settings,\$rowtotal); - } elsif ($action eq 'requestcourses') { - $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); + '. + &print_usermodification('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; - $output .= &print_studentcode($settings,\$rowtotal).' + } elsif ($action eq 'coursecategories') { + $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); + } elsif ($action eq 'login') { + if ($numheaders == 3) { + $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[3]->{'col1'}).''.&mt($item->{'header'}->[3]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -780,33 +678,31 @@ sub print_config_box { - '. - &textbookcourses_javascript($settings). - &print_textbookcourses($dom,'textbooks',$settings,\$rowtotal).' -
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
- - + '.&mt($item->{'header'}->[2]->{'col2'}).' '. + &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); + $rowtotal ++; + } else { + $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); + } + } elsif ($action eq 'requestcourses') { + $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); + } elsif ($action eq 'requestauthor') { + $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); + } elsif ($action eq 'usersessions') { + $output .= &print_usersessions('middle',$dom,$settings,\$rowtotal).' + + + - - '. - &print_textbookcourses($dom,'templates',$settings,\$rowtotal).' -
'.&mt($item->{'header'}->[3]->{'col1'}).''.&mt($item->{'header'}->[3]->{'col2'}).'
- - - - - - - - - '. - &print_validation_rows('requestcourses',$dom,$settings,\$rowtotal); - } elsif ($action eq 'requestauthor') { - $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); + + '. + &print_usersessions('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; + } elsif ($action eq 'coursedefaults') { + $output .= &print_coursedefaults('bottom',$dom,$settings,\$rowtotal); } elsif ($action eq 'rolecolors') { $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[4]->{'col1'}).''.&mt($item->{'header'}->[4]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -885,13 +781,24 @@ sub print_config_box { $rowtotal ++; if ($action eq 'quotas') { $output .= &print_quotas($dom,$settings,\$rowtotal,$action); - } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || ($action eq 'directorysrch') || - ($action eq 'contacts') || ($action eq 'serverstatuses') || ($action eq 'loadbalancing')) { - $output .= $item->{'print'}->($dom,$settings,\$rowtotal); + } elsif ($action eq 'autoenroll') { + $output .= &print_autoenroll($dom,$settings,\$rowtotal); + } elsif ($action eq 'autocreate') { + $output .= &print_autocreate($dom,$settings,\$rowtotal); + } elsif ($action eq 'directorysrch') { + $output .= &print_directorysrch($dom,$settings,\$rowtotal); + } elsif ($action eq 'contacts') { + $output .= &print_contacts($dom,$settings,\$rowtotal); + } elsif ($action eq 'defaults') { + $output .= &print_defaults($dom,\$rowtotal); } elsif ($action eq 'scantron') { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); + } elsif ($action eq 'serverstatuses') { + $output .= &print_serverstatuses($dom,$settings,\$rowtotal); } elsif ($action eq 'helpsettings') { $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal); + } elsif ($action eq 'loadbalancing') { + $output .= &print_loadbalancing($dom,$settings,\$rowtotal); } } $output .= ' @@ -1188,57 +1095,6 @@ sub print_login { $itemcount ++; } $datatable .= &captcha_choice('login',$settings,$itemcount); - } elsif ($caller eq 'headtag') { - my %domservers = &Apache::lonnet::get_servers($dom); - my $choice = $choices{'headtag'}; - $css_class = ' class="LC_odd_row"'; - $datatable .= ''.$choice.''. - ''. - ''. - ''. - ''."\n"; - my (%currurls,%currexempt); - if (ref($settings) eq 'HASH') { - if (ref($settings->{'headtag'}) eq 'HASH') { - foreach my $lonhost (keys(%{$settings->{'headtag'}})) { - if (ref($settings->{'headtag'}{$lonhost}) eq 'HASH') { - $currurls{$lonhost} = $settings->{'headtag'}{$lonhost}{'url'}; - $currexempt{$lonhost} = $settings->{'headtag'}{$lonhost}{'exempt'}; - } - } - } - } - my %lt = &Apache::lonlocal::texthash( - del => 'Delete?', - rep => 'Replace:', - upl => 'Upload:', - curr => 'View contents', - none => 'None', - ); - my $switchserver = &check_switchserver($dom,$confname); - foreach my $lonhost (sort(keys(%domservers))) { - my $exempt = &check_exempt_addresses($currexempt{$lonhost}); - $datatable .= ''; - if ($currurls{$lonhost}) { - $datatable .= ''. - ''; - } - $datatable .= '
'.$choices{'hostid'}.''.$choices{'current'}.''.$choices{'action'}.''.$choices{'exempt'}.'
'.$domservers{$lonhost}.''.$lt{'curr'}.' '.$lt{'rep'}.''; - } else { - $datatable .= ''.$lt{'none'}.''.$lt{'upl'}; - } - $datatable .='
'; - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - $datatable .= '
'; } return $datatable; } @@ -1272,9 +1128,6 @@ sub login_choices { link => "Link", alink => "Active link", vlink => "Visited link", - headtag => "Custom markup", - action => "Action", - current => "Current", ); return %choices; } @@ -1352,8 +1205,8 @@ sub print_rolecolors { sub role_defaults { my ($role,$bgs,$links,$images,$logintext) = @_; - my %defaults; - unless ((ref($bgs) eq 'ARRAY') && (ref($links) eq 'ARRAY') && (ref($images) eq 'ARRAY')) { + my %defaults; + unless ((ref($bgs) eq 'ARRAY') && (ref($links) eq 'ARRAY') && (ref($images) eq 'ARRAY')) { return %defaults; } my %defaultdesign = %Apache::loncommon::defaultdesign; @@ -1404,7 +1257,7 @@ sub display_color_options { $datatable .= ''. ' '. + ' value="'.$current_color.'" /> '. ' '; unless ($role eq 'login') { $datatable .= ''. @@ -1414,7 +1267,7 @@ sub display_color_options { } else { $datatable .= ' '; } - $current_color = $designs->{'fontmenu'} ? + $current_color = $designs->{'fontmenu'} ? $designs->{'fontmenu'} : $defaults->{'fontmenu'}; $datatable .= ''. ''. ''; foreach my $item (@{$links}) { - my $color = $designs->{'links'}{$item} ? $designs->{'links'}{$item} : $defaults->{'links'}{$item}; + my $color = $designs->{'link'}{$item} ? $designs->{'link'}{$item} : $defaults->{'links'}{$item}; $datatable .= ''; + } $color_menu .= '
'.$choices->{$item}."\n"; + if ($designs->{'links'}{$item}) { $datatable.=' '; } @@ -1642,6 +1496,7 @@ sub login_text_colors { my $color = $designs->{'logintext'}{$item} ? $designs->{'logintext'}{$item} : $defaults->{'logintext'}{$item}; $color_menu .= '

'; return $color_menu; @@ -1692,14 +1547,14 @@ sub print_quotas { my $typecount = 0; my ($css_class,%titles); if ($context eq 'requestcourses') { - @usertools = ('official','unofficial','community','textbook'); + @usertools = ('official','unofficial','community'); @options =('norequest','approval','validate','autolimit'); %validations = &Apache::lonnet::auto_courserequest_checks($dom); %titles = &courserequest_titles(); } elsif ($context eq 'requestauthor') { @usertools = ('author'); @options = ('norequest','approval','automatic'); - %titles = &authorrequest_titles(); + %titles = &authorrequest_titles(); } else { @usertools = ('aboutme','blog','webdav','portfolio'); %titles = &tool_titles(); @@ -2106,299 +1961,42 @@ sub print_quotas { sub print_requestmail { my ($dom,$action,$settings,$rowtotal) = @_; - my ($now,$datatable,%currapp); + my ($now,$datatable,%currapp,$rows); $now = time; if (ref($settings) eq 'HASH') { if (ref($settings->{'notify'}) eq 'HASH') { if ($settings->{'notify'}{'approval'} ne '') { - map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'}); + map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'}); } } } my $numinrow = 2; - my $css_class; - $css_class = ($$rowtotal%2? ' class="LC_odd_row"':''); + my $css_class = 'class="LC_odd_row"'; my $text; if ($action eq 'requestcourses') { $text = &mt('Receive notification of course requests requiring approval'); - } elsif ($action eq 'requestauthor') { - $text = &mt('Receive notification of Authoring Space requests requiring approval'); } else { - $text = &mt('Receive notification of queued requests for self-created user accounts requiring approval'); + $text = &mt('Receive notification of authoring space requests requiring approval') } - $datatable = ''. + $datatable = ''. ' '.$text.''. ' '; my ($numdc,$table,$rows) = &active_dc_picker($dom,$numinrow,'checkbox', - $action.'notifyapproval',%currapp); + 'reqapprovalnotify',%currapp); if ($numdc > 0) { $datatable .= $table; } else { $datatable .= &mt('There are no active Domain Coordinators'); } $datatable .=''; + $$rowtotal += $rows; return $datatable; } -sub print_studentcode { - my ($settings,$rowtotal) = @_; - my $rownum = 0; - my ($output,%current); - my @crstypes = ('official','unofficial','community','textbook'); - if (ref($settings) eq 'HASH') { - if (ref($settings->{'uniquecode'}) eq 'HASH') { - foreach my $type (@crstypes) { - $current{$type} = $settings->{'uniquecode'}{$type}; - } - } - } - $output .= ''. - ''.&mt('Generate unique six character code as course identifier?').''. - ''; - foreach my $type (@crstypes) { - my $check = ' '; - if ($current{$type}) { - $check = ' checked="checked" '; - } - $output .= ''.(' 'x2).' '; - } - $output .= ''; - $$rowtotal ++; - return $output; -} - -sub print_textbookcourses { - my ($dom,$type,$settings,$rowtotal) = @_; - my $rownum = 0; - my $css_class; - my $itemcount = 1; - my $maxnum = 0; - my $bookshash; - if (ref($settings) eq 'HASH') { - $bookshash = $settings->{$type}; - } - my %ordered; - if (ref($bookshash) eq 'HASH') { - foreach my $item (keys(%{$bookshash})) { - if (ref($bookshash->{$item}) eq 'HASH') { - my $num = $bookshash->{$item}{'order'}; - $ordered{$num} = $item; - } - } - } - my $confname = $dom.'-domainconfig'; - my $switchserver = &check_switchserver($dom,$confname); - my $maxnum = scalar(keys(%ordered)); - my $datatable; - if (keys(%ordered)) { - my @items = sort { $a <=> $b } keys(%ordered); - for (my $i=0; $i<@items; $i++) { - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $key = $ordered{$items[$i]}; - my %coursehash=&Apache::lonnet::coursedescription($key); - my $coursetitle = $coursehash{'description'}; - my ($subject,$title,$author,$publisher,$image,$imgsrc,$cdom,$cnum); - if (ref($bookshash->{$key}) eq 'HASH') { - $subject = $bookshash->{$key}->{'subject'}; - $title = $bookshash->{$key}->{'title'}; - if ($type eq 'textbooks') { - $publisher = $bookshash->{$key}->{'publisher'}; - $author = $bookshash->{$key}->{'author'}; - $image = $bookshash->{$key}->{'image'}; - if ($image ne '') { - my ($path,$imagefile) = ($image =~ m{^(.+)/([^/]+)$}); - my $imagethumb = "$path/tn-".$imagefile; - $imgsrc = ''.&mt('Textbook image').''; - } - } - } - my $chgstr = ' onchange="javascript:reorderBooks(this.form,'."'$type".'_'."$key','$type'".');"'; - $datatable .= '' - .''.(' 'x2). - ''. - ''. - ''.&mt('Subject:').' '. - (' 'x2). - ''.&mt('Title:').' '; - if ($type eq 'textbooks') { - $datatable .= (' 'x2). - ''.&mt('Publisher:').' '. - (' 'x2). - ''.&mt('Author(s):').' '. - (' 'x2). - ''.&mt('Thumbnail:'); - if ($image) { - $datatable .= ''. - $imgsrc. - ' '. - ' '.&mt('Replace:').' '; - } - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - } - $datatable .= ' '. - ''.&mt('LON-CAPA course:').' '. - $coursetitle.''."\n"; - $itemcount ++; - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $chgstr = ' onchange="javascript:reorderBooks(this.form,'."'$type"."_addbook_pos','$type'".');"'; - $datatable .= ''."\n". - ''."\n". - ' '."\n". - ''.&mt('Add').''."\n". - ''. - ''.&mt('Subject:').' '."\n". - (' 'x2). - ''.&mt('Title:').' '."\n". - (' 'x2); - if ($type eq 'textbooks') { - $datatable .= ''.&mt('Publisher:').' '."\n". - (' 'x2). - ''.&mt('Author(s):').' '."\n". - (' 'x2). - ''.&mt('Image:').' '; - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - } - $datatable .= ''."\n". - ''.&mt('LON-CAPA course:').' '. - &Apache::loncommon::select_dom_form($env{'request.role.domain'},$type.'_addbook_cdom'). - ''. - &Apache::loncommon::selectcourse_link - ('display',$type.'_addbook_cnum',$type.'_addbook_cdom',undef,undef,undef,'Course'); - ''."\n". - ''."\n"; - $itemcount ++; - return $datatable; -} - -sub textbookcourses_javascript { - my ($settings) = @_; - return unless(ref($settings) eq 'HASH'); - my (%ordered,%total,%jstext); - foreach my $type ('textbooks','templates') { - $total{$type} = 0; - if (ref($settings->{$type}) eq 'HASH') { - foreach my $item (keys(%{$settings->{$type}})) { - if (ref($settings->{$type}->{$item}) eq 'HASH') { - my $num = $settings->{$type}->{$item}{'order'}; - $ordered{$type}{$num} = $item; - } - } - $total{$type} = scalar(keys(%{$settings->{$type}})); - } - my @jsarray = (); - foreach my $item (sort {$a <=> $b } (keys(%{$ordered{$type}}))) { - push(@jsarray,$ordered{$type}{$item}); - } - $jstext{$type} = ' var '.$type.' = Array('."'".join("','",@jsarray)."'".');'."\n"; - } - return <<"ENDSCRIPT"; - - -ENDSCRIPT -} - sub print_autoenroll { my ($dom,$settings,$rowtotal) = @_; my $autorun = &Apache::lonnet::auto_run(undef,$dom), - my ($defdom,$runon,$runoff,$coownerson,$coownersoff,$failsafe); + my ($defdom,$runon,$runoff,$coownerson,$coownersoff); if (ref($settings) eq 'HASH') { if (exists($settings->{'run'})) { if ($settings->{'run'} eq '0') { @@ -2432,9 +2030,6 @@ sub print_autoenroll { if (exists($settings->{'sender_domain'})) { $defdom = $settings->{'sender_domain'}; } - if (exists($settings->{'autofailsafe'})) { - $failsafe = $settings->{'autofailsafe'}; - } } else { if ($autorun) { $runon = ' checked="checked" '; @@ -2470,12 +2065,8 @@ sub print_autoenroll { $coownerson.' value="1" />'.&mt('Yes').' '. ''. - ''. - ''.&mt('Failsafe for no drops when institutional data missing').''. - ''. - ''; - $$rowtotal += 4; + ''; + $$rowtotal += 3; return $datatable; } @@ -2563,7 +2154,7 @@ sub print_autocreate { } } } - if ($settings->{'xmldc'} ne '') { + if ($settings->{'xmldc'} ne '') { $currhash{$settings->{'xmldc'}} = 1; } } else { @@ -2590,15 +2181,13 @@ sub print_autocreate { $createoff{'req'}.' value="0" />'.&mt('No').''; my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', 'autocreate_xmldc',%currhash); - $datatable .= ''; if ($numdc > 1) { - $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)'). - ''; + $datatable .= ''. + &mt('Course creation processed as: (choose Dom. Coord.)'). + ''.$dctable.''; } else { - $datatable .= &mt('Course creation processed as:'). - ''; + $datatable .= $dctable.''; } - $datatable .= $dctable.''; $$rowtotal += $rows; return $datatable; } @@ -2722,7 +2311,7 @@ sub print_contacts { my @contacts = ('adminemail','supportemail'); my (%checked,%to,%otheremails,%bccemails); my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail', - 'requestsmail','updatesmail','idconflictsmail'); + 'requestsmail','updatesmail'); foreach my $type (@mailings) { $otheremails{$type} = ''; } @@ -2759,21 +2348,21 @@ sub print_contacts { $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; $checked{'requestsmail'}{'adminemail'} = ' checked="checked" '; $checked{'updatesmail'}{'adminemail'} = ' checked="checked" '; - $checked{'idconflictsmail'}{'adminemail'} = ' checked="checked" '; } my ($titles,$short_titles) = &contact_titles(); my $rownum = 0; my $css_class; foreach my $item (@contacts) { + $rownum ++; $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= ''. ''.$titles->{$item}. ''. ''; - $rownum ++; } foreach my $type (@mailings) { + $rownum ++; $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= ''. ''. @@ -2796,21 +2385,7 @@ sub print_contacts { 'value="'.$bccemails{$type}.'" />'; } $datatable .= ''."\n"; - $rownum ++; } - my %choices; - $choices{'reporterrors'} = &mt('E-mail error reports to [_1]', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)); - $choices{'reportupdates'} = &mt('E-mail record of completed LON-CAPA updates to [_1]', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)); - my @toggles = ('reporterrors','reportupdates'); - my %defaultchecked = ('reporterrors' => 'on', - 'reportupdates' => 'on'); - (my $reports,$rownum) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, - \%choices,$rownum); - $datatable .= $reports; $$rowtotal += $rownum; return $datatable; } @@ -2833,7 +2408,7 @@ sub print_helpsettings { sub radiobutton_prefs { my ($settings,$toggles,$defaultchecked,$choices,$itemcount,$onclick, - $additional,$align) = @_; + $additional) = @_; return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') && (ref($choices) eq 'HASH')); @@ -2867,14 +2442,8 @@ sub radiobutton_prefs { $datatable .= ''. ''.$choices->{$item}. - ''; - if ($align eq 'left') { - $datatable .= ''; - } else { - $datatable .= ''; - } - $datatable .= - ''. + ''. + ''. ' '.$extra.'
'."\n"; + ')"'.$checked.' /> '.$ruletitles{$rulenames[$i]}. + ''.$extra.'

'."\n"; } $output .= ''."\n"; return $output; @@ -4099,9 +3281,6 @@ sub offloadtype_text { 'externalbalancer' => "Offloads to Load Balancer in user's domain", 'specific' => 'Offloads to specific server', 'none' => 'No offload', - 'balancer' => 'Session hosted on Load Balancer, after re-authentication', - 'offloadedto' => 'Session hosted on offload server, after re-authentication', - 'particular' => 'Session hosted (after re-auth) on server:', ); return %ruletitles; } @@ -4124,7 +3303,6 @@ sub contact_titles { 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)', 'requestsmail' => 'E-mail from course requests requiring approval', 'updatesmail' => 'E-mail from nightly check of LON-CAPA module integrity/updates', - 'idconflictsmail' => 'E-mail from bi-nightly check for multiple users sharing same student/employee ID', ); my %short_titles = &Apache::lonlocal::texthash ( adminemail => 'Admin E-mail address', @@ -4142,7 +3320,6 @@ sub tool_titles { official => 'Official courses (with institutional codes)', unofficial => 'Unofficial courses', community => 'Communities', - textbook => 'Textbook courses', ); return %titles; } @@ -4152,7 +3329,6 @@ sub courserequest_titles { official => 'Official', unofficial => 'Unofficial', community => 'Communities', - textbook => 'Textbook', norequest => 'Not allowed', approval => 'Approval by Dom. Coord.', validate => 'With validation', @@ -4169,7 +3345,7 @@ sub authorrequest_titles { automatic => 'Automatic approval', ); return %titles; -} +} sub courserequest_conditions { my %conditions = &Apache::lonlocal::texthash ( @@ -4205,22 +3381,42 @@ sub print_usercreation { $rowcount ++; } } + my ($emailrules,$emailruleorder) = + &Apache::lonnet::inst_userrules($dom,'email'); + if (ref($emailrules) eq 'HASH') { + if (keys(%{$emailrules}) > 0) { + $datatable .= &user_formats_row('email',$settings,$emailrules, + $emailruleorder,$numinrow,$rowcount); + $$rowtotal ++; + $rowcount ++; + } + } if ($rowcount == 0) { $datatable .= ''.&mt('No format rules have been defined for usernames or IDs in this domain.').''; $$rowtotal ++; $rowcount ++; } } elsif ($position eq 'middle') { - my @creators = ('author','course','requestcrs'); + my @creators = ('author','course','requestcrs','selfcreate'); my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom,'username'); my %lt = &usercreation_types(); my %checked; + my @selfcreate; if (ref($settings) eq 'HASH') { if (ref($settings->{'cancreate'}) eq 'HASH') { foreach my $item (@creators) { $checked{$item} = $settings->{'cancreate'}{$item}; } + if (ref($settings->{'cancreate'}{'selfcreate'}) eq 'ARRAY') { + @selfcreate = @{$settings->{'cancreate'}{'selfcreate'}}; + } elsif ($settings->{'cancreate'}{'selfcreate'} ne '') { + if ($settings->{'cancreate'}{'selfcreate'} eq 'any') { + @selfcreate = ('email','login','sso'); + } elsif ($settings->{'cancreate'}{'selfcreate'} ne 'none') { + @selfcreate = ($settings->{'cancreate'}{'selfcreate'}); + } + } } elsif (ref($settings->{'cancreate'}) eq 'ARRAY') { foreach my $item (@creators) { if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) { @@ -4232,8 +3428,10 @@ sub print_usercreation { my $rownum = 0; foreach my $item (@creators) { $rownum ++; - if ($checked{$item} eq '') { - $checked{$item} = 'any'; + if ($item ne 'selfcreate') { + if ($checked{$item} eq '') { + $checked{$item} = 'any'; + } } my $css_class; if ($rownum%2) { @@ -4244,18 +3442,30 @@ sub print_usercreation { $datatable .= ''. ''.$lt{$item}. ''; - my @options = ('any'); - if (ref($rules) eq 'HASH') { - if (keys(%{$rules}) > 0) { - push(@options,('official','unofficial')); + my @options; + if ($item eq 'selfcreate') { + push(@options,('email','login','sso')); + } else { + @options = ('any'); + if (ref($rules) eq 'HASH') { + if (keys(%{$rules}) > 0) { + push(@options,('official','unofficial')); + } } + push(@options,'none'); } - push(@options,'none'); foreach my $option (@options) { my $type = 'radio'; my $check = ' '; - if ($checked{$item} eq $option) { - $check = ' checked="checked" '; + if ($item eq 'selfcreate') { + $type = 'checkbox'; + if (grep(/^\Q$option\E$/,@selfcreate)) { + $check = ' checked="checked" '; + } + } else { + if ($checked{$item} eq $option) { + $check = ' checked="checked" '; + } } $datatable .= '