--- loncom/interface/domainprefs.pm 2019/08/01 01:45:48 1.160.6.94 +++ loncom/interface/domainprefs.pm 2014/05/30 00:11:06 1.245 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.94 2019/08/01 01:45:48 raeburn Exp $ +# $Id: domainprefs.pm,v 1.245 2014/05/30 00:11:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -19,8 +19,7 @@ # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA# # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ @@ -221,8 +220,8 @@ sub handler { 'autoupdate','autocreate','directorysrch','contacts', 'usercreation','selfcreation','usermodification','scantron', 'requestcourses','requestauthor','coursecategories', - 'serverstatuses','helpsettings','coursedefaults', - 'selfenrollment','usersessions'); + 'serverstatuses','helpsettings', + 'coursedefaults','selfenrollment','usersessions'); my %existing; if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; @@ -251,8 +250,6 @@ 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, @@ -262,10 +259,8 @@ sub handler { help => 'Domain_Configuration_LangTZAuth', header => [{col1 => 'Setting', col2 => 'Value'}, - {col1 => 'Internal Authentication', - col2 => 'Value'}, {col1 => 'Institutional user types', - col2 => 'Name displayed'}], + col2 => 'Assignable to e-mail usernames'}], print => \&print_defaults, modify => \&modify_defaults, }, @@ -307,24 +302,18 @@ sub handler { modify => \&modify_autocreate, }, 'directorysrch' => - { text => 'Directory searches', + { text => 'Institutional directory searches', help => 'Domain_Configuration_InstDirectory_Search', - header => [{col1 => 'Institutional Directory Setting', - col2 => 'Value',}, - {col1 => 'LON-CAPA Directory Setting', + header => [{col1 => 'Setting', col2 => 'Value',}], print => \&print_directorysrch, modify => \&modify_directorysrch, }, 'contacts' => - { text => 'E-mail addresses and helpform', + { text => 'Contact Information', help => 'Domain_Configuration_Contact_Info', - header => [{col1 => 'Default e-mail addresses', - col2 => 'Value',}, - {col1 => 'Recipient(s) for notifications', - col2 => 'Value',}, - {col1 => 'Ask helpdesk form settings', - col2 => 'Value',},], + header => [{col1 => 'Setting', + col2 => 'Value',}], print => \&print_contacts, modify => \&modify_contacts, }, @@ -347,7 +336,7 @@ sub handler { col2 => 'Enabled?'}, {col1 => 'Institutional user type (login/SSO self-creation)', col2 => 'Information user can enter'}, - {col1 => 'Self-creation with e-mail verification', + {col1 => 'Self-creation with e-mail as username', col2 => 'Settings'}], print => \&print_selfcreation, modify => \&modify_selfcreation, @@ -421,12 +410,10 @@ sub handler { modify => \&modify_serverstatuses, }, 'helpsettings' => - {text => 'Support settings', + {text => 'Help page settings', help => 'Domain_Configuration_Help_Settings', - header => [{col1 => 'Help Page Settings (logged-in users)', - col2 => 'Value'}, - {col1 => 'Helpdesk Roles', - col2 => 'Settings'},], + header => [{col1 => 'Help Settings (logged-in users)', + col2 => 'Value'}], print => \&print_helpsettings, modify => \&modify_helpsettings, }, @@ -452,6 +439,14 @@ sub handler { print => \&print_selfenrollment, modify => \&modify_selfenrollment, }, + 'privacy' => + {text => 'User Privacy', + help => 'Domain_Configuration_User_Privacy', + header => [{col1 => 'Setting', + col2 => 'Value',}], + print => \&print_privacy, + modify => \&modify_privacy, + }, 'usersessions' => {text => 'User session hosting/offloading', help => 'Domain_Configuration_User_Sessions', @@ -464,7 +459,7 @@ sub handler { print => \&print_usersessions, modify => \&modify_usersessions, }, - 'loadbalancing' => + 'loadbalancing' => {text => 'Dedicated Load Balancer(s)', help => 'Domain_Configuration_Load_Balancing', header => [{col1 => 'Balancers', @@ -484,8 +479,6 @@ 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, @@ -528,12 +521,6 @@ $javascript_validations $coursebrowserjs END } - if (grep(/^selfcreation$/,@actions)) { - $js .= &selfcreate_javascript(); - } - if (grep(/^contacts$/,@actions)) { - $js .= &contacts_javascript(); - } &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js); } else { # check if domconfig user exists for the domain. @@ -623,11 +610,11 @@ sub process_changes { } elsif ($action eq 'autocreate') { $output = &modify_autocreate($dom,%domconfig); } elsif ($action eq 'directorysrch') { - $output = &modify_directorysrch($dom,$lastactref,%domconfig); + $output = &modify_directorysrch($dom,%domconfig); } elsif ($action eq 'usercreation') { $output = &modify_usercreation($dom,%domconfig); } elsif ($action eq 'selfcreation') { - $output = &modify_selfcreation($dom,$lastactref,%domconfig); + $output = &modify_selfcreation($dom,%domconfig); } elsif ($action eq 'usermodification') { $output = &modify_usermodification($dom,%domconfig); } elsif ($action eq 'contacts') { @@ -645,7 +632,7 @@ sub process_changes { } elsif ($action eq 'requestauthor') { $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); } elsif ($action eq 'helpsettings') { - $output = &modify_helpsettings($r,$dom,$confname,$lastactref,%domconfig); + $output = &modify_helpsettings($r,$dom,$confname,%domconfig); } elsif ($action eq 'coursedefaults') { $output = &modify_coursedefaults($dom,$lastactref,%domconfig); } elsif ($action eq 'selfenrollment') { @@ -666,22 +653,6 @@ sub print_config_box { $output = &coursecategories_javascript($settings); } elsif ($action eq 'defaults') { $output = &defaults_javascript($settings); - } elsif ($action eq 'helpsettings') { - my (%privs,%levelscurrent); - my %full=(); - my %levels=( - course => {}, - domain => {}, - system => {}, - ); - my $context = 'domain'; - my $crstype = 'Course'; - my $formname = 'display'; - &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); - my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); - $output = - &Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full, - \@templateroles); } $output .= '<table class="LC_nested_outer"> @@ -699,8 +670,7 @@ sub print_config_box { my $colspan = ''; my $rightcolspan = ''; if (($action eq 'rolecolors') || ($action eq 'defaults') || - ($action eq 'directorysrch') || - (($action eq 'login') && ($numheaders < 4))) { + (($action eq 'login') && ($numheaders < 3))) { $colspan = ' colspan="2"'; } if ($action eq 'usersessions') { @@ -717,13 +687,12 @@ sub print_config_box { $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') || ($action eq 'directorysrch') || - ($action eq 'helpsettings') || ($action eq 'contacts')) { + ($action eq 'selfenrollment') || ($action eq 'usersessions')) { $output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); } elsif ($action eq 'coursecategories') { $output .= $item->{'print'}->('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 { @@ -748,8 +717,7 @@ sub print_config_box { $rowtotal ++; if (($action eq 'autoupdate') || ($action eq 'usercreation') || ($action eq 'selfcreation') || ($action eq 'selfenrollment') || - ($action eq 'usersessions') || ($action eq 'coursecategories') || - ($action eq 'contacts') || ($action eq 'defaults')) { + ($action eq 'usersessions') || ($action eq 'coursecategories')) { if ($action eq 'coursecategories') { $output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal); $colspan = ' colspan="2"'; @@ -774,11 +742,10 @@ sub print_config_box { } $rowtotal ++; } elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') || - ($action eq 'defaults') || ($action eq 'directorysrch') || - ($action eq 'helpsettings')) { + ($action eq 'defaults')) { $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); } elsif ($action eq 'login') { - if ($numheaders == 4) { + if ($numheaders == 3) { $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal).' </table> </td> @@ -794,31 +761,9 @@ sub print_config_box { } else { $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); } - $output .= ' - </table> - </td> - </tr> - <tr> - <td> - <table class="LC_nested"> - <tr class="LC_info_row">'; - if ($numheaders == 4) { - $output .= ' - <td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col1'}).'</td> - <td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td> - </tr>'; - } else { - $output .= ' - <td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col1'}).'</td> - <td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col2'}).'</td> - </tr>'; - } - $rowtotal ++; - $output .= &print_login('headtag',$dom,$confname,$phase,$settings,\$rowtotal); } elsif ($action eq 'requestcourses') { - $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); - $rowtotal ++; - $output .= &print_studentcode($settings,\$rowtotal).' + $output .= &print_requestmail($dom,$action,$settings,\$rowtotal). + &print_studentcode($settings,\$rowtotal).' </table> </td> </tr> @@ -853,7 +798,6 @@ sub print_config_box { &print_validation_rows('requestcourses',$dom,$settings,\$rowtotal); } elsif ($action eq 'requestauthor') { $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); - $rowtotal ++; } elsif ($action eq 'rolecolors') { $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).' </table> @@ -888,7 +832,7 @@ sub print_config_box { <td> <table class="LC_nested"> <tr class="LC_info_row">'; - if ($action eq 'login') { + if (($action eq 'login') || ($action eq 'directorysrch')) { $output .= ' <td class="LC_left_item" colspan="2">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>'; } elsif ($action eq 'serverstatuses') { @@ -932,11 +876,13 @@ 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 'serverstatuses') || ($action eq 'loadbalancing')) { + } 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 'scantron') { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); + } elsif ($action eq 'helpsettings') { + $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal); } } $output .= ' @@ -1233,57 +1179,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 .= '<tr'.$css_class.'><td colspan="2">'.$choice.'</td>'. - '<td align="left"><table><tr><th>'.$choices{'hostid'}.'</th>'. - '<th>'.$choices{'current'}.'</th>'. - '<th>'.$choices{'action'}.'</th>'. - '<th>'.$choices{'exempt'}.'</th></tr>'."\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 .= '<tr><td>'.$domservers{$lonhost}.'</td>'; - if ($currurls{$lonhost}) { - $datatable .= '<td class="LC_right_item"><a href="'. - "javascript:void(open('$currurls{$lonhost}?inhibitmenu=yes','Custom_HeadTag', - 'menubar=0,toolbar=1,scrollbars=1,width=600,height=500,resizable=yes'))". - '">'.$lt{'curr'}.'</a></td>'. - '<td><span class="LC_nobreak"><label>'. - '<input type="checkbox" name="loginheadtag_del" value="'.$lonhost.'" />'. - $lt{'del'}.'</label> '.$lt{'rep'}.'</span>'; - } else { - $datatable .= '<td class="LC_right_item">'.$lt{'none'}.'</td><td>'.$lt{'upl'}; - } - $datatable .='<br />'; - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= '<input type="file" name="loginheadtag_'.$lonhost.'" />'; - } - $datatable .= '</td><td><input type="text" name="loginheadtagexempt_'.$lonhost.'" value="'.$exempt.'" /></td></tr>'; - } - $datatable .= '</table></td></tr>'; } return $datatable; } @@ -1317,9 +1212,6 @@ sub login_choices { link => "Link", alink => "Active link", vlink => "Visited link", - headtag => "Custom markup", - action => "Action", - current => "Current", ); return %choices; } @@ -1441,7 +1333,7 @@ sub display_color_options { my $datatable = '<tr'.$css_class.'>'. '<td>'.$choices->{'font'}.'</td>'; if (!$is_custom->{'font'}) { - $datatable .= '<td>'.&mt('Default in use:').' <span class="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>'; + $datatable .= '<td>'.&mt('Default in use:').' <span id="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>'; } else { $datatable .= '<td> </td>'; } @@ -1450,12 +1342,12 @@ sub display_color_options { $datatable .= '<td><span class="LC_nobreak">'. '<input type="text" class="colorchooser" size="10" name="'.$role.'_font"'. ' value="'.$current_color.'" /> '. - ' </span></td></tr>'; + ' </td></tr>'; unless ($role eq 'login') { $datatable .= '<tr'.$css_class.'>'. '<td>'.$choices->{'fontmenu'}.'</td>'; if (!$is_custom->{'fontmenu'}) { - $datatable .= '<td>'.&mt('Default in use:').' <span class="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>'; + $datatable .= '<td>'.&mt('Default in use:').' <span id="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>'; } else { $datatable .= '<td> </td>'; } @@ -1465,7 +1357,7 @@ sub display_color_options { '<input class="colorchooser" type="text" size="10" name="' .$role.'_fontmenu"'. ' value="'.$current_color.'" /> '. - ' </span></td></tr>'; + ' </td></tr>'; } my $switchserver = &check_switchserver($dom,$confname); foreach my $img (@{$images}) { @@ -1524,8 +1416,7 @@ sub display_color_options { if ($fullwidth ne '' && $fullheight ne '') { if ($fullwidth > $width && $fullheight > $height) { my $size = $width.'x'.$height; - my @args = ('convert','-sample',$size,$input,$output); - system({$args[0]} @args); + system("convert -sample $size $input $output"); $showfile = "/$imgdir/tn-".$filename; } } @@ -1583,7 +1474,7 @@ sub display_color_options { my $bgs_def; foreach my $item (@{$bgs}) { if (!$is_custom->{$item}) { - $bgs_def .= '<td><span class="LC_nobreak">'.$choices->{$item}.'</span> <span class="css_default_'.$role.'_'.$item.'" style="background-color: '.$defaults->{'bgs'}{$item}.';"> </span><br />'.$defaults->{'bgs'}{$item}.'</td>'; + $bgs_def .= '<td><span class="LC_nobreak">'.$choices->{$item}.'</span> <span id="css_default_'.$role.'_'.$item.'" style="background-color: '.$defaults->{'bgs'}{$item}.';"> </span><br />'.$defaults->{'bgs'}{$item}.'</td>'; } } if ($bgs_def) { @@ -1611,7 +1502,7 @@ sub display_color_options { my $links_def; foreach my $item (@{$links}) { if (!$is_custom->{$item}) { - $links_def .= '<td>'.$choices->{$item}.'<br /><span class="css_default_'.$role.'_'.$item.'" style="color: '.$defaults->{'links'}{$item}.';">'.$defaults->{'links'}{$item}.'</span></td>'; + $links_def .= '<td>'.$choices->{$item}.'<br /><span id="css_default_'.$role.'_'.$item.'" style="color: '.$defaults->{'links'}{$item}.';">'.$defaults->{'links'}{$item}.'</span></td>'; } } if ($links_def) { @@ -1697,15 +1588,17 @@ sub image_changes { my ($is_custom,$alt_text,$img_import,$showfile,$fullsize,$role,$img,$imgfile,$logincolors) = @_; my $output; if ($img eq 'login') { - $output = '</td><td>'.$logincolors; # suppress image for Log-in header + # suppress image for Log-in header } elsif (!$is_custom) { if ($img ne 'domlogo') { - $output = &mt('Default image:').'<br />'; + $output .= &mt('Default image:').'<br />'; } else { - $output = &mt('Default in use:').'<br />'; + $output .= &mt('Default in use:').'<br />'; } } - if ($img ne 'login') { + if ($img eq 'login') { # suppress image for Log-in header + $output .= '<td>'.$logincolors; + } else { if ($img_import) { $output .= '<input type="hidden" name="'.$role.'_import_'.$img.'" value="'.$imgfile.'" />'; } @@ -2149,7 +2042,7 @@ sub print_quotas { } sub print_requestmail { - my ($dom,$action,$settings,$rowtotal,$customcss,$rowstyle) = @_; + my ($dom,$action,$settings,$rowtotal) = @_; my ($now,$datatable,%currapp); $now = time; if (ref($settings) eq 'HASH') { @@ -2161,19 +2054,7 @@ sub print_requestmail { } my $numinrow = 2; my $css_class; - if ($$rowtotal%2) { - $css_class = 'LC_odd_row'; - } - if ($customcss) { - $css_class .= " $customcss"; - } - $css_class =~ s/^\s+//; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowstyle) { - $css_class .= ' style="'.$rowstyle.'"'; - } + $css_class = ($$rowtotal%2? ' class="LC_odd_row"':''); my $text; if ($action eq 'requestcourses') { $text = &mt('Receive notification of course requests requiring approval'); @@ -2193,6 +2074,7 @@ sub print_requestmail { $datatable .= &mt('There are no active Domain Coordinators'); } $datatable .='</td></tr>'; + $$rowtotal += $rows; return $datatable; } @@ -2201,11 +2083,9 @@ sub print_studentcode { 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}; - } + if (ref($settings->{'uniquecode'}) eq 'HASH') { + foreach my $type (@crstypes) { + $current{$type} = $settings->{'uniquecode'}{$type}; } } $output .= '<tr>'. @@ -2328,7 +2208,7 @@ sub print_textbookcourses { $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>'; } $datatable .= '</select> '."\n". - '<input type="checkbox" name="'.$type.'_addbook" value="1" />'.&mt('Add').'</span></td>'."\n". + '<input type="checkbox" name="'.$type.'_addbook" value="1" />'.&mt('Add').'</td>'."\n". '<td colspan="2">'. '<span class="LC_nobreak">'.&mt('Subject:').'<input type="text" size="15" name="'.$type.'_addbook_subject" value="" /></span> '."\n". (' 'x2). @@ -2345,13 +2225,13 @@ sub print_textbookcourses { } else { $datatable .= '<input type="file" name="'.$type.'_addbook_image" value="" />'; } - $datatable .= '</span>'."\n"; } - $datatable .= '<span class="LC_nobreak">'.&mt('LON-CAPA course:').' '. + $datatable .= '</span>'."\n". + '<span class="LC_nobreak">'.&mt('LON-CAPA course:').' '. &Apache::loncommon::select_dom_form($env{'request.role.domain'},$type.'_addbook_cdom'). '<input type="text" size="25" name="'.$type.'_addbook_cnum" value="" />'. &Apache::loncommon::selectcourse_link - ('display',$type.'_addbook_cnum',$type.'_addbook_cdom',undef,undef,undef,'Course'). + ('display',$type.'_addbook_cnum',$type.'_addbook_cdom',undef,undef,undef,'Course'); '</span></td>'."\n". '</tr>'."\n"; $itemcount ++; @@ -2454,7 +2334,7 @@ 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') { @@ -2488,9 +2368,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" '; @@ -2526,12 +2403,8 @@ sub print_autoenroll { $coownerson.' value="1" />'.&mt('Yes').'</label> '. '<label><input type="radio" name="autoassign_coowners"'. $coownersoff.' value="0" />'.&mt('No').'</label></span></td>'. - '</tr><tr>'. - '<td>'.&mt('Failsafe for no drops when institutional data missing').'</td>'. - '<td class="LC_right_item"><span class="LC_nobreak">'. - '<input type="text" name="autoenroll_failsafe"'. - ' value="'.$failsafe.'" size="4" /></span></td></tr>'; - $$rowtotal += 4; + '</tr>'; + $$rowtotal += 3; return $datatable; } @@ -2579,7 +2452,7 @@ sub print_autoupdate { my $locknamesettings; $datatable .= &insttypes_row($settings,$types,$usertypes, $dom,$numinrow,$othertitle, - 'lockablenames',$rowtotal); + 'lockablenames'); $$rowtotal ++; } else { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -2646,806 +2519,248 @@ sub print_autocreate { $createoff{'req'}.' value="0" />'.&mt('No').'</label></span>'; my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', 'autocreate_xmldc',%currhash); - $datatable .= '</td></tr><tr class="LC_odd_row"><td>'; if ($numdc > 1) { - $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)'). - '</td><td class="LC_left_item">'; + $datatable .= '</td></tr><tr class="LC_odd_row"><td>'. + &mt('Course creation processed as: (choose Dom. Coord.)'). + '</td><td class="LC_left_item">'.$dctable.'</td></tr>'; } else { - $datatable .= &mt('Course creation processed as:'). - '</td><td class="LC_right_item">'; + $datatable .= $dctable.'</td></tr>'; } - $datatable .= $dctable.'</td></tr>'; $$rowtotal += $rows; return $datatable; } sub print_directorysrch { - my ($position,$dom,$settings,$rowtotal) = @_; - my $datatable; - if ($position eq 'top') { - my $instsrchon = ' '; - my $instsrchoff = ' checked="checked" '; - my ($exacton,$containson,$beginson); - my $instlocalon = ' '; - my $instlocaloff = ' checked="checked" '; - if (ref($settings) eq 'HASH') { - if ($settings->{'available'} eq '1') { - $instsrchon = $instsrchoff; - $instsrchoff = ' '; - } - if ($settings->{'localonly'} eq '1') { - $instlocalon = $instlocaloff; - $instlocaloff = ' '; - } - if (ref($settings->{'searchtypes'}) eq 'ARRAY') { - foreach my $type (@{$settings->{'searchtypes'}}) { - if ($type eq 'exact') { - $exacton = ' checked="checked" '; - } elsif ($type eq 'contains') { - $containson = ' checked="checked" '; - } elsif ($type eq 'begins') { - $beginson = ' checked="checked" '; - } - } - } else { - if ($settings->{'searchtypes'} eq 'exact') { - $exacton = ' checked="checked" '; - } elsif ($settings->{'searchtypes'} eq 'contains') { - $containson = ' checked="checked" '; - } elsif ($settings->{'searchtypes'} eq 'specify') { + my ($dom,$settings,$rowtotal) = @_; + my $srchon = ' '; + my $srchoff = ' checked="checked" '; + my ($exacton,$containson,$beginson); + my $localon = ' '; + my $localoff = ' checked="checked" '; + if (ref($settings) eq 'HASH') { + if ($settings->{'available'} eq '1') { + $srchon = $srchoff; + $srchoff = ' '; + } + if ($settings->{'localonly'} eq '1') { + $localon = $localoff; + $localoff = ' '; + } + if (ref($settings->{'searchtypes'}) eq 'ARRAY') { + foreach my $type (@{$settings->{'searchtypes'}}) { + if ($type eq 'exact') { $exacton = ' checked="checked" '; + } elsif ($type eq 'contains') { $containson = ' checked="checked" '; + } elsif ($type eq 'begins') { + $beginson = ' checked="checked" '; } } - } - my ($searchtitles,$titleorder) = &sorted_searchtitles(); - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - - my $numinrow = 4; - my $cansrchrow = 0; - $datatable='<tr class="LC_odd_row">'. - '<td colspan="2"><span class ="LC_nobreak">'.&mt('Institutional directory search available?').'</span></td>'. - '<td class="LC_right_item"><span class="LC_nobreak"><label>'. - '<input type="radio" name="dirsrch_available"'. - $instsrchon.' value="1" />'.&mt('Yes').'</label> '. - '<label><input type="radio" name="dirsrch_available"'. - $instsrchoff.' value="0" />'.&mt('No').'</label></span></td>'. - '</tr><tr>'. - '<td colspan="2"><span class ="LC_nobreak">'.&mt('Other domains can search institution?').'</span></td>'. - '<td class="LC_right_item"><span class="LC_nobreak"><label>'. - '<input type="radio" name="dirsrch_instlocalonly"'. - $instlocaloff.' value="0" />'.&mt('Yes').'</label> '. - '<label><input type="radio" name="dirsrch_instlocalonly"'. - $instlocalon.' value="1" />'.&mt('No').'</label></span></td>'. - '</tr>'; - $$rowtotal += 2; - if (ref($usertypes) eq 'HASH') { - if (keys(%{$usertypes}) > 0) { - $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, - $numinrow,$othertitle,'cansearch', - $rowtotal); - $cansrchrow = 1; + } else { + if ($settings->{'searchtypes'} eq 'exact') { + $exacton = ' checked="checked" '; + } elsif ($settings->{'searchtypes'} eq 'contains') { + $containson = ' checked="checked" '; + } elsif ($settings->{'searchtypes'} eq 'specify') { + $exacton = ' checked="checked" '; + $containson = ' checked="checked" '; } } - if ($cansrchrow) { - $$rowtotal ++; - $datatable .= '<tr>'; - } else { - $datatable .= '<tr class="LC_odd_row">'; + } + my ($searchtitles,$titleorder) = &sorted_searchtitles(); + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); + + my $numinrow = 4; + my $cansrchrow = 0; + my $datatable='<tr class="LC_odd_row">'. + '<td colspan="2"><span class ="LC_nobreak">'.&mt('Directory search available?').'</span></td>'. + '<td class="LC_right_item"><span class="LC_nobreak"><label>'. + '<input type="radio" name="dirsrch_available"'. + $srchon.' value="1" />'.&mt('Yes').'</label> '. + '<label><input type="radio" name="dirsrch_available"'. + $srchoff.' value="0" />'.&mt('No').'</label></span></td>'. + '</tr><tr>'. + '<td colspan="2"><span class ="LC_nobreak">'.&mt('Other domains can search?').'</span></td>'. + '<td class="LC_right_item"><span class="LC_nobreak"><label>'. + '<input type="radio" name="dirsrch_localonly"'. + $localoff.' value="0" />'.&mt('Yes').'</label> '. + '<label><input type="radio" name="dirsrch_localonly"'. + $localon.' value="1" />'.&mt('No').'</label></span></td>'. + '</tr>'; + $$rowtotal += 2; + if (ref($usertypes) eq 'HASH') { + if (keys(%{$usertypes}) > 0) { + $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, + $numinrow,$othertitle,'cansearch'); + $cansrchrow = 1; } - $datatable .= '<td><span class ="LC_nobreak">'.&mt('Supported search methods'). - '</span></td><td class="LC_left_item" colspan="2"><table><tr>'; - foreach my $title (@{$titleorder}) { - if (defined($searchtitles->{$title})) { - my $check = ' '; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'searchby'}) eq 'ARRAY') { - if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) { - $check = ' checked="checked" '; - } + } + if ($cansrchrow) { + $$rowtotal ++; + $datatable .= '<tr>'; + } else { + $datatable .= '<tr class="LC_odd_row">'; + } + $datatable .= '<td><span class ="LC_nobreak">'.&mt('Supported search methods'). + '</span></td><td class="LC_left_item" colspan="2"><table><tr>'; + foreach my $title (@{$titleorder}) { + if (defined($searchtitles->{$title})) { + my $check = ' '; + if (ref($settings) eq 'HASH') { + if (ref($settings->{'searchby'}) eq 'ARRAY') { + if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) { + $check = ' checked="checked" '; } } - $datatable .= '<td class="LC_left_item">'. - '<span class="LC_nobreak"><label>'. - '<input type="checkbox" name="searchby" '. - 'value="'.$title.'"'.$check.'/>'. - $searchtitles->{$title}.'</label></span></td>'; } + $datatable .= '<td class="LC_left_item">'. + '<span class="LC_nobreak"><label>'. + '<input type="checkbox" name="searchby" '. + 'value="'.$title.'"'.$check.'/>'. + $searchtitles->{$title}.'</label></span></td>'; } - $datatable .= '</tr></table></td></tr>'; - $$rowtotal ++; - if ($cansrchrow) { - $datatable .= '<tr class="LC_odd_row">'; - } else { - $datatable .= '<tr>'; - } - $datatable .= '<td><span class ="LC_nobreak">'.&mt('Search latitude').'</span></td>'. - '<td class="LC_left_item" colspan="2">'. - '<span class="LC_nobreak"><label>'. - '<input type="checkbox" name="searchtypes" '. - $exacton.' value="exact" />'.&mt('Exact match'). - '</label> '. - '<label><input type="checkbox" name="searchtypes" '. - $beginson.' value="begins" />'.&mt('Begins with'). - '</label> '. - '<label><input type="checkbox" name="searchtypes" '. - $containson.' value="contains" />'.&mt('Contains'). - '</label></span></td></tr>'; - $$rowtotal ++; + } + $datatable .= '</tr></table></td></tr>'; + $$rowtotal ++; + if ($cansrchrow) { + $datatable .= '<tr class="LC_odd_row">'; } else { - my $domsrchon = ' checked="checked" '; - my $domsrchoff = ' '; - my $domlocalon = ' '; - my $domlocaloff = ' checked="checked" '; - if (ref($settings) eq 'HASH') { - if ($settings->{'lclocalonly'} eq '1') { - $domlocalon = $domlocaloff; - $domlocaloff = ' '; - } - if ($settings->{'lcavailable'} eq '0') { - $domsrchoff = $domsrchon; - $domsrchon = ' '; - } - } - $datatable='<tr class="LC_odd_row">'. - '<td colspan="2"><span class ="LC_nobreak">'.&mt('LON-CAPA directory search available?').'</span></td>'. - '<td class="LC_right_item"><span class="LC_nobreak"><label>'. - '<input type="radio" name="dirsrch_domavailable"'. - $domsrchon.' value="1" />'.&mt('Yes').'</label> '. - '<label><input type="radio" name="dirsrch_domavailable"'. - $domsrchoff.' value="0" />'.&mt('No').'</label></span></td>'. - '</tr><tr>'. - '<td colspan="2"><span class ="LC_nobreak">'.&mt('Other domains can search LON-CAPA domain?').'</span></td>'. - '<td class="LC_right_item"><span class="LC_nobreak"><label>'. - '<input type="radio" name="dirsrch_domlocalonly"'. - $domlocaloff.' value="0" />'.&mt('Yes').'</label> '. - '<label><input type="radio" name="dirsrch_domlocalonly"'. - $domlocalon.' value="1" />'.&mt('No').'</label></span></td>'. - '</tr>'; - $$rowtotal += 2; + $datatable .= '<tr>'; } + $datatable .= '<td><span class ="LC_nobreak">'.&mt('Search latitude').'</span></td>'. + '<td class="LC_left_item" colspan="2">'. + '<span class="LC_nobreak"><label>'. + '<input type="checkbox" name="searchtypes" '. + $exacton.' value="exact" />'.&mt('Exact match'). + '</label> '. + '<label><input type="checkbox" name="searchtypes" '. + $beginson.' value="begins" />'.&mt('Begins with'). + '</label> '. + '<label><input type="checkbox" name="searchtypes" '. + $containson.' value="contains" />'.&mt('Contains'). + '</label></span></td></tr>'; + $$rowtotal ++; return $datatable; } sub print_contacts { - my ($position,$dom,$settings,$rowtotal) = @_; + my ($dom,$settings,$rowtotal) = @_; my $datatable; my @contacts = ('adminemail','supportemail'); - my (%checked,%to,%otheremails,%bccemails,%includestr,%includeloc,%currfield, - $maxsize,$fields,$fieldtitles,$fieldoptions,$possoptions,@mailings); - if ($position eq 'top') { - if (ref($settings) eq 'HASH') { - foreach my $item (@contacts) { - if (exists($settings->{$item})) { - $to{$item} = $settings->{$item}; - } - } - } - } elsif ($position eq 'middle') { - @mailings = ('errormail','packagesmail','lonstatusmail','requestsmail', - 'updatesmail','idconflictsmail','hostipmail'); - foreach my $type (@mailings) { - $otheremails{$type} = ''; - } - } else { - @mailings = ('helpdeskmail','otherdomsmail'); - foreach my $type (@mailings) { - $otheremails{$type} = ''; - } - $bccemails{'helpdeskmail'} = ''; - $bccemails{'otherdomsmail'} = ''; - $includestr{'helpdeskmail'} = ''; - $includestr{'otherdomsmail'} = ''; - ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields(); + my (%checked,%to,%otheremails,%bccemails); + my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail', + 'requestsmail','updatesmail','idconflictsmail'); + foreach my $type (@mailings) { + $otheremails{$type} = ''; } + $bccemails{'helpdeskmail'} = ''; if (ref($settings) eq 'HASH') { - unless ($position eq 'top') { - foreach my $type (@mailings) { - if (exists($settings->{$type})) { - if (ref($settings->{$type}) eq 'HASH') { - foreach my $item (@contacts) { - if ($settings->{$type}{$item}) { - $checked{$type}{$item} = ' checked="checked" '; - } - } - $otheremails{$type} = $settings->{$type}{'others'}; - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { - $bccemails{$type} = $settings->{$type}{'bcc'}; - if ($settings->{$type}{'include'} ne '') { - ($includeloc{$type},$includestr{$type}) = split(/:/,$settings->{$type}{'include'},2); - $includestr{$type} = &unescape($includestr{$type}); - } - } - } - } elsif ($type eq 'lonstatusmail') { - $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; - } + foreach my $item (@contacts) { + if (exists($settings->{$item})) { + $to{$item} = $settings->{$item}; } } - if ($position eq 'bottom') { - foreach my $type (@mailings) { - $bccemails{$type} = $settings->{$type}{'bcc'}; - if ($settings->{$type}{'include'} ne '') { - ($includeloc{$type},$includestr{$type}) = split(/:/,$settings->{$type}{'include'},2); - $includestr{$type} = &unescape($includestr{$type}); - } - } - if (ref($settings->{'helpform'}) eq 'HASH') { - if (ref($fields) eq 'ARRAY') { - foreach my $field (@{$fields}) { - $currfield{$field} = $settings->{'helpform'}{$field}; + foreach my $type (@mailings) { + if (exists($settings->{$type})) { + if (ref($settings->{$type}) eq 'HASH') { + foreach my $item (@contacts) { + if ($settings->{$type}{$item}) { + $checked{$type}{$item} = ' checked="checked" '; + } } - } - if (exists($settings->{'helpform'}{'maxsize'})) { - $maxsize = $settings->{'helpform'}{'maxsize'}; - } else { - $maxsize = '1.0'; - } - } else { - if (ref($fields) eq 'ARRAY') { - foreach my $field (@{$fields}) { - $currfield{$field} = 'yes'; + $otheremails{$type} = $settings->{$type}{'others'}; + if ($type eq 'helpdeskmail') { + $bccemails{$type} = $settings->{$type}{'bcc'}; } } - $maxsize = '1.0'; + } elsif ($type eq 'lonstatusmail') { + $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; } } } else { - if ($position eq 'top') { - $to{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'}; - $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'}; - $checked{'errormail'}{'adminemail'} = ' checked="checked" '; - $checked{'packagesmail'}{'adminemail'} = ' checked="checked" '; - $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; - $checked{'requestsmail'}{'adminemail'} = ' checked="checked" '; - $checked{'updatesmail'}{'adminemail'} = ' checked="checked" '; - $checked{'idconflictsmail'}{'adminemail'} = ' checked="checked" '; - $checked{'hostipmail'}{'adminemail'} = ' checked="checked" '; - } elsif ($position eq 'bottom') { - $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; - $checked{'otherdomsmail'}{'supportemail'} = ' checked="checked" '; - if (ref($fields) eq 'ARRAY') { - foreach my $field (@{$fields}) { - $currfield{$field} = 'yes'; - } - } - $maxsize = '1.0'; - } + $to{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'}; + $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'}; + $checked{'errormail'}{'adminemail'} = ' checked="checked" '; + $checked{'packagesmail'}{'adminemail'} = ' checked="checked" '; + $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; + $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; - if ($position eq 'top') { - foreach my $item (@contacts) { - $css_class = $rownum%2?' class="LC_odd_row"':''; - $datatable .= '<tr'.$css_class.'>'. - '<td><span class="LC_nobreak">'.$titles->{$item}. - '</span></td><td class="LC_right_item">'. - '<input type="text" name="'.$item.'" value="'. - $to{$item}.'" /></td></tr>'; - $rownum ++; - } - } else { - foreach my $type (@mailings) { - $css_class = $rownum%2?' class="LC_odd_row"':''; - $datatable .= '<tr'.$css_class.'>'. - '<td><span class="LC_nobreak">'. - $titles->{$type}.': </span></td>'. - '<td class="LC_left_item">'; - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { - $datatable .= '<fieldset><legend>'.&mt('E-mail recipient(s)').'</legend>'; - } - $datatable .= '<span class="LC_nobreak">'; - foreach my $item (@contacts) { - $datatable .= '<label>'. - '<input type="checkbox" name="'.$type.'"'. - $checked{$type}{$item}. - ' value="'.$item.'" />'.$short_titles->{$item}. - '</label> '; - } - $datatable .= '</span><br />'.&mt('Others').': '. - '<input type="text" name="'.$type.'_others" '. - 'value="'.$otheremails{$type}.'" />'; - my %locchecked; - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { - foreach my $loc ('s','b') { - if ($includeloc{$type} eq $loc) { - $locchecked{$loc} = ' checked="checked"'; - last; - } - } - $datatable .= '<br />'.&mt('Bcc:').(' 'x6). - '<input type="text" name="'.$type.'_bcc" '. - 'value="'.$bccemails{$type}.'" /></fieldset>'. - '<fieldset><legend>'.&mt('Optional added text').'</legend>'. - &mt('Text automatically added to e-mail:').' '. - '<input type="text" name="'.$type.'_includestr" value="'.$includestr{$type}.'" /><br />'. - '<span class="LC_nobreak">'.&mt('Location:').' '. - '<label><input type="radio" name="'.$type.'_includeloc" value="s"'.$locchecked{'s'}.' />'.&mt('in subject').'</label>'. - (' 'x2). - '<label><input type="radio" name="'.$type.'_includeloc" value="b"'.$locchecked{'b'}.' />'.&mt('in body').'</label>'. - '</span></fieldset>'; - } - $datatable .= '</td></tr>'."\n"; - $rownum ++; - } + foreach my $item (@contacts) { + $css_class = $rownum%2?' class="LC_odd_row"':''; + $datatable .= '<tr'.$css_class.'>'. + '<td><span class="LC_nobreak">'.$titles->{$item}. + '</span></td><td class="LC_right_item">'. + '<input type="text" name="'.$item.'" value="'. + $to{$item}.'" /></td></tr>'; + $rownum ++; } - if ($position eq 'middle') { - 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; - } elsif ($position eq 'bottom') { + foreach my $type (@mailings) { $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= '<tr'.$css_class.'>'. - '<td>'.&mt('Extra helpdesk form fields:').'<br />'. - &mt('(e-mail, subject, and description always shown)'). - '</td><td class="LC_left_item">'; - if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') && - (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) { - $datatable .= '<table><tr><th>'.&mt('Field').'</th><th>'.&mt('Status').'</th></tr>'; - foreach my $field (@{$fields}) { - $datatable .= '<tr><td>'.$fieldtitles->{$field}; - if (($field eq 'screenshot') || ($field eq 'cc')) { - $datatable .= ' '.&mt('(logged-in users)'); - } - $datatable .='</td><td>'; - my $clickaction; - if ($field eq 'screenshot') { - $clickaction = ' onclick="screenshotSize(this);"'; - } - if (ref($possoptions->{$field}) eq 'ARRAY') { - foreach my $option (@{$possoptions->{$field}}) { - my $checked; - if ($currfield{$field} eq $option) { - $checked = ' checked="checked"'; - } - $datatable .= '<span class="LC_nobreak"><label>'. - '<input type="radio" name="helpform_'.$field.'" '. - 'value="'.$option.'"'.$checked.$clickaction.' />'.$fieldoptions->{$option}. - '</label></span>'.(' 'x2); - } - } - if ($field eq 'screenshot') { - my $display; - if ($currfield{$field} eq 'no') { - $display = ' style="display:none"'; - } - $datatable .= '</td></tr><tr id="help_screenshotsize"'.$display.'>'. - '<td>'.&mt('Maximum size for upload (MB)').'</td><td>'. - '<input type="text" size="5" name="helpform_maxsize" value="'.$maxsize.'" />'; - } - $datatable .= '</td></tr>'; - } - $datatable .= '</table>'; + '<td><span class="LC_nobreak">'. + $titles->{$type}.': </span></td>'. + '<td class="LC_left_item">'. + '<span class="LC_nobreak">'; + foreach my $item (@contacts) { + $datatable .= '<label>'. + '<input type="checkbox" name="'.$type.'"'. + $checked{$type}{$item}. + ' value="'.$item.'" />'.$short_titles->{$item}. + '</label> '; + } + $datatable .= '</span><br />'.&mt('Others').': '. + '<input type="text" name="'.$type.'_others" '. + 'value="'.$otheremails{$type}.'" />'; + if ($type eq 'helpdeskmail') { + $datatable .= '<br />'.&mt('Bcc:').(' 'x6). + '<input type="text" name="'.$type.'_bcc" '. + 'value="'.$bccemails{$type}.'" />'; } $datatable .= '</td></tr>'."\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; } -sub contacts_javascript { - return <<"ENDSCRIPT"; - -<script type="text/javascript"> -// <![CDATA[ - -function screenshotSize(field) { - if (document.getElementById('help_screenshotsize')) { - if (field.value == 'no') { - document.getElementById('help_screenshotsize').style.display="none"; - } else { - document.getElementById('help_screenshotsize').style.display=""; - } - } - return; -} - -// ]]> -</script> - -ENDSCRIPT -} - sub print_helpsettings { - my ($position,$dom,$settings,$rowtotal) = @_; - my $confname = $dom.'-domainconfig'; - my $formname = 'display'; + my ($dom,$confname,$settings,$rowtotal) = @_; my ($datatable,$itemcount); - if ($position eq 'top') { - $itemcount = 1; - my (%choices,%defaultchecked,@toggles); - $choices{'submitbugs'} = &mt('Display link to: [_1]?', - &Apache::loncommon::modal_link('http://bugs.loncapa.org', - &mt('LON-CAPA bug tracker'),600,500)); - %defaultchecked = ('submitbugs' => 'on'); - @toggles = ('submitbugs'); - ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, - \%choices,$itemcount); - $$rowtotal ++; - } else { - my $css_class; - my %existing=&Apache::lonnet::dump('roles',$dom,$confname,'rolesdef_'); - my (%customroles,%ordered,%current); - if (ref($settings) eq 'HASH') { - if (ref($settings->{'adhoc'}) eq 'HASH') { - %current = %{$settings->{'adhoc'}}; - } - } - my $count = 0; - foreach my $key (sort(keys(%existing))) { - if ($key=~/^rolesdef\_(\w+)$/) { - my $rolename = $1; - my (%privs,$order); - ($privs{'system'},$privs{'domain'},$privs{'course'}) = split(/\_/,$existing{$key}); - $customroles{$rolename} = \%privs; - if (ref($current{$rolename}) eq 'HASH') { - $order = $current{$rolename}{'order'}; - } - if ($order eq '') { - $order = $count; - } - $ordered{$order} = $rolename; - $count++; - } - } - my $maxnum = scalar(keys(%ordered)); - my @roles_by_num = (); - foreach my $item (sort {$a <=> $b } (keys(%ordered))) { - push(@roles_by_num,$item); - } - my $context = 'domprefs'; - my $crstype = 'Course'; - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my @accesstypes = ('all','dh','da','none'); - my ($numstatustypes,@jsarray); - if (ref($types) eq 'ARRAY') { - if (@{$types} > 0) { - $numstatustypes = scalar(@{$types}); - push(@accesstypes,'status'); - @jsarray = ('bystatus'); - } - } - my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']); - if (keys(%domhelpdesk)) { - push(@accesstypes,('inc','exc')); - push(@jsarray,('notinc','notexc')); - } - my $hiddenstr = join("','",@jsarray); - $datatable .= &helpsettings_javascript(\@roles_by_num,$maxnum,$hiddenstr,$formname); - my $context = 'domprefs'; - my $crstype = 'Course'; - my $prefix = 'helproles_'; - my $add_class = 'LC_hidden'; - foreach my $num (@roles_by_num) { - my $role = $ordered{$num}; - my ($desc,$access,@statuses); - if (ref($current{$role}) eq 'HASH') { - $desc = $current{$role}{'desc'}; - $access = $current{$role}{'access'}; - if (ref($current{$role}{'insttypes'}) eq 'ARRAY') { - @statuses = @{$current{$role}{'insttypes'}}; - } - } - if ($desc eq '') { - $desc = $role; - } - my $identifier = 'custhelp'.$num; - my %full=(); - my %levels= ( - course => {}, - domain => {}, - system => {}, - ); - my %levelscurrent=( - course => {}, - domain => {}, - system => {}, - ); - &Apache::lonuserutils::custom_role_privs($customroles{$role},\%full,\%levels,\%levelscurrent); - my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $chgstr = ' onchange="javascript:reorderHelpRoles(this.form,'."'helproles_".$num."_pos'".');"'; - $datatable .= '<tr '.$css_class.'><td valign="top"><b>'.$role.'</b><br />'. - '<select name="helproles_'.$num.'_pos"'.$chgstr.'>'; - for (my $k=0; $k<=$maxnum; $k++) { - my $vpos = $k+1; - my $selstr; - if ($k == $num) { - $selstr = ' selected="selected" '; - } - $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>'; - } - $datatable .= '</select>'.(' 'x2). - '<input type="hidden" name="helproles_'.$num.'" value="'.$role.'" />'. - '</td>'. - '<td><fieldset><legend>'.&mt('Role name').'</legend>'. - &mt('Name shown to users:'). - '<input type="text" name="helproles_'.$num.'_desc" value="'.$desc.'" />'. - '</fieldset>'. - &helpdeskroles_access($dom,$prefix,$num,$add_class,$current{$role},\@accesstypes, - $othertitle,$usertypes,$types,\%domhelpdesk). - '<fieldset>'. - '<legend>'.&mt('Role privileges').&adhocbutton($prefix,$num,'privs','show').'</legend>'. - &Apache::lonuserutils::custom_role_table($crstype,\%full,\%levels, - \%levelscurrent,$identifier, - 'LC_hidden',$prefix.$num.'_privs'). - '</fieldset></td>'; - $itemcount ++; - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $newcust = 'custhelp'.$count; - my (%privs,%levelscurrent); - my %full=(); - my %levels= ( - course => {}, - domain => {}, - system => {}, - ); - &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); - my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); - my $chgstr = ' onchange="javascript:reorderHelpRoles(this.form,'."'helproles_".$count."_pos'".');"'; - $datatable .= '<tr '.$css_class.'><td valign="top"><span class="LC_nobreak"><label>'. - '<input type="hidden" name="helproles_maxnum" value="'.$maxnum.'" />'."\n". - '<select name="helproles_'.$count.'_pos"'.$chgstr.'>'; - for (my $k=0; $k<$maxnum+1; $k++) { - my $vpos = $k+1; - my $selstr; - if ($k == $maxnum) { - $selstr = ' selected="selected" '; - } - $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>'; - } - $datatable .= '</select> '."\n". - '<input type="checkbox" name="newcusthelp" value="'.$count.'" />'. &mt('Add'). - '</label></span></td>'. - '<td><fieldset><legend>'.&mt('Role name').'</legend>'. - '<span class="LC_nobreak">'. - &mt('Internal name:'). - '<input type="text" size="10" name="custhelpname'.$count.'" value="" />'. - '</span>'.(' 'x4). - '<span class="LC_nobreak">'. - &mt('Name shown to users:'). - '<input type="text" size="20" name="helproles_'.$count.'_desc" value="" />'. - '</span></fieldset>'. - &helpdeskroles_access($dom,$prefix,$count,'',undef,\@accesstypes,$othertitle, - $usertypes,$types,\%domhelpdesk). - '<fieldset><legend>'.&mt('Role privileges').'</legend>'. - &Apache::lonuserutils::custom_role_header($context,$crstype, - \@templateroles,$newcust). - &Apache::lonuserutils::custom_role_table('Course',\%full,\%levels, - \%levelscurrent,$newcust). - '</fieldset>'. - &helpsettings_javascript(\@roles_by_num,$maxnum,$hiddenstr,$formname). - '</td></tr>'; - $count ++; - $$rowtotal += $count; - } - return $datatable; -} - -sub adhocbutton { - my ($prefix,$num,$field,$visibility) = @_; - my %lt = &Apache::lonlocal::texthash( - show => 'Show details', - hide => 'Hide details', - ); - return '<span style="text-decoration:line-through; font-weight: normal;">'.(' 'x10). - '</span>'.(' 'x2).'<input type="button" id="'.$prefix.$num.'_'.$field.'_vis"'. - ' value="'.$lt{$visibility}.'" style="height:20px;" '. - 'onclick="toggleHelpdeskItem('."'$num','$field'".');" />'.(' 'x2); -} - -sub helpsettings_javascript { - my ($roles_by_num,$total,$hiddenstr,$formname) = @_; - return unless(ref($roles_by_num) eq 'ARRAY'); - my %html_js_lt = &Apache::lonlocal::texthash( - show => 'Show details', - hide => 'Hide details', - ); - &html_escape(\%html_js_lt); - my $jstext = ' var helproles = Array('."'".join("','",@{$roles_by_num})."'".');'."\n"; - return <<"ENDSCRIPT"; -<script type="text/javascript"> -// <![CDATA[ - -function reorderHelpRoles(form,item) { - var changedVal; -$jstext - var newpos = 'helproles_${total}_pos'; - var maxh = 1 + $total; - var current = new Array(); - var newitemVal = form.elements[newpos].options[form.elements[newpos].selectedIndex].value; - if (item == newpos) { - changedVal = newitemVal; - } else { - changedVal = form.elements[item].options[form.elements[item].selectedIndex].value; - current[newitemVal] = newpos; - } - for (var i=0; i<helproles.length; i++) { - var elementName = 'helproles_'+helproles[i]+'_pos'; - if (elementName != item) { - if (form.elements[elementName]) { - var currVal = form.elements[elementName].options[form.elements[elementName].selectedIndex].value; - current[currVal] = elementName; - } - } - } - var oldVal; - for (var j=0; j<maxh; j++) { - if (current[j] == undefined) { - oldVal = j; - } - } - if (oldVal < changedVal) { - for (var k=oldVal+1; k<=changedVal ; k++) { - var elementName = current[k]; - form.elements[elementName].selectedIndex = form.elements[elementName].selectedIndex - 1; - } - } else { - for (var k=changedVal; k<oldVal; k++) { - var elementName = current[k]; - form.elements[elementName].selectedIndex = form.elements[elementName].selectedIndex + 1; - } - } - return; -} - -function helpdeskAccess(num) { - var curraccess = null; - if (document.$formname.elements['helproles_'+num+'_access'].length) { - for (var i=0; i<document.$formname.elements['helproles_'+num+'_access'].length; i++) { - if (document.$formname.elements['helproles_'+num+'_access'][i].checked) { - curraccess = document.$formname.elements['helproles_'+num+'_access'][i].value; - } - } - } - var shown = Array(); - var hidden = Array(); - if (curraccess == 'none') { - hidden = Array('$hiddenstr'); - } else { - if (curraccess == 'status') { - shown = Array('bystatus'); - hidden = Array('notinc','notexc'); - } else { - if (curraccess == 'exc') { - shown = Array('notexc'); - hidden = Array('notinc','bystatus'); - } - if (curraccess == 'inc') { - shown = Array('notinc'); - hidden = Array('notexc','bystatus'); - } - if ((curraccess == 'all') || (curraccess == 'dh') || (curraccess == 'da')) { - hidden = Array('notinc','notexc','bystatus'); - } - } - } - if (hidden.length > 0) { - for (var i=0; i<hidden.length; i++) { - if (document.getElementById('helproles_'+num+'_'+hidden[i])) { - document.getElementById('helproles_'+num+'_'+hidden[i]).style.display = 'none'; - } - } - } - if (shown.length > 0) { - for (var i=0; i<shown.length; i++) { - if (document.getElementById('helproles_'+num+'_'+shown[i])) { - if (shown[i] == 'privs') { - document.getElementById('helproles_'+num+'_'+shown[i]).style.display = 'block'; - } else { - document.getElementById('helproles_'+num+'_'+shown[i]).style.display = 'inline-block'; - } - } - } - } - return; -} - -function toggleHelpdeskItem(num,field) { - if (document.getElementById('helproles_'+num+'_'+field)) { - if (document.getElementById('helproles_'+num+'_'+field).className.match(/(?:^|\\s)LC_hidden(?!\\S)/)) { - document.getElementById('helproles_'+num+'_'+field).className = - document.getElementById('helproles_'+num+'_'+field).className.replace(/(?:^|\\s)LC_hidden(?!\\S)/g ,''); - if (document.getElementById('helproles_'+num+'_'+field+'_vis')) { - document.getElementById('helproles_'+num+'_'+field+'_vis').value = '$html_js_lt{hide}'; - } - } else { - document.getElementById('helproles_'+num+'_'+field).className += ' LC_hidden'; - if (document.getElementById('helproles_'+num+'_'+field+'_vis')) { - document.getElementById('helproles_'+num+'_'+field+'_vis').value = '$html_js_lt{show}'; - } - } - } - return; -} - -// ]]> -</script> + $itemcount = 1; + my (%choices,%defaultchecked,@toggles); + $choices{'submitbugs'} = &mt('Display link to: [_1]?', + &Apache::loncommon::modal_link('http://bugs.loncapa.org', + &mt('LON-CAPA bug tracker'),600,500)); + %defaultchecked = ('submitbugs' => 'on'); + @toggles = ('submitbugs',); -ENDSCRIPT -} - -sub helpdeskroles_access { - my ($dom,$prefix,$num,$add_class,$current,$accesstypes,$othertitle, - $usertypes,$types,$domhelpdesk) = @_; - return unless ((ref($accesstypes) eq 'ARRAY') && (ref($domhelpdesk) eq 'HASH')); - my %lt = &Apache::lonlocal::texthash( - 'rou' => 'Role usage', - 'whi' => 'Which helpdesk personnel may use this role?', - 'all' => 'All with domain helpdesk or helpdesk assistant role', - 'dh' => 'All with domain helpdesk role', - 'da' => 'All with domain helpdesk assistant role', - 'none' => 'None', - 'status' => 'Determined based on institutional status', - 'inc' => 'Include all, but exclude specific personnel', - 'exc' => 'Exclude all, but include specific personnel', - ); - my %usecheck = ( - all => ' checked="checked"', - ); - my %displaydiv = ( - status => 'none', - inc => 'none', - exc => 'none', - priv => 'block', - ); - my $output; - if (ref($current) eq 'HASH') { - if (($current->{'access'} ne '') && ($current->{'access'} ne 'all')) { - if (grep(/^\Q$current->{access}\E$/,@{$accesstypes})) { - $usecheck{$current->{access}} = $usecheck{'all'}; - delete($usecheck{'all'}); - if ($current->{access} =~ /^(status|inc|exc)$/) { - my $access = $1; - $displaydiv{$access} = 'inline'; - } elsif ($current->{access} eq 'none') { - $displaydiv{'priv'} = 'none'; - } - } - } - } - $output = '<fieldset id="'.$prefix.$num.'_usage"><legend>'.$lt{'rou'}.'</legend>'. - '<p>'.$lt{'whi'}.'</p>'; - foreach my $access (@{$accesstypes}) { - $output .= '<p><label><input type="radio" name="'.$prefix.$num.'_access" value="'.$access.'" '.$usecheck{$access}. - ' onclick="helpdeskAccess('."'$num'".');" />'. - $lt{$access}.'</label>'; - if ($access eq 'status') { - $output .= '<div id="'.$prefix.$num.'_bystatus" style="display:'.$displaydiv{$access}.'">'. - &Apache::lonuserutils::adhoc_status_types($dom,$prefix,$num,$current->{$access}, - $othertitle,$usertypes,$types). - '</div>'; - } elsif (($access eq 'inc') && (keys(%{$domhelpdesk}) > 0)) { - $output .= '<div id="'.$prefix.$num.'_notinc" style="display:'.$displaydiv{$access}.'">'. - &Apache::lonuserutils::adhoc_staff($access,$prefix,$num,$current->{$access},$domhelpdesk). - '</div>'; - } elsif (($access eq 'exc') && (keys(%{$domhelpdesk}) > 0)) { - $output .= '<div id="'.$prefix.$num.'_notexc" style="display:'.$displaydiv{$access}.'">'. - &Apache::lonuserutils::adhoc_staff($access,$prefix,$num,$current->{$access},$domhelpdesk). - '</div>'; - } - $output .= '</p>'; - } - $output .= '</fieldset>'; - return $output; + ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, + \%choices,$itemcount); + return $datatable; } 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')); @@ -3479,14 +2794,8 @@ sub radiobutton_prefs { $datatable .= '<tr'.$css_class.'><td valign="top">'. '<span class="LC_nobreak">'.$choices->{$item}. - '</span></td>'; - if ($align eq 'left') { - $datatable .= '<td class="LC_left_item">'; - } else { - $datatable .= '<td class="LC_right_item">'; - } - $datatable .= - '<span class="LC_nobreak">'. + '</span></td>'. + '<td class="LC_right_item"><span class="LC_nobreak">'. '<label><input type="radio" name="'. $item.'" '.$checkedon{$item}.' value="1"'.$onclick.' />'.&mt('Yes'). '</label> <label><input type="radio" name="'.$item.'" '. @@ -3504,135 +2813,25 @@ sub print_coursedefaults { my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); my $itemcount = 1; my %choices = &Apache::lonlocal::texthash ( + canuse_pdfforms => 'Course/Community users can create/upload PDF forms', uploadquota => 'Default quota for files uploaded directly to course/community using Course Editor (MB)', anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', coursecredits => 'Credits can be specified for courses', - uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)', - usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)', - texengine => 'Default method to display mathematics', - postsubmit => 'Disable submit button/keypress following student submission', - canclone => "People who may clone a course (besides course's owner and coordinators)", - mysqltables => 'Lifetime (s) of "Temporary" MySQL tables (student performance data) on homeserver', ); my %staticdefaults = ( anonsurvey_threshold => 10, uploadquota => 500, - postsubmit => 60, - mysqltables => 172800, ); if ($position eq 'top') { - %defaultchecked = ( - 'uselcmath' => 'on', - 'usejsme' => 'on', - 'canclone' => 'none', - ); - @toggles = ('uselcmath','usejsme'); - my $deftex = $Apache::lonnet::deftex; - if (ref($settings) eq 'HASH') { - if ($settings->{'texengine'}) { - if ($settings->{'texengine'} =~ /^(MathJax|mimetex|tth)$/) { - $deftex = $settings->{'texengine'}; - } - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $mathdisp = '<tr'.$css_class.'><td style="vertical-align: top">'. - '<span class="LC_nobreak">'.$choices{'texengine'}. - '</span></td><td class="LC_right_item">'. - '<select name="texengine">'."\n"; - my %texoptions = ( - MathJax => 'MathJax', - mimetex => &mt('Convert to Images'), - tth => &mt('TeX to HTML'), - ); - foreach my $renderer ('MathJax','mimetex','tth') { - my $selected = ''; - if ($renderer eq $deftex) { - $selected = ' selected="selected"'; - } - $mathdisp .= '<option value="'.$renderer.'"'.$selected.'>'.$texoptions{$renderer}.'</option>'."\n"; - } - $mathdisp .= '</select></td></tr>'."\n"; - $itemcount ++; + %defaultchecked = ('canuse_pdfforms' => 'off'); + @toggles = ('canuse_pdfforms'); ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, - \%choices,$itemcount); - $datatable = $mathdisp.$datatable; - $css_class = $itemcount%2?' class="LC_odd_row"':''; - $datatable .= - '<tr'.$css_class.'><td valign="top">'. - '<span class="LC_nobreak">'.$choices{'canclone'}. - '</span></td><td class="LC_left_item">'; - my $currcanclone = 'none'; - my $onclick; - my @cloneoptions = ('none','domain'); - my %clonetitles = ( - none => 'No additional course requesters', - domain => "Any course requester in course's domain", - instcode => 'Course requests for official courses ...', - ); - my (%codedefaults,@code_order,@posscodes); - if (&Apache::lonnet::auto_instcode_defaults($dom,\%codedefaults, - \@code_order) eq 'ok') { - if (@code_order > 0) { - push(@cloneoptions,'instcode'); - $onclick = ' onclick="toggleDisplay(this.form,'."'cloneinstcode'".');"'; - } - } - if (ref($settings) eq 'HASH') { - if ($settings->{'canclone'}) { - if (ref($settings->{'canclone'}) eq 'HASH') { - if (ref($settings->{'canclone'}{'instcode'}) eq 'ARRAY') { - if (@code_order > 0) { - $currcanclone = 'instcode'; - @posscodes = @{$settings->{'canclone'}{'instcode'}}; - } - } - } elsif ($settings->{'canclone'} eq 'domain') { - $currcanclone = $settings->{'canclone'}; - } - } - } - foreach my $option (@cloneoptions) { - my ($checked,$additional); - if ($currcanclone eq $option) { - $checked = ' checked="checked"'; - } - if ($option eq 'instcode') { - if (@code_order) { - my $show = 'none'; - if ($checked) { - $show = 'block'; - } - $additional = '<div id="cloneinstcode" style="display:'.$show.'" />'. - &mt('Institutional codes for new and cloned course have identical:'). - '<br />'; - foreach my $item (@code_order) { - my $codechk; - if ($checked) { - if (grep(/^\Q$item\E$/,@posscodes)) { - $codechk = ' checked="checked"'; - } - } - $additional .= '<label>'. - '<input type="checkbox" name="clonecode" value="'.$item.'"'.$codechk.' />'. - $item.'</label>'; - } - $additional .= (' 'x2).'('.&mt('check as many as needed').')</div>'; - } - } - $datatable .= - '<span class="LC_nobreak"><label><input type="radio" name="canclone"'.$checked. - ' value="'.$option.'"'.$onclick.' />'.$clonetitles{$option}. - '</label> '.$additional.'</span><br />'; - } - $datatable .= '</td>'. - '</tr>'; - $itemcount ++; + \%choices,$itemcount); } else { $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout,%currmysql); + my ($currdefresponder,$def_official_credits,$def_unofficial_credits,$def_textbook_credits, + %curruploadquota); my $currusecredits = 0; - my $postsubmitclient = 1; my @types = ('official','unofficial','community','textbook'); if (ref($settings) eq 'HASH') { $currdefresponder = $settings->{'anonsurvey_threshold'}; @@ -3642,51 +2841,14 @@ sub print_coursedefaults { } } if (ref($settings->{'coursecredits'}) eq 'HASH') { - foreach my $type (@types) { - next if ($type eq 'community'); - $defcredits{$type} = $settings->{'coursecredits'}->{$type}; - if ($defcredits{$type} ne '') { - $currusecredits = 1; - } + $def_official_credits = $settings->{'coursecredits'}->{'official'}; + $def_unofficial_credits = $settings->{'coursecredits'}->{'unofficial'}; + $def_textbook_credits = $settings->{'coursecredits'}->{'textbook'}; + if (($def_official_credits ne '') || ($def_unofficial_credits ne '') || + ($def_textbook_credits ne '')) { + $currusecredits = 1; } } - if (ref($settings->{'postsubmit'}) eq 'HASH') { - if ($settings->{'postsubmit'}->{'client'} eq 'off') { - $postsubmitclient = 0; - foreach my $type (@types) { - $deftimeout{$type} = $staticdefaults{'postsubmit'}; - } - } else { - foreach my $type (@types) { - if (ref($settings->{'postsubmit'}->{'timeout'}) eq 'HASH') { - if ($settings->{'postsubmit'}->{'timeout'}->{$type} =~ /^\d+$/) { - $deftimeout{$type} = $settings->{'postsubmit'}->{'timeout'}->{$type}; - } else { - $deftimeout{$type} = $staticdefaults{'postsubmit'}; - } - } else { - $deftimeout{$type} = $staticdefaults{'postsubmit'}; - } - } - } - } else { - foreach my $type (@types) { - $deftimeout{$type} = $staticdefaults{'postsubmit'}; - } - } - if (ref($settings->{'mysqltables'}) eq 'HASH') { - foreach my $type (keys(%{$settings->{'mysqltables'}})) { - $currmysql{$type} = $settings->{'mysqltables'}{$type}; - } - } else { - foreach my $type (@types) { - $currmysql{$type} = $staticdefaults{'mysqltables'}; - } - } - } else { - foreach my $type (@types) { - $deftimeout{$type} = $staticdefaults{'postsubmit'}; - } } if (!$currdefresponder) { $currdefresponder = $staticdefaults{'anonsurvey_threshold'}; @@ -3726,14 +2888,21 @@ sub print_coursedefaults { $display = 'block'; } my $additional = '<div id="credits" style="display: '.$display.'">'. - '<i>'.&mt('Default credits').'</i><br /><table><tr>'; - foreach my $type (@types) { - next if ($type eq 'community'); - $additional .= '<td align="center">'.&mt($type).'<br />'. - '<input type="text" name="'.$type.'_credits"'. - ' value="'.$defcredits{$type}.'" size="3" /></td>'; - } - $additional .= '</tr></table></div>'."\n"; + '<span class="LC_nobreak">'. + &mt('Default credits for official courses [_1]', + '<input type="text" name="official_credits" value="'. + $def_official_credits.'" size="3" />'). + '</span><br />'. + '<span class="LC_nobreak">'. + &mt('Default credits for unofficial courses [_1]', + '<input type="text" name="unofficial_credits" value="'. + $def_unofficial_credits.'" size="3" />'). + '</span><br />'. + '<span class="LC_nobreak">'. + &mt('Default credits for textbook courses [_1]', + '<input type="text" name="textbook_credits" value="'. + $def_textbook_credits.'" size="3" />'). + '</span></div>'."\n"; %defaultchecked = ('coursecredits' => 'off'); @toggles = ('coursecredits'); my $current = { @@ -3741,46 +2910,9 @@ sub print_coursedefaults { }; (my $table,$itemcount) = &radiobutton_prefs($current,\@toggles,\%defaultchecked, - \%choices,$itemcount,$onclick,$additional,'left'); - $datatable .= $table; - $onclick = "toggleDisplay(this.form,'studentsubmission');"; - my $display = 'none'; - if ($postsubmitclient) { - $display = 'block'; - } - $additional = '<div id="studentsubmission" style="display: '.$display.'">'. - &mt('Number of seconds submit is disabled').'<br />'. - '<i>'.&mt('Enter 0 to remain disabled until page reload.').'</i><br />'. - '<table><tr>'; - foreach my $type (@types) { - $additional .= '<td align="center">'.&mt($type).'<br />'. - '<input type="text" name="'.$type.'_timeout" value="'. - $deftimeout{$type}.'" size="5" /></td>'; - } - $additional .= '</tr></table></div>'."\n"; - %defaultchecked = ('postsubmit' => 'on'); - @toggles = ('postsubmit'); - $current = { - 'postsubmit' => $postsubmitclient, - }; - ($table,$itemcount) = - &radiobutton_prefs($current,\@toggles,\%defaultchecked, - \%choices,$itemcount,$onclick,$additional,'left'); + \%choices,$itemcount,$onclick,$additional); $datatable .= $table; - $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - $datatable .= '<tr'.$css_class.'><td><span class="LC_nobreak">'. - $choices{'mysqltables'}. - '</span></td>'. - '<td align="right" class="LC_right_item">'. - '<table><tr>'; - foreach my $type (@types) { - $datatable .= '<td align="center">'.&mt($type).'<br />'. - '<input type="text" name="mysqltables_'.$type.'"'. - ' value="'.$currmysql{$type}.'" size="8" /></td>'; - } - $datatable .= '</tr></table></td></tr>'."\n"; $itemcount ++; - } $$rowtotal += $itemcount; return $datatable; @@ -3974,7 +3106,7 @@ sub print_validation_rows { '</label></span> '; } } elsif ($item eq 'markup') { - $datatable .= '<textarea name="'.$caller.'_validation_markup" cols="50" rows="5">'. + $datatable .= '<textarea name="'.$caller.'_validation_markup" cols="50" rows="5" wrap="soft">'. $currvalidation{$item}. '</textarea>'; } @@ -3985,24 +3117,21 @@ sub print_validation_rows { } if ($caller eq 'requestcourses') { my %currhash; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'validation'}) eq 'HASH') { - if ($settings->{'validation'}{'dc'} ne '') { - $currhash{$settings->{'validation'}{'dc'}} = 1; - } + if (ref($settings->{'validation'}) eq 'HASH') { + if ($settings->{'validation'}{'dc'} ne '') { + $currhash{$settings->{'validation'}{'dc'}} = 1; } } my $numinrow = 2; my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', 'validationdc',%currhash); - my $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - $datatable .= '<tr'.$css_class.'><td>'; if ($numdc > 1) { - $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)'); + $datatable .= '</td></tr><tr class="LC_odd_row"><td>'. + &mt('Course creation processed as: (choose Dom. Coord.)'). + '</td><td class="LC_left_item">'.$dctable.'</td></tr>'; } else { - $datatable .= &mt('Course creation processed as: '); + $datatable .= $dctable.'</td></tr>'; } - $datatable .= '</td><td class="LC_left_item">'.$dctable.'</td></tr>'; $itemcount ++; } if (ref($rowtotal)) { @@ -4025,13 +3154,7 @@ sub print_usersessions { if ($position eq 'top') { if (keys(%serverhomes) > 1) { my %spareid = ¤t_offloads_to($dom,$settings,\%servers); - my $curroffloadnow; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'offloadnow'}) eq 'HASH') { - $curroffloadnow = $settings->{'offloadnow'}; - } - } - $datatable .= &spares_row($dom,\%servers,\%spareid,\%serverhomes,\%altids,$curroffloadnow,$rowtotal); + $datatable .= &spares_row($dom,\%servers,\%spareid,\%serverhomes,\%altids,$rowtotal); } else { $datatable .= '<tr'.$css_class.'><td colspan="2">'. &mt('Nothing to set here, as the cluster to which this domain belongs only contains one server.'); @@ -4281,7 +3404,7 @@ sub current_offloads_to { } sub spares_row { - my ($dom,$servers,$spareid,$serverhomes,$altids,$curroffloadnow,$rowtotal) = @_; + my ($dom,$servers,$spareid,$serverhomes,$altids,$rowtotal) = @_; my $css_class; my $numinrow = 4; my $itemcount = 1; @@ -4301,21 +3424,12 @@ sub spares_row { } } next unless (ref($spareid->{$server}) eq 'HASH'); - my $checkednow; - if (ref($curroffloadnow) eq 'HASH') { - if ($curroffloadnow->{$server}) { - $checkednow = ' checked="checked"'; - } - } $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; $datatable .= '<tr'.$css_class.'> <td rowspan="2"> <span class="LC_nobreak">'. &mt('[_1] when busy, offloads to:' - ,'<b>'.$server.'</b>').'</span><br />'. - '<span class="LC_nobreak">'."\n". - '<label><input type="checkbox" name="offloadnow" value="'.$server.'"'.$checkednow.' />'. - ' '.&mt('Switch active users on next access').'</label></span>'. + ,'<b>'.$server.'</b>'). "\n"; my (%current,%canselect); my @choices = @@ -4440,13 +3554,13 @@ sub print_loadbalancing { my $numinrow = 1; my $datatable; my %servers = &Apache::lonnet::internet_dom_servers($dom); - my (%currbalancer,%currtargets,%currrules,%existing,%currcookies); + my (%currbalancer,%currtargets,%currrules,%existing); if (ref($settings) eq 'HASH') { %existing = %{$settings}; } if ((keys(%servers) > 1) || (keys(%existing) > 0)) { &get_loadbalancers_config(\%servers,\%existing,\%currbalancer, - \%currtargets,\%currrules,\%currcookies); + \%currtargets,\%currrules); } else { return; } @@ -4520,12 +3634,6 @@ sub print_loadbalancing { my ($numspares,@spares) = &count_servers($lonhost,%servers); my @sparestypes = ('primary','default'); my %typetitles = &sparestype_titles(); - my %hostherechecked = ( - no => ' checked="checked"', - ); - my %balcookiechecked = ( - no => ' checked="checked"', - ); foreach my $sparetype (@sparestypes) { my $targettable; for (my $i=0; $i<$numspares; $i++) { @@ -4545,10 +3653,9 @@ sub print_loadbalancing { $disabled = ' disabled="disabled"'; } $targettable .= - '<td><span class="LC_nobreak"><label>'. - '<input type="checkbox" name="loadbalancing_target_'.$balnum.'_'.$sparetype.'"'. + '<td><label><input type="checkbox" name="loadbalancing_target_'.$balnum.'_'.$sparetype.'"'. $checked.$disabled.' value="'.$chkboxval.'" id="loadbalancing_target_'.$balnum.'_'.$sparetype.'_'.$i.'" onclick="checkOffloads('."this,'$balnum','$sparetype'".');" /><span id="loadbalancing_targettxt_'.$balnum.'_'.$sparetype.'_'.$i.'"> '.$chkboxval. - '</span></label></span></td>'; + '</span></label></td>'; my $rem = $i%($numinrow); if ($rem == 0) { if (($i > 0) && ($i < $numspares-1)) { @@ -4571,35 +3678,8 @@ sub print_loadbalancing { $datatable .= '<i>'.$typetitles{$sparetype}.'</i><br />'. '<table><tr>'.$targettable.'</tr></table><br />'; } - $hostherechecked{$sparetype} = ''; - if (ref($currtargets{$lonhost}) eq 'HASH') { - if (ref($currtargets{$lonhost}{$sparetype}) eq 'ARRAY') { - if (grep(/^\Q$lonhost\E$/,@{$currtargets{$lonhost}{$sparetype}})) { - $hostherechecked{$sparetype} = ' checked="checked"'; - $hostherechecked{'no'} = ''; - } - } - } - } - if ($currcookies{$lonhost}) { - %balcookiechecked = ( - yes => ' checked="checked"', - ); } - $datatable .= &mt('Hosting on balancer itself').'<br />'. - '<label><input type="radio" name="loadbalancing_target_'.$balnum.'_hosthere" value="no"'. - $hostherechecked{'no'}.' />'.&mt('No').'</label><br />'; - foreach my $sparetype (@sparestypes) { - $datatable .= '<label><input type="radio" name="loadbalancing_target_'.$balnum.'_hosthere" '. - 'value="'.$sparetype.'"'.$hostherechecked{$sparetype}.' /><i>'.$typetitles{$sparetype}. - '</i></label><br />'; - } - $datatable .= &mt('Use balancer cookie').'<br />'. - '<label><input type="radio" name="loadbalancing_cookie_'.$balnum.'" value="1"'. - $balcookiechecked{'yes'}.' />'.&mt('Yes').'</label><br />'. - '<label><input type="radio" name="loadbalancing_cookie_'.$balnum.'" value="0"'. - $balcookiechecked{'no'}.' />'.&mt('No').'</label><br />'. - '</div></td></tr>'. + $datatable .= '</div></td></tr>'. &loadbalancing_rules($dom,$intdom,$currrules{$lonhost}, $othertitle,$usertypes,$types,\%servers, \%currbalancer,$lonhost, @@ -4613,11 +3693,10 @@ sub print_loadbalancing { } sub get_loadbalancers_config { - my ($servers,$existing,$currbalancer,$currtargets,$currrules,$currcookies) = @_; + my ($servers,$existing,$currbalancer,$currtargets,$currrules) = @_; return unless ((ref($servers) eq 'HASH') && (ref($existing) eq 'HASH') && (ref($currbalancer) eq 'HASH') && - (ref($currtargets) eq 'HASH') && (ref($currrules) eq 'HASH') && - (ref($currcookies) eq 'HASH')); + (ref($currtargets) eq 'HASH') && (ref($currrules) eq 'HASH')); if (keys(%{$existing}) > 0) { my $oldlonhost; foreach my $key (sort(keys(%{$existing}))) { @@ -4636,9 +3715,6 @@ sub get_loadbalancers_config { $currbalancer->{$key} = 1; $currtargets->{$key} = $existing->{$key}{'targets'}; $currrules->{$key} = $existing->{$key}{'rules'}; - if ($existing->{$key}{'cookie'}) { - $currcookies->{$key} = 1; - } } } } else { @@ -4669,7 +3745,7 @@ sub loadbalancing_rules { if (ref($currrules) eq 'HASH') { $current = $currrules->{$type}; } - if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { + if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) { if ($dom ne &Apache::lonnet::host_domain($lonhost)) { $current = ''; } @@ -4694,14 +3770,9 @@ sub loadbalancing_titles { '_LC_ipchange' => &mt('Non-SSO users with IP mismatch'), ); my @alltypes = ('_LC_adv','_LC_author','_LC_internetdom','_LC_external','_LC_ipchangesso','_LC_ipchange'); - my @available; if (ref($types) eq 'ARRAY') { - @available = @{$types}; - } - unless (grep(/^default$/,@available)) { - push(@available,'default'); + unshift(@alltypes,@{$types},'default'); } - unshift(@alltypes,@available); my %titles; foreach my $type (@alltypes) { if ($type =~ /^_LC_/) { @@ -4726,7 +3797,7 @@ sub loadbalance_rule_row { my @rulenames; my %ruletitles = &offloadtype_text(); if (($type eq '_LC_ipchangesso') || ($type eq '_LC_ipchange')) { - @rulenames = ('balancer','offloadedto','specific'); + @rulenames = ('balancer','offloadedto'); } else { @rulenames = ('default','homeserver'); if ($type eq '_LC_external') { @@ -4737,7 +3808,7 @@ sub loadbalance_rule_row { push(@rulenames,'none'); } my $style = $targets_div_style; - if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { + if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) { $style = $homedom_div_style; } my $space; @@ -4788,13 +3859,8 @@ sub loadbalance_rule_row { '<input type="radio" name="loadbalancing_rules_'.$balnum.'_'.$type. '" id="loadbalancing_rules_'.$balnum.'_'.$type.'_'.$i.'" value="'. $rule.'" onclick="balanceruleChange('."this.form,'$balnum','$type'". - ')"'.$checked.' /> '; - if (($rulenames[$i] eq 'specific') && ($type =~ /^_LC_ipchange/)) { - $output .= $ruletitles{'particular'}; - } else { - $output .= $ruletitles{$rulenames[$i]}; - } - $output .= '</label>'.$extra.'</span><br />'."\n"; + ')"'.$checked.' /> '.$ruletitles{$rulenames[$i]}. + '</label>'.$extra.'</span><br />'."\n"; } $output .= '</div></td></tr>'."\n"; return $output; @@ -4809,7 +3875,6 @@ sub offloadtype_text { '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; } @@ -4824,17 +3889,15 @@ sub sparestype_titles { sub contact_titles { my %titles = &Apache::lonlocal::texthash ( - 'supportemail' => 'Support E-mail address', - 'adminemail' => 'Default Server Admin E-mail address', - 'errormail' => 'Error reports to be e-mailed to', - 'packagesmail' => 'Package update alerts to be e-mailed to', - 'helpdeskmail' => "Helpdesk requests for this domain's users", - 'otherdomsmail' => 'Helpdesk requests for other (unconfigured) domains', - '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', + 'supportemail' => 'Support E-mail address', + 'adminemail' => 'Default Server Admin E-mail address', + 'errormail' => 'Error reports to be e-mailed to', + 'packagesmail' => 'Package update alerts to be e-mailed to', + 'helpdeskmail' => 'Helpdesk requests to be e-mailed to', + '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', - 'hostipmail' => 'E-mail from nightly check of hostname/IP network changes', ); my %short_titles = &Apache::lonlocal::texthash ( adminemail => 'Admin E-mail address', @@ -4843,34 +3906,6 @@ sub contact_titles { return (\%titles,\%short_titles); } -sub helpform_fields { - my %titles = &Apache::lonlocal::texthash ( - 'username' => 'Name', - 'user' => 'Username/domain', - 'phone' => 'Phone', - 'cc' => 'Cc e-mail', - 'course' => 'Course Details', - 'section' => 'Sections', - 'screenshot' => 'File upload', - ); - my @fields = ('username','phone','user','course','section','cc','screenshot'); - my %possoptions = ( - username => ['yes','no','req'], - phone => ['yes','no','req'], - user => ['yes','no'], - cc => ['yes','no'], - course => ['yes','no'], - section => ['yes','no'], - screenshot => ['yes','no'], - ); - my %fieldoptions = &Apache::lonlocal::texthash ( - 'yes' => 'Optional', - 'req' => 'Required', - 'no' => "Not shown", - ); - return (\@fields,\%titles,\%fieldoptions,\%possoptions); -} - sub tool_titles { my %titles = &Apache::lonlocal::texthash ( aboutme => 'Personal web page', @@ -5055,8 +4090,7 @@ sub print_usercreation { sub print_selfcreation { my ($position,$dom,$settings,$rowtotal) = @_; - my (@selfcreate,$createsettings,$processing,$emailoptions,$emailverified, - $emaildomain,$datatable); + my (@selfcreate,$createsettings,$processing,$datatable); if (ref($settings) eq 'HASH') { if (ref($settings->{'cancreate'}) eq 'HASH') { $createsettings = $settings->{'cancreate'}; @@ -5073,22 +4107,12 @@ sub print_selfcreation { if (ref($createsettings->{'selfcreateprocessing'}) eq 'HASH') { $processing = $createsettings->{'selfcreateprocessing'}; } - if (ref($createsettings->{'emailoptions'}) eq 'HASH') { - $emailoptions = $createsettings->{'emailoptions'}; - } - if (ref($createsettings->{'emailverified'}) eq 'HASH') { - $emailverified = $createsettings->{'emailverified'}; - } - if (ref($createsettings->{'emaildomain'}) eq 'HASH') { - $emaildomain = $createsettings->{'emaildomain'}; - } } } } my %radiohash; my $numinrow = 4; map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate; - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); if ($position eq 'top') { my %choices = &Apache::lonlocal::texthash ( cancreate_login => 'Institutional Login', @@ -5103,12 +4127,14 @@ sub print_selfcreation { ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked, \%choices,$itemcount,$onclick); $$rowtotal += $itemcount; + + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); if (ref($usertypes) eq 'HASH') { if (keys(%{$usertypes}) > 0) { $datatable .= &insttypes_row($createsettings,$types,$usertypes, $dom,$numinrow,$othertitle, - 'statustocreate',$rowtotal); + 'statustocreate',$$rowtotal); $$rowtotal ++; } } @@ -5121,7 +4147,7 @@ sub print_selfcreation { $datatable .= '<tr'.$css_class.'>'. '<td class="LC_left_item">'.&mt('Mapping of Shibboleth environment variable names to user data fields (SSO auth)').'</td>'. '<td class="LC_left_item">'."\n". - '<table>'."\n"; + '<table><tr><td>'."\n"; for (my $i=0; $i<@fields; $i++) { $rem = $i%($numperrow); if ($rem == 0) { @@ -5131,10 +4157,8 @@ sub print_selfcreation { $datatable .= '<tr>'; } my $currval; - if (ref($createsettings) eq 'HASH') { - if (ref($createsettings->{'shibenv'}) eq 'HASH') { - $currval = $createsettings->{'shibenv'}{$fields[$i]}; - } + if (ref($createsettings->{'shibenv'}) eq 'HASH') { + $currval = $createsettings->{'shibenv'}{$fields[$i]}; } $datatable .= '<td class="LC_left_item">'. '<span class="LC_nobreak">'. @@ -5153,421 +4177,143 @@ sub print_selfcreation { $$rowtotal ++; } elsif ($position eq 'middle') { my %domconf = &Apache::lonnet::get_dom('configuration',['usermodification'],$dom); - my @posstypes; + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); + $usertypes->{'default'} = $othertitle; if (ref($types) eq 'ARRAY') { - @posstypes = @{$types}; - } - unless (grep(/^default$/,@posstypes)) { - push(@posstypes,'default'); - } - my %usertypeshash; - if (ref($usertypes) eq 'HASH') { - %usertypeshash = %{$usertypes}; - } - $usertypeshash{'default'} = $othertitle; - foreach my $status (@posstypes) { - $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'}, - $numinrow,$$rowtotal,\%usertypeshash); - $$rowtotal ++; + push(@{$types},'default'); + $usertypes->{'default'} = $othertitle; + foreach my $status (@{$types}) { + $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'}, + $numinrow,$$rowtotal,$usertypes); + $$rowtotal ++; + } } } else { my %choices = &Apache::lonlocal::texthash ( - 'cancreate_email' => 'Non-institutional username (via e-mail verification)', + cancreate_email => 'E-mail address as username', ); my @toggles = sort(keys(%choices)); my %defaultchecked = ( 'cancreate_email' => 'off', ); - my $customclass = 'LC_selfcreate_email'; - my $classprefix = 'LC_canmodify_emailusername_'; - my $optionsprefix = 'LC_options_emailusername_'; + my $itemcount = 0; my $display = 'none'; - my $rowstyle = 'display:none'; if (grep(/^\Qemail\E$/,@selfcreate)) { $display = 'block'; - $rowstyle = 'display:table-row'; } - my $onclick = "toggleRows(this.form,'cancreate_email','selfassign','$customclass','$classprefix','$optionsprefix');"; - ($datatable,$$rowtotal) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked, - \%choices,$$rowtotal,$onclick); - $datatable .= &print_requestmail($dom,'selfcreation',$createsettings,$rowtotal,$customclass, - $rowstyle); - $$rowtotal ++; - $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal,$customclass, - $rowstyle); - $$rowtotal ++; - my (@ordered,@posstypes,%usertypeshash); + my $onclick = "toggleDisplay(this.form,'emailoptions');"; + my $additional = '<div id="emailoptions" style="display: '.$display.'">'; my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); - my ($emailrules,$emailruleorder) = - &Apache::lonnet::inst_userrules($dom,'email'); - my $primary_id = &Apache::lonnet::domain($dom,'primary'); - my $intdom = &Apache::lonnet::internet_dom($primary_id); - if (ref($types) eq 'ARRAY') { - @posstypes = @{$types}; - } - if (@posstypes) { - unless (grep(/^default$/,@posstypes)) { - push(@posstypes,'default'); - } - if (ref($usertypes) eq 'HASH') { - %usertypeshash = %{$usertypes}; - } - my $currassign; - if (ref($domdefaults{'inststatusguest'}) eq 'ARRAY') { - $currassign = { - selfassign => $domdefaults{'inststatusguest'}, - }; - @ordered = @{$domdefaults{'inststatusguest'}}; - } else { - $currassign = { selfassign => [] }; - } - my $onclicktypes = "toggleDataRow(this.form,'selfassign','$customclass','$optionsprefix',);". - "toggleDataRow(this.form,'selfassign','$customclass','$classprefix',1);"; - $datatable .= &insttypes_row($currassign,$types,$usertypes,$dom, - $numinrow,$othertitle,'selfassign', - $rowtotal,$onclicktypes,$customclass, - $rowstyle); - $$rowtotal ++; - $usertypeshash{'default'} = $othertitle; - foreach my $status (@posstypes) { - my $css_class; - if ($$rowtotal%2) { - $css_class = 'LC_odd_row '; - } - $css_class .= $customclass; - my $rowid = $optionsprefix.$status; - my $hidden = 1; - my $currstyle = 'display:none'; - if (grep(/^\Q$status\E$/,@ordered)) { - $currstyle = $rowstyle; - $hidden = 0; - } - $datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain, - $emailrules,$emailruleorder,$settings,$status,$rowid, - $usertypeshash{$status},$css_class,$currstyle,$intdom); - unless ($hidden) { - $$rowtotal ++; + my $usertypes = {}; + my $order = []; + if ((ref($domdefaults{'inststatustypes'}) eq 'HASH') && (ref($domdefaults{'inststatusguest'}) eq 'ARRAY')) { + $usertypes = $domdefaults{'inststatustypes'}; + $order = $domdefaults{'inststatusguest'}; + } + if (ref($order) eq 'ARRAY') { + push(@{$order},'default'); + if (@{$order} > 1) { + $usertypes->{'default'} = &mt('Other users'); + $additional .= '<table><tr>'; + foreach my $status (@{$order}) { + $additional .= '<th>'.$usertypes->{$status}.'</th>'; + } + $additional .= '</tr><tr>'; + foreach my $status (@{$order}) { + $additional .= '<td>'.&email_as_username($rowtotal,$processing,$status).'</td>'; } + $additional .= '</tr></table>'; + } else { + $usertypes->{'default'} = &mt('All users'); + $additional .= &email_as_username($rowtotal,$processing); } - } else { - my $css_class; - if ($$rowtotal%2) { - $css_class = 'LC_odd_row '; - } - $css_class .= $customclass; - $usertypeshash{'default'} = $othertitle; - $datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain, - $emailrules,$emailruleorder,$settings,'default','', - $othertitle,$css_class,$rowstyle,$intdom); - $$rowtotal ++; } + $additional .= '</div>'."\n"; + + ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked, + \%choices,$$rowtotal,$onclick,$additional); + $$rowtotal ++; + $datatable .= &print_requestmail($dom,'selfcreation',$createsettings,$rowtotal); + $$rowtotal ++; my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info(); $numinrow = 1; - if (@posstypes) { - foreach my $status (@posstypes) { - my $rowid = $classprefix.$status; - my $datarowstyle = 'display:none'; - if (grep(/^\Q$status\E$/,@ordered)) { - $datarowstyle = $rowstyle; - } + if (ref($order) eq 'ARRAY') { + foreach my $status (@{$order}) { $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings, - $numinrow,$$rowtotal,\%usertypeshash,$infofields, - $infotitles,$rowid,$customclass,$datarowstyle); - unless ($datarowstyle eq 'display:none') { - $$rowtotal ++; - } + $numinrow,$$rowtotal,$usertypes,$infofields,$infotitles); + $$rowtotal ++; } - } else { - $datatable .= &modifiable_userdata_row('cancreate','emailusername_default',$settings, - $numinrow,$$rowtotal,\%usertypeshash,$infofields, - $infotitles,'',$customclass,$rowstyle); } - } - return $datatable; -} - -sub selfcreate_javascript { - return <<"ENDSCRIPT"; - -<script type="text/javascript"> -// <![CDATA[ - -function toggleRows(form,radio,checkbox,target,prefix,altprefix) { - var x = document.getElementsByClassName(target); - var insttypes = 0; - var insttypeRegExp = new RegExp(prefix); - if ((x.length != undefined) && (x.length > 0)) { - if (form.elements[radio].length != undefined) { - for (var i=0; i<form.elements[radio].length; i++) { - if (form.elements[radio][i].checked) { - if (form.elements[radio][i].value == 1) { - for (var j=0; j<x.length; j++) { - if (x[j].id == 'undefined') { - x[j].style.display = 'table-row'; - } else if (insttypeRegExp.test(x[j].id)) { - insttypes ++; - } else { - x[j].style.display = 'table-row'; - } - } - } else { - for (var j=0; j<x.length; j++) { - x[j].style.display = 'none'; - } - } - break; - } - } - if (insttypes > 0) { - toggleDataRow(form,checkbox,target,altprefix); - toggleDataRow(form,checkbox,target,prefix,1); + 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,$$rowtotal); + $$rowtotal ++; } } + $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal); } - return; + return $datatable; } -function toggleDataRow(form,checkbox,target,prefix,docount) { - if (form.elements[checkbox].length != undefined) { - var count = 0; - if (docount) { - for (var i=0; i<form.elements[checkbox].length; i++) { - if (form.elements[checkbox][i].checked) { - count ++; - } - } - } - for (var i=0; i<form.elements[checkbox].length; i++) { - var type = form.elements[checkbox][i].value; - if (document.getElementById(prefix+type)) { - if (form.elements[checkbox][i].checked) { - document.getElementById(prefix+type).style.display = 'table-row'; - if (count % 2 == 1) { - document.getElementById(prefix+type).className = target+' LC_odd_row'; - } else { - document.getElementById(prefix+type).className = target; +sub email_as_username { + my ($rowtotal,$processing,$type) = @_; + my %choices = + &Apache::lonlocal::texthash ( + automatic => 'Automatic approval', + approval => 'Queued for approval', + ); + my $output; + foreach my $option ('automatic','approval') { + my $checked; + if (ref($processing) eq 'HASH') { + if ($type eq '') { + if (!exists($processing->{'default'})) { + if ($option eq 'automatic') { + $checked = ' checked="checked"'; } - count ++; } else { - document.getElementById(prefix+type).style.display = 'none'; - } - } - } - } - return; -} - -function toggleEmailOptions(form,radio,prefix,altprefix,status) { - var caller = radio+'_'+status; - if (form.elements[caller].length != undefined) { - for (var i=0; i<form.elements[caller].length; i++) { - if (form.elements[caller][i].checked) { - if (document.getElementById(altprefix+'_inst_'+status)) { - var curr = form.elements[caller][i].value; - if (prefix) { - document.getElementById(prefix+'_'+status).style.display = 'none'; - } - document.getElementById(altprefix+'_inst_'+status).style.display = 'none'; - document.getElementById(altprefix+'_noninst_'+status).style.display = 'none'; - if (curr == 'custom') { - if (prefix) { - document.getElementById(prefix+'_'+status).style.display = 'inline'; - } - } else if (curr == 'inst') { - document.getElementById(altprefix+'_inst_'+status).style.display = 'inline'; - } else if (curr == 'noninst') { - document.getElementById(altprefix+'_noninst_'+status).style.display = 'inline'; - } - break; - } - } - } - } -} - -// ]]> -</script> - -ENDSCRIPT -} - -sub noninst_users { - my ($processing,$emailverified,$emailoptions,$emaildomain,$emailrules, - $emailruleorder,$settings,$type,$rowid,$typetitle,$css_class,$rowstyle,$intdom) = @_; - my $class = 'LC_left_item'; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowid) { - $rowid = ' id="'.$rowid.'"'; - } - if ($rowstyle) { - $rowstyle = ' style="'.$rowstyle.'"'; - } - my ($output,$description); - if ($type eq 'default') { - $description = &mt('Requests for: [_1]',$typetitle); - } else { - $description = &mt('Requests for: [_1] (status self-reported)',$typetitle); - } - $output = '<tr'.$css_class.$rowid.$rowstyle.'>'. - "<td>$description</td>\n". - '<td class="'.$class.'" colspan="2">'. - '<table><tr>'; - my %headers = &Apache::lonlocal::texthash( - approve => 'Processing', - email => 'E-mail', - username => 'Username', - ); - foreach my $item ('approve','email','username') { - $output .= '<th>'.$headers{$item}.'</th>'; - } - $output .= '</tr><tr>'; - foreach my $item ('approve','email','username') { - $output .= '<td valign="top">'; - my (%choices,@options,$hashref,$defoption,$name,$onclick,$hascustom); - if ($item eq 'approve') { - %choices = &Apache::lonlocal::texthash ( - automatic => 'Automatically approved', - approval => 'Queued for approval', - ); - @options = ('automatic','approval'); - $hashref = $processing; - $defoption = 'automatic'; - $name = 'cancreate_emailprocess_'.$type; - } elsif ($item eq 'email') { - %choices = &Apache::lonlocal::texthash ( - any => 'Any e-mail', - inst => 'Institutional only', - noninst => 'Non-institutional only', - custom => 'Custom restrictions', - ); - @options = ('any','inst','noninst'); - my $showcustom; - if (ref($emailrules) eq 'HASH') { - if (keys(%{$emailrules}) > 0) { - push(@options,'custom'); - $showcustom = 'cancreate_emailrule'; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'email_rule'}) eq 'ARRAY') { - foreach my $rule (@{$settings->{'email_rule'}}) { - if (exists($emailrules->{$rule})) { - $hascustom ++; - } - } - } elsif (ref($settings->{'email_rule'}) eq 'HASH') { - if (ref($settings->{'email_rule'}{$type}) eq 'ARRAY') { - foreach my $rule (@{$settings->{'email_rule'}{$type}}) { - if (exists($emailrules->{$rule})) { - $hascustom ++; - } - } - } - } + if ($processing->{'default'} eq $option) { + $checked = ' checked="checked"'; } } - } - $onclick = ' onclick="toggleEmailOptions(this.form,'."'cancreate_emailoptions','$showcustom',". - "'cancreate_emaildomain','$type'".');"'; - $hashref = $emailoptions; - $defoption = 'any'; - $name = 'cancreate_emailoptions_'.$type; - } elsif ($item eq 'username') { - %choices = &Apache::lonlocal::texthash ( - all => 'Same as e-mail', - first => 'Omit @domain', - free => 'Free to choose', - ); - @options = ('all','first','free'); - $hashref = $emailverified; - $defoption = 'all'; - $name = 'cancreate_usernameoptions_'.$type; - } - foreach my $option (@options) { - my $checked; - if (ref($hashref) eq 'HASH') { - if ($type eq '') { - if (!exists($hashref->{'default'})) { - if ($option eq $defoption) { - $checked = ' checked="checked"'; - } - } else { - if ($hashref->{'default'} eq $option) { - $checked = ' checked="checked"'; - } + } else { + if (!exists($processing->{$type})) { + if ($option eq 'automatic') { + $checked = ' checked="checked"'; } } else { - if (!exists($hashref->{$type})) { - if ($option eq $defoption) { - $checked = ' checked="checked"'; - } - } else { - if ($hashref->{$type} eq $option) { - $checked = ' checked="checked"'; - } - } - } - } elsif (($item eq 'email') && ($hascustom)) { - if ($option eq 'custom') { - $checked = ' checked="checked"'; - } - } elsif ($option eq $defoption) { - $checked = ' checked="checked"'; - } - $output .= '<span class="LC_nobreak"><label>'. - '<input type="radio" name="'.$name.'"'. - $checked.' value="'.$option.'"'.$onclick.' />'. - $choices{$option}.'</label></span><br />'; - if ($item eq 'email') { - if ($option eq 'custom') { - my $id = 'cancreate_emailrule_'.$type; - my $display = 'none'; - if ($checked) { - $display = 'inline'; - } - my $numinrow = 2; - $output .= '<fieldset id="'.$id.'" style="display:'.$display.';">'. - '<legend>'.&mt('Disallow').'</legend><table>'. - &user_formats_row('email',$settings,$emailrules, - $emailruleorder,$numinrow,'',$type); - '</table></fieldset>'; - } elsif (($option eq 'inst') || ($option eq 'noninst')) { - my %text = &Apache::lonlocal::texthash ( - inst => 'must end:', - noninst => 'cannot end:', - ); - my $value; - if (ref($emaildomain) eq 'HASH') { - if (ref($emaildomain->{$type}) eq 'HASH') { - $value = $emaildomain->{$type}->{$option}; - } - } - if ($value eq '') { - $value = '@'.$intdom; - } - my $condition = 'cancreate_emaildomain_'.$option.'_'.$type; - my $display = 'none'; - if ($checked) { - $display = 'inline'; + if ($processing->{$type} eq $option) { + $checked = ' checked="checked"'; } - $output .= '<div id="'.$condition.'" style="display:'.$display.';">'. - '<span class="LC_domprefs_email">'.$text{$option}.'</span> '. - '<input type="text" name="'.$condition.'" value="'.$value.'" size="10" />'. - '</div>'; } } + } elsif ($option eq 'automatic') { + $checked = ' checked="checked"'; + } + my $name = 'cancreate_emailprocess'; + if (($type ne '') && ($type ne 'default')) { + $name .= '_'.$type; + } + $output .= '<span class="LC_nobreak"><label>'. + '<input type="radio" name="'.$name.'"'. + $checked.' value="'.$option.'" />'. + $choices{$option}.'</label></span>'; + if ($type eq '') { + $output .= ' '; + } else { + $output .= '<br />'; } - $output .= '</td>'."\n"; - } } - $output .= "</tr></table></td></tr>\n"; + $$rowtotal ++; return $output; } sub captcha_choice { - my ($context,$settings,$itemcount,$customcss,$rowstyle) = @_; - my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext, - $vertext,$currver); + my ($context,$settings,$itemcount) = @_; + my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext); my %lt = &captcha_phrases(); $keyentry = 'hidden'; if ($context eq 'cancreate') { @@ -5585,11 +4331,6 @@ sub captcha_choice { $pubtext = $lt{'pub'}; $privtext = $lt{'priv'}; $keyentry = 'text'; - $vertext = $lt{'ver'}; - $currver = $settings->{'recaptchaversion'}; - if ($currver ne '2') { - $currver = 1; - } } if (ref($settings->{'recaptchakeys'}) eq 'HASH') { $currpub = $settings->{'recaptchakeys'}{'public'}; @@ -5598,20 +4339,7 @@ sub captcha_choice { } else { $checked{'original'} = ' checked="checked"'; } - my $css_class; - if ($itemcount%2) { - $css_class = 'LC_odd_row'; - } - if ($customcss) { - $css_class .= " $customcss"; - } - $css_class =~ s/^\s+//; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowstyle) { - $css_class .= ' style="'.$rowstyle.'"'; - } + my $css_class = $itemcount%2?' class="LC_odd_row"':''; my $output = '<tr'.$css_class.'>'. '<td class="LC_left_item">'.$rowname.'</td><td class="LC_left_item" colspan="2">'."\n". '<table><tr><td>'."\n"; @@ -5630,35 +4358,35 @@ sub captcha_choice { # specified for use with the key should be broad enough to accommodate all servers in the LON-CAPA domain. # $output .= '</td></tr>'."\n". - '<tr><td class="LC_zero_height">'."\n". + '<tr><td>'."\n". '<span class="LC_nobreak"><span id="'.$context.'_recaptchapubtxt">'.$pubtext.'</span> '."\n". '<input type="'.$keyentry.'" id="'.$context.'_recaptchapub" name="'.$context.'_recaptchapub" value="'. $currpub.'" size="40" /></span><br />'."\n". '<span class="LC_nobreak"><span id="'.$context.'_recaptchaprivtxt">'.$privtext.'</span> '."\n". '<input type="'.$keyentry.'" id="'.$context.'_recaptchapriv" name="'.$context.'_recaptchapriv" value="'. - $currpriv.'" size="40" /></span><br />'. - '<span class="LC_nobreak"><span id="'.$context.'_recaptchavertxt">'.$vertext.'</span> '."\n". - '<input type="'.$keyentry.'" id="'.$context.'_recaptchaversion" name="'.$context.'_recaptchaversion" value="'. - $currver.'" size="3" /></span><br />'. - '</td></tr></table>'."\n". + $currpriv.'" size="40" /></span></td></tr></table>'."\n". '</td></tr>'; return $output; } sub user_formats_row { - my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount,$status) = @_; + my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_; my $output; my %text = ( 'username' => 'new usernames', 'id' => 'IDs', + 'email' => 'self-created accounts (e-mail)', ); - unless ($type eq 'email') { - my $css_class = $rowcount%2?' class="LC_odd_row"':''; - $output = '<tr '.$css_class.'>'. - '<td><span class="LC_nobreak">'. - &mt("Format rules to check for $text{$type}: "). - '</td><td class="LC_left_item" colspan="2"><table>'; + my $css_class = $rowcount%2?' class="LC_odd_row"':''; + $output = '<tr '.$css_class.'>'. + '<td><span class="LC_nobreak">'; + if ($type eq 'email') { + $output .= &mt("Formats disallowed for $text{$type}: "); + } else { + $output .= &mt("Format rules to check for $text{$type}: "); } + $output .= '</span></td>'. + '<td class="LC_left_item" colspan="2"><table>'; my $rem; if (ref($ruleorder) eq 'ARRAY') { for (my $i=0; $i<@{$ruleorder}; $i++) { @@ -5676,41 +4404,25 @@ sub user_formats_row { if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{$type.'_rule'}})) { $check = ' checked="checked" '; } - } elsif ((ref($settings->{$type.'_rule'}) eq 'HASH') && ($status ne '')) { - if (ref($settings->{$type.'_rule'}->{$status}) eq 'ARRAY') { - if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{$type.'_rule'}->{$status}})) { - $check = ' checked="checked" '; - } - } } } - my $name = $type.'_rule'; - if ($type eq 'email') { - $name .= '_'.$status; - } $output .= '<td class="LC_left_item">'. '<span class="LC_nobreak"><label>'. - '<input type="checkbox" name="'.$name.'" '. + '<input type="checkbox" name="'.$type.'_rule" '. 'value="'.$ruleorder->[$i].'"'.$check.'/>'. $rules->{$ruleorder->[$i]}{'name'}.'</label></span></td>'; } } $rem = @{$ruleorder}%($numinrow); } - my $colsleft; - if ($rem) { - $colsleft = $numinrow - $rem; - } + my $colsleft = $numinrow - $rem; if ($colsleft > 1 ) { $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">'. ' </td>'; } elsif ($colsleft == 1) { $output .= '<td class="LC_left_item"> </td>'; } - $output .= '</tr></table>'; - unless ($type eq 'email') { - $output .= '</td></tr>'; - } + $output .= '</tr></table></td></tr>'; return $output; } @@ -5787,10 +4499,7 @@ sub print_usermodification { sub print_defaults { my ($position,$dom,$settings,$rowtotal) = @_; my $rownum = 0; - my ($datatable,$css_class,$titles); - unless ($position eq 'bottom') { - $titles = &defaults_titles($dom); - } + my ($datatable,$css_class); if ($position eq 'top') { my @items = ('auth_def','auth_arg_def','lang_def','timezone_def', 'datelocale_def','portal_def'); @@ -5803,6 +4512,7 @@ sub print_defaults { $defaults{$item} = $domdefaults{$item}; } } + my $titles = &defaults_titles($dom); foreach my $item (@items) { if ($rownum%2) { $css_class = ''; @@ -5837,8 +4547,11 @@ sub print_defaults { my $includeempty = 1; $datatable .= &Apache::loncommon::select_datelocale($item,$defaults{$item},undef,$includeempty); } elsif ($item eq 'lang_def') { - my $includeempty = 1; - $datatable .= &Apache::loncommon::select_language($item,$defaults{$item},$includeempty); + my %langchoices = &get_languages_hash(); + $langchoices{''} = 'No language preference'; + %langchoices = &Apache::lonlocal::texthash(%langchoices); + $datatable .= &Apache::loncommon::select_form($defaults{$item},$item, + \%langchoices); } else { my $size; if ($item eq 'portal_def') { @@ -5850,94 +4563,20 @@ sub print_defaults { $datatable .= '</td></tr>'; $rownum ++; } - } elsif ($position eq 'middle') { - my @items = ('intauth_cost','intauth_check','intauth_switch'); - my %defaults; - if (ref($settings) eq 'HASH') { - %defaults = %{$settings}; - if ($defaults{'intauth_cost'} !~ /^\d+$/) { - $defaults{'intauth_cost'} = 10; - } - if ($defaults{'intauth_check'} !~ /^(0|1|2)$/) { - $defaults{'intauth_check'} = 0; - } - if ($defaults{'intauth_switch'} !~ /^(0|1|2)$/) { - $defaults{'intauth_switch'} = 0; - } - } else { - %defaults = ( - 'intauth_cost' => 10, - 'intauth_check' => 0, - 'intauth_switch' => 0, - ); - } - foreach my $item (@items) { - if ($rownum%2) { - $css_class = ''; - } else { - $css_class = ' class="LC_odd_row" '; - } - $datatable .= '<tr'.$css_class.'>'. - '<td><span class="LC_nobreak">'.$titles->{$item}. - '</span></td><td class="LC_left_item" colspan="3">'; - if ($item eq 'intauth_switch') { - my @options = (0,1,2); - my %optiondesc = &Apache::lonlocal::texthash ( - 0 => 'No', - 1 => 'Yes', - 2 => 'Yes, and copy existing passwd file to passwd.bak file', - ); - $datatable .= '<table width="100%">'; - foreach my $option (@options) { - my $checked = ' '; - if ($defaults{$item} eq $option) { - $checked = ' checked="checked"'; - } - $datatable .= '<tr><td class="LC_left_item"><span class="LC_nobreak">'. - '<label><input type="radio" name="'.$item. - '" value="'.$option.'"'.$checked.' />'. - $optiondesc{$option}.'</label></span></td></tr>'; - } - $datatable .= '</table>'; - } elsif ($item eq 'intauth_check') { - my @options = (0,1,2); - my %optiondesc = &Apache::lonlocal::texthash ( - 0 => 'No', - 1 => 'Yes, allow login then update passwd file using default cost (if higher)', - 2 => 'Yes, disallow login if stored cost is less than domain default', - ); - $datatable .= '<table width="100%">'; - foreach my $option (@options) { - my $checked = ' '; - my $onclick; - if ($defaults{$item} eq $option) { - $checked = ' checked="checked"'; - } - if ($option == 2) { - $onclick = ' onclick="javascript:warnIntAuth(this);"'; - } - $datatable .= '<tr><td class="LC_left_item"><span class="LC_nobreak">'. - '<label><input type="radio" name="'.$item. - '" value="'.$option.'"'.$checked.$onclick.' />'. - $optiondesc{$option}.'</label></span></td></tr>'; - } - $datatable .= '</table>'; - } else { - $datatable .= '<input type="text" name="'.$item.'" value="'. - $defaults{$item}.'" size="3" onblur="javascript:warnIntAuth(this);" />'; - } - $datatable .= '</td></tr>'; - $rownum ++; - } } else { - my %defaults; + my (%defaults); if (ref($settings) eq 'HASH') { - if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH')) { + if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH') && + (ref($settings->{'inststatusguest'}) eq 'ARRAY')) { my $maxnum = @{$settings->{'inststatusorder'}}; for (my $i=0; $i<$maxnum; $i++) { $css_class = $rownum%2?' class="LC_odd_row"':''; my $item = $settings->{'inststatusorder'}->[$i]; my $title = $settings->{'inststatustypes'}->{$item}; + my $guestok; + if (grep(/^\Q$item\E$/,@{$settings->{'inststatusguest'}})) { + $guestok = 1; + } my $chgstr = ' onchange="javascript:reorderTypes(this.form,'."'$item'".');"'; $datatable .= '<tr'.$css_class.'>'. '<td><span class="LC_nobreak">'. @@ -5950,12 +4589,23 @@ sub print_defaults { } $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>'; } + my ($checkedon,$checkedoff); + $checkedoff = ' checked="checked"'; + if ($guestok) { + $checkedon = $checkedoff; + $checkedoff = ''; + } $datatable .= '</select> '.&mt('Internal ID:').' <b>'.$item.'</b> '. '<input type="checkbox" name="inststatus_delete" value="'.$item.'" />'. &mt('delete').'</span></td>'. '<td class="LC_left_item"><span class="LC_nobreak">'.&mt('Name displayed:'). '<input type="text" size="20" name="inststatus_title_'.$item.'" value="'.$title.'" />'. - '</span></td></tr>'; + '</span></td>'. + '<td class="LC_right_item"><span class="LC_nobreak">'. + '<label><input type="radio" value="1" name="inststatus_guest_'.$item.'"'.$checkedon.' />'. + &mt('Yes').'</label>'.(' 'x2). + '<label><input type="radio" value="0" name="inststatus_guest_'.$item.'"'.$checkedoff.' />'. + &mt('No').'</label></span></td></tr>'; } $css_class = $rownum%2?' class="LC_odd_row"':''; my $chgstr = ' onchange="javascript:reorderTypes(this.form,'."'addinststatus_pos'".');"'; @@ -5970,11 +4620,16 @@ sub print_defaults { $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>'; } $datatable .= '</select> '.&mt('Internal ID:'). - '<input type="text" size="10" name="addinststatus" value="" />'. + '<input type="text" size="10" name="addinststatus" value="" /></span>'. ' '.&mt('(new)'). '</span></td><td class="LC_left_item"><span class="LC_nobreak">'. &mt('Name displayed:'). '<input type="text" size="20" name="addinststatus_title" value="" /></span></td>'. + '<td class="LC_right_item"><span class="LC_nobreak">'. + '<label><input type="radio" value="1" name="addinststatus_guest" />'. + &mt('Yes').'</label>'.(' 'x2). + '<label><input type="radio" value="0" name="addinststatus_guest" />'. + &mt('No').'</label></span></td></tr>'; '</tr>'."\n"; $rownum ++; } @@ -6004,9 +4659,6 @@ sub defaults_titles { 'timezone_def' => 'Default timezone', 'datelocale_def' => 'Default locale for dates', 'portal_def' => 'Portal/Default URL', - 'intauth_cost' => 'Encryption cost for bcrypt (positive integer)', - 'intauth_check' => 'Check bcrypt cost if authenticated', - 'intauth_switch' => 'Existing crypt-based switched to bcrypt on authentication', ); if ($dom) { my $uprimary_id = &Apache::lonnet::domain($dom,'primary'); @@ -6236,7 +4888,7 @@ sub print_coursecategories { '<input type="radio" name="coursecat_'.$item.'" value="'.$type.'"'.$ischecked. ' />'.$lt{$type}.'</label> '; } - $datatable .= '</span></td></tr>'; + $datatable .= '</td></tr>'; $itemcount ++; } $$rowtotal += $itemcount; @@ -6447,7 +5099,7 @@ sub print_coursecategories { $datatable .= &initialize_categories($itemcount); } } else { - $datatable .= '<tr><td class="LC_right_item">'.$hdritem->{'header'}->[1]->{'col2'}.'</td></tr>' + $datatable .= '<td class="LC_right_item">'.$hdritem->{'header'}->[1]->{'col2'}.'</td>' .&initialize_categories($itemcount); } $$rowtotal += $itemcount; @@ -6495,7 +5147,7 @@ sub print_serverstatuses { '<span class="LC_nobreak">'. '<input type="text" name="'.$type.'_machines" '. 'value="'.$machineaccess{$type}.'" size="10" />'. - '</span></td></tr>'."\n"; + '</td></tr>'."\n"; } $$rowtotal += $rownum; return $datatable; @@ -6505,47 +5157,19 @@ sub serverstatus_pages { return ('userstatus','lonstatus','loncron','server-status','codeversions', 'checksums','clusterstatus','metadata_keywords','metadata_harvest', 'takeoffline','takeonline','showenv','toggledebug','ping','domconf', - 'uniquecodes','diskusage','coursecatalog'); + 'uniquecodes','diskusage'); } sub defaults_javascript { my ($settings) = @_; - my $intauthcheck = &mt('Warning: disallowing login for an authenticated user if the stored cost is less than the default will require a password reset by/for the user.'); - my $intauthcost = &mt('Warning: bcrypt encryption cost for internal authentication must be an integer.'); - &js_escape(\$intauthcheck); - &js_escape(\$intauthcost); - my $intauthjs = <<"ENDSCRIPT"; - -function warnIntAuth(field) { - if (field.name == 'intauth_check') { - if (field.value == '2') { - alert('$intauthcheck'); - } - } - if (field.name == 'intauth_cost') { - field.value.replace(/\s/g,''); - if (field.value != '') { - var regexdigit=/^\\d+\$/; - if (!regexdigit.test(field.value)) { - alert('$intauthcost'); - } - } - } - return; -} - -ENDSCRIPT - - if (ref($settings) ne 'HASH') { - return &Apache::lonhtmlcommon::scripttag($intauthjs); - } + my ($output,$jstext); if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH')) { my $maxnum = scalar(@{$settings->{'inststatusorder'}}); if ($maxnum eq '') { $maxnum = 0; } $maxnum ++; - my $jstext = ' var inststatuses = Array('."'".join("','",@{$settings->{'inststatusorder'}})."'".');'; + $jstext = ' var inststatuses = Array('."'".join("','",@{$settings->{'inststatusorder'}})."'".');'; return <<"ENDSCRIPT"; <script type="text/javascript"> // <![CDATA[ @@ -6592,14 +5216,10 @@ $jstext return; } -$intauthjs - // ]]> </script> ENDSCRIPT - } else { - return &Apache::lonhtmlcommon::scripttag($intauthjs); } } @@ -6627,10 +5247,7 @@ sub coursecategories_javascript { } my $instcode_reserved = &mt('The name: [_1] is a reserved category.','"instcode"'); my $communities_reserved = &mt('The name: [_1] is a reserved category.','"communities"'); - my $choose_again = "\n".&mt('Please use a different name for the new top level category.'); - &js_escape(\$instcode_reserved); - &js_escape(\$communities_reserved); - &js_escape(\$choose_again); + my $choose_again = '\\n'.&mt('Please use a different name for the new top level category.'); $output = <<"ENDSCRIPT"; <script type="text/javascript"> // <![CDATA[ @@ -6720,7 +5337,7 @@ sub initialize_categories { my $select1 = ''; foreach my $default ('instcode','communities') { $css_class = $itemcount%2?' class="LC_odd_row"':''; - $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$default"."_pos','0'".');"'; + $chgstr = ' onchange="javascript:reorderCats(this.form,'."'',$default"."_pos','0'".');"'; if ($default eq 'communities') { $select1 = $select0; $select0 = ''; @@ -6745,9 +5362,8 @@ sub initialize_categories { .'<option value="0">1</option>' .'<option value="1">2</option>' .'<option value="2" selected="selected">3</option></select> ' - .&mt('Add category').'</span></td><tda<span class="LC_nobreak">>'.&mt('Name:') - .' <input type="text" size="20" name="addcategory_name" value="" /></span>' - .'</td></tr>'; + .&mt('Add category').'</td><td>'.&mt('Name:') + .' <input type="text" size="20" name="addcategory_name" value="" /></td></tr>'; return $datatable; } @@ -6802,7 +5418,7 @@ sub build_category_rows { pop(@{$path}); } } else { - $text .= &mt('Add subcategory:').' </span><input type="text" size="20" name="addcategory_name_'; + $text .= &mt('Add subcategory:').' </span><input type="textbox" size="20" name="addcategory_name_'; if ($j == $numchildren) { $text .= $name; } else { @@ -6825,7 +5441,7 @@ sub build_category_rows { my $colspan; if ($parent ne 'instcode') { $colspan = $maxdepth - $depth - 1; - $text .= '<td colspan="'.$colspan.'">'.&mt('Add subcategory:').'<input type="text" size="20" name="subcat_'.$name.'" value="" /></td>'; + $text .= '<td colspan="'.$colspan.'">'.&mt('Add subcategory:').'<input type="textbox" size="20" name="subcat_'.$name.'" value="" /></td>'; } } } @@ -6834,14 +5450,13 @@ sub build_category_rows { } sub modifiable_userdata_row { - my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref, - $rowid,$customcss,$rowstyle) = @_; + my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_; my ($role,$rolename,$statustype); $role = $item; if ($context eq 'cancreate') { - if ($item =~ /^(emailusername)_(.+)$/) { - $role = $1; - $statustype = $2; + if ($item =~ /^emailusername_(.+)$/) { + $statustype = $1; + $role = 'emailusername'; if (ref($usertypes) eq 'HASH') { if ($usertypes->{$statustype}) { $rolename = &mt('Data provided by [_1]',$usertypes->{$statustype}); @@ -6876,25 +5491,8 @@ sub modifiable_userdata_row { %fieldtitles = &Apache::loncommon::personal_data_fieldtitles(); } my $output; - my $css_class; - if ($rowcount%2) { - $css_class = 'LC_odd_row'; - } - if ($customcss) { - $css_class .= " $customcss"; - } - $css_class =~ s/^\s+//; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowstyle) { - $css_class .= ' style="'.$rowstyle.'"'; - } - if ($rowid) { - $rowid = ' id="'.$rowid.'"'; - } - - $output = '<tr '.$css_class.$rowid.'>'. + my $css_class = $rowcount%2?' class="LC_odd_row"':''; + $output = '<tr '.$css_class.'>'. '<td><span class="LC_nobreak">'.$rolename.'</span></td>'. '<td class="LC_left_item" colspan="2"><table>'; my $rem; @@ -6928,10 +5526,9 @@ sub modifiable_userdata_row { } } } - - my $total = scalar(@fields); - for (my $i=0; $i<$total; $i++) { - $rem = $i%($numinrow); + + for (my $i=0; $i<@fields; $i++) { + my $rem = $i%($numinrow); if ($rem == 0) { if ($i > 0) { $output .= '</tr>'; @@ -6973,13 +5570,10 @@ sub modifiable_userdata_row { '</label>'; } $output .= '</span></td>'; + $rem = @fields%($numinrow); } - $rem = $total%$numinrow; - my $colsleft; - if ($rem) { - $colsleft = $numinrow - $rem; - } - if ($colsleft > 1) { + my $colsleft = $numinrow - $rem; + if ($colsleft > 1 ) { $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">'. ' </td>'; } elsif ($colsleft == 1) { @@ -6990,13 +5584,11 @@ sub modifiable_userdata_row { } sub insttypes_row { - my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rowtotal,$onclick, - $customcss,$rowstyle) = @_; + my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rownum) = @_; my %lt = &Apache::lonlocal::texthash ( cansearch => 'Users allowed to search', statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)', lockablenames => 'User preference to lock name', - selfassign => 'Self-reportable affiliations', ); my $showdom; if ($context eq 'cansearch') { @@ -7006,22 +5598,9 @@ sub insttypes_row { if ($context eq 'statustocreate') { $class = 'LC_right_item'; } - my $css_class; - if ($$rowtotal%2) { - $css_class = 'LC_odd_row'; - } - if ($customcss) { - $css_class .= ' '.$customcss; - } - $css_class =~ s/^\s+//; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowstyle) { - $css_class .= ' style="'.$rowstyle.'"'; - } - if ($onclick) { - $onclick = 'onclick="'.$onclick.'" '; + my $css_class = ' class="LC_odd_row"'; + if ($rownum ne '') { + $css_class = ($rownum%2? ' class="LC_odd_row"':''); } my $output = '<tr'.$css_class.'>'. '<td>'.$lt{$context}.$showdom. @@ -7050,14 +5629,14 @@ sub insttypes_row { $output .= '<td class="LC_left_item">'. '<span class="LC_nobreak"><label>'. '<input type="checkbox" name="'.$context.'" '. - 'value="'.$types->[$i].'"'.$check.$onclick.'/>'. + 'value="'.$types->[$i].'"'.$check.'/>'. $usertypes->{$types->[$i]}.'</label></span></td>'; } } $rem = @{$types}%($numinrow); } my $colsleft = $numinrow - $rem; - if ($rem == 0) { + if (($rem == 0) && (@{$types} > 0)) { $output .= '<tr>'; } if ($colsleft > 1) { @@ -7077,7 +5656,7 @@ sub insttypes_row { } $output .= '<span class="LC_nobreak"><label>'. '<input type="checkbox" name="'.$context.'" '. - 'value="default"'.$defcheck.$onclick.'/>'. + 'value="default"'.$defcheck.'/>'. $othertitle.'</label></span></td>'. '</tr></table></td></tr>'; return $output; @@ -7183,7 +5762,6 @@ sub modify_login { } my %servers = &Apache::lonnet::internet_dom_servers($dom); - my %domservers = &Apache::lonnet::get_servers($dom); my @loginvia_attribs = ('serverpath','custompath','exempt'); if (keys(%servers) > 1) { foreach my $lonhost (keys(%servers)) { @@ -7226,7 +5804,22 @@ sub modify_login { $changes{'loginvia'}{$lonhost} = 1; } if ($item eq 'exempt') { - $new = &check_exempt_addresses($new); + $new =~ s/^\s+//; + $new =~ s/\s+$//; + my @poss_ips = split(/\s*[,:]\s*/,$new); + my @okips; + foreach my $ip (@poss_ips) { + if ($ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { + if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) { + push(@okips,$ip); + } + } + } + if (@okips > 0) { + $new = join(',',@okips); + } else { + $new = ''; + } } $loginhash{login}{loginvia}{$lonhost}{$item} = $new; } @@ -7322,6 +5915,7 @@ sub modify_login { $errors .= '<li><span class="LC_error">'.$puberror.'</span></li>'; if ((grep(/^\Q$lang\E$/,@currlangs)) && (!grep(/^\Q$lang\E$/,@delurls))) { + $loginhash{'login'}{'helpurl'}{$lang} = $domconfig{'login'}{'helpurl'}{$lang}; } } @@ -7337,84 +5931,6 @@ sub modify_login { $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; } } - - my (%currheadtagurls,%currexempt,@newhosts,%newheadtagurls,%possexempt); - if (ref($domconfig{'login'}) eq 'HASH') { - if (ref($domconfig{'login'}{'headtag'}) eq 'HASH') { - foreach my $lonhost (keys(%{$domconfig{'login'}{'headtag'}})) { - if ($domservers{$lonhost}) { - if (ref($domconfig{'login'}{'headtag'}{$lonhost}) eq 'HASH') { - $currheadtagurls{$lonhost} = $domconfig{'login'}{'headtag'}{$lonhost}{'url'}; - $currexempt{$lonhost} = $domconfig{'login'}{'headtag'}{$lonhost}{'exempt'}; - } - } - } - } - } - my @delheadtagurls = &Apache::loncommon::get_env_multiple('form.loginheadtag_del'); - foreach my $lonhost (sort(keys(%domservers))) { - if (grep(/^\Q$lonhost\E$/,@delheadtagurls)) { - $changes{'headtag'}{$lonhost} = 1; - } else { - if ($env{'form.loginheadtagexempt_'.$lonhost}) { - $possexempt{$lonhost} = &check_exempt_addresses($env{'form.loginheadtagexempt_'.$lonhost}); - } - if ($env{'form.loginheadtag_'.$lonhost.'.filename'}) { - push(@newhosts,$lonhost); - } elsif ($currheadtagurls{$lonhost}) { - $loginhash{'login'}{'headtag'}{$lonhost}{'url'} = $currheadtagurls{$lonhost}; - if ($currexempt{$lonhost}) { - if ((!exists($possexempt{$lonhost})) || ($possexempt{$lonhost} ne $currexempt{$lonhost})) { - $changes{'headtag'}{$lonhost} = 1; - } - } elsif ($possexempt{$lonhost}) { - $changes{'headtag'}{$lonhost} = 1; - } - if ($possexempt{$lonhost}) { - $loginhash{'login'}{'headtag'}{$lonhost}{'exempt'} = $possexempt{$lonhost}; - } - } - } - } - if (@newhosts) { - my $error; - my ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm); - if ($configuserok eq 'ok') { - if ($switchserver) { - $error = &mt("Upload of custom markup is not permitted to this server: [_1]",$switchserver); - } elsif ($author_ok eq 'ok') { - foreach my $lonhost (@newhosts) { - my $formelem = 'loginheadtag_'.$lonhost; - (my $result,$newheadtagurls{$lonhost}) = &publishlogo($r,'upload',$formelem,$dom,$confname, - "login/headtag/$lonhost",'','', - $env{'form.loginheadtag_'.$lonhost.'.filename'}); - if ($result eq 'ok') { - $loginhash{'login'}{'headtag'}{$lonhost}{'url'} = $newheadtagurls{$lonhost}; - $changes{'headtag'}{$lonhost} = 1; - if ($possexempt{$lonhost}) { - $loginhash{'login'}{'headtag'}{$lonhost}{'exempt'} = $possexempt{$lonhost}; - } - } else { - my $puberror = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].", - $newheadtagurls{$lonhost},$result); - $errors .= '<li><span class="LC_error">'.$puberror.'</span></li>'; - if ((grep(/^\Q$lonhost\E$/,keys(%currheadtagurls))) && - (!grep(/^\Q$lonhost\E$/,@delheadtagurls))) { - $loginhash{'login'}{'headtag'}{$lonhost} = $currheadtagurls{$lonhost}; - } - } - } - } else { - $error = &mt("Upload of custom markup file(s) failed because an author role could not be assigned to a Domain Configuration user ([_1]) in domain: [_2]. Error was: [_3].",$confname,$dom,$author_ok); - } - } else { - $error = &mt("Upload of custom markup file(s) failed because a Domain Configuration user ([_1]) could not be created in domain: [_2]. Error was: [_3].",$confname,$dom,$configuserok); - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; - } - } &process_captcha('login',\%changes,$loginhash{'login'},$domconfig{'login'}); my $defaulthelpfile = '/adm/loginproblems.html'; @@ -7515,25 +6031,6 @@ sub modify_login { } } } - } elsif ($item eq 'headtag') { - if (ref($changes{$item}) eq 'HASH') { - foreach my $lonhost (sort(keys(%{$changes{$item}}))) { - if (grep(/^\Q$lonhost\E$/,@delheadtagurls)) { - $resulttext .= '<li>'.&mt('custom markup file removed for [_1]',$domservers{$lonhost}).'</li>'; - } elsif (ref($loginhash{'login'}{'headtag'}{$lonhost}) eq 'HASH') { - $resulttext .= '<li><a href="'. - "javascript:void(open('$loginhash{'login'}{'headtag'}{$lonhost}{'url'}?inhibitmenu=yes','Custom_HeadTag', - 'menubar=0,toolbar=1,scrollbars=1,width=600,height=500,resizable=yes'))". - '">'.&mt('custom markup').'</a> '.&mt('(for [_1])',$servers{$lonhost}).' '; - if ($possexempt{$lonhost}) { - $resulttext .= &mt('not included for client IP(s): [_1]',$possexempt{$lonhost}); - } else { - $resulttext .= &mt('included for any client IP'); - } - $resulttext .= '</li>'; - } - } - } } elsif ($item eq 'captcha') { if (ref($loginhash{'login'}) eq 'HASH') { my $chgtxt; @@ -7565,18 +6062,11 @@ sub modify_login { if (!$privkey) { $chgtxt .= '<li>'.&mt('Private key deleted').'</li>'; } else { - $chgtxt .= '<li>'.&mt('Private key set to [_1]',$privkey).'</li>'; + $chgtxt .= '<li>'.&mt('Private key set to [_1]',$pubkey).'</li>'; } $chgtxt .= '</ul>'; $resulttext .= '<li>'.$chgtxt.'</li>'; } - } elsif ($item eq 'recaptchaversion') { - if (ref($loginhash{'login'}) eq 'HASH') { - if ($loginhash{'login'}{'captcha'} eq 'recaptcha') { - $resulttext .= '<li>'.&mt('ReCAPTCHA for helpdesk form set to version [_1]',$loginhash{'login'}{'recaptchaversion'}). - '</li>'; - } - } } else { $resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>'; } @@ -7596,27 +6086,6 @@ sub modify_login { return $resulttext; } -sub check_exempt_addresses { - my ($iplist) = @_; - $iplist =~ s/^\s+//; - $iplist =~ s/\s+$//; - my @poss_ips = split(/\s*[,:]\s*/,$iplist); - my (@okips,$new); - foreach my $ip (@poss_ips) { - if ($ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { - if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) { - push(@okips,$ip); - } - } - } - if (@okips > 0) { - $new = join(',',@okips); - } else { - $new = ''; - } - return $new; -} - sub color_font_choices { my %choices = &Apache::lonlocal::texthash ( @@ -8113,14 +6582,14 @@ sub publishlogo { } else { my $source = $filepath.'/'.$file; my $logfile; - if (!open($logfile,">>",$source.'.log')) { + if (!open($logfile,">>$source".'.log')) { return (&mt('No write permission to Authoring Space')); } print $logfile "\n================= Publish ".localtime()." ================\n". $env{'user.name'}.':'.$env{'user.domain'}."\n"; # Save the file - if (!open(FH,">",$source)) { + if (!open(FH,'>'.$source)) { &Apache::lonnet::logthis('Failed to create '.$source); return (&mt('Failed to create file')); } @@ -8181,8 +6650,7 @@ $env{'user.name'}.':'.$env{'user.domain' if ($fullwidth ne '' && $fullheight ne '') { if ($fullwidth > $thumbwidth && $fullheight > $thumbheight) { my $thumbsize = $thumbwidth.'x'.$thumbheight; - my @args = ('convert','-sample',$thumbsize,$inputfile,$outfile); - system({$args[0]} @args); + system("convert -sample $thumbsize $inputfile $outfile"); chmod(0660, $filepath.'/tn-'.$file); if (-e $outfile) { my $copyfile=$targetdir.'/tn-'.$file; @@ -8261,7 +6729,7 @@ sub write_metadata { { print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; my $mfh; - if (open($mfh,">",$targetdir.'/'.$file.'.meta')) { + if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { foreach (sort(keys(%metadatafields))) { unless ($_=~/\./) { my $unikey=$_; @@ -8295,7 +6763,7 @@ sub notifysubscribed { next unless (ref($targetsource) eq 'ARRAY'); my ($target,$source)=@{$targetsource}; if ($source ne '') { - if (open(my $logfh,">>",$source.'.log')) { + if (open(my $logfh,'>>'.$source.'.log')) { print $logfh "\nCleanup phase: Notifications\n"; my @subscribed=&subscribed_hosts($target); foreach my $subhost (@subscribed) { @@ -8321,7 +6789,7 @@ sub notifysubscribed { sub subscribed_hosts { my ($target) = @_; my @subscribed; - if (open(my $fh,"<","$target.subscription")) { + if (open(my $fh,"<$target.subscription")) { while (my $subline=<$fh>) { if ($subline =~ /^($match_lonid):/) { my $host = $1; @@ -8506,7 +6974,7 @@ sub modify_quotas { my $newpos = $env{'form.'.$itemid}; $newpos =~ s/\D+//g; foreach my $item ('subject','title','publisher','author') { - next if ((($item eq 'author') || ($item eq 'publisher')) && + next if ((($item eq 'author') || ($item eq 'publisher')) && ($type eq 'templates')); $confhash{$type}{$key}{$item} = $env{'form.'.$type.'_'.$item.'_'.$i}; if ($domconfig{$action}{$type}{$key}{$item} ne $confhash{$type}{$key}{$item}) { @@ -8520,20 +6988,16 @@ sub modify_quotas { #FIXME need to obsolete item in RES space } elsif ($env{'form.'.$type.'_image_'.$i.'.filename'}) { my ($cdom,$cnum) = split(/_/,$key); - if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') { - $errors .= '<li><span class="LC_error">'.&mt('Image not saved: could not find textbook course').'</li>'; - } else { - my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i, - $cdom,$cnum,$type,$configuserok, - $switchserver,$author_ok); - if ($imgurl) { - $confhash{$type}{$key}{'image'} = $imgurl; - $changes{$type}{$key} = 1; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; - } + my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i, + $cdom,$cnum,$type,$configuserok, + $switchserver,$author_ok); + if ($imgurl) { + $confhash{$type}{$key}{'image'} = $imgurl; + $changes{$type}{$key} = 1; + } + if ($error) { + &Apache::lonnet::logthis($error); + $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; } } elsif ($domconfig{$action}{$type}{$key}{'image'}) { $confhash{$type}{$key}{'image'} = @@ -8567,19 +7031,15 @@ sub modify_quotas { if ($type eq 'textbooks') { if ($env{'form.'.$type.'_addbook_image.filename'} ne '') { my ($cdom,$cnum) = split(/_/,$newbook{$type}); - if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') { - $errors .= '<li><span class="LC_error">'.&mt('Image not saved: could not find textbook course').'</li>'; - } else { - my ($imageurl,$error) = - &process_textbook_image($r,$dom,$confname,$type.'_addbook_image',$cdom,$cnum,$type, - $configuserok,$switchserver,$author_ok); - if ($imageurl) { - $confhash{$type}{$newbook{$type}}{'image'} = $imageurl; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; - } + my ($imageurl,$error) = + &process_textbook_image($r,$dom,$confname,$type.'_addbook_image',$cdom,$cnum,$type, + $configuserok,$switchserver,$author_ok); + if ($imageurl) { + $confhash{$type}{$newbook{$type}}{'image'} = $imageurl; + } + if ($error) { + &Apache::lonnet::logthis($error); + $errors .= '<li><span class="LC_error">'.$error.'</span></li>'; } } } @@ -8611,14 +7071,10 @@ sub modify_quotas { if (@{$confhash{'validation'}{$item}} > 0) { @{$confhash{'validation'}{$item}} = sort(@{$confhash{'validation'}{$item}}); } - if (ref($domconfig{'requestcourses'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}{'validation'}{$item}) eq 'ARRAY') { - @changed = &Apache::loncommon::compare_arrays($confhash{'validation'}{$item}, - $domconfig{'requestcourses'}{'validation'}{$item}); - } else { - @changed = @{$confhash{'validation'}{$item}}; - } + if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { + if (ref($domconfig{'requestcourses'}{'validation'}{$item}) eq 'ARRAY') { + @changed = &Apache::loncommon::compare_arrays($confhash{'validation'}{$item}, + $domconfig{'requestcourses'}{'validation'}{$item}); } else { @changed = @{$confhash{'validation'}{$item}}; } @@ -8639,15 +7095,9 @@ sub modify_quotas { $env{'form.requestcourses_validation_'.$item} =~ s/[\n\r\f]+/\s/gs; } } - if (ref($domconfig{'requestcourses'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { - if ($domconfig{'requestcourses'}{'validation'}{$item} ne $confhash{'validation'}{$item}) { - $changes{'validation'}{$item} = $confhash{'validation'}{$item}; - } - } else { - if ($confhash{'validation'}{$item} ne '') { - $changes{'validation'}{$item} = $confhash{'validation'}{$item}; - } + if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { + if ($domconfig{'requestcourses'}{'validation'}{$item} ne $confhash{'validation'}{$item}) { + $changes{'validation'}{$item} = $confhash{'validation'}{$item}; } } else { if ($confhash{'validation'}{$item} ne '') { @@ -8659,24 +7109,20 @@ sub modify_quotas { } if ($env{'form.validationdc'}) { my $newval = $env{'form.validationdc'}; - my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']); + my %domcoords = &get_active_dcs($dom); if (exists($domcoords{$newval})) { $confhash{'validation'}{'dc'} = $newval; } } if (ref($confhash{'validation'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { - if ($domconfig{'requestcourses'}{'validation'}{'dc'}) { - unless ($confhash{'validation'}{'dc'} eq $domconfig{'requestcourses'}{'validation'}{'dc'}) { - if ($confhash{'validation'}{'dc'} eq '') { - $changes{'validation'}{'dc'} = &mt('None'); - } else { - $changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'}; - } + if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { + if ($domconfig{'requestcourses'}{'validation'}{'dc'}) { + unless ($confhash{'validation'}{'dc'} eq $domconfig{'requestcourses'}{'validation'}{'dc'}) { + if ($confhash{'validation'}{'dc'} eq '') { + $changes{'validation'}{'dc'} = &mt('None'); + } else { + $changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'}; } - } elsif ($confhash{'validation'}{'dc'} ne '') { - $changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'}; } } elsif ($confhash{'validation'}{'dc'} ne '') { $changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'}; @@ -8684,13 +7130,9 @@ sub modify_quotas { } elsif ($confhash{'validation'}{'dc'} ne '') { $changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'}; } - } else { - if (ref($domconfig{'requestcourses'}) eq 'HASH') { - if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { - if ($domconfig{'requestcourses'}{'validation'}{'dc'}) { - $changes{'validation'}{'dc'} = &mt('None'); - } - } + } elsif (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') { + if ($domconfig{'requestcourses'}{'validation'}{'dc'}) { + $changes{'validation'}{'dc'} = &mt('None'); } } } @@ -9071,7 +7513,7 @@ sub process_textbook_image { } elsif ($author_ok eq 'ok') { my ($result,$imageurl) = &publishlogo($r,'upload',$caller,$dom,$confname, - "$type/$cdom/$cnum/cover",$width,$height); + "$type/$dom/$cnum/cover",$width,$height); if ($result eq 'ok') { $url = $imageurl; } else { @@ -9098,8 +7540,7 @@ sub modify_autoenroll { my $autorun = &Apache::lonnet::auto_run(undef,$dom), my %title = ( run => 'Auto-enrollment active', sender => 'Sender for notification messages', - coowners => 'Automatic assignment of co-ownership to instructors of record (institutional data)', - failsafe => 'Failsafe for no drops if institutional data missing for a section'); + coowners => 'Automatic assignment of co-ownership to instructors of record (institutional data)'); my @offon = ('off','on'); my $sender_uname = $env{'form.sender_uname'}; my $sender_domain = $env{'form.sender_domain'}; @@ -9109,17 +7550,11 @@ sub modify_autoenroll { $sender_domain = ''; } my $coowners = $env{'form.autoassign_coowners'}; - my $failsafe = $env{'form.autoenroll_failsafe'}; - $failsafe =~ s{^\s+|\s+$}{}g; - if ($failsafe =~ /\D/) { - undef($failsafe); - } my %autoenrollhash = ( autoenroll => { 'run' => $env{'form.autoenroll_run'}, 'sender_uname' => $sender_uname, 'sender_domain' => $sender_domain, 'co-owners' => $coowners, - 'autofailsafe' => $failsafe, } ); my $putresult = &Apache::lonnet::put_dom('configuration',\%autoenrollhash, @@ -9146,10 +7581,7 @@ sub modify_autoenroll { } } elsif ($coowners) { $changes{'coowners'} = 1; - } - if ($currautoenroll{'autofailsafe'} ne $failsafe) { - $changes{'autofailsafe'} = 1; - } + } if (keys(%changes) > 0) { $resulttext = &mt('Changes made:').'<ul>'; if ($changes{'run'}) { @@ -9169,17 +7601,6 @@ sub modify_autoenroll { $lastactref->{'domainconfig'} = 1; } } - if ($changes{'autofailsafe'}) { - if ($failsafe ne '') { - $resulttext .= '<li>'.&mt('Failsafe for no drops if institutional data missing for a section set to: [_1]',$failsafe).'</li>'; - } else { - $resulttext .= '<li>'.&mt('Failsafe for no drops if institutional data missing for a section: deleted'); - } - &Apache::lonnet::get_domain_defaults($dom,1); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } - } $resulttext .= '</ul>'; } else { $resulttext = &mt('No changes made to auto-enrollment settings'); @@ -9395,7 +7816,7 @@ sub modify_autocreate { $newvals{$item} = 0 if ($newvals{$item} eq ''); } $newvals{'xmldc'} = $env{'form.autocreate_xmldc'}; - my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']); + my %domcoords = &get_active_dcs($dom); unless (exists($domcoords{$newvals{'xmldc'}})) { $newvals{'xmldc'} = ''; } @@ -9452,7 +7873,7 @@ sub modify_autocreate { } sub modify_directorysrch { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,%domconfig) = @_; my ($resulttext,%changes); my %currdirsrch; if (ref($domconfig{'directorysrch'}) eq 'HASH') { @@ -9460,10 +7881,8 @@ sub modify_directorysrch { $currdirsrch{$key} = $domconfig{'directorysrch'}{$key}; } } - my %title = ( available => 'Institutional directory search available', - localonly => 'Other domains can search institution', - lcavailable => 'LON-CAPA directory search available', - lclocalonly => 'Other domains can search LON-CAPA domain', + my %title = ( available => 'Directory search available', + localonly => 'Other domains can search', searchby => 'Search types', searchtypes => 'Search latitude'); my @offon = ('off','on'); @@ -9537,9 +7956,7 @@ sub modify_directorysrch { my %dirsrch_hash = ( directorysrch => { available => $env{'form.dirsrch_available'}, cansearch => \@cansearch, - localonly => $env{'form.dirsrch_instlocalonly'}, - lclocalonly => $env{'form.dirsrch_domlocalonly'}, - lcavailable => $env{'form.dirsrch_domavailable'}, + localonly => $env{'form.dirsrch_localonly'}, searchby => \@searchby, searchtypes => \@searchtypes, } @@ -9556,47 +7973,24 @@ sub modify_directorysrch { $changes{'available'} = 1; } } - if (exists($currdirsrch{'lcavailable'})) { - if ($currdirsrch{'lcavailable'} ne $env{'form.dirsrch_domavailable'}) { - $changes{'lcavailable'} = 1; - } - } else { - if ($env{'form.dirsrch_lcavailable'} eq '1') { - $changes{'lcavailable'} = 1; - } - } if (exists($currdirsrch{'localonly'})) { - if ($currdirsrch{'localonly'} ne $env{'form.dirsrch_instlocalonly'}) { - $changes{'localonly'} = 1; - } + if ($currdirsrch{'localonly'} ne $env{'form.dirsrch_localonly'}) { + $changes{'localonly'} = 1; + } } else { - if ($env{'form.dirsrch_instlocalonly'} eq '1') { + if ($env{'form.dirsrch_localonly'} eq '1') { $changes{'localonly'} = 1; } } - if (exists($currdirsrch{'lclocalonly'})) { - if ($currdirsrch{'lclocalonly'} ne $env{'form.dirsrch_domlocalonly'}) { - $changes{'lclocalonly'} = 1; - } - } else { - if ($env{'form.dirsrch_domlocalonly'} eq '1') { - $changes{'lclocalonly'} = 1; - } - } if (keys(%changes) > 0) { $resulttext = &mt('Changes made:').'<ul>'; if ($changes{'available'}) { $resulttext .= '<li>'.&mt("$title{'available'} set to: $offon[$env{'form.dirsrch_available'}]").'</li>'; } - if ($changes{'lcavailable'}) { - $resulttext .= '<li>'.&mt("$title{'lcavailable'} set to: $offon[$env{'form.dirsrch_domavailable'}]").'</li>'; - } if ($changes{'localonly'}) { - $resulttext .= '<li>'.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_instlocalonly'}]").'</li>'; - } - if ($changes{'lclocalonly'}) { - $resulttext .= '<li>'.&mt("$title{'lclocalonly'} set to: $otherdoms[$env{'form.dirsrch_domlocalonly'}]").'</li>'; + $resulttext .= '<li>'.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_localonly'}]").'</li>'; } + if (ref($changes{'cansearch'}) eq 'ARRAY') { my $chgtext; if (ref($usertypes) eq 'HASH') { @@ -9646,12 +8040,8 @@ sub modify_directorysrch { $resulttext .= '<li>'.&mt($title{'searchtypes'}.' set to: "[_1]"',$chgtext).'</li>'; } $resulttext .= '</ul>'; - &Apache::lonnet::do_cache_new('directorysrch',$dom,$dirsrch_hash{'directorysrch'},3600); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'directorysrch'} = 1; - } } else { - $resulttext = &mt('No changes made to directory search settings'); + $resulttext = &mt('No changes made to institution directory search settings'); } } else { $resulttext = '<span class="LC_error">'. @@ -9668,12 +8058,11 @@ sub modify_contacts { $currsetting{$key} = $domconfig{'contacts'}{$key}; } } - my (%others,%to,%bcc,%includestr,%includeloc); + my (%others,%to,%bcc); my @contacts = ('supportemail','adminemail'); - my @mailings = ('errormail','packagesmail','helpdeskmail','otherdomsmail', - 'lonstatusmail','requestsmail','updatesmail','idconflictsmail',hostipmail'); + my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail', + 'requestsmail','updatesmail','idconflictsmail'); my @toggles = ('reporterrors','reportupdates'); - my ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields(); foreach my $type (@mailings) { @{$newsetting{$type}} = &Apache::loncommon::get_env_multiple('form.'.$type); @@ -9683,17 +8072,12 @@ sub modify_contacts { } else { $contacts_hash{contacts}{$type}{$item} = 0; } - } + } $others{$type} = $env{'form.'.$type.'_others'}; $contacts_hash{contacts}{$type}{'others'} = $others{$type}; - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { + if ($type eq 'helpdeskmail') { $bcc{$type} = $env{'form.'.$type.'_bcc'}; $contacts_hash{contacts}{$type}{'bcc'} = $bcc{$type}; - if (($env{'form.'.$type.'_includestr'} ne '') && ($env{'form.'.$type.'_includeloc'} =~ /^s|b$/)) { - $includestr{$type} = $env{'form.'.$type.'_includestr'}; - $includeloc{$type} = $env{'form.'.$type.'_includeloc'}; - $contacts_hash{contacts}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type}); - } } } foreach my $item (@contacts) { @@ -9705,23 +8089,6 @@ sub modify_contacts { $contacts_hash{'contacts'}{$item} = $env{'form.'.$item}; } } - if ((ref($fields) eq 'ARRAY') && (ref($possoptions) eq 'HASH')) { - foreach my $field (@{$fields}) { - if (ref($possoptions->{$field}) eq 'ARRAY') { - my $value = $env{'form.helpform_'.$field}; - $value =~ s/^\s+|\s+$//g; - if (grep(/^\Q$value\E$/,@{$possoptions->{$field}})) { - $contacts_hash{contacts}{'helpform'}{$field} = $value; - if ($field eq 'screenshot') { - $env{'form.helpform_maxsize'} =~ s/^\s+|\s+$//g; - if ($env{'form.helpform_maxsize'} =~ /^\d+\.?\d*$/) { - $contacts_hash{contacts}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'}; - } - } - } - } - } - } if (keys(%currsetting) > 0) { foreach my $item (@contacts) { if ($to{$item} ne $currsetting{$item}) { @@ -9741,39 +8108,10 @@ sub modify_contacts { if ($others{$type} ne $currsetting{$type}{'others'}) { push(@{$changes{$type}},'others'); } - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { + if ($type eq 'helpdeskmail') { if ($bcc{$type} ne $currsetting{$type}{'bcc'}) { push(@{$changes{$type}},'bcc'); } - my ($currloc,$currstr) = split(/:/,$currsetting{$type}{'include'},2); - if (($includeloc{$type} ne $currloc) || (&escape($includestr{$type}) ne $currstr)) { - push(@{$changes{$type}},'include'); - } - } - } - if (ref($fields) eq 'ARRAY') { - if (ref($currsetting{'helpform'}) eq 'HASH') { - foreach my $field (@{$fields}) { - if ($currsetting{'helpform'}{$field} ne $contacts_hash{'contacts'}{'helpform'}{$field}) { - push(@{$changes{'helpform'}},$field); - } - if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) { - if ($currsetting{'helpform'}{'maxsize'} ne $contacts_hash{'contacts'}{'helpform'}{'maxsize'}) { - push(@{$changes{'helpform'}},'maxsize'); - } - } - } - } else { - foreach my $field (@{$fields}) { - if ($contacts_hash{'contacts'}{'helpform'}{$field} ne 'yes') { - push(@{$changes{'helpform'}},$field); - } - if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) { - if ($contacts_hash{'contacts'}{'helpform'}{'maxsize'} != 1) { - push(@{$changes{'helpform'}},'maxsize'); - } - } - } } } } else { @@ -9783,42 +8121,26 @@ sub modify_contacts { $default{'errormail'} = 'adminemail'; $default{'packagesmail'} = 'adminemail'; $default{'helpdeskmail'} = 'supportemail'; - $default{'otherdomsmail'} = 'supportemail'; $default{'lonstatusmail'} = 'adminemail'; $default{'requestsmail'} = 'adminemail'; $default{'updatesmail'} = 'adminemail'; - $default{'hostipmail'} = 'adminemail'; foreach my $item (@contacts) { if ($to{$item} ne $default{$item}) { - $changes{$item} = 1; + $changes{$item} = 1; } } foreach my $type (@mailings) { if ((@{$newsetting{$type}} != 1) || ($newsetting{$type}[0] ne $default{$type})) { + push(@{$changes{$type}},@{$newsetting{$type}}); } if ($others{$type} ne '') { push(@{$changes{$type}},'others'); } - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { + if ($type eq 'helpdeskmail') { if ($bcc{$type} ne '') { push(@{$changes{$type}},'bcc'); } - if (($includeloc{$type} =~ /^b|s$/) && ($includestr{$type} ne '')) { - push(@{$changes{$type}},'include'); - } - } - } - if (ref($fields) eq 'ARRAY') { - foreach my $field (@{$fields}) { - if ($contacts_hash{'contacts'}{'helpform'}{$field} ne 'yes') { - push(@{$changes{'helpform'}},$field); - } - if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) { - if ($contacts_hash{'contacts'}{'helpform'}{'maxsize'} != 1) { - push(@{$changes{'helpform'}},'maxsize'); - } - } } } } @@ -9850,11 +8172,7 @@ sub modify_contacts { } foreach my $type (@mailings) { if (ref($changes{$type}) eq 'ARRAY') { - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { - $resulttext .= '<li>'.$titles->{$type}.' -- '.&mt('sent to').': '; - } else { - $resulttext .= '<li>'.$titles->{$type}.': '; - } + $resulttext .= '<li>'.$titles->{$type}.': '; my @text; foreach my $item (@{$newsetting{$type}}) { push(@text,$short_titles->{$item}); @@ -9862,31 +8180,12 @@ sub modify_contacts { if ($others{$type} ne '') { push(@text,$others{$type}); } - if (@text) { - $resulttext .= '<span class="LC_cusr_emph">'. - join(', ',@text).'</span>'; - } - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { + $resulttext .= '<span class="LC_cusr_emph">'. + join(', ',@text).'</span>'; + if ($type eq 'helpdeskmail') { if ($bcc{$type} ne '') { - my $bcctext; - if (@text) { - $bcctext = ' '.&mt('with Bcc to'); - } else { - $bcctext = '(Bcc)'; - } - $resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>'; - } elsif (!@text) { - $resulttext .= &mt('No one'); + $resulttext .= ' '.&mt('with Bcc to').': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>'; } - if ($includestr{$type} ne '') { - if ($includeloc{$type} eq 'b') { - $resulttext .= '<br />'.&mt('Text automatically added to e-mail body:').' '.$includestr{$type}; - } elsif ($includeloc{$type} eq 's') { - $resulttext .= '<br />'.&mt('Text automatically added to e-mail subject:').' '.$includestr{$type}; - } - } - } elsif (!@text) { - $resulttext .= &mt('No recipients'); } $resulttext .= '</li>'; } @@ -9908,50 +8207,9 @@ sub modify_contacts { &mt('LON-CAPA core group - MSU'),600,500)). '</li>'; } - if ((ref($changes{'helpform'}) eq 'ARRAY') && (ref($fields) eq 'ARRAY')) { - my (@optional,@required,@unused,$maxsizechg); - foreach my $field (@{$changes{'helpform'}}) { - if ($field eq 'maxsize') { - $maxsizechg = 1; - next; - } - if ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'yes') { - push(@optional,$field); - } elsif ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'no') { - push(@unused,$field); - } elsif ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'req') { - push(@required,$field); - } - } - if (@optional) { - $resulttext .= '<li>'. - &mt('Help form fields changed to "Optional": [_1].', - '<span class="LC_cusr_emph">'.join(', ',map { $fieldtitles->{$_}; } @optional)).'</span>'. - '</li>'; - } - if (@required) { - $resulttext .= '<li>'. - &mt('Help form fields changed to "Required": [_1].', - '<span class="LC_cusr_emph">'.join(', ',map { $fieldtitles->{$_}; } @required)).'</span>'. - '</li>'; - } - if (@unused) { - $resulttext .= '<li>'. - &mt('Help form fields changed to "Not shown": [_1].', - '<span class="LC_cusr_emph">'.join(', ',map { $fieldtitles->{$_}; } @unused)).'</span>'. - '</li>'; - } - if ($maxsizechg) { - $resulttext .= '<li>'. - &mt('Max size for file uploaded to help form by logged-in user set to [_1] MB.', - $contacts_hash{'contacts'}{'helpform'}{'maxsize'}). - '</li>'; - - } - } $resulttext .= '</ul>'; } else { - $resulttext = &mt('No changes made to contacts and form settings'); + $resulttext = &mt('No changes made to contact information'); } } else { $resulttext = '<span class="LC_error">'. @@ -9969,10 +8227,11 @@ sub modify_usercreation { if ($key eq 'cancreate') { if (ref($domconfig{'usercreation'}{$key}) eq 'HASH') { foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) { - if (($item eq 'requestcrs') || ($item eq 'course') || ($item eq 'author')) { - $curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item}; - } else { + if (($item eq 'selfcreate') || ($item eq 'statustocreate') || + ($item eq 'captcha') || ($item eq 'recaptchakeys')) { $save_usercreate{$key}{$item} = $domconfig{'usercreation'}{$key}{$item}; + } else { + $curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item}; } } } @@ -10175,18 +8434,14 @@ sub modify_usercreation { } sub modify_selfcreation { - my ($dom,$lastactref,%domconfig) = @_; - my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%curr_inststatus,%changes,%cancreate); - my (%save_usercreate,%save_usermodify,%save_inststatus,@types,%usertypes); - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - my ($othertitle,$usertypesref,$typesref) = &Apache::loncommon::sorted_inst_types($dom); - if (ref($typesref) eq 'ARRAY') { - @types = @{$typesref}; - } - if (ref($usertypesref) eq 'HASH') { - %usertypes = %{$usertypesref}; + my ($dom,%domconfig) = @_; + my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%changes,%cancreate); + my (%save_usercreate,%save_usermodify); + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); + if (ref($types) eq 'ARRAY') { + $usertypes->{'default'} = $othertitle; + push(@{$types},'default'); } - $usertypes{'default'} = $othertitle; # # Retrieve current domain configuration for self-creation of usernames from $domconfig{'usercreation'}. # @@ -10196,11 +8451,9 @@ sub modify_selfcreation { if (ref($domconfig{'usercreation'}{$key}) eq 'HASH') { foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) { if (($item eq 'selfcreate') || ($item eq 'statustocreate') || - ($item eq 'captcha') || ($item eq 'recaptchakeys') || - ($item eq 'recaptchaversion') || ($item eq 'notify') || - ($item eq 'emailusername') || ($item eq 'shibenv') || - ($item eq 'selfcreateprocessing') || ($item eq 'emailverified') || - ($item eq 'emailoptions') || ($item eq 'emaildomain')) { + ($item eq 'captcha') || ($item eq 'recaptchakeys') || + ($item eq 'emailusername') || ($item eq 'notify') || + ($item eq 'selfcreateprocessing') || ($item eq 'shibenv')) { $curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item}; } else { $save_usercreate{$key}{$item} = $domconfig{'usercreation'}{$key}{$item}; @@ -10226,161 +8479,41 @@ sub modify_selfcreation { } } } -# -# Retrieve current domain configuration for institutional status types from $domconfig{'inststatus'}. -# - if (ref($domconfig{'inststatus'}) eq 'HASH') { - foreach my $key (keys(%{$domconfig{'inststatus'}})) { - if ($key eq 'inststatusguest') { - $curr_inststatus{$key} = $domconfig{'inststatus'}{$key}; - } else { - $save_inststatus{$key} = $domconfig{'inststatus'}{$key}; - } - } - } my @contexts = ('selfcreate'); @{$cancreate{'selfcreate'}} = (); %{$cancreate{'emailusername'}} = (); - if (@types) { - @{$cancreate{'statustocreate'}} = (); - } + @{$cancreate{'statustocreate'}} = (); %{$cancreate{'selfcreateprocessing'}} = (); %{$cancreate{'shibenv'}} = (); - %{$cancreate{'emailverified'}} = (); - %{$cancreate{'emailoptions'}} = (); - %{$cancreate{'emaildomain'}} = (); my %selfcreatetypes = ( sso => 'users authenticated by institutional single sign on', login => 'users authenticated by institutional log-in', - email => 'users verified by e-mail', + email => 'users who provide a valid e-mail address for use as username', ); # # Populate $cancreate{'selfcreate'} array reference with types of user, for which self-creation of user accounts # is permitted. # - my ($emailrules,$emailruleorder) = &Apache::lonnet::inst_userrules($dom,'email'); + my @statuses; + if (ref($domconfig{'inststatus'}) eq 'HASH') { + if (ref($domconfig{'inststatus'}{'inststatusguest'}) eq 'ARRAY') { + @statuses = @{$domconfig{'inststatus'}{'inststatusguest'}}; + } + } + push(@statuses,'default'); - my (@statuses,%email_rule); foreach my $item ('login','sso','email') { if ($item eq 'email') { if ($env{'form.cancreate_email'}) { - if (@types) { - my @poss_statuses = &Apache::loncommon::get_env_multiple('form.selfassign'); - foreach my $status (@poss_statuses) { - if (grep(/^\Q$status\E$/,(@types,'default'))) { - push(@statuses,$status); - } - } - $save_inststatus{'inststatusguest'} = \@statuses; - } else { - push(@statuses,'default'); - } - if (@statuses) { - my %curr_rule; - if (ref($curr_usercreation{'email_rule'}) eq 'ARRAY') { - foreach my $type (@statuses) { - $curr_rule{$type} = $curr_usercreation{'email_rule'}; - } - } elsif (ref($curr_usercreation{'email_rule'}) eq 'HASH') { - foreach my $type (@statuses) { - $curr_rule{$type} = $curr_usercreation{'email_rule'}{$type}; - } - } - push(@{$cancreate{'selfcreate'}},'email'); - push(@contexts,('selfcreateprocessing','emailverified','emailoptions')); - my %curremaildom; - if (ref($curr_usercreation{'cancreate'}{'emaildomain'}) eq 'HASH') { - %curremaildom = %{$curr_usercreation{'cancreate'}{'emaildomain'}}; - } - foreach my $type (@statuses) { - if ($env{'form.cancreate_emailprocess_'.$type} =~ /^(?:approval|automatic)$/) { - $cancreate{'selfcreateprocessing'}{$type} = $env{'form.cancreate_emailprocess_'.$type}; - } - if ($env{'form.cancreate_usernameoptions_'.$type} =~ /^(?:all|first|free)$/) { - $cancreate{'emailverified'}{$type} = $env{'form.cancreate_usernameoptions_'.$type}; - } - if ($env{'form.cancreate_emailoptions_'.$type} =~ /^(any|inst|noninst|custom)$/) { -# -# Retrieve rules (if any) governing types of e-mail address which may be used to verify a username. -# - my $chosen = $1; - if (($chosen eq 'inst') || ($chosen eq 'noninst')) { - my $emaildom; - if ($env{'form.cancreate_emaildomain_'.$chosen.'_'.$type} =~ /^\@[^\@]+$/) { - $emaildom = $env{'form.cancreate_emaildomain_'.$chosen.'_'.$type}; - $cancreate{'emaildomain'}{$type}{$chosen} = $emaildom; - if (ref($curremaildom{$type}) eq 'HASH') { - if (exists($curremaildom{$type}{$chosen})) { - if ($curremaildom{$type}{$chosen} ne $emaildom) { - push(@{$changes{'cancreate'}},'emaildomain'); - } - } elsif ($emaildom ne '') { - push(@{$changes{'cancreate'}},'emaildomain'); - } - } elsif ($emaildom ne '') { - push(@{$changes{'cancreate'}},'emaildomain'); - } - } - $cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type}; - } elsif ($chosen eq 'custom') { - my @possemail_rules = &Apache::loncommon::get_env_multiple('form.email_rule_'.$type); - $email_rule{$type} = []; - if (ref($emailrules) eq 'HASH') { - foreach my $rule (@possemail_rules) { - if (exists($emailrules->{$rule})) { - push(@{$email_rule{$type}},$rule); - } - } - } - if (@{$email_rule{$type}}) { - $cancreate{'emailoptions'}{$type} = 'custom'; - if (ref($curr_rule{$type}) eq 'ARRAY') { - if (@{$curr_rule{$type}} > 0) { - foreach my $rule (@{$curr_rule{$type}}) { - if (!grep(/^\Q$rule\E$/,@{$email_rule{$type}})) { - push(@{$changes{'email_rule'}},$type); - } - } - } - foreach my $type (@{$email_rule{$type}}) { - if (!grep(/^\Q$type\E$/,@{$curr_rule{$type}})) { - push(@{$changes{'email_rule'}},$type); - } - } - } else { - push(@{$changes{'email_rule'}},$type); - } - } - } else { - $cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type}; - } - } - } - if (@types) { - if (ref($curr_inststatus{'inststatusguest'}) eq 'ARRAY') { - my @changed = &Apache::loncommon::compare_arrays(\@statuses,$curr_inststatus{'inststatusguest'}); - if (@changed) { - push(@{$changes{'inststatus'}},'inststatusguest'); - } - } else { - push(@{$changes{'inststatus'}},'inststatusguest'); - } - } - } else { - delete($env{'form.cancreate_email'}); - if (ref($curr_inststatus{'inststatusguest'}) eq 'ARRAY') { - if (@{$curr_inststatus{'inststatusguest'}} > 0) { - push(@{$changes{'inststatus'}},'inststatusguest'); - } - } - } - } else { - $save_inststatus{'inststatusguest'} = []; - if (ref($curr_inststatus{'inststatusguest'}) eq 'ARRAY') { - if (@{$curr_inststatus{'inststatusguest'}} > 0) { - push(@{$changes{'inststatus'}},'inststatusguest'); + push(@{$cancreate{'selfcreate'}},'email'); + push(@contexts,'selfcreateprocessing'); + foreach my $type (@statuses) { + if ($type eq 'default') { + $cancreate{'selfcreateprocessing'}{$type} = $env{'form.cancreate_emailprocess'}; + } else { + $cancreate{'selfcreateprocessing'}{$type} = $env{'form.cancreate_emailprocess_'.$type}; } } } @@ -10390,7 +8523,7 @@ sub modify_selfcreation { } } } - my (%userinfo,%savecaptcha); + my (@email_rule,%userinfo,%savecaptcha); my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info(); # # Populate $cancreate{'emailusername'}{$type} hash ref with information fields (if new user will provide data @@ -10399,8 +8532,8 @@ sub modify_selfcreation { if ($env{'form.cancreate_email'}) { push(@contexts,'emailusername'); - if (@statuses) { - foreach my $type (@statuses) { + if (ref($types) eq 'ARRAY') { + foreach my $type (@{$types}) { if (ref($infofields) eq 'ARRAY') { foreach my $field (@{$infofields}) { if ($env{'form.canmodify_emailusername_'.$type.'_'.$field} =~ /^(required|optional)$/) { @@ -10412,7 +8545,7 @@ sub modify_selfcreation { } # # Populate $cancreate{'notify'} hash ref with names of Domain Coordinators who are to be notified of -# queued requests for self-creation of account verified by e-mail. +# queued requests for self-creation of account using e-mail address as username # my @approvalnotify = &Apache::loncommon::get_env_multiple('form.selfcreationnotifyapproval'); @@ -10432,13 +8565,36 @@ sub modify_selfcreation { push(@{$changes{'cancreate'}},'notify'); } +# +# Retrieve rules (if any) governing types of e-mail address which may be used as a username +# + @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule'); &process_captcha('cancreate',\%changes,\%savecaptcha,$curr_usercreation{'cancreate'}); + if (ref($curr_usercreation{'email_rule'}) eq 'ARRAY') { + if (@{$curr_usercreation{'email_rule'}} > 0) { + foreach my $type (@{$curr_usercreation{'email_rule'}}) { + if (!grep(/^\Q$type\E$/,@email_rule)) { + push(@{$changes{'email_rule'}},$type); + } + } + } + if (@email_rule > 0) { + foreach my $type (@email_rule) { + if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'email_rule'}})) { + push(@{$changes{'email_rule'}},$type); + } + } + } + } elsif (@email_rule > 0) { + push(@{$changes{'email_rule'}},@email_rule); + } } # # Check if domain default is set appropriately, if self-creation of accounts is to be available for # institutional log-in. # if (grep(/^login$/,@{$cancreate{'selfcreate'}})) { + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) { $warningmsg = &mt('Although account creation has been set to be available for institutional logins, currently default authentication in this domain has not been set to support this.').' '. @@ -10457,10 +8613,14 @@ sub modify_selfcreation { # which the user may supply, if institutional data is unavailable. # if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) { - if (@types) { - @{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate'); - push(@contexts,'statustocreate'); - foreach my $type (@types) { + if (ref($types) eq 'ARRAY') { + if (@{$types} > 1) { + @{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate'); + push(@contexts,'statustocreate'); + } else { + undef($cancreate{'statustocreate'}); + } + foreach my $type (@{$types}) { my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$type); foreach my $field (@fields) { if (grep(/^\Q$field\E$/,@modifiable)) { @@ -10471,7 +8631,7 @@ sub modify_selfcreation { } } if (ref($curr_usermodify{'selfcreate'}) eq 'HASH') { - foreach my $type (@types) { + foreach my $type (@{$types}) { if (ref($curr_usermodify{'selfcreate'}{$type}) eq 'HASH') { foreach my $field (@fields) { if ($save_usermodify{'selfcreate'}{$type}{$field} ne @@ -10483,7 +8643,7 @@ sub modify_selfcreation { } } } else { - foreach my $type (@types) { + foreach my $type (@{$types}) { push(@{$changes{'selfcreate'}},$type); } } @@ -10532,28 +8692,34 @@ sub modify_selfcreation { } } elsif (ref($curr_usercreation{'cancreate'}{$item}) eq 'HASH') { if (ref($cancreate{$item}) eq 'HASH') { - foreach my $type (keys(%{$curr_usercreation{'cancreate'}{$item}})) { - if (ref($curr_usercreation{'cancreate'}{$item}{$type}) eq 'HASH') { - foreach my $field (keys(%{$curr_usercreation{'cancreate'}{$item}{$type}})) { - unless ($curr_usercreation{'cancreate'}{$item}{$type}{$field} eq $cancreate{$item}{$type}{$field}) { + foreach my $curr (keys(%{$curr_usercreation{'cancreate'}{$item}})) { + if (ref($curr_usercreation{'cancreate'}{$item}{$curr}) eq 'HASH') { + foreach my $field (keys(%{$curr_usercreation{'cancreate'}{$item}{$curr}})) { + unless ($curr_usercreation{'cancreate'}{$item}{$curr}{$field} eq $cancreate{$item}{$curr}{$field}) { if (!grep(/^$item$/,@{$changes{'cancreate'}})) { push(@{$changes{'cancreate'}},$item); } } } - } elsif (($item eq 'selfcreateprocessing') || ($item eq 'emailverified') || ($item eq 'emailoptions')) { - if ($cancreate{$item}{$type} ne $curr_usercreation{'cancreate'}{$item}{$type}) { + } elsif ($item eq 'selfcreateprocessing') { + if ($cancreate{$item}{$curr} ne $curr_usercreation{'cancreate'}{$item}{$curr}) { + if (!grep(/^$item$/,@{$changes{'cancreate'}})) { + push(@{$changes{'cancreate'}},$item); + } + } + } else { + if (!$cancreate{$item}{$curr}) { if (!grep(/^$item$/,@{$changes{'cancreate'}})) { push(@{$changes{'cancreate'}},$item); } } } } - foreach my $type (keys(%{$cancreate{$item}})) { - if (ref($cancreate{$item}{$type}) eq 'HASH') { - foreach my $field (keys(%{$cancreate{$item}{$type}})) { - if (ref($curr_usercreation{'cancreate'}{$item}{$type}) eq 'HASH') { - unless ($curr_usercreation{'cancreate'}{$item}{$type}{$field} eq $cancreate{$item}{$type}{$field}) { + foreach my $field (keys(%{$cancreate{$item}})) { + if (ref($cancreate{$item}{$field}) eq 'HASH') { + foreach my $inner (keys(%{$cancreate{$item}{$field}})) { + if (ref($curr_usercreation{'cancreate'}{$item}{$field}) eq 'HASH') { + unless ($curr_usercreation{'cancreate'}{$item}{$field}{$inner} eq $cancreate{$item}{$field}{$inner}) { if (!grep(/^$item$/,@{$changes{'cancreate'}})) { push(@{$changes{'cancreate'}},$item); } @@ -10564,8 +8730,14 @@ sub modify_selfcreation { } } } - } elsif (($item eq 'selfcreateprocessing') || ($item eq 'emailverified') || ($item eq 'emailoptions')) { - if ($cancreate{$item}{$type} ne $curr_usercreation{'cancreate'}{$item}{$type}) { + } elsif ($item eq 'selfcreateprocessing') { + if ($cancreate{$item}{$field} ne $curr_usercreation{'cancreate'}{$item}{$field}) { + if (!grep(/^$item$/,@{$changes{'cancreate'}})) { + push(@{$changes{'cancreate'}},$item); + } + } + } else { + if (!$curr_usercreation{'cancreate'}{$item}{$field}) { if (!grep(/^$item$/,@{$changes{'cancreate'}})) { push(@{$changes{'cancreate'}},$item); } @@ -10580,11 +8752,11 @@ sub modify_selfcreation { push(@{$changes{'cancreate'}},$item); } } - } - } elsif (($item eq 'selfcreateprocessing') || ($item eq 'emailverified') || ($item eq 'emailoptions')) { - if (ref($cancreate{$item}) eq 'HASH') { - if (!grep(/^$item$/,@{$changes{'cancreate'}})) { - push(@{$changes{'cancreate'}},$item); + } elsif (ref($cancreate{$item}) eq 'HASH') { + if (!$cancreate{$item}{$curr_usercreation{'cancreate'}{$item}}) { + if (!grep(/^$item$/,@{$changes{'cancreate'}})) { + push(@{$changes{'cancreate'}},$item); + } } } } elsif ($item eq 'emailusername') { @@ -10609,7 +8781,6 @@ sub modify_selfcreation { # $save_usercreate{'cancreate'}{'captcha'} = $savecaptcha{'captcha'}; $save_usercreate{'cancreate'}{'recaptchakeys'} = $savecaptcha{'recaptchakeys'}; - $save_usercreate{'cancreate'}{'recaptchaversion'} = $savecaptcha{'recaptchaversion'}; $save_usercreate{'cancreate'}{'selfcreate'} = $cancreate{'selfcreate'}; if (ref($cancreate{'notify'}) eq 'HASH') { $save_usercreate{'cancreate'}{'notify'} = $cancreate{'notify'}; @@ -10617,15 +8788,6 @@ sub modify_selfcreation { if (ref($cancreate{'selfcreateprocessing'}) eq 'HASH') { $save_usercreate{'cancreate'}{'selfcreateprocessing'} = $cancreate{'selfcreateprocessing'}; } - if (ref($cancreate{'emailverified'}) eq 'HASH') { - $save_usercreate{'cancreate'}{'emailverified'} = $cancreate{'emailverified'}; - } - if (ref($cancreate{'emailoptions'}) eq 'HASH') { - $save_usercreate{'cancreate'}{'emailoptions'} = $cancreate{'emailoptions'}; - } - if (ref($cancreate{'emaildomain'}) eq 'HASH') { - $save_usercreate{'cancreate'}{'emaildomain'} = $cancreate{'emaildomain'}; - } if (ref($cancreate{'statustocreate'}) eq 'ARRAY') { $save_usercreate{'cancreate'}{'statustocreate'} = $cancreate{'statustocreate'}; } @@ -10633,18 +8795,16 @@ sub modify_selfcreation { $save_usercreate{'cancreate'}{'shibenv'} = $cancreate{'shibenv'}; } $save_usercreate{'cancreate'}{'emailusername'} = $cancreate{'emailusername'}; - $save_usercreate{'email_rule'} = \%email_rule; + $save_usercreate{'emailrule'} = \@email_rule; my %userconfig_hash = ( usercreation => \%save_usercreate, usermodification => \%save_usermodify, - inststatus => \%save_inststatus, ); - my $putresult = &Apache::lonnet::put_dom('configuration',\%userconfig_hash, $dom); # -# Accumulate details of changes to domain configuration for self-creation of usernames in $resulttext +# Accumulate details of changes to domain cofiguration for self-creation of usernames in $resulttext # if ($putresult eq 'ok') { if (keys(%changes) > 0) { @@ -10652,7 +8812,7 @@ sub modify_selfcreation { if (ref($changes{'cancreate'}) eq 'ARRAY') { my %lt = &selfcreation_types(); foreach my $type (@{$changes{'cancreate'}}) { - my $chgtext = ''; + my $chgtext; if ($type eq 'selfcreate') { if (@{$cancreate{$type}} == 0) { $chgtext .= &mt('Self creation of a new user account is not permitted.'); @@ -10667,25 +8827,18 @@ sub modify_selfcreation { if (grep(/^(login|sso)$/,@{$cancreate{$type}})) { if (ref($cancreate{'statustocreate'}) eq 'ARRAY') { if (@{$cancreate{'statustocreate'}} == 0) { - $chgtext .= '<span class="LC_warning">'. - &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts via log-in or single sign-on."). - '</span><br />'; + $chgtext .= '<br />'. + '<span class="LC_warning">'. + &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts."). + '</span>'; } } } - if (grep(/^email$/,@{$cancreate{$type}})) { - if (!@statuses) { - $chgtext .= '<span class="LC_warning">'. - &mt("However, e-mail verification is currently set to 'unavailable' for all user types (including 'other'), so self-creation of accounts is not possible for non-institutional log-in."). - '</span><br />'; - - } - } } } } elsif ($type eq 'shibenv') { if (keys(%{$cancreate{$type}}) == 0) { - $chgtext .= &mt('Shibboleth-autheticated user does not use environment variables to set user information').'<br />'; + $chgtext .= &mt('Shibboleth-autheticated user does not use environment variables to set user information'); } else { $chgtext .= &mt('Shibboleth-autheticated user information set from environment variables, as follows:'). '<ul>'; @@ -10698,7 +8851,7 @@ sub modify_selfcreation { } } $chgtext .= '</ul>'; - } + } } elsif ($type eq 'statustocreate') { if ((ref($cancreate{'selfcreate'}) eq 'ARRAY') && (ref($cancreate{'statustocreate'}) eq 'ARRAY')) { @@ -10711,7 +8864,7 @@ sub modify_selfcreation { &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts."). '</span>'; } - } elsif (keys(%usertypes) > 0) { + } elsif (ref($usertypes) eq 'HASH') { if (grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) { $chgtext .= &mt('Creation of a new account for an institutional user is restricted to the following institutional affiliation(s):'); } else { @@ -10722,12 +8875,12 @@ sub modify_selfcreation { if ($case eq 'default') { $chgtext .= '<li>'.$othertitle.'</li>'; } else { - $chgtext .= '<li>'.$usertypes{$case}.'</li>'; + $chgtext .= '<li>'.$usertypes->{$case}.'</li>'; } } $chgtext .= '</ul>'; if (!grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) { - $chgtext .= '<span class="LC_warning">'. + $chgtext .= '<br /><span class="LC_warning">'. &mt('However, users authenticated by institutional login/single sign on are not currently permitted to create accounts.'). '</span>'; } @@ -10739,129 +8892,26 @@ sub modify_selfcreation { $chgtext .= &mt('Although institutional affiliations permitted to create accounts were changed, self creation of accounts is not currently permitted for any authentication types.'); } } - $chgtext .= '<br />'; } } elsif ($type eq 'selfcreateprocessing') { my %choices = &Apache::lonlocal::texthash ( automatic => 'Automatic approval', approval => 'Queued for approval', ); - if (@types) { - if (@statuses) { - $chgtext .= &mt('Processing of requests to create account with e-mail verification set as follows:'). - '<ul>'; - foreach my $status (@statuses) { - if ($status eq 'default') { - $chgtext .= '<li>'.$othertitle.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$status}}.'</li>'; - } else { - $chgtext .= '<li>'.$usertypes{$status}.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$status}}.'</li>'; - } - } - $chgtext .= '</ul>'; - } - } else { - $chgtext .= &mt('Processing of requests to create account with e-mail verification set to: "[_1]"', - $choices{$cancreate{'selfcreateprocessing'}{'default'}}); - } - } elsif ($type eq 'emailverified') { - my %options = &Apache::lonlocal::texthash ( - all => 'Same as e-mail', - first => 'Omit @domain', - free => 'Free to choose', - ); - if (@types) { - if (@statuses) { - $chgtext .= &mt('For self-created accounts verified by e-mail address, username is set as follows:'). - '<ul>'; - foreach my $status (@statuses) { - if ($status eq 'default') { - $chgtext .= '<li>'.$othertitle.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; - } else { - $chgtext .= '<li>'.$usertypes{$status}.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; - } - } - $chgtext .= '</ul>'; - } - } else { - $chgtext .= &mt("For self-created accounts verified by e-mail address, user's username is: '[_1]'", - $options{$cancreate{'emailverified'}{'default'}}); - } - } elsif ($type eq 'emailoptions') { - my %options = &Apache::lonlocal::texthash ( - any => 'Any e-mail', - inst => 'Institutional only', - noninst => 'Non-institutional only', - custom => 'Custom restrictions', - ); - if (@types) { - if (@statuses) { - $chgtext .= &mt('For self-created accounts verified by e-mail address, requirements for e-mail address are as follows:'). - '<ul>'; - foreach my $status (@statuses) { - if ($type eq 'default') { - $chgtext .= '<li>'.$othertitle.' -- '.$options{$cancreate{'emailoptions'}{$status}}.'</li>'; - } else { - $chgtext .= '<li>'.$usertypes{$status}.' -- '.$options{$cancreate{'emailoptions'}{$status}}.'</li>'; - } - } - $chgtext .= '</ul>'; - } + if (@statuses > 1) { + $chgtext .= &mt('Processing of requests to create account with e-mail address as username set as follows:'). + '<ul>'; + foreach my $type (@statuses) { + if ($type eq 'default') { + $chgtext .= '<li>'.$othertitle.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$type}}.'</li>'; + } else { + $chgtext .= '<li>'.$usertypes->{$type}.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$type}}.'</li>'; + } + } + $chgtext .= '</ul>'; } else { - if ($cancreate{'emailoptions'}{'default'} eq 'any') { - $chgtext .= &mt('For self-created accounts verified by e-mail address, any e-mail may be used'); - } else { - $chgtext .= &mt('For self-created accounts verified by e-mail address, e-mail restricted to: "[_1]"', - $options{$cancreate{'emailoptions'}{'default'}}); - } - } - } elsif ($type eq 'emaildomain') { - my $output; - if (@statuses) { - foreach my $type (@statuses) { - if (ref($cancreate{'emaildomain'}{$type}) eq 'HASH') { - if ($cancreate{'emailoptions'}{$type} eq 'inst') { - if ($type eq 'default') { - if ((ref($cancreate{'emaildomain'}{$type}) ne 'HASH') || - ($cancreate{'emaildomain'}{$type}{'inst'} eq '')) { - $output = '<li>'.$othertitle.' -- '.&mt('No restriction on e-mail domain').'</li>'; - } else { - $output = '<li>'.$othertitle.' -- '.&mt("User's e-mail address needs to end: [_1]", - $cancreate{'emaildomain'}{$type}{'inst'}).'</li>'; - } - } else { - if ((ref($cancreate{'emaildomain'}{$type}) ne 'HASH') || - ($cancreate{'emaildomain'}{$type}{'inst'} eq '')) { - $output = '<li>'.$usertypes{$type}.' -- '.&mt('No restriction on e-mail domain').'</li>'; - } else { - $output = '<li>'.$usertypes{$type}.' -- '.&mt("User's e-mail address needs to end: [_1]", - $cancreate{'emaildomain'}{$type}{'inst'}).'</li>'; - } - } - } elsif ($cancreate{'emailoptions'}{$type} eq 'noninst') { - if ($type eq 'default') { - if ((ref($cancreate{'emaildomain'}{$type}) ne 'HASH') || - ($cancreate{'emaildomain'}{$type}{'noninst'} eq '')) { - $output = '<li>'.$othertitle.' -- '.&mt('No restriction on e-mail domain').'</li>'; - } else { - $output = '<li>'.$othertitle.' -- '.&mt("User's e-mail address must not end: [_1]", - $cancreate{'emaildomain'}{$type}{'noninst'}).'</li>'; - } - } else { - if ((ref($cancreate{'emaildomain'}{$type}) ne 'HASH') || - ($cancreate{'emaildomain'}{$type}{'noninst'} eq '')) { - $output = '<li>'.$usertypes{$type}.' -- '.&mt('No restriction on e-mail domain').'</li>'; - } else { - $output = '<li>'.$usertypes{$type}.' -- '.&mt("User's e-mail address must not end: [_1]", - $cancreate{'emaildomain'}{$type}{'noninst'}).'</li>'; - } - } - } - } - } - } - if ($output ne '') { - $chgtext .= &mt('For self-created accounts verified by e-mail address:'). - '<ul>'.$output.'</ul>'; + $chgtext .= &mt('Processing of requests to create account with e-mail address as username set to: "[_1]"', + $choices{$cancreate{'selfcreateprocessing'}{'default'}}); } } elsif ($type eq 'captcha') { if ($savecaptcha{$type} eq 'notused') { @@ -10892,17 +8942,13 @@ sub modify_selfcreation { $chgtext .= '<li>'.&mt('Private key set to [_1]',$pubkey).'</li>'; } $chgtext .= '</ul>'; - } elsif ($type eq 'recaptchaversion') { - if ($savecaptcha{'captcha'} eq 'recaptcha') { - $chgtext .= &mt('ReCAPTCHA set to version [_1]',$savecaptcha{$type}); - } } elsif ($type eq 'emailusername') { if (ref($cancreate{'emailusername'}) eq 'HASH') { - if (@statuses) { - foreach my $type (@statuses) { + if (ref($types) eq 'ARRAY') { + foreach my $type (@{$types}) { if (ref($cancreate{'emailusername'}{$type}) eq 'HASH') { if (keys(%{$cancreate{'emailusername'}{$type}}) > 0) { - $chgtext .= &mt('When self-creating account with e-mail verification, the following information will be provided by [_1]:',"'$usertypes{$type}'"). + $chgtext .= &mt('When self-creating account with e-mail as username, the following information will be provided by [_1]:',"'$usertypes->{$type}'"). '<ul>'; foreach my $field (@{$infofields}) { if ($cancreate{'emailusername'}{$type}{$field}) { @@ -10911,86 +8957,48 @@ sub modify_selfcreation { } $chgtext .= '</ul>'; } else { - $chgtext .= &mt('When self creating account with e-mail verification, no information besides e-mail address will be provided by [_1].',"'$usertypes{$type}'").'<br />'; + $chgtext .= &mt('When self creating account with e-mail as username, no information besides e-mail address will be provided by [_1].',"'$usertypes->{$type}'").'<br />'; } } else { - $chgtext .= &mt('When self creating account with e-mail verification, no information besides e-mail address will be provided by [_1].',"'$usertypes{$type}'").'<br />'; + $chgtext .= &mt('When self creating account with e-mail as username, no information besides e-mail address will be provided by [_1].',"'$usertypes->{$type}'").'<br />'; } } } } } elsif ($type eq 'notify') { - my $numapprove = 0; + $chgtext = &mt('No Domain Coordinators will receive notification of username requests requiring approval.'); if (ref($changes{'cancreate'}) eq 'ARRAY') { if ((grep(/^notify$/,@{$changes{'cancreate'}})) && (ref($cancreate{'notify'}) eq 'HASH')) { if ($cancreate{'notify'}{'approval'}) { - $chgtext .= &mt('Notification of username requests requiring approval will be sent to: ').$cancreate{'notify'}{'approval'}; - $numapprove ++; + $chgtext = &mt('Notification of username requests requiring approval will be sent to: ').$cancreate{'notify'}{'approval'}; } } } - unless ($numapprove) { - $chgtext .= &mt('No Domain Coordinators will receive notification of username requests requiring approval.'); - } } if ($chgtext) { $resulttext .= '<li>'.$chgtext.'</li>'; } } } - if ((ref($changes{'email_rule'}) eq 'ARRAY') && (@{$changes{'email_rule'}} > 0)) { + if (ref($changes{'email_rule'}) eq 'ARRAY') { my ($emailrules,$emailruleorder) = &Apache::lonnet::inst_userrules($dom,'email'); - foreach my $type (@{$changes{'email_rule'}}) { - if (ref($email_rule{$type}) eq 'ARRAY') { - my $chgtext = '<ul>'; - foreach my $rule (@{$email_rule{$type}}) { - if (ref($emailrules->{$rule}) eq 'HASH') { - $chgtext .= '<li>'.$emailrules->{$rule}{'name'}.'</li>'; - } - } - $chgtext .= '</ul>'; - my $typename; - if (@types) { - if ($type eq 'default') { - $typename = $othertitle; - } else { - $typename = $usertypes{$type}; - } - $chgtext .= &mt('(Affiliation: [_1])',$typename); - } - if (@{$email_rule{$type}} > 0) { - $resulttext .= '<li>'. - &mt('Accounts may not be created by users verified by e-mail, for e-mail addresses of the following types: ', - $usertypes{$type}). - $chgtext. - '</li>'; - } else { - $resulttext .= '<li>'. - &mt('There are now no restrictions on e-mail addresses which may be used for verification when a user requests an account.'). - '</li>'. - &mt('(Affiliation: [_1])',$typename); - } + my $chgtext = '<ul>'; + foreach my $type (@email_rule) { + if (ref($emailrules->{$type}) eq 'HASH') { + $chgtext .= '<li>'.$emailrules->{$type}{'name'}.'</li>'; } } - } - if (ref($changes{'inststatus'}) eq 'ARRAY') { - if (ref($save_inststatus{'inststatusguest'}) eq 'ARRAY') { - if (@{$save_inststatus{'inststatusguest'}} > 0) { - my $chgtext = '<ul>'; - foreach my $type (@{$save_inststatus{'inststatusguest'}}) { - $chgtext .= '<li>'.$usertypes{$type}.'</li>'; - } - $chgtext .= '</ul>'; - $resulttext .= '<li>'. - &mt('A user will self-report one of the following affiliations when requesting an account verified by e-mail: '). - $chgtext. - '</li>'; - } else { - $resulttext .= '<li>'. - &mt('No affiliations available for self-reporting when requesting an account verified by e-mail.'). - '</li>'; - } + $chgtext .= '</ul>'; + if (@email_rule > 0) { + $resulttext .= '<li>'. + &mt('Accounts may not be created by users self-enrolling with e-mail addresses of the following types: '). + $chgtext. + '</li>'; + } else { + $resulttext .= '<li>'. + &mt('There are now no restrictions on e-mail addresses which may be used as a username when self-enrolling.'). + '</li>'; } } if (ref($changes{'selfcreate'}) eq 'ARRAY') { @@ -10998,9 +9006,9 @@ sub modify_selfcreation { my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles(); foreach my $type (@{$changes{'selfcreate'}}) { my $typename = $type; - if (keys(%usertypes) > 0) { - if ($usertypes{$type} ne '') { - $typename = $usertypes{$type}; + if (ref($usertypes) eq 'HASH') { + if ($usertypes->{$type} ne '') { + $typename = $usertypes->{$type}; } } my @modifiable; @@ -11023,12 +9031,6 @@ sub modify_selfcreation { $resulttext .= '</ul></li>'; } $resulttext .= '</ul>'; - my $cachetime = 24*60*60; - $domdefaults{'inststatusguest'} = $save_inststatus{'inststatusguest'}; - &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } } else { $resulttext = &mt('No changes made to self-creation settings'); } @@ -11060,22 +9062,16 @@ sub process_captcha { $changes->{'captcha'} = 1; } } - my ($newpub,$newpriv,$currpub,$currpriv,$newversion,$currversion); + my ($newpub,$newpriv,$currpub,$currpriv); if ($newsettings->{'captcha'} eq 'recaptcha') { $newpub = $env{'form.'.$container.'_recaptchapub'}; $newpriv = $env{'form.'.$container.'_recaptchapriv'}; - $newpub =~ s/[^\w\-]//g; - $newpriv =~ s/[^\w\-]//g; + $newpub =~ s/\W//g; + $newpriv =~ s/\W//g; $newsettings->{'recaptchakeys'} = { public => $newpub, private => $newpriv, }; - $newversion = $env{'form.'.$container.'_recaptchaversion'}; - $newversion =~ s/\D//g; - if ($newversion ne '2') { - $newversion = 1; - } - $newsettings->{'recaptchaversion'} = $newversion; } if (ref($current->{'recaptchakeys'}) eq 'HASH') { $currpub = $current->{'recaptchakeys'}{'public'}; @@ -11087,23 +9083,6 @@ sub process_captcha { } } } - if ($current->{'captcha'} eq 'recaptcha') { - $currversion = $current->{'recaptchaversion'}; - if ($currversion ne '2') { - $currversion = 1; - } - } - if ($currversion ne $newversion) { - if ($container eq 'cancreate') { - if (ref($changes->{'cancreate'}) eq 'ARRAY') { - push(@{$changes->{'cancreate'}},'recaptchaversion'); - } elsif (!defined($changes->{'cancreate'})) { - $changes->{'cancreate'} = ['recaptchaversion']; - } - } else { - $changes->{'recaptchaversion'} = 1; - } - } if (($newpub ne $currpub) || ($newpriv ne $currpriv)) { if ($container eq 'cancreate') { if (ref($changes->{'cancreate'}) eq 'ARRAY') { @@ -11225,8 +9204,7 @@ sub modify_defaults { my ($dom,$lastactref,%domconfig) = @_; my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors); my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def', - 'portal_def','intauth_cost','intauth_check','intauth_switch'); + my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def','portal_def'); my @authtypes = ('internal','krb4','krb5','localauth'); foreach my $item (@items) { $newvalues{$item} = $env{'form.'.$item}; @@ -11268,24 +9246,6 @@ sub modify_defaults { push(@errors,$item); } } - } elsif ($item eq 'intauth_cost') { - if ($newvalues{$item} ne '') { - if ($newvalues{$item} =~ /\D/) { - push(@errors,$item); - } - } - } elsif ($item eq 'intauth_check') { - if ($newvalues{$item} ne '') { - unless ($newvalues{$item} =~ /^(0|1|2)$/) { - push(@errors,$item); - } - } - } elsif ($item eq 'intauth_switch') { - if ($newvalues{$item} ne '') { - unless ($newvalues{$item} =~ /^(0|1|2)$/) { - push(@errors,$item); - } - } } if (grep(/^\Q$item\E$/,@errors)) { $newvalues{$item} = $domdefaults{$item}; @@ -11312,18 +9272,9 @@ sub modify_defaults { } my @todelete = &Apache::loncommon::get_env_multiple('form.inststatus_delete'); my @allpos; + my %guests; my %alltypes; - my @inststatusguest; - if (ref($currinststatus) eq 'HASH') { - if (ref($currinststatus->{'inststatusguest'}) eq 'ARRAY') { - foreach my $type (@{$currinststatus->{'inststatusguest'}}) { - unless (grep(/^\Q$type\E$/,@todelete)) { - push(@inststatusguest,$type); - } - } - } - } - my ($currtitles,$currorder); + my ($currtitles,$currguests,$currorder); if (ref($currinststatus) eq 'HASH') { if (ref($currinststatus->{'inststatusorder'}) eq 'ARRAY') { foreach my $type (@{$currinststatus->{'inststatusorder'}}) { @@ -11338,8 +9289,14 @@ sub modify_defaults { $allpos[$position] = $type; $alltypes{$type} = $env{'form.inststatus_title_'.$type}; $alltypes{$type} =~ s/`//g; + if ($env{'form.inststatus_guest_'.$type}) { + $guests{$type} = 1; + } } } + if (ref($currinststatus->{'inststatusguest'}) eq 'ARRAY') { + $currguests = join(',',@{$currinststatus->{'inststatusguest'}}); + } $currorder = join(',',@{$currinststatus->{'inststatusorder'}}); $currtitles =~ s/,$//; } @@ -11348,6 +9305,9 @@ sub modify_defaults { my $newtype = $env{'form.addinststatus'}; $newtype =~ s/\W//g; unless (exists($alltypes{$newtype})) { + if ($env{'form.addinststatus_guest'}) { + $guests{$newtype} = 1; + } $alltypes{$newtype} = $env{'form.addinststatus_title'}; $alltypes{$newtype} =~ s/`//g; my $position = $env{'form.addinststatus_pos'}; @@ -11357,10 +9317,13 @@ sub modify_defaults { } } } - my @orderedstatus; + my (@orderedstatus,@orderedguests); foreach my $type (@allpos) { unless (($type eq '') || (grep(/^\Q$type\E$/,@orderedstatus))) { push(@orderedstatus,$type); + if ($guests{$type}) { + push(@orderedguests,$type); + } } } foreach my $type (keys(%alltypes)) { @@ -11371,7 +9334,7 @@ sub modify_defaults { $defaults_hash{'inststatus'} = { inststatustypes => \%alltypes, inststatusorder => \@orderedstatus, - inststatusguest => \@inststatusguest, + inststatusguest => \@orderedguests, }; if (ref($defaults_hash{'inststatus'}) eq 'HASH') { foreach my $item ('inststatustypes','inststatusorder','inststatusguest') { @@ -11381,6 +9344,9 @@ sub modify_defaults { if ($currorder ne join(',',@orderedstatus)) { $changes{'inststatus'}{'inststatusorder'} = 1; } + if ($currguests ne join(',',@orderedguests)) { + $changes{'inststatus'}{'inststatusguest'} = 1; + } my $newtitles; foreach my $item (@orderedstatus) { $newtitles .= $alltypes{$item}.','; @@ -11399,15 +9365,26 @@ sub modify_defaults { foreach my $item (sort(keys(%changes))) { if ($item eq 'inststatus') { if (ref($changes{'inststatus'}) eq 'HASH') { - if (@orderedstatus) { + if (($changes{'inststatus'}{'inststatustypes'}) || $changes{'inststatus'}{'inststatusorder'}) { $resulttext .= '<li>'.&mt('Institutional user status types set to:').' '; foreach my $type (@orderedstatus) { $resulttext .= $alltypes{$type}.', '; } $resulttext =~ s/, $//; $resulttext .= '</li>'; - } else { - $resulttext .= '<li>'.&mt('Institutional user status types deleted').'</li>'; + } + if ($changes{'inststatus'}{'inststatusguest'}) { + $resulttext .= '<li>'; + if (@orderedguests) { + $resulttext .= &mt('Types assignable to "non-institutional" usernames set to:').' '; + foreach my $type (@orderedguests) { + $resulttext .= $alltypes{$type}.', '; + } + $resulttext =~ s/, $//; + } else { + $resulttext .= &mt('Types assignable to "non-institutional" usernames set to none.'); + } + $resulttext .= '</li>'; } } } else { @@ -11423,28 +9400,6 @@ sub modify_defaults { localauth => 'loc', ); $value = $authnames{$shortauth{$value}}; - } elsif ($item eq 'intauth_switch') { - my %optiondesc = &Apache::lonlocal::texthash ( - 0 => 'No', - 1 => 'Yes', - 2 => 'Yes, and copy existing passwd file to passwd.bak file', - ); - if ($value =~ /^(0|1|2)$/) { - $value = $optiondesc{$value}; - } else { - $value = &mt('none -- defaults to No'); - } - } elsif ($item eq 'intauth_check') { - my %optiondesc = &Apache::lonlocal::texthash ( - 0 => 'No', - 1 => 'Yes, allow login then update passwd file using default cost (if higher)', - 2 => 'Yes, disallow login if stored cost is less than domain default', - ); - if ($value =~ /^(0|1|2)$/) { - $value = $optiondesc{$value}; - } else { - $value = &mt('none -- defaults to No'); - } } $resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$title->{$item},$value).'</li>'; $mailmsgtext .= "$title->{$item} set to $value\n"; @@ -11809,24 +9764,12 @@ sub modify_coursecategories { } $resulttext .= '</ul></li>'; } - &Apache::lonnet::do_cache_new('cats',$dom,$cathash,3600); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'cats'} = 1; - } } $resulttext .= '</ul>'; if ($changes{'unauth'} || $changes{'auth'}) { - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); - if ($changes{'auth'}) { - $domdefaults{'catauth'} = $domconfig{'coursecategories'}{'auth'}; - } - if ($changes{'unauth'}) { - $domdefaults{'catunauth'} = $domconfig{'coursecategories'}{'unauth'}; - } - my $cachetime = 24*60*60; - &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); + &Apache::loncommon::devalidate_domconfig_cache($dom); if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; + $lastactref->{'domainconfig'} = 1; } } } else { @@ -11964,210 +9907,32 @@ sub modify_serverstatuses { } sub modify_helpsettings { - my ($r,$dom,$confname,$lastactref,%domconfig) = @_; + my ($r,$dom,$confname,%domconfig) = @_; my ($resulttext,$errors,%changes,%helphash); my %defaultchecked = ('submitbugs' => 'on'); my @offon = ('off','on'); my @toggles = ('submitbugs'); - my %current = ('submitbugs' => '', - 'adhoc' => {}, - ); if (ref($domconfig{'helpsettings'}) eq 'HASH') { - %current = %{$domconfig{'helpsettings'}}; - } - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - foreach my $item (@toggles) { - if ($defaultchecked{$item} eq 'on') { - if ($current{$item} eq '') { - if ($env{'form.'.$item} eq '0') { - $changes{$item} = 1; - } - } elsif ($current{$item} ne $env{'form.'.$item}) { - $changes{$item} = 1; - } - } elsif ($defaultchecked{$item} eq 'off') { - if ($current{$item} eq '') { - if ($env{'form.'.$item} eq '1') { - $changes{$item} = 1; - } - } elsif ($current{$item} ne $env{'form.'.$item}) { - $changes{$item} = 1; - } - } - if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) { - $helphash{'helpsettings'}{$item} = $env{'form.'.$item}; - } - } - my $maxnum = $env{'form.helproles_maxnum'}; - my $confname = $dom.'-domainconfig'; - my %existing=&Apache::lonnet::dump('roles',$dom,$confname,'rolesdef_'); - my (@allpos,%newsettings,%changedprivs,$newrole); - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my @accesstypes = ('all','dh','da','none','status','inc','exc'); - my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']); - my %lt = &Apache::lonlocal::texthash( - s => 'system', - d => 'domain', - order => 'Display order', - access => 'Role usage', - all => 'All with domain helpdesk or helpdesk assistant role', - dh => 'All with domain helpdesk role', - da => 'All with domain helpdesk assistant role', - none => 'None', - status => 'Determined based on institutional status', - inc => 'Include all, but exclude specific personnel', - exc => 'Exclude all, but include specific personnel', - ); - for (my $num=0; $num<=$maxnum; $num++) { - my ($prefix,$identifier,$rolename,%curr); - if ($num == $maxnum) { - next unless ($env{'form.newcusthelp'} == $maxnum); - $identifier = 'custhelp'.$num; - $prefix = 'helproles_'.$num; - $rolename = $env{'form.custhelpname'.$num}; - $rolename=~s/[^A-Za-z0-9]//gs; - next if ($rolename eq ''); - next if (exists($existing{'rolesdef_'.$rolename})); - my %newprivs = &Apache::lonuserutils::custom_role_update($rolename,$identifier); - my $result = &Apache::lonnet::definerole($rolename,$newprivs{'s'},$newprivs{'d'}, - $newprivs{'c'},$confname,$dom); - if ($result ne 'ok') { - $errors .= '<li><span class="LC_error">'. - &mt('An error occurred storing the new custom role: [_1]', - $result).'</span></li>'; - next; - } else { - $changedprivs{$rolename} = \%newprivs; - $newrole = $rolename; - } - } else { - $prefix = 'helproles_'.$num; - $rolename = $env{'form.'.$prefix}; - next if ($rolename eq ''); - next unless (exists($existing{'rolesdef_'.$rolename})); - $identifier = 'custhelp'.$num; - my %newprivs = &Apache::lonuserutils::custom_role_update($rolename,$identifier); - my %currprivs; - ($currprivs{'s'},$currprivs{'d'},$currprivs{'c'}) = - split(/\_/,$existing{'rolesdef_'.$rolename}); - foreach my $level ('c','d','s') { - if ($newprivs{$level} ne $currprivs{$level}) { - my $result = &Apache::lonnet::definerole($rolename,$newprivs{'s'},$newprivs{'d'}, - $newprivs{'c'},$confname,$dom); - if ($result ne 'ok') { - $errors .= '<li><span class="LC_error">'. - &mt('An error occurred storing privileges for existing role [_1]: [_2]', - $rolename,$result).'</span></li>'; - } else { - $changedprivs{$rolename} = \%newprivs; - } - last; - } - } - if (ref($current{'adhoc'}) eq 'HASH') { - if (ref($current{'adhoc'}{$rolename}) eq 'HASH') { - %curr = %{$current{'adhoc'}{$rolename}}; - } - } - } - my $newpos = $env{'form.'.$prefix.'_pos'}; - $newpos =~ s/\D+//g; - $allpos[$newpos] = $rolename; - my $newdesc = $env{'form.'.$prefix.'_desc'}; - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'desc'} = $newdesc; - if ($curr{'desc'}) { - if ($curr{'desc'} ne $newdesc) { - $changes{'customrole'}{$rolename}{'desc'} = 1; - $newsettings{$rolename}{'desc'} = $newdesc; - } - } elsif ($newdesc ne '') { - $changes{'customrole'}{$rolename}{'desc'} = 1; - $newsettings{$rolename}{'desc'} = $newdesc; - } - my $access = $env{'form.'.$prefix.'_access'}; - if (grep(/^\Q$access\E$/,@accesstypes)) { - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = $access; - if ($access eq 'status') { - my @statuses = &Apache::loncommon::get_env_multiple('form.'.$prefix.'_status'); - if (scalar(@statuses) == 0) { - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = 'none'; - } else { - my (@shownstatus,$numtypes); - $helphash{'helpsettings'}{'adhoc'}{$rolename}{$access} = []; - if (ref($types) eq 'ARRAY') { - $numtypes = scalar(@{$types}); - foreach my $type (sort(@statuses)) { - if ($type eq 'default') { - push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$type); - } elsif (grep(/^\Q$type\E$/,@{$types})) { - push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$type); - push(@shownstatus,$usertypes->{$type}); - } - } - } - if (grep(/^default$/,@statuses)) { - push(@shownstatus,$othertitle); - } - if (scalar(@shownstatus) == 1+$numtypes) { - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = 'all'; - delete($helphash{'helpsettings'}{'adhoc'}{$rolename}{'status'}); - } else { - $newsettings{$rolename}{'status'} = join(' '.&mt('or').' ',@shownstatus); - if (ref($curr{'status'}) eq 'ARRAY') { - my @diffs = &Apache::loncommon::compare_arrays($helphash{'helpsettings'}{'adhoc'}{$rolename}{$access},$curr{$access}); - if (@diffs) { - $changes{'customrole'}{$rolename}{$access} = 1; - } - } elsif (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) { - $changes{'customrole'}{$rolename}{$access} = 1; - } - } - } - } elsif (($access eq 'inc') || ($access eq 'exc')) { - my @personnel = &Apache::loncommon::get_env_multiple('form.'.$prefix.'_staff_'.$access); - my @newspecstaff; - $helphash{'helpsettings'}{'adhoc'}{$rolename}{$access} = []; - foreach my $person (sort(@personnel)) { - if ($domhelpdesk{$person}) { - push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$person); + foreach my $item (@toggles) { + if ($defaultchecked{$item} eq 'on') { + if ($domconfig{'helpsettings'}{$item} eq '') { + if ($env{'form.'.$item} eq '0') { + $changes{$item} = 1; } + } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) { + $changes{$item} = 1; } - if (ref($curr{$access}) eq 'ARRAY') { - my @diffs = &Apache::loncommon::compare_arrays($helphash{'helpsettings'}{'adhoc'}{$rolename}{$access},$curr{$access}); - if (@diffs) { - $changes{'customrole'}{$rolename}{$access} = 1; + } elsif ($defaultchecked{$item} eq 'off') { + if ($domconfig{'helpsettings'}{$item} eq '') { + if ($env{'form.'.$item} eq '1') { + $changes{$item} = 1; } - } elsif (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) { - $changes{'customrole'}{$rolename}{$access} = 1; - } - foreach my $person (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) { - my ($uname,$udom) = split(/:/,$person); - push(@newspecstaff,&Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom,'lastname'),$uname,$udom)); + } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) { + $changes{$item} = 1; } - $newsettings{$rolename}{$access} = join(', ',sort(@newspecstaff)); } - } else { - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'}= 'all'; - } - unless ($curr{'access'} eq $access) { - $changes{'customrole'}{$rolename}{'access'} = 1; - $newsettings{$rolename}{'access'} = $lt{$helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'}}; - } - } - if (@allpos > 0) { - my $idx = 0; - foreach my $rolename (@allpos) { - if ($rolename ne '') { - $helphash{'helpsettings'}{'adhoc'}{$rolename}{'order'} = $idx; - if (ref($current{'adhoc'}) eq 'HASH') { - if (ref($current{'adhoc'}{$rolename}) eq 'HASH') { - if ($current{'adhoc'}{$rolename}{'order'} ne $idx) { - $changes{'customrole'}{$rolename}{'order'} = 1; - $newsettings{$rolename}{'order'} = $idx+1; - } - } - } - $idx ++; + if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) { + $helphash{'helpsettings'}{$item} = $env{'form.'.$item}; } } } @@ -12175,115 +9940,25 @@ sub modify_helpsettings { if (keys(%changes) > 0) { $putresult = &Apache::lonnet::put_dom('configuration',\%helphash,$dom); if ($putresult eq 'ok') { - if (ref($helphash{'helpsettings'}) eq 'HASH') { - $domdefaults{'submitbugs'} = $helphash{'helpsettings'}{'submitbugs'}; - if (ref($helphash{'helpsettings'}{'adhoc'}) eq 'HASH') { - $domdefaults{'adhocroles'} = $helphash{'helpsettings'}{'adhoc'}; - } - } - my $cachetime = 24*60*60; - &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } - } else { - $errors .= '<li><span class="LC_error">'. - &mt('An error occurred storing the settings: [_1]', - $putresult).'</span></li>'; - } - } - if ((keys(%changes) && ($putresult eq 'ok')) || (keys(%changedprivs))) { - $resulttext = &mt('Changes made:').'<ul>'; - my (%shownprivs,@levelorder); - @levelorder = ('c','d','s'); - if ((keys(%changes)) && ($putresult eq 'ok')) { + $resulttext = &mt('Changes made:').'<ul>'; foreach my $item (sort(keys(%changes))) { if ($item eq 'submitbugs') { $resulttext .= '<li>'.&mt('Display link to: [_1] set to "'.$offon[$env{'form.'.$item}].'".', &Apache::loncommon::modal_link('http://bugs.loncapa.org', &mt('LON-CAPA bug tracker'),600,500)).'</li>'; - } elsif ($item eq 'customrole') { - if (ref($changes{'customrole'}) eq 'HASH') { - my @keyorder = ('order','desc','access','status','exc','inc'); - my %keytext = &Apache::lonlocal::texthash( - order => 'Order', - desc => 'Role description', - access => 'Role usage', - status => 'Allowed institutional types', - exc => 'Allowed personnel', - inc => 'Disallowed personnel', - ); - foreach my $role (sort(keys(%{$changes{'customrole'}}))) { - if (ref($changes{'customrole'}{$role}) eq 'HASH') { - if ($role eq $newrole) { - $resulttext .= '<li>'.&mt('New custom role added: [_1]', - $role).'<ul>'; - } else { - $resulttext .= '<li>'.&mt('Existing custom role modified: [_1]', - $role).'<ul>'; - } - foreach my $key (@keyorder) { - if ($changes{'customrole'}{$role}{$key}) { - $resulttext .= '<li>'.&mt("[_1] set to: [_2]", - $keytext{$key},$newsettings{$role}{$key}). - '</li>'; - } - } - if (ref($changedprivs{$role}) eq 'HASH') { - $shownprivs{$role} = 1; - $resulttext .= '<li>'.&mt('Privileges set to :').'<ul>'; - foreach my $level (@levelorder) { - foreach my $item (split(/\:/,$changedprivs{$role}{$level})) { - next if ($item eq ''); - my ($priv) = split(/\&/,$item,2); - if (&Apache::lonnet::plaintext($priv)) { - $resulttext .= '<li>'.&Apache::lonnet::plaintext($priv); - unless ($level eq 'c') { - $resulttext .= ' ('.$lt{$level}.')'; - } - $resulttext .= '</li>'; - } - } - } - $resulttext .= '</ul>'; - } - $resulttext .= '</ul></li>'; - } - } - } - } - } - } - if (keys(%changedprivs)) { - foreach my $role (sort(keys(%changedprivs))) { - unless ($shownprivs{$role}) { - $resulttext .= '<li>'.&mt('Existing custom role modified: [_1]', - $role).'<ul>'. - '<li>'.&mt('Privileges set to :').'<ul>'; - foreach my $level (@levelorder) { - foreach my $item (split(/\:/,$changedprivs{$role}{$level})) { - next if ($item eq ''); - my ($priv) = split(/\&/,$item,2); - if (&Apache::lonnet::plaintext($priv)) { - $resulttext .= '<li>'.&Apache::lonnet::plaintext($priv); - unless ($level eq 'c') { - $resulttext .= ' ('.$lt{$level}.')'; - } - $resulttext .= '</li>'; - } - } - } - $resulttext .= '</ul></li></ul></li>'; } } + $resulttext .= '</ul>'; + } else { + $resulttext = &mt('No changes made to help settings'); + $errors .= '<li><span class="LC_error">'. + &mt('An error occurred storing the settings: [_1]', + $putresult).'</span></li>'; } - $resulttext .= '</ul>'; - } else { - $resulttext = &mt('No changes made to help settings'); } if ($errors) { $resulttext .= '<br />'.&mt('The following errors occurred: ').'<ul>'. - $errors.'</ul>'; + $errors.'</ul>'; } return $resulttext; } @@ -12291,26 +9966,16 @@ sub modify_helpsettings { sub modify_coursedefaults { my ($dom,$lastactref,%domconfig) = @_; my ($resulttext,$errors,%changes,%defaultshash); - my %defaultchecked = ( - 'uselcmath' => 'on', - 'usejsme' => 'on' - ); - my @toggles = ('uselcmath','usejsme'); + my %defaultchecked = ('canuse_pdfforms' => 'off'); + my @toggles = ('canuse_pdfforms'); my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial', - 'uploadquota_community','uploadquota_textbook','mysqltables_official', - 'mysqltables_unofficial','mysqltables_community','mysqltables_textbook'); + 'uploadquota_community','uploadquota_textbook'); my @types = ('official','unofficial','community','textbook'); my %staticdefaults = ( anonsurvey_threshold => 10, uploadquota => 500, - postsubmit => 60, - mysqltables => 172800, ); - my %texoptions = ( - MathJax => 'MathJax', - mimetex => &mt('Convert to Images'), - tth => &mt('TeX to HTML'), - ); + $defaultshash{'coursedefaults'} = {}; if (ref($domconfig{'coursedefaults'}) ne 'HASH') { @@ -12349,152 +10014,47 @@ sub modify_coursedefaults { } $defaultshash{'coursedefaults'}{$item} = $newdef; } else { - my ($setting,$type) = ($item =~ /^(uploadquota|mysqltables)_(\w+)$/); - if (ref($domconfig{'coursedefaults'}{$setting}) eq 'HASH') { - $currdef = $domconfig{'coursedefaults'}{$setting}{$type}; + my ($type) = ($item =~ /^\Quploadquota_\E(\w+)$/); + if (ref($domconfig{'coursedefaults'}{'uploadquota'}) eq 'HASH') { + $currdef = $domconfig{'coursedefaults'}{'uploadquota'}{$type}; } $newdef =~ s/[^\w.\-]//g; - $defaultshash{'coursedefaults'}{$setting}{$type} = $newdef; + $defaultshash{'coursedefaults'}{'uploadquota'}{$type} = $newdef; } if ($currdef ne $newdef) { + my $staticdef; if ($item eq 'anonsurvey_threshold') { unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) { $changes{$item} = 1; } - } elsif ($item =~ /^(uploadquota|mysqltables)_/) { - my $setting = $1; - unless (($currdef eq '') && ($newdef == $staticdefaults{$setting})) { - $changes{$setting} = 1; + } else { + unless (($currdef eq '') && ($newdef == $staticdefaults{'uploadquota'})) { + $changes{'uploadquota'} = 1; } } } } - my $texengine; - if ($env{'form.texengine'} =~ /^(MathJax|mimetex|tth)$/) { - $texengine = $env{'form.texengine'}; - my $currdef = $domconfig{'coursedefaults'}{'texengine'}; - if ($currdef eq '') { - unless ($texengine eq $Apache::lonnet::deftex) { - $changes{'texengine'} = 1; - } - } elsif ($currdef ne $texengine) { - $changes{'texengine'} = 1; - } - } - if ($texengine ne '') { - $defaultshash{'coursedefaults'}{'texengine'} = $texengine; - } - my $currclone = $domconfig{'coursedefaults'}{'canclone'}; - my @currclonecode; - if (ref($currclone) eq 'HASH') { - if (ref($currclone->{'instcode'}) eq 'ARRAY') { - @currclonecode = @{$currclone->{'instcode'}}; - } - } - my $newclone; - if ($env{'form.canclone'} =~ /^(none|domain|instcode)$/) { - $newclone = $env{'form.canclone'}; - } - if ($newclone eq 'instcode') { - my @newcodes = &Apache::loncommon::get_env_multiple('form.clonecode'); - my (%codedefaults,@code_order,@clonecode); - &Apache::lonnet::auto_instcode_defaults($dom,\%codedefaults, - \@code_order); - foreach my $item (@code_order) { - if (grep(/^\Q$item\E$/,@newcodes)) { - push(@clonecode,$item); - } - } - if (@clonecode) { - $defaultshash{'coursedefaults'}{'canclone'} = { $newclone => \@clonecode }; - my @diffs = &Apache::loncommon::compare_arrays(\@currclonecode,\@clonecode); - if (@diffs) { - $changes{'canclone'} = 1; - } - } else { - $newclone eq ''; - } - } elsif ($newclone ne '') { - $defaultshash{'coursedefaults'}{'canclone'} = $newclone; - } - if ($newclone ne $currclone) { - $changes{'canclone'} = 1; - } - my %credits; - foreach my $type (@types) { - unless ($type eq 'community') { - $credits{$type} = $env{'form.'.$type.'_credits'}; - $credits{$type} =~ s/[^\d.]+//g; - } - } - if ((ref($domconfig{'coursedefaults'}{'coursecredits'}) ne 'HASH') && - ($env{'form.coursecredits'} eq '1')) { - $changes{'coursecredits'} = 1; - foreach my $type (keys(%credits)) { - $defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type}; - } + + my $officialcreds = $env{'form.official_credits'}; + $officialcreds =~ s/[^\d.]+//g; + my $unofficialcreds = $env{'form.unofficial_credits'}; + $unofficialcreds =~ s/[^\d.]+//g; + my $textbookcreds = $env{'form.textbook_credits'}; + $textbookcreds =~ s/[^\d.]+//g; + if (ref($domconfig{'coursedefaults'}{'coursecredits'} ne 'HASH') && + ($env{'form.coursecredits'} eq '1')) { + $changes{'coursecredits'} = 1; } else { - if ($env{'form.coursecredits'} eq '1') { - foreach my $type (@types) { - unless ($type eq 'community') { - if ($domconfig{'coursedefaults'}{'coursecredits'}{$type} ne $credits{$type}) { - $changes{'coursecredits'} = 1; - } - $defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type}; - } - } - } elsif (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH') { - foreach my $type (@types) { - unless ($type eq 'community') { - if ($domconfig{'coursedefaults'}{'coursecredits'}{$type}) { - $changes{'coursecredits'} = 1; - last; - } - } - } + if (($domconfig{'coursedefaults'}{'coursecredits'}{'official'} ne $officialcreds) || + ($domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'} ne $unofficialcreds) || + ($domconfig{'coursedefaults'}{'coursecredits'}{'textbook'} ne $textbookcreds)) { + $changes{'coursecredits'} = 1; } } - if ($env{'form.postsubmit'} eq '1') { - $defaultshash{'coursedefaults'}{'postsubmit'}{'client'} = 'on'; - my %currtimeout; - if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') { - if ($domconfig{'coursedefaults'}{'postsubmit'}{'client'} eq 'off') { - $changes{'postsubmit'} = 1; - } - if (ref($domconfig{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') { - %currtimeout = %{$domconfig{'coursedefaults'}{'postsubmit'}{'timeout'}}; - } - } else { - $changes{'postsubmit'} = 1; - } - foreach my $type (@types) { - my $timeout = $env{'form.'.$type.'_timeout'}; - $timeout =~ s/\D//g; - if ($timeout == $staticdefaults{'postsubmit'}) { - $timeout = ''; - } elsif (($timeout eq '') || ($timeout =~ /^0+$/)) { - $timeout = '0'; - } - unless ($timeout eq '') { - $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type} = $timeout; - } - if (exists($currtimeout{$type})) { - if ($timeout ne $currtimeout{$type}) { - $changes{'postsubmit'} = 1; - } - } elsif ($timeout ne '') { - $changes{'postsubmit'} = 1; - } - } - } else { - $defaultshash{'coursedefaults'}{'postsubmit'}{'client'} = 'off'; - if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') { - if ($domconfig{'coursedefaults'}{'postsubmit'}{'client'} eq 'on') { - $changes{'postsubmit'} = 1; - } - } else { - $changes{'postsubmit'} = 1; - } + $defaultshash{'coursedefaults'}{'coursecredits'} = { + official => $officialcreds, + unofficial => $unofficialcreds, + textbook => $textbookcreds, } } my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, @@ -12502,31 +10062,19 @@ sub modify_coursedefaults { if ($putresult eq 'ok') { if (keys(%changes) > 0) { my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - if (($changes{'uploadquota'}) || ($changes{'postsubmit'}) || - ($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) || - ($changes{'canclone'}) || ($changes{'mysqltables'}) || ($changes{'texengine'})) { - foreach my $item ('uselcmath','usejsme','texengine') { - if ($changes{$item}) { - $domdefaults{$item}=$defaultshash{'coursedefaults'}{$item}; - } + if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'}) || + ($changes{'uploadquota'})) { + if ($changes{'canuse_pdfforms'}) { + $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; } if ($changes{'coursecredits'}) { if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { - foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'coursecredits'}})) { - $domdefaults{$type.'credits'} = - $defaultshash{'coursedefaults'}{'coursecredits'}{$type}; - } - } - } - if ($changes{'postsubmit'}) { - if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') { - $domdefaults{'postsubmit'} = $defaultshash{'coursedefaults'}{'postsubmit'}{'client'}; - if (ref($defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') { - foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}})) { - $domdefaults{$type.'postsubtimeout'} = - $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type}; - } - } + $domdefaults{'officialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'official'}; + $domdefaults{'unofficialcredits'} = + $defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}; + $domdefaults{'textbookcredits'} = + $domdefaults{'coursedefaults'}{'coursecredits'}{'textbook'}; } } if ($changes{'uploadquota'}) { @@ -12536,18 +10084,6 @@ sub modify_coursedefaults { } } } - if ($changes{'canclone'}) { - if (ref($defaultshash{'coursedefaults'}{'canclone'}) eq 'HASH') { - if (ref($defaultshash{'coursedefaults'}{'canclone'}{'instcode'}) eq 'ARRAY') { - my @clonecodes = @{$defaultshash{'coursedefaults'}{'canclone'}{'instcode'}}; - if (@clonecodes) { - $domdefaults{'canclone'} = join('+',@clonecodes); - } - } - } else { - $domdefaults{'canclone'}=$defaultshash{'coursedefaults'}{'canclone'}; - } - } my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); if (ref($lastactref) eq 'HASH') { @@ -12556,22 +10092,11 @@ sub modify_coursedefaults { } $resulttext = &mt('Changes made:').'<ul>'; foreach my $item (sort(keys(%changes))) { - if ($item eq 'uselcmath') { + if ($item eq 'canuse_pdfforms') { if ($env{'form.'.$item} eq '1') { - $resulttext .= '<li>'.&mt('Math preview uses LON-CAPA previewer (javascript), if supported by browser.').'</li>'; + $resulttext .= '<li>'.&mt("Course/Community users can create/upload PDF forms set to 'on'").'</li>'; } else { - $resulttext .= '<li>'.&mt('Math preview uses DragMath (Java), if supported by client OS.').'</li>'; - } - } elsif ($item eq 'usejsme') { - if ($env{'form.'.$item} eq '1') { - $resulttext .= '<li>'.&mt('Molecule editor uses JSME (HTML5), if supported by browser.').'</li>'; - } else { - $resulttext .= '<li>'.&mt('Molecule editor uses JME (Java), if supported by client OS.').'</li>'; - } - } elsif ($item eq 'texengine') { - if ($defaultshash{'coursedefaults'}{'texengine'} ne '') { - $resulttext .= '<li>'.&mt('Default method to display mathematics set to: "[_1]"', - $texoptions{$defaultshash{'coursedefaults'}{'texengine'}}).'</li>'; + $resulttext .= '<li>'.&mt('Course/Community users can create/upload PDF forms set to "off"').'</li>'; } } elsif ($item eq 'anonsurvey_threshold') { $resulttext .= '<li>'.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'</li>'; @@ -12588,54 +10113,6 @@ sub modify_coursedefaults { } else { $resulttext .= '<li>'.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).'</li>'; } - } elsif ($item eq 'mysqltables') { - if (ref($defaultshash{'coursedefaults'}{'mysqltables'}) eq 'HASH') { - $resulttext .= '<li>'.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver').'<ul>'. - '<li>'.&mt('Official courses: [_1] s','<b>'.$defaultshash{'coursedefaults'}{'mysqltables'}{'official'}.'</b>').'</li>'. - '<li>'.&mt('Unofficial courses: [_1] s','<b>'.$defaultshash{'coursedefaults'}{'mysqltables'}{'unofficial'}.'</b>').'</li>'. - '<li>'.&mt('Textbook courses: [_1] s','<b>'.$defaultshash{'coursedefaults'}{'mysqltables'}{'textbook'}.'</b>').'</li>'. - '<li>'.&mt('Communities: [_1] s','<b>'.$defaultshash{'coursedefaults'}{'mysqltables'}{'community'}.'</b>').'</li>'. - '</ul>'. - '</li>'; - } else { - $resulttext .= '<li>'.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver remains default: [_1] s',$staticdefaults{'uploadquota'}).'</li>'; - } - } elsif ($item eq 'postsubmit') { - if ($domdefaults{'postsubmit'} eq 'off') { - $resulttext .= '<li>'.&mt('Submit button(s) remain enabled on page after student makes submission.'); - } else { - $resulttext .= '<li>'.&mt('Submit button(s) disabled on page after student makes submission').'; '; - if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') { - $resulttext .= &mt('durations:').'<ul>'; - foreach my $type (@types) { - $resulttext .= '<li>'; - my $timeout; - if (ref($defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') { - $timeout = $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type}; - } - my $display; - if ($timeout eq '0') { - $display = &mt('unlimited'); - } elsif ($timeout eq '') { - $display = &mt('[quant,_1,second] (default)',$staticdefaults{'postsubmit'}); - } else { - $display = &mt('[quant,_1,second]',$timeout); - } - if ($type eq 'community') { - $resulttext .= &mt('Communities'); - } elsif ($type eq 'official') { - $resulttext .= &mt('Official courses'); - } elsif ($type eq 'unofficial') { - $resulttext .= &mt('Unofficial courses'); - } elsif ($type eq 'textbook') { - $resulttext .= &mt('Textbook courses'); - } - $resulttext .= ' -- '.$display.'</li>'; - } - $resulttext .= '</ul>'; - } - $resulttext .= '</li>'; - } } elsif ($item eq 'coursecredits') { if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { if (($domdefaults{'officialcredits'} eq '') && @@ -12653,17 +10130,6 @@ sub modify_coursedefaults { } else { $resulttext .= '<li>'.&mt('Student credits not in use for courses in this domain').'</li>'; } - } elsif ($item eq 'canclone') { - if (ref($defaultshash{'coursedefaults'}{'canclone'}) eq 'HASH') { - if (ref($defaultshash{'coursedefaults'}{'canclone'}{'instcode'}) eq 'ARRAY') { - my $clonecodes = join(' '.&mt('and').' ',@{$defaultshash{'coursedefaults'}{'canclone'}{'instcode'}}); - $resulttext .= '<li>'.&mt('By default, official courses can be cloned from existing courses with the same: [_1]','<b>'.$clonecodes.'</b>').'</li>'; - } - } elsif ($defaultshash{'coursedefaults'}{'canclone'} eq 'domain') { - $resulttext .= '<li>'.&mt('By default, a course requester can clone any course from his/her domain.').'</li>'; - } else { - $resulttext .= '<li>'.&mt('By default, only course owner and coordinators may clone a course.').'</li>'; - } } } $resulttext .= '</ul>'; @@ -12897,12 +10363,12 @@ sub modify_selfenrollment { $resulttext .= '</ul></li>'; } } - } - if ((exists($changes{'admin'})) || (exists($changes{'default'}))) { - my $cachetime = 24*60*60; - &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; + if ((exists($changes{'admin'})) || (exists($changes{'default'}))) { + my $cachetime = 24*60*60; + &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); + if (ref($lastactref) eq 'HASH') { + $lastactref->{'domdefaults'} = 1; + } } } $resulttext .= '</ul>'; @@ -13082,23 +10548,7 @@ sub modify_usersessions { $changes{'spares'}{$lonhost} = \%spareschg; } } - $defaultshash{'usersessions'}{'offloadnow'} = {}; - my @offloadnow = &Apache::loncommon::get_env_multiple('form.offloadnow'); - my @okoffload; - if (@offloadnow) { - foreach my $server (@offloadnow) { - if (&Apache::lonnet::hostname($server) ne '') { - unless (grep(/^\Q$server\E$/,@okoffload)) { - push(@okoffload,$server); - } - } - } - if (@okoffload) { - foreach my $lonhost (@okoffload) { - $defaultshash{'usersessions'}{'offloadnow'}{$lonhost} = 1; - } - } - } + if (ref($domconfig{'usersessions'}) eq 'HASH') { if (ref($domconfig{'usersessions'}{'spares'}) eq 'HASH') { if (ref($changes{'spares'}) eq 'HASH') { @@ -13109,27 +10559,8 @@ sub modify_usersessions { } else { $savespares = 1; } - if (ref($domconfig{'usersessions'}{'offloadnow'}) eq 'HASH') { - foreach my $lonhost (keys(%{$domconfig{'usersessions'}{'offloadnow'}})) { - unless ($defaultshash{'usersessions'}{'offloadnow'}{$lonhost}) { - $changes{'offloadnow'} = 1; - last; - } - } - unless ($changes{'offloadnow'}) { - foreach my $lonhost (keys(%{$defaultshash{'usersessions'}{'offloadnow'}})) { - unless ($domconfig{'usersessions'}{'offloadnow'}{$lonhost}) { - $changes{'offloadnow'} = 1; - last; - } - } - } - } elsif (@okoffload) { - $changes{'offloadnow'} = 1; - } - } elsif (@okoffload) { - $changes{'offloadnow'} = 1; } + my $nochgmsg = &mt('No changes made to settings for user session hosting/offloading.'); if ((keys(%changes) > 0) || ($savespares)) { my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, @@ -13142,16 +10573,11 @@ sub modify_usersessions { if (ref($defaultshash{'usersessions'}{'hosted'}) eq 'HASH') { $domdefaults{'hostedsessions'} = $defaultshash{'usersessions'}{'hosted'}; } - if (ref($defaultshash{'usersessions'}{'offloadnow'}) eq 'HASH') { - $domdefaults{'offloadnow'} = $defaultshash{'usersessions'}{'offloadnow'}; - } } my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - &Apache::lonnet::do_cache_new('usersessions',$dom,$defaultshash{'usersessions'},3600); if (ref($lastactref) eq 'HASH') { $lastactref->{'domdefaults'} = 1; - $lastactref->{'usersessions'} = 1; } if (keys(%changes) > 0) { my %lt = &usersession_titles(); @@ -13215,21 +10641,6 @@ sub modify_usersessions { $resulttext .= '</ul>'; } } - if ($changes{'offloadnow'}) { - if (ref($defaultshash{'usersessions'}{'offloadnow'}) eq 'HASH') { - if (keys(%{$defaultshash{'usersessions'}{'offloadnow'}}) > 0) { - $resulttext .= '<li>'.&mt('Switch active users on next access, for server(s):').'<ul>'; - foreach my $lonhost (sort(keys(%{$defaultshash{'usersessions'}{'offloadnow'}}))) { - $resulttext .= '<li>'.$lonhost.'</li>'; - } - $resulttext .= '</ul>'; - } else { - $resulttext .= '<li>'.&mt('No servers now set to switch active users on next access.'); - } - } else { - $resulttext .= '<li>'.&mt('No servers now set to switch active users on next access.').'</li>'; - } - } $resulttext .= '</ul>'; } else { $resulttext = $nochgmsg; @@ -13251,16 +10662,15 @@ sub modify_loadbalancing { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); my %servers = &Apache::lonnet::internet_dom_servers($dom); - my %libraryservers = &Apache::lonnet::get_servers($dom,'library'); my @sparestypes = ('primary','default'); my %typetitles = &sparestype_titles(); my $resulttext; - my (%currbalancer,%currtargets,%currrules,%existing,%currcookies); + my (%currbalancer,%currtargets,%currrules,%existing); if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; } &get_loadbalancers_config(\%servers,\%existing,\%currbalancer, - \%currtargets,\%currrules,\%currcookies); + \%currtargets,\%currrules); my ($saveloadbalancing,%defaultshash,%changes); my ($alltypes,$othertypes,$titles) = &loadbalancing_titles($dom,$intdom,$usertypes,$types); @@ -13304,24 +10714,7 @@ sub modify_loadbalancing { push(@offloadto,$target); } } - } - if ($env{'form.loadbalancing_target_'.$i.'_hosthere'} eq $sparetype) { - unless(grep(/^\Q$balancer\E$/,@offloadto)) { - push(@offloadto,$balancer); - } - } - $defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype} = \@offloadto; - } - if ($env{'form.loadbalancing_cookie_'.$i}) { - $defaultshash{'loadbalancing'}{$balancer}{'cookie'} = 1; - if (exists($currbalancer{$balancer})) { - unless ($currcookies{$balancer}) { - $changes{'curr'}{$balancer}{'cookie'} = 1; - } - } - } elsif (exists($currbalancer{$balancer})) { - if ($currcookies{$balancer}) { - $changes{'curr'}{$balancer}{'cookie'} = 1; + $defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype} = \@offloadto; } } if (ref($currtargets{$balancer}) eq 'HASH') { @@ -13360,10 +10753,7 @@ sub modify_loadbalancing { $rule = $env{'form.loadbalancing_rules_'.$i.'_'.$type}; } if ($rule eq 'specific') { - my $specifiedhost = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type}; - if (exists($servers{$specifiedhost})) { - $rule = $specifiedhost; - } + $rule = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type}; } $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type} = $rule; if (ref($currrules{$balancer}) eq 'HASH') { @@ -13385,22 +10775,20 @@ sub modify_loadbalancing { \%defaultshash,$dom); if ($putresult eq 'ok') { if (keys(%changes) > 0) { - my %toupdate; if (ref($changes{'delete'}) eq 'ARRAY') { foreach my $balancer (sort(@{$changes{'delete'}})) { $resulttext .= '<li>'.&mt('Load Balancing discontinued for: [_1]',$balancer).'</li>'; - $toupdate{$balancer} = 1; + my $cachekey = &escape('loadbalancing').':'.&escape($dom); + &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]); } } if (ref($changes{'add'}) eq 'ARRAY') { foreach my $balancer (sort(@{$changes{'add'}})) { $resulttext .= '<li>'.&mt('Load Balancing enabled for: [_1]',$balancer); - $toupdate{$balancer} = 1; } } if (ref($changes{'curr'}) eq 'HASH') { foreach my $balancer (sort(keys(%{$changes{'curr'}}))) { - $toupdate{$balancer} = 1; if (ref($changes{'curr'}{$balancer}) eq 'HASH') { if ($changes{'curr'}{$balancer}{'targets'}) { my %offloadstr; @@ -13437,38 +10825,8 @@ sub modify_loadbalancing { if ($rule eq '') { $balancetext = $ruletitles{'default'}; } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') || - ($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) { - if (($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) { - foreach my $sparetype (@sparestypes) { - if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') { - map { $toupdate{$_} = 1; } (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}}); - } - } - foreach my $item (@{$alltypes}) { - next if ($item =~ /^_LC_ipchange/); - my $hasrule = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$item}; - if ($hasrule eq 'homeserver') { - map { $toupdate{$_} = 1; } (keys(%libraryservers)); - } else { - unless (($hasrule eq 'default') || ($hasrule eq 'none') || ($hasrule eq 'externalbalancer')) { - if ($servers{$hasrule}) { - $toupdate{$hasrule} = 1; - } - } - } - } - if (($rule eq 'balancer') || ($rule eq 'offloadedto')) { - $balancetext = $ruletitles{$rule}; - } else { - my $receiver = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type}; - $balancetext = $ruletitles{'particular'}.' '.$receiver; - if ($receiver) { - $toupdate{$receiver}; - } - } - } else { - $balancetext = $ruletitles{$rule}; - } + ($rule eq 'balancer') || ($rule eq 'offloadedto')) { + $balancetext = $ruletitles{$rule}; } else { $balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type}); } @@ -13477,29 +10835,8 @@ sub modify_loadbalancing { } } } - if ($changes{'curr'}{$balancer}{'cookie'}) { - $resulttext .= '<li>'.&mt('Load Balancer: [_1] -- cookie use enabled', - $balancer).'</li>'; - } - if (keys(%toupdate)) { - my %thismachine; - my $updatedhere; - my $cachetime = 60*60*24; - map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); - foreach my $lonhost (keys(%toupdate)) { - if ($thismachine{$lonhost}) { - unless ($updatedhere) { - &Apache::lonnet::do_cache_new('loadbalancing',$dom, - $defaultshash{'loadbalancing'}, - $cachetime); - $updatedhere = 1; - } - } else { - my $cachekey = &escape('loadbalancing').':'.&escape($dom); - &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]); - } - } - } + my $cachekey = &escape('loadbalancing').':'.&escape($dom); + &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]); } } if ($resulttext ne '') { @@ -13560,9 +10897,24 @@ sub recurse_cat_deletes { return; } +sub get_active_dcs { + my ($dom) = @_; + my $now = time; + my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); + my %domcoords; + my $numdcs = 0; + foreach my $server (keys(%dompersonnel)) { + foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { + my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); + $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; + } + } + return %domcoords; +} + sub active_dc_picker { my ($dom,$numinrow,$inputtype,$name,%currhash) = @_; - my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']); + my %domcoords = &get_active_dcs($dom); my @domcoord = keys(%domcoords); if (keys(%currhash)) { foreach my $dc (keys(%currhash)) { @@ -13625,7 +10977,7 @@ sub active_dc_picker { my ($dcname,$dcdom) = split(':',$domcoord[0]); my $user = &Apache::loncommon::plainname($dcname,$dcdom); if ($inputtype eq 'radio') { - $table = '<input type="hidden" name="'.$name.'" value="'.$domcoord[0].'" />'.$user; + $table .= '<input type="hidden" name="'.$name.'" value="'.$domcoord[0].'" />'.$user; if ($user ne $dcname.':'.$dcdom) { $table .= ' ('.$dcname.':'.$dcdom.')'; } @@ -13634,9 +10986,9 @@ sub active_dc_picker { if (exists($currhash{$domcoord[0]})) { $check = ' checked="checked"'; } - $table = '<span class="LC_nobreak"><label>'. - '<input type="checkbox" name="'.$name.'" '. - 'value="'.$domcoord[0].'"'.$check.' />'.$user; + $table .= '<span class="LC_nobreak"><label>'. + '<input type="checkbox" name="'.$name.'" '. + 'value="'.$domcoord[0].'"'.$check.' />'.$user; if ($user ne $dcname.':'.$dcdom) { $table .= ' ('.$dcname.':'.$dcdom.')'; } @@ -13710,12 +11062,12 @@ sub lonbalance_targets_js { } push(@alltypes,'default','_LC_adv','_LC_author','_LC_internetdom','_LC_external'); $allinsttypes = join("','",@alltypes); - my (%currbalancer,%currtargets,%currrules,%existing,%currcookies); + my (%currbalancer,%currtargets,%currrules,%existing); if (ref($settings) eq 'HASH') { %existing = %{$settings}; } &get_loadbalancers_config($servers,\%existing,\%currbalancer, - \%currtargets,\%currrules,\%currcookies); + \%currtargets,\%currrules); my $balancers = join("','",sort(keys(%currbalancer))); return <<"END"; @@ -14126,8 +11478,6 @@ function updateCaptcha(caller,context) { var pubitem; var privtext; var pubtext; - var versionitem; - var versiontext; if (document.getElementById(context+'_recaptchapub')) { pubitem = document.getElementById(context+'_recaptchapub'); } else { @@ -14148,16 +11498,6 @@ function updateCaptcha(caller,context) { } else { return; } - if (document.getElementById(context+'_recaptchaversion')) { - versionitem = document.getElementById(context+'_recaptchaversion'); - } else { - return; - } - if (document.getElementById(context+'_recaptchavertxt')) { - versiontext = document.getElementById(context+'_recaptchavertxt'); - } else { - return; - } if (caller.checked) { if (caller.value == 'recaptcha') { pubitem.type = 'text'; @@ -14166,16 +11506,11 @@ function updateCaptcha(caller,context) { privitem.size = '40'; pubtext.innerHTML = "$lt{'pub'}"; privtext.innerHTML = "$lt{'priv'}"; - versionitem.type = 'text'; - versionitem.size = '3'; - versiontext.innerHTML = "$lt{'ver'}"; } else { pubitem.type = 'hidden'; privitem.type = 'hidden'; - versionitem.type = 'hidden'; pubtext.innerHTML = ''; privtext.innerHTML = ''; - versiontext.innerHTML = ''; } } return; @@ -14198,24 +11533,9 @@ function toggleDisplay(domForm,caller) { if (document.getElementById(caller)) { var divitem = document.getElementById(caller); var optionsElement = domForm.coursecredits; - var checkval = 1; - var dispval = 'block'; - var selfcreateRegExp = /^cancreate_emailverified/; if (caller == 'emailoptions') { optionsElement = domForm.cancreate_email; } - if (caller == 'studentsubmission') { - optionsElement = domForm.postsubmit; - } - if (caller == 'cloneinstcode') { - optionsElement = domForm.canclone; - checkval = 'instcode'; - } - if (selfcreateRegExp.test(caller)) { - optionsElement = domForm.elements[caller]; - checkval = 'other'; - dispval = 'inline' - } if (optionsElement.length) { var currval; for (var i=0; i<optionsElement.length; i++) { @@ -14223,8 +11543,8 @@ function toggleDisplay(domForm,caller) { currval = optionsElement[i].value; } } - if (currval == checkval) { - divitem.style.display = dispval; + if (currval == 1) { + divitem.style.display = 'block'; } else { divitem.style.display = 'none'; } @@ -14247,7 +11567,6 @@ sub captcha_phrases { original => 'original (CAPTCHA)', recaptcha => 'successor (ReCAPTCHA)', notused => 'unused', - ver => 'ReCAPTCHA version (1 or 2)', ); } @@ -14257,8 +11576,8 @@ sub devalidate_remote_domconfs { my %servers = &Apache::lonnet::internet_dom_servers($dom); my %thismachine; map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); - my @posscached = ('domainconfig','domdefaults','usersessions','directorysrch','cats'); - if (keys(%servers)) { + my @posscached = ('domainconfig','domdefaults'); + if (keys(%servers) > 1) { foreach my $server (keys(%servers)) { next if ($thismachine{$server}); my @cached;