version 1.49, 2008/05/08 22:13:32
|
version 1.53, 2008/05/29 03:27:33
|
Line 1543 sub print_usercreation {
|
Line 1543 sub print_usercreation {
|
&Apache::lonnet::inst_userrules($dom,'username'); |
&Apache::lonnet::inst_userrules($dom,'username'); |
my %lt = &usercreation_types(); |
my %lt = &usercreation_types(); |
my %checked; |
my %checked; |
|
my @selfcreate; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if (ref($settings->{'cancreate'}) eq 'HASH') { |
if (ref($settings->{'cancreate'}) eq 'HASH') { |
foreach my $item (@creators) { |
foreach my $item (@creators) { |
$checked{$item} = $settings->{'cancreate'}{$item}; |
$checked{$item} = $settings->{'cancreate'}{$item}; |
} |
} |
|
if (ref($settings->{'cancreate'}{'selfcreate'}) eq 'ARRAY') { |
|
@selfcreate = @{$settings->{'cancreate'}{'selfcreate'}}; |
|
} elsif ($settings->{'cancreate'}{'selfcreate'} ne '') { |
|
if ($settings->{'cancreate'}{'selfcreate'} eq 'any') { |
|
@selfcreate = ('email','login','sso'); |
|
} elsif ($settings->{'cancreate'}{'selfcreate'} ne 'none') { |
|
@selfcreate = ($settings->{'cancreate'}{'selfcreate'}); |
|
} |
|
} |
} elsif (ref($settings->{'cancreate'}) eq 'ARRAY') { |
} elsif (ref($settings->{'cancreate'}) eq 'ARRAY') { |
foreach my $item (@creators) { |
foreach my $item (@creators) { |
if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) { |
if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) { |
Line 1559 sub print_usercreation {
|
Line 1569 sub print_usercreation {
|
my $rownum = 0; |
my $rownum = 0; |
foreach my $item (@creators) { |
foreach my $item (@creators) { |
$rownum ++; |
$rownum ++; |
if ($checked{$item} eq '') { |
if ($item ne 'selfcreate') { |
if ($item eq 'selfcreate') { |
if ($checked{$item} eq '') { |
$checked{$item} = 'none'; |
|
} else { |
|
$checked{$item} = 'any'; |
$checked{$item} = 'any'; |
} |
} |
} |
} |
Line 1575 sub print_usercreation {
|
Line 1583 sub print_usercreation {
|
$datatable .= '<tr'.$css_class.'>'. |
$datatable .= '<tr'.$css_class.'>'. |
'<td><span class="LC_nobreak">'.$lt{$item}. |
'<td><span class="LC_nobreak">'.$lt{$item}. |
'</span></td><td align="right">'; |
'</span></td><td align="right">'; |
my @options = ('any'); |
my @options; |
if ($item eq 'selfcreate') { |
if ($item eq 'selfcreate') { |
push(@options,('email','login','sso')); |
push(@options,('email','login','sso')); |
} else { |
} else { |
|
@options = ('any'); |
if (ref($rules) eq 'HASH') { |
if (ref($rules) eq 'HASH') { |
if (keys(%{$rules}) > 0) { |
if (keys(%{$rules}) > 0) { |
push(@options,('official','unofficial')); |
push(@options,('official','unofficial')); |
} |
} |
} |
} |
|
push(@options,'none'); |
} |
} |
push(@options,'none'); |
|
foreach my $option (@options) { |
foreach my $option (@options) { |
|
my $type = 'radio'; |
my $check = ' '; |
my $check = ' '; |
if ($checked{$item} eq $option) { |
if ($item eq 'selfcreate') { |
$check = ' checked="checked" '; |
$type = 'checkbox'; |
|
if (grep(/^\Q$option\E$/,@selfcreate)) { |
|
$check = ' checked="checked" '; |
|
} |
|
} else { |
|
if ($checked{$item} eq $option) { |
|
$check = ' checked="checked" '; |
|
} |
} |
} |
$datatable .= '<span class="LC_nobreak"><label>'. |
$datatable .= '<span class="LC_nobreak"><label>'. |
'<input type="radio" name="can_createuser_'. |
'<input type="'.$type.'" name="can_createuser_'. |
$item.'" value="'.$option.'"'.$check.'/> '. |
$item.'" value="'.$option.'"'.$check.'/> '. |
$lt{$option}.'</label> </span>'; |
$lt{$option}.'</label> </span>'; |
} |
} |
Line 1945 sub print_coursecategories {
|
Line 1962 sub print_coursecategories {
|
my $itemcount = 1; |
my $itemcount = 1; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
my (@cats,@trails,%allitems,%idx,@jsarray); |
my (@cats,@trails,%allitems,%idx,@jsarray); |
&extract_categories($settings,\@cats,\@trails,\%allitems,\%idx,\@jsarray); |
&Apache::loncommon::extract_categories($settings,\@cats,\@trails, |
|
\%allitems,\%idx,\@jsarray); |
my $maxdepth = scalar(@cats); |
my $maxdepth = scalar(@cats); |
my $colattrib = ''; |
my $colattrib = ''; |
if ($maxdepth > 2) { |
if ($maxdepth > 2) { |
Line 2050 sub coursecategories_javascript {
|
Line 2068 sub coursecategories_javascript {
|
my ($output,$jstext); |
my ($output,$jstext); |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
my (@cats,@jsarray,%idx); |
my (@cats,@jsarray,%idx); |
&gather_categories($settings,\@cats,\%idx,\@jsarray); |
&Apache::loncommon::gather_categories($settings,\@cats,\%idx,\@jsarray); |
if (@jsarray > 0) { |
if (@jsarray > 0) { |
$jstext = ' var categories = Array('.scalar(@jsarray).');'."\n"; |
$jstext = ' var categories = Array('.scalar(@jsarray).');'."\n"; |
for (my $i=0; $i<@jsarray; $i++) { |
for (my $i=0; $i<@jsarray; $i++) { |
Line 2147 sub initialize_categories {
|
Line 2165 sub initialize_categories {
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"'; |
$chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"'; |
$datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">' |
$datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">' |
.'<select name="addcategory_pos"'.$chgstr/'><option value="0">1</option>' |
.'<select name="addcategory_pos"'.$chgstr.'><option value="0">1</option>' |
.'<option value="1" selected="selected">2</option></select> ' |
.'<option value="1" selected="selected">2</option></select> ' |
.&mt('Add category').'</td><td>'.&mt('Name:') |
.&mt('Add category').'</td><td>'.&mt('Name:') |
.' <input type="text" size="20" name="addcategory_name" value="" /></td></tr>'; |
.' <input type="text" size="20" name="addcategory_name" value="" /></td></tr>'; |
Line 2553 sub modify_rolecolors {
|
Line 2571 sub modify_rolecolors {
|
sub modify_colors { |
sub modify_colors { |
my ($r,$dom,$confname,$roles,$domconfig,$confhash) = @_; |
my ($r,$dom,$confname,$roles,$domconfig,$confhash) = @_; |
my (%changes,%choices); |
my (%changes,%choices); |
my @bgs = ('pgbg','mainbg','sidebg'); |
my @bgs; |
my @links = ('link','alink','vlink'); |
my @links = ('link','alink','vlink'); |
my @logintext; |
my @logintext; |
my @images; |
my @images; |
Line 2568 sub modify_colors {
|
Line 2586 sub modify_colors {
|
} |
} |
if ($role eq 'login') { |
if ($role eq 'login') { |
@images = ('img','logo','domlogo','login'); |
@images = ('img','logo','domlogo','login'); |
|
@bgs = ('pgbg','mainbg','sidebg'); |
} else { |
} else { |
@images = ('img'); |
@images = ('img'); |
|
@bgs = ('pgbg','tabbg','sidebg'); |
} |
} |
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; |
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; |
foreach my $item (@bgs,@links,@logintext) { |
foreach my $item (@bgs,@links,@logintext) { |
Line 3640 sub modify_usercreation {
|
Line 3660 sub modify_usercreation {
|
my @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule'); |
my @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule'); |
my @contexts = ('author','course','selfcreate'); |
my @contexts = ('author','course','selfcreate'); |
foreach my $item(@contexts) { |
foreach my $item(@contexts) { |
$cancreate{$item} = $env{'form.can_createuser_'.$item}; |
|
if ($item eq 'selfcreate') { |
if ($item eq 'selfcreate') { |
|
@{$cancreate{$item}} = &Apache::loncommon::get_env_multiple('form.can_createuser_'.$item); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) { |
if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) { |
if (($cancreate{$item} eq 'any') || ($cancreate{$item} eq 'login')) { |
if (ref($cancreate{$item}) eq 'ARRAY') { |
$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.').' '.&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.'); |
if (grep(/^login$/,@{$cancreate{$item}})) { |
|
$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.').' '.&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.'); |
|
} |
} |
} |
} |
} |
|
} else { |
|
$cancreate{$item} = $env{'form.can_createuser_'.$item}; |
} |
} |
} |
} |
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') { |
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') { |
foreach my $item (@contexts) { |
foreach my $item (@contexts) { |
if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) { |
if ($item eq 'selfcreate') { |
push(@{$changes{'cancreate'}},$item); |
if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') { |
} |
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) { |
|
if (!grep(/^$curr$/,@{$cancreate{$item}})) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} |
|
} else { |
|
if ($curr_usercreation{'cancreate'}{$item} eq '') { |
|
if (@{$cancreate{$item}} > 0) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} else { |
|
if ($curr_usercreation{'cancreate'}{$item} eq 'any') { |
|
if (@{$cancreate{$item}} < 3) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} elsif ($curr_usercreation{'cancreate'}{$item} eq 'none') { |
|
if (@{$cancreate{$item}} > 0) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} elsif (!grep(/^$curr_usercreation{'cancreate'}{$item}$/,@{$cancreate{$item}})) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} |
|
} |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
foreach my $type (@{$cancreate{$item}}) { |
|
if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') { |
|
if (!grep(/^$type$/,@{$curr_usercreation{'cancreate'}{$item}})) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} elsif (($curr_usercreation{'cancreate'}{$item} ne 'any') && |
|
($curr_usercreation{'cancreate'}{$item} ne 'none')) { |
|
if ($curr_usercreation{'cancreate'}{$item} ne $type) { |
|
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
|
} |
} |
} |
} elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') { |
} elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') { |
foreach my $item (@contexts) { |
foreach my $item (@contexts) { |
Line 3761 sub modify_usercreation {
|
Line 3841 sub modify_usercreation {
|
|
|
my $putresult = &Apache::lonnet::put_dom('configuration',\%usercreation_hash, |
my $putresult = &Apache::lonnet::put_dom('configuration',\%usercreation_hash, |
$dom); |
$dom); |
|
|
|
my %selfcreatetypes = ( |
|
sso => 'users authenticated by institutional single sign on', |
|
login => 'users authenticated by institutional log-in', |
|
email => 'users who provide a valid e-mail address for use as the username', |
|
); |
if ($putresult eq 'ok') { |
if ($putresult eq 'ok') { |
if (keys(%changes) > 0) { |
if (keys(%changes) > 0) { |
$resulttext = &mt('Changes made:').'<ul>'; |
$resulttext = &mt('Changes made:').'<ul>'; |
Line 3769 sub modify_usercreation {
|
Line 3855 sub modify_usercreation {
|
foreach my $type (@{$changes{'cancreate'}}) { |
foreach my $type (@{$changes{'cancreate'}}) { |
my $chgtext = $lt{$type}.', '; |
my $chgtext = $lt{$type}.', '; |
if ($type eq 'selfcreate') { |
if ($type eq 'selfcreate') { |
if ($cancreate{$type} eq 'none') { |
if (@{$cancreate{$type}} == 0) { |
$chgtext .= &mt('creation of a new user account is not permitted.'); |
$chgtext .= &mt('creation of a new user account is not permitted.'); |
} elsif ($cancreate{$type} eq 'any') { |
} else { |
$chgtext .= &mt('creation of a new account is permitted for users authenticated by institutional log-in and SSO, and also for e-mail addresses used as usernames.'); |
$chgtext .= &mt('creation of a new account is permitted for:<ul>'); |
} elsif ($cancreate{$type} eq 'login') { |
foreach my $case (@{$cancreate{$type}}) { |
$chgtext .= &mt('creation of a new account is only permitted for users authenticated by institutional log-in.'); |
$chgtext .= '<li>'.$selfcreatetypes{$case}.'</li>'; |
} elsif ($cancreate{$type} eq 'sso') { |
} |
$chgtext .= &mt('creation of a new account is only permitted for users authenticated by institutional single sign on.'); |
$chgtext .= '</ul>'; |
} elsif ($cancreate{$type} eq 'email') { |
|
$chgtext .= &mt('creation of a new account is only permitted for users who provide a valid e-mail address for use as the username.'); |
|
} |
} |
} else { |
} else { |
if ($cancreate{$type} eq 'none') { |
if ($cancreate{$type} eq 'none') { |
Line 4156 sub modify_coursecategories {
|
Line 4240 sub modify_coursecategories {
|
if (ref($domconfig{'coursecategories'}) eq 'HASH') { |
if (ref($domconfig{'coursecategories'}) eq 'HASH') { |
if (@deletecategory > 0) { |
if (@deletecategory > 0) { |
#FIXME Need to remove category from all courses using a deleted category |
#FIXME Need to remove category from all courses using a deleted category |
&extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems); |
&Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems); |
foreach my $item (@deletecategory) { |
foreach my $item (@deletecategory) { |
if ($domconfig{'coursecategories'}{$item} ne '') { |
if ($domconfig{'coursecategories'}{$item} ne '') { |
delete($domconfig{'coursecategories'}{$item}); |
delete($domconfig{'coursecategories'}{$item}); |
Line 4216 sub modify_coursecategories {
|
Line 4300 sub modify_coursecategories {
|
} |
} |
} |
} |
my (@chkcats,@chktrails,%chkallitems); |
my (@chkcats,@chktrails,%chkallitems); |
&extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems); |
&Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems); |
if (ref($chkcats[0]) eq 'ARRAY') { |
if (ref($chkcats[0]) eq 'ARRAY') { |
my $depth = 0; |
my $depth = 0; |
my $chg = 0; |
my $chg = 0; |
Line 4238 sub modify_coursecategories {
|
Line 4322 sub modify_coursecategories {
|
} |
} |
my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom); |
my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom); |
my (@cats,@trails,%allitems); |
my (@cats,@trails,%allitems); |
&extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems); |
&Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems); |
if ($putresult eq 'ok') { |
if ($putresult eq 'ok') { |
$resulttext = &mt('Changes made:').'<ul>'; |
$resulttext = &mt('Changes made:').'<ul>'; |
if (keys(%deletions) > 0) { |
if (keys(%deletions) > 0) { |
Line 4323 sub recurse_cat_deletes {
|
Line 4407 sub recurse_cat_deletes {
|
} |
} |
} |
} |
return; |
return; |
} |
|
|
|
sub gather_categories { |
|
my ($categories,$cats,$idx,$jsarray) = @_; |
|
my %counters; |
|
my $num = 0; |
|
foreach my $item (keys(%{$categories})) { |
|
my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$item); |
|
if ($container eq '' && $depth == 0) { |
|
$cats->[$depth][$categories->{$item}] = $cat; |
|
} else { |
|
$cats->[$depth]{$container}[$categories->{$item}] = $cat; |
|
} |
|
my ($escitem,$tail) = split(/:/,$item,2); |
|
if ($counters{$tail} eq '') { |
|
$counters{$tail} = $num; |
|
$num ++; |
|
} |
|
if (ref($idx) eq 'HASH') { |
|
$idx->{$item} = $counters{$tail}; |
|
} |
|
if (ref($jsarray) eq 'ARRAY') { |
|
push(@{$jsarray->[$counters{$tail}]},$item); |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub extract_categories { |
|
my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_; |
|
if (ref($categories) eq 'HASH') { |
|
&gather_categories($categories,$cats,$idx,$jsarray); |
|
if (ref($cats->[0]) eq 'ARRAY') { |
|
for (my $i=0; $i<@{$cats->[0]}; $i++) { |
|
my $name = $cats->[0][$i]; |
|
my $item = &escape($name).'::0'; |
|
my $trailstr; |
|
if ($name eq 'instcode') { |
|
$trailstr = &mt('Official courses (with institutional codes)'); |
|
} else { |
|
$trailstr = $name; |
|
} |
|
if ($allitems->{$item} eq '') { |
|
push(@{$trails},$trailstr); |
|
$allitems->{$item} = scalar(@{$trails})-1; |
|
} |
|
my @parents = ($name); |
|
if (ref($cats->[1]{$name}) eq 'ARRAY') { |
|
for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) { |
|
my $category = $cats->[1]{$name}[$j]; |
|
&recurse_categories($cats,2,$category,$trails,$allitems,\@parents); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub recurse_categories { |
|
my ($cats,$depth,$category,$trails,$allitems,$parents) = @_; |
|
my $shallower = $depth - 1; |
|
if (ref($cats->[$depth]{$category}) eq 'ARRAY') { |
|
for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) { |
|
my $name = $cats->[$depth]{$category}[$k]; |
|
my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower; |
|
my $trailstr = join(' -> ',(@{$parents},$category)); |
|
if ($allitems->{$item} eq '') { |
|
push(@{$trails},$trailstr); |
|
$allitems->{$item} = scalar(@{$trails})-1; |
|
} |
|
my $deeper = $depth+1; |
|
push(@{$parents},$category); |
|
&recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents); |
|
pop(@{$parents}); |
|
} |
|
} else { |
|
my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower; |
|
my $trailstr = join(' -> ',(@{$parents},$category)); |
|
if ($allitems->{$item} eq '') { |
|
push(@{$trails},$trailstr); |
|
$allitems->{$item} = scalar(@{$trails})-1; |
|
} |
|
} |
|
return; |
|
} |
} |
|
|
1; |
1; |