version 1.59, 2008/06/30 15:56:23
|
version 1.64, 2008/07/19 02:28:44
|
Line 41 use LONCAPA;
|
Line 41 use LONCAPA;
|
use LONCAPA::Enrollment; |
use LONCAPA::Enrollment; |
use File::Copy; |
use File::Copy; |
use Locale::Language; |
use Locale::Language; |
|
use DateTime::TimeZone; |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
Line 150 sub handler {
|
Line 151 sub handler {
|
header => [{col1 => 'Target user has role', |
header => [{col1 => 'Target user has role', |
col2 => 'User information updateable in author context'}, |
col2 => 'User information updateable in author context'}, |
{col1 => 'Target user has role', |
{col1 => 'Target user has role', |
col2 => 'User information updateable in course context'}], |
col2 => 'User information updateable in course context'}, |
|
{col1 => "Status of user", |
|
col2 => 'Information settable when self-creating account (if directory data blank)'}], |
}, |
}, |
'scantron' => |
'scantron' => |
{ text => 'Scantron format file', |
{ text => 'Scantron format file', |
Line 390 sub print_config_box {
|
Line 393 sub print_config_box {
|
if (($action eq 'autoupdate') || ($action eq 'rolecolors') || |
if (($action eq 'autoupdate') || ($action eq 'rolecolors') || |
($action eq 'usercreation') || ($action eq 'usermodification') || |
($action eq 'usercreation') || ($action eq 'usermodification') || |
($action eq 'coursecategories')) { |
($action eq 'coursecategories')) { |
my $colspan = ($action eq 'rolecolors')?' colspan="2"':''; |
my $colspan = ''; |
|
if (($action eq 'rolecolors') || ($action eq 'coursecategories')) { |
|
$colspan = ' colspan="2"'; |
|
} |
$output .= ' |
$output .= ' |
<tr> |
<tr> |
<td> |
<td> |
Line 420 sub print_config_box {
|
Line 426 sub print_config_box {
|
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[1]->{'col1'}).'</td>'; |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[1]->{'col1'}).'</td>'; |
my $colspan = ($action eq 'coursecategories')?' colspan="2"':''; |
|
$output .= ' |
$output .= ' |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[1]->{'col2'}).'</td> |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[1]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
Line 441 sub print_config_box {
|
Line 446 sub print_config_box {
|
&print_usercreation('bottom',$dom,$settings,\$rowtotal); |
&print_usercreation('bottom',$dom,$settings,\$rowtotal); |
$rowtotal ++; |
$rowtotal ++; |
} elsif ($action eq 'usermodification') { |
} elsif ($action eq 'usermodification') { |
$output .= &print_usermodification('bottom',$dom,$settings,\$rowtotal); |
$output .= &print_usermodification('middle',$dom,$settings,\$rowtotal).' |
|
</table> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
<table class="LC_nested"> |
|
<tr class="LC_info_row"> |
|
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col1'}).'</td> |
|
<td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> </tr>'. |
|
|
|
&print_usermodification('bottom',$dom,$settings,\$rowtotal); |
|
$rowtotal ++; |
} elsif ($action eq 'coursecategories') { |
} elsif ($action eq 'coursecategories') { |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
} else { |
} else { |
Line 1682 sub user_formats_row {
|
Line 1699 sub user_formats_row {
|
); |
); |
my $css_class = $rowcount%2?' class="LC_odd_row"':''; |
my $css_class = $rowcount%2?' class="LC_odd_row"':''; |
$output = '<tr '.$css_class.'>'. |
$output = '<tr '.$css_class.'>'. |
'<td><span class="LC_nobreak">'. |
'<td><span class="LC_nobreak">'; |
&mt("Format rules to check for $text{$type}: "). |
if ($type eq 'email') { |
'</span></td>'. |
$output .= &mt("Formats disallowed for $text{$type}: "); |
'<td class="LC_left_item" colspan="2"><table>'; |
} else { |
|
$output .= &mt("Format rules to check for $text{$type}: "); |
|
} |
|
$output .= '</span></td>'. |
|
'<td class="LC_left_item" colspan="2"><table>'; |
my $rem; |
my $rem; |
if (ref($ruleorder) eq 'ARRAY') { |
if (ref($ruleorder) eq 'ARRAY') { |
for (my $i=0; $i<@{$ruleorder}; $i++) { |
for (my $i=0; $i<@{$ruleorder}; $i++) { |
Line 1773 sub print_usermodification {
|
Line 1794 sub print_usermodification {
|
$$rowtotal ++; |
$$rowtotal ++; |
$rowcount ++; |
$rowcount ++; |
} |
} |
} else { |
} elsif ($position eq 'middle') { |
$context = 'course'; |
$context = 'course'; |
$rowcount = 0; |
$rowcount = 0; |
foreach my $role ('st','ep','ta','in','cr') { |
foreach my $role ('st','ep','ta','in','cr') { |
Line 1782 sub print_usermodification {
|
Line 1803 sub print_usermodification {
|
$$rowtotal ++; |
$$rowtotal ++; |
$rowcount ++; |
$rowcount ++; |
} |
} |
|
} elsif ($position eq 'bottom') { |
|
$context = 'selfcreate'; |
|
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
|
$usertypes->{'default'} = $othertitle; |
|
if (ref($types) eq 'ARRAY') { |
|
push(@{$types},'default'); |
|
$usertypes->{'default'} = $othertitle; |
|
foreach my $status (@{$types}) { |
|
$datatable .= &modifiable_userdata_row($context,$status,$settings, |
|
$numinrow,$rowcount,$usertypes); |
|
$$rowtotal ++; |
|
$rowcount ++; |
|
} |
|
} |
} |
} |
return $datatable; |
return $datatable; |
} |
} |
Line 1847 sub defaults_titles {
|
Line 1882 sub defaults_titles {
|
sub print_scantronformat { |
sub print_scantronformat { |
my ($r,$dom,$confname,$settings,$rowtotal) = @_; |
my ($r,$dom,$confname,$settings,$rowtotal) = @_; |
my $itemcount = 1; |
my $itemcount = 1; |
my ($datatable,$css_class,$scantronurl,$is_custom,%error,%scantronurls); |
my ($datatable,$css_class,$scantronurl,$is_custom,%error,%scantronurls, |
|
%confhash); |
my $switchserver = &check_switchserver($dom,$confname); |
my $switchserver = &check_switchserver($dom,$confname); |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
default => 'Default scantron format file error', |
default => 'Default scantron format file error', |
Line 1874 sub print_scantronformat {
|
Line 1910 sub print_scantronformat {
|
); |
); |
my %md5chk; |
my %md5chk; |
foreach my $type (keys(%legacyfile)) { |
foreach my $type (keys(%legacyfile)) { |
$md5chk{$type} = split(/ /,`md5sum $legacyfile{$type}`); |
($md5chk{$type}) = split(/ /,`md5sum $legacyfile{$type}`); |
chop($md5chk{$type}); |
chomp($md5chk{$type}); |
} |
} |
if ($md5chk{'default'} ne $md5chk{'custom'}) { |
if ($md5chk{'default'} ne $md5chk{'custom'}) { |
foreach my $type (keys(%legacyfile)) { |
foreach my $type (keys(%legacyfile)) { |
($scantronurls{$type},$error{$type}) = |
($scantronurls{$type},my $error) = |
&legacy_scantronformat($r,$dom,$confname, |
&legacy_scantronformat($r,$dom,$confname, |
$type,$legacyfile{$type}, |
$type,$legacyfile{$type}, |
$scantronurls{$type}, |
$scantronurls{$type}, |
$scantronfiles{$type}); |
$scantronfiles{$type}); |
|
if ($error ne '') { |
|
$error{$type} = $error; |
|
} |
|
} |
|
if (keys(%error) == 0) { |
|
$is_custom = 1; |
|
$confhash{'scantron'}{'scantronformat'} = |
|
$scantronurls{'custom'}; |
|
my $putresult = |
|
&Apache::lonnet::put_dom('configuration', |
|
\%confhash,$dom); |
|
if ($putresult ne 'ok') { |
|
$error{'custom'} = |
|
'<span class="LC_error">'. |
|
&mt('An error occurred updating the domain configuration: [_1]',$putresult).'</span>'; |
|
} |
} |
} |
} else { |
} else { |
($scantronurls{'default'},$error{'default'}) = |
($scantronurls{'default'},my $error) = |
&legacy_scantronformat($r,$dom,$confname, |
&legacy_scantronformat($r,$dom,$confname, |
'default',$legacyfile{'default'}, |
'default',$legacyfile{'default'}, |
$scantronurls{'default'}, |
$scantronurls{'default'}, |
$scantronfiles{'default'}); |
$scantronfiles{'default'}); |
|
if ($error eq '') { |
|
$confhash{'scantron'}{'scantronformat'} = ''; |
|
my $putresult = |
|
&Apache::lonnet::put_dom('configuration', |
|
\%confhash,$dom); |
|
if ($putresult ne 'ok') { |
|
$error{'default'} = |
|
'<span class="LC_error">'. |
|
&mt('An error occurred updating the domain configuration: [_1]',$putresult).'</span>'; |
|
} |
|
} else { |
|
$error{'default'} = $error; |
|
} |
} |
} |
} |
} |
} |
} |
Line 1911 sub print_scantronformat {
|
Line 1976 sub print_scantronformat {
|
$scantronurl = $scantronurls{'default'}; |
$scantronurl = $scantronurls{'default'}; |
} |
} |
} else { |
} else { |
$scantronurl = $scantronurls{'default'}; |
if ($is_custom) { |
|
$scantronurl = $scantronurls{'custom'}; |
|
} else { |
|
$scantronurl = $scantronurls{'default'}; |
|
} |
} |
} |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'>'; |
$datatable .= '<tr'.$css_class.'>'; |
Line 1923 sub print_scantronformat {
|
Line 1992 sub print_scantronformat {
|
} else { |
} else { |
$datatable = &mt('File unavailable for display'); |
$datatable = &mt('File unavailable for display'); |
} |
} |
$datatable .= '</td><td valign="bottom">'.&mt('Upload:').'<br />'; |
$datatable .= '</td>'; |
|
if (keys(%error) == 0) { |
|
$datatable .= '<td valign="bottom">'; |
|
if (!$switchserver) { |
|
$datatable .= &mt('Upload:').'<br />'; |
|
} |
|
} else { |
|
my $errorstr; |
|
foreach my $key (sort(keys(%error))) { |
|
$errorstr .= $lt{$key}.': '.$error{$key}.'<br />'; |
|
} |
|
$datatable .= '<td>'.$errorstr; |
|
} |
} else { |
} else { |
if (keys(%error) > 0) { |
if (keys(%error) > 0) { |
my $errorstr; |
my $errorstr; |
foreach my $key (sort(keys(%error))) { |
foreach my $key (sort(keys(%error))) { |
$errorstr .= $lt{$key}.': '.$error{$key}.'<br />'; |
$errorstr .= $lt{$key}.': '.$error{$key}.'<br />'; |
} |
} |
$datatable .= '<td>'.$errorstr.'</td><td>'; |
$datatable .= '<td>'.$errorstr.'</td><td> '; |
} elsif ($scantronurl) { |
} elsif ($scantronurl) { |
$datatable .= '<td><a href="'.$scantronurl.'" target="_blank">' .&mt('Custom scantron format file').'</a>' |
$datatable .= '<td><a href="'.$scantronurl.'" target="_blank">' |
|
.&mt('Custom scantron format file').'</a>' |
.'<span class="LC_nobreak"><label>' |
.'<span class="LC_nobreak"><label>' |
.'<input type="checkbox" name="scantronformat_del"' |
.'<input type="checkbox" name="scantronformat_del"' |
.'" value="1" />'.&mt('Delete?').'</label></td>' |
.'" value="1" />'.&mt('Delete?').'</label></td>' |
Line 1990 sub print_coursecategories {
|
Line 2072 sub print_coursecategories {
|
); |
); |
my %level = &Apache::lonlocal::texthash ( |
my %level = &Apache::lonlocal::texthash ( |
dom => 'Set in "Modify Course" (Domain)', |
dom => 'Set in "Modify Course" (Domain)', |
crs => 'Set in "Parameters" (Course)', |
crs => 'Set in "Modify Parameters" (Course)', |
); |
); |
$datatable = '<tr class="LC_odd_row">'. |
$datatable = '<tr class="LC_odd_row">'. |
'<td>'.$title{'togglecats'}.'</td>'. |
'<td>'.$title{'togglecats'}.'</td>'. |
Line 2314 sub build_category_rows {
|
Line 2396 sub build_category_rows {
|
} |
} |
|
|
sub modifiable_userdata_row { |
sub modifiable_userdata_row { |
my ($context,$role,$settings,$numinrow,$rowcount) = @_; |
my ($context,$role,$settings,$numinrow,$rowcount,$usertypes) = @_; |
my $rolename; |
my $rolename; |
if ($role eq 'cr') { |
if ($context eq 'selfcreate') { |
$rolename = &mt('Custom role'); |
if (ref($usertypes) eq 'HASH') { |
|
$rolename = $usertypes->{$role}; |
|
} else { |
|
$rolename = $role; |
|
} |
} else { |
} else { |
$rolename = &Apache::lonnet::plaintext($role); |
if ($role eq 'cr') { |
|
$rolename = &mt('Custom role'); |
|
} else { |
|
$rolename = &Apache::lonnet::plaintext($role); |
|
} |
} |
} |
my @fields = ('lastname','firstname','middlename','generation', |
my @fields = ('lastname','firstname','middlename','generation', |
'permanentemail','id'); |
'permanentemail','id'); |
Line 4042 sub modify_usermodification {
|
Line 4132 sub modify_usermodification {
|
$curr_usermodification{$key} = $domconfig{'usermodification'}{$key}; |
$curr_usermodification{$key} = $domconfig{'usermodification'}{$key}; |
} |
} |
} |
} |
my @contexts = ('author','course'); |
my @contexts = ('author','course','selfcreate'); |
my %context_title = ( |
my %context_title = ( |
author => 'In author context', |
author => 'In author context', |
course => 'In course context', |
course => 'In course context', |
|
selfcreate => 'When self creating account', |
); |
); |
my @fields = ('lastname','firstname','middlename','generation', |
my @fields = ('lastname','firstname','middlename','generation', |
'permanentemail','id'); |
'permanentemail','id'); |
Line 4053 sub modify_usermodification {
|
Line 4144 sub modify_usermodification {
|
author => ['ca','aa'], |
author => ['ca','aa'], |
course => ['st','ep','ta','in','cr'], |
course => ['st','ep','ta','in','cr'], |
); |
); |
|
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
|
if (ref($types) eq 'ARRAY') { |
|
push(@{$types},'default'); |
|
$usertypes->{'default'} = $othertitle; |
|
} |
|
$roles{'selfcreate'} = $types; |
my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles(); |
my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles(); |
my %modifyhash; |
my %modifyhash; |
foreach my $context (@contexts) { |
foreach my $context (@contexts) { |
Line 4100 sub modify_usermodification {
|
Line 4197 sub modify_usermodification {
|
if (ref($changes{$context}) eq 'ARRAY') { |
if (ref($changes{$context}) eq 'ARRAY') { |
foreach my $role (@{$changes{$context}}) { |
foreach my $role (@{$changes{$context}}) { |
my $rolename; |
my $rolename; |
if ($role eq 'cr') { |
if ($context eq 'selfcreate') { |
$rolename = &mt('Custom'); |
$rolename = $role; |
|
if (ref($usertypes) eq 'HASH') { |
|
if ($usertypes->{$role} ne '') { |
|
$rolename = $usertypes->{$role}; |
|
} |
|
} |
} else { |
} else { |
$rolename = &Apache::lonnet::plaintext($role); |
if ($role eq 'cr') { |
|
$rolename = &mt('Custom'); |
|
} else { |
|
$rolename = &Apache::lonnet::plaintext($role); |
|
} |
} |
} |
my @modifiable; |
my @modifiable; |
$resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: '); |
if ($context eq 'selfcreate') { |
|
$resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Self-creation of account by users with status: [_1] ',$rolename).'</span> - '.&mt('modifiable fields (if institutional data blank): '); |
|
} else { |
|
$resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: '); |
|
} |
foreach my $field (@fields) { |
foreach my $field (@fields) { |
if ($modifyhash{$context}{$role}{$field}) { |
if ($modifyhash{$context}{$role}{$field}) { |
push(@modifiable,$fieldtitles{$field}); |
push(@modifiable,$fieldtitles{$field}); |
Line 4161 sub modify_defaults {
|
Line 4271 sub modify_defaults {
|
} |
} |
} elsif ($item eq 'timezone_def') { |
} elsif ($item eq 'timezone_def') { |
if ($newvalues{$item} ne '') { |
if ($newvalues{$item} ne '') { |
my @timezones = &DateTime::TimeZone->all_names; |
if (!DateTime::TimeZone->is_valid_name($newvalues{$item})) { |
if (!grep(/^\Q$newvalues{$item}\E/,@timezones)) { |
|
push(@errors,$item); |
push(@errors,$item); |
} |
} |
} |
} |